From 66b5979d515b9f48c582144b9b3203a68c133cf3 Mon Sep 17 00:00:00 2001 From: Ewout Stortenbeker Date: Mon, 31 Oct 2022 10:51:42 +0100 Subject: [PATCH 01/14] Moved generated files to dist, ts to src --- {src => dist/cjs}/acebase-browser.d.ts | 0 {src => dist/cjs}/acebase-browser.d.ts.map | 0 {src => dist/cjs}/acebase-browser.js | 0 {src => dist/cjs}/acebase-browser.js.map | 0 {src => dist/cjs}/acebase-local.d.ts | 0 {src => dist/cjs}/acebase-local.d.ts.map | 0 {src => dist/cjs}/acebase-local.js | 0 {src => dist/cjs}/acebase-local.js.map | 0 {src => dist/cjs}/api-local.d.ts | 0 {src => dist/cjs}/api-local.d.ts.map | 0 {src => dist/cjs}/api-local.js | 0 {src => dist/cjs}/api-local.js.map | 0 {src => dist/cjs}/async-task-batch.d.ts | 0 {src => dist/cjs}/async-task-batch.d.ts.map | 0 {src => dist/cjs}/async-task-batch.js | 0 {src => dist/cjs}/async-task-batch.js.map | 0 {src => dist/cjs}/binary.d.ts | 0 {src => dist/cjs}/binary.d.ts.map | 0 {src => dist/cjs}/binary.js | 0 {src => dist/cjs}/binary.js.map | 0 {src => dist/cjs}/browser.d.ts | 0 {src => dist/cjs}/browser.d.ts.map | 0 {src => dist/cjs}/browser.js | 0 {src => dist/cjs}/browser.js.map | 0 {src => dist/cjs}/btree/binary-reader.d.ts | 0 {src => dist/cjs}/btree/binary-reader.d.ts.map | 0 {src => dist/cjs}/btree/binary-reader.js | 0 {src => dist/cjs}/btree/binary-reader.js.map | 0 {src => dist/cjs}/btree/binary-tree-builder.d.ts | 0 {src => dist/cjs}/btree/binary-tree-builder.d.ts.map | 0 {src => dist/cjs}/btree/binary-tree-builder.js | 0 {src => dist/cjs}/btree/binary-tree-builder.js.map | 0 {src => dist/cjs}/btree/binary-tree-leaf-entry-extdata.d.ts | 0 {src => dist/cjs}/btree/binary-tree-leaf-entry-extdata.d.ts.map | 0 {src => dist/cjs}/btree/binary-tree-leaf-entry-extdata.js | 0 {src => dist/cjs}/btree/binary-tree-leaf-entry-extdata.js.map | 0 {src => dist/cjs}/btree/binary-tree-leaf-entry-value.d.ts | 0 {src => dist/cjs}/btree/binary-tree-leaf-entry-value.d.ts.map | 0 {src => dist/cjs}/btree/binary-tree-leaf-entry-value.js | 0 {src => dist/cjs}/btree/binary-tree-leaf-entry-value.js.map | 0 {src => dist/cjs}/btree/binary-tree-leaf-entry.d.ts | 0 {src => dist/cjs}/btree/binary-tree-leaf-entry.d.ts.map | 0 {src => dist/cjs}/btree/binary-tree-leaf-entry.js | 0 {src => dist/cjs}/btree/binary-tree-leaf-entry.js.map | 0 {src => dist/cjs}/btree/binary-tree-leaf.d.ts | 0 {src => dist/cjs}/btree/binary-tree-leaf.d.ts.map | 0 {src => dist/cjs}/btree/binary-tree-leaf.js | 0 {src => dist/cjs}/btree/binary-tree-leaf.js.map | 0 {src => dist/cjs}/btree/binary-tree-node-entry.d.ts | 0 {src => dist/cjs}/btree/binary-tree-node-entry.d.ts.map | 0 {src => dist/cjs}/btree/binary-tree-node-entry.js | 0 {src => dist/cjs}/btree/binary-tree-node-entry.js.map | 0 {src => dist/cjs}/btree/binary-tree-node-info.d.ts | 0 {src => dist/cjs}/btree/binary-tree-node-info.d.ts.map | 0 {src => dist/cjs}/btree/binary-tree-node-info.js | 0 {src => dist/cjs}/btree/binary-tree-node-info.js.map | 0 {src => dist/cjs}/btree/binary-tree-node.d.ts | 0 {src => dist/cjs}/btree/binary-tree-node.d.ts.map | 0 {src => dist/cjs}/btree/binary-tree-node.js | 0 {src => dist/cjs}/btree/binary-tree-node.js.map | 0 {src => dist/cjs}/btree/binary-tree-transaction-operation.d.ts | 0 .../cjs}/btree/binary-tree-transaction-operation.d.ts.map | 0 {src => dist/cjs}/btree/binary-tree-transaction-operation.js | 0 {src => dist/cjs}/btree/binary-tree-transaction-operation.js.map | 0 {src => dist/cjs}/btree/binary-tree.d.ts | 0 {src => dist/cjs}/btree/binary-tree.d.ts.map | 0 {src => dist/cjs}/btree/binary-tree.js | 0 {src => dist/cjs}/btree/binary-tree.js.map | 0 {src => dist/cjs}/btree/binary-writer.d.ts | 0 {src => dist/cjs}/btree/binary-writer.d.ts.map | 0 {src => dist/cjs}/btree/binary-writer.js | 0 {src => dist/cjs}/btree/binary-writer.js.map | 0 {src => dist/cjs}/btree/config.d.ts | 0 {src => dist/cjs}/btree/config.d.ts.map | 0 {src => dist/cjs}/btree/config.js | 0 {src => dist/cjs}/btree/config.js.map | 0 {src => dist/cjs}/btree/entry-key-type.d.ts | 0 {src => dist/cjs}/btree/entry-key-type.d.ts.map | 0 {src => dist/cjs}/btree/entry-key-type.js | 0 {src => dist/cjs}/btree/entry-key-type.js.map | 0 {src => dist/cjs}/btree/index.d.ts | 0 {src => dist/cjs}/btree/index.d.ts.map | 0 {src => dist/cjs}/btree/index.js | 0 {src => dist/cjs}/btree/index.js.map | 0 {src => dist/cjs}/btree/leaf-entry-metadata.d.ts | 0 {src => dist/cjs}/btree/leaf-entry-metadata.d.ts.map | 0 {src => dist/cjs}/btree/leaf-entry-metadata.js | 0 {src => dist/cjs}/btree/leaf-entry-metadata.js.map | 0 {src => dist/cjs}/btree/leaf-entry-recordpointer.d.ts | 0 {src => dist/cjs}/btree/leaf-entry-recordpointer.d.ts.map | 0 {src => dist/cjs}/btree/leaf-entry-recordpointer.js | 0 {src => dist/cjs}/btree/leaf-entry-recordpointer.js.map | 0 {src => dist/cjs}/btree/tree-builder.d.ts | 0 {src => dist/cjs}/btree/tree-builder.d.ts.map | 0 {src => dist/cjs}/btree/tree-builder.js | 0 {src => dist/cjs}/btree/tree-builder.js.map | 0 {src => dist/cjs}/btree/tree-leaf-entry-value.d.ts | 0 {src => dist/cjs}/btree/tree-leaf-entry-value.d.ts.map | 0 {src => dist/cjs}/btree/tree-leaf-entry-value.js | 0 {src => dist/cjs}/btree/tree-leaf-entry-value.js.map | 0 {src => dist/cjs}/btree/tree-leaf-entry.d.ts | 0 {src => dist/cjs}/btree/tree-leaf-entry.d.ts.map | 0 {src => dist/cjs}/btree/tree-leaf-entry.js | 0 {src => dist/cjs}/btree/tree-leaf-entry.js.map | 0 {src => dist/cjs}/btree/tree-leaf.d.ts | 0 {src => dist/cjs}/btree/tree-leaf.d.ts.map | 0 {src => dist/cjs}/btree/tree-leaf.js | 0 {src => dist/cjs}/btree/tree-leaf.js.map | 0 {src => dist/cjs}/btree/tree-node-entry.d.ts | 0 {src => dist/cjs}/btree/tree-node-entry.d.ts.map | 0 {src => dist/cjs}/btree/tree-node-entry.js | 0 {src => dist/cjs}/btree/tree-node-entry.js.map | 0 {src => dist/cjs}/btree/tree-node.d.ts | 0 {src => dist/cjs}/btree/tree-node.d.ts.map | 0 {src => dist/cjs}/btree/tree-node.js | 0 {src => dist/cjs}/btree/tree-node.js.map | 0 {src => dist/cjs}/btree/tree.d.ts | 0 {src => dist/cjs}/btree/tree.d.ts.map | 0 {src => dist/cjs}/btree/tree.js | 0 {src => dist/cjs}/btree/tree.js.map | 0 {src => dist/cjs}/btree/tx.d.ts | 0 {src => dist/cjs}/btree/tx.d.ts.map | 0 {src => dist/cjs}/btree/tx.js | 0 {src => dist/cjs}/btree/tx.js.map | 0 {src => dist/cjs}/btree/typesafe-compare.d.ts | 0 {src => dist/cjs}/btree/typesafe-compare.d.ts.map | 0 {src => dist/cjs}/btree/typesafe-compare.js | 0 {src => dist/cjs}/btree/typesafe-compare.js.map | 0 {src => dist/cjs}/btree/utils.d.ts | 0 {src => dist/cjs}/btree/utils.d.ts.map | 0 {src => dist/cjs}/btree/utils.js | 0 {src => dist/cjs}/btree/utils.js.map | 0 {src => dist/cjs}/data-index/array-index-query-hint.d.ts | 0 {src => dist/cjs}/data-index/array-index-query-hint.d.ts.map | 0 {src => dist/cjs}/data-index/array-index-query-hint.js | 0 {src => dist/cjs}/data-index/array-index-query-hint.js.map | 0 {src => dist/cjs}/data-index/array-index.d.ts | 0 {src => dist/cjs}/data-index/array-index.d.ts.map | 0 {src => dist/cjs}/data-index/array-index.js | 0 {src => dist/cjs}/data-index/array-index.js.map | 0 {src => dist/cjs}/data-index/data-index.d.ts | 0 {src => dist/cjs}/data-index/data-index.d.ts.map | 0 {src => dist/cjs}/data-index/data-index.js | 0 {src => dist/cjs}/data-index/data-index.js.map | 0 {src => dist/cjs}/data-index/fulltext-index-query-hint.d.ts | 0 {src => dist/cjs}/data-index/fulltext-index-query-hint.d.ts.map | 0 {src => dist/cjs}/data-index/fulltext-index-query-hint.js | 0 {src => dist/cjs}/data-index/fulltext-index-query-hint.js.map | 0 {src => dist/cjs}/data-index/fulltext-index.d.ts | 0 {src => dist/cjs}/data-index/fulltext-index.d.ts.map | 0 {src => dist/cjs}/data-index/fulltext-index.js | 0 {src => dist/cjs}/data-index/fulltext-index.js.map | 0 {src => dist/cjs}/data-index/geo-index.d.ts | 0 {src => dist/cjs}/data-index/geo-index.d.ts.map | 0 {src => dist/cjs}/data-index/geo-index.js | 0 {src => dist/cjs}/data-index/geo-index.js.map | 0 {src => dist/cjs}/data-index/index.d.ts | 0 {src => dist/cjs}/data-index/index.d.ts.map | 0 {src => dist/cjs}/data-index/index.js | 0 {src => dist/cjs}/data-index/index.js.map | 0 {src => dist/cjs}/data-index/options.d.ts | 0 {src => dist/cjs}/data-index/options.d.ts.map | 0 {src => dist/cjs}/data-index/options.js | 0 {src => dist/cjs}/data-index/options.js.map | 0 {src => dist/cjs}/data-index/query-hint.d.ts | 0 {src => dist/cjs}/data-index/query-hint.d.ts.map | 0 {src => dist/cjs}/data-index/query-hint.js | 0 {src => dist/cjs}/data-index/query-hint.js.map | 0 {src => dist/cjs}/data-index/query-results.d.ts | 0 {src => dist/cjs}/data-index/query-results.d.ts.map | 0 {src => dist/cjs}/data-index/query-results.js | 0 {src => dist/cjs}/data-index/query-results.js.map | 0 {src => dist/cjs}/data-index/query-stats.d.ts | 0 {src => dist/cjs}/data-index/query-stats.d.ts.map | 0 {src => dist/cjs}/data-index/query-stats.js | 0 {src => dist/cjs}/data-index/query-stats.js.map | 0 {src => dist/cjs}/data-index/shared.d.ts | 0 {src => dist/cjs}/data-index/shared.d.ts.map | 0 {src => dist/cjs}/data-index/shared.js | 0 {src => dist/cjs}/data-index/shared.js.map | 0 {src => dist/cjs}/detailed-error.d.ts | 0 {src => dist/cjs}/detailed-error.d.ts.map | 0 {src => dist/cjs}/detailed-error.js | 0 {src => dist/cjs}/detailed-error.js.map | 0 {src => dist/cjs}/geohash.d.ts | 0 {src => dist/cjs}/geohash.d.ts.map | 0 {src => dist/cjs}/geohash.js | 0 {src => dist/cjs}/geohash.js.map | 0 {src => dist/cjs}/index.d.ts | 0 {src => dist/cjs}/index.d.ts.map | 0 {src => dist/cjs}/index.js | 0 {src => dist/cjs}/index.js.map | 0 {src => dist/cjs}/ipc/browser.d.ts | 0 {src => dist/cjs}/ipc/browser.d.ts.map | 0 {src => dist/cjs}/ipc/browser.js | 0 {src => dist/cjs}/ipc/browser.js.map | 0 {src => dist/cjs}/ipc/index.d.ts | 0 {src => dist/cjs}/ipc/index.d.ts.map | 0 {src => dist/cjs}/ipc/index.js | 0 {src => dist/cjs}/ipc/index.js.map | 0 {src => dist/cjs}/ipc/ipc.d.ts | 0 {src => dist/cjs}/ipc/ipc.d.ts.map | 0 {src => dist/cjs}/ipc/ipc.js | 0 {src => dist/cjs}/ipc/ipc.js.map | 0 {src => dist/cjs}/ipc/remote.d.ts | 0 {src => dist/cjs}/ipc/remote.d.ts.map | 0 {src => dist/cjs}/ipc/remote.js | 0 {src => dist/cjs}/ipc/remote.js.map | 0 {src => dist/cjs}/node-address.d.ts | 0 {src => dist/cjs}/node-address.d.ts.map | 0 {src => dist/cjs}/node-address.js | 0 {src => dist/cjs}/node-address.js.map | 0 {src => dist/cjs}/node-cache.d.ts | 0 {src => dist/cjs}/node-cache.d.ts.map | 0 {src => dist/cjs}/node-cache.js | 0 {src => dist/cjs}/node-cache.js.map | 0 {src => dist/cjs}/node-changes.d.ts | 0 {src => dist/cjs}/node-changes.d.ts.map | 0 {src => dist/cjs}/node-changes.js | 0 {src => dist/cjs}/node-changes.js.map | 0 {src => dist/cjs}/node-errors.d.ts | 0 {src => dist/cjs}/node-errors.d.ts.map | 0 {src => dist/cjs}/node-errors.js | 0 {src => dist/cjs}/node-errors.js.map | 0 {src => dist/cjs}/node-info.d.ts | 0 {src => dist/cjs}/node-info.d.ts.map | 0 {src => dist/cjs}/node-info.js | 0 {src => dist/cjs}/node-info.js.map | 0 {src => dist/cjs}/node-lock.d.ts | 0 {src => dist/cjs}/node-lock.d.ts.map | 0 {src => dist/cjs}/node-lock.js | 0 {src => dist/cjs}/node-lock.js.map | 0 {src => dist/cjs}/node-transaction.d.ts | 0 {src => dist/cjs}/node-transaction.d.ts.map | 0 {src => dist/cjs}/node-transaction.js | 0 {src => dist/cjs}/node-transaction.js.map | 0 {src => dist/cjs}/node-value-types.d.ts | 0 {src => dist/cjs}/node-value-types.d.ts.map | 0 {src => dist/cjs}/node-value-types.js | 0 {src => dist/cjs}/node-value-types.js.map | 0 {src => dist/cjs}/node.d.ts | 0 {src => dist/cjs}/node.d.ts.map | 0 {src => dist/cjs}/node.js | 0 {src => dist/cjs}/node.js.map | 0 {src => dist/cjs}/promise-fs/browser.d.ts | 0 {src => dist/cjs}/promise-fs/browser.d.ts.map | 0 {src => dist/cjs}/promise-fs/browser.js | 0 {src => dist/cjs}/promise-fs/browser.js.map | 0 {src => dist/cjs}/promise-fs/index.d.ts | 0 {src => dist/cjs}/promise-fs/index.d.ts.map | 0 {src => dist/cjs}/promise-fs/index.js | 0 {src => dist/cjs}/promise-fs/index.js.map | 0 {src => dist/cjs}/query.d.ts | 0 {src => dist/cjs}/query.d.ts.map | 0 {src => dist/cjs}/query.js | 0 {src => dist/cjs}/query.js.map | 0 {src => dist/cjs}/quicksort.d.ts | 0 {src => dist/cjs}/quicksort.d.ts.map | 0 {src => dist/cjs}/quicksort.js | 0 {src => dist/cjs}/quicksort.js.map | 0 {src => dist/cjs}/storage/binary/index.d.ts | 0 {src => dist/cjs}/storage/binary/index.d.ts.map | 0 {src => dist/cjs}/storage/binary/index.js | 0 {src => dist/cjs}/storage/binary/index.js.map | 0 {src => dist/cjs}/storage/binary/node-address.d.ts | 0 {src => dist/cjs}/storage/binary/node-address.d.ts.map | 0 {src => dist/cjs}/storage/binary/node-address.js | 0 {src => dist/cjs}/storage/binary/node-address.js.map | 0 {src => dist/cjs}/storage/binary/node-info.d.ts | 0 {src => dist/cjs}/storage/binary/node-info.d.ts.map | 0 {src => dist/cjs}/storage/binary/node-info.js | 0 {src => dist/cjs}/storage/binary/node-info.js.map | 0 {src => dist/cjs}/storage/context.d.ts | 0 {src => dist/cjs}/storage/context.d.ts.map | 0 {src => dist/cjs}/storage/context.js | 0 {src => dist/cjs}/storage/context.js.map | 0 {src => dist/cjs}/storage/create-index.d.ts | 0 {src => dist/cjs}/storage/create-index.d.ts.map | 0 {src => dist/cjs}/storage/create-index.js | 0 {src => dist/cjs}/storage/create-index.js.map | 0 {src => dist/cjs}/storage/custom/helpers.d.ts | 0 {src => dist/cjs}/storage/custom/helpers.d.ts.map | 0 {src => dist/cjs}/storage/custom/helpers.js | 0 {src => dist/cjs}/storage/custom/helpers.js.map | 0 {src => dist/cjs}/storage/custom/index.d.ts | 0 {src => dist/cjs}/storage/custom/index.d.ts.map | 0 {src => dist/cjs}/storage/custom/index.js | 0 {src => dist/cjs}/storage/custom/index.js.map | 0 {src => dist/cjs}/storage/custom/indexed-db/index.d.ts | 0 {src => dist/cjs}/storage/custom/indexed-db/index.d.ts.map | 0 {src => dist/cjs}/storage/custom/indexed-db/index.js | 0 {src => dist/cjs}/storage/custom/indexed-db/index.js.map | 0 {src => dist/cjs}/storage/custom/indexed-db/settings.d.ts | 0 {src => dist/cjs}/storage/custom/indexed-db/settings.d.ts.map | 0 {src => dist/cjs}/storage/custom/indexed-db/settings.js | 0 {src => dist/cjs}/storage/custom/indexed-db/settings.js.map | 0 {src => dist/cjs}/storage/custom/indexed-db/transaction.d.ts | 0 {src => dist/cjs}/storage/custom/indexed-db/transaction.d.ts.map | 0 {src => dist/cjs}/storage/custom/indexed-db/transaction.js | 0 {src => dist/cjs}/storage/custom/indexed-db/transaction.js.map | 0 {src => dist/cjs}/storage/custom/local-storage/index.d.ts | 0 {src => dist/cjs}/storage/custom/local-storage/index.d.ts.map | 0 {src => dist/cjs}/storage/custom/local-storage/index.js | 0 {src => dist/cjs}/storage/custom/local-storage/index.js.map | 0 {src => dist/cjs}/storage/custom/local-storage/interface.d.ts | 0 {src => dist/cjs}/storage/custom/local-storage/interface.d.ts.map | 0 {src => dist/cjs}/storage/custom/local-storage/interface.js | 0 {src => dist/cjs}/storage/custom/local-storage/interface.js.map | 0 .../cjs}/storage/custom/local-storage/local-storage-like.js | 0 .../cjs}/storage/custom/local-storage/local-storage-like.js.map | 0 {src => dist/cjs}/storage/custom/local-storage/settings.d.ts | 0 {src => dist/cjs}/storage/custom/local-storage/settings.d.ts.map | 0 {src => dist/cjs}/storage/custom/local-storage/settings.js | 0 {src => dist/cjs}/storage/custom/local-storage/settings.js.map | 0 {src => dist/cjs}/storage/custom/local-storage/transaction.d.ts | 0 .../cjs}/storage/custom/local-storage/transaction.d.ts.map | 0 {src => dist/cjs}/storage/custom/local-storage/transaction.js | 0 {src => dist/cjs}/storage/custom/local-storage/transaction.js.map | 0 {src => dist/cjs}/storage/index.d.ts | 0 {src => dist/cjs}/storage/index.d.ts.map | 0 {src => dist/cjs}/storage/index.js | 0 {src => dist/cjs}/storage/index.js.map | 0 {src => dist/cjs}/storage/indexes.d.ts | 0 {src => dist/cjs}/storage/indexes.d.ts.map | 0 {src => dist/cjs}/storage/indexes.js | 0 {src => dist/cjs}/storage/indexes.js.map | 0 {src => dist/cjs}/storage/mssql/index.d.ts | 0 {src => dist/cjs}/storage/mssql/index.d.ts.map | 0 {src => dist/cjs}/storage/mssql/index.js | 0 {src => dist/cjs}/storage/mssql/index.js.map | 0 {src => dist/cjs}/storage/sqlite/index.d.ts | 0 {src => dist/cjs}/storage/sqlite/index.d.ts.map | 0 {src => dist/cjs}/storage/sqlite/index.js | 0 {src => dist/cjs}/storage/sqlite/index.js.map | 0 {src => dist/cjs}/storage/storage-custom.js | 0 {src => dist/cjs}/storage/storage-custom.js.map | 0 {src => dist/cjs}/thread-safe.d.ts | 0 {src => dist/cjs}/thread-safe.d.ts.map | 0 {src => dist/cjs}/thread-safe.js | 0 {src => dist/cjs}/thread-safe.js.map | 0 {src => dist/cjs}/unidecode-module.d.ts | 0 {src => dist/cjs}/unidecode-module.d.ts.map | 0 {src => dist/cjs}/unidecode-module.js | 0 {src => dist/cjs}/unidecode-module.js.map | 0 {src => dist/cjs}/unidecode.d.ts | 0 {src => dist/cjs}/unidecode.d.ts.map | 0 {src => dist/cjs}/unidecode.js | 0 {src => dist/cjs}/unidecode.js.map | 0 src/{ts => }/acebase-browser.ts | 0 src/{ts => }/acebase-local.ts | 0 src/{ts => }/api-local.ts | 0 src/{ts => }/async-task-batch.ts | 0 src/{ts => }/binary.ts | 0 src/{ts => }/browser.ts | 0 src/{ts => }/btree/binary-reader.ts | 0 src/{ts => }/btree/binary-tree-builder.ts | 0 src/{ts => }/btree/binary-tree-leaf-entry-extdata.ts | 0 src/{ts => }/btree/binary-tree-leaf-entry-value.ts | 0 src/{ts => }/btree/binary-tree-leaf-entry.ts | 0 src/{ts => }/btree/binary-tree-leaf.ts | 0 src/{ts => }/btree/binary-tree-node-entry.ts | 0 src/{ts => }/btree/binary-tree-node-info.ts | 0 src/{ts => }/btree/binary-tree-node.ts | 0 src/{ts => }/btree/binary-tree-transaction-operation.ts | 0 src/{ts => }/btree/binary-tree.ts | 0 src/{ts => }/btree/binary-writer.ts | 0 src/{ts => }/btree/config.ts | 0 src/{ts => }/btree/entry-key-type.ts | 0 src/{ts => }/btree/index.ts | 0 src/{ts => }/btree/leaf-entry-metadata.ts | 0 src/{ts => }/btree/leaf-entry-recordpointer.ts | 0 src/{ts => }/btree/tree-builder.ts | 0 src/{ts => }/btree/tree-leaf-entry-value.ts | 0 src/{ts => }/btree/tree-leaf-entry.ts | 0 src/{ts => }/btree/tree-leaf.ts | 0 src/{ts => }/btree/tree-node-entry.ts | 0 src/{ts => }/btree/tree-node.ts | 0 src/{ts => }/btree/tree.ts | 0 src/{ts => }/btree/tx.ts | 0 src/{ts => }/btree/typesafe-compare.ts | 0 src/{ts => }/btree/utils.ts | 0 src/{ts => }/data-index/array-index-query-hint.ts | 0 src/{ts => }/data-index/array-index.ts | 0 src/{ts => }/data-index/data-index.ts | 0 src/{ts => }/data-index/fulltext-index-query-hint.ts | 0 src/{ts => }/data-index/fulltext-index.ts | 0 src/{ts => }/data-index/geo-index.ts | 0 src/{ts => }/data-index/index.ts | 0 src/{ts => }/data-index/options.ts | 0 src/{ts => }/data-index/query-hint.ts | 0 src/{ts => }/data-index/query-results.ts | 0 src/{ts => }/data-index/query-stats.ts | 0 src/{ts => }/data-index/shared.ts | 0 src/{ts => }/detailed-error.ts | 0 src/{ts => }/geohash.ts | 0 src/{ts => }/index.ts | 0 src/{ts => }/ipc/browser.ts | 0 src/{ts => }/ipc/index.ts | 0 src/{ts => }/ipc/ipc.ts | 0 src/{ts => }/ipc/remote.ts | 0 src/{ts => }/node-address.ts | 0 src/{ts => }/node-cache.ts | 0 src/{ts => }/node-changes.ts | 0 src/{ts => }/node-errors.ts | 0 src/{ts => }/node-info.ts | 0 src/{ts => }/node-lock.ts | 0 src/{ts => }/node-transaction.ts | 0 src/{ts => }/node-value-types.ts | 0 src/{ts => }/node.ts | 0 src/{not-supported.js => not-supported.ts} | 0 src/{ts => }/promise-fs/browser.ts | 0 src/{ts => }/promise-fs/index.ts | 0 src/{ts => }/query.ts | 0 src/{ts => }/quicksort.ts | 0 src/{ts => }/storage/binary/index.ts | 0 src/{ts => }/storage/binary/node-address.ts | 0 src/{ts => }/storage/binary/node-info.ts | 0 src/{ts => }/storage/context.ts | 0 src/{ts => }/storage/create-index.ts | 0 src/{ts => }/storage/custom/helpers.ts | 0 src/{ts => }/storage/custom/index.ts | 0 src/{ts => }/storage/custom/indexed-db/index.ts | 0 src/{ts => }/storage/custom/indexed-db/settings.ts | 0 src/{ts => }/storage/custom/indexed-db/transaction.ts | 0 src/{ts => }/storage/custom/local-storage/index.ts | 0 src/{ts => }/storage/custom/local-storage/interface.ts | 0 src/{ts => }/storage/custom/local-storage/settings.ts | 0 src/{ts => }/storage/custom/local-storage/transaction.ts | 0 src/{ts => }/storage/index.ts | 0 src/{ts => }/storage/indexes.ts | 0 src/{ts => }/storage/mssql/index.ts | 0 src/{ts => }/storage/sqlite/index.ts | 0 src/{ts => }/thread-safe.ts | 0 src/{ts => }/unidecode-module.ts | 0 src/{ts => }/unidecode.ts | 0 435 files changed, 0 insertions(+), 0 deletions(-) rename {src => dist/cjs}/acebase-browser.d.ts (100%) rename {src => dist/cjs}/acebase-browser.d.ts.map (100%) rename {src => dist/cjs}/acebase-browser.js (100%) rename {src => dist/cjs}/acebase-browser.js.map (100%) rename {src => dist/cjs}/acebase-local.d.ts (100%) rename {src => dist/cjs}/acebase-local.d.ts.map (100%) rename {src => dist/cjs}/acebase-local.js (100%) rename {src => dist/cjs}/acebase-local.js.map (100%) rename {src => dist/cjs}/api-local.d.ts (100%) rename {src => dist/cjs}/api-local.d.ts.map (100%) rename {src => dist/cjs}/api-local.js (100%) rename {src => dist/cjs}/api-local.js.map (100%) rename {src => dist/cjs}/async-task-batch.d.ts (100%) rename {src => dist/cjs}/async-task-batch.d.ts.map (100%) rename {src => dist/cjs}/async-task-batch.js (100%) rename {src => dist/cjs}/async-task-batch.js.map (100%) rename {src => dist/cjs}/binary.d.ts (100%) rename {src => dist/cjs}/binary.d.ts.map (100%) rename {src => dist/cjs}/binary.js (100%) rename {src => dist/cjs}/binary.js.map (100%) rename {src => dist/cjs}/browser.d.ts (100%) rename {src => dist/cjs}/browser.d.ts.map (100%) rename {src => dist/cjs}/browser.js (100%) rename {src => dist/cjs}/browser.js.map (100%) rename {src => dist/cjs}/btree/binary-reader.d.ts (100%) rename {src => dist/cjs}/btree/binary-reader.d.ts.map (100%) rename {src => dist/cjs}/btree/binary-reader.js (100%) rename {src => dist/cjs}/btree/binary-reader.js.map (100%) rename {src => dist/cjs}/btree/binary-tree-builder.d.ts (100%) rename {src => dist/cjs}/btree/binary-tree-builder.d.ts.map (100%) rename {src => dist/cjs}/btree/binary-tree-builder.js (100%) rename {src => dist/cjs}/btree/binary-tree-builder.js.map (100%) rename {src => dist/cjs}/btree/binary-tree-leaf-entry-extdata.d.ts (100%) rename {src => dist/cjs}/btree/binary-tree-leaf-entry-extdata.d.ts.map (100%) rename {src => dist/cjs}/btree/binary-tree-leaf-entry-extdata.js (100%) rename {src => dist/cjs}/btree/binary-tree-leaf-entry-extdata.js.map (100%) rename {src => dist/cjs}/btree/binary-tree-leaf-entry-value.d.ts (100%) rename {src => dist/cjs}/btree/binary-tree-leaf-entry-value.d.ts.map (100%) rename {src => dist/cjs}/btree/binary-tree-leaf-entry-value.js (100%) rename {src => dist/cjs}/btree/binary-tree-leaf-entry-value.js.map (100%) rename {src => dist/cjs}/btree/binary-tree-leaf-entry.d.ts (100%) rename {src => dist/cjs}/btree/binary-tree-leaf-entry.d.ts.map (100%) rename {src => dist/cjs}/btree/binary-tree-leaf-entry.js (100%) rename {src => dist/cjs}/btree/binary-tree-leaf-entry.js.map (100%) rename {src => dist/cjs}/btree/binary-tree-leaf.d.ts (100%) rename {src => dist/cjs}/btree/binary-tree-leaf.d.ts.map (100%) rename {src => dist/cjs}/btree/binary-tree-leaf.js (100%) rename {src => dist/cjs}/btree/binary-tree-leaf.js.map (100%) rename {src => dist/cjs}/btree/binary-tree-node-entry.d.ts (100%) rename {src => dist/cjs}/btree/binary-tree-node-entry.d.ts.map (100%) rename {src => dist/cjs}/btree/binary-tree-node-entry.js (100%) rename {src => dist/cjs}/btree/binary-tree-node-entry.js.map (100%) rename {src => dist/cjs}/btree/binary-tree-node-info.d.ts (100%) rename {src => dist/cjs}/btree/binary-tree-node-info.d.ts.map (100%) rename {src => dist/cjs}/btree/binary-tree-node-info.js (100%) rename {src => dist/cjs}/btree/binary-tree-node-info.js.map (100%) rename {src => dist/cjs}/btree/binary-tree-node.d.ts (100%) rename {src => dist/cjs}/btree/binary-tree-node.d.ts.map (100%) rename {src => dist/cjs}/btree/binary-tree-node.js (100%) rename {src => dist/cjs}/btree/binary-tree-node.js.map (100%) rename {src => dist/cjs}/btree/binary-tree-transaction-operation.d.ts (100%) rename {src => dist/cjs}/btree/binary-tree-transaction-operation.d.ts.map (100%) rename {src => dist/cjs}/btree/binary-tree-transaction-operation.js (100%) rename {src => dist/cjs}/btree/binary-tree-transaction-operation.js.map (100%) rename {src => dist/cjs}/btree/binary-tree.d.ts (100%) rename {src => dist/cjs}/btree/binary-tree.d.ts.map (100%) rename {src => dist/cjs}/btree/binary-tree.js (100%) rename {src => dist/cjs}/btree/binary-tree.js.map (100%) rename {src => dist/cjs}/btree/binary-writer.d.ts (100%) rename {src => dist/cjs}/btree/binary-writer.d.ts.map (100%) rename {src => dist/cjs}/btree/binary-writer.js (100%) rename {src => dist/cjs}/btree/binary-writer.js.map (100%) rename {src => dist/cjs}/btree/config.d.ts (100%) rename {src => dist/cjs}/btree/config.d.ts.map (100%) rename {src => dist/cjs}/btree/config.js (100%) rename {src => dist/cjs}/btree/config.js.map (100%) rename {src => dist/cjs}/btree/entry-key-type.d.ts (100%) rename {src => dist/cjs}/btree/entry-key-type.d.ts.map (100%) rename {src => dist/cjs}/btree/entry-key-type.js (100%) rename {src => dist/cjs}/btree/entry-key-type.js.map (100%) rename {src => dist/cjs}/btree/index.d.ts (100%) rename {src => dist/cjs}/btree/index.d.ts.map (100%) rename {src => dist/cjs}/btree/index.js (100%) rename {src => dist/cjs}/btree/index.js.map (100%) rename {src => dist/cjs}/btree/leaf-entry-metadata.d.ts (100%) rename {src => dist/cjs}/btree/leaf-entry-metadata.d.ts.map (100%) rename {src => dist/cjs}/btree/leaf-entry-metadata.js (100%) rename {src => dist/cjs}/btree/leaf-entry-metadata.js.map (100%) rename {src => dist/cjs}/btree/leaf-entry-recordpointer.d.ts (100%) rename {src => dist/cjs}/btree/leaf-entry-recordpointer.d.ts.map (100%) rename {src => dist/cjs}/btree/leaf-entry-recordpointer.js (100%) rename {src => dist/cjs}/btree/leaf-entry-recordpointer.js.map (100%) rename {src => dist/cjs}/btree/tree-builder.d.ts (100%) rename {src => dist/cjs}/btree/tree-builder.d.ts.map (100%) rename {src => dist/cjs}/btree/tree-builder.js (100%) rename {src => dist/cjs}/btree/tree-builder.js.map (100%) rename {src => dist/cjs}/btree/tree-leaf-entry-value.d.ts (100%) rename {src => dist/cjs}/btree/tree-leaf-entry-value.d.ts.map (100%) rename {src => dist/cjs}/btree/tree-leaf-entry-value.js (100%) rename {src => dist/cjs}/btree/tree-leaf-entry-value.js.map (100%) rename {src => dist/cjs}/btree/tree-leaf-entry.d.ts (100%) rename {src => dist/cjs}/btree/tree-leaf-entry.d.ts.map (100%) rename {src => dist/cjs}/btree/tree-leaf-entry.js (100%) rename {src => dist/cjs}/btree/tree-leaf-entry.js.map (100%) rename {src => dist/cjs}/btree/tree-leaf.d.ts (100%) rename {src => dist/cjs}/btree/tree-leaf.d.ts.map (100%) rename {src => dist/cjs}/btree/tree-leaf.js (100%) rename {src => dist/cjs}/btree/tree-leaf.js.map (100%) rename {src => dist/cjs}/btree/tree-node-entry.d.ts (100%) rename {src => dist/cjs}/btree/tree-node-entry.d.ts.map (100%) rename {src => dist/cjs}/btree/tree-node-entry.js (100%) rename {src => dist/cjs}/btree/tree-node-entry.js.map (100%) rename {src => dist/cjs}/btree/tree-node.d.ts (100%) rename {src => dist/cjs}/btree/tree-node.d.ts.map (100%) rename {src => dist/cjs}/btree/tree-node.js (100%) rename {src => dist/cjs}/btree/tree-node.js.map (100%) rename {src => dist/cjs}/btree/tree.d.ts (100%) rename {src => dist/cjs}/btree/tree.d.ts.map (100%) rename {src => dist/cjs}/btree/tree.js (100%) rename {src => dist/cjs}/btree/tree.js.map (100%) rename {src => dist/cjs}/btree/tx.d.ts (100%) rename {src => dist/cjs}/btree/tx.d.ts.map (100%) rename {src => dist/cjs}/btree/tx.js (100%) rename {src => dist/cjs}/btree/tx.js.map (100%) rename {src => dist/cjs}/btree/typesafe-compare.d.ts (100%) rename {src => dist/cjs}/btree/typesafe-compare.d.ts.map (100%) rename {src => dist/cjs}/btree/typesafe-compare.js (100%) rename {src => dist/cjs}/btree/typesafe-compare.js.map (100%) rename {src => dist/cjs}/btree/utils.d.ts (100%) rename {src => dist/cjs}/btree/utils.d.ts.map (100%) rename {src => dist/cjs}/btree/utils.js (100%) rename {src => dist/cjs}/btree/utils.js.map (100%) rename {src => dist/cjs}/data-index/array-index-query-hint.d.ts (100%) rename {src => dist/cjs}/data-index/array-index-query-hint.d.ts.map (100%) rename {src => dist/cjs}/data-index/array-index-query-hint.js (100%) rename {src => dist/cjs}/data-index/array-index-query-hint.js.map (100%) rename {src => dist/cjs}/data-index/array-index.d.ts (100%) rename {src => dist/cjs}/data-index/array-index.d.ts.map (100%) rename {src => dist/cjs}/data-index/array-index.js (100%) rename {src => dist/cjs}/data-index/array-index.js.map (100%) rename {src => dist/cjs}/data-index/data-index.d.ts (100%) rename {src => dist/cjs}/data-index/data-index.d.ts.map (100%) rename {src => dist/cjs}/data-index/data-index.js (100%) rename {src => dist/cjs}/data-index/data-index.js.map (100%) rename {src => dist/cjs}/data-index/fulltext-index-query-hint.d.ts (100%) rename {src => dist/cjs}/data-index/fulltext-index-query-hint.d.ts.map (100%) rename {src => dist/cjs}/data-index/fulltext-index-query-hint.js (100%) rename {src => dist/cjs}/data-index/fulltext-index-query-hint.js.map (100%) rename {src => dist/cjs}/data-index/fulltext-index.d.ts (100%) rename {src => dist/cjs}/data-index/fulltext-index.d.ts.map (100%) rename {src => dist/cjs}/data-index/fulltext-index.js (100%) rename {src => dist/cjs}/data-index/fulltext-index.js.map (100%) rename {src => dist/cjs}/data-index/geo-index.d.ts (100%) rename {src => dist/cjs}/data-index/geo-index.d.ts.map (100%) rename {src => dist/cjs}/data-index/geo-index.js (100%) rename {src => dist/cjs}/data-index/geo-index.js.map (100%) rename {src => dist/cjs}/data-index/index.d.ts (100%) rename {src => dist/cjs}/data-index/index.d.ts.map (100%) rename {src => dist/cjs}/data-index/index.js (100%) rename {src => dist/cjs}/data-index/index.js.map (100%) rename {src => dist/cjs}/data-index/options.d.ts (100%) rename {src => dist/cjs}/data-index/options.d.ts.map (100%) rename {src => dist/cjs}/data-index/options.js (100%) rename {src => dist/cjs}/data-index/options.js.map (100%) rename {src => dist/cjs}/data-index/query-hint.d.ts (100%) rename {src => dist/cjs}/data-index/query-hint.d.ts.map (100%) rename {src => dist/cjs}/data-index/query-hint.js (100%) rename {src => dist/cjs}/data-index/query-hint.js.map (100%) rename {src => dist/cjs}/data-index/query-results.d.ts (100%) rename {src => dist/cjs}/data-index/query-results.d.ts.map (100%) rename {src => dist/cjs}/data-index/query-results.js (100%) rename {src => dist/cjs}/data-index/query-results.js.map (100%) rename {src => dist/cjs}/data-index/query-stats.d.ts (100%) rename {src => dist/cjs}/data-index/query-stats.d.ts.map (100%) rename {src => dist/cjs}/data-index/query-stats.js (100%) rename {src => dist/cjs}/data-index/query-stats.js.map (100%) rename {src => dist/cjs}/data-index/shared.d.ts (100%) rename {src => dist/cjs}/data-index/shared.d.ts.map (100%) rename {src => dist/cjs}/data-index/shared.js (100%) rename {src => dist/cjs}/data-index/shared.js.map (100%) rename {src => dist/cjs}/detailed-error.d.ts (100%) rename {src => dist/cjs}/detailed-error.d.ts.map (100%) rename {src => dist/cjs}/detailed-error.js (100%) rename {src => dist/cjs}/detailed-error.js.map (100%) rename {src => dist/cjs}/geohash.d.ts (100%) rename {src => dist/cjs}/geohash.d.ts.map (100%) rename {src => dist/cjs}/geohash.js (100%) rename {src => dist/cjs}/geohash.js.map (100%) rename {src => dist/cjs}/index.d.ts (100%) rename {src => dist/cjs}/index.d.ts.map (100%) rename {src => dist/cjs}/index.js (100%) rename {src => dist/cjs}/index.js.map (100%) rename {src => dist/cjs}/ipc/browser.d.ts (100%) rename {src => dist/cjs}/ipc/browser.d.ts.map (100%) rename {src => dist/cjs}/ipc/browser.js (100%) rename {src => dist/cjs}/ipc/browser.js.map (100%) rename {src => dist/cjs}/ipc/index.d.ts (100%) rename {src => dist/cjs}/ipc/index.d.ts.map (100%) rename {src => dist/cjs}/ipc/index.js (100%) rename {src => dist/cjs}/ipc/index.js.map (100%) rename {src => dist/cjs}/ipc/ipc.d.ts (100%) rename {src => dist/cjs}/ipc/ipc.d.ts.map (100%) rename {src => dist/cjs}/ipc/ipc.js (100%) rename {src => dist/cjs}/ipc/ipc.js.map (100%) rename {src => dist/cjs}/ipc/remote.d.ts (100%) rename {src => dist/cjs}/ipc/remote.d.ts.map (100%) rename {src => dist/cjs}/ipc/remote.js (100%) rename {src => dist/cjs}/ipc/remote.js.map (100%) rename {src => dist/cjs}/node-address.d.ts (100%) rename {src => dist/cjs}/node-address.d.ts.map (100%) rename {src => dist/cjs}/node-address.js (100%) rename {src => dist/cjs}/node-address.js.map (100%) rename {src => dist/cjs}/node-cache.d.ts (100%) rename {src => dist/cjs}/node-cache.d.ts.map (100%) rename {src => dist/cjs}/node-cache.js (100%) rename {src => dist/cjs}/node-cache.js.map (100%) rename {src => dist/cjs}/node-changes.d.ts (100%) rename {src => dist/cjs}/node-changes.d.ts.map (100%) rename {src => dist/cjs}/node-changes.js (100%) rename {src => dist/cjs}/node-changes.js.map (100%) rename {src => dist/cjs}/node-errors.d.ts (100%) rename {src => dist/cjs}/node-errors.d.ts.map (100%) rename {src => dist/cjs}/node-errors.js (100%) rename {src => dist/cjs}/node-errors.js.map (100%) rename {src => dist/cjs}/node-info.d.ts (100%) rename {src => dist/cjs}/node-info.d.ts.map (100%) rename {src => dist/cjs}/node-info.js (100%) rename {src => dist/cjs}/node-info.js.map (100%) rename {src => dist/cjs}/node-lock.d.ts (100%) rename {src => dist/cjs}/node-lock.d.ts.map (100%) rename {src => dist/cjs}/node-lock.js (100%) rename {src => dist/cjs}/node-lock.js.map (100%) rename {src => dist/cjs}/node-transaction.d.ts (100%) rename {src => dist/cjs}/node-transaction.d.ts.map (100%) rename {src => dist/cjs}/node-transaction.js (100%) rename {src => dist/cjs}/node-transaction.js.map (100%) rename {src => dist/cjs}/node-value-types.d.ts (100%) rename {src => dist/cjs}/node-value-types.d.ts.map (100%) rename {src => dist/cjs}/node-value-types.js (100%) rename {src => dist/cjs}/node-value-types.js.map (100%) rename {src => dist/cjs}/node.d.ts (100%) rename {src => dist/cjs}/node.d.ts.map (100%) rename {src => dist/cjs}/node.js (100%) rename {src => dist/cjs}/node.js.map (100%) rename {src => dist/cjs}/promise-fs/browser.d.ts (100%) rename {src => dist/cjs}/promise-fs/browser.d.ts.map (100%) rename {src => dist/cjs}/promise-fs/browser.js (100%) rename {src => dist/cjs}/promise-fs/browser.js.map (100%) rename {src => dist/cjs}/promise-fs/index.d.ts (100%) rename {src => dist/cjs}/promise-fs/index.d.ts.map (100%) rename {src => dist/cjs}/promise-fs/index.js (100%) rename {src => dist/cjs}/promise-fs/index.js.map (100%) rename {src => dist/cjs}/query.d.ts (100%) rename {src => dist/cjs}/query.d.ts.map (100%) rename {src => dist/cjs}/query.js (100%) rename {src => dist/cjs}/query.js.map (100%) rename {src => dist/cjs}/quicksort.d.ts (100%) rename {src => dist/cjs}/quicksort.d.ts.map (100%) rename {src => dist/cjs}/quicksort.js (100%) rename {src => dist/cjs}/quicksort.js.map (100%) rename {src => dist/cjs}/storage/binary/index.d.ts (100%) rename {src => dist/cjs}/storage/binary/index.d.ts.map (100%) rename {src => dist/cjs}/storage/binary/index.js (100%) rename {src => dist/cjs}/storage/binary/index.js.map (100%) rename {src => dist/cjs}/storage/binary/node-address.d.ts (100%) rename {src => dist/cjs}/storage/binary/node-address.d.ts.map (100%) rename {src => dist/cjs}/storage/binary/node-address.js (100%) rename {src => dist/cjs}/storage/binary/node-address.js.map (100%) rename {src => dist/cjs}/storage/binary/node-info.d.ts (100%) rename {src => dist/cjs}/storage/binary/node-info.d.ts.map (100%) rename {src => dist/cjs}/storage/binary/node-info.js (100%) rename {src => dist/cjs}/storage/binary/node-info.js.map (100%) rename {src => dist/cjs}/storage/context.d.ts (100%) rename {src => dist/cjs}/storage/context.d.ts.map (100%) rename {src => dist/cjs}/storage/context.js (100%) rename {src => dist/cjs}/storage/context.js.map (100%) rename {src => dist/cjs}/storage/create-index.d.ts (100%) rename {src => dist/cjs}/storage/create-index.d.ts.map (100%) rename {src => dist/cjs}/storage/create-index.js (100%) rename {src => dist/cjs}/storage/create-index.js.map (100%) rename {src => dist/cjs}/storage/custom/helpers.d.ts (100%) rename {src => dist/cjs}/storage/custom/helpers.d.ts.map (100%) rename {src => dist/cjs}/storage/custom/helpers.js (100%) rename {src => dist/cjs}/storage/custom/helpers.js.map (100%) rename {src => dist/cjs}/storage/custom/index.d.ts (100%) rename {src => dist/cjs}/storage/custom/index.d.ts.map (100%) rename {src => dist/cjs}/storage/custom/index.js (100%) rename {src => dist/cjs}/storage/custom/index.js.map (100%) rename {src => dist/cjs}/storage/custom/indexed-db/index.d.ts (100%) rename {src => dist/cjs}/storage/custom/indexed-db/index.d.ts.map (100%) rename {src => dist/cjs}/storage/custom/indexed-db/index.js (100%) rename {src => dist/cjs}/storage/custom/indexed-db/index.js.map (100%) rename {src => dist/cjs}/storage/custom/indexed-db/settings.d.ts (100%) rename {src => dist/cjs}/storage/custom/indexed-db/settings.d.ts.map (100%) rename {src => dist/cjs}/storage/custom/indexed-db/settings.js (100%) rename {src => dist/cjs}/storage/custom/indexed-db/settings.js.map (100%) rename {src => dist/cjs}/storage/custom/indexed-db/transaction.d.ts (100%) rename {src => dist/cjs}/storage/custom/indexed-db/transaction.d.ts.map (100%) rename {src => dist/cjs}/storage/custom/indexed-db/transaction.js (100%) rename {src => dist/cjs}/storage/custom/indexed-db/transaction.js.map (100%) rename {src => dist/cjs}/storage/custom/local-storage/index.d.ts (100%) rename {src => dist/cjs}/storage/custom/local-storage/index.d.ts.map (100%) rename {src => dist/cjs}/storage/custom/local-storage/index.js (100%) rename {src => dist/cjs}/storage/custom/local-storage/index.js.map (100%) rename {src => dist/cjs}/storage/custom/local-storage/interface.d.ts (100%) rename {src => dist/cjs}/storage/custom/local-storage/interface.d.ts.map (100%) rename {src => dist/cjs}/storage/custom/local-storage/interface.js (100%) rename {src => dist/cjs}/storage/custom/local-storage/interface.js.map (100%) rename {src => dist/cjs}/storage/custom/local-storage/local-storage-like.js (100%) rename {src => dist/cjs}/storage/custom/local-storage/local-storage-like.js.map (100%) rename {src => dist/cjs}/storage/custom/local-storage/settings.d.ts (100%) rename {src => dist/cjs}/storage/custom/local-storage/settings.d.ts.map (100%) rename {src => dist/cjs}/storage/custom/local-storage/settings.js (100%) rename {src => dist/cjs}/storage/custom/local-storage/settings.js.map (100%) rename {src => dist/cjs}/storage/custom/local-storage/transaction.d.ts (100%) rename {src => dist/cjs}/storage/custom/local-storage/transaction.d.ts.map (100%) rename {src => dist/cjs}/storage/custom/local-storage/transaction.js (100%) rename {src => dist/cjs}/storage/custom/local-storage/transaction.js.map (100%) rename {src => dist/cjs}/storage/index.d.ts (100%) rename {src => dist/cjs}/storage/index.d.ts.map (100%) rename {src => dist/cjs}/storage/index.js (100%) rename {src => dist/cjs}/storage/index.js.map (100%) rename {src => dist/cjs}/storage/indexes.d.ts (100%) rename {src => dist/cjs}/storage/indexes.d.ts.map (100%) rename {src => dist/cjs}/storage/indexes.js (100%) rename {src => dist/cjs}/storage/indexes.js.map (100%) rename {src => dist/cjs}/storage/mssql/index.d.ts (100%) rename {src => dist/cjs}/storage/mssql/index.d.ts.map (100%) rename {src => dist/cjs}/storage/mssql/index.js (100%) rename {src => dist/cjs}/storage/mssql/index.js.map (100%) rename {src => dist/cjs}/storage/sqlite/index.d.ts (100%) rename {src => dist/cjs}/storage/sqlite/index.d.ts.map (100%) rename {src => dist/cjs}/storage/sqlite/index.js (100%) rename {src => dist/cjs}/storage/sqlite/index.js.map (100%) rename {src => dist/cjs}/storage/storage-custom.js (100%) rename {src => dist/cjs}/storage/storage-custom.js.map (100%) rename {src => dist/cjs}/thread-safe.d.ts (100%) rename {src => dist/cjs}/thread-safe.d.ts.map (100%) rename {src => dist/cjs}/thread-safe.js (100%) rename {src => dist/cjs}/thread-safe.js.map (100%) rename {src => dist/cjs}/unidecode-module.d.ts (100%) rename {src => dist/cjs}/unidecode-module.d.ts.map (100%) rename {src => dist/cjs}/unidecode-module.js (100%) rename {src => dist/cjs}/unidecode-module.js.map (100%) rename {src => dist/cjs}/unidecode.d.ts (100%) rename {src => dist/cjs}/unidecode.d.ts.map (100%) rename {src => dist/cjs}/unidecode.js (100%) rename {src => dist/cjs}/unidecode.js.map (100%) rename src/{ts => }/acebase-browser.ts (100%) rename src/{ts => }/acebase-local.ts (100%) rename src/{ts => }/api-local.ts (100%) rename src/{ts => }/async-task-batch.ts (100%) rename src/{ts => }/binary.ts (100%) rename src/{ts => }/browser.ts (100%) rename src/{ts => }/btree/binary-reader.ts (100%) rename src/{ts => }/btree/binary-tree-builder.ts (100%) rename src/{ts => }/btree/binary-tree-leaf-entry-extdata.ts (100%) rename src/{ts => }/btree/binary-tree-leaf-entry-value.ts (100%) rename src/{ts => }/btree/binary-tree-leaf-entry.ts (100%) rename src/{ts => }/btree/binary-tree-leaf.ts (100%) rename src/{ts => }/btree/binary-tree-node-entry.ts (100%) rename src/{ts => }/btree/binary-tree-node-info.ts (100%) rename src/{ts => }/btree/binary-tree-node.ts (100%) rename src/{ts => }/btree/binary-tree-transaction-operation.ts (100%) rename src/{ts => }/btree/binary-tree.ts (100%) rename src/{ts => }/btree/binary-writer.ts (100%) rename src/{ts => }/btree/config.ts (100%) rename src/{ts => }/btree/entry-key-type.ts (100%) rename src/{ts => }/btree/index.ts (100%) rename src/{ts => }/btree/leaf-entry-metadata.ts (100%) rename src/{ts => }/btree/leaf-entry-recordpointer.ts (100%) rename src/{ts => }/btree/tree-builder.ts (100%) rename src/{ts => }/btree/tree-leaf-entry-value.ts (100%) rename src/{ts => }/btree/tree-leaf-entry.ts (100%) rename src/{ts => }/btree/tree-leaf.ts (100%) rename src/{ts => }/btree/tree-node-entry.ts (100%) rename src/{ts => }/btree/tree-node.ts (100%) rename src/{ts => }/btree/tree.ts (100%) rename src/{ts => }/btree/tx.ts (100%) rename src/{ts => }/btree/typesafe-compare.ts (100%) rename src/{ts => }/btree/utils.ts (100%) rename src/{ts => }/data-index/array-index-query-hint.ts (100%) rename src/{ts => }/data-index/array-index.ts (100%) rename src/{ts => }/data-index/data-index.ts (100%) rename src/{ts => }/data-index/fulltext-index-query-hint.ts (100%) rename src/{ts => }/data-index/fulltext-index.ts (100%) rename src/{ts => }/data-index/geo-index.ts (100%) rename src/{ts => }/data-index/index.ts (100%) rename src/{ts => }/data-index/options.ts (100%) rename src/{ts => }/data-index/query-hint.ts (100%) rename src/{ts => }/data-index/query-results.ts (100%) rename src/{ts => }/data-index/query-stats.ts (100%) rename src/{ts => }/data-index/shared.ts (100%) rename src/{ts => }/detailed-error.ts (100%) rename src/{ts => }/geohash.ts (100%) rename src/{ts => }/index.ts (100%) rename src/{ts => }/ipc/browser.ts (100%) rename src/{ts => }/ipc/index.ts (100%) rename src/{ts => }/ipc/ipc.ts (100%) rename src/{ts => }/ipc/remote.ts (100%) rename src/{ts => }/node-address.ts (100%) rename src/{ts => }/node-cache.ts (100%) rename src/{ts => }/node-changes.ts (100%) rename src/{ts => }/node-errors.ts (100%) rename src/{ts => }/node-info.ts (100%) rename src/{ts => }/node-lock.ts (100%) rename src/{ts => }/node-transaction.ts (100%) rename src/{ts => }/node-value-types.ts (100%) rename src/{ts => }/node.ts (100%) rename src/{not-supported.js => not-supported.ts} (100%) rename src/{ts => }/promise-fs/browser.ts (100%) rename src/{ts => }/promise-fs/index.ts (100%) rename src/{ts => }/query.ts (100%) rename src/{ts => }/quicksort.ts (100%) rename src/{ts => }/storage/binary/index.ts (100%) rename src/{ts => }/storage/binary/node-address.ts (100%) rename src/{ts => }/storage/binary/node-info.ts (100%) rename src/{ts => }/storage/context.ts (100%) rename src/{ts => }/storage/create-index.ts (100%) rename src/{ts => }/storage/custom/helpers.ts (100%) rename src/{ts => }/storage/custom/index.ts (100%) rename src/{ts => }/storage/custom/indexed-db/index.ts (100%) rename src/{ts => }/storage/custom/indexed-db/settings.ts (100%) rename src/{ts => }/storage/custom/indexed-db/transaction.ts (100%) rename src/{ts => }/storage/custom/local-storage/index.ts (100%) rename src/{ts => }/storage/custom/local-storage/interface.ts (100%) rename src/{ts => }/storage/custom/local-storage/settings.ts (100%) rename src/{ts => }/storage/custom/local-storage/transaction.ts (100%) rename src/{ts => }/storage/index.ts (100%) rename src/{ts => }/storage/indexes.ts (100%) rename src/{ts => }/storage/mssql/index.ts (100%) rename src/{ts => }/storage/sqlite/index.ts (100%) rename src/{ts => }/thread-safe.ts (100%) rename src/{ts => }/unidecode-module.ts (100%) rename src/{ts => }/unidecode.ts (100%) diff --git a/src/acebase-browser.d.ts b/dist/cjs/acebase-browser.d.ts similarity index 100% rename from src/acebase-browser.d.ts rename to dist/cjs/acebase-browser.d.ts diff --git a/src/acebase-browser.d.ts.map b/dist/cjs/acebase-browser.d.ts.map similarity index 100% rename from src/acebase-browser.d.ts.map rename to dist/cjs/acebase-browser.d.ts.map diff --git a/src/acebase-browser.js b/dist/cjs/acebase-browser.js similarity index 100% rename from src/acebase-browser.js rename to dist/cjs/acebase-browser.js diff --git a/src/acebase-browser.js.map b/dist/cjs/acebase-browser.js.map similarity index 100% rename from src/acebase-browser.js.map rename to dist/cjs/acebase-browser.js.map diff --git a/src/acebase-local.d.ts b/dist/cjs/acebase-local.d.ts similarity index 100% rename from src/acebase-local.d.ts rename to dist/cjs/acebase-local.d.ts diff --git a/src/acebase-local.d.ts.map b/dist/cjs/acebase-local.d.ts.map similarity index 100% rename from src/acebase-local.d.ts.map rename to dist/cjs/acebase-local.d.ts.map diff --git a/src/acebase-local.js b/dist/cjs/acebase-local.js similarity index 100% rename from src/acebase-local.js rename to dist/cjs/acebase-local.js diff --git a/src/acebase-local.js.map b/dist/cjs/acebase-local.js.map similarity index 100% rename from src/acebase-local.js.map rename to dist/cjs/acebase-local.js.map diff --git a/src/api-local.d.ts b/dist/cjs/api-local.d.ts similarity index 100% rename from src/api-local.d.ts rename to dist/cjs/api-local.d.ts diff --git a/src/api-local.d.ts.map b/dist/cjs/api-local.d.ts.map similarity index 100% rename from src/api-local.d.ts.map rename to dist/cjs/api-local.d.ts.map diff --git a/src/api-local.js b/dist/cjs/api-local.js similarity index 100% rename from src/api-local.js rename to dist/cjs/api-local.js diff --git a/src/api-local.js.map b/dist/cjs/api-local.js.map similarity index 100% rename from src/api-local.js.map rename to dist/cjs/api-local.js.map diff --git a/src/async-task-batch.d.ts b/dist/cjs/async-task-batch.d.ts similarity index 100% rename from src/async-task-batch.d.ts rename to dist/cjs/async-task-batch.d.ts diff --git a/src/async-task-batch.d.ts.map b/dist/cjs/async-task-batch.d.ts.map similarity index 100% rename from src/async-task-batch.d.ts.map rename to dist/cjs/async-task-batch.d.ts.map diff --git a/src/async-task-batch.js b/dist/cjs/async-task-batch.js similarity index 100% rename from src/async-task-batch.js rename to dist/cjs/async-task-batch.js diff --git a/src/async-task-batch.js.map b/dist/cjs/async-task-batch.js.map similarity index 100% rename from src/async-task-batch.js.map rename to dist/cjs/async-task-batch.js.map diff --git a/src/binary.d.ts b/dist/cjs/binary.d.ts similarity index 100% rename from src/binary.d.ts rename to dist/cjs/binary.d.ts diff --git a/src/binary.d.ts.map b/dist/cjs/binary.d.ts.map similarity index 100% rename from src/binary.d.ts.map rename to dist/cjs/binary.d.ts.map diff --git a/src/binary.js b/dist/cjs/binary.js similarity index 100% rename from src/binary.js rename to dist/cjs/binary.js diff --git a/src/binary.js.map b/dist/cjs/binary.js.map similarity index 100% rename from src/binary.js.map rename to dist/cjs/binary.js.map diff --git a/src/browser.d.ts b/dist/cjs/browser.d.ts similarity index 100% rename from src/browser.d.ts rename to dist/cjs/browser.d.ts diff --git a/src/browser.d.ts.map b/dist/cjs/browser.d.ts.map similarity index 100% rename from src/browser.d.ts.map rename to dist/cjs/browser.d.ts.map diff --git a/src/browser.js b/dist/cjs/browser.js similarity index 100% rename from src/browser.js rename to dist/cjs/browser.js diff --git a/src/browser.js.map b/dist/cjs/browser.js.map similarity index 100% rename from src/browser.js.map rename to dist/cjs/browser.js.map diff --git a/src/btree/binary-reader.d.ts b/dist/cjs/btree/binary-reader.d.ts similarity index 100% rename from src/btree/binary-reader.d.ts rename to dist/cjs/btree/binary-reader.d.ts diff --git a/src/btree/binary-reader.d.ts.map b/dist/cjs/btree/binary-reader.d.ts.map similarity index 100% rename from src/btree/binary-reader.d.ts.map rename to dist/cjs/btree/binary-reader.d.ts.map diff --git a/src/btree/binary-reader.js b/dist/cjs/btree/binary-reader.js similarity index 100% rename from src/btree/binary-reader.js rename to dist/cjs/btree/binary-reader.js diff --git a/src/btree/binary-reader.js.map b/dist/cjs/btree/binary-reader.js.map similarity index 100% rename from src/btree/binary-reader.js.map rename to dist/cjs/btree/binary-reader.js.map diff --git a/src/btree/binary-tree-builder.d.ts b/dist/cjs/btree/binary-tree-builder.d.ts similarity index 100% rename from src/btree/binary-tree-builder.d.ts rename to dist/cjs/btree/binary-tree-builder.d.ts diff --git a/src/btree/binary-tree-builder.d.ts.map b/dist/cjs/btree/binary-tree-builder.d.ts.map similarity index 100% rename from src/btree/binary-tree-builder.d.ts.map rename to dist/cjs/btree/binary-tree-builder.d.ts.map diff --git a/src/btree/binary-tree-builder.js b/dist/cjs/btree/binary-tree-builder.js similarity index 100% rename from src/btree/binary-tree-builder.js rename to dist/cjs/btree/binary-tree-builder.js diff --git a/src/btree/binary-tree-builder.js.map b/dist/cjs/btree/binary-tree-builder.js.map similarity index 100% rename from src/btree/binary-tree-builder.js.map rename to dist/cjs/btree/binary-tree-builder.js.map diff --git a/src/btree/binary-tree-leaf-entry-extdata.d.ts b/dist/cjs/btree/binary-tree-leaf-entry-extdata.d.ts similarity index 100% rename from src/btree/binary-tree-leaf-entry-extdata.d.ts rename to dist/cjs/btree/binary-tree-leaf-entry-extdata.d.ts diff --git a/src/btree/binary-tree-leaf-entry-extdata.d.ts.map b/dist/cjs/btree/binary-tree-leaf-entry-extdata.d.ts.map similarity index 100% rename from src/btree/binary-tree-leaf-entry-extdata.d.ts.map rename to dist/cjs/btree/binary-tree-leaf-entry-extdata.d.ts.map diff --git a/src/btree/binary-tree-leaf-entry-extdata.js b/dist/cjs/btree/binary-tree-leaf-entry-extdata.js similarity index 100% rename from src/btree/binary-tree-leaf-entry-extdata.js rename to dist/cjs/btree/binary-tree-leaf-entry-extdata.js diff --git a/src/btree/binary-tree-leaf-entry-extdata.js.map b/dist/cjs/btree/binary-tree-leaf-entry-extdata.js.map similarity index 100% rename from src/btree/binary-tree-leaf-entry-extdata.js.map rename to dist/cjs/btree/binary-tree-leaf-entry-extdata.js.map diff --git a/src/btree/binary-tree-leaf-entry-value.d.ts b/dist/cjs/btree/binary-tree-leaf-entry-value.d.ts similarity index 100% rename from src/btree/binary-tree-leaf-entry-value.d.ts rename to dist/cjs/btree/binary-tree-leaf-entry-value.d.ts diff --git a/src/btree/binary-tree-leaf-entry-value.d.ts.map b/dist/cjs/btree/binary-tree-leaf-entry-value.d.ts.map similarity index 100% rename from src/btree/binary-tree-leaf-entry-value.d.ts.map rename to dist/cjs/btree/binary-tree-leaf-entry-value.d.ts.map diff --git a/src/btree/binary-tree-leaf-entry-value.js b/dist/cjs/btree/binary-tree-leaf-entry-value.js similarity index 100% rename from src/btree/binary-tree-leaf-entry-value.js rename to dist/cjs/btree/binary-tree-leaf-entry-value.js diff --git a/src/btree/binary-tree-leaf-entry-value.js.map b/dist/cjs/btree/binary-tree-leaf-entry-value.js.map similarity index 100% rename from src/btree/binary-tree-leaf-entry-value.js.map rename to dist/cjs/btree/binary-tree-leaf-entry-value.js.map diff --git a/src/btree/binary-tree-leaf-entry.d.ts b/dist/cjs/btree/binary-tree-leaf-entry.d.ts similarity index 100% rename from src/btree/binary-tree-leaf-entry.d.ts rename to dist/cjs/btree/binary-tree-leaf-entry.d.ts diff --git a/src/btree/binary-tree-leaf-entry.d.ts.map b/dist/cjs/btree/binary-tree-leaf-entry.d.ts.map similarity index 100% rename from src/btree/binary-tree-leaf-entry.d.ts.map rename to dist/cjs/btree/binary-tree-leaf-entry.d.ts.map diff --git a/src/btree/binary-tree-leaf-entry.js b/dist/cjs/btree/binary-tree-leaf-entry.js similarity index 100% rename from src/btree/binary-tree-leaf-entry.js rename to dist/cjs/btree/binary-tree-leaf-entry.js diff --git a/src/btree/binary-tree-leaf-entry.js.map b/dist/cjs/btree/binary-tree-leaf-entry.js.map similarity index 100% rename from src/btree/binary-tree-leaf-entry.js.map rename to dist/cjs/btree/binary-tree-leaf-entry.js.map diff --git a/src/btree/binary-tree-leaf.d.ts b/dist/cjs/btree/binary-tree-leaf.d.ts similarity index 100% rename from src/btree/binary-tree-leaf.d.ts rename to dist/cjs/btree/binary-tree-leaf.d.ts diff --git a/src/btree/binary-tree-leaf.d.ts.map b/dist/cjs/btree/binary-tree-leaf.d.ts.map similarity index 100% rename from src/btree/binary-tree-leaf.d.ts.map rename to dist/cjs/btree/binary-tree-leaf.d.ts.map diff --git a/src/btree/binary-tree-leaf.js b/dist/cjs/btree/binary-tree-leaf.js similarity index 100% rename from src/btree/binary-tree-leaf.js rename to dist/cjs/btree/binary-tree-leaf.js diff --git a/src/btree/binary-tree-leaf.js.map b/dist/cjs/btree/binary-tree-leaf.js.map similarity index 100% rename from src/btree/binary-tree-leaf.js.map rename to dist/cjs/btree/binary-tree-leaf.js.map diff --git a/src/btree/binary-tree-node-entry.d.ts b/dist/cjs/btree/binary-tree-node-entry.d.ts similarity index 100% rename from src/btree/binary-tree-node-entry.d.ts rename to dist/cjs/btree/binary-tree-node-entry.d.ts diff --git a/src/btree/binary-tree-node-entry.d.ts.map b/dist/cjs/btree/binary-tree-node-entry.d.ts.map similarity index 100% rename from src/btree/binary-tree-node-entry.d.ts.map rename to dist/cjs/btree/binary-tree-node-entry.d.ts.map diff --git a/src/btree/binary-tree-node-entry.js b/dist/cjs/btree/binary-tree-node-entry.js similarity index 100% rename from src/btree/binary-tree-node-entry.js rename to dist/cjs/btree/binary-tree-node-entry.js diff --git a/src/btree/binary-tree-node-entry.js.map b/dist/cjs/btree/binary-tree-node-entry.js.map similarity index 100% rename from src/btree/binary-tree-node-entry.js.map rename to dist/cjs/btree/binary-tree-node-entry.js.map diff --git a/src/btree/binary-tree-node-info.d.ts b/dist/cjs/btree/binary-tree-node-info.d.ts similarity index 100% rename from src/btree/binary-tree-node-info.d.ts rename to dist/cjs/btree/binary-tree-node-info.d.ts diff --git a/src/btree/binary-tree-node-info.d.ts.map b/dist/cjs/btree/binary-tree-node-info.d.ts.map similarity index 100% rename from src/btree/binary-tree-node-info.d.ts.map rename to dist/cjs/btree/binary-tree-node-info.d.ts.map diff --git a/src/btree/binary-tree-node-info.js b/dist/cjs/btree/binary-tree-node-info.js similarity index 100% rename from src/btree/binary-tree-node-info.js rename to dist/cjs/btree/binary-tree-node-info.js diff --git a/src/btree/binary-tree-node-info.js.map b/dist/cjs/btree/binary-tree-node-info.js.map similarity index 100% rename from src/btree/binary-tree-node-info.js.map rename to dist/cjs/btree/binary-tree-node-info.js.map diff --git a/src/btree/binary-tree-node.d.ts b/dist/cjs/btree/binary-tree-node.d.ts similarity index 100% rename from src/btree/binary-tree-node.d.ts rename to dist/cjs/btree/binary-tree-node.d.ts diff --git a/src/btree/binary-tree-node.d.ts.map b/dist/cjs/btree/binary-tree-node.d.ts.map similarity index 100% rename from src/btree/binary-tree-node.d.ts.map rename to dist/cjs/btree/binary-tree-node.d.ts.map diff --git a/src/btree/binary-tree-node.js b/dist/cjs/btree/binary-tree-node.js similarity index 100% rename from src/btree/binary-tree-node.js rename to dist/cjs/btree/binary-tree-node.js diff --git a/src/btree/binary-tree-node.js.map b/dist/cjs/btree/binary-tree-node.js.map similarity index 100% rename from src/btree/binary-tree-node.js.map rename to dist/cjs/btree/binary-tree-node.js.map diff --git a/src/btree/binary-tree-transaction-operation.d.ts b/dist/cjs/btree/binary-tree-transaction-operation.d.ts similarity index 100% rename from src/btree/binary-tree-transaction-operation.d.ts rename to dist/cjs/btree/binary-tree-transaction-operation.d.ts diff --git a/src/btree/binary-tree-transaction-operation.d.ts.map b/dist/cjs/btree/binary-tree-transaction-operation.d.ts.map similarity index 100% rename from src/btree/binary-tree-transaction-operation.d.ts.map rename to dist/cjs/btree/binary-tree-transaction-operation.d.ts.map diff --git a/src/btree/binary-tree-transaction-operation.js b/dist/cjs/btree/binary-tree-transaction-operation.js similarity index 100% rename from src/btree/binary-tree-transaction-operation.js rename to dist/cjs/btree/binary-tree-transaction-operation.js diff --git a/src/btree/binary-tree-transaction-operation.js.map b/dist/cjs/btree/binary-tree-transaction-operation.js.map similarity index 100% rename from src/btree/binary-tree-transaction-operation.js.map rename to dist/cjs/btree/binary-tree-transaction-operation.js.map diff --git a/src/btree/binary-tree.d.ts b/dist/cjs/btree/binary-tree.d.ts similarity index 100% rename from src/btree/binary-tree.d.ts rename to dist/cjs/btree/binary-tree.d.ts diff --git a/src/btree/binary-tree.d.ts.map b/dist/cjs/btree/binary-tree.d.ts.map similarity index 100% rename from src/btree/binary-tree.d.ts.map rename to dist/cjs/btree/binary-tree.d.ts.map diff --git a/src/btree/binary-tree.js b/dist/cjs/btree/binary-tree.js similarity index 100% rename from src/btree/binary-tree.js rename to dist/cjs/btree/binary-tree.js diff --git a/src/btree/binary-tree.js.map b/dist/cjs/btree/binary-tree.js.map similarity index 100% rename from src/btree/binary-tree.js.map rename to dist/cjs/btree/binary-tree.js.map diff --git a/src/btree/binary-writer.d.ts b/dist/cjs/btree/binary-writer.d.ts similarity index 100% rename from src/btree/binary-writer.d.ts rename to dist/cjs/btree/binary-writer.d.ts diff --git a/src/btree/binary-writer.d.ts.map b/dist/cjs/btree/binary-writer.d.ts.map similarity index 100% rename from src/btree/binary-writer.d.ts.map rename to dist/cjs/btree/binary-writer.d.ts.map diff --git a/src/btree/binary-writer.js b/dist/cjs/btree/binary-writer.js similarity index 100% rename from src/btree/binary-writer.js rename to dist/cjs/btree/binary-writer.js diff --git a/src/btree/binary-writer.js.map b/dist/cjs/btree/binary-writer.js.map similarity index 100% rename from src/btree/binary-writer.js.map rename to dist/cjs/btree/binary-writer.js.map diff --git a/src/btree/config.d.ts b/dist/cjs/btree/config.d.ts similarity index 100% rename from src/btree/config.d.ts rename to dist/cjs/btree/config.d.ts diff --git a/src/btree/config.d.ts.map b/dist/cjs/btree/config.d.ts.map similarity index 100% rename from src/btree/config.d.ts.map rename to dist/cjs/btree/config.d.ts.map diff --git a/src/btree/config.js b/dist/cjs/btree/config.js similarity index 100% rename from src/btree/config.js rename to dist/cjs/btree/config.js diff --git a/src/btree/config.js.map b/dist/cjs/btree/config.js.map similarity index 100% rename from src/btree/config.js.map rename to dist/cjs/btree/config.js.map diff --git a/src/btree/entry-key-type.d.ts b/dist/cjs/btree/entry-key-type.d.ts similarity index 100% rename from src/btree/entry-key-type.d.ts rename to dist/cjs/btree/entry-key-type.d.ts diff --git a/src/btree/entry-key-type.d.ts.map b/dist/cjs/btree/entry-key-type.d.ts.map similarity index 100% rename from src/btree/entry-key-type.d.ts.map rename to dist/cjs/btree/entry-key-type.d.ts.map diff --git a/src/btree/entry-key-type.js b/dist/cjs/btree/entry-key-type.js similarity index 100% rename from src/btree/entry-key-type.js rename to dist/cjs/btree/entry-key-type.js diff --git a/src/btree/entry-key-type.js.map b/dist/cjs/btree/entry-key-type.js.map similarity index 100% rename from src/btree/entry-key-type.js.map rename to dist/cjs/btree/entry-key-type.js.map diff --git a/src/btree/index.d.ts b/dist/cjs/btree/index.d.ts similarity index 100% rename from src/btree/index.d.ts rename to dist/cjs/btree/index.d.ts diff --git a/src/btree/index.d.ts.map b/dist/cjs/btree/index.d.ts.map similarity index 100% rename from src/btree/index.d.ts.map rename to dist/cjs/btree/index.d.ts.map diff --git a/src/btree/index.js b/dist/cjs/btree/index.js similarity index 100% rename from src/btree/index.js rename to dist/cjs/btree/index.js diff --git a/src/btree/index.js.map b/dist/cjs/btree/index.js.map similarity index 100% rename from src/btree/index.js.map rename to dist/cjs/btree/index.js.map diff --git a/src/btree/leaf-entry-metadata.d.ts b/dist/cjs/btree/leaf-entry-metadata.d.ts similarity index 100% rename from src/btree/leaf-entry-metadata.d.ts rename to dist/cjs/btree/leaf-entry-metadata.d.ts diff --git a/src/btree/leaf-entry-metadata.d.ts.map b/dist/cjs/btree/leaf-entry-metadata.d.ts.map similarity index 100% rename from src/btree/leaf-entry-metadata.d.ts.map rename to dist/cjs/btree/leaf-entry-metadata.d.ts.map diff --git a/src/btree/leaf-entry-metadata.js b/dist/cjs/btree/leaf-entry-metadata.js similarity index 100% rename from src/btree/leaf-entry-metadata.js rename to dist/cjs/btree/leaf-entry-metadata.js diff --git a/src/btree/leaf-entry-metadata.js.map b/dist/cjs/btree/leaf-entry-metadata.js.map similarity index 100% rename from src/btree/leaf-entry-metadata.js.map rename to dist/cjs/btree/leaf-entry-metadata.js.map diff --git a/src/btree/leaf-entry-recordpointer.d.ts b/dist/cjs/btree/leaf-entry-recordpointer.d.ts similarity index 100% rename from src/btree/leaf-entry-recordpointer.d.ts rename to dist/cjs/btree/leaf-entry-recordpointer.d.ts diff --git a/src/btree/leaf-entry-recordpointer.d.ts.map b/dist/cjs/btree/leaf-entry-recordpointer.d.ts.map similarity index 100% rename from src/btree/leaf-entry-recordpointer.d.ts.map rename to dist/cjs/btree/leaf-entry-recordpointer.d.ts.map diff --git a/src/btree/leaf-entry-recordpointer.js b/dist/cjs/btree/leaf-entry-recordpointer.js similarity index 100% rename from src/btree/leaf-entry-recordpointer.js rename to dist/cjs/btree/leaf-entry-recordpointer.js diff --git a/src/btree/leaf-entry-recordpointer.js.map b/dist/cjs/btree/leaf-entry-recordpointer.js.map similarity index 100% rename from src/btree/leaf-entry-recordpointer.js.map rename to dist/cjs/btree/leaf-entry-recordpointer.js.map diff --git a/src/btree/tree-builder.d.ts b/dist/cjs/btree/tree-builder.d.ts similarity index 100% rename from src/btree/tree-builder.d.ts rename to dist/cjs/btree/tree-builder.d.ts diff --git a/src/btree/tree-builder.d.ts.map b/dist/cjs/btree/tree-builder.d.ts.map similarity index 100% rename from src/btree/tree-builder.d.ts.map rename to dist/cjs/btree/tree-builder.d.ts.map diff --git a/src/btree/tree-builder.js b/dist/cjs/btree/tree-builder.js similarity index 100% rename from src/btree/tree-builder.js rename to dist/cjs/btree/tree-builder.js diff --git a/src/btree/tree-builder.js.map b/dist/cjs/btree/tree-builder.js.map similarity index 100% rename from src/btree/tree-builder.js.map rename to dist/cjs/btree/tree-builder.js.map diff --git a/src/btree/tree-leaf-entry-value.d.ts b/dist/cjs/btree/tree-leaf-entry-value.d.ts similarity index 100% rename from src/btree/tree-leaf-entry-value.d.ts rename to dist/cjs/btree/tree-leaf-entry-value.d.ts diff --git a/src/btree/tree-leaf-entry-value.d.ts.map b/dist/cjs/btree/tree-leaf-entry-value.d.ts.map similarity index 100% rename from src/btree/tree-leaf-entry-value.d.ts.map rename to dist/cjs/btree/tree-leaf-entry-value.d.ts.map diff --git a/src/btree/tree-leaf-entry-value.js b/dist/cjs/btree/tree-leaf-entry-value.js similarity index 100% rename from src/btree/tree-leaf-entry-value.js rename to dist/cjs/btree/tree-leaf-entry-value.js diff --git a/src/btree/tree-leaf-entry-value.js.map b/dist/cjs/btree/tree-leaf-entry-value.js.map similarity index 100% rename from src/btree/tree-leaf-entry-value.js.map rename to dist/cjs/btree/tree-leaf-entry-value.js.map diff --git a/src/btree/tree-leaf-entry.d.ts b/dist/cjs/btree/tree-leaf-entry.d.ts similarity index 100% rename from src/btree/tree-leaf-entry.d.ts rename to dist/cjs/btree/tree-leaf-entry.d.ts diff --git a/src/btree/tree-leaf-entry.d.ts.map b/dist/cjs/btree/tree-leaf-entry.d.ts.map similarity index 100% rename from src/btree/tree-leaf-entry.d.ts.map rename to dist/cjs/btree/tree-leaf-entry.d.ts.map diff --git a/src/btree/tree-leaf-entry.js b/dist/cjs/btree/tree-leaf-entry.js similarity index 100% rename from src/btree/tree-leaf-entry.js rename to dist/cjs/btree/tree-leaf-entry.js diff --git a/src/btree/tree-leaf-entry.js.map b/dist/cjs/btree/tree-leaf-entry.js.map similarity index 100% rename from src/btree/tree-leaf-entry.js.map rename to dist/cjs/btree/tree-leaf-entry.js.map diff --git a/src/btree/tree-leaf.d.ts b/dist/cjs/btree/tree-leaf.d.ts similarity index 100% rename from src/btree/tree-leaf.d.ts rename to dist/cjs/btree/tree-leaf.d.ts diff --git a/src/btree/tree-leaf.d.ts.map b/dist/cjs/btree/tree-leaf.d.ts.map similarity index 100% rename from src/btree/tree-leaf.d.ts.map rename to dist/cjs/btree/tree-leaf.d.ts.map diff --git a/src/btree/tree-leaf.js b/dist/cjs/btree/tree-leaf.js similarity index 100% rename from src/btree/tree-leaf.js rename to dist/cjs/btree/tree-leaf.js diff --git a/src/btree/tree-leaf.js.map b/dist/cjs/btree/tree-leaf.js.map similarity index 100% rename from src/btree/tree-leaf.js.map rename to dist/cjs/btree/tree-leaf.js.map diff --git a/src/btree/tree-node-entry.d.ts b/dist/cjs/btree/tree-node-entry.d.ts similarity index 100% rename from src/btree/tree-node-entry.d.ts rename to dist/cjs/btree/tree-node-entry.d.ts diff --git a/src/btree/tree-node-entry.d.ts.map b/dist/cjs/btree/tree-node-entry.d.ts.map similarity index 100% rename from src/btree/tree-node-entry.d.ts.map rename to dist/cjs/btree/tree-node-entry.d.ts.map diff --git a/src/btree/tree-node-entry.js b/dist/cjs/btree/tree-node-entry.js similarity index 100% rename from src/btree/tree-node-entry.js rename to dist/cjs/btree/tree-node-entry.js diff --git a/src/btree/tree-node-entry.js.map b/dist/cjs/btree/tree-node-entry.js.map similarity index 100% rename from src/btree/tree-node-entry.js.map rename to dist/cjs/btree/tree-node-entry.js.map diff --git a/src/btree/tree-node.d.ts b/dist/cjs/btree/tree-node.d.ts similarity index 100% rename from src/btree/tree-node.d.ts rename to dist/cjs/btree/tree-node.d.ts diff --git a/src/btree/tree-node.d.ts.map b/dist/cjs/btree/tree-node.d.ts.map similarity index 100% rename from src/btree/tree-node.d.ts.map rename to dist/cjs/btree/tree-node.d.ts.map diff --git a/src/btree/tree-node.js b/dist/cjs/btree/tree-node.js similarity index 100% rename from src/btree/tree-node.js rename to dist/cjs/btree/tree-node.js diff --git a/src/btree/tree-node.js.map b/dist/cjs/btree/tree-node.js.map similarity index 100% rename from src/btree/tree-node.js.map rename to dist/cjs/btree/tree-node.js.map diff --git a/src/btree/tree.d.ts b/dist/cjs/btree/tree.d.ts similarity index 100% rename from src/btree/tree.d.ts rename to dist/cjs/btree/tree.d.ts diff --git a/src/btree/tree.d.ts.map b/dist/cjs/btree/tree.d.ts.map similarity index 100% rename from src/btree/tree.d.ts.map rename to dist/cjs/btree/tree.d.ts.map diff --git a/src/btree/tree.js b/dist/cjs/btree/tree.js similarity index 100% rename from src/btree/tree.js rename to dist/cjs/btree/tree.js diff --git a/src/btree/tree.js.map b/dist/cjs/btree/tree.js.map similarity index 100% rename from src/btree/tree.js.map rename to dist/cjs/btree/tree.js.map diff --git a/src/btree/tx.d.ts b/dist/cjs/btree/tx.d.ts similarity index 100% rename from src/btree/tx.d.ts rename to dist/cjs/btree/tx.d.ts diff --git a/src/btree/tx.d.ts.map b/dist/cjs/btree/tx.d.ts.map similarity index 100% rename from src/btree/tx.d.ts.map rename to dist/cjs/btree/tx.d.ts.map diff --git a/src/btree/tx.js b/dist/cjs/btree/tx.js similarity index 100% rename from src/btree/tx.js rename to dist/cjs/btree/tx.js diff --git a/src/btree/tx.js.map b/dist/cjs/btree/tx.js.map similarity index 100% rename from src/btree/tx.js.map rename to dist/cjs/btree/tx.js.map diff --git a/src/btree/typesafe-compare.d.ts b/dist/cjs/btree/typesafe-compare.d.ts similarity index 100% rename from src/btree/typesafe-compare.d.ts rename to dist/cjs/btree/typesafe-compare.d.ts diff --git a/src/btree/typesafe-compare.d.ts.map b/dist/cjs/btree/typesafe-compare.d.ts.map similarity index 100% rename from src/btree/typesafe-compare.d.ts.map rename to dist/cjs/btree/typesafe-compare.d.ts.map diff --git a/src/btree/typesafe-compare.js b/dist/cjs/btree/typesafe-compare.js similarity index 100% rename from src/btree/typesafe-compare.js rename to dist/cjs/btree/typesafe-compare.js diff --git a/src/btree/typesafe-compare.js.map b/dist/cjs/btree/typesafe-compare.js.map similarity index 100% rename from src/btree/typesafe-compare.js.map rename to dist/cjs/btree/typesafe-compare.js.map diff --git a/src/btree/utils.d.ts b/dist/cjs/btree/utils.d.ts similarity index 100% rename from src/btree/utils.d.ts rename to dist/cjs/btree/utils.d.ts diff --git a/src/btree/utils.d.ts.map b/dist/cjs/btree/utils.d.ts.map similarity index 100% rename from src/btree/utils.d.ts.map rename to dist/cjs/btree/utils.d.ts.map diff --git a/src/btree/utils.js b/dist/cjs/btree/utils.js similarity index 100% rename from src/btree/utils.js rename to dist/cjs/btree/utils.js diff --git a/src/btree/utils.js.map b/dist/cjs/btree/utils.js.map similarity index 100% rename from src/btree/utils.js.map rename to dist/cjs/btree/utils.js.map diff --git a/src/data-index/array-index-query-hint.d.ts b/dist/cjs/data-index/array-index-query-hint.d.ts similarity index 100% rename from src/data-index/array-index-query-hint.d.ts rename to dist/cjs/data-index/array-index-query-hint.d.ts diff --git a/src/data-index/array-index-query-hint.d.ts.map b/dist/cjs/data-index/array-index-query-hint.d.ts.map similarity index 100% rename from src/data-index/array-index-query-hint.d.ts.map rename to dist/cjs/data-index/array-index-query-hint.d.ts.map diff --git a/src/data-index/array-index-query-hint.js b/dist/cjs/data-index/array-index-query-hint.js similarity index 100% rename from src/data-index/array-index-query-hint.js rename to dist/cjs/data-index/array-index-query-hint.js diff --git a/src/data-index/array-index-query-hint.js.map b/dist/cjs/data-index/array-index-query-hint.js.map similarity index 100% rename from src/data-index/array-index-query-hint.js.map rename to dist/cjs/data-index/array-index-query-hint.js.map diff --git a/src/data-index/array-index.d.ts b/dist/cjs/data-index/array-index.d.ts similarity index 100% rename from src/data-index/array-index.d.ts rename to dist/cjs/data-index/array-index.d.ts diff --git a/src/data-index/array-index.d.ts.map b/dist/cjs/data-index/array-index.d.ts.map similarity index 100% rename from src/data-index/array-index.d.ts.map rename to dist/cjs/data-index/array-index.d.ts.map diff --git a/src/data-index/array-index.js b/dist/cjs/data-index/array-index.js similarity index 100% rename from src/data-index/array-index.js rename to dist/cjs/data-index/array-index.js diff --git a/src/data-index/array-index.js.map b/dist/cjs/data-index/array-index.js.map similarity index 100% rename from src/data-index/array-index.js.map rename to dist/cjs/data-index/array-index.js.map diff --git a/src/data-index/data-index.d.ts b/dist/cjs/data-index/data-index.d.ts similarity index 100% rename from src/data-index/data-index.d.ts rename to dist/cjs/data-index/data-index.d.ts diff --git a/src/data-index/data-index.d.ts.map b/dist/cjs/data-index/data-index.d.ts.map similarity index 100% rename from src/data-index/data-index.d.ts.map rename to dist/cjs/data-index/data-index.d.ts.map diff --git a/src/data-index/data-index.js b/dist/cjs/data-index/data-index.js similarity index 100% rename from src/data-index/data-index.js rename to dist/cjs/data-index/data-index.js diff --git a/src/data-index/data-index.js.map b/dist/cjs/data-index/data-index.js.map similarity index 100% rename from src/data-index/data-index.js.map rename to dist/cjs/data-index/data-index.js.map diff --git a/src/data-index/fulltext-index-query-hint.d.ts b/dist/cjs/data-index/fulltext-index-query-hint.d.ts similarity index 100% rename from src/data-index/fulltext-index-query-hint.d.ts rename to dist/cjs/data-index/fulltext-index-query-hint.d.ts diff --git a/src/data-index/fulltext-index-query-hint.d.ts.map b/dist/cjs/data-index/fulltext-index-query-hint.d.ts.map similarity index 100% rename from src/data-index/fulltext-index-query-hint.d.ts.map rename to dist/cjs/data-index/fulltext-index-query-hint.d.ts.map diff --git a/src/data-index/fulltext-index-query-hint.js b/dist/cjs/data-index/fulltext-index-query-hint.js similarity index 100% rename from src/data-index/fulltext-index-query-hint.js rename to dist/cjs/data-index/fulltext-index-query-hint.js diff --git a/src/data-index/fulltext-index-query-hint.js.map b/dist/cjs/data-index/fulltext-index-query-hint.js.map similarity index 100% rename from src/data-index/fulltext-index-query-hint.js.map rename to dist/cjs/data-index/fulltext-index-query-hint.js.map diff --git a/src/data-index/fulltext-index.d.ts b/dist/cjs/data-index/fulltext-index.d.ts similarity index 100% rename from src/data-index/fulltext-index.d.ts rename to dist/cjs/data-index/fulltext-index.d.ts diff --git a/src/data-index/fulltext-index.d.ts.map b/dist/cjs/data-index/fulltext-index.d.ts.map similarity index 100% rename from src/data-index/fulltext-index.d.ts.map rename to dist/cjs/data-index/fulltext-index.d.ts.map diff --git a/src/data-index/fulltext-index.js b/dist/cjs/data-index/fulltext-index.js similarity index 100% rename from src/data-index/fulltext-index.js rename to dist/cjs/data-index/fulltext-index.js diff --git a/src/data-index/fulltext-index.js.map b/dist/cjs/data-index/fulltext-index.js.map similarity index 100% rename from src/data-index/fulltext-index.js.map rename to dist/cjs/data-index/fulltext-index.js.map diff --git a/src/data-index/geo-index.d.ts b/dist/cjs/data-index/geo-index.d.ts similarity index 100% rename from src/data-index/geo-index.d.ts rename to dist/cjs/data-index/geo-index.d.ts diff --git a/src/data-index/geo-index.d.ts.map b/dist/cjs/data-index/geo-index.d.ts.map similarity index 100% rename from src/data-index/geo-index.d.ts.map rename to dist/cjs/data-index/geo-index.d.ts.map diff --git a/src/data-index/geo-index.js b/dist/cjs/data-index/geo-index.js similarity index 100% rename from src/data-index/geo-index.js rename to dist/cjs/data-index/geo-index.js diff --git a/src/data-index/geo-index.js.map b/dist/cjs/data-index/geo-index.js.map similarity index 100% rename from src/data-index/geo-index.js.map rename to dist/cjs/data-index/geo-index.js.map diff --git a/src/data-index/index.d.ts b/dist/cjs/data-index/index.d.ts similarity index 100% rename from src/data-index/index.d.ts rename to dist/cjs/data-index/index.d.ts diff --git a/src/data-index/index.d.ts.map b/dist/cjs/data-index/index.d.ts.map similarity index 100% rename from src/data-index/index.d.ts.map rename to dist/cjs/data-index/index.d.ts.map diff --git a/src/data-index/index.js b/dist/cjs/data-index/index.js similarity index 100% rename from src/data-index/index.js rename to dist/cjs/data-index/index.js diff --git a/src/data-index/index.js.map b/dist/cjs/data-index/index.js.map similarity index 100% rename from src/data-index/index.js.map rename to dist/cjs/data-index/index.js.map diff --git a/src/data-index/options.d.ts b/dist/cjs/data-index/options.d.ts similarity index 100% rename from src/data-index/options.d.ts rename to dist/cjs/data-index/options.d.ts diff --git a/src/data-index/options.d.ts.map b/dist/cjs/data-index/options.d.ts.map similarity index 100% rename from src/data-index/options.d.ts.map rename to dist/cjs/data-index/options.d.ts.map diff --git a/src/data-index/options.js b/dist/cjs/data-index/options.js similarity index 100% rename from src/data-index/options.js rename to dist/cjs/data-index/options.js diff --git a/src/data-index/options.js.map b/dist/cjs/data-index/options.js.map similarity index 100% rename from src/data-index/options.js.map rename to dist/cjs/data-index/options.js.map diff --git a/src/data-index/query-hint.d.ts b/dist/cjs/data-index/query-hint.d.ts similarity index 100% rename from src/data-index/query-hint.d.ts rename to dist/cjs/data-index/query-hint.d.ts diff --git a/src/data-index/query-hint.d.ts.map b/dist/cjs/data-index/query-hint.d.ts.map similarity index 100% rename from src/data-index/query-hint.d.ts.map rename to dist/cjs/data-index/query-hint.d.ts.map diff --git a/src/data-index/query-hint.js b/dist/cjs/data-index/query-hint.js similarity index 100% rename from src/data-index/query-hint.js rename to dist/cjs/data-index/query-hint.js diff --git a/src/data-index/query-hint.js.map b/dist/cjs/data-index/query-hint.js.map similarity index 100% rename from src/data-index/query-hint.js.map rename to dist/cjs/data-index/query-hint.js.map diff --git a/src/data-index/query-results.d.ts b/dist/cjs/data-index/query-results.d.ts similarity index 100% rename from src/data-index/query-results.d.ts rename to dist/cjs/data-index/query-results.d.ts diff --git a/src/data-index/query-results.d.ts.map b/dist/cjs/data-index/query-results.d.ts.map similarity index 100% rename from src/data-index/query-results.d.ts.map rename to dist/cjs/data-index/query-results.d.ts.map diff --git a/src/data-index/query-results.js b/dist/cjs/data-index/query-results.js similarity index 100% rename from src/data-index/query-results.js rename to dist/cjs/data-index/query-results.js diff --git a/src/data-index/query-results.js.map b/dist/cjs/data-index/query-results.js.map similarity index 100% rename from src/data-index/query-results.js.map rename to dist/cjs/data-index/query-results.js.map diff --git a/src/data-index/query-stats.d.ts b/dist/cjs/data-index/query-stats.d.ts similarity index 100% rename from src/data-index/query-stats.d.ts rename to dist/cjs/data-index/query-stats.d.ts diff --git a/src/data-index/query-stats.d.ts.map b/dist/cjs/data-index/query-stats.d.ts.map similarity index 100% rename from src/data-index/query-stats.d.ts.map rename to dist/cjs/data-index/query-stats.d.ts.map diff --git a/src/data-index/query-stats.js b/dist/cjs/data-index/query-stats.js similarity index 100% rename from src/data-index/query-stats.js rename to dist/cjs/data-index/query-stats.js diff --git a/src/data-index/query-stats.js.map b/dist/cjs/data-index/query-stats.js.map similarity index 100% rename from src/data-index/query-stats.js.map rename to dist/cjs/data-index/query-stats.js.map diff --git a/src/data-index/shared.d.ts b/dist/cjs/data-index/shared.d.ts similarity index 100% rename from src/data-index/shared.d.ts rename to dist/cjs/data-index/shared.d.ts diff --git a/src/data-index/shared.d.ts.map b/dist/cjs/data-index/shared.d.ts.map similarity index 100% rename from src/data-index/shared.d.ts.map rename to dist/cjs/data-index/shared.d.ts.map diff --git a/src/data-index/shared.js b/dist/cjs/data-index/shared.js similarity index 100% rename from src/data-index/shared.js rename to dist/cjs/data-index/shared.js diff --git a/src/data-index/shared.js.map b/dist/cjs/data-index/shared.js.map similarity index 100% rename from src/data-index/shared.js.map rename to dist/cjs/data-index/shared.js.map diff --git a/src/detailed-error.d.ts b/dist/cjs/detailed-error.d.ts similarity index 100% rename from src/detailed-error.d.ts rename to dist/cjs/detailed-error.d.ts diff --git a/src/detailed-error.d.ts.map b/dist/cjs/detailed-error.d.ts.map similarity index 100% rename from src/detailed-error.d.ts.map rename to dist/cjs/detailed-error.d.ts.map diff --git a/src/detailed-error.js b/dist/cjs/detailed-error.js similarity index 100% rename from src/detailed-error.js rename to dist/cjs/detailed-error.js diff --git a/src/detailed-error.js.map b/dist/cjs/detailed-error.js.map similarity index 100% rename from src/detailed-error.js.map rename to dist/cjs/detailed-error.js.map diff --git a/src/geohash.d.ts b/dist/cjs/geohash.d.ts similarity index 100% rename from src/geohash.d.ts rename to dist/cjs/geohash.d.ts diff --git a/src/geohash.d.ts.map b/dist/cjs/geohash.d.ts.map similarity index 100% rename from src/geohash.d.ts.map rename to dist/cjs/geohash.d.ts.map diff --git a/src/geohash.js b/dist/cjs/geohash.js similarity index 100% rename from src/geohash.js rename to dist/cjs/geohash.js diff --git a/src/geohash.js.map b/dist/cjs/geohash.js.map similarity index 100% rename from src/geohash.js.map rename to dist/cjs/geohash.js.map diff --git a/src/index.d.ts b/dist/cjs/index.d.ts similarity index 100% rename from src/index.d.ts rename to dist/cjs/index.d.ts diff --git a/src/index.d.ts.map b/dist/cjs/index.d.ts.map similarity index 100% rename from src/index.d.ts.map rename to dist/cjs/index.d.ts.map diff --git a/src/index.js b/dist/cjs/index.js similarity index 100% rename from src/index.js rename to dist/cjs/index.js diff --git a/src/index.js.map b/dist/cjs/index.js.map similarity index 100% rename from src/index.js.map rename to dist/cjs/index.js.map diff --git a/src/ipc/browser.d.ts b/dist/cjs/ipc/browser.d.ts similarity index 100% rename from src/ipc/browser.d.ts rename to dist/cjs/ipc/browser.d.ts diff --git a/src/ipc/browser.d.ts.map b/dist/cjs/ipc/browser.d.ts.map similarity index 100% rename from src/ipc/browser.d.ts.map rename to dist/cjs/ipc/browser.d.ts.map diff --git a/src/ipc/browser.js b/dist/cjs/ipc/browser.js similarity index 100% rename from src/ipc/browser.js rename to dist/cjs/ipc/browser.js diff --git a/src/ipc/browser.js.map b/dist/cjs/ipc/browser.js.map similarity index 100% rename from src/ipc/browser.js.map rename to dist/cjs/ipc/browser.js.map diff --git a/src/ipc/index.d.ts b/dist/cjs/ipc/index.d.ts similarity index 100% rename from src/ipc/index.d.ts rename to dist/cjs/ipc/index.d.ts diff --git a/src/ipc/index.d.ts.map b/dist/cjs/ipc/index.d.ts.map similarity index 100% rename from src/ipc/index.d.ts.map rename to dist/cjs/ipc/index.d.ts.map diff --git a/src/ipc/index.js b/dist/cjs/ipc/index.js similarity index 100% rename from src/ipc/index.js rename to dist/cjs/ipc/index.js diff --git a/src/ipc/index.js.map b/dist/cjs/ipc/index.js.map similarity index 100% rename from src/ipc/index.js.map rename to dist/cjs/ipc/index.js.map diff --git a/src/ipc/ipc.d.ts b/dist/cjs/ipc/ipc.d.ts similarity index 100% rename from src/ipc/ipc.d.ts rename to dist/cjs/ipc/ipc.d.ts diff --git a/src/ipc/ipc.d.ts.map b/dist/cjs/ipc/ipc.d.ts.map similarity index 100% rename from src/ipc/ipc.d.ts.map rename to dist/cjs/ipc/ipc.d.ts.map diff --git a/src/ipc/ipc.js b/dist/cjs/ipc/ipc.js similarity index 100% rename from src/ipc/ipc.js rename to dist/cjs/ipc/ipc.js diff --git a/src/ipc/ipc.js.map b/dist/cjs/ipc/ipc.js.map similarity index 100% rename from src/ipc/ipc.js.map rename to dist/cjs/ipc/ipc.js.map diff --git a/src/ipc/remote.d.ts b/dist/cjs/ipc/remote.d.ts similarity index 100% rename from src/ipc/remote.d.ts rename to dist/cjs/ipc/remote.d.ts diff --git a/src/ipc/remote.d.ts.map b/dist/cjs/ipc/remote.d.ts.map similarity index 100% rename from src/ipc/remote.d.ts.map rename to dist/cjs/ipc/remote.d.ts.map diff --git a/src/ipc/remote.js b/dist/cjs/ipc/remote.js similarity index 100% rename from src/ipc/remote.js rename to dist/cjs/ipc/remote.js diff --git a/src/ipc/remote.js.map b/dist/cjs/ipc/remote.js.map similarity index 100% rename from src/ipc/remote.js.map rename to dist/cjs/ipc/remote.js.map diff --git a/src/node-address.d.ts b/dist/cjs/node-address.d.ts similarity index 100% rename from src/node-address.d.ts rename to dist/cjs/node-address.d.ts diff --git a/src/node-address.d.ts.map b/dist/cjs/node-address.d.ts.map similarity index 100% rename from src/node-address.d.ts.map rename to dist/cjs/node-address.d.ts.map diff --git a/src/node-address.js b/dist/cjs/node-address.js similarity index 100% rename from src/node-address.js rename to dist/cjs/node-address.js diff --git a/src/node-address.js.map b/dist/cjs/node-address.js.map similarity index 100% rename from src/node-address.js.map rename to dist/cjs/node-address.js.map diff --git a/src/node-cache.d.ts b/dist/cjs/node-cache.d.ts similarity index 100% rename from src/node-cache.d.ts rename to dist/cjs/node-cache.d.ts diff --git a/src/node-cache.d.ts.map b/dist/cjs/node-cache.d.ts.map similarity index 100% rename from src/node-cache.d.ts.map rename to dist/cjs/node-cache.d.ts.map diff --git a/src/node-cache.js b/dist/cjs/node-cache.js similarity index 100% rename from src/node-cache.js rename to dist/cjs/node-cache.js diff --git a/src/node-cache.js.map b/dist/cjs/node-cache.js.map similarity index 100% rename from src/node-cache.js.map rename to dist/cjs/node-cache.js.map diff --git a/src/node-changes.d.ts b/dist/cjs/node-changes.d.ts similarity index 100% rename from src/node-changes.d.ts rename to dist/cjs/node-changes.d.ts diff --git a/src/node-changes.d.ts.map b/dist/cjs/node-changes.d.ts.map similarity index 100% rename from src/node-changes.d.ts.map rename to dist/cjs/node-changes.d.ts.map diff --git a/src/node-changes.js b/dist/cjs/node-changes.js similarity index 100% rename from src/node-changes.js rename to dist/cjs/node-changes.js diff --git a/src/node-changes.js.map b/dist/cjs/node-changes.js.map similarity index 100% rename from src/node-changes.js.map rename to dist/cjs/node-changes.js.map diff --git a/src/node-errors.d.ts b/dist/cjs/node-errors.d.ts similarity index 100% rename from src/node-errors.d.ts rename to dist/cjs/node-errors.d.ts diff --git a/src/node-errors.d.ts.map b/dist/cjs/node-errors.d.ts.map similarity index 100% rename from src/node-errors.d.ts.map rename to dist/cjs/node-errors.d.ts.map diff --git a/src/node-errors.js b/dist/cjs/node-errors.js similarity index 100% rename from src/node-errors.js rename to dist/cjs/node-errors.js diff --git a/src/node-errors.js.map b/dist/cjs/node-errors.js.map similarity index 100% rename from src/node-errors.js.map rename to dist/cjs/node-errors.js.map diff --git a/src/node-info.d.ts b/dist/cjs/node-info.d.ts similarity index 100% rename from src/node-info.d.ts rename to dist/cjs/node-info.d.ts diff --git a/src/node-info.d.ts.map b/dist/cjs/node-info.d.ts.map similarity index 100% rename from src/node-info.d.ts.map rename to dist/cjs/node-info.d.ts.map diff --git a/src/node-info.js b/dist/cjs/node-info.js similarity index 100% rename from src/node-info.js rename to dist/cjs/node-info.js diff --git a/src/node-info.js.map b/dist/cjs/node-info.js.map similarity index 100% rename from src/node-info.js.map rename to dist/cjs/node-info.js.map diff --git a/src/node-lock.d.ts b/dist/cjs/node-lock.d.ts similarity index 100% rename from src/node-lock.d.ts rename to dist/cjs/node-lock.d.ts diff --git a/src/node-lock.d.ts.map b/dist/cjs/node-lock.d.ts.map similarity index 100% rename from src/node-lock.d.ts.map rename to dist/cjs/node-lock.d.ts.map diff --git a/src/node-lock.js b/dist/cjs/node-lock.js similarity index 100% rename from src/node-lock.js rename to dist/cjs/node-lock.js diff --git a/src/node-lock.js.map b/dist/cjs/node-lock.js.map similarity index 100% rename from src/node-lock.js.map rename to dist/cjs/node-lock.js.map diff --git a/src/node-transaction.d.ts b/dist/cjs/node-transaction.d.ts similarity index 100% rename from src/node-transaction.d.ts rename to dist/cjs/node-transaction.d.ts diff --git a/src/node-transaction.d.ts.map b/dist/cjs/node-transaction.d.ts.map similarity index 100% rename from src/node-transaction.d.ts.map rename to dist/cjs/node-transaction.d.ts.map diff --git a/src/node-transaction.js b/dist/cjs/node-transaction.js similarity index 100% rename from src/node-transaction.js rename to dist/cjs/node-transaction.js diff --git a/src/node-transaction.js.map b/dist/cjs/node-transaction.js.map similarity index 100% rename from src/node-transaction.js.map rename to dist/cjs/node-transaction.js.map diff --git a/src/node-value-types.d.ts b/dist/cjs/node-value-types.d.ts similarity index 100% rename from src/node-value-types.d.ts rename to dist/cjs/node-value-types.d.ts diff --git a/src/node-value-types.d.ts.map b/dist/cjs/node-value-types.d.ts.map similarity index 100% rename from src/node-value-types.d.ts.map rename to dist/cjs/node-value-types.d.ts.map diff --git a/src/node-value-types.js b/dist/cjs/node-value-types.js similarity index 100% rename from src/node-value-types.js rename to dist/cjs/node-value-types.js diff --git a/src/node-value-types.js.map b/dist/cjs/node-value-types.js.map similarity index 100% rename from src/node-value-types.js.map rename to dist/cjs/node-value-types.js.map diff --git a/src/node.d.ts b/dist/cjs/node.d.ts similarity index 100% rename from src/node.d.ts rename to dist/cjs/node.d.ts diff --git a/src/node.d.ts.map b/dist/cjs/node.d.ts.map similarity index 100% rename from src/node.d.ts.map rename to dist/cjs/node.d.ts.map diff --git a/src/node.js b/dist/cjs/node.js similarity index 100% rename from src/node.js rename to dist/cjs/node.js diff --git a/src/node.js.map b/dist/cjs/node.js.map similarity index 100% rename from src/node.js.map rename to dist/cjs/node.js.map diff --git a/src/promise-fs/browser.d.ts b/dist/cjs/promise-fs/browser.d.ts similarity index 100% rename from src/promise-fs/browser.d.ts rename to dist/cjs/promise-fs/browser.d.ts diff --git a/src/promise-fs/browser.d.ts.map b/dist/cjs/promise-fs/browser.d.ts.map similarity index 100% rename from src/promise-fs/browser.d.ts.map rename to dist/cjs/promise-fs/browser.d.ts.map diff --git a/src/promise-fs/browser.js b/dist/cjs/promise-fs/browser.js similarity index 100% rename from src/promise-fs/browser.js rename to dist/cjs/promise-fs/browser.js diff --git a/src/promise-fs/browser.js.map b/dist/cjs/promise-fs/browser.js.map similarity index 100% rename from src/promise-fs/browser.js.map rename to dist/cjs/promise-fs/browser.js.map diff --git a/src/promise-fs/index.d.ts b/dist/cjs/promise-fs/index.d.ts similarity index 100% rename from src/promise-fs/index.d.ts rename to dist/cjs/promise-fs/index.d.ts diff --git a/src/promise-fs/index.d.ts.map b/dist/cjs/promise-fs/index.d.ts.map similarity index 100% rename from src/promise-fs/index.d.ts.map rename to dist/cjs/promise-fs/index.d.ts.map diff --git a/src/promise-fs/index.js b/dist/cjs/promise-fs/index.js similarity index 100% rename from src/promise-fs/index.js rename to dist/cjs/promise-fs/index.js diff --git a/src/promise-fs/index.js.map b/dist/cjs/promise-fs/index.js.map similarity index 100% rename from src/promise-fs/index.js.map rename to dist/cjs/promise-fs/index.js.map diff --git a/src/query.d.ts b/dist/cjs/query.d.ts similarity index 100% rename from src/query.d.ts rename to dist/cjs/query.d.ts diff --git a/src/query.d.ts.map b/dist/cjs/query.d.ts.map similarity index 100% rename from src/query.d.ts.map rename to dist/cjs/query.d.ts.map diff --git a/src/query.js b/dist/cjs/query.js similarity index 100% rename from src/query.js rename to dist/cjs/query.js diff --git a/src/query.js.map b/dist/cjs/query.js.map similarity index 100% rename from src/query.js.map rename to dist/cjs/query.js.map diff --git a/src/quicksort.d.ts b/dist/cjs/quicksort.d.ts similarity index 100% rename from src/quicksort.d.ts rename to dist/cjs/quicksort.d.ts diff --git a/src/quicksort.d.ts.map b/dist/cjs/quicksort.d.ts.map similarity index 100% rename from src/quicksort.d.ts.map rename to dist/cjs/quicksort.d.ts.map diff --git a/src/quicksort.js b/dist/cjs/quicksort.js similarity index 100% rename from src/quicksort.js rename to dist/cjs/quicksort.js diff --git a/src/quicksort.js.map b/dist/cjs/quicksort.js.map similarity index 100% rename from src/quicksort.js.map rename to dist/cjs/quicksort.js.map diff --git a/src/storage/binary/index.d.ts b/dist/cjs/storage/binary/index.d.ts similarity index 100% rename from src/storage/binary/index.d.ts rename to dist/cjs/storage/binary/index.d.ts diff --git a/src/storage/binary/index.d.ts.map b/dist/cjs/storage/binary/index.d.ts.map similarity index 100% rename from src/storage/binary/index.d.ts.map rename to dist/cjs/storage/binary/index.d.ts.map diff --git a/src/storage/binary/index.js b/dist/cjs/storage/binary/index.js similarity index 100% rename from src/storage/binary/index.js rename to dist/cjs/storage/binary/index.js diff --git a/src/storage/binary/index.js.map b/dist/cjs/storage/binary/index.js.map similarity index 100% rename from src/storage/binary/index.js.map rename to dist/cjs/storage/binary/index.js.map diff --git a/src/storage/binary/node-address.d.ts b/dist/cjs/storage/binary/node-address.d.ts similarity index 100% rename from src/storage/binary/node-address.d.ts rename to dist/cjs/storage/binary/node-address.d.ts diff --git a/src/storage/binary/node-address.d.ts.map b/dist/cjs/storage/binary/node-address.d.ts.map similarity index 100% rename from src/storage/binary/node-address.d.ts.map rename to dist/cjs/storage/binary/node-address.d.ts.map diff --git a/src/storage/binary/node-address.js b/dist/cjs/storage/binary/node-address.js similarity index 100% rename from src/storage/binary/node-address.js rename to dist/cjs/storage/binary/node-address.js diff --git a/src/storage/binary/node-address.js.map b/dist/cjs/storage/binary/node-address.js.map similarity index 100% rename from src/storage/binary/node-address.js.map rename to dist/cjs/storage/binary/node-address.js.map diff --git a/src/storage/binary/node-info.d.ts b/dist/cjs/storage/binary/node-info.d.ts similarity index 100% rename from src/storage/binary/node-info.d.ts rename to dist/cjs/storage/binary/node-info.d.ts diff --git a/src/storage/binary/node-info.d.ts.map b/dist/cjs/storage/binary/node-info.d.ts.map similarity index 100% rename from src/storage/binary/node-info.d.ts.map rename to dist/cjs/storage/binary/node-info.d.ts.map diff --git a/src/storage/binary/node-info.js b/dist/cjs/storage/binary/node-info.js similarity index 100% rename from src/storage/binary/node-info.js rename to dist/cjs/storage/binary/node-info.js diff --git a/src/storage/binary/node-info.js.map b/dist/cjs/storage/binary/node-info.js.map similarity index 100% rename from src/storage/binary/node-info.js.map rename to dist/cjs/storage/binary/node-info.js.map diff --git a/src/storage/context.d.ts b/dist/cjs/storage/context.d.ts similarity index 100% rename from src/storage/context.d.ts rename to dist/cjs/storage/context.d.ts diff --git a/src/storage/context.d.ts.map b/dist/cjs/storage/context.d.ts.map similarity index 100% rename from src/storage/context.d.ts.map rename to dist/cjs/storage/context.d.ts.map diff --git a/src/storage/context.js b/dist/cjs/storage/context.js similarity index 100% rename from src/storage/context.js rename to dist/cjs/storage/context.js diff --git a/src/storage/context.js.map b/dist/cjs/storage/context.js.map similarity index 100% rename from src/storage/context.js.map rename to dist/cjs/storage/context.js.map diff --git a/src/storage/create-index.d.ts b/dist/cjs/storage/create-index.d.ts similarity index 100% rename from src/storage/create-index.d.ts rename to dist/cjs/storage/create-index.d.ts diff --git a/src/storage/create-index.d.ts.map b/dist/cjs/storage/create-index.d.ts.map similarity index 100% rename from src/storage/create-index.d.ts.map rename to dist/cjs/storage/create-index.d.ts.map diff --git a/src/storage/create-index.js b/dist/cjs/storage/create-index.js similarity index 100% rename from src/storage/create-index.js rename to dist/cjs/storage/create-index.js diff --git a/src/storage/create-index.js.map b/dist/cjs/storage/create-index.js.map similarity index 100% rename from src/storage/create-index.js.map rename to dist/cjs/storage/create-index.js.map diff --git a/src/storage/custom/helpers.d.ts b/dist/cjs/storage/custom/helpers.d.ts similarity index 100% rename from src/storage/custom/helpers.d.ts rename to dist/cjs/storage/custom/helpers.d.ts diff --git a/src/storage/custom/helpers.d.ts.map b/dist/cjs/storage/custom/helpers.d.ts.map similarity index 100% rename from src/storage/custom/helpers.d.ts.map rename to dist/cjs/storage/custom/helpers.d.ts.map diff --git a/src/storage/custom/helpers.js b/dist/cjs/storage/custom/helpers.js similarity index 100% rename from src/storage/custom/helpers.js rename to dist/cjs/storage/custom/helpers.js diff --git a/src/storage/custom/helpers.js.map b/dist/cjs/storage/custom/helpers.js.map similarity index 100% rename from src/storage/custom/helpers.js.map rename to dist/cjs/storage/custom/helpers.js.map diff --git a/src/storage/custom/index.d.ts b/dist/cjs/storage/custom/index.d.ts similarity index 100% rename from src/storage/custom/index.d.ts rename to dist/cjs/storage/custom/index.d.ts diff --git a/src/storage/custom/index.d.ts.map b/dist/cjs/storage/custom/index.d.ts.map similarity index 100% rename from src/storage/custom/index.d.ts.map rename to dist/cjs/storage/custom/index.d.ts.map diff --git a/src/storage/custom/index.js b/dist/cjs/storage/custom/index.js similarity index 100% rename from src/storage/custom/index.js rename to dist/cjs/storage/custom/index.js diff --git a/src/storage/custom/index.js.map b/dist/cjs/storage/custom/index.js.map similarity index 100% rename from src/storage/custom/index.js.map rename to dist/cjs/storage/custom/index.js.map diff --git a/src/storage/custom/indexed-db/index.d.ts b/dist/cjs/storage/custom/indexed-db/index.d.ts similarity index 100% rename from src/storage/custom/indexed-db/index.d.ts rename to dist/cjs/storage/custom/indexed-db/index.d.ts diff --git a/src/storage/custom/indexed-db/index.d.ts.map b/dist/cjs/storage/custom/indexed-db/index.d.ts.map similarity index 100% rename from src/storage/custom/indexed-db/index.d.ts.map rename to dist/cjs/storage/custom/indexed-db/index.d.ts.map diff --git a/src/storage/custom/indexed-db/index.js b/dist/cjs/storage/custom/indexed-db/index.js similarity index 100% rename from src/storage/custom/indexed-db/index.js rename to dist/cjs/storage/custom/indexed-db/index.js diff --git a/src/storage/custom/indexed-db/index.js.map b/dist/cjs/storage/custom/indexed-db/index.js.map similarity index 100% rename from src/storage/custom/indexed-db/index.js.map rename to dist/cjs/storage/custom/indexed-db/index.js.map diff --git a/src/storage/custom/indexed-db/settings.d.ts b/dist/cjs/storage/custom/indexed-db/settings.d.ts similarity index 100% rename from src/storage/custom/indexed-db/settings.d.ts rename to dist/cjs/storage/custom/indexed-db/settings.d.ts diff --git a/src/storage/custom/indexed-db/settings.d.ts.map b/dist/cjs/storage/custom/indexed-db/settings.d.ts.map similarity index 100% rename from src/storage/custom/indexed-db/settings.d.ts.map rename to dist/cjs/storage/custom/indexed-db/settings.d.ts.map diff --git a/src/storage/custom/indexed-db/settings.js b/dist/cjs/storage/custom/indexed-db/settings.js similarity index 100% rename from src/storage/custom/indexed-db/settings.js rename to dist/cjs/storage/custom/indexed-db/settings.js diff --git a/src/storage/custom/indexed-db/settings.js.map b/dist/cjs/storage/custom/indexed-db/settings.js.map similarity index 100% rename from src/storage/custom/indexed-db/settings.js.map rename to dist/cjs/storage/custom/indexed-db/settings.js.map diff --git a/src/storage/custom/indexed-db/transaction.d.ts b/dist/cjs/storage/custom/indexed-db/transaction.d.ts similarity index 100% rename from src/storage/custom/indexed-db/transaction.d.ts rename to dist/cjs/storage/custom/indexed-db/transaction.d.ts diff --git a/src/storage/custom/indexed-db/transaction.d.ts.map b/dist/cjs/storage/custom/indexed-db/transaction.d.ts.map similarity index 100% rename from src/storage/custom/indexed-db/transaction.d.ts.map rename to dist/cjs/storage/custom/indexed-db/transaction.d.ts.map diff --git a/src/storage/custom/indexed-db/transaction.js b/dist/cjs/storage/custom/indexed-db/transaction.js similarity index 100% rename from src/storage/custom/indexed-db/transaction.js rename to dist/cjs/storage/custom/indexed-db/transaction.js diff --git a/src/storage/custom/indexed-db/transaction.js.map b/dist/cjs/storage/custom/indexed-db/transaction.js.map similarity index 100% rename from src/storage/custom/indexed-db/transaction.js.map rename to dist/cjs/storage/custom/indexed-db/transaction.js.map diff --git a/src/storage/custom/local-storage/index.d.ts b/dist/cjs/storage/custom/local-storage/index.d.ts similarity index 100% rename from src/storage/custom/local-storage/index.d.ts rename to dist/cjs/storage/custom/local-storage/index.d.ts diff --git a/src/storage/custom/local-storage/index.d.ts.map b/dist/cjs/storage/custom/local-storage/index.d.ts.map similarity index 100% rename from src/storage/custom/local-storage/index.d.ts.map rename to dist/cjs/storage/custom/local-storage/index.d.ts.map diff --git a/src/storage/custom/local-storage/index.js b/dist/cjs/storage/custom/local-storage/index.js similarity index 100% rename from src/storage/custom/local-storage/index.js rename to dist/cjs/storage/custom/local-storage/index.js diff --git a/src/storage/custom/local-storage/index.js.map b/dist/cjs/storage/custom/local-storage/index.js.map similarity index 100% rename from src/storage/custom/local-storage/index.js.map rename to dist/cjs/storage/custom/local-storage/index.js.map diff --git a/src/storage/custom/local-storage/interface.d.ts b/dist/cjs/storage/custom/local-storage/interface.d.ts similarity index 100% rename from src/storage/custom/local-storage/interface.d.ts rename to dist/cjs/storage/custom/local-storage/interface.d.ts diff --git a/src/storage/custom/local-storage/interface.d.ts.map b/dist/cjs/storage/custom/local-storage/interface.d.ts.map similarity index 100% rename from src/storage/custom/local-storage/interface.d.ts.map rename to dist/cjs/storage/custom/local-storage/interface.d.ts.map diff --git a/src/storage/custom/local-storage/interface.js b/dist/cjs/storage/custom/local-storage/interface.js similarity index 100% rename from src/storage/custom/local-storage/interface.js rename to dist/cjs/storage/custom/local-storage/interface.js diff --git a/src/storage/custom/local-storage/interface.js.map b/dist/cjs/storage/custom/local-storage/interface.js.map similarity index 100% rename from src/storage/custom/local-storage/interface.js.map rename to dist/cjs/storage/custom/local-storage/interface.js.map diff --git a/src/storage/custom/local-storage/local-storage-like.js b/dist/cjs/storage/custom/local-storage/local-storage-like.js similarity index 100% rename from src/storage/custom/local-storage/local-storage-like.js rename to dist/cjs/storage/custom/local-storage/local-storage-like.js diff --git a/src/storage/custom/local-storage/local-storage-like.js.map b/dist/cjs/storage/custom/local-storage/local-storage-like.js.map similarity index 100% rename from src/storage/custom/local-storage/local-storage-like.js.map rename to dist/cjs/storage/custom/local-storage/local-storage-like.js.map diff --git a/src/storage/custom/local-storage/settings.d.ts b/dist/cjs/storage/custom/local-storage/settings.d.ts similarity index 100% rename from src/storage/custom/local-storage/settings.d.ts rename to dist/cjs/storage/custom/local-storage/settings.d.ts diff --git a/src/storage/custom/local-storage/settings.d.ts.map b/dist/cjs/storage/custom/local-storage/settings.d.ts.map similarity index 100% rename from src/storage/custom/local-storage/settings.d.ts.map rename to dist/cjs/storage/custom/local-storage/settings.d.ts.map diff --git a/src/storage/custom/local-storage/settings.js b/dist/cjs/storage/custom/local-storage/settings.js similarity index 100% rename from src/storage/custom/local-storage/settings.js rename to dist/cjs/storage/custom/local-storage/settings.js diff --git a/src/storage/custom/local-storage/settings.js.map b/dist/cjs/storage/custom/local-storage/settings.js.map similarity index 100% rename from src/storage/custom/local-storage/settings.js.map rename to dist/cjs/storage/custom/local-storage/settings.js.map diff --git a/src/storage/custom/local-storage/transaction.d.ts b/dist/cjs/storage/custom/local-storage/transaction.d.ts similarity index 100% rename from src/storage/custom/local-storage/transaction.d.ts rename to dist/cjs/storage/custom/local-storage/transaction.d.ts diff --git a/src/storage/custom/local-storage/transaction.d.ts.map b/dist/cjs/storage/custom/local-storage/transaction.d.ts.map similarity index 100% rename from src/storage/custom/local-storage/transaction.d.ts.map rename to dist/cjs/storage/custom/local-storage/transaction.d.ts.map diff --git a/src/storage/custom/local-storage/transaction.js b/dist/cjs/storage/custom/local-storage/transaction.js similarity index 100% rename from src/storage/custom/local-storage/transaction.js rename to dist/cjs/storage/custom/local-storage/transaction.js diff --git a/src/storage/custom/local-storage/transaction.js.map b/dist/cjs/storage/custom/local-storage/transaction.js.map similarity index 100% rename from src/storage/custom/local-storage/transaction.js.map rename to dist/cjs/storage/custom/local-storage/transaction.js.map diff --git a/src/storage/index.d.ts b/dist/cjs/storage/index.d.ts similarity index 100% rename from src/storage/index.d.ts rename to dist/cjs/storage/index.d.ts diff --git a/src/storage/index.d.ts.map b/dist/cjs/storage/index.d.ts.map similarity index 100% rename from src/storage/index.d.ts.map rename to dist/cjs/storage/index.d.ts.map diff --git a/src/storage/index.js b/dist/cjs/storage/index.js similarity index 100% rename from src/storage/index.js rename to dist/cjs/storage/index.js diff --git a/src/storage/index.js.map b/dist/cjs/storage/index.js.map similarity index 100% rename from src/storage/index.js.map rename to dist/cjs/storage/index.js.map diff --git a/src/storage/indexes.d.ts b/dist/cjs/storage/indexes.d.ts similarity index 100% rename from src/storage/indexes.d.ts rename to dist/cjs/storage/indexes.d.ts diff --git a/src/storage/indexes.d.ts.map b/dist/cjs/storage/indexes.d.ts.map similarity index 100% rename from src/storage/indexes.d.ts.map rename to dist/cjs/storage/indexes.d.ts.map diff --git a/src/storage/indexes.js b/dist/cjs/storage/indexes.js similarity index 100% rename from src/storage/indexes.js rename to dist/cjs/storage/indexes.js diff --git a/src/storage/indexes.js.map b/dist/cjs/storage/indexes.js.map similarity index 100% rename from src/storage/indexes.js.map rename to dist/cjs/storage/indexes.js.map diff --git a/src/storage/mssql/index.d.ts b/dist/cjs/storage/mssql/index.d.ts similarity index 100% rename from src/storage/mssql/index.d.ts rename to dist/cjs/storage/mssql/index.d.ts diff --git a/src/storage/mssql/index.d.ts.map b/dist/cjs/storage/mssql/index.d.ts.map similarity index 100% rename from src/storage/mssql/index.d.ts.map rename to dist/cjs/storage/mssql/index.d.ts.map diff --git a/src/storage/mssql/index.js b/dist/cjs/storage/mssql/index.js similarity index 100% rename from src/storage/mssql/index.js rename to dist/cjs/storage/mssql/index.js diff --git a/src/storage/mssql/index.js.map b/dist/cjs/storage/mssql/index.js.map similarity index 100% rename from src/storage/mssql/index.js.map rename to dist/cjs/storage/mssql/index.js.map diff --git a/src/storage/sqlite/index.d.ts b/dist/cjs/storage/sqlite/index.d.ts similarity index 100% rename from src/storage/sqlite/index.d.ts rename to dist/cjs/storage/sqlite/index.d.ts diff --git a/src/storage/sqlite/index.d.ts.map b/dist/cjs/storage/sqlite/index.d.ts.map similarity index 100% rename from src/storage/sqlite/index.d.ts.map rename to dist/cjs/storage/sqlite/index.d.ts.map diff --git a/src/storage/sqlite/index.js b/dist/cjs/storage/sqlite/index.js similarity index 100% rename from src/storage/sqlite/index.js rename to dist/cjs/storage/sqlite/index.js diff --git a/src/storage/sqlite/index.js.map b/dist/cjs/storage/sqlite/index.js.map similarity index 100% rename from src/storage/sqlite/index.js.map rename to dist/cjs/storage/sqlite/index.js.map diff --git a/src/storage/storage-custom.js b/dist/cjs/storage/storage-custom.js similarity index 100% rename from src/storage/storage-custom.js rename to dist/cjs/storage/storage-custom.js diff --git a/src/storage/storage-custom.js.map b/dist/cjs/storage/storage-custom.js.map similarity index 100% rename from src/storage/storage-custom.js.map rename to dist/cjs/storage/storage-custom.js.map diff --git a/src/thread-safe.d.ts b/dist/cjs/thread-safe.d.ts similarity index 100% rename from src/thread-safe.d.ts rename to dist/cjs/thread-safe.d.ts diff --git a/src/thread-safe.d.ts.map b/dist/cjs/thread-safe.d.ts.map similarity index 100% rename from src/thread-safe.d.ts.map rename to dist/cjs/thread-safe.d.ts.map diff --git a/src/thread-safe.js b/dist/cjs/thread-safe.js similarity index 100% rename from src/thread-safe.js rename to dist/cjs/thread-safe.js diff --git a/src/thread-safe.js.map b/dist/cjs/thread-safe.js.map similarity index 100% rename from src/thread-safe.js.map rename to dist/cjs/thread-safe.js.map diff --git a/src/unidecode-module.d.ts b/dist/cjs/unidecode-module.d.ts similarity index 100% rename from src/unidecode-module.d.ts rename to dist/cjs/unidecode-module.d.ts diff --git a/src/unidecode-module.d.ts.map b/dist/cjs/unidecode-module.d.ts.map similarity index 100% rename from src/unidecode-module.d.ts.map rename to dist/cjs/unidecode-module.d.ts.map diff --git a/src/unidecode-module.js b/dist/cjs/unidecode-module.js similarity index 100% rename from src/unidecode-module.js rename to dist/cjs/unidecode-module.js diff --git a/src/unidecode-module.js.map b/dist/cjs/unidecode-module.js.map similarity index 100% rename from src/unidecode-module.js.map rename to dist/cjs/unidecode-module.js.map diff --git a/src/unidecode.d.ts b/dist/cjs/unidecode.d.ts similarity index 100% rename from src/unidecode.d.ts rename to dist/cjs/unidecode.d.ts diff --git a/src/unidecode.d.ts.map b/dist/cjs/unidecode.d.ts.map similarity index 100% rename from src/unidecode.d.ts.map rename to dist/cjs/unidecode.d.ts.map diff --git a/src/unidecode.js b/dist/cjs/unidecode.js similarity index 100% rename from src/unidecode.js rename to dist/cjs/unidecode.js diff --git a/src/unidecode.js.map b/dist/cjs/unidecode.js.map similarity index 100% rename from src/unidecode.js.map rename to dist/cjs/unidecode.js.map diff --git a/src/ts/acebase-browser.ts b/src/acebase-browser.ts similarity index 100% rename from src/ts/acebase-browser.ts rename to src/acebase-browser.ts diff --git a/src/ts/acebase-local.ts b/src/acebase-local.ts similarity index 100% rename from src/ts/acebase-local.ts rename to src/acebase-local.ts diff --git a/src/ts/api-local.ts b/src/api-local.ts similarity index 100% rename from src/ts/api-local.ts rename to src/api-local.ts diff --git a/src/ts/async-task-batch.ts b/src/async-task-batch.ts similarity index 100% rename from src/ts/async-task-batch.ts rename to src/async-task-batch.ts diff --git a/src/ts/binary.ts b/src/binary.ts similarity index 100% rename from src/ts/binary.ts rename to src/binary.ts diff --git a/src/ts/browser.ts b/src/browser.ts similarity index 100% rename from src/ts/browser.ts rename to src/browser.ts diff --git a/src/ts/btree/binary-reader.ts b/src/btree/binary-reader.ts similarity index 100% rename from src/ts/btree/binary-reader.ts rename to src/btree/binary-reader.ts diff --git a/src/ts/btree/binary-tree-builder.ts b/src/btree/binary-tree-builder.ts similarity index 100% rename from src/ts/btree/binary-tree-builder.ts rename to src/btree/binary-tree-builder.ts diff --git a/src/ts/btree/binary-tree-leaf-entry-extdata.ts b/src/btree/binary-tree-leaf-entry-extdata.ts similarity index 100% rename from src/ts/btree/binary-tree-leaf-entry-extdata.ts rename to src/btree/binary-tree-leaf-entry-extdata.ts diff --git a/src/ts/btree/binary-tree-leaf-entry-value.ts b/src/btree/binary-tree-leaf-entry-value.ts similarity index 100% rename from src/ts/btree/binary-tree-leaf-entry-value.ts rename to src/btree/binary-tree-leaf-entry-value.ts diff --git a/src/ts/btree/binary-tree-leaf-entry.ts b/src/btree/binary-tree-leaf-entry.ts similarity index 100% rename from src/ts/btree/binary-tree-leaf-entry.ts rename to src/btree/binary-tree-leaf-entry.ts diff --git a/src/ts/btree/binary-tree-leaf.ts b/src/btree/binary-tree-leaf.ts similarity index 100% rename from src/ts/btree/binary-tree-leaf.ts rename to src/btree/binary-tree-leaf.ts diff --git a/src/ts/btree/binary-tree-node-entry.ts b/src/btree/binary-tree-node-entry.ts similarity index 100% rename from src/ts/btree/binary-tree-node-entry.ts rename to src/btree/binary-tree-node-entry.ts diff --git a/src/ts/btree/binary-tree-node-info.ts b/src/btree/binary-tree-node-info.ts similarity index 100% rename from src/ts/btree/binary-tree-node-info.ts rename to src/btree/binary-tree-node-info.ts diff --git a/src/ts/btree/binary-tree-node.ts b/src/btree/binary-tree-node.ts similarity index 100% rename from src/ts/btree/binary-tree-node.ts rename to src/btree/binary-tree-node.ts diff --git a/src/ts/btree/binary-tree-transaction-operation.ts b/src/btree/binary-tree-transaction-operation.ts similarity index 100% rename from src/ts/btree/binary-tree-transaction-operation.ts rename to src/btree/binary-tree-transaction-operation.ts diff --git a/src/ts/btree/binary-tree.ts b/src/btree/binary-tree.ts similarity index 100% rename from src/ts/btree/binary-tree.ts rename to src/btree/binary-tree.ts diff --git a/src/ts/btree/binary-writer.ts b/src/btree/binary-writer.ts similarity index 100% rename from src/ts/btree/binary-writer.ts rename to src/btree/binary-writer.ts diff --git a/src/ts/btree/config.ts b/src/btree/config.ts similarity index 100% rename from src/ts/btree/config.ts rename to src/btree/config.ts diff --git a/src/ts/btree/entry-key-type.ts b/src/btree/entry-key-type.ts similarity index 100% rename from src/ts/btree/entry-key-type.ts rename to src/btree/entry-key-type.ts diff --git a/src/ts/btree/index.ts b/src/btree/index.ts similarity index 100% rename from src/ts/btree/index.ts rename to src/btree/index.ts diff --git a/src/ts/btree/leaf-entry-metadata.ts b/src/btree/leaf-entry-metadata.ts similarity index 100% rename from src/ts/btree/leaf-entry-metadata.ts rename to src/btree/leaf-entry-metadata.ts diff --git a/src/ts/btree/leaf-entry-recordpointer.ts b/src/btree/leaf-entry-recordpointer.ts similarity index 100% rename from src/ts/btree/leaf-entry-recordpointer.ts rename to src/btree/leaf-entry-recordpointer.ts diff --git a/src/ts/btree/tree-builder.ts b/src/btree/tree-builder.ts similarity index 100% rename from src/ts/btree/tree-builder.ts rename to src/btree/tree-builder.ts diff --git a/src/ts/btree/tree-leaf-entry-value.ts b/src/btree/tree-leaf-entry-value.ts similarity index 100% rename from src/ts/btree/tree-leaf-entry-value.ts rename to src/btree/tree-leaf-entry-value.ts diff --git a/src/ts/btree/tree-leaf-entry.ts b/src/btree/tree-leaf-entry.ts similarity index 100% rename from src/ts/btree/tree-leaf-entry.ts rename to src/btree/tree-leaf-entry.ts diff --git a/src/ts/btree/tree-leaf.ts b/src/btree/tree-leaf.ts similarity index 100% rename from src/ts/btree/tree-leaf.ts rename to src/btree/tree-leaf.ts diff --git a/src/ts/btree/tree-node-entry.ts b/src/btree/tree-node-entry.ts similarity index 100% rename from src/ts/btree/tree-node-entry.ts rename to src/btree/tree-node-entry.ts diff --git a/src/ts/btree/tree-node.ts b/src/btree/tree-node.ts similarity index 100% rename from src/ts/btree/tree-node.ts rename to src/btree/tree-node.ts diff --git a/src/ts/btree/tree.ts b/src/btree/tree.ts similarity index 100% rename from src/ts/btree/tree.ts rename to src/btree/tree.ts diff --git a/src/ts/btree/tx.ts b/src/btree/tx.ts similarity index 100% rename from src/ts/btree/tx.ts rename to src/btree/tx.ts diff --git a/src/ts/btree/typesafe-compare.ts b/src/btree/typesafe-compare.ts similarity index 100% rename from src/ts/btree/typesafe-compare.ts rename to src/btree/typesafe-compare.ts diff --git a/src/ts/btree/utils.ts b/src/btree/utils.ts similarity index 100% rename from src/ts/btree/utils.ts rename to src/btree/utils.ts diff --git a/src/ts/data-index/array-index-query-hint.ts b/src/data-index/array-index-query-hint.ts similarity index 100% rename from src/ts/data-index/array-index-query-hint.ts rename to src/data-index/array-index-query-hint.ts diff --git a/src/ts/data-index/array-index.ts b/src/data-index/array-index.ts similarity index 100% rename from src/ts/data-index/array-index.ts rename to src/data-index/array-index.ts diff --git a/src/ts/data-index/data-index.ts b/src/data-index/data-index.ts similarity index 100% rename from src/ts/data-index/data-index.ts rename to src/data-index/data-index.ts diff --git a/src/ts/data-index/fulltext-index-query-hint.ts b/src/data-index/fulltext-index-query-hint.ts similarity index 100% rename from src/ts/data-index/fulltext-index-query-hint.ts rename to src/data-index/fulltext-index-query-hint.ts diff --git a/src/ts/data-index/fulltext-index.ts b/src/data-index/fulltext-index.ts similarity index 100% rename from src/ts/data-index/fulltext-index.ts rename to src/data-index/fulltext-index.ts diff --git a/src/ts/data-index/geo-index.ts b/src/data-index/geo-index.ts similarity index 100% rename from src/ts/data-index/geo-index.ts rename to src/data-index/geo-index.ts diff --git a/src/ts/data-index/index.ts b/src/data-index/index.ts similarity index 100% rename from src/ts/data-index/index.ts rename to src/data-index/index.ts diff --git a/src/ts/data-index/options.ts b/src/data-index/options.ts similarity index 100% rename from src/ts/data-index/options.ts rename to src/data-index/options.ts diff --git a/src/ts/data-index/query-hint.ts b/src/data-index/query-hint.ts similarity index 100% rename from src/ts/data-index/query-hint.ts rename to src/data-index/query-hint.ts diff --git a/src/ts/data-index/query-results.ts b/src/data-index/query-results.ts similarity index 100% rename from src/ts/data-index/query-results.ts rename to src/data-index/query-results.ts diff --git a/src/ts/data-index/query-stats.ts b/src/data-index/query-stats.ts similarity index 100% rename from src/ts/data-index/query-stats.ts rename to src/data-index/query-stats.ts diff --git a/src/ts/data-index/shared.ts b/src/data-index/shared.ts similarity index 100% rename from src/ts/data-index/shared.ts rename to src/data-index/shared.ts diff --git a/src/ts/detailed-error.ts b/src/detailed-error.ts similarity index 100% rename from src/ts/detailed-error.ts rename to src/detailed-error.ts diff --git a/src/ts/geohash.ts b/src/geohash.ts similarity index 100% rename from src/ts/geohash.ts rename to src/geohash.ts diff --git a/src/ts/index.ts b/src/index.ts similarity index 100% rename from src/ts/index.ts rename to src/index.ts diff --git a/src/ts/ipc/browser.ts b/src/ipc/browser.ts similarity index 100% rename from src/ts/ipc/browser.ts rename to src/ipc/browser.ts diff --git a/src/ts/ipc/index.ts b/src/ipc/index.ts similarity index 100% rename from src/ts/ipc/index.ts rename to src/ipc/index.ts diff --git a/src/ts/ipc/ipc.ts b/src/ipc/ipc.ts similarity index 100% rename from src/ts/ipc/ipc.ts rename to src/ipc/ipc.ts diff --git a/src/ts/ipc/remote.ts b/src/ipc/remote.ts similarity index 100% rename from src/ts/ipc/remote.ts rename to src/ipc/remote.ts diff --git a/src/ts/node-address.ts b/src/node-address.ts similarity index 100% rename from src/ts/node-address.ts rename to src/node-address.ts diff --git a/src/ts/node-cache.ts b/src/node-cache.ts similarity index 100% rename from src/ts/node-cache.ts rename to src/node-cache.ts diff --git a/src/ts/node-changes.ts b/src/node-changes.ts similarity index 100% rename from src/ts/node-changes.ts rename to src/node-changes.ts diff --git a/src/ts/node-errors.ts b/src/node-errors.ts similarity index 100% rename from src/ts/node-errors.ts rename to src/node-errors.ts diff --git a/src/ts/node-info.ts b/src/node-info.ts similarity index 100% rename from src/ts/node-info.ts rename to src/node-info.ts diff --git a/src/ts/node-lock.ts b/src/node-lock.ts similarity index 100% rename from src/ts/node-lock.ts rename to src/node-lock.ts diff --git a/src/ts/node-transaction.ts b/src/node-transaction.ts similarity index 100% rename from src/ts/node-transaction.ts rename to src/node-transaction.ts diff --git a/src/ts/node-value-types.ts b/src/node-value-types.ts similarity index 100% rename from src/ts/node-value-types.ts rename to src/node-value-types.ts diff --git a/src/ts/node.ts b/src/node.ts similarity index 100% rename from src/ts/node.ts rename to src/node.ts diff --git a/src/not-supported.js b/src/not-supported.ts similarity index 100% rename from src/not-supported.js rename to src/not-supported.ts diff --git a/src/ts/promise-fs/browser.ts b/src/promise-fs/browser.ts similarity index 100% rename from src/ts/promise-fs/browser.ts rename to src/promise-fs/browser.ts diff --git a/src/ts/promise-fs/index.ts b/src/promise-fs/index.ts similarity index 100% rename from src/ts/promise-fs/index.ts rename to src/promise-fs/index.ts diff --git a/src/ts/query.ts b/src/query.ts similarity index 100% rename from src/ts/query.ts rename to src/query.ts diff --git a/src/ts/quicksort.ts b/src/quicksort.ts similarity index 100% rename from src/ts/quicksort.ts rename to src/quicksort.ts diff --git a/src/ts/storage/binary/index.ts b/src/storage/binary/index.ts similarity index 100% rename from src/ts/storage/binary/index.ts rename to src/storage/binary/index.ts diff --git a/src/ts/storage/binary/node-address.ts b/src/storage/binary/node-address.ts similarity index 100% rename from src/ts/storage/binary/node-address.ts rename to src/storage/binary/node-address.ts diff --git a/src/ts/storage/binary/node-info.ts b/src/storage/binary/node-info.ts similarity index 100% rename from src/ts/storage/binary/node-info.ts rename to src/storage/binary/node-info.ts diff --git a/src/ts/storage/context.ts b/src/storage/context.ts similarity index 100% rename from src/ts/storage/context.ts rename to src/storage/context.ts diff --git a/src/ts/storage/create-index.ts b/src/storage/create-index.ts similarity index 100% rename from src/ts/storage/create-index.ts rename to src/storage/create-index.ts diff --git a/src/ts/storage/custom/helpers.ts b/src/storage/custom/helpers.ts similarity index 100% rename from src/ts/storage/custom/helpers.ts rename to src/storage/custom/helpers.ts diff --git a/src/ts/storage/custom/index.ts b/src/storage/custom/index.ts similarity index 100% rename from src/ts/storage/custom/index.ts rename to src/storage/custom/index.ts diff --git a/src/ts/storage/custom/indexed-db/index.ts b/src/storage/custom/indexed-db/index.ts similarity index 100% rename from src/ts/storage/custom/indexed-db/index.ts rename to src/storage/custom/indexed-db/index.ts diff --git a/src/ts/storage/custom/indexed-db/settings.ts b/src/storage/custom/indexed-db/settings.ts similarity index 100% rename from src/ts/storage/custom/indexed-db/settings.ts rename to src/storage/custom/indexed-db/settings.ts diff --git a/src/ts/storage/custom/indexed-db/transaction.ts b/src/storage/custom/indexed-db/transaction.ts similarity index 100% rename from src/ts/storage/custom/indexed-db/transaction.ts rename to src/storage/custom/indexed-db/transaction.ts diff --git a/src/ts/storage/custom/local-storage/index.ts b/src/storage/custom/local-storage/index.ts similarity index 100% rename from src/ts/storage/custom/local-storage/index.ts rename to src/storage/custom/local-storage/index.ts diff --git a/src/ts/storage/custom/local-storage/interface.ts b/src/storage/custom/local-storage/interface.ts similarity index 100% rename from src/ts/storage/custom/local-storage/interface.ts rename to src/storage/custom/local-storage/interface.ts diff --git a/src/ts/storage/custom/local-storage/settings.ts b/src/storage/custom/local-storage/settings.ts similarity index 100% rename from src/ts/storage/custom/local-storage/settings.ts rename to src/storage/custom/local-storage/settings.ts diff --git a/src/ts/storage/custom/local-storage/transaction.ts b/src/storage/custom/local-storage/transaction.ts similarity index 100% rename from src/ts/storage/custom/local-storage/transaction.ts rename to src/storage/custom/local-storage/transaction.ts diff --git a/src/ts/storage/index.ts b/src/storage/index.ts similarity index 100% rename from src/ts/storage/index.ts rename to src/storage/index.ts diff --git a/src/ts/storage/indexes.ts b/src/storage/indexes.ts similarity index 100% rename from src/ts/storage/indexes.ts rename to src/storage/indexes.ts diff --git a/src/ts/storage/mssql/index.ts b/src/storage/mssql/index.ts similarity index 100% rename from src/ts/storage/mssql/index.ts rename to src/storage/mssql/index.ts diff --git a/src/ts/storage/sqlite/index.ts b/src/storage/sqlite/index.ts similarity index 100% rename from src/ts/storage/sqlite/index.ts rename to src/storage/sqlite/index.ts diff --git a/src/ts/thread-safe.ts b/src/thread-safe.ts similarity index 100% rename from src/ts/thread-safe.ts rename to src/thread-safe.ts diff --git a/src/ts/unidecode-module.ts b/src/unidecode-module.ts similarity index 100% rename from src/ts/unidecode-module.ts rename to src/unidecode-module.ts diff --git a/src/ts/unidecode.ts b/src/unidecode.ts similarity index 100% rename from src/ts/unidecode.ts rename to src/unidecode.ts From 0be84feed790538e7c2c3820a92a99329ac02c53 Mon Sep 17 00:00:00 2001 From: Ewout Stortenbeker Date: Mon, 31 Oct 2022 11:17:53 +0100 Subject: [PATCH 02/14] moved types & maps into own dir --- dist/{cjs => types}/acebase-browser.d.ts | 0 dist/{cjs => types}/acebase-browser.d.ts.map | 0 dist/{cjs => types}/acebase-local.d.ts | 0 dist/{cjs => types}/acebase-local.d.ts.map | 0 dist/{cjs => types}/api-local.d.ts | 0 dist/{cjs => types}/api-local.d.ts.map | 0 dist/{cjs => types}/async-task-batch.d.ts | 0 dist/{cjs => types}/async-task-batch.d.ts.map | 0 dist/{cjs => types}/binary.d.ts | 0 dist/{cjs => types}/binary.d.ts.map | 0 dist/{cjs => types}/browser.d.ts | 0 dist/{cjs => types}/browser.d.ts.map | 0 dist/{cjs => types}/btree/binary-reader.d.ts | 0 dist/{cjs => types}/btree/binary-reader.d.ts.map | 0 dist/{cjs => types}/btree/binary-tree-builder.d.ts | 0 dist/{cjs => types}/btree/binary-tree-builder.d.ts.map | 0 dist/{cjs => types}/btree/binary-tree-leaf-entry-extdata.d.ts | 0 dist/{cjs => types}/btree/binary-tree-leaf-entry-extdata.d.ts.map | 0 dist/{cjs => types}/btree/binary-tree-leaf-entry-value.d.ts | 0 dist/{cjs => types}/btree/binary-tree-leaf-entry-value.d.ts.map | 0 dist/{cjs => types}/btree/binary-tree-leaf-entry.d.ts | 0 dist/{cjs => types}/btree/binary-tree-leaf-entry.d.ts.map | 0 dist/{cjs => types}/btree/binary-tree-leaf.d.ts | 0 dist/{cjs => types}/btree/binary-tree-leaf.d.ts.map | 0 dist/{cjs => types}/btree/binary-tree-node-entry.d.ts | 0 dist/{cjs => types}/btree/binary-tree-node-entry.d.ts.map | 0 dist/{cjs => types}/btree/binary-tree-node-info.d.ts | 0 dist/{cjs => types}/btree/binary-tree-node-info.d.ts.map | 0 dist/{cjs => types}/btree/binary-tree-node.d.ts | 0 dist/{cjs => types}/btree/binary-tree-node.d.ts.map | 0 dist/{cjs => types}/btree/binary-tree-transaction-operation.d.ts | 0 .../btree/binary-tree-transaction-operation.d.ts.map | 0 dist/{cjs => types}/btree/binary-tree.d.ts | 0 dist/{cjs => types}/btree/binary-tree.d.ts.map | 0 dist/{cjs => types}/btree/binary-writer.d.ts | 0 dist/{cjs => types}/btree/binary-writer.d.ts.map | 0 dist/{cjs => types}/btree/config.d.ts | 0 dist/{cjs => types}/btree/config.d.ts.map | 0 dist/{cjs => types}/btree/entry-key-type.d.ts | 0 dist/{cjs => types}/btree/entry-key-type.d.ts.map | 0 dist/{cjs => types}/btree/index.d.ts | 0 dist/{cjs => types}/btree/index.d.ts.map | 0 dist/{cjs => types}/btree/leaf-entry-metadata.d.ts | 0 dist/{cjs => types}/btree/leaf-entry-metadata.d.ts.map | 0 dist/{cjs => types}/btree/leaf-entry-recordpointer.d.ts | 0 dist/{cjs => types}/btree/leaf-entry-recordpointer.d.ts.map | 0 dist/{cjs => types}/btree/tree-builder.d.ts | 0 dist/{cjs => types}/btree/tree-builder.d.ts.map | 0 dist/{cjs => types}/btree/tree-leaf-entry-value.d.ts | 0 dist/{cjs => types}/btree/tree-leaf-entry-value.d.ts.map | 0 dist/{cjs => types}/btree/tree-leaf-entry.d.ts | 0 dist/{cjs => types}/btree/tree-leaf-entry.d.ts.map | 0 dist/{cjs => types}/btree/tree-leaf.d.ts | 0 dist/{cjs => types}/btree/tree-leaf.d.ts.map | 0 dist/{cjs => types}/btree/tree-node-entry.d.ts | 0 dist/{cjs => types}/btree/tree-node-entry.d.ts.map | 0 dist/{cjs => types}/btree/tree-node.d.ts | 0 dist/{cjs => types}/btree/tree-node.d.ts.map | 0 dist/{cjs => types}/btree/tree.d.ts | 0 dist/{cjs => types}/btree/tree.d.ts.map | 0 dist/{cjs => types}/btree/tx.d.ts | 0 dist/{cjs => types}/btree/tx.d.ts.map | 0 dist/{cjs => types}/btree/typesafe-compare.d.ts | 0 dist/{cjs => types}/btree/typesafe-compare.d.ts.map | 0 dist/{cjs => types}/btree/utils.d.ts | 0 dist/{cjs => types}/btree/utils.d.ts.map | 0 dist/{cjs => types}/data-index/array-index-query-hint.d.ts | 0 dist/{cjs => types}/data-index/array-index-query-hint.d.ts.map | 0 dist/{cjs => types}/data-index/array-index.d.ts | 0 dist/{cjs => types}/data-index/array-index.d.ts.map | 0 dist/{cjs => types}/data-index/data-index.d.ts | 0 dist/{cjs => types}/data-index/data-index.d.ts.map | 0 dist/{cjs => types}/data-index/fulltext-index-query-hint.d.ts | 0 dist/{cjs => types}/data-index/fulltext-index-query-hint.d.ts.map | 0 dist/{cjs => types}/data-index/fulltext-index.d.ts | 0 dist/{cjs => types}/data-index/fulltext-index.d.ts.map | 0 dist/{cjs => types}/data-index/geo-index.d.ts | 0 dist/{cjs => types}/data-index/geo-index.d.ts.map | 0 dist/{cjs => types}/data-index/index.d.ts | 0 dist/{cjs => types}/data-index/index.d.ts.map | 0 dist/{cjs => types}/data-index/options.d.ts | 0 dist/{cjs => types}/data-index/options.d.ts.map | 0 dist/{cjs => types}/data-index/query-hint.d.ts | 0 dist/{cjs => types}/data-index/query-hint.d.ts.map | 0 dist/{cjs => types}/data-index/query-results.d.ts | 0 dist/{cjs => types}/data-index/query-results.d.ts.map | 0 dist/{cjs => types}/data-index/query-stats.d.ts | 0 dist/{cjs => types}/data-index/query-stats.d.ts.map | 0 dist/{cjs => types}/data-index/shared.d.ts | 0 dist/{cjs => types}/data-index/shared.d.ts.map | 0 dist/{cjs => types}/detailed-error.d.ts | 0 dist/{cjs => types}/detailed-error.d.ts.map | 0 dist/{cjs => types}/geohash.d.ts | 0 dist/{cjs => types}/geohash.d.ts.map | 0 dist/{cjs => types}/index.d.ts | 0 dist/{cjs => types}/index.d.ts.map | 0 dist/{cjs => types}/ipc/browser.d.ts | 0 dist/{cjs => types}/ipc/browser.d.ts.map | 0 dist/{cjs => types}/ipc/index.d.ts | 0 dist/{cjs => types}/ipc/index.d.ts.map | 0 dist/{cjs => types}/ipc/ipc.d.ts | 0 dist/{cjs => types}/ipc/ipc.d.ts.map | 0 dist/{cjs => types}/ipc/remote.d.ts | 0 dist/{cjs => types}/ipc/remote.d.ts.map | 0 dist/{cjs => types}/node-address.d.ts | 0 dist/{cjs => types}/node-address.d.ts.map | 0 dist/{cjs => types}/node-cache.d.ts | 0 dist/{cjs => types}/node-cache.d.ts.map | 0 dist/{cjs => types}/node-changes.d.ts | 0 dist/{cjs => types}/node-changes.d.ts.map | 0 dist/{cjs => types}/node-errors.d.ts | 0 dist/{cjs => types}/node-errors.d.ts.map | 0 dist/{cjs => types}/node-info.d.ts | 0 dist/{cjs => types}/node-info.d.ts.map | 0 dist/{cjs => types}/node-lock.d.ts | 0 dist/{cjs => types}/node-lock.d.ts.map | 0 dist/{cjs => types}/node-transaction.d.ts | 0 dist/{cjs => types}/node-transaction.d.ts.map | 0 dist/{cjs => types}/node-value-types.d.ts | 0 dist/{cjs => types}/node-value-types.d.ts.map | 0 dist/{cjs => types}/node.d.ts | 0 dist/{cjs => types}/node.d.ts.map | 0 dist/{cjs => types}/promise-fs/browser.d.ts | 0 dist/{cjs => types}/promise-fs/browser.d.ts.map | 0 dist/{cjs => types}/promise-fs/index.d.ts | 0 dist/{cjs => types}/promise-fs/index.d.ts.map | 0 dist/{cjs => types}/query.d.ts | 0 dist/{cjs => types}/query.d.ts.map | 0 dist/{cjs => types}/quicksort.d.ts | 0 dist/{cjs => types}/quicksort.d.ts.map | 0 dist/{cjs => types}/storage/binary/index.d.ts | 0 dist/{cjs => types}/storage/binary/index.d.ts.map | 0 dist/{cjs => types}/storage/binary/node-address.d.ts | 0 dist/{cjs => types}/storage/binary/node-address.d.ts.map | 0 dist/{cjs => types}/storage/binary/node-info.d.ts | 0 dist/{cjs => types}/storage/binary/node-info.d.ts.map | 0 dist/{cjs => types}/storage/context.d.ts | 0 dist/{cjs => types}/storage/context.d.ts.map | 0 dist/{cjs => types}/storage/create-index.d.ts | 0 dist/{cjs => types}/storage/create-index.d.ts.map | 0 dist/{cjs => types}/storage/custom/helpers.d.ts | 0 dist/{cjs => types}/storage/custom/helpers.d.ts.map | 0 dist/{cjs => types}/storage/custom/index.d.ts | 0 dist/{cjs => types}/storage/custom/index.d.ts.map | 0 dist/{cjs => types}/storage/custom/indexed-db/index.d.ts | 0 dist/{cjs => types}/storage/custom/indexed-db/index.d.ts.map | 0 dist/{cjs => types}/storage/custom/indexed-db/settings.d.ts | 0 dist/{cjs => types}/storage/custom/indexed-db/settings.d.ts.map | 0 dist/{cjs => types}/storage/custom/indexed-db/transaction.d.ts | 0 .../{cjs => types}/storage/custom/indexed-db/transaction.d.ts.map | 0 dist/{cjs => types}/storage/custom/local-storage/index.d.ts | 0 dist/{cjs => types}/storage/custom/local-storage/index.d.ts.map | 0 dist/{cjs => types}/storage/custom/local-storage/interface.d.ts | 0 .../storage/custom/local-storage/interface.d.ts.map | 0 dist/{cjs => types}/storage/custom/local-storage/settings.d.ts | 0 .../{cjs => types}/storage/custom/local-storage/settings.d.ts.map | 0 dist/{cjs => types}/storage/custom/local-storage/transaction.d.ts | 0 .../storage/custom/local-storage/transaction.d.ts.map | 0 dist/{cjs => types}/storage/index.d.ts | 0 dist/{cjs => types}/storage/index.d.ts.map | 0 dist/{cjs => types}/storage/indexes.d.ts | 0 dist/{cjs => types}/storage/indexes.d.ts.map | 0 dist/{cjs => types}/storage/mssql/index.d.ts | 0 dist/{cjs => types}/storage/mssql/index.d.ts.map | 0 dist/{cjs => types}/storage/sqlite/index.d.ts | 0 dist/{cjs => types}/storage/sqlite/index.d.ts.map | 0 dist/{cjs => types}/thread-safe.d.ts | 0 dist/{cjs => types}/thread-safe.d.ts.map | 0 dist/{cjs => types}/unidecode-module.d.ts | 0 dist/{cjs => types}/unidecode-module.d.ts.map | 0 dist/{cjs => types}/unidecode.d.ts | 0 dist/{cjs => types}/unidecode.d.ts.map | 0 172 files changed, 0 insertions(+), 0 deletions(-) rename dist/{cjs => types}/acebase-browser.d.ts (100%) rename dist/{cjs => types}/acebase-browser.d.ts.map (100%) rename dist/{cjs => types}/acebase-local.d.ts (100%) rename dist/{cjs => types}/acebase-local.d.ts.map (100%) rename dist/{cjs => types}/api-local.d.ts (100%) rename dist/{cjs => types}/api-local.d.ts.map (100%) rename dist/{cjs => types}/async-task-batch.d.ts (100%) rename dist/{cjs => types}/async-task-batch.d.ts.map (100%) rename dist/{cjs => types}/binary.d.ts (100%) rename dist/{cjs => types}/binary.d.ts.map (100%) rename dist/{cjs => types}/browser.d.ts (100%) rename dist/{cjs => types}/browser.d.ts.map (100%) rename dist/{cjs => types}/btree/binary-reader.d.ts (100%) rename dist/{cjs => types}/btree/binary-reader.d.ts.map (100%) rename dist/{cjs => types}/btree/binary-tree-builder.d.ts (100%) rename dist/{cjs => types}/btree/binary-tree-builder.d.ts.map (100%) rename dist/{cjs => types}/btree/binary-tree-leaf-entry-extdata.d.ts (100%) rename dist/{cjs => types}/btree/binary-tree-leaf-entry-extdata.d.ts.map (100%) rename dist/{cjs => types}/btree/binary-tree-leaf-entry-value.d.ts (100%) rename dist/{cjs => types}/btree/binary-tree-leaf-entry-value.d.ts.map (100%) rename dist/{cjs => types}/btree/binary-tree-leaf-entry.d.ts (100%) rename dist/{cjs => types}/btree/binary-tree-leaf-entry.d.ts.map (100%) rename dist/{cjs => types}/btree/binary-tree-leaf.d.ts (100%) rename dist/{cjs => types}/btree/binary-tree-leaf.d.ts.map (100%) rename dist/{cjs => types}/btree/binary-tree-node-entry.d.ts (100%) rename dist/{cjs => types}/btree/binary-tree-node-entry.d.ts.map (100%) rename dist/{cjs => types}/btree/binary-tree-node-info.d.ts (100%) rename dist/{cjs => types}/btree/binary-tree-node-info.d.ts.map (100%) rename dist/{cjs => types}/btree/binary-tree-node.d.ts (100%) rename dist/{cjs => types}/btree/binary-tree-node.d.ts.map (100%) rename dist/{cjs => types}/btree/binary-tree-transaction-operation.d.ts (100%) rename dist/{cjs => types}/btree/binary-tree-transaction-operation.d.ts.map (100%) rename dist/{cjs => types}/btree/binary-tree.d.ts (100%) rename dist/{cjs => types}/btree/binary-tree.d.ts.map (100%) rename dist/{cjs => types}/btree/binary-writer.d.ts (100%) rename dist/{cjs => types}/btree/binary-writer.d.ts.map (100%) rename dist/{cjs => types}/btree/config.d.ts (100%) rename dist/{cjs => types}/btree/config.d.ts.map (100%) rename dist/{cjs => types}/btree/entry-key-type.d.ts (100%) rename dist/{cjs => types}/btree/entry-key-type.d.ts.map (100%) rename dist/{cjs => types}/btree/index.d.ts (100%) rename dist/{cjs => types}/btree/index.d.ts.map (100%) rename dist/{cjs => types}/btree/leaf-entry-metadata.d.ts (100%) rename dist/{cjs => types}/btree/leaf-entry-metadata.d.ts.map (100%) rename dist/{cjs => types}/btree/leaf-entry-recordpointer.d.ts (100%) rename dist/{cjs => types}/btree/leaf-entry-recordpointer.d.ts.map (100%) rename dist/{cjs => types}/btree/tree-builder.d.ts (100%) rename dist/{cjs => types}/btree/tree-builder.d.ts.map (100%) rename dist/{cjs => types}/btree/tree-leaf-entry-value.d.ts (100%) rename dist/{cjs => types}/btree/tree-leaf-entry-value.d.ts.map (100%) rename dist/{cjs => types}/btree/tree-leaf-entry.d.ts (100%) rename dist/{cjs => types}/btree/tree-leaf-entry.d.ts.map (100%) rename dist/{cjs => types}/btree/tree-leaf.d.ts (100%) rename dist/{cjs => types}/btree/tree-leaf.d.ts.map (100%) rename dist/{cjs => types}/btree/tree-node-entry.d.ts (100%) rename dist/{cjs => types}/btree/tree-node-entry.d.ts.map (100%) rename dist/{cjs => types}/btree/tree-node.d.ts (100%) rename dist/{cjs => types}/btree/tree-node.d.ts.map (100%) rename dist/{cjs => types}/btree/tree.d.ts (100%) rename dist/{cjs => types}/btree/tree.d.ts.map (100%) rename dist/{cjs => types}/btree/tx.d.ts (100%) rename dist/{cjs => types}/btree/tx.d.ts.map (100%) rename dist/{cjs => types}/btree/typesafe-compare.d.ts (100%) rename dist/{cjs => types}/btree/typesafe-compare.d.ts.map (100%) rename dist/{cjs => types}/btree/utils.d.ts (100%) rename dist/{cjs => types}/btree/utils.d.ts.map (100%) rename dist/{cjs => types}/data-index/array-index-query-hint.d.ts (100%) rename dist/{cjs => types}/data-index/array-index-query-hint.d.ts.map (100%) rename dist/{cjs => types}/data-index/array-index.d.ts (100%) rename dist/{cjs => types}/data-index/array-index.d.ts.map (100%) rename dist/{cjs => types}/data-index/data-index.d.ts (100%) rename dist/{cjs => types}/data-index/data-index.d.ts.map (100%) rename dist/{cjs => types}/data-index/fulltext-index-query-hint.d.ts (100%) rename dist/{cjs => types}/data-index/fulltext-index-query-hint.d.ts.map (100%) rename dist/{cjs => types}/data-index/fulltext-index.d.ts (100%) rename dist/{cjs => types}/data-index/fulltext-index.d.ts.map (100%) rename dist/{cjs => types}/data-index/geo-index.d.ts (100%) rename dist/{cjs => types}/data-index/geo-index.d.ts.map (100%) rename dist/{cjs => types}/data-index/index.d.ts (100%) rename dist/{cjs => types}/data-index/index.d.ts.map (100%) rename dist/{cjs => types}/data-index/options.d.ts (100%) rename dist/{cjs => types}/data-index/options.d.ts.map (100%) rename dist/{cjs => types}/data-index/query-hint.d.ts (100%) rename dist/{cjs => types}/data-index/query-hint.d.ts.map (100%) rename dist/{cjs => types}/data-index/query-results.d.ts (100%) rename dist/{cjs => types}/data-index/query-results.d.ts.map (100%) rename dist/{cjs => types}/data-index/query-stats.d.ts (100%) rename dist/{cjs => types}/data-index/query-stats.d.ts.map (100%) rename dist/{cjs => types}/data-index/shared.d.ts (100%) rename dist/{cjs => types}/data-index/shared.d.ts.map (100%) rename dist/{cjs => types}/detailed-error.d.ts (100%) rename dist/{cjs => types}/detailed-error.d.ts.map (100%) rename dist/{cjs => types}/geohash.d.ts (100%) rename dist/{cjs => types}/geohash.d.ts.map (100%) rename dist/{cjs => types}/index.d.ts (100%) rename dist/{cjs => types}/index.d.ts.map (100%) rename dist/{cjs => types}/ipc/browser.d.ts (100%) rename dist/{cjs => types}/ipc/browser.d.ts.map (100%) rename dist/{cjs => types}/ipc/index.d.ts (100%) rename dist/{cjs => types}/ipc/index.d.ts.map (100%) rename dist/{cjs => types}/ipc/ipc.d.ts (100%) rename dist/{cjs => types}/ipc/ipc.d.ts.map (100%) rename dist/{cjs => types}/ipc/remote.d.ts (100%) rename dist/{cjs => types}/ipc/remote.d.ts.map (100%) rename dist/{cjs => types}/node-address.d.ts (100%) rename dist/{cjs => types}/node-address.d.ts.map (100%) rename dist/{cjs => types}/node-cache.d.ts (100%) rename dist/{cjs => types}/node-cache.d.ts.map (100%) rename dist/{cjs => types}/node-changes.d.ts (100%) rename dist/{cjs => types}/node-changes.d.ts.map (100%) rename dist/{cjs => types}/node-errors.d.ts (100%) rename dist/{cjs => types}/node-errors.d.ts.map (100%) rename dist/{cjs => types}/node-info.d.ts (100%) rename dist/{cjs => types}/node-info.d.ts.map (100%) rename dist/{cjs => types}/node-lock.d.ts (100%) rename dist/{cjs => types}/node-lock.d.ts.map (100%) rename dist/{cjs => types}/node-transaction.d.ts (100%) rename dist/{cjs => types}/node-transaction.d.ts.map (100%) rename dist/{cjs => types}/node-value-types.d.ts (100%) rename dist/{cjs => types}/node-value-types.d.ts.map (100%) rename dist/{cjs => types}/node.d.ts (100%) rename dist/{cjs => types}/node.d.ts.map (100%) rename dist/{cjs => types}/promise-fs/browser.d.ts (100%) rename dist/{cjs => types}/promise-fs/browser.d.ts.map (100%) rename dist/{cjs => types}/promise-fs/index.d.ts (100%) rename dist/{cjs => types}/promise-fs/index.d.ts.map (100%) rename dist/{cjs => types}/query.d.ts (100%) rename dist/{cjs => types}/query.d.ts.map (100%) rename dist/{cjs => types}/quicksort.d.ts (100%) rename dist/{cjs => types}/quicksort.d.ts.map (100%) rename dist/{cjs => types}/storage/binary/index.d.ts (100%) rename dist/{cjs => types}/storage/binary/index.d.ts.map (100%) rename dist/{cjs => types}/storage/binary/node-address.d.ts (100%) rename dist/{cjs => types}/storage/binary/node-address.d.ts.map (100%) rename dist/{cjs => types}/storage/binary/node-info.d.ts (100%) rename dist/{cjs => types}/storage/binary/node-info.d.ts.map (100%) rename dist/{cjs => types}/storage/context.d.ts (100%) rename dist/{cjs => types}/storage/context.d.ts.map (100%) rename dist/{cjs => types}/storage/create-index.d.ts (100%) rename dist/{cjs => types}/storage/create-index.d.ts.map (100%) rename dist/{cjs => types}/storage/custom/helpers.d.ts (100%) rename dist/{cjs => types}/storage/custom/helpers.d.ts.map (100%) rename dist/{cjs => types}/storage/custom/index.d.ts (100%) rename dist/{cjs => types}/storage/custom/index.d.ts.map (100%) rename dist/{cjs => types}/storage/custom/indexed-db/index.d.ts (100%) rename dist/{cjs => types}/storage/custom/indexed-db/index.d.ts.map (100%) rename dist/{cjs => types}/storage/custom/indexed-db/settings.d.ts (100%) rename dist/{cjs => types}/storage/custom/indexed-db/settings.d.ts.map (100%) rename dist/{cjs => types}/storage/custom/indexed-db/transaction.d.ts (100%) rename dist/{cjs => types}/storage/custom/indexed-db/transaction.d.ts.map (100%) rename dist/{cjs => types}/storage/custom/local-storage/index.d.ts (100%) rename dist/{cjs => types}/storage/custom/local-storage/index.d.ts.map (100%) rename dist/{cjs => types}/storage/custom/local-storage/interface.d.ts (100%) rename dist/{cjs => types}/storage/custom/local-storage/interface.d.ts.map (100%) rename dist/{cjs => types}/storage/custom/local-storage/settings.d.ts (100%) rename dist/{cjs => types}/storage/custom/local-storage/settings.d.ts.map (100%) rename dist/{cjs => types}/storage/custom/local-storage/transaction.d.ts (100%) rename dist/{cjs => types}/storage/custom/local-storage/transaction.d.ts.map (100%) rename dist/{cjs => types}/storage/index.d.ts (100%) rename dist/{cjs => types}/storage/index.d.ts.map (100%) rename dist/{cjs => types}/storage/indexes.d.ts (100%) rename dist/{cjs => types}/storage/indexes.d.ts.map (100%) rename dist/{cjs => types}/storage/mssql/index.d.ts (100%) rename dist/{cjs => types}/storage/mssql/index.d.ts.map (100%) rename dist/{cjs => types}/storage/sqlite/index.d.ts (100%) rename dist/{cjs => types}/storage/sqlite/index.d.ts.map (100%) rename dist/{cjs => types}/thread-safe.d.ts (100%) rename dist/{cjs => types}/thread-safe.d.ts.map (100%) rename dist/{cjs => types}/unidecode-module.d.ts (100%) rename dist/{cjs => types}/unidecode-module.d.ts.map (100%) rename dist/{cjs => types}/unidecode.d.ts (100%) rename dist/{cjs => types}/unidecode.d.ts.map (100%) diff --git a/dist/cjs/acebase-browser.d.ts b/dist/types/acebase-browser.d.ts similarity index 100% rename from dist/cjs/acebase-browser.d.ts rename to dist/types/acebase-browser.d.ts diff --git a/dist/cjs/acebase-browser.d.ts.map b/dist/types/acebase-browser.d.ts.map similarity index 100% rename from dist/cjs/acebase-browser.d.ts.map rename to dist/types/acebase-browser.d.ts.map diff --git a/dist/cjs/acebase-local.d.ts b/dist/types/acebase-local.d.ts similarity index 100% rename from dist/cjs/acebase-local.d.ts rename to dist/types/acebase-local.d.ts diff --git a/dist/cjs/acebase-local.d.ts.map b/dist/types/acebase-local.d.ts.map similarity index 100% rename from dist/cjs/acebase-local.d.ts.map rename to dist/types/acebase-local.d.ts.map diff --git a/dist/cjs/api-local.d.ts b/dist/types/api-local.d.ts similarity index 100% rename from dist/cjs/api-local.d.ts rename to dist/types/api-local.d.ts diff --git a/dist/cjs/api-local.d.ts.map b/dist/types/api-local.d.ts.map similarity index 100% rename from dist/cjs/api-local.d.ts.map rename to dist/types/api-local.d.ts.map diff --git a/dist/cjs/async-task-batch.d.ts b/dist/types/async-task-batch.d.ts similarity index 100% rename from dist/cjs/async-task-batch.d.ts rename to dist/types/async-task-batch.d.ts diff --git a/dist/cjs/async-task-batch.d.ts.map b/dist/types/async-task-batch.d.ts.map similarity index 100% rename from dist/cjs/async-task-batch.d.ts.map rename to dist/types/async-task-batch.d.ts.map diff --git a/dist/cjs/binary.d.ts b/dist/types/binary.d.ts similarity index 100% rename from dist/cjs/binary.d.ts rename to dist/types/binary.d.ts diff --git a/dist/cjs/binary.d.ts.map b/dist/types/binary.d.ts.map similarity index 100% rename from dist/cjs/binary.d.ts.map rename to dist/types/binary.d.ts.map diff --git a/dist/cjs/browser.d.ts b/dist/types/browser.d.ts similarity index 100% rename from dist/cjs/browser.d.ts rename to dist/types/browser.d.ts diff --git a/dist/cjs/browser.d.ts.map b/dist/types/browser.d.ts.map similarity index 100% rename from dist/cjs/browser.d.ts.map rename to dist/types/browser.d.ts.map diff --git a/dist/cjs/btree/binary-reader.d.ts b/dist/types/btree/binary-reader.d.ts similarity index 100% rename from dist/cjs/btree/binary-reader.d.ts rename to dist/types/btree/binary-reader.d.ts diff --git a/dist/cjs/btree/binary-reader.d.ts.map b/dist/types/btree/binary-reader.d.ts.map similarity index 100% rename from dist/cjs/btree/binary-reader.d.ts.map rename to dist/types/btree/binary-reader.d.ts.map diff --git a/dist/cjs/btree/binary-tree-builder.d.ts b/dist/types/btree/binary-tree-builder.d.ts similarity index 100% rename from dist/cjs/btree/binary-tree-builder.d.ts rename to dist/types/btree/binary-tree-builder.d.ts diff --git a/dist/cjs/btree/binary-tree-builder.d.ts.map b/dist/types/btree/binary-tree-builder.d.ts.map similarity index 100% rename from dist/cjs/btree/binary-tree-builder.d.ts.map rename to dist/types/btree/binary-tree-builder.d.ts.map diff --git a/dist/cjs/btree/binary-tree-leaf-entry-extdata.d.ts b/dist/types/btree/binary-tree-leaf-entry-extdata.d.ts similarity index 100% rename from dist/cjs/btree/binary-tree-leaf-entry-extdata.d.ts rename to dist/types/btree/binary-tree-leaf-entry-extdata.d.ts diff --git a/dist/cjs/btree/binary-tree-leaf-entry-extdata.d.ts.map b/dist/types/btree/binary-tree-leaf-entry-extdata.d.ts.map similarity index 100% rename from dist/cjs/btree/binary-tree-leaf-entry-extdata.d.ts.map rename to dist/types/btree/binary-tree-leaf-entry-extdata.d.ts.map diff --git a/dist/cjs/btree/binary-tree-leaf-entry-value.d.ts b/dist/types/btree/binary-tree-leaf-entry-value.d.ts similarity index 100% rename from dist/cjs/btree/binary-tree-leaf-entry-value.d.ts rename to dist/types/btree/binary-tree-leaf-entry-value.d.ts diff --git a/dist/cjs/btree/binary-tree-leaf-entry-value.d.ts.map b/dist/types/btree/binary-tree-leaf-entry-value.d.ts.map similarity index 100% rename from dist/cjs/btree/binary-tree-leaf-entry-value.d.ts.map rename to dist/types/btree/binary-tree-leaf-entry-value.d.ts.map diff --git a/dist/cjs/btree/binary-tree-leaf-entry.d.ts b/dist/types/btree/binary-tree-leaf-entry.d.ts similarity index 100% rename from dist/cjs/btree/binary-tree-leaf-entry.d.ts rename to dist/types/btree/binary-tree-leaf-entry.d.ts diff --git a/dist/cjs/btree/binary-tree-leaf-entry.d.ts.map b/dist/types/btree/binary-tree-leaf-entry.d.ts.map similarity index 100% rename from dist/cjs/btree/binary-tree-leaf-entry.d.ts.map rename to dist/types/btree/binary-tree-leaf-entry.d.ts.map diff --git a/dist/cjs/btree/binary-tree-leaf.d.ts b/dist/types/btree/binary-tree-leaf.d.ts similarity index 100% rename from dist/cjs/btree/binary-tree-leaf.d.ts rename to dist/types/btree/binary-tree-leaf.d.ts diff --git a/dist/cjs/btree/binary-tree-leaf.d.ts.map b/dist/types/btree/binary-tree-leaf.d.ts.map similarity index 100% rename from dist/cjs/btree/binary-tree-leaf.d.ts.map rename to dist/types/btree/binary-tree-leaf.d.ts.map diff --git a/dist/cjs/btree/binary-tree-node-entry.d.ts b/dist/types/btree/binary-tree-node-entry.d.ts similarity index 100% rename from dist/cjs/btree/binary-tree-node-entry.d.ts rename to dist/types/btree/binary-tree-node-entry.d.ts diff --git a/dist/cjs/btree/binary-tree-node-entry.d.ts.map b/dist/types/btree/binary-tree-node-entry.d.ts.map similarity index 100% rename from dist/cjs/btree/binary-tree-node-entry.d.ts.map rename to dist/types/btree/binary-tree-node-entry.d.ts.map diff --git a/dist/cjs/btree/binary-tree-node-info.d.ts b/dist/types/btree/binary-tree-node-info.d.ts similarity index 100% rename from dist/cjs/btree/binary-tree-node-info.d.ts rename to dist/types/btree/binary-tree-node-info.d.ts diff --git a/dist/cjs/btree/binary-tree-node-info.d.ts.map b/dist/types/btree/binary-tree-node-info.d.ts.map similarity index 100% rename from dist/cjs/btree/binary-tree-node-info.d.ts.map rename to dist/types/btree/binary-tree-node-info.d.ts.map diff --git a/dist/cjs/btree/binary-tree-node.d.ts b/dist/types/btree/binary-tree-node.d.ts similarity index 100% rename from dist/cjs/btree/binary-tree-node.d.ts rename to dist/types/btree/binary-tree-node.d.ts diff --git a/dist/cjs/btree/binary-tree-node.d.ts.map b/dist/types/btree/binary-tree-node.d.ts.map similarity index 100% rename from dist/cjs/btree/binary-tree-node.d.ts.map rename to dist/types/btree/binary-tree-node.d.ts.map diff --git a/dist/cjs/btree/binary-tree-transaction-operation.d.ts b/dist/types/btree/binary-tree-transaction-operation.d.ts similarity index 100% rename from dist/cjs/btree/binary-tree-transaction-operation.d.ts rename to dist/types/btree/binary-tree-transaction-operation.d.ts diff --git a/dist/cjs/btree/binary-tree-transaction-operation.d.ts.map b/dist/types/btree/binary-tree-transaction-operation.d.ts.map similarity index 100% rename from dist/cjs/btree/binary-tree-transaction-operation.d.ts.map rename to dist/types/btree/binary-tree-transaction-operation.d.ts.map diff --git a/dist/cjs/btree/binary-tree.d.ts b/dist/types/btree/binary-tree.d.ts similarity index 100% rename from dist/cjs/btree/binary-tree.d.ts rename to dist/types/btree/binary-tree.d.ts diff --git a/dist/cjs/btree/binary-tree.d.ts.map b/dist/types/btree/binary-tree.d.ts.map similarity index 100% rename from dist/cjs/btree/binary-tree.d.ts.map rename to dist/types/btree/binary-tree.d.ts.map diff --git a/dist/cjs/btree/binary-writer.d.ts b/dist/types/btree/binary-writer.d.ts similarity index 100% rename from dist/cjs/btree/binary-writer.d.ts rename to dist/types/btree/binary-writer.d.ts diff --git a/dist/cjs/btree/binary-writer.d.ts.map b/dist/types/btree/binary-writer.d.ts.map similarity index 100% rename from dist/cjs/btree/binary-writer.d.ts.map rename to dist/types/btree/binary-writer.d.ts.map diff --git a/dist/cjs/btree/config.d.ts b/dist/types/btree/config.d.ts similarity index 100% rename from dist/cjs/btree/config.d.ts rename to dist/types/btree/config.d.ts diff --git a/dist/cjs/btree/config.d.ts.map b/dist/types/btree/config.d.ts.map similarity index 100% rename from dist/cjs/btree/config.d.ts.map rename to dist/types/btree/config.d.ts.map diff --git a/dist/cjs/btree/entry-key-type.d.ts b/dist/types/btree/entry-key-type.d.ts similarity index 100% rename from dist/cjs/btree/entry-key-type.d.ts rename to dist/types/btree/entry-key-type.d.ts diff --git a/dist/cjs/btree/entry-key-type.d.ts.map b/dist/types/btree/entry-key-type.d.ts.map similarity index 100% rename from dist/cjs/btree/entry-key-type.d.ts.map rename to dist/types/btree/entry-key-type.d.ts.map diff --git a/dist/cjs/btree/index.d.ts b/dist/types/btree/index.d.ts similarity index 100% rename from dist/cjs/btree/index.d.ts rename to dist/types/btree/index.d.ts diff --git a/dist/cjs/btree/index.d.ts.map b/dist/types/btree/index.d.ts.map similarity index 100% rename from dist/cjs/btree/index.d.ts.map rename to dist/types/btree/index.d.ts.map diff --git a/dist/cjs/btree/leaf-entry-metadata.d.ts b/dist/types/btree/leaf-entry-metadata.d.ts similarity index 100% rename from dist/cjs/btree/leaf-entry-metadata.d.ts rename to dist/types/btree/leaf-entry-metadata.d.ts diff --git a/dist/cjs/btree/leaf-entry-metadata.d.ts.map b/dist/types/btree/leaf-entry-metadata.d.ts.map similarity index 100% rename from dist/cjs/btree/leaf-entry-metadata.d.ts.map rename to dist/types/btree/leaf-entry-metadata.d.ts.map diff --git a/dist/cjs/btree/leaf-entry-recordpointer.d.ts b/dist/types/btree/leaf-entry-recordpointer.d.ts similarity index 100% rename from dist/cjs/btree/leaf-entry-recordpointer.d.ts rename to dist/types/btree/leaf-entry-recordpointer.d.ts diff --git a/dist/cjs/btree/leaf-entry-recordpointer.d.ts.map b/dist/types/btree/leaf-entry-recordpointer.d.ts.map similarity index 100% rename from dist/cjs/btree/leaf-entry-recordpointer.d.ts.map rename to dist/types/btree/leaf-entry-recordpointer.d.ts.map diff --git a/dist/cjs/btree/tree-builder.d.ts b/dist/types/btree/tree-builder.d.ts similarity index 100% rename from dist/cjs/btree/tree-builder.d.ts rename to dist/types/btree/tree-builder.d.ts diff --git a/dist/cjs/btree/tree-builder.d.ts.map b/dist/types/btree/tree-builder.d.ts.map similarity index 100% rename from dist/cjs/btree/tree-builder.d.ts.map rename to dist/types/btree/tree-builder.d.ts.map diff --git a/dist/cjs/btree/tree-leaf-entry-value.d.ts b/dist/types/btree/tree-leaf-entry-value.d.ts similarity index 100% rename from dist/cjs/btree/tree-leaf-entry-value.d.ts rename to dist/types/btree/tree-leaf-entry-value.d.ts diff --git a/dist/cjs/btree/tree-leaf-entry-value.d.ts.map b/dist/types/btree/tree-leaf-entry-value.d.ts.map similarity index 100% rename from dist/cjs/btree/tree-leaf-entry-value.d.ts.map rename to dist/types/btree/tree-leaf-entry-value.d.ts.map diff --git a/dist/cjs/btree/tree-leaf-entry.d.ts b/dist/types/btree/tree-leaf-entry.d.ts similarity index 100% rename from dist/cjs/btree/tree-leaf-entry.d.ts rename to dist/types/btree/tree-leaf-entry.d.ts diff --git a/dist/cjs/btree/tree-leaf-entry.d.ts.map b/dist/types/btree/tree-leaf-entry.d.ts.map similarity index 100% rename from dist/cjs/btree/tree-leaf-entry.d.ts.map rename to dist/types/btree/tree-leaf-entry.d.ts.map diff --git a/dist/cjs/btree/tree-leaf.d.ts b/dist/types/btree/tree-leaf.d.ts similarity index 100% rename from dist/cjs/btree/tree-leaf.d.ts rename to dist/types/btree/tree-leaf.d.ts diff --git a/dist/cjs/btree/tree-leaf.d.ts.map b/dist/types/btree/tree-leaf.d.ts.map similarity index 100% rename from dist/cjs/btree/tree-leaf.d.ts.map rename to dist/types/btree/tree-leaf.d.ts.map diff --git a/dist/cjs/btree/tree-node-entry.d.ts b/dist/types/btree/tree-node-entry.d.ts similarity index 100% rename from dist/cjs/btree/tree-node-entry.d.ts rename to dist/types/btree/tree-node-entry.d.ts diff --git a/dist/cjs/btree/tree-node-entry.d.ts.map b/dist/types/btree/tree-node-entry.d.ts.map similarity index 100% rename from dist/cjs/btree/tree-node-entry.d.ts.map rename to dist/types/btree/tree-node-entry.d.ts.map diff --git a/dist/cjs/btree/tree-node.d.ts b/dist/types/btree/tree-node.d.ts similarity index 100% rename from dist/cjs/btree/tree-node.d.ts rename to dist/types/btree/tree-node.d.ts diff --git a/dist/cjs/btree/tree-node.d.ts.map b/dist/types/btree/tree-node.d.ts.map similarity index 100% rename from dist/cjs/btree/tree-node.d.ts.map rename to dist/types/btree/tree-node.d.ts.map diff --git a/dist/cjs/btree/tree.d.ts b/dist/types/btree/tree.d.ts similarity index 100% rename from dist/cjs/btree/tree.d.ts rename to dist/types/btree/tree.d.ts diff --git a/dist/cjs/btree/tree.d.ts.map b/dist/types/btree/tree.d.ts.map similarity index 100% rename from dist/cjs/btree/tree.d.ts.map rename to dist/types/btree/tree.d.ts.map diff --git a/dist/cjs/btree/tx.d.ts b/dist/types/btree/tx.d.ts similarity index 100% rename from dist/cjs/btree/tx.d.ts rename to dist/types/btree/tx.d.ts diff --git a/dist/cjs/btree/tx.d.ts.map b/dist/types/btree/tx.d.ts.map similarity index 100% rename from dist/cjs/btree/tx.d.ts.map rename to dist/types/btree/tx.d.ts.map diff --git a/dist/cjs/btree/typesafe-compare.d.ts b/dist/types/btree/typesafe-compare.d.ts similarity index 100% rename from dist/cjs/btree/typesafe-compare.d.ts rename to dist/types/btree/typesafe-compare.d.ts diff --git a/dist/cjs/btree/typesafe-compare.d.ts.map b/dist/types/btree/typesafe-compare.d.ts.map similarity index 100% rename from dist/cjs/btree/typesafe-compare.d.ts.map rename to dist/types/btree/typesafe-compare.d.ts.map diff --git a/dist/cjs/btree/utils.d.ts b/dist/types/btree/utils.d.ts similarity index 100% rename from dist/cjs/btree/utils.d.ts rename to dist/types/btree/utils.d.ts diff --git a/dist/cjs/btree/utils.d.ts.map b/dist/types/btree/utils.d.ts.map similarity index 100% rename from dist/cjs/btree/utils.d.ts.map rename to dist/types/btree/utils.d.ts.map diff --git a/dist/cjs/data-index/array-index-query-hint.d.ts b/dist/types/data-index/array-index-query-hint.d.ts similarity index 100% rename from dist/cjs/data-index/array-index-query-hint.d.ts rename to dist/types/data-index/array-index-query-hint.d.ts diff --git a/dist/cjs/data-index/array-index-query-hint.d.ts.map b/dist/types/data-index/array-index-query-hint.d.ts.map similarity index 100% rename from dist/cjs/data-index/array-index-query-hint.d.ts.map rename to dist/types/data-index/array-index-query-hint.d.ts.map diff --git a/dist/cjs/data-index/array-index.d.ts b/dist/types/data-index/array-index.d.ts similarity index 100% rename from dist/cjs/data-index/array-index.d.ts rename to dist/types/data-index/array-index.d.ts diff --git a/dist/cjs/data-index/array-index.d.ts.map b/dist/types/data-index/array-index.d.ts.map similarity index 100% rename from dist/cjs/data-index/array-index.d.ts.map rename to dist/types/data-index/array-index.d.ts.map diff --git a/dist/cjs/data-index/data-index.d.ts b/dist/types/data-index/data-index.d.ts similarity index 100% rename from dist/cjs/data-index/data-index.d.ts rename to dist/types/data-index/data-index.d.ts diff --git a/dist/cjs/data-index/data-index.d.ts.map b/dist/types/data-index/data-index.d.ts.map similarity index 100% rename from dist/cjs/data-index/data-index.d.ts.map rename to dist/types/data-index/data-index.d.ts.map diff --git a/dist/cjs/data-index/fulltext-index-query-hint.d.ts b/dist/types/data-index/fulltext-index-query-hint.d.ts similarity index 100% rename from dist/cjs/data-index/fulltext-index-query-hint.d.ts rename to dist/types/data-index/fulltext-index-query-hint.d.ts diff --git a/dist/cjs/data-index/fulltext-index-query-hint.d.ts.map b/dist/types/data-index/fulltext-index-query-hint.d.ts.map similarity index 100% rename from dist/cjs/data-index/fulltext-index-query-hint.d.ts.map rename to dist/types/data-index/fulltext-index-query-hint.d.ts.map diff --git a/dist/cjs/data-index/fulltext-index.d.ts b/dist/types/data-index/fulltext-index.d.ts similarity index 100% rename from dist/cjs/data-index/fulltext-index.d.ts rename to dist/types/data-index/fulltext-index.d.ts diff --git a/dist/cjs/data-index/fulltext-index.d.ts.map b/dist/types/data-index/fulltext-index.d.ts.map similarity index 100% rename from dist/cjs/data-index/fulltext-index.d.ts.map rename to dist/types/data-index/fulltext-index.d.ts.map diff --git a/dist/cjs/data-index/geo-index.d.ts b/dist/types/data-index/geo-index.d.ts similarity index 100% rename from dist/cjs/data-index/geo-index.d.ts rename to dist/types/data-index/geo-index.d.ts diff --git a/dist/cjs/data-index/geo-index.d.ts.map b/dist/types/data-index/geo-index.d.ts.map similarity index 100% rename from dist/cjs/data-index/geo-index.d.ts.map rename to dist/types/data-index/geo-index.d.ts.map diff --git a/dist/cjs/data-index/index.d.ts b/dist/types/data-index/index.d.ts similarity index 100% rename from dist/cjs/data-index/index.d.ts rename to dist/types/data-index/index.d.ts diff --git a/dist/cjs/data-index/index.d.ts.map b/dist/types/data-index/index.d.ts.map similarity index 100% rename from dist/cjs/data-index/index.d.ts.map rename to dist/types/data-index/index.d.ts.map diff --git a/dist/cjs/data-index/options.d.ts b/dist/types/data-index/options.d.ts similarity index 100% rename from dist/cjs/data-index/options.d.ts rename to dist/types/data-index/options.d.ts diff --git a/dist/cjs/data-index/options.d.ts.map b/dist/types/data-index/options.d.ts.map similarity index 100% rename from dist/cjs/data-index/options.d.ts.map rename to dist/types/data-index/options.d.ts.map diff --git a/dist/cjs/data-index/query-hint.d.ts b/dist/types/data-index/query-hint.d.ts similarity index 100% rename from dist/cjs/data-index/query-hint.d.ts rename to dist/types/data-index/query-hint.d.ts diff --git a/dist/cjs/data-index/query-hint.d.ts.map b/dist/types/data-index/query-hint.d.ts.map similarity index 100% rename from dist/cjs/data-index/query-hint.d.ts.map rename to dist/types/data-index/query-hint.d.ts.map diff --git a/dist/cjs/data-index/query-results.d.ts b/dist/types/data-index/query-results.d.ts similarity index 100% rename from dist/cjs/data-index/query-results.d.ts rename to dist/types/data-index/query-results.d.ts diff --git a/dist/cjs/data-index/query-results.d.ts.map b/dist/types/data-index/query-results.d.ts.map similarity index 100% rename from dist/cjs/data-index/query-results.d.ts.map rename to dist/types/data-index/query-results.d.ts.map diff --git a/dist/cjs/data-index/query-stats.d.ts b/dist/types/data-index/query-stats.d.ts similarity index 100% rename from dist/cjs/data-index/query-stats.d.ts rename to dist/types/data-index/query-stats.d.ts diff --git a/dist/cjs/data-index/query-stats.d.ts.map b/dist/types/data-index/query-stats.d.ts.map similarity index 100% rename from dist/cjs/data-index/query-stats.d.ts.map rename to dist/types/data-index/query-stats.d.ts.map diff --git a/dist/cjs/data-index/shared.d.ts b/dist/types/data-index/shared.d.ts similarity index 100% rename from dist/cjs/data-index/shared.d.ts rename to dist/types/data-index/shared.d.ts diff --git a/dist/cjs/data-index/shared.d.ts.map b/dist/types/data-index/shared.d.ts.map similarity index 100% rename from dist/cjs/data-index/shared.d.ts.map rename to dist/types/data-index/shared.d.ts.map diff --git a/dist/cjs/detailed-error.d.ts b/dist/types/detailed-error.d.ts similarity index 100% rename from dist/cjs/detailed-error.d.ts rename to dist/types/detailed-error.d.ts diff --git a/dist/cjs/detailed-error.d.ts.map b/dist/types/detailed-error.d.ts.map similarity index 100% rename from dist/cjs/detailed-error.d.ts.map rename to dist/types/detailed-error.d.ts.map diff --git a/dist/cjs/geohash.d.ts b/dist/types/geohash.d.ts similarity index 100% rename from dist/cjs/geohash.d.ts rename to dist/types/geohash.d.ts diff --git a/dist/cjs/geohash.d.ts.map b/dist/types/geohash.d.ts.map similarity index 100% rename from dist/cjs/geohash.d.ts.map rename to dist/types/geohash.d.ts.map diff --git a/dist/cjs/index.d.ts b/dist/types/index.d.ts similarity index 100% rename from dist/cjs/index.d.ts rename to dist/types/index.d.ts diff --git a/dist/cjs/index.d.ts.map b/dist/types/index.d.ts.map similarity index 100% rename from dist/cjs/index.d.ts.map rename to dist/types/index.d.ts.map diff --git a/dist/cjs/ipc/browser.d.ts b/dist/types/ipc/browser.d.ts similarity index 100% rename from dist/cjs/ipc/browser.d.ts rename to dist/types/ipc/browser.d.ts diff --git a/dist/cjs/ipc/browser.d.ts.map b/dist/types/ipc/browser.d.ts.map similarity index 100% rename from dist/cjs/ipc/browser.d.ts.map rename to dist/types/ipc/browser.d.ts.map diff --git a/dist/cjs/ipc/index.d.ts b/dist/types/ipc/index.d.ts similarity index 100% rename from dist/cjs/ipc/index.d.ts rename to dist/types/ipc/index.d.ts diff --git a/dist/cjs/ipc/index.d.ts.map b/dist/types/ipc/index.d.ts.map similarity index 100% rename from dist/cjs/ipc/index.d.ts.map rename to dist/types/ipc/index.d.ts.map diff --git a/dist/cjs/ipc/ipc.d.ts b/dist/types/ipc/ipc.d.ts similarity index 100% rename from dist/cjs/ipc/ipc.d.ts rename to dist/types/ipc/ipc.d.ts diff --git a/dist/cjs/ipc/ipc.d.ts.map b/dist/types/ipc/ipc.d.ts.map similarity index 100% rename from dist/cjs/ipc/ipc.d.ts.map rename to dist/types/ipc/ipc.d.ts.map diff --git a/dist/cjs/ipc/remote.d.ts b/dist/types/ipc/remote.d.ts similarity index 100% rename from dist/cjs/ipc/remote.d.ts rename to dist/types/ipc/remote.d.ts diff --git a/dist/cjs/ipc/remote.d.ts.map b/dist/types/ipc/remote.d.ts.map similarity index 100% rename from dist/cjs/ipc/remote.d.ts.map rename to dist/types/ipc/remote.d.ts.map diff --git a/dist/cjs/node-address.d.ts b/dist/types/node-address.d.ts similarity index 100% rename from dist/cjs/node-address.d.ts rename to dist/types/node-address.d.ts diff --git a/dist/cjs/node-address.d.ts.map b/dist/types/node-address.d.ts.map similarity index 100% rename from dist/cjs/node-address.d.ts.map rename to dist/types/node-address.d.ts.map diff --git a/dist/cjs/node-cache.d.ts b/dist/types/node-cache.d.ts similarity index 100% rename from dist/cjs/node-cache.d.ts rename to dist/types/node-cache.d.ts diff --git a/dist/cjs/node-cache.d.ts.map b/dist/types/node-cache.d.ts.map similarity index 100% rename from dist/cjs/node-cache.d.ts.map rename to dist/types/node-cache.d.ts.map diff --git a/dist/cjs/node-changes.d.ts b/dist/types/node-changes.d.ts similarity index 100% rename from dist/cjs/node-changes.d.ts rename to dist/types/node-changes.d.ts diff --git a/dist/cjs/node-changes.d.ts.map b/dist/types/node-changes.d.ts.map similarity index 100% rename from dist/cjs/node-changes.d.ts.map rename to dist/types/node-changes.d.ts.map diff --git a/dist/cjs/node-errors.d.ts b/dist/types/node-errors.d.ts similarity index 100% rename from dist/cjs/node-errors.d.ts rename to dist/types/node-errors.d.ts diff --git a/dist/cjs/node-errors.d.ts.map b/dist/types/node-errors.d.ts.map similarity index 100% rename from dist/cjs/node-errors.d.ts.map rename to dist/types/node-errors.d.ts.map diff --git a/dist/cjs/node-info.d.ts b/dist/types/node-info.d.ts similarity index 100% rename from dist/cjs/node-info.d.ts rename to dist/types/node-info.d.ts diff --git a/dist/cjs/node-info.d.ts.map b/dist/types/node-info.d.ts.map similarity index 100% rename from dist/cjs/node-info.d.ts.map rename to dist/types/node-info.d.ts.map diff --git a/dist/cjs/node-lock.d.ts b/dist/types/node-lock.d.ts similarity index 100% rename from dist/cjs/node-lock.d.ts rename to dist/types/node-lock.d.ts diff --git a/dist/cjs/node-lock.d.ts.map b/dist/types/node-lock.d.ts.map similarity index 100% rename from dist/cjs/node-lock.d.ts.map rename to dist/types/node-lock.d.ts.map diff --git a/dist/cjs/node-transaction.d.ts b/dist/types/node-transaction.d.ts similarity index 100% rename from dist/cjs/node-transaction.d.ts rename to dist/types/node-transaction.d.ts diff --git a/dist/cjs/node-transaction.d.ts.map b/dist/types/node-transaction.d.ts.map similarity index 100% rename from dist/cjs/node-transaction.d.ts.map rename to dist/types/node-transaction.d.ts.map diff --git a/dist/cjs/node-value-types.d.ts b/dist/types/node-value-types.d.ts similarity index 100% rename from dist/cjs/node-value-types.d.ts rename to dist/types/node-value-types.d.ts diff --git a/dist/cjs/node-value-types.d.ts.map b/dist/types/node-value-types.d.ts.map similarity index 100% rename from dist/cjs/node-value-types.d.ts.map rename to dist/types/node-value-types.d.ts.map diff --git a/dist/cjs/node.d.ts b/dist/types/node.d.ts similarity index 100% rename from dist/cjs/node.d.ts rename to dist/types/node.d.ts diff --git a/dist/cjs/node.d.ts.map b/dist/types/node.d.ts.map similarity index 100% rename from dist/cjs/node.d.ts.map rename to dist/types/node.d.ts.map diff --git a/dist/cjs/promise-fs/browser.d.ts b/dist/types/promise-fs/browser.d.ts similarity index 100% rename from dist/cjs/promise-fs/browser.d.ts rename to dist/types/promise-fs/browser.d.ts diff --git a/dist/cjs/promise-fs/browser.d.ts.map b/dist/types/promise-fs/browser.d.ts.map similarity index 100% rename from dist/cjs/promise-fs/browser.d.ts.map rename to dist/types/promise-fs/browser.d.ts.map diff --git a/dist/cjs/promise-fs/index.d.ts b/dist/types/promise-fs/index.d.ts similarity index 100% rename from dist/cjs/promise-fs/index.d.ts rename to dist/types/promise-fs/index.d.ts diff --git a/dist/cjs/promise-fs/index.d.ts.map b/dist/types/promise-fs/index.d.ts.map similarity index 100% rename from dist/cjs/promise-fs/index.d.ts.map rename to dist/types/promise-fs/index.d.ts.map diff --git a/dist/cjs/query.d.ts b/dist/types/query.d.ts similarity index 100% rename from dist/cjs/query.d.ts rename to dist/types/query.d.ts diff --git a/dist/cjs/query.d.ts.map b/dist/types/query.d.ts.map similarity index 100% rename from dist/cjs/query.d.ts.map rename to dist/types/query.d.ts.map diff --git a/dist/cjs/quicksort.d.ts b/dist/types/quicksort.d.ts similarity index 100% rename from dist/cjs/quicksort.d.ts rename to dist/types/quicksort.d.ts diff --git a/dist/cjs/quicksort.d.ts.map b/dist/types/quicksort.d.ts.map similarity index 100% rename from dist/cjs/quicksort.d.ts.map rename to dist/types/quicksort.d.ts.map diff --git a/dist/cjs/storage/binary/index.d.ts b/dist/types/storage/binary/index.d.ts similarity index 100% rename from dist/cjs/storage/binary/index.d.ts rename to dist/types/storage/binary/index.d.ts diff --git a/dist/cjs/storage/binary/index.d.ts.map b/dist/types/storage/binary/index.d.ts.map similarity index 100% rename from dist/cjs/storage/binary/index.d.ts.map rename to dist/types/storage/binary/index.d.ts.map diff --git a/dist/cjs/storage/binary/node-address.d.ts b/dist/types/storage/binary/node-address.d.ts similarity index 100% rename from dist/cjs/storage/binary/node-address.d.ts rename to dist/types/storage/binary/node-address.d.ts diff --git a/dist/cjs/storage/binary/node-address.d.ts.map b/dist/types/storage/binary/node-address.d.ts.map similarity index 100% rename from dist/cjs/storage/binary/node-address.d.ts.map rename to dist/types/storage/binary/node-address.d.ts.map diff --git a/dist/cjs/storage/binary/node-info.d.ts b/dist/types/storage/binary/node-info.d.ts similarity index 100% rename from dist/cjs/storage/binary/node-info.d.ts rename to dist/types/storage/binary/node-info.d.ts diff --git a/dist/cjs/storage/binary/node-info.d.ts.map b/dist/types/storage/binary/node-info.d.ts.map similarity index 100% rename from dist/cjs/storage/binary/node-info.d.ts.map rename to dist/types/storage/binary/node-info.d.ts.map diff --git a/dist/cjs/storage/context.d.ts b/dist/types/storage/context.d.ts similarity index 100% rename from dist/cjs/storage/context.d.ts rename to dist/types/storage/context.d.ts diff --git a/dist/cjs/storage/context.d.ts.map b/dist/types/storage/context.d.ts.map similarity index 100% rename from dist/cjs/storage/context.d.ts.map rename to dist/types/storage/context.d.ts.map diff --git a/dist/cjs/storage/create-index.d.ts b/dist/types/storage/create-index.d.ts similarity index 100% rename from dist/cjs/storage/create-index.d.ts rename to dist/types/storage/create-index.d.ts diff --git a/dist/cjs/storage/create-index.d.ts.map b/dist/types/storage/create-index.d.ts.map similarity index 100% rename from dist/cjs/storage/create-index.d.ts.map rename to dist/types/storage/create-index.d.ts.map diff --git a/dist/cjs/storage/custom/helpers.d.ts b/dist/types/storage/custom/helpers.d.ts similarity index 100% rename from dist/cjs/storage/custom/helpers.d.ts rename to dist/types/storage/custom/helpers.d.ts diff --git a/dist/cjs/storage/custom/helpers.d.ts.map b/dist/types/storage/custom/helpers.d.ts.map similarity index 100% rename from dist/cjs/storage/custom/helpers.d.ts.map rename to dist/types/storage/custom/helpers.d.ts.map diff --git a/dist/cjs/storage/custom/index.d.ts b/dist/types/storage/custom/index.d.ts similarity index 100% rename from dist/cjs/storage/custom/index.d.ts rename to dist/types/storage/custom/index.d.ts diff --git a/dist/cjs/storage/custom/index.d.ts.map b/dist/types/storage/custom/index.d.ts.map similarity index 100% rename from dist/cjs/storage/custom/index.d.ts.map rename to dist/types/storage/custom/index.d.ts.map diff --git a/dist/cjs/storage/custom/indexed-db/index.d.ts b/dist/types/storage/custom/indexed-db/index.d.ts similarity index 100% rename from dist/cjs/storage/custom/indexed-db/index.d.ts rename to dist/types/storage/custom/indexed-db/index.d.ts diff --git a/dist/cjs/storage/custom/indexed-db/index.d.ts.map b/dist/types/storage/custom/indexed-db/index.d.ts.map similarity index 100% rename from dist/cjs/storage/custom/indexed-db/index.d.ts.map rename to dist/types/storage/custom/indexed-db/index.d.ts.map diff --git a/dist/cjs/storage/custom/indexed-db/settings.d.ts b/dist/types/storage/custom/indexed-db/settings.d.ts similarity index 100% rename from dist/cjs/storage/custom/indexed-db/settings.d.ts rename to dist/types/storage/custom/indexed-db/settings.d.ts diff --git a/dist/cjs/storage/custom/indexed-db/settings.d.ts.map b/dist/types/storage/custom/indexed-db/settings.d.ts.map similarity index 100% rename from dist/cjs/storage/custom/indexed-db/settings.d.ts.map rename to dist/types/storage/custom/indexed-db/settings.d.ts.map diff --git a/dist/cjs/storage/custom/indexed-db/transaction.d.ts b/dist/types/storage/custom/indexed-db/transaction.d.ts similarity index 100% rename from dist/cjs/storage/custom/indexed-db/transaction.d.ts rename to dist/types/storage/custom/indexed-db/transaction.d.ts diff --git a/dist/cjs/storage/custom/indexed-db/transaction.d.ts.map b/dist/types/storage/custom/indexed-db/transaction.d.ts.map similarity index 100% rename from dist/cjs/storage/custom/indexed-db/transaction.d.ts.map rename to dist/types/storage/custom/indexed-db/transaction.d.ts.map diff --git a/dist/cjs/storage/custom/local-storage/index.d.ts b/dist/types/storage/custom/local-storage/index.d.ts similarity index 100% rename from dist/cjs/storage/custom/local-storage/index.d.ts rename to dist/types/storage/custom/local-storage/index.d.ts diff --git a/dist/cjs/storage/custom/local-storage/index.d.ts.map b/dist/types/storage/custom/local-storage/index.d.ts.map similarity index 100% rename from dist/cjs/storage/custom/local-storage/index.d.ts.map rename to dist/types/storage/custom/local-storage/index.d.ts.map diff --git a/dist/cjs/storage/custom/local-storage/interface.d.ts b/dist/types/storage/custom/local-storage/interface.d.ts similarity index 100% rename from dist/cjs/storage/custom/local-storage/interface.d.ts rename to dist/types/storage/custom/local-storage/interface.d.ts diff --git a/dist/cjs/storage/custom/local-storage/interface.d.ts.map b/dist/types/storage/custom/local-storage/interface.d.ts.map similarity index 100% rename from dist/cjs/storage/custom/local-storage/interface.d.ts.map rename to dist/types/storage/custom/local-storage/interface.d.ts.map diff --git a/dist/cjs/storage/custom/local-storage/settings.d.ts b/dist/types/storage/custom/local-storage/settings.d.ts similarity index 100% rename from dist/cjs/storage/custom/local-storage/settings.d.ts rename to dist/types/storage/custom/local-storage/settings.d.ts diff --git a/dist/cjs/storage/custom/local-storage/settings.d.ts.map b/dist/types/storage/custom/local-storage/settings.d.ts.map similarity index 100% rename from dist/cjs/storage/custom/local-storage/settings.d.ts.map rename to dist/types/storage/custom/local-storage/settings.d.ts.map diff --git a/dist/cjs/storage/custom/local-storage/transaction.d.ts b/dist/types/storage/custom/local-storage/transaction.d.ts similarity index 100% rename from dist/cjs/storage/custom/local-storage/transaction.d.ts rename to dist/types/storage/custom/local-storage/transaction.d.ts diff --git a/dist/cjs/storage/custom/local-storage/transaction.d.ts.map b/dist/types/storage/custom/local-storage/transaction.d.ts.map similarity index 100% rename from dist/cjs/storage/custom/local-storage/transaction.d.ts.map rename to dist/types/storage/custom/local-storage/transaction.d.ts.map diff --git a/dist/cjs/storage/index.d.ts b/dist/types/storage/index.d.ts similarity index 100% rename from dist/cjs/storage/index.d.ts rename to dist/types/storage/index.d.ts diff --git a/dist/cjs/storage/index.d.ts.map b/dist/types/storage/index.d.ts.map similarity index 100% rename from dist/cjs/storage/index.d.ts.map rename to dist/types/storage/index.d.ts.map diff --git a/dist/cjs/storage/indexes.d.ts b/dist/types/storage/indexes.d.ts similarity index 100% rename from dist/cjs/storage/indexes.d.ts rename to dist/types/storage/indexes.d.ts diff --git a/dist/cjs/storage/indexes.d.ts.map b/dist/types/storage/indexes.d.ts.map similarity index 100% rename from dist/cjs/storage/indexes.d.ts.map rename to dist/types/storage/indexes.d.ts.map diff --git a/dist/cjs/storage/mssql/index.d.ts b/dist/types/storage/mssql/index.d.ts similarity index 100% rename from dist/cjs/storage/mssql/index.d.ts rename to dist/types/storage/mssql/index.d.ts diff --git a/dist/cjs/storage/mssql/index.d.ts.map b/dist/types/storage/mssql/index.d.ts.map similarity index 100% rename from dist/cjs/storage/mssql/index.d.ts.map rename to dist/types/storage/mssql/index.d.ts.map diff --git a/dist/cjs/storage/sqlite/index.d.ts b/dist/types/storage/sqlite/index.d.ts similarity index 100% rename from dist/cjs/storage/sqlite/index.d.ts rename to dist/types/storage/sqlite/index.d.ts diff --git a/dist/cjs/storage/sqlite/index.d.ts.map b/dist/types/storage/sqlite/index.d.ts.map similarity index 100% rename from dist/cjs/storage/sqlite/index.d.ts.map rename to dist/types/storage/sqlite/index.d.ts.map diff --git a/dist/cjs/thread-safe.d.ts b/dist/types/thread-safe.d.ts similarity index 100% rename from dist/cjs/thread-safe.d.ts rename to dist/types/thread-safe.d.ts diff --git a/dist/cjs/thread-safe.d.ts.map b/dist/types/thread-safe.d.ts.map similarity index 100% rename from dist/cjs/thread-safe.d.ts.map rename to dist/types/thread-safe.d.ts.map diff --git a/dist/cjs/unidecode-module.d.ts b/dist/types/unidecode-module.d.ts similarity index 100% rename from dist/cjs/unidecode-module.d.ts rename to dist/types/unidecode-module.d.ts diff --git a/dist/cjs/unidecode-module.d.ts.map b/dist/types/unidecode-module.d.ts.map similarity index 100% rename from dist/cjs/unidecode-module.d.ts.map rename to dist/types/unidecode-module.d.ts.map diff --git a/dist/cjs/unidecode.d.ts b/dist/types/unidecode.d.ts similarity index 100% rename from dist/cjs/unidecode.d.ts rename to dist/types/unidecode.d.ts diff --git a/dist/cjs/unidecode.d.ts.map b/dist/types/unidecode.d.ts.map similarity index 100% rename from dist/cjs/unidecode.d.ts.map rename to dist/types/unidecode.d.ts.map From bd947df72c6825a9584a73766289644abce872b6 Mon Sep 17 00:00:00 2001 From: Ewout Stortenbeker Date: Mon, 31 Oct 2022 11:33:05 +0100 Subject: [PATCH 03/14] update build settings & paths --- package.json | 24 ++++++++++++------------ tsconfig.json | 7 +++++-- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 4cea167..806e487 100644 --- a/package.json +++ b/package.json @@ -2,25 +2,25 @@ "name": "acebase", "version": "1.25.2", "description": "AceBase realtime database. Open source firebase alternative for nodejs and browser, with additional features: indexes, geo, fulltext, queries, custom storage, offline usage, synchronization, live data proxies and more", - "main": "./src/index.js", + "main": "./dist/cjs/index.js", "browser": { - "./src/index.js": "./src/browser.js", - "./src/ipc/index.js": "./src/ipc/browser.js", - "./src/promise-fs/index.js": "./src/promise-fs/browser.js", - "./src/storage/binary/index.js": "./src/not-supported.js", - "./src/storage/mssql/index.js": "./src/not-supported.js", - "./src/storage/sqlite/index.js": "./src/not-supported.js", - "./src/data-index/index.js": "./src/not-supported.js", - "./src/btree/index.js": "./src/not-supported.js" + "./dist/cjs/index.js": "./dist/cjs/browser.js", + "./dist/cjs/ipc/index.js": "./dist/cjs/ipc/browser.js", + "./dist/cjs/promise-fs/index.js": "./dist/cjs/promise-fs/browser.js", + "./dist/cjs/storage/binary/index.js": "./dist/cjs/not-supported.js", + "./dist/cjs/storage/mssql/index.js": "./dist/cjs/not-supported.js", + "./dist/cjs/storage/sqlite/index.js": "./dist/cjs/not-supported.js", + "./dist/cjs/data-index/index.js": "./dist/cjs/not-supported.js", + "./dist/cjs/btree/index.js": "./dist/cjs/not-supported.js" }, - "types": "./src/index.d.ts", + "types": "./dist/types/index.d.ts", "private": false, "repository": "github:appy-one/acebase", "scripts": { "lint": "eslint .", "lint:fix": "eslint . --fix", - "build": "find src -name \"*.d.ts\" -type f -delete && tsc && npm run browserify", - "browserify": "browserify src/browser.js -o dist/browser.js --standalone acebase --ignore buffer --ignore rxjs && terser dist/browser.js -o dist/browser.min.js", + "build": "rm -r ./dist/cjs && rm -r ./dist/types && tsc && npm run browserify", + "browserify": "browserify ./dist/cjs/browser.js -o ./dist/browser.js --standalone acebase --ignore buffer --ignore rxjs && terser ./dist/browser.js -o ./dist/browser.min.js", "test": "jasmine" }, "keywords": [ diff --git a/tsconfig.json b/tsconfig.json index ba7229e..1e072fb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,13 +3,16 @@ "target": "ES2017", "lib": ["ES2017", "DOM"], "module": "CommonJS", + "noImplicitAny": true, "listEmittedFiles": true, - "outDir": "src", + "pretty": true, + "outDir": "./dist/cjs", "sourceMap": true, "declaration": true, "declarationMap": true, - "noImplicitAny": true + "declarationDir": "./dist/types" }, + "include": ["src/**/*"], "exclude": [ "node_modules" ] From 8ec49a077c0b7be2c48013e95ab59576c973d104 Mon Sep 17 00:00:00 2001 From: Ewout Stortenbeker Date: Mon, 31 Oct 2022 11:33:43 +0100 Subject: [PATCH 04/14] chore: build --- dist/browser.js | 10765 ++++++++-------- dist/browser.min.js | 2 +- dist/cjs/acebase-browser.js.map | 2 +- dist/cjs/acebase-local.js.map | 2 +- dist/cjs/api-local.js.map | 2 +- dist/cjs/async-task-batch.js.map | 2 +- dist/cjs/binary.js.map | 2 +- dist/cjs/browser.js.map | 2 +- dist/cjs/btree/binary-reader.js.map | 2 +- dist/cjs/btree/binary-tree-builder.js.map | 2 +- .../binary-tree-leaf-entry-extdata.js.map | 2 +- .../btree/binary-tree-leaf-entry-value.js.map | 2 +- dist/cjs/btree/binary-tree-leaf-entry.js.map | 2 +- dist/cjs/btree/binary-tree-leaf.js.map | 2 +- dist/cjs/btree/binary-tree-node-entry.js.map | 2 +- dist/cjs/btree/binary-tree-node-info.js.map | 2 +- dist/cjs/btree/binary-tree-node.js.map | 2 +- .../binary-tree-transaction-operation.js.map | 2 +- dist/cjs/btree/binary-tree.js.map | 2 +- dist/cjs/btree/binary-writer.js.map | 2 +- dist/cjs/btree/config.js.map | 2 +- dist/cjs/btree/entry-key-type.js.map | 2 +- dist/cjs/btree/index.js.map | 2 +- dist/cjs/btree/leaf-entry-metadata.js.map | 2 +- .../cjs/btree/leaf-entry-recordpointer.js.map | 2 +- dist/cjs/btree/tree-builder.js.map | 2 +- dist/cjs/btree/tree-leaf-entry-value.js.map | 2 +- dist/cjs/btree/tree-leaf-entry.js.map | 2 +- dist/cjs/btree/tree-leaf.js.map | 2 +- dist/cjs/btree/tree-node-entry.js.map | 2 +- dist/cjs/btree/tree-node.js.map | 2 +- dist/cjs/btree/tree.js.map | 2 +- dist/cjs/btree/tx.js.map | 2 +- dist/cjs/btree/typesafe-compare.js.map | 2 +- dist/cjs/btree/utils.js.map | 2 +- .../data-index/array-index-query-hint.js.map | 2 +- dist/cjs/data-index/array-index.js.map | 2 +- dist/cjs/data-index/data-index.js.map | 2 +- .../fulltext-index-query-hint.js.map | 2 +- dist/cjs/data-index/fulltext-index.js.map | 2 +- dist/cjs/data-index/geo-index.js.map | 2 +- dist/cjs/data-index/index.js.map | 2 +- dist/cjs/data-index/options.js.map | 2 +- dist/cjs/data-index/query-hint.js.map | 2 +- dist/cjs/data-index/query-results.js.map | 2 +- dist/cjs/data-index/query-stats.js.map | 2 +- dist/cjs/data-index/shared.js.map | 2 +- dist/cjs/detailed-error.js.map | 2 +- dist/cjs/geohash.js.map | 2 +- dist/cjs/index.js.map | 2 +- dist/cjs/ipc/browser.js.map | 2 +- dist/cjs/ipc/index.js.map | 2 +- dist/cjs/ipc/ipc.js.map | 2 +- dist/cjs/ipc/remote.js.map | 2 +- dist/cjs/node-address.js.map | 2 +- dist/cjs/node-cache.js.map | 2 +- dist/cjs/node-changes.js.map | 2 +- dist/cjs/node-errors.js.map | 2 +- dist/cjs/node-info.js.map | 2 +- dist/cjs/node-lock.js.map | 2 +- dist/cjs/node-transaction.js.map | 2 +- dist/cjs/node-value-types.js.map | 2 +- dist/cjs/node.js.map | 2 +- dist/cjs/not-supported.js | 2 + dist/cjs/not-supported.js.map | 1 + dist/cjs/promise-fs/browser.js.map | 2 +- dist/cjs/promise-fs/index.js.map | 2 +- dist/cjs/query.js.map | 2 +- dist/cjs/quicksort.js.map | 2 +- dist/cjs/storage/binary/index.js.map | 2 +- dist/cjs/storage/binary/node-address.js.map | 2 +- dist/cjs/storage/binary/node-info.js.map | 2 +- dist/cjs/storage/context.js.map | 2 +- dist/cjs/storage/create-index.js.map | 2 +- dist/cjs/storage/custom/helpers.js.map | 2 +- dist/cjs/storage/custom/index.js.map | 2 +- .../storage/custom/indexed-db/index.js.map | 2 +- .../storage/custom/indexed-db/settings.js.map | 2 +- .../custom/indexed-db/transaction.js.map | 2 +- .../storage/custom/local-storage/index.js.map | 2 +- .../custom/local-storage/interface.js.map | 2 +- .../local-storage/local-storage-like.js | 3 - .../local-storage/local-storage-like.js.map | 1 - .../custom/local-storage/settings.js.map | 2 +- .../custom/local-storage/transaction.js.map | 2 +- dist/cjs/storage/index.js.map | 2 +- dist/cjs/storage/indexes.js.map | 2 +- dist/cjs/storage/mssql/index.js.map | 2 +- dist/cjs/storage/sqlite/index.js.map | 2 +- dist/cjs/storage/storage-custom.js | 1217 -- dist/cjs/storage/storage-custom.js.map | 1 - dist/cjs/thread-safe.js.map | 2 +- dist/cjs/unidecode-module.js.map | 2 +- dist/cjs/unidecode.js.map | 2 +- dist/types/acebase-browser.d.ts.map | 2 +- dist/types/acebase-local.d.ts.map | 2 +- dist/types/api-local.d.ts.map | 2 +- dist/types/async-task-batch.d.ts.map | 2 +- dist/types/binary.d.ts.map | 2 +- dist/types/browser.d.ts.map | 2 +- dist/types/btree/binary-reader.d.ts.map | 2 +- dist/types/btree/binary-tree-builder.d.ts.map | 2 +- .../binary-tree-leaf-entry-extdata.d.ts.map | 2 +- .../binary-tree-leaf-entry-value.d.ts.map | 2 +- .../btree/binary-tree-leaf-entry.d.ts.map | 2 +- dist/types/btree/binary-tree-leaf.d.ts.map | 2 +- .../btree/binary-tree-node-entry.d.ts.map | 2 +- .../btree/binary-tree-node-info.d.ts.map | 2 +- dist/types/btree/binary-tree-node.d.ts.map | 2 +- ...binary-tree-transaction-operation.d.ts.map | 2 +- dist/types/btree/binary-tree.d.ts.map | 2 +- dist/types/btree/binary-writer.d.ts.map | 2 +- dist/types/btree/config.d.ts.map | 2 +- dist/types/btree/entry-key-type.d.ts.map | 2 +- dist/types/btree/index.d.ts.map | 2 +- dist/types/btree/leaf-entry-metadata.d.ts.map | 2 +- .../btree/leaf-entry-recordpointer.d.ts.map | 2 +- dist/types/btree/tree-builder.d.ts.map | 2 +- .../btree/tree-leaf-entry-value.d.ts.map | 2 +- dist/types/btree/tree-leaf-entry.d.ts.map | 2 +- dist/types/btree/tree-leaf.d.ts.map | 2 +- dist/types/btree/tree-node-entry.d.ts.map | 2 +- dist/types/btree/tree-node.d.ts.map | 2 +- dist/types/btree/tree.d.ts.map | 2 +- dist/types/btree/tx.d.ts.map | 2 +- dist/types/btree/typesafe-compare.d.ts.map | 2 +- dist/types/btree/utils.d.ts.map | 2 +- .../array-index-query-hint.d.ts.map | 2 +- dist/types/data-index/array-index.d.ts.map | 2 +- dist/types/data-index/data-index.d.ts.map | 2 +- .../fulltext-index-query-hint.d.ts.map | 2 +- dist/types/data-index/fulltext-index.d.ts.map | 2 +- dist/types/data-index/geo-index.d.ts.map | 2 +- dist/types/data-index/index.d.ts.map | 2 +- dist/types/data-index/options.d.ts.map | 2 +- dist/types/data-index/query-hint.d.ts.map | 2 +- dist/types/data-index/query-results.d.ts.map | 2 +- dist/types/data-index/query-stats.d.ts.map | 2 +- dist/types/data-index/shared.d.ts.map | 2 +- dist/types/detailed-error.d.ts.map | 2 +- dist/types/geohash.d.ts.map | 2 +- dist/types/index.d.ts.map | 2 +- dist/types/ipc/browser.d.ts.map | 2 +- dist/types/ipc/index.d.ts.map | 2 +- dist/types/ipc/ipc.d.ts.map | 2 +- dist/types/ipc/remote.d.ts.map | 2 +- dist/types/node-address.d.ts.map | 2 +- dist/types/node-cache.d.ts.map | 2 +- dist/types/node-changes.d.ts.map | 2 +- dist/types/node-errors.d.ts.map | 2 +- dist/types/node-info.d.ts.map | 2 +- dist/types/node-lock.d.ts.map | 2 +- dist/types/node-transaction.d.ts.map | 2 +- dist/types/node-value-types.d.ts.map | 2 +- dist/types/node.d.ts.map | 2 +- dist/types/not-supported.d.ts | 1 + dist/types/not-supported.d.ts.map | 1 + dist/types/promise-fs/browser.d.ts.map | 2 +- dist/types/promise-fs/index.d.ts.map | 2 +- dist/types/query.d.ts.map | 2 +- dist/types/quicksort.d.ts.map | 2 +- dist/types/storage/binary/index.d.ts.map | 2 +- .../storage/binary/node-address.d.ts.map | 2 +- dist/types/storage/binary/node-info.d.ts.map | 2 +- dist/types/storage/context.d.ts.map | 2 +- dist/types/storage/create-index.d.ts.map | 2 +- dist/types/storage/custom/helpers.d.ts.map | 2 +- dist/types/storage/custom/index.d.ts.map | 2 +- .../storage/custom/indexed-db/index.d.ts.map | 2 +- .../custom/indexed-db/settings.d.ts.map | 2 +- .../custom/indexed-db/transaction.d.ts.map | 2 +- .../custom/local-storage/index.d.ts.map | 2 +- .../custom/local-storage/interface.d.ts.map | 2 +- .../custom/local-storage/settings.d.ts.map | 2 +- .../custom/local-storage/transaction.d.ts.map | 2 +- dist/types/storage/index.d.ts.map | 2 +- dist/types/storage/indexes.d.ts.map | 2 +- dist/types/storage/mssql/index.d.ts.map | 2 +- dist/types/storage/sqlite/index.d.ts.map | 2 +- dist/types/thread-safe.d.ts.map | 2 +- dist/types/unidecode-module.d.ts.map | 2 +- dist/types/unidecode.d.ts.map | 2 +- 182 files changed, 5561 insertions(+), 6777 deletions(-) create mode 100644 dist/cjs/not-supported.js create mode 100644 dist/cjs/not-supported.js.map delete mode 100644 dist/cjs/storage/custom/local-storage/local-storage-like.js delete mode 100644 dist/cjs/storage/custom/local-storage/local-storage-like.js.map delete mode 100644 dist/cjs/storage/storage-custom.js delete mode 100644 dist/cjs/storage/storage-custom.js.map create mode 100644 dist/types/not-supported.d.ts create mode 100644 dist/types/not-supported.d.ts.map diff --git a/dist/browser.js b/dist/browser.js index 10a5fc9..d8e407d 100644 --- a/dist/browser.js +++ b/dist/browser.js @@ -1,5362 +1,6 @@ (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.acebase = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i { - // console.log(`database "${dbname}" (${this.constructor.name}) is ready to use`); - this._ready = true; - }); - } - /** - * Waits for the database to be ready before running your callback. - * @param callback (optional) callback function that is called when the database is ready to be used. You can also use the returned promise. - * @returns returns a promise that resolves when ready - */ - async ready(callback) { - if (!this._ready) { - // Wait for ready event - await new Promise(resolve => this.on('ready', resolve)); - } - callback === null || callback === void 0 ? void 0 : callback(); - } - get isReady() { - return this._ready; - } - /** - * Allow specific observable implementation to be used - * @param ObservableImpl Implementation to use - */ - setObservable(ObservableImpl) { - (0, optional_observable_1.setObservable)(ObservableImpl); - } - /** - * Creates a reference to a node - * @param path - * @returns reference to the requested node - */ - ref(path) { - return new data_reference_1.DataReference(this, path); - } - /** - * Get a reference to the root database node - * @returns reference to root node - */ - get root() { - return this.ref(''); - } - /** - * Creates a query on the requested node - * @param path - * @returns query for the requested node - */ - query(path) { - const ref = new data_reference_1.DataReference(this, path); - return new data_reference_1.DataReferenceQuery(ref); - } - get indexes() { - return { - /** - * Gets all indexes - */ - get: () => { - return this.api.getIndexes(); - }, - /** - * Creates an index on "key" for all child nodes at "path". If the index already exists, nothing happens. - * Example: creating an index on all "name" keys of child objects of path "system/users", - * will index "system/users/user1/name", "system/users/user2/name" etc. - * You can also use wildcard paths to enable indexing and quering of fragmented data. - * Example: path "users/*\/posts", key "title": will index all "title" keys in all posts of all users. - * @param path path to the container node - * @param key name of the key to index every container child node - * @param options any additional options - */ - create: (path, key, options) => { - return this.api.createIndex(path, key, options); - }, - /** - * Deletes an existing index from the database - */ - delete: async (filePath) => { - return this.api.deleteIndex(filePath); - }, - }; - } - get schema() { - return { - get: (path) => { - return this.api.getSchema(path); - }, - set: (path, schema) => { - return this.api.setSchema(path, schema); - }, - all: () => { - return this.api.getSchemas(); - }, - check: (path, value, isUpdate) => { - return this.api.validateSchema(path, value, isUpdate); - }, - }; - } -} -exports.AceBaseBase = AceBaseBase; - -},{"./data-reference":8,"./debug":10,"./optional-observable":14,"./simple-colors":21,"./simple-event-emitter":22,"./type-mappings":25}],2:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Api = void 0; -class NotImplementedError extends Error { - constructor(name) { super(`${name} is not implemented`); } -} -/** - * Refactor to type/interface once acebase and acebase-client have been ported to TS - */ -class Api { - // eslint-disable-next-line @typescript-eslint/no-empty-function - constructor() { } - /** - * Provides statistics - * @param options - */ - stats(options) { throw new NotImplementedError('stats'); } - /** - * @param path - * @param event event to subscribe to ("value", "child_added" etc) - * @param callback callback function - */ - subscribe(path, event, callback, settings) { throw new NotImplementedError('subscribe'); } - unsubscribe(path, event, callback) { throw new NotImplementedError('unsubscribe'); } - update(path, updates, options) { throw new NotImplementedError('update'); } - set(path, value, options) { throw new NotImplementedError('set'); } - get(path, options) { throw new NotImplementedError('get'); } - transaction(path, callback, options) { throw new NotImplementedError('transaction'); } - exists(path) { throw new NotImplementedError('exists'); } - query(path, query, options) { throw new NotImplementedError('query'); } - reflect(path, type, args) { throw new NotImplementedError('reflect'); } - export(path, write, options) { throw new NotImplementedError('export'); } - import(path, read, options) { throw new NotImplementedError('import'); } - /** Creates an index on key for all child nodes at path */ - createIndex(path, key, options) { throw new NotImplementedError('createIndex'); } - getIndexes() { throw new NotImplementedError('getIndexes'); } - deleteIndex(filePath) { throw new NotImplementedError('deleteIndex'); } - setSchema(path, schema) { throw new NotImplementedError('setSchema'); } - getSchema(path) { throw new NotImplementedError('getSchema'); } - getSchemas() { throw new NotImplementedError('getSchemas'); } - validateSchema(path, value, isUpdate) { throw new NotImplementedError('validateSchema'); } - getMutations(filter) { throw new NotImplementedError('getMutations'); } - getChanges(filter) { throw new NotImplementedError('getChanges'); } -} -exports.Api = Api; - -},{}],3:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ascii85 = void 0; -function c(input, length, result) { - const b = [0, 0, 0, 0, 0]; - for (let i = 0; i < length; i += 4) { - let n = ((input[i] * 256 + input[i + 1]) * 256 + input[i + 2]) * 256 + input[i + 3]; - if (!n) { - result.push('z'); - } - else { - for (let j = 0; j < 5; b[j++] = n % 85 + 33, n = Math.floor(n / 85)) - ; - result.push(String.fromCharCode(b[4], b[3], b[2], b[1], b[0])); - } - } -} -function encode(arr) { - // summary: encodes input data in ascii85 string - // input: ArrayLike - const input = arr, result = [], remainder = input.length % 4, length = input.length - remainder; - c(input, length, result); - if (remainder) { - const t = new Uint8Array(4); - t.set(input.slice(length), 0); - c(t, 4, result); - let x = result.pop(); - if (x == 'z') { - x = '!!!!!'; - } - result.push(x.substr(0, remainder + 1)); - } - let ret = result.join(''); // String - ret = '<~' + ret + '~>'; - return ret; -} -exports.ascii85 = { - encode: function (arr) { - if (arr instanceof ArrayBuffer) { - arr = new Uint8Array(arr, 0, arr.byteLength); - } - return encode(arr); - }, - decode: function (input) { - // summary: decodes the input string back to an ArrayBuffer - // input: String: the input string to decode - if (!input.startsWith('<~') || !input.endsWith('~>')) { - throw new Error('Invalid input string'); - } - input = input.substr(2, input.length - 4); - const n = input.length, r = [], b = [0, 0, 0, 0, 0]; - let t, x, y, d; - for (let i = 0; i < n; ++i) { - if (input.charAt(i) == 'z') { - r.push(0, 0, 0, 0); - continue; - } - for (let j = 0; j < 5; ++j) { - b[j] = input.charCodeAt(i + j) - 33; - } - d = n - i; - if (d < 5) { - for (let j = d; j < 4; b[++j] = 0) - ; - b[d] = 85; - } - t = (((b[0] * 85 + b[1]) * 85 + b[2]) * 85 + b[3]) * 85 + b[4]; - x = t & 255; - t >>>= 8; - y = t & 255; - t >>>= 8; - r.push(t >>> 8, t & 255, y, x); - for (let j = d; j < 5; ++j, r.pop()) - ; - i += 4; - } - const data = new Uint8Array(r); - return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength); - }, -}; - -},{}],4:[function(require,module,exports){ -"use strict"; -var _a, _b; -Object.defineProperty(exports, "__esModule", { value: true }); -const pad_1 = require("../pad"); -const env = typeof window === 'object' ? window : self, globalCount = Object.keys(env).length, mimeTypesLength = (_b = (_a = navigator.mimeTypes) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0, clientId = (0, pad_1.default)((mimeTypesLength - + navigator.userAgent.length).toString(36) - + globalCount.toString(36), 4); -function fingerprint() { - return clientId; -} -exports.default = fingerprint; - -},{"../pad":6}],5:[function(require,module,exports){ -"use strict"; -/** - * cuid.js - * Collision-resistant UID generator for browsers and node. - * Sequential for fast db lookups and recency sorting. - * Safe for element IDs and server-side lookups. - * - * Extracted from CLCTR - * - * Copyright (c) Eric Elliott 2012 - * MIT License - * - * time biasing added by Ewout Stortenbeker for AceBase - */ -Object.defineProperty(exports, "__esModule", { value: true }); -const fingerprint_1 = require("./fingerprint"); -const pad_1 = require("./pad"); -let c = 0; -const blockSize = 4, base = 36, discreteValues = Math.pow(base, blockSize); -function randomBlock() { - return (0, pad_1.default)((Math.random() * discreteValues << 0).toString(base), blockSize); -} -function safeCounter() { - c = c < discreteValues ? c : 0; - c++; // this is not subliminal - return c - 1; -} -function cuid(timebias = 0) { - // Starting with a lowercase letter makes - // it HTML element ID friendly. - const letter = 'c', // hard-coded allows for sequential access - // timestamp - // warning: this exposes the exact date and time - // that the uid was created. - // NOTES Ewout: - // - added timebias - // - at '2059/05/25 19:38:27.456', timestamp will become 1 character larger! - timestamp = (new Date().getTime() + timebias).toString(base), - // Prevent same-machine collisions. - counter = (0, pad_1.default)(safeCounter().toString(base), blockSize), - // A few chars to generate distinct ids for different - // clients (so different computers are far less - // likely to generate the same id) - print = (0, fingerprint_1.default)(), - // Grab some more chars from Math.random() - random = randomBlock() + randomBlock(); - return letter + timestamp + counter + print + random; -} -exports.default = cuid; -// Not using slugs, removed code - -},{"./fingerprint":4,"./pad":6}],6:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function pad(num, size) { - const s = '000000000' + num; - return s.substr(s.length - size); -} -exports.default = pad; - -},{}],7:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OrderedCollectionProxy = exports.proxyAccess = exports.LiveDataProxy = void 0; -const utils_1 = require("./utils"); -const data_reference_1 = require("./data-reference"); -const data_snapshot_1 = require("./data-snapshot"); -const path_reference_1 = require("./path-reference"); -const id_1 = require("./id"); -const optional_observable_1 = require("./optional-observable"); -const process_1 = require("./process"); -const path_info_1 = require("./path-info"); -const simple_event_emitter_1 = require("./simple-event-emitter"); -class RelativeNodeTarget extends Array { - static areEqual(t1, t2) { - return t1.length === t2.length && t1.every((key, i) => t2[i] === key); - } - static isAncestor(ancestor, other) { - return ancestor.length < other.length && ancestor.every((key, i) => other[i] === key); - } - static isDescendant(descendant, other) { - return descendant.length > other.length && other.every((key, i) => descendant[i] === key); - } -} -const isProxy = Symbol('isProxy'); -class LiveDataProxy { - /** - * Creates a live data proxy for the given reference. The data of the reference's path will be loaded, and kept in-sync - * with live data by listening for 'mutations' events. Any changes made to the value by the client will be synced back - * to the database. - * @param ref DataReference to create proxy for. - * @param options proxy initialization options - * be written to the database. - */ - static async create(ref, options) { - var _a; - ref = new data_reference_1.DataReference(ref.db, ref.path); // Use copy to prevent context pollution on original reference - let cache, loaded = false; - let latestCursor = options === null || options === void 0 ? void 0 : options.cursor; - let proxy; - const proxyId = id_1.ID.generate(); //ref.push().key; - // let onMutationCallback: ProxyObserveMutationsCallback; - // let onErrorCallback: ProxyObserveErrorCallback = err => { - // console.error(err.message, err.details); - // }; - const clientSubscriptions = []; - const clientEventEmitter = new simple_event_emitter_1.SimpleEventEmitter(); - clientEventEmitter.on('cursor', (cursor) => latestCursor = cursor); - clientEventEmitter.on('error', (err) => { - console.error(err.message, err.details); - }); - const applyChange = (keys, newValue) => { - // Make changes to cache - if (keys.length === 0) { - cache = newValue; - return true; - } - const allowCreation = false; //cache === null; // If the proxy'd target did not exist upon load, we must allow it to be created now. - if (allowCreation) { - cache = typeof keys[0] === 'number' ? [] : {}; - } - let target = cache; - const trailKeys = keys.slice(); - while (trailKeys.length > 1) { - const key = trailKeys.shift(); - if (!(key in target)) { - if (allowCreation) { - target[key] = typeof key === 'number' ? [] : {}; - } - else { - // Have we missed an event, or are local pending mutations creating this conflict? - return false; // Do not proceed - } - } - target = target[key]; - } - const prop = trailKeys.shift(); - if (newValue === null) { - // Remove it - target instanceof Array ? target.splice(prop, 1) : delete target[prop]; - } - else { - // Set or update it - target[prop] = newValue; - } - return true; - }; - // Subscribe to mutations events on the target path - const syncFallback = async () => { - if (!loaded) { - return; - } - await reload(); - }; - const subscription = ref.on('mutations', { syncFallback }).subscribe(async (snap) => { - var _a; - if (!loaded) { - return; - } - const context = snap.context(); - const isRemote = ((_a = context.acebase_proxy) === null || _a === void 0 ? void 0 : _a.id) !== proxyId; - if (!isRemote) { - return; // Update was done through this proxy, no need to update cache or trigger local value subscriptions - } - const mutations = snap.val(false); - const proceed = mutations.every(mutation => { - if (!applyChange(mutation.target, mutation.val)) { - return false; - } - // if (onMutationCallback) { - const changeRef = mutation.target.reduce((ref, key) => ref.child(key), ref); - const changeSnap = new data_snapshot_1.DataSnapshot(changeRef, mutation.val, false, mutation.prev, snap.context()); - // onMutationCallback(changeSnap, isRemote); // onMutationCallback uses try/catch for client callback - clientEventEmitter.emit('mutation', { snapshot: changeSnap, isRemote }); - // } - return true; - }); - if (proceed) { - clientEventEmitter.emit('cursor', context.acebase_cursor); // // NOTE: cursor is only present in mutations done remotely. For our own updates, server cursors are returned by ref.set and ref.update - localMutationsEmitter.emit('mutations', { origin: 'remote', snap }); - } - else { - console.warn(`Cached value of live data proxy on "${ref.path}" appears outdated, will be reloaded`); - await reload(); - } - }); - // Setup updating functionality: enqueue all updates, process them at next tick in the order they were issued - let processPromise = Promise.resolve(); - const mutationQueue = []; - const transactions = []; - const pushLocalMutations = async () => { - // Sync all local mutations that are not in a transaction - const mutations = []; - for (let i = 0, m = mutationQueue[0]; i < mutationQueue.length; i++, m = mutationQueue[i]) { - if (!transactions.find(t => RelativeNodeTarget.areEqual(t.target, m.target) || RelativeNodeTarget.isAncestor(t.target, m.target))) { - mutationQueue.splice(i, 1); - i--; - mutations.push(m); - } - } - if (mutations.length === 0) { - return; - } - // Add current (new) values to mutations - mutations.forEach(mutation => { - mutation.value = (0, utils_1.cloneObject)(getTargetValue(cache, mutation.target)); - }); - // Run local onMutation & onChange callbacks in the next tick - process_1.default.nextTick(() => { - // Run onMutation callback for each changed node - const context = { acebase_proxy: { id: proxyId, source: 'update' } }; - // if (onMutationCallback) { - mutations.forEach(mutation => { - const mutationRef = mutation.target.reduce((ref, key) => ref.child(key), ref); - const mutationSnap = new data_snapshot_1.DataSnapshot(mutationRef, mutation.value, false, mutation.previous, context); - // onMutationCallback(mutationSnap, false); - clientEventEmitter.emit('mutation', { snapshot: mutationSnap, isRemote: false }); - }); - // } - // Notify local subscribers - const snap = new data_snapshot_1.MutationsDataSnapshot(ref, mutations.map(m => ({ target: m.target, val: m.value, prev: m.previous })), context); - localMutationsEmitter.emit('mutations', { origin: 'local', snap }); - }); - // Update database async - // const batchId = ID.generate(); - processPromise = mutations - .reduce((mutations, m, i, arr) => { - // Only keep top path mutations to prevent unneccessary child path updates - if (!arr.some(other => RelativeNodeTarget.isAncestor(other.target, m.target))) { - mutations.push(m); - } - return mutations; - }, []) - .reduce((updates, m) => { - // Prepare db updates - const target = m.target; - if (target.length === 0) { - // Overwrite this proxy's root value - updates.push({ ref, target, value: cache, type: 'set', previous: m.previous }); - } - else { - const parentTarget = target.slice(0, -1); - const key = target.slice(-1)[0]; - const parentRef = parentTarget.reduce((ref, key) => ref.child(key), ref); - const parentUpdate = updates.find(update => update.ref.path === parentRef.path); - const cacheValue = getTargetValue(cache, target); // m.value? - const prevValue = m.previous; - if (parentUpdate) { - parentUpdate.value[key] = cacheValue; - parentUpdate.previous[key] = prevValue; - } - else { - updates.push({ ref: parentRef, target: parentTarget, value: { [key]: cacheValue }, type: 'update', previous: { [key]: prevValue } }); - } - } - return updates; - }, []) - .reduce(async (promise, update /*, i, updates */) => { - // Execute db update - // i === 0 && console.log(`Proxy: processing ${updates.length} db updates to paths:`, updates.map(update => update.ref.path)); - const context = { - acebase_proxy: { - id: proxyId, - source: update.type, - // update_id: ID.generate(), - // batch_id: batchId, - // batch_updates: updates.length - }, - }; - await promise; - await update.ref - .context(context)[update.type](update.value) // .set or .update - .catch(err => { - clientEventEmitter.emit('error', { source: 'update', message: `Error processing update of "/${ref.path}"`, details: err }); - // console.warn(`Proxy could not update DB, should rollback (${update.type}) the proxy value of "${update.ref.path}" to: `, update.previous); - const context = { acebase_proxy: { id: proxyId, source: 'update-rollback' } }; - const mutations = []; - if (update.type === 'set') { - setTargetValue(cache, update.target, update.previous); - const mutationSnap = new data_snapshot_1.DataSnapshot(update.ref, update.previous, false, update.value, context); - clientEventEmitter.emit('mutation', { snapshot: mutationSnap, isRemote: false }); - mutations.push({ target: update.target, val: update.previous, prev: update.value }); - } - else { - // update - Object.keys(update.previous).forEach(key => { - setTargetValue(cache, update.target.concat(key), update.previous[key]); - const mutationSnap = new data_snapshot_1.DataSnapshot(update.ref.child(key), update.previous[key], false, update.value[key], context); - clientEventEmitter.emit('mutation', { snapshot: mutationSnap, isRemote: false }); - mutations.push({ target: update.target.concat(key), val: update.previous[key], prev: update.value[key] }); - }); - } - // Run onMutation callback for each node being rolled back - mutations.forEach(m => { - const mutationRef = m.target.reduce((ref, key) => ref.child(key), ref); - const mutationSnap = new data_snapshot_1.DataSnapshot(mutationRef, m.val, false, m.prev, context); - clientEventEmitter.emit('mutation', { snapshot: mutationSnap, isRemote: false }); - }); - // Notify local subscribers: - const snap = new data_snapshot_1.MutationsDataSnapshot(update.ref, mutations, context); - localMutationsEmitter.emit('mutations', { origin: 'local', snap }); - }); - if (update.ref.cursor) { - // Should also be available in context.acebase_cursor now - clientEventEmitter.emit('cursor', update.ref.cursor); - } - }, processPromise); - await processPromise; - }; - let syncInProgress = false; - const syncPromises = []; - const syncCompleted = () => { - let resolve; - const promise = new Promise(rs => resolve = rs); - syncPromises.push({ resolve }); - return promise; - }; - let processQueueTimeout = null; - const scheduleSync = () => { - if (!processQueueTimeout) { - processQueueTimeout = setTimeout(async () => { - syncInProgress = true; - processQueueTimeout = null; - await pushLocalMutations(); - syncInProgress = false; - syncPromises.splice(0).forEach(p => p.resolve()); - }, 0); - } - }; - const flagOverwritten = (target) => { - if (!mutationQueue.find(m => RelativeNodeTarget.areEqual(m.target, target))) { - mutationQueue.push({ target, previous: (0, utils_1.cloneObject)(getTargetValue(cache, target)) }); - } - // schedule database updates - scheduleSync(); - }; - const localMutationsEmitter = new simple_event_emitter_1.SimpleEventEmitter(); - const addOnChangeHandler = (target, callback) => { - const isObject = val => val !== null && typeof val === 'object'; - const mutationsHandler = async (details) => { - var _a; - const { snap, origin } = details; - const context = snap.context(); - const causedByOurProxy = ((_a = context.acebase_proxy) === null || _a === void 0 ? void 0 : _a.id) === proxyId; - if (details.origin === 'remote' && causedByOurProxy) { - // Any local changes already triggered subscription callbacks - console.error('DEV ISSUE: mutationsHandler was called from remote event originating from our own proxy'); - return; - } - const mutations = snap.val(false).filter(mutation => { - // Keep mutations impacting the subscribed target: mutations on target, or descendant or ancestor of target - return mutation.target.slice(0, target.length).every((key, i) => target[i] === key); - }); - if (mutations.length === 0) { - return; - } - let newValue, previousValue; - // If there is a mutation on the target itself, or parent/ancestor path, there can only be one. We can take a shortcut - const singleMutation = mutations.find(m => m.target.length <= target.length); - if (singleMutation) { - const trailKeys = target.slice(singleMutation.target.length); - newValue = trailKeys.reduce((val, key) => !isObject(val) || !(key in val) ? null : val[key], singleMutation.val); - previousValue = trailKeys.reduce((val, key) => !isObject(val) || !(key in val) ? null : val[key], singleMutation.prev); - } - else { - // All mutations are on children/descendants of our target - // Construct new & previous values by combining cache and snapshot - const currentValue = getTargetValue(cache, target); - newValue = (0, utils_1.cloneObject)(currentValue); - previousValue = (0, utils_1.cloneObject)(newValue); - mutations.forEach(mutation => { - // mutation.target is relative to proxy root - const trailKeys = mutation.target.slice(target.length); - for (let i = 0, val = newValue, prev = previousValue; i < trailKeys.length; i++) { // arr = PathInfo.getPathKeys(mutationPath).slice(PathInfo.getPathKeys(targetRef.path).length) - const last = i + 1 === trailKeys.length, key = trailKeys[i]; - if (last) { - val[key] = mutation.val; - if (val[key] === null) { - delete val[key]; - } - prev[key] = mutation.prev; - if (prev[key] === null) { - delete prev[key]; - } - } - else { - val = val[key] = key in val ? val[key] : {}; - prev = prev[key] = key in prev ? prev[key] : {}; - } - } - }); - } - process_1.default.nextTick(() => { - // Run callback with read-only (frozen) values in next tick - let keepSubscription = true; - try { - keepSubscription = false !== callback(Object.freeze(newValue), Object.freeze(previousValue), !causedByOurProxy, context); - } - catch (err) { - clientEventEmitter.emit('error', { source: origin === 'remote' ? 'remote_update' : 'local_update', message: 'Error running subscription callback', details: err }); - } - if (keepSubscription === false) { - stop(); - } - }); - }; - localMutationsEmitter.on('mutations', mutationsHandler); - const stop = () => { - localMutationsEmitter.off('mutations').off('mutations', mutationsHandler); - clientSubscriptions.splice(clientSubscriptions.findIndex(cs => cs.stop === stop), 1); - }; - clientSubscriptions.push({ target, stop }); - return { stop }; - }; - const handleFlag = (flag, target, args) => { - if (flag === 'write') { - return flagOverwritten(target); - } - else if (flag === 'onChange') { - return addOnChangeHandler(target, args.callback); - } - else if (flag === 'subscribe' || flag === 'observe') { - const subscribe = subscriber => { - const currentValue = getTargetValue(cache, target); - subscriber.next(currentValue); - const subscription = addOnChangeHandler(target, (value /*, previous, isRemote, context */) => { - subscriber.next(value); - }); - return function unsubscribe() { - subscription.stop(); - }; - }; - if (flag === 'subscribe') { - return subscribe; - } - // Try to load Observable - const Observable = (0, optional_observable_1.getObservable)(); - return new Observable(subscribe); - } - else if (flag === 'transaction') { - const hasConflictingTransaction = transactions.some(t => RelativeNodeTarget.areEqual(target, t.target) || RelativeNodeTarget.isAncestor(target, t.target) || RelativeNodeTarget.isDescendant(target, t.target)); - if (hasConflictingTransaction) { - // TODO: Wait for this transaction to finish, then try again - return Promise.reject(new Error('Cannot start transaction because it conflicts with another transaction')); - } - return new Promise(async (resolve) => { - // If there are pending mutations on target (or deeper), wait until they have been synchronized - const hasPendingMutations = mutationQueue.some(m => RelativeNodeTarget.areEqual(target, m.target) || RelativeNodeTarget.isAncestor(target, m.target)); - if (hasPendingMutations) { - if (!syncInProgress) { - scheduleSync(); - } - await syncCompleted(); - } - const tx = { target, status: 'started', transaction: null }; - transactions.push(tx); - tx.transaction = { - get status() { return tx.status; }, - get completed() { return tx.status !== 'started'; }, - get mutations() { - return mutationQueue.filter(m => RelativeNodeTarget.areEqual(tx.target, m.target) || RelativeNodeTarget.isAncestor(tx.target, m.target)); - }, - get hasMutations() { - return this.mutations.length > 0; - }, - async commit() { - if (this.completed) { - throw new Error(`Transaction has completed already (status '${tx.status}')`); - } - tx.status = 'finished'; - transactions.splice(transactions.indexOf(tx), 1); - if (syncInProgress) { - // Currently syncing without our mutations - await syncCompleted(); - } - scheduleSync(); - await syncCompleted(); - }, - rollback() { - // Remove mutations from queue - if (this.completed) { - throw new Error(`Transaction has completed already (status '${tx.status}')`); - } - tx.status = 'canceled'; - const mutations = []; - for (let i = 0; i < mutationQueue.length; i++) { - const m = mutationQueue[i]; - if (RelativeNodeTarget.areEqual(tx.target, m.target) || RelativeNodeTarget.isAncestor(tx.target, m.target)) { - mutationQueue.splice(i, 1); - i--; - mutations.push(m); - } - } - // Replay mutations in reverse order - mutations.reverse() - .forEach(m => { - if (m.target.length === 0) { - cache = m.previous; - } - else { - setTargetValue(cache, m.target, m.previous); - } - }); - // Remove transaction - transactions.splice(transactions.indexOf(tx), 1); - }, - }; - resolve(tx.transaction); - }); - } - }; - const snap = await ref.get({ cache_mode: 'allow', cache_cursor: options === null || options === void 0 ? void 0 : options.cursor }); - // const gotOfflineStartValue = snap.context().acebase_origin === 'cache'; - // if (gotOfflineStartValue) { - // console.warn(`Started data proxy with cached value of "${ref.path}", check if its value is reloaded on next connection!`); - // } - if (snap.context().acebase_origin !== 'cache') { - clientEventEmitter.emit('cursor', (_a = ref.cursor) !== null && _a !== void 0 ? _a : null); // latestCursor = snap.context().acebase_cursor ?? null; - } - loaded = true; - cache = snap.val(); - if (cache === null && typeof (options === null || options === void 0 ? void 0 : options.defaultValue) !== 'undefined') { - cache = options.defaultValue; - const context = { - acebase_proxy: { - id: proxyId, - source: 'default', - // update_id: ID.generate() - }, - }; - await ref.context(context).set(cache); - } - proxy = createProxy({ root: { ref, get cache() { return cache; } }, target: [], id: proxyId, flag: handleFlag }); - const assertProxyAvailable = () => { - if (proxy === null) { - throw new Error('Proxy was destroyed'); - } - }; - const reload = async () => { - // Manually reloads current value when cache is out of sync, which should only - // be able to happen if an AceBaseClient is used without cache database, - // and the connection to the server was lost for a while. In all other cases, - // there should be no need to call this method. - assertProxyAvailable(); - mutationQueue.splice(0); // Remove pending mutations. Will be empty in production, but might not be while debugging, leading to weird behaviour. - const snap = await ref.get({ allow_cache: false }); - const oldVal = cache, newVal = snap.val(); - cache = newVal; - // Compare old and new values - const mutations = (0, utils_1.getMutations)(oldVal, newVal); - if (mutations.length === 0) { - return; // Nothing changed - } - // Run onMutation callback for each changed node - const context = snap.context(); // context might contain acebase_cursor if server support that - context.acebase_proxy = { id: proxyId, source: 'reload' }; - // if (onMutationCallback) { - mutations.forEach(m => { - const targetRef = getTargetRef(ref, m.target); - const newSnap = new data_snapshot_1.DataSnapshot(targetRef, m.val, m.val === null, m.prev, context); - clientEventEmitter.emit('mutation', { snapshot: newSnap, isRemote: true }); - }); - // } - // Notify local subscribers - const mutationsSnap = new data_snapshot_1.MutationsDataSnapshot(ref, mutations, context); - localMutationsEmitter.emit('mutations', { origin: 'local', snap: mutationsSnap }); - }; - return { - async destroy() { - await processPromise; - const promises = [ - subscription.stop(), - ...clientSubscriptions.map(cs => cs.stop()), - ]; - await Promise.all(promises); - ['cursor', 'mutation', 'error'].forEach(event => clientEventEmitter.off(event)); - cache = null; // Remove cache - proxy = null; - }, - stop() { - this.destroy(); - }, - get value() { - assertProxyAvailable(); - return proxy; - }, - get hasValue() { - assertProxyAvailable(); - return cache !== null; - }, - set value(val) { - // Overwrite the value of the proxied path itself! - assertProxyAvailable(); - if (val !== null && typeof val === 'object' && val[isProxy]) { - // Assigning one proxied value to another - val = val.valueOf(); - } - flagOverwritten([]); - cache = val; - }, - get ref() { - return ref; - }, - get cursor() { - return latestCursor; - }, - reload, - onMutation(callback) { - // Fires callback each time anything changes - assertProxyAvailable(); - clientEventEmitter.off('mutation'); // Mimic legacy behaviour that overwrites handler - clientEventEmitter.on('mutation', ({ snapshot, isRemote }) => { - try { - callback(snapshot, isRemote); - } - catch (err) { - clientEventEmitter.emit('error', { source: 'mutation_callback', message: 'Error in dataproxy onMutation callback', details: err }); - } - }); - }, - onError(callback) { - // Fires callback each time anything goes wrong - assertProxyAvailable(); - clientEventEmitter.off('error'); // Mimic legacy behaviour that overwrites handler - clientEventEmitter.on('error', (err) => { - try { - callback(err); - } - catch (err) { - console.error(`Error in dataproxy onError callback: ${err.message}`); - } - }); - }, - on(event, callback) { - clientEventEmitter.on(event, callback); - }, - off(event, callback) { - clientEventEmitter.off(event, callback); - }, - }; - } -} -exports.LiveDataProxy = LiveDataProxy; -function getTargetValue(obj, target) { - let val = obj; - for (const key of target) { - val = typeof val === 'object' && val !== null && key in val ? val[key] : null; - } - return val; -} -function setTargetValue(obj, target, value) { - if (target.length === 0) { - throw new Error('Cannot update root target, caller must do that itself!'); - } - const targetObject = target.slice(0, -1).reduce((obj, key) => obj[key], obj); - const prop = target.slice(-1)[0]; - if (value === null || typeof value === 'undefined') { - // Remove it - targetObject instanceof Array ? targetObject.splice(prop, 1) : delete targetObject[prop]; - } - else { - // Set or update it - targetObject[prop] = value; - } -} -function getTargetRef(ref, target) { - // Create new DataReference to prevent context reuse - const path = path_info_1.PathInfo.get(ref.path).childPath(target); - return new data_reference_1.DataReference(ref.db, path); -} -function createProxy(context) { - const targetRef = getTargetRef(context.root.ref, context.target); - const childProxies = []; - const handler = { - get(target, prop, receiver) { - target = getTargetValue(context.root.cache, context.target); - if (typeof prop === 'symbol') { - if (prop.toString() === Symbol.iterator.toString()) { - // Use .values for @@iterator symbol - prop = 'values'; - } - else if (prop.toString() === isProxy.toString()) { - return true; - } - else { - return Reflect.get(target, prop, receiver); - } - } - if (prop === 'valueOf') { - return function valueOf() { return target; }; - } - if (target === null || typeof target !== 'object') { - throw new Error(`Cannot read property "${prop}" of ${target}. Value of path "/${targetRef.path}" is not an object (anymore)`); - } - if (target instanceof Array && typeof prop === 'string' && /^[0-9]+$/.test(prop)) { - // Proxy type definitions say prop can be a number, but this is never the case. - prop = parseInt(prop); - } - const value = target[prop]; - if (value === null) { - // Removed property. Should never happen, but if it does: - delete target[prop]; - return; // undefined - } - // Check if we have a child proxy for this property already. - // If so, and the properties' typeof value did not change, return that - const childProxy = childProxies.find(proxy => proxy.prop === prop); - if (childProxy) { - if (childProxy.typeof === typeof value) { - return childProxy.value; - } - childProxies.splice(childProxies.indexOf(childProxy), 1); - } - const proxifyChildValue = (prop) => { - const value = target[prop]; // - const childProxy = childProxies.find(child => child.prop === prop); - if (childProxy) { - if (childProxy.typeof === typeof value) { - return childProxy.value; - } - childProxies.splice(childProxies.indexOf(childProxy), 1); - } - if (typeof value !== 'object') { - // Can't proxify non-object values - return value; - } - const newChildProxy = createProxy({ root: context.root, target: context.target.concat(prop), id: context.id, flag: context.flag }); - childProxies.push({ typeof: typeof value, prop, value: newChildProxy }); - return newChildProxy; - }; - const unproxyValue = (value) => { - return value !== null && typeof value === 'object' && value[isProxy] - ? value.getTarget() - : value; - }; - // If the property contains a simple value, return it. - if (['string', 'number', 'boolean'].includes(typeof value) - || value instanceof Date - || value instanceof path_reference_1.PathReference - || value instanceof ArrayBuffer - || (typeof value === 'object' && 'buffer' in value) // Typed Arrays - ) { - return value; - } - const isArray = target instanceof Array; - if (prop === 'toString') { - return function toString() { - return `[LiveDataProxy for "${targetRef.path}"]`; - }; - } - if (typeof value === 'undefined') { - if (prop === 'push') { - // Push item to an object collection - return function push(item) { - const childRef = targetRef.push(); - context.flag('write', context.target.concat(childRef.key)); //, { previous: null } - target[childRef.key] = item; - return childRef.key; - }; - } - if (prop === 'getTarget') { - // Get unproxied readonly (but still live) version of data. - return function (warn = true) { - warn && console.warn('Use getTarget with caution - any changes will not be synchronized!'); - return target; - }; - } - if (prop === 'getRef') { - // Gets the DataReference to this data target - return function getRef() { - const ref = getTargetRef(context.root.ref, context.target); - return ref; - }; - } - if (prop === 'forEach') { - return function forEach(callback) { - const keys = Object.keys(target); - // Fix: callback with unproxied value - let stop = false; - for (let i = 0; !stop && i < keys.length; i++) { - const key = keys[i]; - const value = proxifyChildValue(key); //, target[key] - stop = callback(value, key, i) === false; - } - }; - } - if (['values', 'entries', 'keys'].includes(prop)) { - return function* generator() { - const keys = Object.keys(target); - for (const key of keys) { - if (prop === 'keys') { - yield key; - } - else { - const value = proxifyChildValue(key); //, target[key] - if (prop === 'entries') { - yield [key, value]; - } - else { - yield value; - } - } - } - }; - } - if (prop === 'toArray') { - return function toArray(sortFn) { - const arr = Object.keys(target).map(key => proxifyChildValue(key)); //, target[key] - if (sortFn) { - arr.sort(sortFn); - } - return arr; - }; - } - if (prop === 'onChanged') { - // Starts monitoring the value - return function onChanged(callback) { - return context.flag('onChange', context.target, { callback }); - }; - } - if (prop === 'subscribe') { - // Gets subscriber function to use with Observables, or custom handling - return function subscribe() { - return context.flag('subscribe', context.target); - }; - } - if (prop === 'getObservable') { - // Creates an observable for monitoring the value - return function getObservable() { - return context.flag('observe', context.target); - }; - } - if (prop === 'getOrderedCollection') { - return function getOrderedCollection(orderProperty, orderIncrement) { - return new OrderedCollectionProxy(this, orderProperty, orderIncrement); - }; - } - if (prop === 'startTransaction') { - return function startTransaction() { - return context.flag('transaction', context.target); - }; - } - if (prop === 'remove' && !isArray) { - // Removes target from object collection - return function remove() { - if (context.target.length === 0) { - throw new Error('Can\'t remove proxy root value'); - } - const parent = getTargetValue(context.root.cache, context.target.slice(0, -1)); - const key = context.target.slice(-1)[0]; - context.flag('write', context.target); - delete parent[key]; - }; - } - return; // undefined - } - else if (typeof value === 'function') { - if (isArray) { - // Handle array methods - const writeArray = (action) => { - context.flag('write', context.target); - return action(); - }; - const cleanArrayValues = values => values.map(value => { - value = unproxyValue(value); - removeVoidProperties(value); - return value; - }); - // Methods that directly change the array: - if (prop === 'push') { - return function push(...items) { - items = cleanArrayValues(items); - return writeArray(() => target.push(...items)); // push the items to the cache array - }; - } - if (prop === 'pop') { - return function pop() { - return writeArray(() => target.pop()); - }; - } - if (prop === 'splice') { - return function splice(start, deleteCount, ...items) { - items = cleanArrayValues(items); - return writeArray(() => target.splice(start, deleteCount, ...items)); - }; - } - if (prop === 'shift') { - return function shift() { - return writeArray(() => target.shift()); - }; - } - if (prop === 'unshift') { - return function unshift(...items) { - items = cleanArrayValues(items); - return writeArray(() => target.unshift(...items)); - }; - } - if (prop === 'sort') { - return function sort(compareFn) { - return writeArray(() => target.sort(compareFn)); - }; - } - if (prop === 'reverse') { - return function reverse() { - return writeArray(() => target.reverse()); - }; - } - // Methods that do not change the array themselves, but - // have callbacks that might, or return child values: - if (['indexOf', 'lastIndexOf'].includes(prop)) { - return function indexOf(item, start) { - if (item !== null && typeof item === 'object' && item[isProxy]) { - // Use unproxied value, or array.indexOf will return -1 (fixes issue #1) - item = item.getTarget(false); - } - return target[prop](item, start); - }; - } - if (['forEach', 'every', 'some', 'filter', 'map'].includes(prop)) { - return function iterate(callback) { - return target[prop]((value, i) => { - return callback(proxifyChildValue(i), i, proxy); //, value - }); - }; - } - if (['reduce', 'reduceRight'].includes(prop)) { - return function reduce(callback, initialValue) { - return target[prop]((prev, value, i) => { - return callback(prev, proxifyChildValue(i), i, proxy); //, value - }, initialValue); - }; - } - if (['find', 'findIndex'].includes(prop)) { - return function find(callback) { - let value = target[prop]((value, i) => { - return callback(proxifyChildValue(i), i, proxy); // , value - }); - if (prop === 'find' && value) { - const index = target.indexOf(value); - value = proxifyChildValue(index); //, value - } - return value; - }; - } - if (['values', 'entries', 'keys'].includes(prop)) { - return function* generator() { - for (let i = 0; i < target.length; i++) { - if (prop === 'keys') { - yield i; - } - else { - const value = proxifyChildValue(i); //, target[i] - if (prop === 'entries') { - yield [i, value]; - } - else { - yield value; - } - } - } - }; - } - } - // Other function (or not an array), should not alter its value - // return function fn(...args) { - // return target[prop](...args); - // } - return value; - } - // Proxify any other value - return proxifyChildValue(prop); //, value - }, - set(target, prop, value, receiver) { - // Eg: chats.chat1.title = 'New chat title'; - // target === chats.chat1, prop === 'title' - target = getTargetValue(context.root.cache, context.target); - if (typeof prop === 'symbol') { - return Reflect.set(target, prop, value, receiver); - } - if (target === null || typeof target !== 'object') { - throw new Error(`Cannot set property "${prop}" of ${target}. Value of path "/${targetRef.path}" is not an object`); - } - if (target instanceof Array && typeof prop === 'string') { - if (!/^[0-9]+$/.test(prop)) { - throw new Error(`Cannot set property "${prop}" on array value of path "/${targetRef.path}"`); - } - prop = parseInt(prop); - } - if (value !== null) { - if (typeof value === 'object') { - if (value[isProxy]) { - // Assigning one proxied value to another - value = value.valueOf(); - } - // else if (Object.isFrozen(value)) { - // // Create a copy to unfreeze it - // value = cloneObject(value); - // } - value = (0, utils_1.cloneObject)(value); // Fix #10, always clone objects so changes made through the proxy won't change the original object (and vice versa) - } - if ((0, utils_1.valuesAreEqual)(value, target[prop])) { //if (compareValues(value, target[prop]) === 'identical') { // (typeof value !== 'object' && target[prop] === value) { - // not changing the actual value, ignore - return true; - } - } - if (context.target.some(key => typeof key === 'number')) { - // Updating an object property inside an array. Flag the first array in target to be written. - // Eg: when chat.members === [{ name: 'Ewout', id: 'someid' }] - // --> chat.members[0].name = 'Ewout' --> Rewrite members array instead of chat/members[0]/name - context.flag('write', context.target.slice(0, context.target.findIndex(key => typeof key === 'number'))); - } - else if (target instanceof Array) { - // Flag the entire array to be overwritten - context.flag('write', context.target); - } - else { - // Flag child property - context.flag('write', context.target.concat(prop)); - } - // Set cached value: - if (value === null) { - delete target[prop]; - } - else { - removeVoidProperties(value); - target[prop] = value; - } - return true; - }, - deleteProperty(target, prop) { - target = getTargetValue(context.root.cache, context.target); - if (target === null) { - throw new Error(`Cannot delete property ${prop.toString()} of null`); - } - if (typeof prop === 'symbol') { - return Reflect.deleteProperty(target, prop); - } - if (!(prop in target)) { - return true; // Nothing to delete - } - context.flag('write', context.target.concat(prop)); - delete target[prop]; - return true; - }, - ownKeys(target) { - target = getTargetValue(context.root.cache, context.target); - return Reflect.ownKeys(target); - }, - has(target, prop) { - target = getTargetValue(context.root.cache, context.target); - return Reflect.has(target, prop); - }, - getOwnPropertyDescriptor(target, prop) { - target = getTargetValue(context.root.cache, context.target); - const descriptor = Reflect.getOwnPropertyDescriptor(target, prop); - if (descriptor) { - descriptor.configurable = true; // prevent "TypeError: 'getOwnPropertyDescriptor' on proxy: trap reported non-configurability for property '...' which is either non-existant or configurable in the proxy target" - } - return descriptor; - }, - getPrototypeOf(target) { - target = getTargetValue(context.root.cache, context.target); - return Reflect.getPrototypeOf(target); - }, - }; - const proxy = new Proxy({}, handler); - return proxy; -} -function removeVoidProperties(obj) { - if (typeof obj !== 'object') { - return; - } - Object.keys(obj).forEach(key => { - const val = obj[key]; - if (val === null || typeof val === 'undefined') { - delete obj[key]; - } - else if (typeof val === 'object') { - removeVoidProperties(val); - } - }); -} -/** - * Convenience function to access ILiveDataProxyValue methods on a proxied value - * @param proxiedValue The proxied value to get access to - * @returns Returns the same object typecasted to an ILiveDataProxyValue - * @example - * // IChatMessages is an ObjectCollection - * let observable: Observable; - * - * // Allows you to do this: - * observable = proxyAccess(chat.messages).getObservable(); - * - * // Instead of: - * observable = (chat.messages.msg1 as any as ILiveDataProxyValue).getObservable(); - * - * // Both do the exact same, but the first is less obscure - */ -function proxyAccess(proxiedValue) { - if (typeof proxiedValue !== 'object' || !proxiedValue[isProxy]) { - throw new Error('Given value is not proxied. Make sure you are referencing the value through the live data proxy.'); - } - return proxiedValue; -} -exports.proxyAccess = proxyAccess; -/** - * Provides functionality to work with ordered collections through a live data proxy. Eliminates - * the need for arrays to handle ordered data by adding a 'sort' properties to child objects in a - * collection, and provides functionality to sort and reorder items with a minimal amount of database - * updates. - */ -class OrderedCollectionProxy { - constructor(collection, orderProperty = 'order', orderIncrement = 10) { - this.collection = collection; - this.orderProperty = orderProperty; - this.orderIncrement = orderIncrement; - if (typeof collection !== 'object' || !collection[isProxy]) { - throw new Error('Collection is not proxied'); - } - if (collection.valueOf() instanceof Array) { - throw new Error('Collection is an array, not an object collection'); - } - if (!Object.keys(collection).every(key => typeof collection[key] === 'object')) { - throw new Error('Collection has non-object children'); - } - // Check if the collection has order properties. If not, assign them now - const ok = Object.keys(collection).every(key => typeof collection[key][orderProperty] === 'number'); - if (!ok) { - // Assign order properties now. Database will be updated automatically - const keys = Object.keys(collection); - for (let i = 0; i < keys.length; i++) { - const item = collection[keys[i]]; - item[orderProperty] = i * orderIncrement; // 0, 10, 20, 30 etc - } - } - } - /** - * Gets an observable for the target object collection. Same as calling `collection.getObservable()` - * @returns - */ - getObservable() { - return proxyAccess(this.collection).getObservable(); - } - /** - * Gets an observable that emits a new ordered array representation of the object collection each time - * the unlaying data is changed. Same as calling `getArray()` in a `getObservable().subscribe` callback - * @returns - */ - getArrayObservable() { - const Observable = (0, optional_observable_1.getObservable)(); - return new Observable(subscriber => { - const subscription = this.getObservable().subscribe(( /*value*/) => { - const newArray = this.getArray(); - subscriber.next(newArray); - }); - return function unsubscribe() { - subscription.unsubscribe(); - }; - }); - } - /** - * Gets an ordered array representation of the items in your object collection. The items in the array - * are proxied values, changes will be in sync with the database. Note that the array itself - * is not mutable: adding or removing items to it will NOT update the collection in the - * the database and vice versa. Use `add`, `delete`, `sort` and `move` methods to make changes - * that impact the collection's sorting order - * @returns order array - */ - getArray() { - const arr = proxyAccess(this.collection).toArray((a, b) => a[this.orderProperty] - b[this.orderProperty]); - // arr.push = (...items: T[]) => { - // items.forEach(item => this.add(item)); - // return arr.length; - // }; - return arr; - } - add(item, index, from) { - const arr = this.getArray(); - let minOrder = Number.POSITIVE_INFINITY, maxOrder = Number.NEGATIVE_INFINITY; - for (let i = 0; i < arr.length; i++) { - const order = arr[i][this.orderProperty]; - minOrder = Math.min(order, minOrder); - maxOrder = Math.max(order, maxOrder); - } - let fromKey; - if (typeof from === 'number') { - // Moving existing item - fromKey = Object.keys(this.collection).find(key => this.collection[key] === item); - if (!fromKey) { - throw new Error('item not found in collection'); - } - if (from === index) { - return { key: fromKey, index }; - } - if (Math.abs(from - index) === 1) { - // Position being swapped, swap their order property values - const otherItem = arr[index]; - const otherOrder = otherItem[this.orderProperty]; - otherItem[this.orderProperty] = item[this.orderProperty]; - item[this.orderProperty] = otherOrder; - return { key: fromKey, index }; - } - else { - // Remove from array, code below will add again - arr.splice(from, 1); - } - } - if (typeof index !== 'number' || index >= arr.length) { - // append at the end - index = arr.length; - item[this.orderProperty] = arr.length == 0 ? 0 : maxOrder + this.orderIncrement; - } - else if (index === 0) { - // insert before all others - item[this.orderProperty] = arr.length == 0 ? 0 : minOrder - this.orderIncrement; - } - else { - // insert between 2 others - const orders = arr.map(item => item[this.orderProperty]); - const gap = orders[index] - orders[index - 1]; - if (gap > 1) { - item[this.orderProperty] = orders[index] - Math.floor(gap / 2); - } - else { - // TODO: Can this gap be enlarged by moving one of both orders? - // For now, change all other orders - arr.splice(index, 0, item); - for (let i = 0; i < arr.length; i++) { - arr[i][this.orderProperty] = i * this.orderIncrement; - } - } - } - const key = typeof fromKey === 'string' - ? fromKey // Moved item, don't add it - : proxyAccess(this.collection).push(item); - return { key, index }; - } - /** - * Deletes an item from the object collection using the their index in the sorted array representation - * @param index - * @returns the key of the collection's child that was deleted - */ - delete(index) { - const arr = this.getArray(); - const item = arr[index]; - if (!item) { - throw new Error(`Item at index ${index} not found`); - } - const key = Object.keys(this.collection).find(key => this.collection[key] === item); - if (!key) { - throw new Error('Cannot find target object to delete'); - } - this.collection[key] = null; // Deletes it from db - return { key, index }; - } - /** - * Moves an item in the object collection by reordering it - * @param fromIndex Current index in the array (the ordered representation of the object collection) - * @param toIndex Target index in the array - * @returns - */ - move(fromIndex, toIndex) { - const arr = this.getArray(); - return this.add(arr[fromIndex], toIndex, fromIndex); - } - /** - * Reorders the object collection using given sort function. Allows quick reordering of the collection which is persisted in the database - * @param sortFn - */ - sort(sortFn) { - const arr = this.getArray(); - arr.sort(sortFn); - for (let i = 0; i < arr.length; i++) { - arr[i][this.orderProperty] = i * this.orderIncrement; - } - } -} -exports.OrderedCollectionProxy = OrderedCollectionProxy; - -},{"./data-reference":8,"./data-snapshot":9,"./id":11,"./optional-observable":14,"./path-info":16,"./path-reference":17,"./process":18,"./simple-event-emitter":22,"./utils":26}],8:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DataReferencesArray = exports.DataSnapshotsArray = exports.DataReferenceQuery = exports.DataReference = exports.QueryDataRetrievalOptions = exports.DataRetrievalOptions = void 0; -const data_snapshot_1 = require("./data-snapshot"); -const subscription_1 = require("./subscription"); -const id_1 = require("./id"); -const path_info_1 = require("./path-info"); -const data_proxy_1 = require("./data-proxy"); -const optional_observable_1 = require("./optional-observable"); -class DataRetrievalOptions { - /** - * Options for data retrieval, allows selective loading of object properties - */ - constructor(options) { - if (!options) { - options = {}; - } - if (typeof options.include !== 'undefined' && !(options.include instanceof Array)) { - throw new TypeError('options.include must be an array'); - } - if (typeof options.exclude !== 'undefined' && !(options.exclude instanceof Array)) { - throw new TypeError('options.exclude must be an array'); - } - if (typeof options.child_objects !== 'undefined' && typeof options.child_objects !== 'boolean') { - throw new TypeError('options.child_objects must be a boolean'); - } - if (typeof options.cache_mode === 'string' && !['allow', 'bypass', 'force'].includes(options.cache_mode)) { - throw new TypeError('invalid value for options.cache_mode'); - } - this.include = options.include || undefined; - this.exclude = options.exclude || undefined; - this.child_objects = typeof options.child_objects === 'boolean' ? options.child_objects : undefined; - this.cache_mode = typeof options.cache_mode === 'string' - ? options.cache_mode - : typeof options.allow_cache === 'boolean' - ? options.allow_cache ? 'allow' : 'bypass' - : 'allow'; - this.cache_cursor = typeof options.cache_cursor === 'string' ? options.cache_cursor : undefined; - } -} -exports.DataRetrievalOptions = DataRetrievalOptions; -class QueryDataRetrievalOptions extends DataRetrievalOptions { - /** - * @param options Options for data retrieval, allows selective loading of object properties - */ - constructor(options) { - super(options); - if (!['undefined', 'boolean'].includes(typeof options.snapshots)) { - throw new TypeError('options.snapshots must be a boolean'); - } - this.snapshots = typeof options.snapshots === 'boolean' ? options.snapshots : true; - } -} -exports.QueryDataRetrievalOptions = QueryDataRetrievalOptions; -const _private = Symbol('private'); -class DataReference { - /** - * Creates a reference to a node - */ - constructor(db, path, vars) { - this.db = db; - if (!path) { - path = ''; - } - path = path.replace(/^\/|\/$/g, ''); // Trim slashes - const pathInfo = path_info_1.PathInfo.get(path); - const key = pathInfo.key; - const callbacks = []; - this[_private] = { - get path() { return path; }, - get key() { return key; }, - get callbacks() { return callbacks; }, - vars: vars || {}, - context: {}, - pushed: false, - cursor: null, - }; - } - context(context, merge = false) { - const currentContext = this[_private].context; - if (typeof context === 'object') { - const newContext = context ? merge ? currentContext || {} : context : {}; - if (context) { - // Merge new with current context - Object.keys(context).forEach(key => { - newContext[key] = context[key]; - }); - } - this[_private].context = newContext; - return this; - } - else if (typeof context === 'undefined') { - console.warn('Use snap.context() instead of snap.ref.context() to get updating context in event callbacks'); - return currentContext; - } - else { - throw new Error('Invalid context argument'); - } - } - /** - * Contains the last received cursor for this referenced path (if the connected database has transaction logging enabled). - * If you want to be notified if this value changes, add a handler with `ref.onCursor(callback)` - */ - get cursor() { - return this[_private].cursor; - } - set cursor(value) { - var _a; - this[_private].cursor = value; - (_a = this.onCursor) === null || _a === void 0 ? void 0 : _a.call(this, value); - } - /** - * The path this instance was created with - */ - get path() { return this[_private].path; } - /** - * The key or index of this node - */ - get key() { - const key = this[_private].key; - return typeof key === 'number' ? `[${key}]` : key; - } - /** - * If the "key" is a number, it is an index! - */ - get index() { - const key = this[_private].key; - if (typeof key !== 'number') { - throw new Error(`"${key}" is not a number`); - } - return key; - } - /** - * Returns a new reference to this node's parent - */ - get parent() { - const currentPath = path_info_1.PathInfo.fillVariables2(this.path, this.vars); - const info = path_info_1.PathInfo.get(currentPath); - if (info.parentPath === null) { - return null; - } - return new DataReference(this.db, info.parentPath).context(this[_private].context); - } - /** - * Contains values of the variables/wildcards used in a subscription path if this reference was - * created by an event ("value", "child_added" etc), or in a type mapping path when serializing / instantiating typed objects - */ - get vars() { - return this[_private].vars; - } - /** - * Returns a new reference to a child node - * @param childPath Child key, index or path - * @returns reference to the child - */ - child(childPath) { - childPath = typeof childPath === 'number' ? childPath : childPath.replace(/^\/|\/$/g, ''); - const currentPath = path_info_1.PathInfo.fillVariables2(this.path, this.vars); - const targetPath = path_info_1.PathInfo.getChildPath(currentPath, childPath); - return new DataReference(this.db, targetPath).context(this[_private].context); // `${this.path}/${childPath}` - } - /** - * Sets or overwrites the stored value - * @param value value to store in database - * @param onComplete optional completion callback to use instead of returning promise - * @returns promise that resolves with this reference when completed - */ - async set(value, onComplete) { - try { - if (this.isWildcardPath) { - throw new Error(`Cannot set the value of wildcard path "/${this.path}"`); - } - if (this.parent === null) { - throw new Error('Cannot set the root object. Use update, or set individual child properties'); - } - if (typeof value === 'undefined') { - throw new TypeError(`Cannot store undefined value in "/${this.path}"`); - } - if (!this.db.isReady) { - await this.db.ready(); - } - value = this.db.types.serialize(this.path, value); - const { cursor } = await this.db.api.set(this.path, value, { context: this[_private].context }); - this.cursor = cursor; - if (typeof onComplete === 'function') { - try { - onComplete(null, this); - } - catch (err) { - console.error('Error in onComplete callback:', err); - } - } - } - catch (err) { - if (typeof onComplete === 'function') { - try { - onComplete(err, this); - } - catch (err) { - console.error('Error in onComplete callback:', err); - } - } - else { - // throw again - throw err; - } - } - return this; - } - /** - * Updates properties of the referenced node - * @param updates object containing the properties to update - * @param onComplete optional completion callback to use instead of returning promise - * @return returns promise that resolves with this reference once completed - */ - async update(updates, onComplete) { - try { - if (this.isWildcardPath) { - throw new Error(`Cannot update the value of wildcard path "/${this.path}"`); - } - if (!this.db.isReady) { - await this.db.ready(); - } - if (typeof updates !== 'object' || updates instanceof Array || updates instanceof ArrayBuffer || updates instanceof Date) { - await this.set(updates); - } - else if (Object.keys(updates).length === 0) { - console.warn(`update called on path "/${this.path}", but there is nothing to update`); - } - else { - updates = this.db.types.serialize(this.path, updates); - const { cursor } = await this.db.api.update(this.path, updates, { context: this[_private].context }); - this.cursor = cursor; - } - if (typeof onComplete === 'function') { - try { - onComplete(null, this); - } - catch (err) { - console.error('Error in onComplete callback:', err); - } - } - } - catch (err) { - if (typeof onComplete === 'function') { - try { - onComplete(err, this); - } - catch (err) { - console.error('Error in onComplete callback:', err); - } - } - else { - // throw again - throw err; - } - } - return this; - } - /** - * Sets the value a node using a transaction: it runs your callback function with the current value, uses its return value as the new value to store. - * The transaction is canceled if your callback returns undefined, or throws an error. If your callback returns null, the target node will be removed. - * @param callback - callback function that performs the transaction on the node's current value. It must return the new value to store (or promise with new value), undefined to cancel the transaction, or null to remove the node. - * @returns returns a promise that resolves with the DataReference once the transaction has been processed - */ - async transaction(callback) { - if (this.isWildcardPath) { - throw new Error(`Cannot start a transaction on wildcard path "/${this.path}"`); - } - if (!this.db.isReady) { - await this.db.ready(); - } - let throwError; - const cb = (currentValue) => { - currentValue = this.db.types.deserialize(this.path, currentValue); - const snap = new data_snapshot_1.DataSnapshot(this, currentValue); - let newValue; - try { - newValue = callback(snap); - } - catch (err) { - // callback code threw an error - throwError = err; // Remember error - return; // cancel transaction by returning undefined - } - if (newValue instanceof Promise) { - return newValue - .then((val) => { - return this.db.types.serialize(this.path, val); - }) - .catch(err => { - throwError = err; // Remember error - return; // cancel transaction by returning undefined - }); - } - else { - return this.db.types.serialize(this.path, newValue); - } - }; - const { cursor } = await this.db.api.transaction(this.path, cb, { context: this[_private].context }); - this.cursor = cursor; - if (throwError) { - // Rethrow error from callback code - throw throwError; - } - return this; - } - on(event, callback, cancelCallback) { - if (this.path === '' && ['value', 'child_changed'].includes(event)) { - // Removed 'notify_value' and 'notify_child_changed' events from the list, they do not require additional data loading anymore. - console.warn('WARNING: Listening for value and child_changed events on the root node is a bad practice. These events require loading of all data (value event), or potentially lots of data (child_changed event) each time they are fired'); - } - let eventPublisher = null; - const eventStream = new subscription_1.EventStream(publisher => { eventPublisher = publisher; }); - // Map OUR callback to original callback, so .off can remove the right callback(s) - const cb = { - event, - stream: eventStream, - userCallback: typeof callback === 'function' && callback, - ourCallback: (err, path, newValue, oldValue, eventContext) => { - if (err) { - // TODO: Investigate if this ever happens? - this.db.debug.error(`Error getting data for event ${event} on path "${path}"`, err); - return; - } - const ref = this.db.ref(path); - ref[_private].vars = path_info_1.PathInfo.extractVariables(this.path, path); - let callbackObject; - if (event.startsWith('notify_')) { - // No data event, callback with reference - callbackObject = ref.context(eventContext || {}); - } - else { - const values = { - previous: this.db.types.deserialize(path, oldValue), - current: this.db.types.deserialize(path, newValue), - }; - if (event === 'child_removed') { - callbackObject = new data_snapshot_1.DataSnapshot(ref, values.previous, true, values.previous, eventContext); - } - else if (event === 'mutations') { - callbackObject = new data_snapshot_1.MutationsDataSnapshot(ref, values.current, eventContext); - } - else { - const isRemoved = event === 'mutated' && values.current === null; - callbackObject = new data_snapshot_1.DataSnapshot(ref, values.current, isRemoved, values.previous, eventContext); - } - } - eventPublisher.publish(callbackObject); - if (eventContext === null || eventContext === void 0 ? void 0 : eventContext.acebase_cursor) { - this.cursor = eventContext.acebase_cursor; - } - }, - }; - this[_private].callbacks.push(cb); - const subscribe = () => { - // (NEW) Add callback to event stream - // ref.on('value', callback) is now exactly the same as ref.on('value').subscribe(callback) - if (typeof callback === 'function') { - eventStream.subscribe(callback, (activated, cancelReason) => { - if (!activated) { - cancelCallback && cancelCallback(cancelReason); - } - }); - } - const advancedOptions = typeof callback === 'object' - ? callback - : { newOnly: !callback }; // newOnly: if callback is not 'truthy', could change this to (typeof callback !== 'function' && callback !== true) but that would break client code that uses a truthy argument. - if (typeof advancedOptions.newOnly !== 'boolean') { - advancedOptions.newOnly = false; - } - if (this.isWildcardPath) { - advancedOptions.newOnly = true; - } - const cancelSubscription = (err) => { - // Access denied? - // Cancel subscription - const callbacks = this[_private].callbacks; - callbacks.splice(callbacks.indexOf(cb), 1); - this.db.api.unsubscribe(this.path, event, cb.ourCallback); - // Call cancelCallbacks - this.db.debug.error(`Subscription "${event}" on path "/${this.path}" canceled because of an error: ${err.message}`); - eventPublisher.cancel(err.message); - }; - const authorized = this.db.api.subscribe(this.path, event, cb.ourCallback, { newOnly: advancedOptions.newOnly, cancelCallback: cancelSubscription, syncFallback: advancedOptions.syncFallback }); - const allSubscriptionsStoppedCallback = () => { - const callbacks = this[_private].callbacks; - callbacks.splice(callbacks.indexOf(cb), 1); - return this.db.api.unsubscribe(this.path, event, cb.ourCallback); - }; - if (authorized instanceof Promise) { - // Web API now returns a promise that resolves if the request is allowed - // and rejects when access is denied by the set security rules - authorized.then(() => { - // Access granted - eventPublisher.start(allSubscriptionsStoppedCallback); - }).catch(cancelSubscription); - } - else { - // Local API, always authorized - eventPublisher.start(allSubscriptionsStoppedCallback); - } - if (!advancedOptions.newOnly) { - // If callback param is supplied (either a callback function or true or something else truthy), - // it will fire events for current values right now. - // Otherwise, it expects the .subscribe methode to be used, which will then - // only be called for future events - if (event === 'value') { - this.get(snap => { - eventPublisher.publish(snap); - }); - } - else if (event === 'child_added') { - this.get(snap => { - const val = snap.val(); - if (val === null || typeof val !== 'object') { - return; - } - Object.keys(val).forEach(key => { - const childSnap = new data_snapshot_1.DataSnapshot(this.child(key), val[key]); - eventPublisher.publish(childSnap); - }); - }); - } - else if (event === 'notify_child_added') { - // Use the reflect API to get current children. - // NOTE: This does not work with AceBaseServer <= v0.9.7, only when signed in as admin - const step = 100, limit = step; - let skip = 0; - const more = async () => { - const children = await this.db.api.reflect(this.path, 'children', { limit, skip }); - children.list.forEach(child => { - const childRef = this.child(child.key); - eventPublisher.publish(childRef); - // typeof callback === 'function' && callback(childRef); - }); - if (children.more) { - skip += step; - more(); - } - }; - more(); - } - } - }; - if (this.db.isReady) { - subscribe(); - } - else { - this.db.ready(subscribe); - } - return eventStream; - } - off(event, callback) { - const subscriptions = this[_private].callbacks; - const stopSubs = subscriptions.filter(sub => (!event || sub.event === event) && (!callback || sub.userCallback === callback)); - if (stopSubs.length === 0) { - this.db.debug.warn(`Can't find event subscriptions to stop (path: "${this.path}", event: ${event || '(any)'}, callback: ${callback})`); - } - stopSubs.forEach(sub => { - sub.stream.stop(); - }); - return this; - } - get(optionsOrCallback, callback) { - if (!this.db.isReady) { - const promise = this.db.ready().then(() => this.get(optionsOrCallback, callback)); - return typeof optionsOrCallback !== 'function' && typeof callback !== 'function' ? promise : undefined; // only return promise if no callback is used - } - callback = - typeof optionsOrCallback === 'function' - ? optionsOrCallback - : typeof callback === 'function' - ? callback - : undefined; - if (this.isWildcardPath) { - const error = new Error(`Cannot get value of wildcard path "/${this.path}". Use .query() instead`); - if (typeof callback === 'function') { - throw error; - } - return Promise.reject(error); - } - const options = new DataRetrievalOptions(typeof optionsOrCallback === 'object' ? optionsOrCallback : { cache_mode: 'allow' }); - const promise = this.db.api.get(this.path, options).then(result => { - var _a; - const isNewApiResult = ('context' in result && 'value' in result); - if (!isNewApiResult) { - // acebase-core version package was updated but acebase or acebase-client package was not? Warn, but don't throw an error. - console.warn('AceBase api.get method returned an old response value. Update your acebase or acebase-client package'); - result = { value: result, context: {} }; - } - const value = this.db.types.deserialize(this.path, result.value); - const snapshot = new data_snapshot_1.DataSnapshot(this, value, undefined, undefined, result.context); - if ((_a = result.context) === null || _a === void 0 ? void 0 : _a.acebase_cursor) { - this.cursor = result.context.acebase_cursor; - } - return snapshot; - }); - if (callback) { - promise.then(callback).catch(err => { - console.error('Uncaught error:', err); - }); - return; - } - else { - return promise; - } - } - /** - * Waits for an event to occur - * @param event Name of the event, eg "value", "child_added", "child_changed", "child_removed" - * @param options data retrieval options, to include or exclude specific child keys - * @returns returns promise that resolves with a snapshot of the data - */ - once(event, options) { - if (event === 'value' && !this.isWildcardPath) { - // Shortcut, do not start listening for future events - return this.get(options); - } - return new Promise((resolve) => { - const callback = (snap) => { - this.off(event, callback); // unsubscribe directly - resolve(snap); - }; - this.on(event, callback); - }); - } - /** - * @param value optional value to store into the database right away - * @param onComplete optional callback function to run once value has been stored - * @returns returns promise that resolves with the reference after the passed value has been stored - */ - push(value, onComplete) { - if (this.isWildcardPath) { - const error = new Error(`Cannot push to wildcard path "/${this.path}"`); - if (typeof value === 'undefined' || typeof onComplete === 'function') { - throw error; - } - return Promise.reject(error); - } - const id = id_1.ID.generate(); - const ref = this.child(id); - ref[_private].pushed = true; - if (typeof value !== 'undefined') { - return ref.set(value, onComplete).then(() => ref); - } - else { - return ref; - } - } - /** - * Removes this node and all children - */ - async remove() { - if (this.isWildcardPath) { - throw new Error(`Cannot remove wildcard path "/${this.path}". Use query().remove instead`); - } - if (this.parent === null) { - throw new Error('Cannot remove the root node'); - } - return this.set(null); - } - /** - * Quickly checks if this reference has a value in the database, without returning its data - * @returns returns a promise that resolves with a boolean value - */ - async exists() { - if (this.isWildcardPath) { - throw new Error(`Cannot check wildcard path "/${this.path}" existence`); - } - if (!this.db.isReady) { - await this.db.ready(); - } - return this.db.api.exists(this.path); - } - get isWildcardPath() { - return this.path.indexOf('*') >= 0 || this.path.indexOf('$') >= 0; - } - /** - * Creates a query object for current node - */ - query() { - return new DataReferenceQuery(this); - } - /** - * Gets the number of children this node has, uses reflection - */ - async count() { - const info = await this.reflect('info', { child_count: true }); - return info.children.count; - } - async reflect(type, args) { - if (this.isWildcardPath) { - throw new Error(`Cannot reflect on wildcard path "/${this.path}"`); - } - if (!this.db.isReady) { - await this.db.ready(); - } - return this.db.api.reflect(this.path, type, args); - } - async export(write, options = { format: 'json', type_safe: true }) { - if (this.isWildcardPath) { - throw new Error(`Cannot export wildcard path "/${this.path}"`); - } - if (!this.db.isReady) { - await this.db.ready(); - } - const writeFn = typeof write === 'function' ? write : write.write.bind(write); - return this.db.api.export(this.path, writeFn, options); - } - /** - * Imports the value of this node and all children - * @param read Function that reads data from your stream - * @param options Only supported format currently is json - * @returns returns a promise that resolves once all data is imported - */ - async import(read, options = { format: 'json', suppress_events: false }) { - if (this.isWildcardPath) { - throw new Error(`Cannot import to wildcard path "/${this.path}"`); - } - if (!this.db.isReady) { - await this.db.ready(); - } - return this.db.api.import(this.path, read, options); - } - proxy(options) { - const isOptionsArg = typeof options === 'object' && (typeof options.cursor !== 'undefined' || typeof options.defaultValue !== 'undefined'); - if (typeof options !== 'undefined' && !isOptionsArg) { - this.db.debug.warn('Warning: live data proxy is being initialized with a deprecated method signature. Use ref.proxy(options) instead of ref.proxy(defaultValue)'); - options = { defaultValue: options }; - } - return data_proxy_1.LiveDataProxy.create(this, options); - } - /** - * @param options optional initial data retrieval options. - * Not recommended to use yet - given includes/excludes are not applied to received mutations, - * or sync actions when using an AceBaseClient with cache db. - */ - observe(options) { - // options should not be used yet - we can't prevent/filter mutation events on excluded paths atm - if (options) { - throw new Error('observe does not support data retrieval options yet'); - } - if (this.isWildcardPath) { - throw new Error(`Cannot observe wildcard path "/${this.path}"`); - } - const Observable = (0, optional_observable_1.getObservable)(); - return new Observable(observer => { - let cache, resolved = false; - let promise = this.get(options).then(snap => { - resolved = true; - cache = snap.val(); - observer.next(cache); - }); - const updateCache = (snap) => { - if (!resolved) { - promise = promise.then(() => updateCache(snap)); - return; - } - const mutatedPath = snap.ref.path; - if (mutatedPath === this.path) { - cache = snap.val(); - return observer.next(cache); - } - const trailKeys = path_info_1.PathInfo.getPathKeys(mutatedPath).slice(path_info_1.PathInfo.getPathKeys(this.path).length); - let target = cache; - while (trailKeys.length > 1) { - const key = trailKeys.shift(); - if (!(key in target)) { - // Happens if initial loaded data did not include / excluded this data, - // or we missed out on an event - target[key] = typeof trailKeys[0] === 'number' ? [] : {}; - } - target = target[key]; - } - const prop = trailKeys.shift(); - const newValue = snap.val(); - if (newValue === null) { - // Remove it - target instanceof Array && typeof prop === 'number' ? target.splice(prop, 1) : delete target[prop]; - } - else { - // Set or update it - target[prop] = newValue; - } - observer.next(cache); - }; - this.on('mutated', updateCache); // TODO: Refactor to 'mutations' event instead - // Return unsubscribe function - return () => { - this.off('mutated', updateCache); - }; - }); - } - async forEach(callbackOrOptions, callback) { - let options; - if (typeof callbackOrOptions === 'function') { - callback = callbackOrOptions; - } - else { - options = callbackOrOptions; - } - if (typeof callback !== 'function') { - throw new TypeError('No callback function given'); - } - // Get all children through reflection. This could be tweaked further using paging - const info = await this.reflect('children', { limit: 0, skip: 0 }); // Gets ALL child keys - const summary = { - canceled: false, - total: info.list.length, - processed: 0, - }; - // Iterate through all children until callback returns false - for (let i = 0; i < info.list.length; i++) { - const key = info.list[i].key; - // Get child data - const snapshot = await this.child(key).get(options); - summary.processed++; - if (!snapshot.exists()) { - // Was removed in the meantime, skip - continue; - } - // Run callback - const result = await callback(snapshot); - if (result === false) { - summary.canceled = true; - break; // Stop looping - } - } - return summary; - } - async getMutations(cursorOrDate) { - const cursor = typeof cursorOrDate === 'string' ? cursorOrDate : undefined; - const timestamp = cursorOrDate === null || typeof cursorOrDate === 'undefined' ? 0 : cursorOrDate instanceof Date ? cursorOrDate.getTime() : undefined; - return this.db.api.getMutations({ path: this.path, cursor, timestamp }); - } - async getChanges(cursorOrDate) { - const cursor = typeof cursorOrDate === 'string' ? cursorOrDate : undefined; - const timestamp = cursorOrDate === null || typeof cursorOrDate === 'undefined' ? 0 : cursorOrDate instanceof Date ? cursorOrDate.getTime() : undefined; - return this.db.api.getChanges({ path: this.path, cursor, timestamp }); - } -} -exports.DataReference = DataReference; -class DataReferenceQuery { - /** - * Creates a query on a reference - */ - constructor(ref) { - this.ref = ref; - this[_private] = { - filters: [], - skip: 0, - take: 0, - order: [], - events: {}, - }; - } - /** - * Applies a filter to the children of the refence being queried. - * If there is an index on the property key being queried, it will be used - * to speed up the query - * @param key property to test value of - * @param op operator to use - * @param compare value to compare with - */ - filter(key, op, compare) { - if ((op === 'in' || op === '!in') && (!(compare instanceof Array) || compare.length === 0)) { - throw new Error(`${op} filter for ${key} must supply an Array compare argument containing at least 1 value`); - } - if ((op === 'between' || op === '!between') && (!(compare instanceof Array) || compare.length !== 2)) { - throw new Error(`${op} filter for ${key} must supply an Array compare argument containing 2 values`); - } - if ((op === 'matches' || op === '!matches') && !(compare instanceof RegExp)) { - throw new Error(`${op} filter for ${key} must supply a RegExp compare argument`); - } - // DISABLED 2019/10/23 because it is not fully implemented only works locally - // if (op === "custom" && typeof compare !== "function") { - // throw `${op} filter for ${key} must supply a Function compare argument`; - // } - // DISABLED 2022/08/15, implemented by query.ts in acebase - // if ((op === 'contains' || op === '!contains') && ((typeof compare === 'object' && !(compare instanceof Array) && !(compare instanceof Date)) || (compare instanceof Array && compare.length === 0))) { - // throw new Error(`${op} filter for ${key} must supply a simple value or (non-zero length) array compare argument`); - // } - this[_private].filters.push({ key, op, compare }); - return this; - } - /** - * @deprecated use `.filter` instead - */ - where(key, op, compare) { - return this.filter(key, op, compare); - } - /** - * Limits the number of query results - */ - take(n) { - this[_private].take = n; - return this; - } - /** - * Skips the first n query results - */ - skip(n) { - this[_private].skip = n; - return this; - } - sort(key, ascending = true) { - if (!['string', 'number'].includes(typeof key)) { - throw 'key must be a string or number'; - } - this[_private].order.push({ key, ascending }); - return this; - } - /** - * @deprecated use `.sort` instead - */ - order(key, ascending = true) { - return this.sort(key, ascending); - } - get(optionsOrCallback, callback) { - if (!this.ref.db.isReady) { - const promise = this.ref.db.ready().then(() => this.get(optionsOrCallback, callback)); - return typeof optionsOrCallback !== 'function' && typeof callback !== 'function' ? promise : undefined; // only return promise if no callback is used - } - callback = - typeof optionsOrCallback === 'function' - ? optionsOrCallback - : typeof callback === 'function' - ? callback - : undefined; - const options = new QueryDataRetrievalOptions(typeof optionsOrCallback === 'object' ? optionsOrCallback : { snapshots: true, cache_mode: 'allow' }); - options.allow_cache = options.cache_mode !== 'bypass'; // Backward compatibility when using older acebase-client - options.eventHandler = ev => { - // TODO: implement context for query events - if (!this[_private].events[ev.name]) { - return false; - } - const listeners = this[_private].events[ev.name]; - if (typeof listeners !== 'object' || listeners.length === 0) { - return false; - } - if (['add', 'change', 'remove'].includes(ev.name)) { - const ref = new DataReference(this.ref.db, ev.path); - const eventData = { name: ev.name }; - if (options.snapshots && ev.name !== 'remove') { - const val = db.types.deserialize(ev.path, ev.value); - eventData.snapshot = new data_snapshot_1.DataSnapshot(ref, val, false); - } - else { - eventData.ref = ref; - } - ev = eventData; - } - listeners.forEach(callback => { try { - callback(ev); - } - catch (e) { } }); - }; - // Check if there are event listeners set for realtime changes - options.monitor = { add: false, change: false, remove: false }; - if (this[_private].events) { - if (this[_private].events['add'] && this[_private].events['add'].length > 0) { - options.monitor.add = true; - } - if (this[_private].events['change'] && this[_private].events['change'].length > 0) { - options.monitor.change = true; - } - if (this[_private].events['remove'] && this[_private].events['remove'].length > 0) { - options.monitor.remove = true; - } - } - // Stop realtime results if they are still enabled on a previous .get on this instance - this.stop(); - // NOTE: returning promise here, regardless of callback argument. Good argument to refactor method to async/await soon - const db = this.ref.db; - return db.api.query(this.ref.path, this[_private], options) - .catch(err => { - throw new Error(err); - }) - .then(res => { - const { stop } = res; - let { results, context } = res; - this.stop = async () => { - await stop(); - }; - if (!('results' in res && 'context' in res)) { - console.warn('Query results missing context. Update your acebase and/or acebase-client packages'); - results = res, context = {}; - } - if (options.snapshots) { - const snaps = results.map(result => { - const val = db.types.deserialize(result.path, result.val); - return new data_snapshot_1.DataSnapshot(db.ref(result.path), val, false, undefined, context); - }); - return DataSnapshotsArray.from(snaps); - } - else { - const refs = results.map(path => db.ref(path)); - return DataReferencesArray.from(refs); - } - }) - .then(results => { - callback && callback(results); - return results; - }); - } - /** - * Stops a realtime query, no more notifications will be received. - */ - async stop() { - // Overridden by .get - } - /** - * Executes the query and returns references. Short for `.get({ snapshots: false })` - * @param callback callback to use instead of returning a promise - * @returns returns an Promise that resolves with an array of DataReferences, or void when using a callback - * @deprecated Use `find` instead - */ - getRefs(callback) { - return this.get({ snapshots: false }, callback); - } - /** - * Executes the query and returns an array of references. Short for `.get({ snapshots: false })` - */ - find() { - return this.get({ snapshots: false }); - } - /** - * Executes the query and returns the number of results - */ - async count() { - const refs = await this.find(); - return refs.length; - } - /** - * Executes the query and returns if there are any results - */ - async exists() { - const originalTake = this[_private].take; - const p = this.take(1).find(); - this.take(originalTake); - const refs = await p; - return refs.length !== 0; - } - /** - * Executes the query, removes all matches from the database - * @returns returns a Promise that resolves once all matches have been removed - */ - async remove(callback) { - const refs = await this.find(); - // Perform updates on each distinct parent collection (only 1 parent if this is not a wildcard path) - const parentUpdates = refs.reduce((parents, ref) => { - const parent = parents[ref.parent.path]; - if (!parent) { - parents[ref.parent.path] = [ref]; - } - else { - parent.push(ref); - } - return parents; - }, {}); - const db = this.ref.db; - const promises = Object.keys(parentUpdates).map(async (parentPath) => { - const updates = refs.reduce((updates, ref) => { - updates[ref.key] = null; - return updates; - }, {}); - const ref = db.ref(parentPath); - try { - await ref.update(updates); - return { ref, success: true }; - } - catch (error) { - return { ref, success: false, error }; - } - }); - const results = await Promise.all(promises); - callback && callback(results); - return results; - } - on(event, callback) { - if (!this[_private].events[event]) { - this[_private].events[event] = []; - } - this[_private].events[event].push(callback); - return this; - } - /** - * Unsubscribes from (a) previously added event(s) - * @param event Name of the event - * @param callback callback function to remove - * @returns returns reference to this query - */ - off(event, callback) { - if (typeof event === 'undefined') { - this[_private].events = {}; - return this; - } - if (!this[_private].events[event]) { - return this; - } - if (typeof callback === 'undefined') { - delete this[_private].events[event]; - return this; - } - const index = this[_private].events[event].indexOf(callback); - if (!~index) { - return this; - } - this[_private].events[event].splice(index, 1); - return this; - } - async forEach(callbackOrOptions, callback) { - let options; - if (typeof callbackOrOptions === 'function') { - callback = callbackOrOptions; - } - else { - options = callbackOrOptions; - } - if (typeof callback !== 'function') { - throw new TypeError('No callback function given'); - } - // Get all query results. This could be tweaked further using paging - const refs = await this.find(); - const summary = { - canceled: false, - total: refs.length, - processed: 0, - }; - // Iterate through all children until callback returns false - for (let i = 0; i < refs.length; i++) { - const ref = refs[i]; - // Get child data - const snapshot = await ref.get(options); - summary.processed++; - if (!snapshot.exists()) { - // Was removed in the meantime, skip - continue; - } - // Run callback - const result = await callback(snapshot); - if (result === false) { - summary.canceled = true; - break; // Stop looping - } - } - return summary; - } -} -exports.DataReferenceQuery = DataReferenceQuery; -class DataSnapshotsArray extends Array { - static from(snaps) { - const arr = new DataSnapshotsArray(snaps.length); - snaps.forEach((snap, i) => arr[i] = snap); - return arr; - } - getValues() { - return this.map(snap => snap.val()); - } -} -exports.DataSnapshotsArray = DataSnapshotsArray; -class DataReferencesArray extends Array { - static from(refs) { - const arr = new DataReferencesArray(refs.length); - refs.forEach((ref, i) => arr[i] = ref); - return arr; - } - getPaths() { - return this.map(ref => ref.path); - } -} -exports.DataReferencesArray = DataReferencesArray; - -},{"./data-proxy":7,"./data-snapshot":9,"./id":11,"./optional-observable":14,"./path-info":16,"./subscription":23}],9:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MutationsDataSnapshot = exports.DataSnapshot = void 0; -const path_info_1 = require("./path-info"); -function getChild(snapshot, path, previous = false) { - if (!snapshot.exists()) { - return null; - } - let child = previous ? snapshot.previous() : snapshot.val(); - if (typeof path === 'number') { - return child[path]; - } - path_info_1.PathInfo.getPathKeys(path).every(key => { - child = child[key]; - return typeof child !== 'undefined'; - }); - return child || null; -} -function getChildren(snapshot) { - if (!snapshot.exists()) { - return []; - } - const value = snapshot.val(); - if (value instanceof Array) { - return new Array(value.length).map((v, i) => i); - } - if (typeof value === 'object') { - return Object.keys(value); - } - return []; -} -class DataSnapshot { - /** - * Creates a new DataSnapshot instance - */ - constructor(ref, value, isRemoved = false, prevValue, context) { - this.ref = ref; - this.val = () => { return value; }; - this.previous = () => { return prevValue; }; - this.exists = () => { - if (isRemoved) { - return false; - } - return value !== null && typeof value !== 'undefined'; - }; - this.context = () => { return context || {}; }; - } - /** - * Indicates whether the node exists in the database - */ - exists() { return false; } - /** - * Creates a `DataSnapshot` instance - * @internal (for internal use) - */ - static for(ref, value) { - return new DataSnapshot(ref, value); - } - /** - * Gets a new snapshot for a child node - * @param path child key or path - * @returns Returns a `DataSnapshot` of the child - */ - child(path) { - // Create new snapshot for child data - const val = getChild(this, path, false); - const prev = getChild(this, path, true); - return new DataSnapshot(this.ref.child(path), val, false, prev); - } - /** - * Checks if the snapshot's value has a child with the given key or path - * @param path child key or path - */ - hasChild(path) { - return getChild(this, path) !== null; - } - /** - * Indicates whether the the snapshot's value has any child nodes - */ - hasChildren() { - return getChildren(this).length > 0; - } - /** - * The number of child nodes in this snapshot - */ - numChildren() { - return getChildren(this).length; - } - /** - * Runs a callback function for each child node in this snapshot until the callback returns false - * @param callback function that is called with a snapshot of each child node in this snapshot. - * Must return a boolean value that indicates whether to continue iterating or not. - */ - forEach(callback) { - const value = this.val(); - const prev = this.previous(); - return getChildren(this).every((key) => { - const snap = new DataSnapshot(this.ref.child(key), value[key], false, prev[key]); - return callback(snap); - }); - } - /** - * The key of the node's path - */ - get key() { return this.ref.key; } -} -exports.DataSnapshot = DataSnapshot; -class MutationsDataSnapshot extends DataSnapshot { - constructor(ref, mutations, context) { - super(ref, mutations, false, undefined, context); - /** - * Don't use this to get previous values of mutated nodes. - * Use `.previous` properties on the individual child snapshots instead. - * @throws Throws an error if you do use it. - */ - this.previous = () => { throw new Error('Iterate values to get previous values for each mutation'); }; - this.val = (warn = true) => { - if (warn) { - console.warn('Unless you know what you are doing, it is best not to use the value of a mutations snapshot directly. Use child methods and forEach to iterate the mutations instead'); - } - return mutations; - }; - } - /** - * Runs a callback function for each mutation in this snapshot until the callback returns false - * @param callback function that is called with a snapshot of each mutation in this snapshot. Must return a boolean value that indicates whether to continue iterating or not. - * @returns Returns whether every child was interated - */ - forEach(callback) { - const mutations = this.val(); - return mutations.every(mutation => { - const ref = mutation.target.reduce((ref, key) => ref.child(key), this.ref); - const snap = new DataSnapshot(ref, mutation.val, false, mutation.prev); - return callback(snap); - }); - } - /** - * Gets a snapshot of a mutated node - * @param index index of the mutation - * @returns Returns a DataSnapshot of the mutated node - */ - child(index) { - if (typeof index !== 'number') { - throw new Error('child index must be a number'); - } - const mutation = this.val()[index]; - const ref = mutation.target.reduce((ref, key) => ref.child(key), this.ref); - return new DataSnapshot(ref, mutation.val, false, mutation.prev); - } -} -exports.MutationsDataSnapshot = MutationsDataSnapshot; - -},{"./path-info":16}],10:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DebugLogger = void 0; -const process_1 = require("./process"); -// eslint-disable-next-line @typescript-eslint/no-empty-function -const noop = () => { }; -class DebugLogger { - constructor(level = 'log', prefix = '') { - this.level = level; - this.prefix = prefix; - this.setLevel(level); - } - setLevel(level) { - const prefix = this.prefix ? this.prefix + ' %s' : ''; - this.verbose = ['verbose'].includes(level) ? prefix ? console.log.bind(console, prefix) : console.log.bind(console) : noop; - this.log = ['verbose', 'log'].includes(level) ? prefix ? console.log.bind(console, prefix) : console.log.bind(console) : noop; - this.warn = ['verbose', 'log', 'warn'].includes(level) ? prefix ? console.warn.bind(console, prefix) : console.warn.bind(console) : noop; - this.error = ['verbose', 'log', 'warn', 'error'].includes(level) ? prefix ? console.error.bind(console, prefix) : console.error.bind(console) : noop; - this.write = (text) => { - const isRunKit = typeof process_1.default !== 'undefined' && process_1.default.env && typeof process_1.default.env.RUNKIT_ENDPOINT_PATH === 'string'; - if (text && isRunKit) { - text.split('\n').forEach(line => console.log(line)); // Logs each line separately - } - else { - console.log(text); - } - }; - } -} -exports.DebugLogger = DebugLogger; - -},{"./process":18}],11:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ID = void 0; -const cuid_1 = require("./cuid"); -// const uuid62 = require('uuid62'); -let timeBias = 0; -class ID { - /** - * (for internal use) - * bias in milliseconds to adjust generated cuid timestamps with - */ - static set timeBias(bias) { - if (typeof bias !== 'number') { - return; - } - timeBias = bias; - } - static generate() { - // Could also use https://www.npmjs.com/package/pushid for Firebase style 20 char id's - return (0, cuid_1.default)(timeBias).slice(1); // Cuts off the always leading 'c' - // return uuid62.v1(); - } -} -exports.ID = ID; - -},{"./cuid":5}],12:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ObjectCollection = exports.PartialArray = exports.SchemaDefinition = exports.Colorize = exports.ColorStyle = exports.SimpleEventEmitter = exports.SimpleCache = exports.ascii85 = exports.PathInfo = exports.Utils = exports.TypeMappings = exports.Transport = exports.EventSubscription = exports.EventPublisher = exports.EventStream = exports.PathReference = exports.ID = exports.DebugLogger = exports.OrderedCollectionProxy = exports.proxyAccess = exports.MutationsDataSnapshot = exports.DataSnapshot = exports.DataReferencesArray = exports.DataSnapshotsArray = exports.QueryDataRetrievalOptions = exports.DataRetrievalOptions = exports.DataReferenceQuery = exports.DataReference = exports.Api = exports.AceBaseBaseSettings = exports.AceBaseBase = void 0; -var acebase_base_1 = require("./acebase-base"); -Object.defineProperty(exports, "AceBaseBase", { enumerable: true, get: function () { return acebase_base_1.AceBaseBase; } }); -Object.defineProperty(exports, "AceBaseBaseSettings", { enumerable: true, get: function () { return acebase_base_1.AceBaseBaseSettings; } }); -var api_1 = require("./api"); -Object.defineProperty(exports, "Api", { enumerable: true, get: function () { return api_1.Api; } }); -var data_reference_1 = require("./data-reference"); -Object.defineProperty(exports, "DataReference", { enumerable: true, get: function () { return data_reference_1.DataReference; } }); -Object.defineProperty(exports, "DataReferenceQuery", { enumerable: true, get: function () { return data_reference_1.DataReferenceQuery; } }); -Object.defineProperty(exports, "DataRetrievalOptions", { enumerable: true, get: function () { return data_reference_1.DataRetrievalOptions; } }); -Object.defineProperty(exports, "QueryDataRetrievalOptions", { enumerable: true, get: function () { return data_reference_1.QueryDataRetrievalOptions; } }); -Object.defineProperty(exports, "DataSnapshotsArray", { enumerable: true, get: function () { return data_reference_1.DataSnapshotsArray; } }); -Object.defineProperty(exports, "DataReferencesArray", { enumerable: true, get: function () { return data_reference_1.DataReferencesArray; } }); -var data_snapshot_1 = require("./data-snapshot"); -Object.defineProperty(exports, "DataSnapshot", { enumerable: true, get: function () { return data_snapshot_1.DataSnapshot; } }); -Object.defineProperty(exports, "MutationsDataSnapshot", { enumerable: true, get: function () { return data_snapshot_1.MutationsDataSnapshot; } }); -var data_proxy_1 = require("./data-proxy"); -Object.defineProperty(exports, "proxyAccess", { enumerable: true, get: function () { return data_proxy_1.proxyAccess; } }); -Object.defineProperty(exports, "OrderedCollectionProxy", { enumerable: true, get: function () { return data_proxy_1.OrderedCollectionProxy; } }); -var debug_1 = require("./debug"); -Object.defineProperty(exports, "DebugLogger", { enumerable: true, get: function () { return debug_1.DebugLogger; } }); -var id_1 = require("./id"); -Object.defineProperty(exports, "ID", { enumerable: true, get: function () { return id_1.ID; } }); -var path_reference_1 = require("./path-reference"); -Object.defineProperty(exports, "PathReference", { enumerable: true, get: function () { return path_reference_1.PathReference; } }); -var subscription_1 = require("./subscription"); -Object.defineProperty(exports, "EventStream", { enumerable: true, get: function () { return subscription_1.EventStream; } }); -Object.defineProperty(exports, "EventPublisher", { enumerable: true, get: function () { return subscription_1.EventPublisher; } }); -Object.defineProperty(exports, "EventSubscription", { enumerable: true, get: function () { return subscription_1.EventSubscription; } }); -exports.Transport = require("./transport"); -var type_mappings_1 = require("./type-mappings"); -Object.defineProperty(exports, "TypeMappings", { enumerable: true, get: function () { return type_mappings_1.TypeMappings; } }); -exports.Utils = require("./utils"); -var path_info_1 = require("./path-info"); -Object.defineProperty(exports, "PathInfo", { enumerable: true, get: function () { return path_info_1.PathInfo; } }); -var ascii85_1 = require("./ascii85"); -Object.defineProperty(exports, "ascii85", { enumerable: true, get: function () { return ascii85_1.ascii85; } }); -var simple_cache_1 = require("./simple-cache"); -Object.defineProperty(exports, "SimpleCache", { enumerable: true, get: function () { return simple_cache_1.SimpleCache; } }); -var simple_event_emitter_1 = require("./simple-event-emitter"); -Object.defineProperty(exports, "SimpleEventEmitter", { enumerable: true, get: function () { return simple_event_emitter_1.SimpleEventEmitter; } }); -var simple_colors_1 = require("./simple-colors"); -Object.defineProperty(exports, "ColorStyle", { enumerable: true, get: function () { return simple_colors_1.ColorStyle; } }); -Object.defineProperty(exports, "Colorize", { enumerable: true, get: function () { return simple_colors_1.Colorize; } }); -var schema_1 = require("./schema"); -Object.defineProperty(exports, "SchemaDefinition", { enumerable: true, get: function () { return schema_1.SchemaDefinition; } }); -var partial_array_1 = require("./partial-array"); -Object.defineProperty(exports, "PartialArray", { enumerable: true, get: function () { return partial_array_1.PartialArray; } }); -const object_collection_1 = require("./object-collection"); -Object.defineProperty(exports, "ObjectCollection", { enumerable: true, get: function () { return object_collection_1.ObjectCollection; } }); - -},{"./acebase-base":1,"./api":2,"./ascii85":3,"./data-proxy":7,"./data-reference":8,"./data-snapshot":9,"./debug":10,"./id":11,"./object-collection":13,"./partial-array":15,"./path-info":16,"./path-reference":17,"./schema":19,"./simple-cache":20,"./simple-colors":21,"./simple-event-emitter":22,"./subscription":23,"./transport":24,"./type-mappings":25,"./utils":26}],13:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ObjectCollection = void 0; -const id_1 = require("./id"); -/** - * Convenience interface for defining an object collection - * @example - * type ChatMessage = { - * text: string, uid: string, sent: Date - * } - * type Chat = { - * title: text - * messages: ObjectCollection - * } - */ -class ObjectCollection { - /** - * Converts and array of values into an object collection, generating a unique key for each item in the array - * @param array - * @example - * const array = [ - * { title: "Don't make me think!", author: "Steve Krug" }, - * { title: "The tipping point", author: "Malcolm Gladwell" } - * ]; - * - * // Convert: - * const collection = ObjectCollection.from(array); - * // --> { - * // kh1x3ygb000120r7ipw6biln: { - * // title: "Don't make me think!", - * // author: "Steve Krug" - * // }, - * // kh1x3ygb000220r757ybpyec: { - * // title: "The tipping point", - * // author: "Malcolm Gladwell" - * // } - * // } - * - * // Now it's easy to add them to the db: - * db.ref('books').update(collection); - */ - static from(array) { - const collection = {}; - array.forEach(child => { - collection[id_1.ID.generate()] = child; - }); - return collection; - } -} -exports.ObjectCollection = ObjectCollection; - -},{"./id":11}],14:[function(require,module,exports){ -"use strict"; -// Optional dependency on rxjs package. If rxjs is installed into your project, you'll get the correct -// typings for AceBase methods that use Observables, and you'll be able to use them. If you don't use -// those methods, there is no need to install rxjs. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ObservableShim = exports.setObservable = exports.getObservable = void 0; -let _observable; -function getObservable() { - if (_observable) { - return _observable; - } - if (typeof window !== 'undefined' && window.Observable) { - _observable = window.Observable; - return _observable; - } - try { - // eslint-disable-next-line @typescript-eslint/no-var-requires - const { Observable } = require('rxjs'); // fails in ESM module, need an elegant way to handle this. Can't use dynamic import() because it 1) requires Node 12+ and 2) causes Webpack build to fail if rxjs is not installed - if (!Observable) { - throw new Error('not loaded'); - } - _observable = Observable; - return Observable; - } - catch (err) { - throw new Error('RxJS Observable could not be loaded. If you are using a browser build, add it to AceBase using db.setObservable. For node.js builds, add it to your project with: npm i rxjs'); - } -} -exports.getObservable = getObservable; -function setObservable(Observable) { - if (Observable === 'shim') { - console.warn('Using AceBase\'s simple Observable shim. Only use this if you know what you\'re doing.'); - Observable = ObservableShim; - } - _observable = Observable; -} -exports.setObservable = setObservable; -/** - * rxjs is an optional dependency that only needs installing when any of AceBase's observe methods are used. - * If for some reason rxjs is not available (eg in test suite), we can provide a shim. This class is used when - * `db.setObservable("shim")` is called - */ -class ObservableShim { - constructor(create) { - this._active = false; - this._subscribers = []; - this._create = create; - } - subscribe(subscriber) { - if (!this._active) { - const next = (value) => { - // emit value to all subscribers - this._subscribers.forEach(s => { - try { - s(value); - } - catch (err) { - console.error('Error in subscriber callback:', err); - } - }); - }; - const observer = { next }; - this._cleanup = this._create(observer); - this._active = true; - } - this._subscribers.push(subscriber); - const unsubscribe = () => { - this._subscribers.splice(this._subscribers.indexOf(subscriber), 1); - if (this._subscribers.length === 0) { - this._active = false; - this._cleanup(); - } - }; - const subscription = { - unsubscribe, - }; - return subscription; - } -} -exports.ObservableShim = ObservableShim; - -},{"rxjs":27}],15:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PartialArray = void 0; -/** - * Sparse/partial array converted to a serializable object. Use `Object.keys(sparseArray)` and `Object.values(sparseArray)` to iterate its indice and/or values - */ -class PartialArray { - constructor(sparseArray) { - if (sparseArray instanceof Array) { - for (let i = 0; i < sparseArray.length; i++) { - if (typeof sparseArray[i] !== 'undefined') { - this[i] = sparseArray[i]; - } - } - } - else if (sparseArray) { - Object.assign(this, sparseArray); - } - } -} -exports.PartialArray = PartialArray; - -},{}],16:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PathInfo = void 0; -function getPathKeys(path) { - path = path.replace(/\[/g, '/[').replace(/^\/+/, '').replace(/\/+$/, ''); // Replace [ with /[, remove leading slashes, remove trailing slashes - if (path.length === 0) { - return []; - } - const keys = path.split('/'); - return keys.map(key => { - return key.startsWith('[') ? parseInt(key.slice(1, -1)) : key; - }); -} -class PathInfo { - constructor(path) { - if (typeof path === 'string') { - this.keys = getPathKeys(path); - } - else if (path instanceof Array) { - this.keys = path; - } - this.path = this.keys.reduce((path, key, i) => i === 0 ? `${key}` : typeof key === 'string' ? `${path}/${key}` : `${path}[${key}]`, ''); - } - static get(path) { - return new PathInfo(path); - } - static getChildPath(path, childKey) { - // return getChildPath(path, childKey); - return PathInfo.get(path).child(childKey).path; - } - static getPathKeys(path) { - return getPathKeys(path); - } - get key() { - return this.keys.length === 0 ? null : this.keys.slice(-1)[0]; - } - get parent() { - if (this.keys.length == 0) { - return null; - } - const parentKeys = this.keys.slice(0, -1); - return new PathInfo(parentKeys); - } - get parentPath() { - return this.keys.length === 0 ? null : this.parent.path; - } - child(childKey) { - if (typeof childKey === 'string') { - childKey = getPathKeys(childKey); - } - return new PathInfo(this.keys.concat(childKey)); - } - childPath(childKey) { - return this.child(childKey).path; - } - get pathKeys() { - return this.keys; - } - /** - * If varPath contains variables or wildcards, it will return them with the values found in fullPath - * @param {string} varPath path containing variables such as * and $name - * @param {string} fullPath real path to a node - * @returns {{ [index: number]: string|number, [variable: string]: string|number }} returns an array-like object with all variable values. All named variables are also set on the array by their name (eg vars.uid and vars.$uid) - * @example - * PathInfo.extractVariables('users/$uid/posts/$postid', 'users/ewout/posts/post1/title') === { - * 0: 'ewout', - * 1: 'post1', - * uid: 'ewout', // or $uid - * postid: 'post1' // or $postid - * }; - * - * PathInfo.extractVariables('users/*\/posts/*\/$property', 'users/ewout/posts/post1/title') === { - * 0: 'ewout', - * 1: 'post1', - * 2: 'title', - * property: 'title' // or $property - * }; - * - * PathInfo.extractVariables('users/$user/friends[*]/$friend', 'users/dora/friends[4]/diego') === { - * 0: 'dora', - * 1: 4, - * 2: 'diego', - * user: 'dora', // or $user - * friend: 'diego' // or $friend - * }; - */ - static extractVariables(varPath, fullPath) { - if (!varPath.includes('*') && !varPath.includes('$')) { - return []; - } - // if (!this.equals(fullPath)) { - // throw new Error(`path does not match with the path of this PathInfo instance: info.equals(path) === false!`) - // } - const keys = getPathKeys(varPath); - const pathKeys = getPathKeys(fullPath); - let count = 0; - const variables = { - get length() { return count; }, - }; - keys.forEach((key, index) => { - const pathKey = pathKeys[index]; - if (key === '*') { - variables[count++] = pathKey; - } - else if (typeof key === 'string' && key[0] === '$') { - variables[count++] = pathKey; - // Set the $variable property - variables[key] = pathKey; - // Set friendly property name (without $) - const varName = key.slice(1); - if (typeof variables[varName] === 'undefined') { - variables[varName] = pathKey; - } - } - }); - return variables; - } - /** - * If varPath contains variables or wildcards, it will return a path with the variables replaced by the keys found in fullPath. - * @example - * PathInfo.fillVariables('users/$uid/posts/$postid', 'users/ewout/posts/post1/title') === 'users/ewout/posts/post1' - */ - static fillVariables(varPath, fullPath) { - if (varPath.indexOf('*') < 0 && varPath.indexOf('$') < 0) { - return varPath; - } - const keys = getPathKeys(varPath); - const pathKeys = getPathKeys(fullPath); - const merged = keys.map((key, index) => { - if (key === pathKeys[index] || index >= pathKeys.length) { - return key; - } - else if (typeof key === 'string' && (key === '*' || key[0] === '$')) { - return pathKeys[index]; - } - else { - throw new Error(`Path "${fullPath}" cannot be used to fill variables of path "${varPath}" because they do not match`); - } - }); - let mergedPath = ''; - merged.forEach(key => { - if (typeof key === 'number') { - mergedPath += `[${key}]`; - } - else { - if (mergedPath.length > 0) { - mergedPath += '/'; - } - mergedPath += key; - } - }); - return mergedPath; - } - /** - * Replaces all variables in a path with the values in the vars argument - * @param varPath path containing variables - * @param vars variables object such as one gotten from PathInfo.extractVariables - */ - static fillVariables2(varPath, vars) { - if (typeof vars !== 'object' || Object.keys(vars).length === 0) { - return varPath; // Nothing to fill - } - const pathKeys = getPathKeys(varPath); - let n = 0; - const targetPath = pathKeys.reduce((path, key) => { - if (typeof key === 'string' && (key === '*' || key.startsWith('$'))) { - return PathInfo.getChildPath(path, vars[n++]); - } - else { - return PathInfo.getChildPath(path, key); - } - }, ''); - return targetPath; - } - /** - * Checks if a given path matches this path, eg "posts/*\/title" matches "posts/12344/title" and "users/123/name" matches "users/$uid/name" - */ - equals(otherPath) { - const other = otherPath instanceof PathInfo ? otherPath : new PathInfo(otherPath); - if (this.path === other.path) { - return true; - } // they are identical - if (this.keys.length !== other.keys.length) { - return false; - } - return this.keys.every((key, index) => { - const otherKey = other.keys[index]; - return otherKey === key - || (typeof otherKey === 'string' && (otherKey === '*' || otherKey[0] === '$')) - || (typeof key === 'string' && (key === '*' || key[0] === '$')); - }); - } - /** - * Checks if a given path is an ancestor, eg "posts" is an ancestor of "posts/12344/title" - */ - isAncestorOf(descendantPath) { - const descendant = descendantPath instanceof PathInfo ? descendantPath : new PathInfo(descendantPath); - if (descendant.path === '' || this.path === descendant.path) { - return false; - } - if (this.path === '') { - return true; - } - if (this.keys.length >= descendant.keys.length) { - return false; - } - return this.keys.every((key, index) => { - const otherKey = descendant.keys[index]; - return otherKey === key - || (typeof otherKey === 'string' && (otherKey === '*' || otherKey[0] === '$')) - || (typeof key === 'string' && (key === '*' || key[0] === '$')); - }); - } - /** - * Checks if a given path is a descendant, eg "posts/1234/title" is a descendant of "posts" - */ - isDescendantOf(ancestorPath) { - const ancestor = ancestorPath instanceof PathInfo ? ancestorPath : new PathInfo(ancestorPath); - if (this.path === '' || this.path === ancestor.path) { - return false; - } - if (ancestorPath === '') { - return true; - } - if (ancestor.keys.length >= this.keys.length) { - return false; - } - return ancestor.keys.every((key, index) => { - const otherKey = this.keys[index]; - return otherKey === key - || (typeof otherKey === 'string' && (otherKey === '*' || otherKey[0] === '$')) - || (typeof key === 'string' && (key === '*' || key[0] === '$')); - }); - } - /** - * Checks if the other path is on the same trail as this path. Paths on the same trail if they share a - * common ancestor. Eg: "posts" is on the trail of "posts/1234/title" and vice versa. - */ - isOnTrailOf(otherPath) { - const other = otherPath instanceof PathInfo ? otherPath : new PathInfo(otherPath); - if (this.path.length === 0 || other.path.length === 0) { - return true; - } - if (this.path === other.path) { - return true; - } - return this.pathKeys.every((key, index) => { - if (index >= other.keys.length) { - return true; - } - const otherKey = other.keys[index]; - return otherKey === key - || (typeof otherKey === 'string' && (otherKey === '*' || otherKey[0] === '$')) - || (typeof key === 'string' && (key === '*' || key[0] === '$')); - }); - } - /** - * Checks if a given path is a direct child, eg "posts/1234/title" is a child of "posts/1234" - */ - isChildOf(otherPath) { - const other = otherPath instanceof PathInfo ? otherPath : new PathInfo(otherPath); - if (this.path === '') { - return false; - } // If our path is the root, it's nobody's child... - return this.parent.equals(other); - } - /** - * Checks if a given path is its parent, eg "posts/1234" is the parent of "posts/1234/title" - */ - isParentOf(otherPath) { - const other = otherPath instanceof PathInfo ? otherPath : new PathInfo(otherPath); - if (other.path === '') { - return false; - } // If the other path is the root, this path cannot be its parent - return this.equals(other.parent); - } -} -exports.PathInfo = PathInfo; - -},{}],17:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PathReference = void 0; -class PathReference { - /** - * Creates a reference to a path that can be stored in the database. Use this to create cross-references to other data in your database - * @param path - */ - constructor(path) { - this.path = path; - } -} -exports.PathReference = PathReference; - -},{}],18:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = { - // eslint-disable-next-line @typescript-eslint/ban-types - nextTick(fn) { - setTimeout(fn, 0); - }, -}; - -},{}],19:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SchemaDefinition = void 0; -// parses a typestring, creates checker functions -function parse(definition) { - // tokenize - let pos = 0; - function consumeSpaces() { - let c; - while (c = definition[pos], [' ', '\r', '\n', '\t'].includes(c)) { - pos++; - } - } - function consumeCharacter(c) { - if (definition[pos] !== c) { - throw new Error(`Unexpected character at position ${pos}. Expected: '${c}', found '${definition[pos]}'`); - } - pos++; - } - function readProperty() { - consumeSpaces(); - const prop = { name: '', optional: false, wildcard: false }; - let c; - while (c = definition[pos], c === '_' || c === '$' || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (prop.name.length > 0 && c >= '0' && c <= '9') || (prop.name.length === 0 && c === '*')) { - prop.name += c; - pos++; - } - if (prop.name.length === 0) { - throw new Error(`Property name expected at position ${pos}, found: ${definition.slice(pos, pos + 10)}..`); - } - if (definition[pos] === '?') { - prop.optional = true; - pos++; - } - if (prop.name === '*' || prop.name[0] === '$') { - prop.optional = true; - prop.wildcard = true; - } - consumeSpaces(); - consumeCharacter(':'); - return prop; - } - function readType() { - consumeSpaces(); - let type = { typeOf: 'any' }, c; - // try reading simple type first: (string,number,boolean,Date etc) - let name = ''; - while (c = definition[pos], (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { - name += c; - pos++; - } - if (name.length === 0) { - if (definition[pos] === '*') { - // any value - consumeCharacter('*'); - type.typeOf = 'any'; - } - else if (['\'', '"', '`'].includes(definition[pos])) { - // Read string value - type.typeOf = 'string'; - type.value = ''; - const quote = definition[pos]; - consumeCharacter(quote); - while (c = definition[pos], c && c !== quote) { - type.value += c; - pos++; - } - consumeCharacter(quote); - } - else if (definition[pos] >= '0' && definition[pos] <= '9') { - // read numeric value - type.typeOf = 'number'; - let nr = ''; - while (c = definition[pos], c === '.' || c === 'n' || (c >= '0' && c <= '9')) { - nr += c; - pos++; - } - if (nr.endsWith('n')) { - type.value = BigInt(nr); - } - else if (nr.includes('.')) { - type.value = parseFloat(nr); - } - else { - type.value = parseInt(nr); - } - } - else if (definition[pos] === '{') { - // Read object (interface) definition - consumeCharacter('{'); - type.typeOf = 'object'; - type.instanceOf = Object; - // Read children: - type.children = []; - while (true) { - const prop = readProperty(); - const types = readTypes(); - type.children.push({ name: prop.name, optional: prop.optional, wildcard: prop.wildcard, types }); - consumeSpaces(); - if (definition[pos] === '}') { - break; - } - consumeCharacter(','); - } - consumeCharacter('}'); - } - else if (definition[pos] === '/') { - // Read regular expression definition - consumeCharacter('/'); - let pattern = '', flags = ''; - while (c = definition[pos], c !== '/' || pattern.endsWith('\\')) { - pattern += c; - pos++; - } - consumeCharacter('/'); - while (c = definition[pos], ['g', 'i', 'm', 's', 'u', 'y', 'd'].includes(c)) { - flags += c; - pos++; - } - type.typeOf = 'string'; - type.matches = new RegExp(pattern, flags); - } - else { - throw new Error(`Expected a type definition at position ${pos}, found character '${definition[pos]}'`); - } - } - else if (['string', 'number', 'boolean', 'bigint', 'undefined', 'String', 'Number', 'Boolean', 'BigInt'].includes(name)) { - type.typeOf = name.toLowerCase(); - } - else if (name === 'Object' || name === 'object') { - type.typeOf = 'object'; - type.instanceOf = Object; - } - else if (name === 'Date') { - type.typeOf = 'object'; - type.instanceOf = Date; - } - else if (name === 'Binary' || name === 'binary') { - type.typeOf = 'object'; - type.instanceOf = ArrayBuffer; - } - else if (name === 'any') { - type.typeOf = 'any'; - } - else if (name === 'null') { - // This is ignored, null values are not stored in the db (null indicates deletion) - type.typeOf = 'object'; - type.value = null; - } - else if (name === 'Array') { - // Read generic Array defintion - consumeCharacter('<'); - type.typeOf = 'object'; - type.instanceOf = Array; //name; - type.genericTypes = readTypes(); - consumeCharacter('>'); - } - else if (['true', 'false'].includes(name)) { - type.typeOf = 'boolean'; - type.value = name === 'true'; - } - else { - throw new Error(`Unknown type at position ${pos}: "${type}"`); - } - // Check if it's an Array of given type (eg: string[] or string[][]) - // Also converts to generics, string[] becomes Array, string[][] becomes Array> - consumeSpaces(); - while (definition[pos] === '[') { - consumeCharacter('['); - consumeCharacter(']'); - type = { typeOf: 'object', instanceOf: Array, genericTypes: [type] }; - } - return type; - } - function readTypes() { - consumeSpaces(); - const types = [readType()]; - while (definition[pos] === '|') { - consumeCharacter('|'); - types.push(readType()); - consumeSpaces(); - } - return types; - } - return readType(); -} -function checkObject(path, properties, obj, partial) { - // Are there any properties that should not be in there? - const invalidProperties = properties.find(prop => prop.name === '*' || prop.name[0] === '$') // Only if no wildcard properties are allowed - ? [] - : Object.keys(obj).filter(key => ![null, undefined].includes(obj[key]) // Ignore null or undefined values - && !properties.find(prop => prop.name === key)); - if (invalidProperties.length > 0) { - return { ok: false, reason: `Object at path "${path}" cannot have propert${invalidProperties.length === 1 ? 'y' : 'ies'} ${invalidProperties.map(p => `"${p}"`).join(', ')}` }; - } - // Loop through properties that should be present - function checkProperty(property) { - const hasValue = ![null, undefined].includes(obj[property.name]); - if (!property.optional && (partial ? obj[property.name] === null : !hasValue)) { - return { ok: false, reason: `Property at path "${path}/${property.name}" is not optional` }; - } - if (hasValue && property.types.length === 1) { - return checkType(`${path}/${property.name}`, property.types[0], obj[property.name], false); - } - if (hasValue && !property.types.some(type => checkType(`${path}/${property.name}`, type, obj[property.name], false).ok)) { - return { ok: false, reason: `Property at path "${path}/${property.name}" does not match any of ${property.types.length} allowed types` }; - } - return { ok: true }; - } - const namedProperties = properties.filter(prop => !prop.wildcard); - const failedProperty = namedProperties.find(prop => !checkProperty(prop).ok); - if (failedProperty) { - const reason = checkProperty(failedProperty).reason; - return { ok: false, reason }; - } - const wildcardProperty = properties.find(prop => prop.wildcard); - if (!wildcardProperty) { - return { ok: true }; - } - const wildcardChildKeys = Object.keys(obj).filter(key => !namedProperties.find(prop => prop.name === key)); - let result = { ok: true }; - for (let i = 0; i < wildcardChildKeys.length && result.ok; i++) { - const childKey = wildcardChildKeys[i]; - result = checkProperty({ name: childKey, types: wildcardProperty.types, optional: true, wildcard: true }); - } - return result; -} -function checkType(path, type, value, partial, trailKeys) { - const ok = { ok: true }; - if (type.typeOf === 'any') { - return ok; - } - if (trailKeys instanceof Array && trailKeys.length > 0) { - // The value to check resides in a descendant path of given type definition. - // Recursivly check child type definitions to find a match - if (type.typeOf !== 'object') { - return { ok: false, reason: `path "${path}" must be typeof ${type.typeOf}` }; // given value resides in a child path, but parent is not allowed be an object. - } - if (!type.children) { - return ok; - } - const childKey = trailKeys[0]; - let property = type.children.find(prop => prop.name === childKey); - if (!property) { - property = type.children.find(prop => prop.name === '*' || prop.name[0] === '$'); - } - if (!property) { - return { ok: false, reason: `Object at path "${path}" cannot have property "${childKey}"` }; - } - if (property.optional && value === null && trailKeys.length === 1) { - return ok; - } - let result; - property.types.some(type => { - const childPath = typeof childKey === 'number' ? `${path}[${childKey}]` : `${path}/${childKey}`; - result = checkType(childPath, type, value, partial, trailKeys.slice(1)); - return result.ok; - }); - return result; - } - if (value === null) { - return ok; - } - if (type.instanceOf === Object && (typeof value !== 'object' || value instanceof Array || value instanceof Date)) { - return { ok: false, reason: `path "${path}" must be an object collection` }; - } - if (type.instanceOf && (typeof value !== 'object' || value.constructor !== type.instanceOf)) { // !(value instanceof type.instanceOf) // value.constructor.name !== type.instanceOf - return { ok: false, reason: `path "${path}" must be an instance of ${type.instanceOf.name}` }; - } - if ('value' in type && value !== type.value) { - return { ok: false, reason: `path "${path}" must be value: ${type.value}` }; - } - if (typeof value !== type.typeOf) { - return { ok: false, reason: `path "${path}" must be typeof ${type.typeOf}` }; - } - if (type.instanceOf === Array && type.genericTypes && !value.every(v => type.genericTypes.some(t => checkType(path, t, v, false).ok))) { - return { ok: false, reason: `every array value of path "${path}" must match one of the specified types` }; - } - if (type.typeOf === 'object' && type.children) { - return checkObject(path, type.children, value, partial); - } - if (type.matches && !type.matches.test(value)) { - return { ok: false, reason: `path "${path}" must match regular expression /${type.matches.source}/${type.matches.flags}` }; - } - return ok; -} -// eslint-disable-next-line @typescript-eslint/ban-types -function getConstructorType(val) { - switch (val) { - case String: return 'string'; - case Number: return 'number'; - case Boolean: return 'boolean'; - case Date: return 'Date'; - case BigInt: return 'bigint'; - case Array: throw new Error('Schema error: Array cannot be used without a type. Use string[] or Array instead'); - default: throw new Error(`Schema error: unknown type used: ${val.name}`); - } -} -class SchemaDefinition { - constructor(definition) { - this.source = definition; - if (typeof definition === 'object') { - // Turn object into typescript definitions - // eg: - // const example = { - // name: String, - // born: Date, - // instrument: "'guitar'|'piano'", - // "address?": { - // street: String - // } - // }; - // Resulting ts: "{name:string,born:Date,instrument:'guitar'|'piano',address?:{street:string}}" - const toTS = obj => { - return '{' + Object.keys(obj) - .map(key => { - let val = obj[key]; - if (val === undefined) { - val = 'undefined'; - } - else if (val instanceof RegExp) { - val = `/${val.source}/${val.flags}`; - } - else if (typeof val === 'object') { - val = toTS(val); - } - else if (typeof val === 'function') { - val = getConstructorType(val); - } - else if (!['string', 'number', 'boolean', 'bigint'].includes(typeof val)) { - throw new Error(`Type definition for key "${key}" must be a string, number, boolean, bigint, object, regular expression, or one of these classes: String, Number, Boolean, Date, BigInt`); - } - return `${key}:${val}`; - }) - .join(',') + '}'; - }; - this.text = toTS(definition); - } - else if (typeof definition === 'string') { - this.text = definition; - } - else { - throw new Error('Type definiton must be a string or an object'); - } - this.type = parse(this.text); - } - check(path, value, partial, trailKeys) { - return checkType(path, this.type, value, partial, trailKeys); - } -} -exports.SchemaDefinition = SchemaDefinition; - -},{}],20:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SimpleCache = void 0; -const utils_1 = require("./utils"); -const calculateExpiryTime = (expirySeconds) => expirySeconds > 0 ? Date.now() + (expirySeconds * 1000) : Infinity; -/** - * Simple cache implementation that retains immutable values in memory for a limited time. - * Immutability is enforced by cloning the stored and retrieved values. To change a cached value, it will have to be `set` again with the new value. - */ -class SimpleCache { - constructor(options) { - var _a; - this.enabled = true; - if (typeof options === 'number') { - // Old signature: only expirySeconds given - options = { expirySeconds: options }; - } - options.cloneValues = options.cloneValues !== false; - if (typeof options.expirySeconds !== 'number' && typeof options.maxEntries !== 'number') { - throw new Error('Either expirySeconds or maxEntries must be specified'); - } - this.options = options; - this.cache = new Map(); - // Cleanup every minute - const interval = setInterval(() => { this.cleanUp(); }, 60 * 1000); - (_a = interval.unref) === null || _a === void 0 ? void 0 : _a.call(interval); - } - get size() { return this.cache.size; } - has(key) { - if (!this.enabled) { - return false; - } - return this.cache.has(key); - } - get(key) { - if (!this.enabled) { - return null; - } - const entry = this.cache.get(key); - if (!entry) { - return null; - } // if (!entry || entry.expires <= Date.now()) { return null; } - entry.expires = calculateExpiryTime(this.options.expirySeconds); - entry.accessed = Date.now(); - return this.options.cloneValues ? (0, utils_1.cloneObject)(entry.value) : entry.value; - } - set(key, value) { - if (this.options.maxEntries > 0 && this.cache.size >= this.options.maxEntries && !this.cache.has(key)) { - // console.warn(`* cache limit ${this.options.maxEntries} reached: ${this.cache.size}`); - // Remove an expired item or the one that was accessed longest ago - let oldest = null; - const now = Date.now(); - for (const [key, entry] of this.cache.entries()) { - if (entry.expires <= now) { - // Found an expired item. Remove it now and stop - this.cache.delete(key); - oldest = null; - break; - } - if (!oldest || entry.accessed < oldest.accessed) { - oldest = { key, accessed: entry.accessed }; - } - } - if (oldest !== null) { - this.cache.delete(oldest.key); - } - } - this.cache.set(key, { value: this.options.cloneValues ? (0, utils_1.cloneObject)(value) : value, added: Date.now(), accessed: Date.now(), expires: calculateExpiryTime(this.options.expirySeconds) }); - } - remove(key) { - this.cache.delete(key); - } - cleanUp() { - const now = Date.now(); - this.cache.forEach((entry, key) => { - if (entry.expires <= now) { - this.cache.delete(key); - } - }); - } -} -exports.SimpleCache = SimpleCache; - -},{"./utils":26}],21:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Colorize = exports.SetColorsEnabled = exports.ColorsSupported = exports.ColorStyle = void 0; -const process_1 = require("./process"); -// See from https://en.wikipedia.org/wiki/ANSI_escape_code -const FontCode = { - bold: 1, - dim: 2, - italic: 3, - underline: 4, - inverse: 7, - hidden: 8, - strikethrough: 94, -}; -const ColorCode = { - black: 30, - red: 31, - green: 32, - yellow: 33, - blue: 34, - magenta: 35, - cyan: 36, - white: 37, - grey: 90, - // Bright colors: - brightRed: 91, - // TODO, other bright colors -}; -const BgColorCode = { - bgBlack: 40, - bgRed: 41, - bgGreen: 42, - bgYellow: 43, - bgBlue: 44, - bgMagenta: 45, - bgCyan: 46, - bgWhite: 47, - bgGrey: 100, - bgBrightRed: 101, - // TODO, other bright colors -}; -const ResetCode = { - all: 0, - color: 39, - background: 49, - bold: 22, - dim: 22, - italic: 23, - underline: 24, - inverse: 27, - hidden: 28, - strikethrough: 29, -}; -var ColorStyle; -(function (ColorStyle) { - ColorStyle["reset"] = "reset"; - ColorStyle["bold"] = "bold"; - ColorStyle["dim"] = "dim"; - ColorStyle["italic"] = "italic"; - ColorStyle["underline"] = "underline"; - ColorStyle["inverse"] = "inverse"; - ColorStyle["hidden"] = "hidden"; - ColorStyle["strikethrough"] = "strikethrough"; - ColorStyle["black"] = "black"; - ColorStyle["red"] = "red"; - ColorStyle["green"] = "green"; - ColorStyle["yellow"] = "yellow"; - ColorStyle["blue"] = "blue"; - ColorStyle["magenta"] = "magenta"; - ColorStyle["cyan"] = "cyan"; - ColorStyle["grey"] = "grey"; - ColorStyle["bgBlack"] = "bgBlack"; - ColorStyle["bgRed"] = "bgRed"; - ColorStyle["bgGreen"] = "bgGreen"; - ColorStyle["bgYellow"] = "bgYellow"; - ColorStyle["bgBlue"] = "bgBlue"; - ColorStyle["bgMagenta"] = "bgMagenta"; - ColorStyle["bgCyan"] = "bgCyan"; - ColorStyle["bgWhite"] = "bgWhite"; - ColorStyle["bgGrey"] = "bgGrey"; -})(ColorStyle = exports.ColorStyle || (exports.ColorStyle = {})); -function ColorsSupported() { - // Checks for basic color support - if (typeof process_1.default === 'undefined' || !process_1.default.stdout || !process_1.default.env || !process_1.default.platform || process_1.default.platform === 'browser') { - return false; - } - if (process_1.default.platform === 'win32') { - return true; - } - const env = process_1.default.env; - if (env.COLORTERM) { - return true; - } - if (env.TERM === 'dumb') { - return false; - } - if (env.CI || env.TEAMCITY_VERSION) { - return !!env.TRAVIS; - } - if (['iTerm.app', 'HyperTerm', 'Hyper', 'MacTerm', 'Apple_Terminal', 'vscode'].includes(env.TERM_PROGRAM)) { - return true; - } - if (/^xterm-256|^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(env.TERM)) { - return true; - } - return false; -} -exports.ColorsSupported = ColorsSupported; -let _enabled = ColorsSupported(); -function SetColorsEnabled(enabled) { - _enabled = ColorsSupported() && enabled; -} -exports.SetColorsEnabled = SetColorsEnabled; -function Colorize(str, style) { - if (!_enabled) { - return str; - } - const openCodes = [], closeCodes = []; - const addStyle = style => { - if (style === ColorStyle.reset) { - openCodes.push(ResetCode.all); - } - else if (style in FontCode) { - openCodes.push(FontCode[style]); - closeCodes.push(ResetCode[style]); - } - else if (style in ColorCode) { - openCodes.push(ColorCode[style]); - closeCodes.push(ResetCode.color); - } - else if (style in BgColorCode) { - openCodes.push(BgColorCode[style]); - closeCodes.push(ResetCode.background); - } - }; - if (style instanceof Array) { - style.forEach(addStyle); - } - else { - addStyle(style); - } - // const open = '\u001b[' + openCodes.join(';') + 'm'; - // const close = '\u001b[' + closeCodes.join(';') + 'm'; - const open = openCodes.map(code => '\u001b[' + code + 'm').join(''); - const close = closeCodes.map(code => '\u001b[' + code + 'm').join(''); - // return open + str + close; - return str.split('\n').map(line => open + line + close).join('\n'); -} -exports.Colorize = Colorize; -String.prototype.colorize = function (style) { - return Colorize(this, style); -}; - -},{"./process":18}],22:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SimpleEventEmitter = void 0; -function runCallback(callback, data) { - try { - callback(data); - } - catch (err) { - console.error('Error in subscription callback', err); - } -} -class SimpleEventEmitter { - constructor() { - this._subscriptions = []; - this._oneTimeEvents = new Map(); - } - on(event, callback) { - if (this._oneTimeEvents.has(event)) { - return runCallback(callback, this._oneTimeEvents.get(event)); - } - this._subscriptions.push({ event, callback, once: false }); - return this; - } - off(event, callback) { - this._subscriptions = this._subscriptions.filter(s => s.event !== event || (callback && s.callback !== callback)); - return this; - } - once(event, callback) { - return new Promise(resolve => { - const ourCallback = (data) => { - resolve(data); - callback === null || callback === void 0 ? void 0 : callback(data); - }; - if (this._oneTimeEvents.has(event)) { - runCallback(ourCallback, this._oneTimeEvents.get(event)); - } - else { - this._subscriptions.push({ event, callback: ourCallback, once: true }); - } - }); - } - emit(event, data) { - if (this._oneTimeEvents.has(event)) { - throw new Error(`Event "${event}" was supposed to be emitted only once`); - } - for (let i = 0; i < this._subscriptions.length; i++) { - const s = this._subscriptions[i]; - if (s.event !== event) { - continue; - } - runCallback(s.callback, data); - if (s.once) { - this._subscriptions.splice(i, 1); - i--; - } - } - return this; - } - emitOnce(event, data) { - if (this._oneTimeEvents.has(event)) { - throw new Error(`Event "${event}" was supposed to be emitted only once`); - } - this.emit(event, data); - this._oneTimeEvents.set(event, data); // Mark event as being emitted once for future subscribers - this.off(event); // Remove all listeners for this event, they won't fire again - return this; - } -} -exports.SimpleEventEmitter = SimpleEventEmitter; - -},{}],23:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.EventStream = exports.EventPublisher = exports.EventSubscription = void 0; -class EventSubscription { - /** - * @param stop function that stops the subscription from receiving future events - */ - constructor(stop) { - this.stop = stop; - this._internal = { - state: 'init', - activatePromises: [], - }; - } - /** - * Notifies when subscription is activated or canceled - * @param callback optional callback to run each time activation state changes - * @returns returns a promise that resolves once activated, or rejects when it is denied (and no callback was supplied) - */ - activated(callback) { - if (callback) { - this._internal.activatePromises.push({ callback }); - if (this._internal.state === 'active') { - callback(true); - } - else if (this._internal.state === 'canceled') { - callback(false, this._internal.cancelReason); - } - } - // Changed behaviour: now also returns a Promise when the callback is used. - // This allows for 1 activated call to both handle: first activation result, - // and any future events using the callback - return new Promise((resolve, reject) => { - if (this._internal.state === 'active') { - return resolve(); - } - else if (this._internal.state === 'canceled' && !callback) { - return reject(new Error(this._internal.cancelReason)); - } - // eslint-disable-next-line @typescript-eslint/no-empty-function - const noop = () => { }; - this._internal.activatePromises.push({ - resolve, - reject: callback ? noop : reject, // Don't reject when callback is used: let callback handle this (prevents UnhandledPromiseRejection if only callback is used) - }); - }); - } - /** (for internal use) */ - _setActivationState(activated, cancelReason) { - this._internal.cancelReason = cancelReason; - this._internal.state = activated ? 'active' : 'canceled'; - while (this._internal.activatePromises.length > 0) { - const p = this._internal.activatePromises.shift(); - if (activated) { - p.callback && p.callback(true); - p.resolve && p.resolve(); - } - else { - p.callback && p.callback(false, cancelReason); - p.reject && p.reject(cancelReason); - } - } - } -} -exports.EventSubscription = EventSubscription; -class EventPublisher { - /** - * - * @param publish function that publishes a new value to subscribers, return if there are any active subscribers - * @param start function that notifies subscribers their subscription is activated - * @param cancel function that notifies subscribers their subscription has been canceled, removes all subscriptions - */ - constructor(publish, start, cancel) { - this.publish = publish; - this.start = start; - this.cancel = cancel; - } -} -exports.EventPublisher = EventPublisher; -class EventStream { - constructor(eventPublisherCallback) { - const subscribers = []; - let noMoreSubscribersCallback; - let activationState; - const _stoppedState = 'stopped (no more subscribers)'; - this.subscribe = (callback, activationCallback) => { - if (typeof callback !== 'function') { - throw new TypeError('callback must be a function'); - } - else if (activationState === _stoppedState) { - throw new Error('stream can\'t be used anymore because all subscribers were stopped'); - } - const sub = { - callback, - activationCallback: function (activated, cancelReason) { - activationCallback && activationCallback(activated, cancelReason); - this.subscription._setActivationState(activated, cancelReason); - }, - subscription: new EventSubscription(function stop() { - subscribers.splice(subscribers.indexOf(this), 1); - return checkActiveSubscribers(); - }), - }; - subscribers.push(sub); - if (typeof activationState !== 'undefined') { - if (activationState === true) { - activationCallback && activationCallback(true); - sub.subscription._setActivationState(true); - } - else if (typeof activationState === 'string') { - activationCallback && activationCallback(false, activationState); - sub.subscription._setActivationState(false, activationState); - } - } - return sub.subscription; - }; - const checkActiveSubscribers = () => { - let ret; - if (subscribers.length === 0) { - ret = noMoreSubscribersCallback && noMoreSubscribersCallback(); - activationState = _stoppedState; - } - return Promise.resolve(ret); - }; - this.unsubscribe = (callback) => { - const remove = callback - ? subscribers.filter(sub => sub.callback === callback) - : subscribers; - remove.forEach(sub => { - const i = subscribers.indexOf(sub); - subscribers.splice(i, 1); - }); - checkActiveSubscribers(); - }; - this.stop = () => { - // Stop (remove) all subscriptions - subscribers.splice(0); - checkActiveSubscribers(); - }; - /** - * For publishing side: adds a value that will trigger callbacks to all subscribers - * @param {any} val - * @returns {boolean} returns whether there are subscribers left - */ - const publish = (val) => { - subscribers.forEach(sub => { - try { - sub.callback(val); - } - catch (err) { - console.error(`Error running subscriber callback: ${err.message}`); - } - }); - if (subscribers.length === 0) { - checkActiveSubscribers(); - } - return subscribers.length > 0; - }; - /** - * For publishing side: let subscribers know their subscription is activated. Should be called only once - */ - const start = (allSubscriptionsStoppedCallback) => { - activationState = true; - noMoreSubscribersCallback = allSubscriptionsStoppedCallback; - subscribers.forEach(sub => { - sub.activationCallback && sub.activationCallback(true); - }); - }; - /** - * For publishing side: let subscribers know their subscription has been canceled. Should be called only once - */ - const cancel = (reason) => { - activationState = reason; - subscribers.forEach(sub => { - sub.activationCallback && sub.activationCallback(false, reason || new Error('unknown reason')); - }); - subscribers.splice(0); // Clear all - }; - const publisher = new EventPublisher(publish, start, cancel); - eventPublisherCallback(publisher); - } -} -exports.EventStream = EventStream; - -},{}],24:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.deserialize2 = exports.serialize2 = exports.serialize = exports.detectSerializeVersion = exports.deserialize = void 0; -const path_reference_1 = require("./path-reference"); -const utils_1 = require("./utils"); -const ascii85_1 = require("./ascii85"); -const path_info_1 = require("./path-info"); -const partial_array_1 = require("./partial-array"); -/* - There are now 2 different serialization methods for transporting values. - - v1: - The original version (v1) created an object with "map" and "val" properties. - The "map" property was made optional in v1.14.1 so they won't be present for values needing no serializing - - v2: - The new version replaces serialized values inline by objects containing ".type" and ".val" properties. - This serializing method was introduced by `export` and `import` methods because they use streaming and - are unable to prepare type mappings up-front. This format is smaller in transmission (in many cases), - and easier to read and process. - - original: { "date": (some date) } - v1 serialized: { "map": { "date": "date" }, "val": { date: "2022-04-22T07:49:23Z" } } - v2 serialized: { "date": { ".type": "date", ".val": "2022-04-22T07:49:23Z" } } - - original: (some date) - v1 serialized: { "map": "date", "val": "2022-04-22T07:49:23Z" } - v2 serialized: { ".type": "date", ".val": "2022-04-22T07:49:23Z" } - comment: top level value that need serializing is wrapped in an object with ".type" and ".val". v1 is smaller in this case - - original: 'some string' - v1 serialized: { "map": {}, "val": "some string" } - v2 serialized: "some string" - comment: primitive types such as strings don't need serializing and are returned as is in v2 - - original: { "date": (some date), "text": "Some string" } - v1 serialized: { "map": { "date": "date" }, "val": { date: "2022-04-22T07:49:23Z", "text": "Some string" } } - v2 serialized: { "date": { ".type": "date", ".val": "2022-04-22T07:49:23Z" }, "text": "Some string" } -*/ -/** - * Original deserialization method using global `map` and `val` properties - * @param data - * @returns - */ -const deserialize = (data) => { - if (data.map === null || typeof data.map === 'undefined') { - if (typeof data.val === 'undefined') { - throw new Error('serialized value must have a val property'); - } - return data.val; - } - const deserializeValue = (type, val) => { - if (type === 'date') { - // Date was serialized as a string (UTC) - return new Date(val); - } - else if (type === 'binary') { - // ascii85 encoded binary data - return ascii85_1.ascii85.decode(val); - } - else if (type === 'reference') { - return new path_reference_1.PathReference(val); - } - else if (type === 'regexp') { - return new RegExp(val.pattern, val.flags); - } - else if (type === 'array') { - return new partial_array_1.PartialArray(val); - } - else if (type === 'bigint') { - return BigInt(val); - } - return val; - }; - if (typeof data.map === 'string') { - // Single value - return deserializeValue(data.map, data.val); - } - Object.keys(data.map).forEach(path => { - const type = data.map[path]; - const keys = path_info_1.PathInfo.getPathKeys(path); - let parent = data; - let key = 'val'; - let val = data.val; - keys.forEach(k => { - key = k; - parent = val; - val = val[key]; // If an error occurs here, there's something wrong with the calling code... - }); - parent[key] = deserializeValue(type, val); - }); - return data.val; -}; -exports.deserialize = deserialize; -/** - * Function to detect the used serialization method with for the given object - * @param data - * @returns - */ -const detectSerializeVersion = (data) => { - if (typeof data !== 'object' || data === null) { - // This can only be v2, which allows primitive types to bypass serializing - return 2; - } - if ('map' in data && 'val' in data) { - return 1; - } - else if ('val' in data) { - // If it's v1, 'val' will be the only key in the object because serialize2 adds ".version": 2 to the object to prevent confusion. - if (Object.keys(data).length > 1) { - return 2; - } - return 1; - } - return 2; -}; -exports.detectSerializeVersion = detectSerializeVersion; -/** - * Original serialization method using global `map` and `val` properties - * @param data - * @returns - */ -const serialize = (obj) => { - var _a; - // Recursively find dates and binary data - if (obj === null || typeof obj !== 'object' || obj instanceof Date || obj instanceof ArrayBuffer || obj instanceof path_reference_1.PathReference || obj instanceof RegExp) { - // Single value - const ser = (0, exports.serialize)({ value: obj }); - return { - map: (_a = ser.map) === null || _a === void 0 ? void 0 : _a.value, - val: ser.val.value, - }; - } - obj = (0, utils_1.cloneObject)(obj); // Make sure we don't alter the original object - const process = (obj, mappings, prefix) => { - if (obj instanceof partial_array_1.PartialArray) { - mappings[prefix] = 'array'; - } - Object.keys(obj).forEach(key => { - const val = obj[key]; - const path = prefix.length === 0 ? key : `${prefix}/${key}`; - if (typeof val === 'bigint') { - obj[key] = val.toString(); - mappings[path] = 'bigint'; - } - else if (val instanceof Date) { - // serialize date to UTC string - obj[key] = val.toISOString(); - mappings[path] = 'date'; - } - else if (val instanceof ArrayBuffer) { - // Serialize binary data with ascii85 - obj[key] = ascii85_1.ascii85.encode(val); //ascii85.encode(Buffer.from(val)).toString(); - mappings[path] = 'binary'; - } - else if (val instanceof path_reference_1.PathReference) { - obj[key] = val.path; - mappings[path] = 'reference'; - } - else if (val instanceof RegExp) { - // Queries using the 'matches' filter with a regular expression can now also be used on remote db's - obj[key] = { pattern: val.source, flags: val.flags }; - mappings[path] = 'regexp'; - } - else if (typeof val === 'object' && val !== null) { - process(val, mappings, path); - } - }); - }; - const mappings = {}; - process(obj, mappings, ''); - const serialized = { val: obj }; - if (Object.keys(mappings).length > 0) { - serialized.map = mappings; - } - return serialized; -}; -exports.serialize = serialize; -/** - * New serialization method using inline `.type` and `.val` properties - * @param obj - * @returns - */ -const serialize2 = (obj) => { - // Recursively find data that needs serializing - const getSerializedValue = (val) => { - if (typeof val === 'bigint') { - // serialize bigint to string - return { - '.type': 'bigint', - '.val': val.toString(), - }; - } - else if (val instanceof Date) { - // serialize date to UTC string - return { - '.type': 'date', - '.val': val.toISOString(), - }; - } - else if (val instanceof ArrayBuffer) { - // Serialize binary data with ascii85 - return { - '.type': 'binary', - '.val': ascii85_1.ascii85.encode(val), - }; - } - else if (val instanceof path_reference_1.PathReference) { - return { - '.type': 'reference', - '.val': val.path, - }; - } - else if (val instanceof RegExp) { - // Queries using the 'matches' filter with a regular expression can now also be used on remote db's - return { - '.type': 'regexp', - '.val': `/${val.source}/${val.flags}`, // new: shorter - // '.val': { - // pattern: val.source, - // flags: val.flags - // } - }; - } - else if (typeof val === 'object' && val !== null) { - if (val instanceof Array) { - const copy = []; - for (let i = 0; i < val.length; i++) { - copy[i] = getSerializedValue(val[i]); - } - return copy; - } - else { - const copy = {}; //val instanceof Array ? [] : {} as SerializedValueV2; - if (val instanceof partial_array_1.PartialArray) { - // Mark the object as partial ("sparse") array - copy['.type'] = 'array'; - } - for (const prop in val) { - copy[prop] = getSerializedValue(val[prop]); - } - return copy; - } - } - else { - // Primitive value. Don't serialize - return val; - } - }; - const serialized = getSerializedValue(obj); - if (serialized !== null && typeof serialized === 'object' && 'val' in serialized && Object.keys(serialized).length === 1) { - // acebase-core v1.14.1 made the 'map' property optional. - // This v2 serialized object might be confused with a v1 without mappings, because it only has a "val" property - // To prevent this, mark the serialized object with version 2 - serialized['.version'] = 2; - } - return serialized; -}; -exports.serialize2 = serialize2; -/** - * New deserialization method using inline `.type` and `.val` properties - * @param obj - * @returns - */ -const deserialize2 = (data) => { - if (typeof data !== 'object' || data === null) { - // primitive value, not serialized - return data; - } - if (typeof data['.type'] === 'undefined') { - // No type given: this is a plain object or array - if (data instanceof Array) { - // Plain array, deserialize items into a copy - const copy = []; - const arr = data; - for (let i = 0; i < arr.length; i++) { - copy.push((0, exports.deserialize2)(arr[i])); - } - return copy; - } - else { - // Plain object, deserialize properties into a copy - const copy = {}; - const obj = data; - for (const prop in obj) { - copy[prop] = (0, exports.deserialize2)(obj[prop]); - } - return copy; - } - } - else if (typeof data['.type'] === 'string') { - const dataType = data['.type'].toLowerCase(); - if (dataType === 'bigint') { - const val = data['.val']; - return BigInt(val); - } - else if (dataType === 'array') { - // partial ("sparse") array, deserialize children into a copy - const copy = {}; - for (const index in data) { - copy[index] = (0, exports.deserialize2)(data[index]); - } - delete copy['.type']; - return new partial_array_1.PartialArray(copy); - } - else if (dataType === 'date') { - // Date was serialized as a string (UTC) - const val = data['.val']; - return new Date(val); - } - else if (dataType === 'binary') { - // ascii85 encoded binary data - const val = data['.val']; - return ascii85_1.ascii85.decode(val); - } - else if (dataType === 'reference') { - const val = data['.val']; - return new path_reference_1.PathReference(val); - } - else if (dataType === 'regexp') { - const val = data['.val']; - if (typeof val === 'string') { - // serialized as '/(pattern)/flags' - const match = /^\/(.*)\/([a-z]+)$/.exec(val); - return new RegExp(match[1], match[2]); - } - // serialized as object with pattern & flags properties - return new RegExp(val.pattern, val.flags); - } - } - throw new Error(`Unknown data type "${data['.type']}" in serialized value`); -}; -exports.deserialize2 = deserialize2; - -},{"./ascii85":3,"./partial-array":15,"./path-info":16,"./path-reference":17,"./utils":26}],25:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TypeMappings = void 0; -const utils_1 = require("./utils"); -const path_info_1 = require("./path-info"); -const data_reference_1 = require("./data-reference"); -const data_snapshot_1 = require("./data-snapshot"); -/** - * (for internal use) - gets the mapping set for a specific path - */ -function get(mappings, path) { - // path points to the mapped (object container) location - path = path.replace(/^\/|\/$/g, ''); // trim slashes - const keys = path_info_1.PathInfo.getPathKeys(path); - const mappedPath = Object.keys(mappings).find(mpath => { - const mkeys = path_info_1.PathInfo.getPathKeys(mpath); - if (mkeys.length !== keys.length) { - return false; // Can't be a match - } - return mkeys.every((mkey, index) => { - if (mkey === '*' || mkey[0] === '$') { - return true; // wildcard - } - return mkey === keys[index]; - }); - }); - const mapping = mappings[mappedPath]; - return mapping; -} -/** - * (for internal use) - gets the mapping set for a specific path's parent - */ -function map(mappings, path) { - // path points to the object location, its parent should have the mapping - const targetPath = path_info_1.PathInfo.get(path).parentPath; - if (targetPath === null) { - return; - } - return get(mappings, targetPath); -} -/** - * (for internal use) - gets all mappings set for a specific path and all subnodes - * @returns returns array of all matched mappings in path - */ -function mapDeep(mappings, entryPath) { - // returns mapping for this node, and all mappings for nested nodes - // entryPath: "users/ewout" - // mappingPath: "users" - // mappingPath: "users/*/posts" - entryPath = entryPath.replace(/^\/|\/$/g, ''); // trim slashes - // Start with current path's parent node - const pathInfo = path_info_1.PathInfo.get(entryPath); - const startPath = pathInfo.parentPath; - const keys = startPath ? path_info_1.PathInfo.getPathKeys(startPath) : []; - // Every path that starts with startPath, is a match - // TODO: refactor to return Object.keys(mappings),filter(...) - const matches = Object.keys(mappings).reduce((m, mpath) => { - //const mkeys = mpath.length > 0 ? mpath.split("/") : []; - const mkeys = path_info_1.PathInfo.getPathKeys(mpath); - if (mkeys.length < keys.length) { - return m; // Can't be a match - } - let isMatch = true; - if (keys.length === 0 && startPath !== null) { - // Only match first node's children if mapping pattern is "*" or "$variable" - isMatch = mkeys.length === 1 && (mkeys[0] === '*' || mkeys[0][0] === '$'); - } - else { - mkeys.every((mkey, index) => { - if (index >= keys.length) { - return false; // stop .every loop - } - else if (mkey === '*' || mkey[0] === '$' || mkey === keys[index]) { - return true; // continue .every loop - } - else { - isMatch = false; - return false; // stop .every loop - } - }); - } - if (isMatch) { - const mapping = mappings[mpath]; - m.push({ path: mpath, type: mapping }); - } - return m; - }, []); - return matches; -} -/** - * (for internal use) - serializes or deserializes an object using type mappings - * @returns returns the (de)serialized value - */ -function process(db, mappings, path, obj, action) { - if (obj === null || typeof obj !== 'object') { - return obj; - } - const keys = path_info_1.PathInfo.getPathKeys(path); // path.length > 0 ? path.split("/") : []; - const m = mapDeep(mappings, path); - const changes = []; - m.sort((a, b) => path_info_1.PathInfo.getPathKeys(a.path).length > path_info_1.PathInfo.getPathKeys(b.path).length ? -1 : 1); // Deepest paths first - m.forEach(mapping => { - const mkeys = path_info_1.PathInfo.getPathKeys(mapping.path); //mapping.path.length > 0 ? mapping.path.split("/") : []; - mkeys.push('*'); - const mTrailKeys = mkeys.slice(keys.length); - if (mTrailKeys.length === 0) { - const vars = path_info_1.PathInfo.extractVariables(mapping.path, path); - const ref = new data_reference_1.DataReference(db, path, vars); - if (action === 'serialize') { - // serialize this object - obj = mapping.type.serialize(obj, ref); - } - else if (action === 'deserialize') { - // deserialize this object - const snap = new data_snapshot_1.DataSnapshot(ref, obj); - obj = mapping.type.deserialize(snap); - } - return; - } - // Find all nested objects at this trail path - const process = (parentPath, parent, keys) => { - if (obj === null || typeof obj !== 'object') { - return obj; - } - const key = keys[0]; - let children = []; - if (key === '*' || key[0] === '$') { - // Include all children - if (parent instanceof Array) { - children = parent.map((val, index) => ({ key: index, val })); - } - else { - children = Object.keys(parent).map(k => ({ key: k, val: parent[k] })); - } - } - else { - // Get the 1 child - const child = parent[key]; - if (typeof child === 'object') { - children.push({ key, val: child }); - } - } - children.forEach(child => { - const childPath = path_info_1.PathInfo.getChildPath(parentPath, child.key); - const vars = path_info_1.PathInfo.extractVariables(mapping.path, childPath); - const ref = new data_reference_1.DataReference(db, childPath, vars); - if (keys.length === 1) { - // TODO: this alters the existing object, we must build our own copy! - if (action === 'serialize') { - // serialize this object - changes.push({ parent, key: child.key, original: parent[child.key] }); - parent[child.key] = mapping.type.serialize(child.val, ref); - } - else if (action === 'deserialize') { - // deserialize this object - const snap = new data_snapshot_1.DataSnapshot(ref, child.val); - parent[child.key] = mapping.type.deserialize(snap); - } - } - else { - // Dig deeper - process(childPath, child.val, keys.slice(1)); - } - }); - }; - process(path, obj, mTrailKeys); - }); - if (action === 'serialize') { - // Clone this serialized object so any types that remained - // will become plain objects without functions, and we can restore - // the original object's values if any mappings were processed. - // This will also prevent circular references - obj = (0, utils_1.cloneObject)(obj); - if (changes.length > 0) { - // Restore the changes made to the original object - changes.forEach(change => { - change.parent[change.key] = change.original; - }); - } - } - return obj; -} -const _mappings = Symbol('mappings'); -class TypeMappings { - constructor(db) { - this.db = db; - this[_mappings] = {}; - } - /** (for internal use) */ - get mappings() { return this[_mappings]; } - /** (for internal use) */ - map(path) { - return map(this[_mappings], path); - } - /** - * Maps objects that are stored in a specific path to a class, so they can automatically be - * serialized when stored to, and deserialized (instantiated) when loaded from the database. - * @param path path to an object container, eg "users" or "users/*\/posts" - * @param type class to bind all child objects of path to - * Best practice is to implement 2 methods for instantiation and serializing of your objects: - * 1) `static create(snap: DataSnapshot)` and 2) `serialize(ref: DataReference)`. See example - * @param options (optional) You can specify the functions to use to - * serialize and/or instantiate your class. If you do not specificy a creator (constructor) method, - * AceBase will call `YourClass.create(snapshot)` method if it exists, or create an instance of - * YourClass with `new YourClass(snapshot)`. - * If you do not specifiy a serializer method, AceBase will call `YourClass.prototype.serialize(ref)` - * if it exists, or tries storing your object's fields unaltered. NOTE: `this` in your creator - * function will point to `YourClass`, and `this` in your serializer function will point to the - * `instance` of `YourClass`. - * @example - * class User { - * static create(snap: DataSnapshot): User { - * // Deserialize (instantiate) User from plain database object - * let user = new User(); - * Object.assign(user, snap.val()); // Copy all properties to user - * user.id = snap.ref.key; // Add the key as id - * return user; - * } - * serialize(ref: DataReference) { - * // Serialize user for database storage - * return { - * name: this.name - * email: this.email - * }; - * } - * } - * db.types.bind('users', User); // Automatically uses serialize and static create methods - */ - bind(path, type, options = {}) { - // Maps objects that are stored in a specific path to a constructor method, - // so they are automatically deserialized - if (typeof path !== 'string') { - throw new TypeError('path must be a string'); - } - if (typeof type !== 'function') { - throw new TypeError('constructor must be a function'); - } - if (typeof options.serializer === 'undefined') { - // if (typeof type.prototype.serialize === 'function') { - // // Use .serialize instance method - // options.serializer = type.prototype.serialize; - // } - // Use object's serialize method upon serialization (if available) - } - else if (typeof options.serializer === 'string') { - if (typeof type.prototype[options.serializer] === 'function') { - options.serializer = type.prototype[options.serializer]; - } - else { - throw new TypeError(`${type.name}.prototype.${options.serializer} is not a function, cannot use it as serializer`); - } - } - else if (typeof options.serializer !== 'function') { - throw new TypeError(`serializer for class ${type.name} must be a function, or the name of a prototype method`); - } - if (typeof options.creator === 'undefined') { - if (typeof type.create === 'function') { - // Use static .create as creator method - options.creator = type.create; - } - } - else if (typeof options.creator === 'string') { - if (typeof type[options.creator] === 'function') { - options.creator = type[options.creator]; - } - else { - throw new TypeError(`${type.name}.${options.creator} is not a function, cannot use it as creator`); - } - } - else if (typeof options.creator !== 'function') { - throw new TypeError(`creator for class ${type.name} must be a function, or the name of a static method`); - } - path = path.replace(/^\/|\/$/g, ''); // trim slashes - this[_mappings][path] = { - db: this.db, - type, - creator: options.creator, - serializer: options.serializer, - deserialize(snap) { - // run constructor method - let obj; - if (this.creator) { - obj = this.creator.call(this.type, snap); - } - else { - obj = new this.type(snap); - } - return obj; - }, - serialize(obj, ref) { - if (this.serializer) { - obj = this.serializer.call(obj, ref, obj); - } - else if (obj && typeof obj.serialize === 'function') { - obj = obj.serialize(ref, obj); - } - return obj; - }, - }; - } - /** - * (for internal use) - * Serializes any child in given object that has a type mapping - * @param {string} path | path to the object's location - * @param {object} obj | object to serialize - */ - serialize(path, obj) { - return process(this.db, this[_mappings], path, obj, 'serialize'); - } - /** - * (for internal use) - * Deserialzes any child in given object that has a type mapping - * @param {string} path | path to the object's location - * @param {object} obj | object to deserialize - */ - deserialize(path, obj) { - return process(this.db, this[_mappings], path, obj, 'deserialize'); - } -} -exports.TypeMappings = TypeMappings; - -},{"./data-reference":8,"./data-snapshot":9,"./path-info":16,"./utils":26}],26:[function(require,module,exports){ -(function (Buffer){(function (){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.defer = exports.getChildValues = exports.getMutations = exports.compareValues = exports.ObjectDifferences = exports.valuesAreEqual = exports.cloneObject = exports.concatTypedArrays = exports.decodeString = exports.encodeString = exports.bytesToBigint = exports.bigintToBytes = exports.bytesToNumber = exports.numberToBytes = void 0; -const path_reference_1 = require("./path-reference"); -const process_1 = require("./process"); -const partial_array_1 = require("./partial-array"); -function numberToBytes(number) { - const bytes = new Uint8Array(8); - const view = new DataView(bytes.buffer); - view.setFloat64(0, number); - return new Array(...bytes); -} -exports.numberToBytes = numberToBytes; -function bytesToNumber(bytes) { - const length = Array.isArray(bytes) ? bytes.length : bytes.byteLength; - if (length !== 8) { - throw new TypeError('must be 8 bytes'); - } - const bin = new Uint8Array(bytes); - const view = new DataView(bin.buffer); - const nr = view.getFloat64(0); - return nr; -} -exports.bytesToNumber = bytesToNumber; -const big = { - zero: BigInt(0), - one: BigInt(1), - two: BigInt(2), - eight: BigInt(8), - ff: BigInt(0xff), -}; -function bigintToBytes(number) { - if (typeof number !== 'bigint') { - throw new Error('number must be a bigint'); - } - const bytes = []; - const negative = number < big.zero; - do { - const byte = Number(number & big.ff); // NOTE: bits are inverted on negative numbers - bytes.push(byte); - number = number >> big.eight; - } while (number !== (negative ? -big.one : big.zero)); - bytes.reverse(); // little-endian - if (negative ? bytes[0] < 128 : bytes[0] >= 128) { - bytes.unshift(negative ? 255 : 0); // extra sign byte needed - } - return bytes; -} -exports.bigintToBytes = bigintToBytes; -function bytesToBigint(bytes) { - const negative = bytes[0] >= 128; - let number = big.zero; - for (let b of bytes) { - if (negative) { - b = ~b & 0xff; - } // Invert the bits - number = (number << big.eight) + BigInt(b); - } - if (negative) { - number = -(number + big.one); - } - return number; -} -exports.bytesToBigint = bytesToBigint; -/** - * Converts a string to a utf-8 encoded Uint8Array - */ -function encodeString(str) { - if (typeof TextEncoder !== 'undefined') { - // Modern browsers, Node.js v11.0.0+ (or v8.3.0+ with util.TextEncoder) - const encoder = new TextEncoder(); - return encoder.encode(str); - } - else if (typeof Buffer === 'function') { - // Node.js - const buf = Buffer.from(str, 'utf-8'); - return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength); - } - else { - // Older browsers. Manually encode - const arr = []; - for (let i = 0; i < str.length; i++) { - let code = str.charCodeAt(i); - if (code > 128) { - // Attempt simple UTF-8 conversion. See https://en.wikipedia.org/wiki/UTF-8 - if ((code & 0xd800) === 0xd800) { - // code starts with 1101 10...: this is a 2-part utf-16 char code - const nextCode = str.charCodeAt(i + 1); - if ((nextCode & 0xdc00) !== 0xdc00) { - // next code must start with 1101 11... - throw new Error('follow-up utf-16 character does not start with 0xDC00'); - } - i++; - const p1 = code & 0x3ff; // Only use last 10 bits - const p2 = nextCode & 0x3ff; - // Create code point from these 2: (see https://en.wikipedia.org/wiki/UTF-16) - code = 0x10000 | (p1 << 10) | p2; - } - if (code < 2048) { - // Use 2 bytes for 11 bit value, first byte starts with 110xxxxx (0xc0), 2nd byte with 10xxxxxx (0x80) - const b1 = 0xc0 | ((code >> 6) & 0x1f); // 0xc0 = 11000000, 0x1f = 11111 - const b2 = 0x80 | (code & 0x3f); // 0x80 = 10000000, 0x3f = 111111 - arr.push(b1, b2); - } - else if (code < 65536) { - // Use 3 bytes for 16-bit value, bits per byte: 4, 6, 6 - const b1 = 0xe0 | ((code >> 12) & 0xf); // 0xe0 = 11100000, 0xf = 1111 - const b2 = 0x80 | ((code >> 6) & 0x3f); // 0x80 = 10000000, 0x3f = 111111 - const b3 = 0x80 | (code & 0x3f); - arr.push(b1, b2, b3); - } - else if (code < 2097152) { - // Use 4 bytes for 21-bit value, bits per byte: 3, 6, 6, 6 - const b1 = 0xf0 | ((code >> 18) & 0x7); // 0xf0 = 11110000, 0x7 = 111 - const b2 = 0x80 | ((code >> 12) & 0x3f); // 0x80 = 10000000, 0x3f = 111111 - const b3 = 0x80 | ((code >> 6) & 0x3f); // 0x80 = 10000000, 0x3f = 111111 - const b4 = 0x80 | (code & 0x3f); - arr.push(b1, b2, b3, b4); - } - else { - throw new Error(`Cannot convert character ${str.charAt(i)} (code ${code}) to utf-8`); - } - } - else { - arr.push(code < 128 ? code : 63); // 63 = ? - } - } - return new Uint8Array(arr); - } -} -exports.encodeString = encodeString; -/** - * Converts a utf-8 encoded buffer to string - */ -function decodeString(buffer) { - if (typeof TextDecoder !== 'undefined') { - // Modern browsers, Node.js v11.0.0+ (or v8.3.0+ with util.TextDecoder) - const decoder = new TextDecoder(); - if (buffer instanceof Uint8Array) { - return decoder.decode(buffer); - } - const buf = Uint8Array.from(buffer); - return decoder.decode(buf); - } - else if (typeof Buffer === 'function') { - // Node.js (v10 and below) - if (buffer instanceof Array) { - buffer = Uint8Array.from(buffer); // convert to typed array - } - if (!(buffer instanceof Buffer) && 'buffer' in buffer && buffer.buffer instanceof ArrayBuffer) { - const typedArray = buffer; - buffer = Buffer.from(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); // Convert typed array to node.js Buffer - } - if (!(buffer instanceof Buffer)) { - throw new Error('Unsupported buffer argument'); - } - return buffer.toString('utf-8'); - } - else { - // Older browsers. Manually decode! - if (!(buffer instanceof Uint8Array) && 'buffer' in buffer && buffer['buffer'] instanceof ArrayBuffer) { - // Convert TypedArray to Uint8Array - const typedArray = buffer; - buffer = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); - } - if (buffer instanceof Buffer || buffer instanceof Array || buffer instanceof Uint8Array) { - let str = ''; - for (let i = 0; i < buffer.length; i++) { - let code = buffer[i]; - if (code > 128) { - // Decode Unicode character - if ((code & 0xf0) === 0xf0) { - // 4 byte char - const b1 = code, b2 = buffer[i + 1], b3 = buffer[i + 2], b4 = buffer[i + 3]; - code = ((b1 & 0x7) << 18) | ((b2 & 0x3f) << 12) | ((b3 & 0x3f) << 6) | (b4 & 0x3f); - i += 3; - } - else if ((code & 0xe0) === 0xe0) { - // 3 byte char - const b1 = code, b2 = buffer[i + 1], b3 = buffer[i + 2]; - code = ((b1 & 0xf) << 12) | ((b2 & 0x3f) << 6) | (b3 & 0x3f); - i += 2; - } - else if ((code & 0xc0) === 0xc0) { - // 2 byte char - const b1 = code, b2 = buffer[i + 1]; - code = ((b1 & 0x1f) << 6) | (b2 & 0x3f); - i++; - } - else { - throw new Error('invalid utf-8 data'); - } - } - if (code >= 65536) { - // Split into 2-part utf-16 char codes - code ^= 0x10000; - const p1 = 0xd800 | (code >> 10); - const p2 = 0xdc00 | (code & 0x3ff); - str += String.fromCharCode(p1); - str += String.fromCharCode(p2); - } - else { - str += String.fromCharCode(code); - } - } - return str; - } - else { - throw new Error('Unsupported buffer argument'); - } - } -} -exports.decodeString = decodeString; -function concatTypedArrays(a, b) { - const c = new a.constructor(a.length + b.length); - c.set(a); - c.set(b, a.length); - return c; -} -exports.concatTypedArrays = concatTypedArrays; -function cloneObject(original, stack) { - var _a; - if (((_a = original === null || original === void 0 ? void 0 : original.constructor) === null || _a === void 0 ? void 0 : _a.name) === 'DataSnapshot') { - throw new TypeError(`Object to clone is a DataSnapshot (path "${original.ref.path}")`); - } - const checkAndFixTypedArray = obj => { - if (obj !== null && typeof obj === 'object' - && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' - && ['Buffer', 'Uint8Array', 'Int8Array', 'Uint16Array', 'Int16Array', 'Uint32Array', 'Int32Array', 'BigUint64Array', 'BigInt64Array'].includes(obj.constructor.name)) { - // FIX for typed array being converted to objects with numeric properties: - // Convert Buffer or TypedArray to ArrayBuffer - obj = obj.buffer.slice(obj.byteOffset, obj.byteOffset + obj.byteLength); - } - return obj; - }; - original = checkAndFixTypedArray(original); - if (typeof original !== 'object' || original === null || original instanceof Date || original instanceof ArrayBuffer || original instanceof path_reference_1.PathReference || original instanceof RegExp) { - return original; - } - const cloneValue = (val) => { - if (stack.indexOf(val) >= 0) { - throw new ReferenceError('object contains a circular reference'); - } - val = checkAndFixTypedArray(val); - if (val === null || val instanceof Date || val instanceof ArrayBuffer || val instanceof path_reference_1.PathReference || val instanceof RegExp) { // || val instanceof ID - return val; - } - else if (typeof val === 'object') { - stack.push(val); - val = cloneObject(val, stack); - stack.pop(); - return val; - } - else { - return val; // Anything other can just be copied - } - }; - if (typeof stack === 'undefined') { - stack = [original]; - } - const clone = original instanceof Array ? [] : original instanceof partial_array_1.PartialArray ? new partial_array_1.PartialArray() : {}; - Object.keys(original).forEach(key => { - const val = original[key]; - if (typeof val === 'function') { - return; // skip functions - } - clone[key] = cloneValue(val); - }); - return clone; -} -exports.cloneObject = cloneObject; -const isTypedArray = val => typeof val === 'object' && ['ArrayBuffer', 'Buffer', 'Uint8Array', 'Uint16Array', 'Uint32Array', 'Int8Array', 'Int16Array', 'Int32Array'].includes(val.constructor.name); -// CONSIDER: updating isTypedArray to: const isTypedArray = val => typeof val === 'object' && 'buffer' in val && 'byteOffset' in val && 'byteLength' in val; -function valuesAreEqual(val1, val2) { - if (val1 === val2) { - return true; - } - if (typeof val1 !== typeof val2) { - return false; - } - if (typeof val1 === 'object' || typeof val2 === 'object') { - if (val1 === null || val2 === null) { - return false; - } - if (val1 instanceof path_reference_1.PathReference || val2 instanceof path_reference_1.PathReference) { - return val1 instanceof path_reference_1.PathReference && val2 instanceof path_reference_1.PathReference && val1.path === val2.path; - } - if (val1 instanceof Date || val2 instanceof Date) { - return val1 instanceof Date && val2 instanceof Date && val1.getTime() === val2.getTime(); - } - if (val1 instanceof Array || val2 instanceof Array) { - return val1 instanceof Array && val2 instanceof Array && val1.length === val2.length && val1.every((item, i) => valuesAreEqual(val1[i], val2[i])); - } - if (isTypedArray(val1) || isTypedArray(val2)) { - if (!isTypedArray(val1) || !isTypedArray(val2) || val1.byteLength === val2.byteLength) { - return false; - } - const typed1 = val1 instanceof ArrayBuffer ? new Uint8Array(val1) : new Uint8Array(val1.buffer, val1.byteOffset, val1.byteLength), typed2 = val2 instanceof ArrayBuffer ? new Uint8Array(val2) : new Uint8Array(val2.buffer, val2.byteOffset, val2.byteLength); - return typed1.every((val, i) => typed2[i] === val); - } - const keys1 = Object.keys(val1), keys2 = Object.keys(val2); - return keys1.length === keys2.length && keys1.every(key => keys2.includes(key)) && keys1.every(key => valuesAreEqual(val1[key], val2[key])); - } - return false; -} -exports.valuesAreEqual = valuesAreEqual; -class ObjectDifferences { - constructor(added, removed, changed) { - this.added = added; - this.removed = removed; - this.changed = changed; - } - forChild(key) { - if (this.added.includes(key)) { - return 'added'; - } - if (this.removed.includes(key)) { - return 'removed'; - } - const changed = this.changed.find(ch => ch.key === key); - return changed ? changed.change : 'identical'; - } -} -exports.ObjectDifferences = ObjectDifferences; -function compareValues(oldVal, newVal, sortedResults = false) { - const voids = [undefined, null]; - if (oldVal === newVal) { - return 'identical'; - } - else if (voids.indexOf(oldVal) >= 0 && voids.indexOf(newVal) < 0) { - return 'added'; - } - else if (voids.indexOf(oldVal) < 0 && voids.indexOf(newVal) >= 0) { - return 'removed'; - } - else if (typeof oldVal !== typeof newVal) { - return 'changed'; - } - else if (isTypedArray(oldVal) || isTypedArray(newVal)) { - // One or both values are typed arrays. - if (!isTypedArray(oldVal) || !isTypedArray(newVal)) { - return 'changed'; - } - // Both are typed. Compare lengths and byte content of typed arrays - const typed1 = oldVal instanceof Uint8Array ? oldVal : oldVal instanceof ArrayBuffer ? new Uint8Array(oldVal) : new Uint8Array(oldVal.buffer, oldVal.byteOffset, oldVal.byteLength); - const typed2 = newVal instanceof Uint8Array ? newVal : newVal instanceof ArrayBuffer ? new Uint8Array(newVal) : new Uint8Array(newVal.buffer, newVal.byteOffset, newVal.byteLength); - return typed1.byteLength === typed2.byteLength && typed1.every((val, i) => typed2[i] === val) ? 'identical' : 'changed'; - } - else if (oldVal instanceof Date || newVal instanceof Date) { - return oldVal instanceof Date && newVal instanceof Date && oldVal.getTime() === newVal.getTime() ? 'identical' : 'changed'; - } - else if (oldVal instanceof path_reference_1.PathReference || newVal instanceof path_reference_1.PathReference) { - return oldVal instanceof path_reference_1.PathReference && newVal instanceof path_reference_1.PathReference && oldVal.path === newVal.path ? 'identical' : 'changed'; - } - else if (typeof oldVal === 'object') { - // Do key-by-key comparison of objects - const isArray = oldVal instanceof Array; - const getKeys = obj => { - let keys = Object.keys(obj).filter(key => !voids.includes(obj[key])); - if (isArray) { - keys = keys.map((v) => parseInt(v)); - } - return keys; - }; - const oldKeys = getKeys(oldVal); - const newKeys = getKeys(newVal); - const removedKeys = oldKeys.filter(key => !newKeys.includes(key)); - const addedKeys = newKeys.filter(key => !oldKeys.includes(key)); - const changedKeys = newKeys.reduce((changed, key) => { - if (oldKeys.includes(key)) { - const val1 = oldVal[key]; - const val2 = newVal[key]; - const c = compareValues(val1, val2); - if (c !== 'identical') { - changed.push({ key, change: c }); - } - } - return changed; - }, []); - if (addedKeys.length === 0 && removedKeys.length === 0 && changedKeys.length === 0) { - return 'identical'; - } - else { - return new ObjectDifferences(addedKeys, removedKeys, sortedResults ? changedKeys.sort((a, b) => a.key < b.key ? -1 : 1) : changedKeys); - } - } - return 'changed'; -} -exports.compareValues = compareValues; -function getMutations(oldVal, newVal, sortedResults = false) { - const process = (target, compareResult, prev, val) => { - switch (compareResult) { - case 'identical': return []; - case 'changed': return [{ target, prev, val }]; - case 'added': return [{ target, prev: null, val }]; - case 'removed': return [{ target, prev, val: null }]; - default: { - let changes = []; - compareResult.added.forEach(key => changes.push({ target: target.concat(key), prev: null, val: val[key] })); - compareResult.removed.forEach(key => changes.push({ target: target.concat(key), prev: prev[key], val: null })); - compareResult.changed.forEach(item => { - const childChanges = process(target.concat(item.key), item.change, prev[item.key], val[item.key]); - changes = changes.concat(childChanges); - }); - return changes; - } - } - }; - const compareResult = compareValues(oldVal, newVal, sortedResults); - return process([], compareResult, oldVal, newVal); -} -exports.getMutations = getMutations; -function getChildValues(childKey, oldValue, newValue) { - oldValue = oldValue === null ? null : oldValue[childKey]; - if (typeof oldValue === 'undefined') { - oldValue = null; - } - newValue = newValue === null ? null : newValue[childKey]; - if (typeof newValue === 'undefined') { - newValue = null; - } - return { oldValue, newValue }; -} -exports.getChildValues = getChildValues; -function defer(fn) { - process_1.default.nextTick(fn); -} -exports.defer = defer; - -}).call(this)}).call(this,require("buffer").Buffer) -},{"./partial-array":15,"./path-reference":17,"./process":18,"buffer":27}],27:[function(require,module,exports){ - -},{}],28:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); exports.BrowserAceBase = void 0; const acebase_local_1 = require("./acebase-local"); const indexed_db_1 = require("./storage/custom/indexed-db"); @@ -5401,7 +45,7 @@ class BrowserAceBase extends acebase_local_1.AceBase { } exports.BrowserAceBase = BrowserAceBase; -},{"./acebase-local":29,"./storage/custom/indexed-db":46}],29:[function(require,module,exports){ +},{"./acebase-local":2,"./storage/custom/indexed-db":19}],2:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AceBase = exports.AceBaseLocalSettings = exports.IndexedDBStorageSettings = exports.LocalStorageSettings = void 0; @@ -5487,7 +131,7 @@ class AceBase extends acebase_core_1.AceBaseBase { } exports.AceBase = AceBase; -},{"./api-local":30,"./storage/binary":40,"./storage/custom/indexed-db/settings":47,"./storage/custom/local-storage":49,"acebase-core":12}],30:[function(require,module,exports){ +},{"./api-local":3,"./storage/binary":13,"./storage/custom/indexed-db/settings":20,"./storage/custom/local-storage":22,"acebase-core":38}],3:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LocalApi = void 0; @@ -5783,7 +427,7 @@ class LocalApi extends acebase_core_1.Api { } exports.LocalApi = LocalApi; -},{"./node-value-types":39,"./query":42,"./storage/binary":40,"./storage/custom":45,"./storage/mssql":40,"./storage/sqlite":40,"acebase-core":12}],31:[function(require,module,exports){ +},{"./node-value-types":12,"./query":15,"./storage/binary":13,"./storage/custom":18,"./storage/mssql":13,"./storage/sqlite":13,"acebase-core":38}],4:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AsyncTaskBatch = void 0; @@ -5863,7 +507,7 @@ class AsyncTaskBatch { } exports.AsyncTaskBatch = AsyncTaskBatch; -},{}],32:[function(require,module,exports){ +},{}],5:[function(require,module,exports){ "use strict"; /** ________________________________________________________________________________ @@ -5943,7 +587,7 @@ var storage_1 = require("./storage"); Object.defineProperty(exports, "StorageSettings", { enumerable: true, get: function () { return storage_1.StorageSettings; } }); Object.defineProperty(exports, "SchemaValidationError", { enumerable: true, get: function () { return storage_1.SchemaValidationError; } }); -},{"./acebase-browser":28,"./acebase-local":29,"./storage":52,"./storage/binary":40,"./storage/custom":45,"./storage/mssql":40,"./storage/sqlite":40,"acebase-core":12}],33:[function(require,module,exports){ +},{"./acebase-browser":1,"./acebase-local":2,"./storage":25,"./storage/binary":13,"./storage/custom":18,"./storage/mssql":13,"./storage/sqlite":13,"acebase-core":38}],6:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IPCPeer = void 0; @@ -6079,7 +723,7 @@ class IPCPeer extends ipc_1.AceBaseIPCPeer { } exports.IPCPeer = IPCPeer; -},{"./ipc":34,"acebase-core":12}],34:[function(require,module,exports){ +},{"./ipc":7,"acebase-core":38}],7:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AceBaseIPCPeer = exports.AceBaseIPCPeerExitingError = void 0; @@ -6578,7 +1222,7 @@ class AceBaseIPCPeer extends acebase_core_1.SimpleEventEmitter { } exports.AceBaseIPCPeer = AceBaseIPCPeer; -},{"../node-lock":38,"acebase-core":12}],35:[function(require,module,exports){ +},{"../node-lock":11,"acebase-core":38}],8:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RemovedNodeAddress = exports.NodeAddress = void 0; @@ -6613,7 +1257,7 @@ class RemovedNodeAddress extends NodeAddress { } exports.RemovedNodeAddress = RemovedNodeAddress; -},{}],36:[function(require,module,exports){ +},{}],9:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NodeRevisionError = exports.NodeNotFoundError = void 0; @@ -6624,7 +1268,7 @@ class NodeRevisionError extends Error { } exports.NodeRevisionError = NodeRevisionError; -},{}],37:[function(require,module,exports){ +},{}],10:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NodeInfo = void 0; @@ -6673,7 +1317,7 @@ class NodeInfo { } exports.NodeInfo = NodeInfo; -},{"./node-value-types":39,"acebase-core":12}],38:[function(require,module,exports){ +},{"./node-value-types":12,"acebase-core":38}],11:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NodeLock = exports.NodeLocker = exports.LOCK_STATE = void 0; @@ -6957,7 +1601,7 @@ class NodeLock { } exports.NodeLock = NodeLock; -},{"acebase-core":12}],39:[function(require,module,exports){ +},{"acebase-core":38}],12:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getValueType = exports.getNodeValueType = exports.getValueTypeName = exports.VALUE_TYPES = void 0; @@ -7049,9 +1693,10 @@ function getValueType(value) { } exports.getValueType = getValueType; -},{"acebase-core":12}],40:[function(require,module,exports){ +},{"acebase-core":38}],13:[function(require,module,exports){ // Not supported in current environment -},{}],41:[function(require,module,exports){ + +},{}],14:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.pfs = void 0; @@ -7061,7 +1706,7 @@ class pfs { } exports.pfs = pfs; -},{}],42:[function(require,module,exports){ +},{}],15:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.query = void 0; @@ -7791,7 +2436,7 @@ function query(api, path, query, options = { snapshots: false, include: undefine } exports.query = query; -},{"./async-task-batch":31,"./data-index":40,"./node-errors":36,"./node-value-types":39,"acebase-core":12}],43:[function(require,module,exports){ +},{"./async-task-batch":4,"./data-index":13,"./node-errors":9,"./node-value-types":12,"acebase-core":38}],16:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createIndex = void 0; @@ -7868,7 +2513,7 @@ async function createIndex(context, path, key, options) { } exports.createIndex = createIndex; -},{"../data-index":40,"../promise-fs":41,"acebase-core":12}],44:[function(require,module,exports){ +},{"../data-index":13,"../promise-fs":14,"acebase-core":38}],17:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CustomStorageHelpers = void 0; @@ -7937,7 +2582,7 @@ class CustomStorageHelpers { } exports.CustomStorageHelpers = CustomStorageHelpers; -},{"acebase-core":12}],45:[function(require,module,exports){ +},{"acebase-core":38}],18:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CustomStorage = exports.CustomStorageNodeInfo = exports.CustomStorageNodeAddress = exports.CustomStorageSettings = exports.CustomStorageTransaction = exports.ICustomStorageNode = exports.ICustomStorageNodeMetaData = exports.CustomStorageHelpers = void 0; @@ -9151,7 +3796,7 @@ class CustomStorage extends index_1.Storage { } exports.CustomStorage = CustomStorage; -},{"../../node-address":35,"../../node-errors":36,"../../node-info":37,"../../node-lock":38,"../../node-value-types":39,"../index":52,"./helpers":44,"acebase-core":12}],46:[function(require,module,exports){ +},{"../../node-address":8,"../../node-errors":9,"../../node-info":10,"../../node-lock":11,"../../node-value-types":12,"../index":25,"./helpers":17,"acebase-core":38}],19:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createIndexedDBInstance = void 0; @@ -9229,7 +3874,7 @@ function createIndexedDBInstance(dbname, init = {}) { } exports.createIndexedDBInstance = createIndexedDBInstance; -},{"..":45,"../../..":32,"./settings":47,"./transaction":48,"acebase-core":12}],47:[function(require,module,exports){ +},{"..":18,"../../..":5,"./settings":20,"./transaction":21,"acebase-core":38}],20:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IndexedDBStorageSettings = void 0; @@ -9273,7 +3918,7 @@ class IndexedDBStorageSettings extends __1.StorageSettings { } exports.IndexedDBStorageSettings = IndexedDBStorageSettings; -},{"../..":52}],48:[function(require,module,exports){ +},{"../..":25}],21:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IndexedDBStorageTransaction = void 0; @@ -9500,7 +4145,7 @@ class IndexedDBStorageTransaction extends __1.CustomStorageTransaction { } exports.IndexedDBStorageTransaction = IndexedDBStorageTransaction; -},{"..":45}],49:[function(require,module,exports){ +},{"..":18}],22:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createLocalStorageInstance = exports.LocalStorageTransaction = exports.LocalStorageSettings = void 0; @@ -9541,7 +4186,7 @@ function createLocalStorageInstance(dbname, init = {}) { } exports.createLocalStorageInstance = createLocalStorageInstance; -},{"..":45,"../../..":32,"./settings":50,"./transaction":51}],50:[function(require,module,exports){ +},{"..":18,"../../..":5,"./settings":23,"./transaction":24}],23:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LocalStorageSettings = void 0; @@ -9583,7 +4228,7 @@ class LocalStorageSettings extends __1.StorageSettings { } exports.LocalStorageSettings = LocalStorageSettings; -},{"../..":52}],51:[function(require,module,exports){ +},{"../..":25}],24:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LocalStorageTransaction = void 0; @@ -9677,7 +4322,7 @@ class LocalStorageTransaction extends __1.CustomStorageTransaction { } exports.LocalStorageTransaction = LocalStorageTransaction; -},{"..":45}],52:[function(require,module,exports){ +},{"..":18}],25:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Storage = exports.StorageSettings = exports.SchemaValidationError = void 0; @@ -11748,12 +6393,5368 @@ class Storage extends acebase_core_1.SimpleEventEmitter { } exports.Storage = Storage; -},{"../data-index":40,"../ipc":33,"../node-errors":36,"../node-info":37,"../node-value-types":39,"../promise-fs":41,"./indexes":53,"acebase-core":12}],53:[function(require,module,exports){ +},{"../data-index":13,"../ipc":6,"../node-errors":9,"../node-info":10,"../node-value-types":12,"../promise-fs":14,"./indexes":26,"acebase-core":38}],26:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createIndex = void 0; var create_index_1 = require("./create-index"); Object.defineProperty(exports, "createIndex", { enumerable: true, get: function () { return create_index_1.createIndex; } }); -},{"./create-index":43}]},{},[32])(32) +},{"./create-index":16}],27:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AceBaseBase = exports.AceBaseBaseSettings = void 0; +/** + ________________________________________________________________________________ + + ___ ______ + / _ \ | ___ \ + / /_\ \ ___ ___| |_/ / __ _ ___ ___ + | _ |/ __/ _ \ ___ \/ _` / __|/ _ \ + | | | | (_| __/ |_/ / (_| \__ \ __/ + \_| |_/\___\___\____/ \__,_|___/\___| + realtime database + + Copyright 2018-2022 by Ewout Stortenbeker (me@appy.one) + Published under MIT license + + See docs at https://github.com/appy-one/acebase + ________________________________________________________________________________ + +*/ +const simple_event_emitter_1 = require("./simple-event-emitter"); +const data_reference_1 = require("./data-reference"); +const type_mappings_1 = require("./type-mappings"); +const optional_observable_1 = require("./optional-observable"); +const debug_1 = require("./debug"); +const simple_colors_1 = require("./simple-colors"); +class AceBaseBaseSettings { + constructor(options) { + /** + * What level to use for console logging. + * @default 'log' + */ + this.logLevel = 'log'; + /** + * Whether to use colors in the console logs output + * @default true + */ + this.logColors = true; + /** + * @internal (for internal use) + */ + this.info = 'realtime database'; + /** + * You can turn this on if you are a sponsor. See https://github.com/appy-one/acebase/discussions/100 for more info + */ + this.sponsor = false; + if (typeof options !== 'object') { + options = {}; + } + if (typeof options.logLevel === 'string') { + this.logLevel = options.logLevel; + } + if (typeof options.logColors === 'boolean') { + this.logColors = options.logColors; + } + if (typeof options.info === 'string') { + this.info = options.info; + } + if (typeof options.sponsor === 'boolean') { + this.sponsor = options.sponsor; + } + } +} +exports.AceBaseBaseSettings = AceBaseBaseSettings; +class AceBaseBase extends simple_event_emitter_1.SimpleEventEmitter { + /** + * @param dbname Name of the database to open or create + */ + constructor(dbname, options = {}) { + super(); + this._ready = false; + options = new AceBaseBaseSettings(options); + this.name = dbname; + // Setup console logging + this.debug = new debug_1.DebugLogger(options.logLevel, `[${dbname}]`); + // Enable/disable logging with colors + (0, simple_colors_1.SetColorsEnabled)(options.logColors); + // ASCI art: http://patorjk.com/software/taag/#p=display&f=Doom&t=AceBase + const logoStyle = [simple_colors_1.ColorStyle.magenta, simple_colors_1.ColorStyle.bold]; + const logo = ' ___ ______ ' + '\n' + + ' / _ \\ | ___ \\ ' + '\n' + + ' / /_\\ \\ ___ ___| |_/ / __ _ ___ ___ ' + '\n' + + ' | _ |/ __/ _ \\ ___ \\/ _` / __|/ _ \\' + '\n' + + ' | | | | (_| __/ |_/ / (_| \\__ \\ __/' + '\n' + + ' \\_| |_/\\___\\___\\____/ \\__,_|___/\\___|'; + const info = (options.info ? ''.padStart(40 - options.info.length, ' ') + options.info + '\n' : ''); + if (!options.sponsor) { + // if you are a sponsor, you can switch off the "AceBase banner ad" + this.debug.write(logo.colorize(logoStyle)); + info && this.debug.write(info.colorize(simple_colors_1.ColorStyle.magenta)); + } + // Setup type mapping functionality + this.types = new type_mappings_1.TypeMappings(this); + this.once('ready', () => { + // console.log(`database "${dbname}" (${this.constructor.name}) is ready to use`); + this._ready = true; + }); + } + /** + * Waits for the database to be ready before running your callback. + * @param callback (optional) callback function that is called when the database is ready to be used. You can also use the returned promise. + * @returns returns a promise that resolves when ready + */ + async ready(callback) { + if (!this._ready) { + // Wait for ready event + await new Promise(resolve => this.on('ready', resolve)); + } + callback === null || callback === void 0 ? void 0 : callback(); + } + get isReady() { + return this._ready; + } + /** + * Allow specific observable implementation to be used + * @param ObservableImpl Implementation to use + */ + setObservable(ObservableImpl) { + (0, optional_observable_1.setObservable)(ObservableImpl); + } + /** + * Creates a reference to a node + * @param path + * @returns reference to the requested node + */ + ref(path) { + return new data_reference_1.DataReference(this, path); + } + /** + * Get a reference to the root database node + * @returns reference to root node + */ + get root() { + return this.ref(''); + } + /** + * Creates a query on the requested node + * @param path + * @returns query for the requested node + */ + query(path) { + const ref = new data_reference_1.DataReference(this, path); + return new data_reference_1.DataReferenceQuery(ref); + } + get indexes() { + return { + /** + * Gets all indexes + */ + get: () => { + return this.api.getIndexes(); + }, + /** + * Creates an index on "key" for all child nodes at "path". If the index already exists, nothing happens. + * Example: creating an index on all "name" keys of child objects of path "system/users", + * will index "system/users/user1/name", "system/users/user2/name" etc. + * You can also use wildcard paths to enable indexing and quering of fragmented data. + * Example: path "users/*\/posts", key "title": will index all "title" keys in all posts of all users. + * @param path path to the container node + * @param key name of the key to index every container child node + * @param options any additional options + */ + create: (path, key, options) => { + return this.api.createIndex(path, key, options); + }, + /** + * Deletes an existing index from the database + */ + delete: async (filePath) => { + return this.api.deleteIndex(filePath); + }, + }; + } + get schema() { + return { + get: (path) => { + return this.api.getSchema(path); + }, + set: (path, schema) => { + return this.api.setSchema(path, schema); + }, + all: () => { + return this.api.getSchemas(); + }, + check: (path, value, isUpdate) => { + return this.api.validateSchema(path, value, isUpdate); + }, + }; + } +} +exports.AceBaseBase = AceBaseBase; + +},{"./data-reference":34,"./debug":36,"./optional-observable":40,"./simple-colors":47,"./simple-event-emitter":48,"./type-mappings":51}],28:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Api = void 0; +class NotImplementedError extends Error { + constructor(name) { super(`${name} is not implemented`); } +} +/** + * Refactor to type/interface once acebase and acebase-client have been ported to TS + */ +class Api { + // eslint-disable-next-line @typescript-eslint/no-empty-function + constructor() { } + /** + * Provides statistics + * @param options + */ + stats(options) { throw new NotImplementedError('stats'); } + /** + * @param path + * @param event event to subscribe to ("value", "child_added" etc) + * @param callback callback function + */ + subscribe(path, event, callback, settings) { throw new NotImplementedError('subscribe'); } + unsubscribe(path, event, callback) { throw new NotImplementedError('unsubscribe'); } + update(path, updates, options) { throw new NotImplementedError('update'); } + set(path, value, options) { throw new NotImplementedError('set'); } + get(path, options) { throw new NotImplementedError('get'); } + transaction(path, callback, options) { throw new NotImplementedError('transaction'); } + exists(path) { throw new NotImplementedError('exists'); } + query(path, query, options) { throw new NotImplementedError('query'); } + reflect(path, type, args) { throw new NotImplementedError('reflect'); } + export(path, write, options) { throw new NotImplementedError('export'); } + import(path, read, options) { throw new NotImplementedError('import'); } + /** Creates an index on key for all child nodes at path */ + createIndex(path, key, options) { throw new NotImplementedError('createIndex'); } + getIndexes() { throw new NotImplementedError('getIndexes'); } + deleteIndex(filePath) { throw new NotImplementedError('deleteIndex'); } + setSchema(path, schema) { throw new NotImplementedError('setSchema'); } + getSchema(path) { throw new NotImplementedError('getSchema'); } + getSchemas() { throw new NotImplementedError('getSchemas'); } + validateSchema(path, value, isUpdate) { throw new NotImplementedError('validateSchema'); } + getMutations(filter) { throw new NotImplementedError('getMutations'); } + getChanges(filter) { throw new NotImplementedError('getChanges'); } +} +exports.Api = Api; + +},{}],29:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ascii85 = void 0; +function c(input, length, result) { + const b = [0, 0, 0, 0, 0]; + for (let i = 0; i < length; i += 4) { + let n = ((input[i] * 256 + input[i + 1]) * 256 + input[i + 2]) * 256 + input[i + 3]; + if (!n) { + result.push('z'); + } + else { + for (let j = 0; j < 5; b[j++] = n % 85 + 33, n = Math.floor(n / 85)) + ; + result.push(String.fromCharCode(b[4], b[3], b[2], b[1], b[0])); + } + } +} +function encode(arr) { + // summary: encodes input data in ascii85 string + // input: ArrayLike + const input = arr, result = [], remainder = input.length % 4, length = input.length - remainder; + c(input, length, result); + if (remainder) { + const t = new Uint8Array(4); + t.set(input.slice(length), 0); + c(t, 4, result); + let x = result.pop(); + if (x == 'z') { + x = '!!!!!'; + } + result.push(x.substr(0, remainder + 1)); + } + let ret = result.join(''); // String + ret = '<~' + ret + '~>'; + return ret; +} +exports.ascii85 = { + encode: function (arr) { + if (arr instanceof ArrayBuffer) { + arr = new Uint8Array(arr, 0, arr.byteLength); + } + return encode(arr); + }, + decode: function (input) { + // summary: decodes the input string back to an ArrayBuffer + // input: String: the input string to decode + if (!input.startsWith('<~') || !input.endsWith('~>')) { + throw new Error('Invalid input string'); + } + input = input.substr(2, input.length - 4); + const n = input.length, r = [], b = [0, 0, 0, 0, 0]; + let t, x, y, d; + for (let i = 0; i < n; ++i) { + if (input.charAt(i) == 'z') { + r.push(0, 0, 0, 0); + continue; + } + for (let j = 0; j < 5; ++j) { + b[j] = input.charCodeAt(i + j) - 33; + } + d = n - i; + if (d < 5) { + for (let j = d; j < 4; b[++j] = 0) + ; + b[d] = 85; + } + t = (((b[0] * 85 + b[1]) * 85 + b[2]) * 85 + b[3]) * 85 + b[4]; + x = t & 255; + t >>>= 8; + y = t & 255; + t >>>= 8; + r.push(t >>> 8, t & 255, y, x); + for (let j = d; j < 5; ++j, r.pop()) + ; + i += 4; + } + const data = new Uint8Array(r); + return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength); + }, +}; + +},{}],30:[function(require,module,exports){ +"use strict"; +var _a, _b; +Object.defineProperty(exports, "__esModule", { value: true }); +const pad_1 = require("../pad"); +const env = typeof window === 'object' ? window : self, globalCount = Object.keys(env).length, mimeTypesLength = (_b = (_a = navigator.mimeTypes) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0, clientId = (0, pad_1.default)((mimeTypesLength + + navigator.userAgent.length).toString(36) + + globalCount.toString(36), 4); +function fingerprint() { + return clientId; +} +exports.default = fingerprint; + +},{"../pad":32}],31:[function(require,module,exports){ +"use strict"; +/** + * cuid.js + * Collision-resistant UID generator for browsers and node. + * Sequential for fast db lookups and recency sorting. + * Safe for element IDs and server-side lookups. + * + * Extracted from CLCTR + * + * Copyright (c) Eric Elliott 2012 + * MIT License + * + * time biasing added by Ewout Stortenbeker for AceBase + */ +Object.defineProperty(exports, "__esModule", { value: true }); +const fingerprint_1 = require("./fingerprint"); +const pad_1 = require("./pad"); +let c = 0; +const blockSize = 4, base = 36, discreteValues = Math.pow(base, blockSize); +function randomBlock() { + return (0, pad_1.default)((Math.random() * discreteValues << 0).toString(base), blockSize); +} +function safeCounter() { + c = c < discreteValues ? c : 0; + c++; // this is not subliminal + return c - 1; +} +function cuid(timebias = 0) { + // Starting with a lowercase letter makes + // it HTML element ID friendly. + const letter = 'c', // hard-coded allows for sequential access + // timestamp + // warning: this exposes the exact date and time + // that the uid was created. + // NOTES Ewout: + // - added timebias + // - at '2059/05/25 19:38:27.456', timestamp will become 1 character larger! + timestamp = (new Date().getTime() + timebias).toString(base), + // Prevent same-machine collisions. + counter = (0, pad_1.default)(safeCounter().toString(base), blockSize), + // A few chars to generate distinct ids for different + // clients (so different computers are far less + // likely to generate the same id) + print = (0, fingerprint_1.default)(), + // Grab some more chars from Math.random() + random = randomBlock() + randomBlock(); + return letter + timestamp + counter + print + random; +} +exports.default = cuid; +// Not using slugs, removed code + +},{"./fingerprint":30,"./pad":32}],32:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +function pad(num, size) { + const s = '000000000' + num; + return s.substr(s.length - size); +} +exports.default = pad; + +},{}],33:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OrderedCollectionProxy = exports.proxyAccess = exports.LiveDataProxy = void 0; +const utils_1 = require("./utils"); +const data_reference_1 = require("./data-reference"); +const data_snapshot_1 = require("./data-snapshot"); +const path_reference_1 = require("./path-reference"); +const id_1 = require("./id"); +const optional_observable_1 = require("./optional-observable"); +const process_1 = require("./process"); +const path_info_1 = require("./path-info"); +const simple_event_emitter_1 = require("./simple-event-emitter"); +class RelativeNodeTarget extends Array { + static areEqual(t1, t2) { + return t1.length === t2.length && t1.every((key, i) => t2[i] === key); + } + static isAncestor(ancestor, other) { + return ancestor.length < other.length && ancestor.every((key, i) => other[i] === key); + } + static isDescendant(descendant, other) { + return descendant.length > other.length && other.every((key, i) => descendant[i] === key); + } +} +const isProxy = Symbol('isProxy'); +class LiveDataProxy { + /** + * Creates a live data proxy for the given reference. The data of the reference's path will be loaded, and kept in-sync + * with live data by listening for 'mutations' events. Any changes made to the value by the client will be synced back + * to the database. + * @param ref DataReference to create proxy for. + * @param options proxy initialization options + * be written to the database. + */ + static async create(ref, options) { + var _a; + ref = new data_reference_1.DataReference(ref.db, ref.path); // Use copy to prevent context pollution on original reference + let cache, loaded = false; + let latestCursor = options === null || options === void 0 ? void 0 : options.cursor; + let proxy; + const proxyId = id_1.ID.generate(); //ref.push().key; + // let onMutationCallback: ProxyObserveMutationsCallback; + // let onErrorCallback: ProxyObserveErrorCallback = err => { + // console.error(err.message, err.details); + // }; + const clientSubscriptions = []; + const clientEventEmitter = new simple_event_emitter_1.SimpleEventEmitter(); + clientEventEmitter.on('cursor', (cursor) => latestCursor = cursor); + clientEventEmitter.on('error', (err) => { + console.error(err.message, err.details); + }); + const applyChange = (keys, newValue) => { + // Make changes to cache + if (keys.length === 0) { + cache = newValue; + return true; + } + const allowCreation = false; //cache === null; // If the proxy'd target did not exist upon load, we must allow it to be created now. + if (allowCreation) { + cache = typeof keys[0] === 'number' ? [] : {}; + } + let target = cache; + const trailKeys = keys.slice(); + while (trailKeys.length > 1) { + const key = trailKeys.shift(); + if (!(key in target)) { + if (allowCreation) { + target[key] = typeof key === 'number' ? [] : {}; + } + else { + // Have we missed an event, or are local pending mutations creating this conflict? + return false; // Do not proceed + } + } + target = target[key]; + } + const prop = trailKeys.shift(); + if (newValue === null) { + // Remove it + target instanceof Array ? target.splice(prop, 1) : delete target[prop]; + } + else { + // Set or update it + target[prop] = newValue; + } + return true; + }; + // Subscribe to mutations events on the target path + const syncFallback = async () => { + if (!loaded) { + return; + } + await reload(); + }; + const subscription = ref.on('mutations', { syncFallback }).subscribe(async (snap) => { + var _a; + if (!loaded) { + return; + } + const context = snap.context(); + const isRemote = ((_a = context.acebase_proxy) === null || _a === void 0 ? void 0 : _a.id) !== proxyId; + if (!isRemote) { + return; // Update was done through this proxy, no need to update cache or trigger local value subscriptions + } + const mutations = snap.val(false); + const proceed = mutations.every(mutation => { + if (!applyChange(mutation.target, mutation.val)) { + return false; + } + // if (onMutationCallback) { + const changeRef = mutation.target.reduce((ref, key) => ref.child(key), ref); + const changeSnap = new data_snapshot_1.DataSnapshot(changeRef, mutation.val, false, mutation.prev, snap.context()); + // onMutationCallback(changeSnap, isRemote); // onMutationCallback uses try/catch for client callback + clientEventEmitter.emit('mutation', { snapshot: changeSnap, isRemote }); + // } + return true; + }); + if (proceed) { + clientEventEmitter.emit('cursor', context.acebase_cursor); // // NOTE: cursor is only present in mutations done remotely. For our own updates, server cursors are returned by ref.set and ref.update + localMutationsEmitter.emit('mutations', { origin: 'remote', snap }); + } + else { + console.warn(`Cached value of live data proxy on "${ref.path}" appears outdated, will be reloaded`); + await reload(); + } + }); + // Setup updating functionality: enqueue all updates, process them at next tick in the order they were issued + let processPromise = Promise.resolve(); + const mutationQueue = []; + const transactions = []; + const pushLocalMutations = async () => { + // Sync all local mutations that are not in a transaction + const mutations = []; + for (let i = 0, m = mutationQueue[0]; i < mutationQueue.length; i++, m = mutationQueue[i]) { + if (!transactions.find(t => RelativeNodeTarget.areEqual(t.target, m.target) || RelativeNodeTarget.isAncestor(t.target, m.target))) { + mutationQueue.splice(i, 1); + i--; + mutations.push(m); + } + } + if (mutations.length === 0) { + return; + } + // Add current (new) values to mutations + mutations.forEach(mutation => { + mutation.value = (0, utils_1.cloneObject)(getTargetValue(cache, mutation.target)); + }); + // Run local onMutation & onChange callbacks in the next tick + process_1.default.nextTick(() => { + // Run onMutation callback for each changed node + const context = { acebase_proxy: { id: proxyId, source: 'update' } }; + // if (onMutationCallback) { + mutations.forEach(mutation => { + const mutationRef = mutation.target.reduce((ref, key) => ref.child(key), ref); + const mutationSnap = new data_snapshot_1.DataSnapshot(mutationRef, mutation.value, false, mutation.previous, context); + // onMutationCallback(mutationSnap, false); + clientEventEmitter.emit('mutation', { snapshot: mutationSnap, isRemote: false }); + }); + // } + // Notify local subscribers + const snap = new data_snapshot_1.MutationsDataSnapshot(ref, mutations.map(m => ({ target: m.target, val: m.value, prev: m.previous })), context); + localMutationsEmitter.emit('mutations', { origin: 'local', snap }); + }); + // Update database async + // const batchId = ID.generate(); + processPromise = mutations + .reduce((mutations, m, i, arr) => { + // Only keep top path mutations to prevent unneccessary child path updates + if (!arr.some(other => RelativeNodeTarget.isAncestor(other.target, m.target))) { + mutations.push(m); + } + return mutations; + }, []) + .reduce((updates, m) => { + // Prepare db updates + const target = m.target; + if (target.length === 0) { + // Overwrite this proxy's root value + updates.push({ ref, target, value: cache, type: 'set', previous: m.previous }); + } + else { + const parentTarget = target.slice(0, -1); + const key = target.slice(-1)[0]; + const parentRef = parentTarget.reduce((ref, key) => ref.child(key), ref); + const parentUpdate = updates.find(update => update.ref.path === parentRef.path); + const cacheValue = getTargetValue(cache, target); // m.value? + const prevValue = m.previous; + if (parentUpdate) { + parentUpdate.value[key] = cacheValue; + parentUpdate.previous[key] = prevValue; + } + else { + updates.push({ ref: parentRef, target: parentTarget, value: { [key]: cacheValue }, type: 'update', previous: { [key]: prevValue } }); + } + } + return updates; + }, []) + .reduce(async (promise, update /*, i, updates */) => { + // Execute db update + // i === 0 && console.log(`Proxy: processing ${updates.length} db updates to paths:`, updates.map(update => update.ref.path)); + const context = { + acebase_proxy: { + id: proxyId, + source: update.type, + // update_id: ID.generate(), + // batch_id: batchId, + // batch_updates: updates.length + }, + }; + await promise; + await update.ref + .context(context)[update.type](update.value) // .set or .update + .catch(err => { + clientEventEmitter.emit('error', { source: 'update', message: `Error processing update of "/${ref.path}"`, details: err }); + // console.warn(`Proxy could not update DB, should rollback (${update.type}) the proxy value of "${update.ref.path}" to: `, update.previous); + const context = { acebase_proxy: { id: proxyId, source: 'update-rollback' } }; + const mutations = []; + if (update.type === 'set') { + setTargetValue(cache, update.target, update.previous); + const mutationSnap = new data_snapshot_1.DataSnapshot(update.ref, update.previous, false, update.value, context); + clientEventEmitter.emit('mutation', { snapshot: mutationSnap, isRemote: false }); + mutations.push({ target: update.target, val: update.previous, prev: update.value }); + } + else { + // update + Object.keys(update.previous).forEach(key => { + setTargetValue(cache, update.target.concat(key), update.previous[key]); + const mutationSnap = new data_snapshot_1.DataSnapshot(update.ref.child(key), update.previous[key], false, update.value[key], context); + clientEventEmitter.emit('mutation', { snapshot: mutationSnap, isRemote: false }); + mutations.push({ target: update.target.concat(key), val: update.previous[key], prev: update.value[key] }); + }); + } + // Run onMutation callback for each node being rolled back + mutations.forEach(m => { + const mutationRef = m.target.reduce((ref, key) => ref.child(key), ref); + const mutationSnap = new data_snapshot_1.DataSnapshot(mutationRef, m.val, false, m.prev, context); + clientEventEmitter.emit('mutation', { snapshot: mutationSnap, isRemote: false }); + }); + // Notify local subscribers: + const snap = new data_snapshot_1.MutationsDataSnapshot(update.ref, mutations, context); + localMutationsEmitter.emit('mutations', { origin: 'local', snap }); + }); + if (update.ref.cursor) { + // Should also be available in context.acebase_cursor now + clientEventEmitter.emit('cursor', update.ref.cursor); + } + }, processPromise); + await processPromise; + }; + let syncInProgress = false; + const syncPromises = []; + const syncCompleted = () => { + let resolve; + const promise = new Promise(rs => resolve = rs); + syncPromises.push({ resolve }); + return promise; + }; + let processQueueTimeout = null; + const scheduleSync = () => { + if (!processQueueTimeout) { + processQueueTimeout = setTimeout(async () => { + syncInProgress = true; + processQueueTimeout = null; + await pushLocalMutations(); + syncInProgress = false; + syncPromises.splice(0).forEach(p => p.resolve()); + }, 0); + } + }; + const flagOverwritten = (target) => { + if (!mutationQueue.find(m => RelativeNodeTarget.areEqual(m.target, target))) { + mutationQueue.push({ target, previous: (0, utils_1.cloneObject)(getTargetValue(cache, target)) }); + } + // schedule database updates + scheduleSync(); + }; + const localMutationsEmitter = new simple_event_emitter_1.SimpleEventEmitter(); + const addOnChangeHandler = (target, callback) => { + const isObject = val => val !== null && typeof val === 'object'; + const mutationsHandler = async (details) => { + var _a; + const { snap, origin } = details; + const context = snap.context(); + const causedByOurProxy = ((_a = context.acebase_proxy) === null || _a === void 0 ? void 0 : _a.id) === proxyId; + if (details.origin === 'remote' && causedByOurProxy) { + // Any local changes already triggered subscription callbacks + console.error('DEV ISSUE: mutationsHandler was called from remote event originating from our own proxy'); + return; + } + const mutations = snap.val(false).filter(mutation => { + // Keep mutations impacting the subscribed target: mutations on target, or descendant or ancestor of target + return mutation.target.slice(0, target.length).every((key, i) => target[i] === key); + }); + if (mutations.length === 0) { + return; + } + let newValue, previousValue; + // If there is a mutation on the target itself, or parent/ancestor path, there can only be one. We can take a shortcut + const singleMutation = mutations.find(m => m.target.length <= target.length); + if (singleMutation) { + const trailKeys = target.slice(singleMutation.target.length); + newValue = trailKeys.reduce((val, key) => !isObject(val) || !(key in val) ? null : val[key], singleMutation.val); + previousValue = trailKeys.reduce((val, key) => !isObject(val) || !(key in val) ? null : val[key], singleMutation.prev); + } + else { + // All mutations are on children/descendants of our target + // Construct new & previous values by combining cache and snapshot + const currentValue = getTargetValue(cache, target); + newValue = (0, utils_1.cloneObject)(currentValue); + previousValue = (0, utils_1.cloneObject)(newValue); + mutations.forEach(mutation => { + // mutation.target is relative to proxy root + const trailKeys = mutation.target.slice(target.length); + for (let i = 0, val = newValue, prev = previousValue; i < trailKeys.length; i++) { // arr = PathInfo.getPathKeys(mutationPath).slice(PathInfo.getPathKeys(targetRef.path).length) + const last = i + 1 === trailKeys.length, key = trailKeys[i]; + if (last) { + val[key] = mutation.val; + if (val[key] === null) { + delete val[key]; + } + prev[key] = mutation.prev; + if (prev[key] === null) { + delete prev[key]; + } + } + else { + val = val[key] = key in val ? val[key] : {}; + prev = prev[key] = key in prev ? prev[key] : {}; + } + } + }); + } + process_1.default.nextTick(() => { + // Run callback with read-only (frozen) values in next tick + let keepSubscription = true; + try { + keepSubscription = false !== callback(Object.freeze(newValue), Object.freeze(previousValue), !causedByOurProxy, context); + } + catch (err) { + clientEventEmitter.emit('error', { source: origin === 'remote' ? 'remote_update' : 'local_update', message: 'Error running subscription callback', details: err }); + } + if (keepSubscription === false) { + stop(); + } + }); + }; + localMutationsEmitter.on('mutations', mutationsHandler); + const stop = () => { + localMutationsEmitter.off('mutations').off('mutations', mutationsHandler); + clientSubscriptions.splice(clientSubscriptions.findIndex(cs => cs.stop === stop), 1); + }; + clientSubscriptions.push({ target, stop }); + return { stop }; + }; + const handleFlag = (flag, target, args) => { + if (flag === 'write') { + return flagOverwritten(target); + } + else if (flag === 'onChange') { + return addOnChangeHandler(target, args.callback); + } + else if (flag === 'subscribe' || flag === 'observe') { + const subscribe = subscriber => { + const currentValue = getTargetValue(cache, target); + subscriber.next(currentValue); + const subscription = addOnChangeHandler(target, (value /*, previous, isRemote, context */) => { + subscriber.next(value); + }); + return function unsubscribe() { + subscription.stop(); + }; + }; + if (flag === 'subscribe') { + return subscribe; + } + // Try to load Observable + const Observable = (0, optional_observable_1.getObservable)(); + return new Observable(subscribe); + } + else if (flag === 'transaction') { + const hasConflictingTransaction = transactions.some(t => RelativeNodeTarget.areEqual(target, t.target) || RelativeNodeTarget.isAncestor(target, t.target) || RelativeNodeTarget.isDescendant(target, t.target)); + if (hasConflictingTransaction) { + // TODO: Wait for this transaction to finish, then try again + return Promise.reject(new Error('Cannot start transaction because it conflicts with another transaction')); + } + return new Promise(async (resolve) => { + // If there are pending mutations on target (or deeper), wait until they have been synchronized + const hasPendingMutations = mutationQueue.some(m => RelativeNodeTarget.areEqual(target, m.target) || RelativeNodeTarget.isAncestor(target, m.target)); + if (hasPendingMutations) { + if (!syncInProgress) { + scheduleSync(); + } + await syncCompleted(); + } + const tx = { target, status: 'started', transaction: null }; + transactions.push(tx); + tx.transaction = { + get status() { return tx.status; }, + get completed() { return tx.status !== 'started'; }, + get mutations() { + return mutationQueue.filter(m => RelativeNodeTarget.areEqual(tx.target, m.target) || RelativeNodeTarget.isAncestor(tx.target, m.target)); + }, + get hasMutations() { + return this.mutations.length > 0; + }, + async commit() { + if (this.completed) { + throw new Error(`Transaction has completed already (status '${tx.status}')`); + } + tx.status = 'finished'; + transactions.splice(transactions.indexOf(tx), 1); + if (syncInProgress) { + // Currently syncing without our mutations + await syncCompleted(); + } + scheduleSync(); + await syncCompleted(); + }, + rollback() { + // Remove mutations from queue + if (this.completed) { + throw new Error(`Transaction has completed already (status '${tx.status}')`); + } + tx.status = 'canceled'; + const mutations = []; + for (let i = 0; i < mutationQueue.length; i++) { + const m = mutationQueue[i]; + if (RelativeNodeTarget.areEqual(tx.target, m.target) || RelativeNodeTarget.isAncestor(tx.target, m.target)) { + mutationQueue.splice(i, 1); + i--; + mutations.push(m); + } + } + // Replay mutations in reverse order + mutations.reverse() + .forEach(m => { + if (m.target.length === 0) { + cache = m.previous; + } + else { + setTargetValue(cache, m.target, m.previous); + } + }); + // Remove transaction + transactions.splice(transactions.indexOf(tx), 1); + }, + }; + resolve(tx.transaction); + }); + } + }; + const snap = await ref.get({ cache_mode: 'allow', cache_cursor: options === null || options === void 0 ? void 0 : options.cursor }); + // const gotOfflineStartValue = snap.context().acebase_origin === 'cache'; + // if (gotOfflineStartValue) { + // console.warn(`Started data proxy with cached value of "${ref.path}", check if its value is reloaded on next connection!`); + // } + if (snap.context().acebase_origin !== 'cache') { + clientEventEmitter.emit('cursor', (_a = ref.cursor) !== null && _a !== void 0 ? _a : null); // latestCursor = snap.context().acebase_cursor ?? null; + } + loaded = true; + cache = snap.val(); + if (cache === null && typeof (options === null || options === void 0 ? void 0 : options.defaultValue) !== 'undefined') { + cache = options.defaultValue; + const context = { + acebase_proxy: { + id: proxyId, + source: 'default', + // update_id: ID.generate() + }, + }; + await ref.context(context).set(cache); + } + proxy = createProxy({ root: { ref, get cache() { return cache; } }, target: [], id: proxyId, flag: handleFlag }); + const assertProxyAvailable = () => { + if (proxy === null) { + throw new Error('Proxy was destroyed'); + } + }; + const reload = async () => { + // Manually reloads current value when cache is out of sync, which should only + // be able to happen if an AceBaseClient is used without cache database, + // and the connection to the server was lost for a while. In all other cases, + // there should be no need to call this method. + assertProxyAvailable(); + mutationQueue.splice(0); // Remove pending mutations. Will be empty in production, but might not be while debugging, leading to weird behaviour. + const snap = await ref.get({ allow_cache: false }); + const oldVal = cache, newVal = snap.val(); + cache = newVal; + // Compare old and new values + const mutations = (0, utils_1.getMutations)(oldVal, newVal); + if (mutations.length === 0) { + return; // Nothing changed + } + // Run onMutation callback for each changed node + const context = snap.context(); // context might contain acebase_cursor if server support that + context.acebase_proxy = { id: proxyId, source: 'reload' }; + // if (onMutationCallback) { + mutations.forEach(m => { + const targetRef = getTargetRef(ref, m.target); + const newSnap = new data_snapshot_1.DataSnapshot(targetRef, m.val, m.val === null, m.prev, context); + clientEventEmitter.emit('mutation', { snapshot: newSnap, isRemote: true }); + }); + // } + // Notify local subscribers + const mutationsSnap = new data_snapshot_1.MutationsDataSnapshot(ref, mutations, context); + localMutationsEmitter.emit('mutations', { origin: 'local', snap: mutationsSnap }); + }; + return { + async destroy() { + await processPromise; + const promises = [ + subscription.stop(), + ...clientSubscriptions.map(cs => cs.stop()), + ]; + await Promise.all(promises); + ['cursor', 'mutation', 'error'].forEach(event => clientEventEmitter.off(event)); + cache = null; // Remove cache + proxy = null; + }, + stop() { + this.destroy(); + }, + get value() { + assertProxyAvailable(); + return proxy; + }, + get hasValue() { + assertProxyAvailable(); + return cache !== null; + }, + set value(val) { + // Overwrite the value of the proxied path itself! + assertProxyAvailable(); + if (val !== null && typeof val === 'object' && val[isProxy]) { + // Assigning one proxied value to another + val = val.valueOf(); + } + flagOverwritten([]); + cache = val; + }, + get ref() { + return ref; + }, + get cursor() { + return latestCursor; + }, + reload, + onMutation(callback) { + // Fires callback each time anything changes + assertProxyAvailable(); + clientEventEmitter.off('mutation'); // Mimic legacy behaviour that overwrites handler + clientEventEmitter.on('mutation', ({ snapshot, isRemote }) => { + try { + callback(snapshot, isRemote); + } + catch (err) { + clientEventEmitter.emit('error', { source: 'mutation_callback', message: 'Error in dataproxy onMutation callback', details: err }); + } + }); + }, + onError(callback) { + // Fires callback each time anything goes wrong + assertProxyAvailable(); + clientEventEmitter.off('error'); // Mimic legacy behaviour that overwrites handler + clientEventEmitter.on('error', (err) => { + try { + callback(err); + } + catch (err) { + console.error(`Error in dataproxy onError callback: ${err.message}`); + } + }); + }, + on(event, callback) { + clientEventEmitter.on(event, callback); + }, + off(event, callback) { + clientEventEmitter.off(event, callback); + }, + }; + } +} +exports.LiveDataProxy = LiveDataProxy; +function getTargetValue(obj, target) { + let val = obj; + for (const key of target) { + val = typeof val === 'object' && val !== null && key in val ? val[key] : null; + } + return val; +} +function setTargetValue(obj, target, value) { + if (target.length === 0) { + throw new Error('Cannot update root target, caller must do that itself!'); + } + const targetObject = target.slice(0, -1).reduce((obj, key) => obj[key], obj); + const prop = target.slice(-1)[0]; + if (value === null || typeof value === 'undefined') { + // Remove it + targetObject instanceof Array ? targetObject.splice(prop, 1) : delete targetObject[prop]; + } + else { + // Set or update it + targetObject[prop] = value; + } +} +function getTargetRef(ref, target) { + // Create new DataReference to prevent context reuse + const path = path_info_1.PathInfo.get(ref.path).childPath(target); + return new data_reference_1.DataReference(ref.db, path); +} +function createProxy(context) { + const targetRef = getTargetRef(context.root.ref, context.target); + const childProxies = []; + const handler = { + get(target, prop, receiver) { + target = getTargetValue(context.root.cache, context.target); + if (typeof prop === 'symbol') { + if (prop.toString() === Symbol.iterator.toString()) { + // Use .values for @@iterator symbol + prop = 'values'; + } + else if (prop.toString() === isProxy.toString()) { + return true; + } + else { + return Reflect.get(target, prop, receiver); + } + } + if (prop === 'valueOf') { + return function valueOf() { return target; }; + } + if (target === null || typeof target !== 'object') { + throw new Error(`Cannot read property "${prop}" of ${target}. Value of path "/${targetRef.path}" is not an object (anymore)`); + } + if (target instanceof Array && typeof prop === 'string' && /^[0-9]+$/.test(prop)) { + // Proxy type definitions say prop can be a number, but this is never the case. + prop = parseInt(prop); + } + const value = target[prop]; + if (value === null) { + // Removed property. Should never happen, but if it does: + delete target[prop]; + return; // undefined + } + // Check if we have a child proxy for this property already. + // If so, and the properties' typeof value did not change, return that + const childProxy = childProxies.find(proxy => proxy.prop === prop); + if (childProxy) { + if (childProxy.typeof === typeof value) { + return childProxy.value; + } + childProxies.splice(childProxies.indexOf(childProxy), 1); + } + const proxifyChildValue = (prop) => { + const value = target[prop]; // + const childProxy = childProxies.find(child => child.prop === prop); + if (childProxy) { + if (childProxy.typeof === typeof value) { + return childProxy.value; + } + childProxies.splice(childProxies.indexOf(childProxy), 1); + } + if (typeof value !== 'object') { + // Can't proxify non-object values + return value; + } + const newChildProxy = createProxy({ root: context.root, target: context.target.concat(prop), id: context.id, flag: context.flag }); + childProxies.push({ typeof: typeof value, prop, value: newChildProxy }); + return newChildProxy; + }; + const unproxyValue = (value) => { + return value !== null && typeof value === 'object' && value[isProxy] + ? value.getTarget() + : value; + }; + // If the property contains a simple value, return it. + if (['string', 'number', 'boolean'].includes(typeof value) + || value instanceof Date + || value instanceof path_reference_1.PathReference + || value instanceof ArrayBuffer + || (typeof value === 'object' && 'buffer' in value) // Typed Arrays + ) { + return value; + } + const isArray = target instanceof Array; + if (prop === 'toString') { + return function toString() { + return `[LiveDataProxy for "${targetRef.path}"]`; + }; + } + if (typeof value === 'undefined') { + if (prop === 'push') { + // Push item to an object collection + return function push(item) { + const childRef = targetRef.push(); + context.flag('write', context.target.concat(childRef.key)); //, { previous: null } + target[childRef.key] = item; + return childRef.key; + }; + } + if (prop === 'getTarget') { + // Get unproxied readonly (but still live) version of data. + return function (warn = true) { + warn && console.warn('Use getTarget with caution - any changes will not be synchronized!'); + return target; + }; + } + if (prop === 'getRef') { + // Gets the DataReference to this data target + return function getRef() { + const ref = getTargetRef(context.root.ref, context.target); + return ref; + }; + } + if (prop === 'forEach') { + return function forEach(callback) { + const keys = Object.keys(target); + // Fix: callback with unproxied value + let stop = false; + for (let i = 0; !stop && i < keys.length; i++) { + const key = keys[i]; + const value = proxifyChildValue(key); //, target[key] + stop = callback(value, key, i) === false; + } + }; + } + if (['values', 'entries', 'keys'].includes(prop)) { + return function* generator() { + const keys = Object.keys(target); + for (const key of keys) { + if (prop === 'keys') { + yield key; + } + else { + const value = proxifyChildValue(key); //, target[key] + if (prop === 'entries') { + yield [key, value]; + } + else { + yield value; + } + } + } + }; + } + if (prop === 'toArray') { + return function toArray(sortFn) { + const arr = Object.keys(target).map(key => proxifyChildValue(key)); //, target[key] + if (sortFn) { + arr.sort(sortFn); + } + return arr; + }; + } + if (prop === 'onChanged') { + // Starts monitoring the value + return function onChanged(callback) { + return context.flag('onChange', context.target, { callback }); + }; + } + if (prop === 'subscribe') { + // Gets subscriber function to use with Observables, or custom handling + return function subscribe() { + return context.flag('subscribe', context.target); + }; + } + if (prop === 'getObservable') { + // Creates an observable for monitoring the value + return function getObservable() { + return context.flag('observe', context.target); + }; + } + if (prop === 'getOrderedCollection') { + return function getOrderedCollection(orderProperty, orderIncrement) { + return new OrderedCollectionProxy(this, orderProperty, orderIncrement); + }; + } + if (prop === 'startTransaction') { + return function startTransaction() { + return context.flag('transaction', context.target); + }; + } + if (prop === 'remove' && !isArray) { + // Removes target from object collection + return function remove() { + if (context.target.length === 0) { + throw new Error('Can\'t remove proxy root value'); + } + const parent = getTargetValue(context.root.cache, context.target.slice(0, -1)); + const key = context.target.slice(-1)[0]; + context.flag('write', context.target); + delete parent[key]; + }; + } + return; // undefined + } + else if (typeof value === 'function') { + if (isArray) { + // Handle array methods + const writeArray = (action) => { + context.flag('write', context.target); + return action(); + }; + const cleanArrayValues = values => values.map(value => { + value = unproxyValue(value); + removeVoidProperties(value); + return value; + }); + // Methods that directly change the array: + if (prop === 'push') { + return function push(...items) { + items = cleanArrayValues(items); + return writeArray(() => target.push(...items)); // push the items to the cache array + }; + } + if (prop === 'pop') { + return function pop() { + return writeArray(() => target.pop()); + }; + } + if (prop === 'splice') { + return function splice(start, deleteCount, ...items) { + items = cleanArrayValues(items); + return writeArray(() => target.splice(start, deleteCount, ...items)); + }; + } + if (prop === 'shift') { + return function shift() { + return writeArray(() => target.shift()); + }; + } + if (prop === 'unshift') { + return function unshift(...items) { + items = cleanArrayValues(items); + return writeArray(() => target.unshift(...items)); + }; + } + if (prop === 'sort') { + return function sort(compareFn) { + return writeArray(() => target.sort(compareFn)); + }; + } + if (prop === 'reverse') { + return function reverse() { + return writeArray(() => target.reverse()); + }; + } + // Methods that do not change the array themselves, but + // have callbacks that might, or return child values: + if (['indexOf', 'lastIndexOf'].includes(prop)) { + return function indexOf(item, start) { + if (item !== null && typeof item === 'object' && item[isProxy]) { + // Use unproxied value, or array.indexOf will return -1 (fixes issue #1) + item = item.getTarget(false); + } + return target[prop](item, start); + }; + } + if (['forEach', 'every', 'some', 'filter', 'map'].includes(prop)) { + return function iterate(callback) { + return target[prop]((value, i) => { + return callback(proxifyChildValue(i), i, proxy); //, value + }); + }; + } + if (['reduce', 'reduceRight'].includes(prop)) { + return function reduce(callback, initialValue) { + return target[prop]((prev, value, i) => { + return callback(prev, proxifyChildValue(i), i, proxy); //, value + }, initialValue); + }; + } + if (['find', 'findIndex'].includes(prop)) { + return function find(callback) { + let value = target[prop]((value, i) => { + return callback(proxifyChildValue(i), i, proxy); // , value + }); + if (prop === 'find' && value) { + const index = target.indexOf(value); + value = proxifyChildValue(index); //, value + } + return value; + }; + } + if (['values', 'entries', 'keys'].includes(prop)) { + return function* generator() { + for (let i = 0; i < target.length; i++) { + if (prop === 'keys') { + yield i; + } + else { + const value = proxifyChildValue(i); //, target[i] + if (prop === 'entries') { + yield [i, value]; + } + else { + yield value; + } + } + } + }; + } + } + // Other function (or not an array), should not alter its value + // return function fn(...args) { + // return target[prop](...args); + // } + return value; + } + // Proxify any other value + return proxifyChildValue(prop); //, value + }, + set(target, prop, value, receiver) { + // Eg: chats.chat1.title = 'New chat title'; + // target === chats.chat1, prop === 'title' + target = getTargetValue(context.root.cache, context.target); + if (typeof prop === 'symbol') { + return Reflect.set(target, prop, value, receiver); + } + if (target === null || typeof target !== 'object') { + throw new Error(`Cannot set property "${prop}" of ${target}. Value of path "/${targetRef.path}" is not an object`); + } + if (target instanceof Array && typeof prop === 'string') { + if (!/^[0-9]+$/.test(prop)) { + throw new Error(`Cannot set property "${prop}" on array value of path "/${targetRef.path}"`); + } + prop = parseInt(prop); + } + if (value !== null) { + if (typeof value === 'object') { + if (value[isProxy]) { + // Assigning one proxied value to another + value = value.valueOf(); + } + // else if (Object.isFrozen(value)) { + // // Create a copy to unfreeze it + // value = cloneObject(value); + // } + value = (0, utils_1.cloneObject)(value); // Fix #10, always clone objects so changes made through the proxy won't change the original object (and vice versa) + } + if ((0, utils_1.valuesAreEqual)(value, target[prop])) { //if (compareValues(value, target[prop]) === 'identical') { // (typeof value !== 'object' && target[prop] === value) { + // not changing the actual value, ignore + return true; + } + } + if (context.target.some(key => typeof key === 'number')) { + // Updating an object property inside an array. Flag the first array in target to be written. + // Eg: when chat.members === [{ name: 'Ewout', id: 'someid' }] + // --> chat.members[0].name = 'Ewout' --> Rewrite members array instead of chat/members[0]/name + context.flag('write', context.target.slice(0, context.target.findIndex(key => typeof key === 'number'))); + } + else if (target instanceof Array) { + // Flag the entire array to be overwritten + context.flag('write', context.target); + } + else { + // Flag child property + context.flag('write', context.target.concat(prop)); + } + // Set cached value: + if (value === null) { + delete target[prop]; + } + else { + removeVoidProperties(value); + target[prop] = value; + } + return true; + }, + deleteProperty(target, prop) { + target = getTargetValue(context.root.cache, context.target); + if (target === null) { + throw new Error(`Cannot delete property ${prop.toString()} of null`); + } + if (typeof prop === 'symbol') { + return Reflect.deleteProperty(target, prop); + } + if (!(prop in target)) { + return true; // Nothing to delete + } + context.flag('write', context.target.concat(prop)); + delete target[prop]; + return true; + }, + ownKeys(target) { + target = getTargetValue(context.root.cache, context.target); + return Reflect.ownKeys(target); + }, + has(target, prop) { + target = getTargetValue(context.root.cache, context.target); + return Reflect.has(target, prop); + }, + getOwnPropertyDescriptor(target, prop) { + target = getTargetValue(context.root.cache, context.target); + const descriptor = Reflect.getOwnPropertyDescriptor(target, prop); + if (descriptor) { + descriptor.configurable = true; // prevent "TypeError: 'getOwnPropertyDescriptor' on proxy: trap reported non-configurability for property '...' which is either non-existant or configurable in the proxy target" + } + return descriptor; + }, + getPrototypeOf(target) { + target = getTargetValue(context.root.cache, context.target); + return Reflect.getPrototypeOf(target); + }, + }; + const proxy = new Proxy({}, handler); + return proxy; +} +function removeVoidProperties(obj) { + if (typeof obj !== 'object') { + return; + } + Object.keys(obj).forEach(key => { + const val = obj[key]; + if (val === null || typeof val === 'undefined') { + delete obj[key]; + } + else if (typeof val === 'object') { + removeVoidProperties(val); + } + }); +} +/** + * Convenience function to access ILiveDataProxyValue methods on a proxied value + * @param proxiedValue The proxied value to get access to + * @returns Returns the same object typecasted to an ILiveDataProxyValue + * @example + * // IChatMessages is an ObjectCollection + * let observable: Observable; + * + * // Allows you to do this: + * observable = proxyAccess(chat.messages).getObservable(); + * + * // Instead of: + * observable = (chat.messages.msg1 as any as ILiveDataProxyValue).getObservable(); + * + * // Both do the exact same, but the first is less obscure + */ +function proxyAccess(proxiedValue) { + if (typeof proxiedValue !== 'object' || !proxiedValue[isProxy]) { + throw new Error('Given value is not proxied. Make sure you are referencing the value through the live data proxy.'); + } + return proxiedValue; +} +exports.proxyAccess = proxyAccess; +/** + * Provides functionality to work with ordered collections through a live data proxy. Eliminates + * the need for arrays to handle ordered data by adding a 'sort' properties to child objects in a + * collection, and provides functionality to sort and reorder items with a minimal amount of database + * updates. + */ +class OrderedCollectionProxy { + constructor(collection, orderProperty = 'order', orderIncrement = 10) { + this.collection = collection; + this.orderProperty = orderProperty; + this.orderIncrement = orderIncrement; + if (typeof collection !== 'object' || !collection[isProxy]) { + throw new Error('Collection is not proxied'); + } + if (collection.valueOf() instanceof Array) { + throw new Error('Collection is an array, not an object collection'); + } + if (!Object.keys(collection).every(key => typeof collection[key] === 'object')) { + throw new Error('Collection has non-object children'); + } + // Check if the collection has order properties. If not, assign them now + const ok = Object.keys(collection).every(key => typeof collection[key][orderProperty] === 'number'); + if (!ok) { + // Assign order properties now. Database will be updated automatically + const keys = Object.keys(collection); + for (let i = 0; i < keys.length; i++) { + const item = collection[keys[i]]; + item[orderProperty] = i * orderIncrement; // 0, 10, 20, 30 etc + } + } + } + /** + * Gets an observable for the target object collection. Same as calling `collection.getObservable()` + * @returns + */ + getObservable() { + return proxyAccess(this.collection).getObservable(); + } + /** + * Gets an observable that emits a new ordered array representation of the object collection each time + * the unlaying data is changed. Same as calling `getArray()` in a `getObservable().subscribe` callback + * @returns + */ + getArrayObservable() { + const Observable = (0, optional_observable_1.getObservable)(); + return new Observable(subscriber => { + const subscription = this.getObservable().subscribe(( /*value*/) => { + const newArray = this.getArray(); + subscriber.next(newArray); + }); + return function unsubscribe() { + subscription.unsubscribe(); + }; + }); + } + /** + * Gets an ordered array representation of the items in your object collection. The items in the array + * are proxied values, changes will be in sync with the database. Note that the array itself + * is not mutable: adding or removing items to it will NOT update the collection in the + * the database and vice versa. Use `add`, `delete`, `sort` and `move` methods to make changes + * that impact the collection's sorting order + * @returns order array + */ + getArray() { + const arr = proxyAccess(this.collection).toArray((a, b) => a[this.orderProperty] - b[this.orderProperty]); + // arr.push = (...items: T[]) => { + // items.forEach(item => this.add(item)); + // return arr.length; + // }; + return arr; + } + add(item, index, from) { + const arr = this.getArray(); + let minOrder = Number.POSITIVE_INFINITY, maxOrder = Number.NEGATIVE_INFINITY; + for (let i = 0; i < arr.length; i++) { + const order = arr[i][this.orderProperty]; + minOrder = Math.min(order, minOrder); + maxOrder = Math.max(order, maxOrder); + } + let fromKey; + if (typeof from === 'number') { + // Moving existing item + fromKey = Object.keys(this.collection).find(key => this.collection[key] === item); + if (!fromKey) { + throw new Error('item not found in collection'); + } + if (from === index) { + return { key: fromKey, index }; + } + if (Math.abs(from - index) === 1) { + // Position being swapped, swap their order property values + const otherItem = arr[index]; + const otherOrder = otherItem[this.orderProperty]; + otherItem[this.orderProperty] = item[this.orderProperty]; + item[this.orderProperty] = otherOrder; + return { key: fromKey, index }; + } + else { + // Remove from array, code below will add again + arr.splice(from, 1); + } + } + if (typeof index !== 'number' || index >= arr.length) { + // append at the end + index = arr.length; + item[this.orderProperty] = arr.length == 0 ? 0 : maxOrder + this.orderIncrement; + } + else if (index === 0) { + // insert before all others + item[this.orderProperty] = arr.length == 0 ? 0 : minOrder - this.orderIncrement; + } + else { + // insert between 2 others + const orders = arr.map(item => item[this.orderProperty]); + const gap = orders[index] - orders[index - 1]; + if (gap > 1) { + item[this.orderProperty] = orders[index] - Math.floor(gap / 2); + } + else { + // TODO: Can this gap be enlarged by moving one of both orders? + // For now, change all other orders + arr.splice(index, 0, item); + for (let i = 0; i < arr.length; i++) { + arr[i][this.orderProperty] = i * this.orderIncrement; + } + } + } + const key = typeof fromKey === 'string' + ? fromKey // Moved item, don't add it + : proxyAccess(this.collection).push(item); + return { key, index }; + } + /** + * Deletes an item from the object collection using the their index in the sorted array representation + * @param index + * @returns the key of the collection's child that was deleted + */ + delete(index) { + const arr = this.getArray(); + const item = arr[index]; + if (!item) { + throw new Error(`Item at index ${index} not found`); + } + const key = Object.keys(this.collection).find(key => this.collection[key] === item); + if (!key) { + throw new Error('Cannot find target object to delete'); + } + this.collection[key] = null; // Deletes it from db + return { key, index }; + } + /** + * Moves an item in the object collection by reordering it + * @param fromIndex Current index in the array (the ordered representation of the object collection) + * @param toIndex Target index in the array + * @returns + */ + move(fromIndex, toIndex) { + const arr = this.getArray(); + return this.add(arr[fromIndex], toIndex, fromIndex); + } + /** + * Reorders the object collection using given sort function. Allows quick reordering of the collection which is persisted in the database + * @param sortFn + */ + sort(sortFn) { + const arr = this.getArray(); + arr.sort(sortFn); + for (let i = 0; i < arr.length; i++) { + arr[i][this.orderProperty] = i * this.orderIncrement; + } + } +} +exports.OrderedCollectionProxy = OrderedCollectionProxy; + +},{"./data-reference":34,"./data-snapshot":35,"./id":37,"./optional-observable":40,"./path-info":42,"./path-reference":43,"./process":44,"./simple-event-emitter":48,"./utils":52}],34:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DataReferencesArray = exports.DataSnapshotsArray = exports.DataReferenceQuery = exports.DataReference = exports.QueryDataRetrievalOptions = exports.DataRetrievalOptions = void 0; +const data_snapshot_1 = require("./data-snapshot"); +const subscription_1 = require("./subscription"); +const id_1 = require("./id"); +const path_info_1 = require("./path-info"); +const data_proxy_1 = require("./data-proxy"); +const optional_observable_1 = require("./optional-observable"); +class DataRetrievalOptions { + /** + * Options for data retrieval, allows selective loading of object properties + */ + constructor(options) { + if (!options) { + options = {}; + } + if (typeof options.include !== 'undefined' && !(options.include instanceof Array)) { + throw new TypeError('options.include must be an array'); + } + if (typeof options.exclude !== 'undefined' && !(options.exclude instanceof Array)) { + throw new TypeError('options.exclude must be an array'); + } + if (typeof options.child_objects !== 'undefined' && typeof options.child_objects !== 'boolean') { + throw new TypeError('options.child_objects must be a boolean'); + } + if (typeof options.cache_mode === 'string' && !['allow', 'bypass', 'force'].includes(options.cache_mode)) { + throw new TypeError('invalid value for options.cache_mode'); + } + this.include = options.include || undefined; + this.exclude = options.exclude || undefined; + this.child_objects = typeof options.child_objects === 'boolean' ? options.child_objects : undefined; + this.cache_mode = typeof options.cache_mode === 'string' + ? options.cache_mode + : typeof options.allow_cache === 'boolean' + ? options.allow_cache ? 'allow' : 'bypass' + : 'allow'; + this.cache_cursor = typeof options.cache_cursor === 'string' ? options.cache_cursor : undefined; + } +} +exports.DataRetrievalOptions = DataRetrievalOptions; +class QueryDataRetrievalOptions extends DataRetrievalOptions { + /** + * @param options Options for data retrieval, allows selective loading of object properties + */ + constructor(options) { + super(options); + if (!['undefined', 'boolean'].includes(typeof options.snapshots)) { + throw new TypeError('options.snapshots must be a boolean'); + } + this.snapshots = typeof options.snapshots === 'boolean' ? options.snapshots : true; + } +} +exports.QueryDataRetrievalOptions = QueryDataRetrievalOptions; +const _private = Symbol('private'); +class DataReference { + /** + * Creates a reference to a node + */ + constructor(db, path, vars) { + this.db = db; + if (!path) { + path = ''; + } + path = path.replace(/^\/|\/$/g, ''); // Trim slashes + const pathInfo = path_info_1.PathInfo.get(path); + const key = pathInfo.key; + const callbacks = []; + this[_private] = { + get path() { return path; }, + get key() { return key; }, + get callbacks() { return callbacks; }, + vars: vars || {}, + context: {}, + pushed: false, + cursor: null, + }; + } + context(context, merge = false) { + const currentContext = this[_private].context; + if (typeof context === 'object') { + const newContext = context ? merge ? currentContext || {} : context : {}; + if (context) { + // Merge new with current context + Object.keys(context).forEach(key => { + newContext[key] = context[key]; + }); + } + this[_private].context = newContext; + return this; + } + else if (typeof context === 'undefined') { + console.warn('Use snap.context() instead of snap.ref.context() to get updating context in event callbacks'); + return currentContext; + } + else { + throw new Error('Invalid context argument'); + } + } + /** + * Contains the last received cursor for this referenced path (if the connected database has transaction logging enabled). + * If you want to be notified if this value changes, add a handler with `ref.onCursor(callback)` + */ + get cursor() { + return this[_private].cursor; + } + set cursor(value) { + var _a; + this[_private].cursor = value; + (_a = this.onCursor) === null || _a === void 0 ? void 0 : _a.call(this, value); + } + /** + * The path this instance was created with + */ + get path() { return this[_private].path; } + /** + * The key or index of this node + */ + get key() { + const key = this[_private].key; + return typeof key === 'number' ? `[${key}]` : key; + } + /** + * If the "key" is a number, it is an index! + */ + get index() { + const key = this[_private].key; + if (typeof key !== 'number') { + throw new Error(`"${key}" is not a number`); + } + return key; + } + /** + * Returns a new reference to this node's parent + */ + get parent() { + const currentPath = path_info_1.PathInfo.fillVariables2(this.path, this.vars); + const info = path_info_1.PathInfo.get(currentPath); + if (info.parentPath === null) { + return null; + } + return new DataReference(this.db, info.parentPath).context(this[_private].context); + } + /** + * Contains values of the variables/wildcards used in a subscription path if this reference was + * created by an event ("value", "child_added" etc), or in a type mapping path when serializing / instantiating typed objects + */ + get vars() { + return this[_private].vars; + } + /** + * Returns a new reference to a child node + * @param childPath Child key, index or path + * @returns reference to the child + */ + child(childPath) { + childPath = typeof childPath === 'number' ? childPath : childPath.replace(/^\/|\/$/g, ''); + const currentPath = path_info_1.PathInfo.fillVariables2(this.path, this.vars); + const targetPath = path_info_1.PathInfo.getChildPath(currentPath, childPath); + return new DataReference(this.db, targetPath).context(this[_private].context); // `${this.path}/${childPath}` + } + /** + * Sets or overwrites the stored value + * @param value value to store in database + * @param onComplete optional completion callback to use instead of returning promise + * @returns promise that resolves with this reference when completed + */ + async set(value, onComplete) { + try { + if (this.isWildcardPath) { + throw new Error(`Cannot set the value of wildcard path "/${this.path}"`); + } + if (this.parent === null) { + throw new Error('Cannot set the root object. Use update, or set individual child properties'); + } + if (typeof value === 'undefined') { + throw new TypeError(`Cannot store undefined value in "/${this.path}"`); + } + if (!this.db.isReady) { + await this.db.ready(); + } + value = this.db.types.serialize(this.path, value); + const { cursor } = await this.db.api.set(this.path, value, { context: this[_private].context }); + this.cursor = cursor; + if (typeof onComplete === 'function') { + try { + onComplete(null, this); + } + catch (err) { + console.error('Error in onComplete callback:', err); + } + } + } + catch (err) { + if (typeof onComplete === 'function') { + try { + onComplete(err, this); + } + catch (err) { + console.error('Error in onComplete callback:', err); + } + } + else { + // throw again + throw err; + } + } + return this; + } + /** + * Updates properties of the referenced node + * @param updates object containing the properties to update + * @param onComplete optional completion callback to use instead of returning promise + * @return returns promise that resolves with this reference once completed + */ + async update(updates, onComplete) { + try { + if (this.isWildcardPath) { + throw new Error(`Cannot update the value of wildcard path "/${this.path}"`); + } + if (!this.db.isReady) { + await this.db.ready(); + } + if (typeof updates !== 'object' || updates instanceof Array || updates instanceof ArrayBuffer || updates instanceof Date) { + await this.set(updates); + } + else if (Object.keys(updates).length === 0) { + console.warn(`update called on path "/${this.path}", but there is nothing to update`); + } + else { + updates = this.db.types.serialize(this.path, updates); + const { cursor } = await this.db.api.update(this.path, updates, { context: this[_private].context }); + this.cursor = cursor; + } + if (typeof onComplete === 'function') { + try { + onComplete(null, this); + } + catch (err) { + console.error('Error in onComplete callback:', err); + } + } + } + catch (err) { + if (typeof onComplete === 'function') { + try { + onComplete(err, this); + } + catch (err) { + console.error('Error in onComplete callback:', err); + } + } + else { + // throw again + throw err; + } + } + return this; + } + /** + * Sets the value a node using a transaction: it runs your callback function with the current value, uses its return value as the new value to store. + * The transaction is canceled if your callback returns undefined, or throws an error. If your callback returns null, the target node will be removed. + * @param callback - callback function that performs the transaction on the node's current value. It must return the new value to store (or promise with new value), undefined to cancel the transaction, or null to remove the node. + * @returns returns a promise that resolves with the DataReference once the transaction has been processed + */ + async transaction(callback) { + if (this.isWildcardPath) { + throw new Error(`Cannot start a transaction on wildcard path "/${this.path}"`); + } + if (!this.db.isReady) { + await this.db.ready(); + } + let throwError; + const cb = (currentValue) => { + currentValue = this.db.types.deserialize(this.path, currentValue); + const snap = new data_snapshot_1.DataSnapshot(this, currentValue); + let newValue; + try { + newValue = callback(snap); + } + catch (err) { + // callback code threw an error + throwError = err; // Remember error + return; // cancel transaction by returning undefined + } + if (newValue instanceof Promise) { + return newValue + .then((val) => { + return this.db.types.serialize(this.path, val); + }) + .catch(err => { + throwError = err; // Remember error + return; // cancel transaction by returning undefined + }); + } + else { + return this.db.types.serialize(this.path, newValue); + } + }; + const { cursor } = await this.db.api.transaction(this.path, cb, { context: this[_private].context }); + this.cursor = cursor; + if (throwError) { + // Rethrow error from callback code + throw throwError; + } + return this; + } + on(event, callback, cancelCallback) { + if (this.path === '' && ['value', 'child_changed'].includes(event)) { + // Removed 'notify_value' and 'notify_child_changed' events from the list, they do not require additional data loading anymore. + console.warn('WARNING: Listening for value and child_changed events on the root node is a bad practice. These events require loading of all data (value event), or potentially lots of data (child_changed event) each time they are fired'); + } + let eventPublisher = null; + const eventStream = new subscription_1.EventStream(publisher => { eventPublisher = publisher; }); + // Map OUR callback to original callback, so .off can remove the right callback(s) + const cb = { + event, + stream: eventStream, + userCallback: typeof callback === 'function' && callback, + ourCallback: (err, path, newValue, oldValue, eventContext) => { + if (err) { + // TODO: Investigate if this ever happens? + this.db.debug.error(`Error getting data for event ${event} on path "${path}"`, err); + return; + } + const ref = this.db.ref(path); + ref[_private].vars = path_info_1.PathInfo.extractVariables(this.path, path); + let callbackObject; + if (event.startsWith('notify_')) { + // No data event, callback with reference + callbackObject = ref.context(eventContext || {}); + } + else { + const values = { + previous: this.db.types.deserialize(path, oldValue), + current: this.db.types.deserialize(path, newValue), + }; + if (event === 'child_removed') { + callbackObject = new data_snapshot_1.DataSnapshot(ref, values.previous, true, values.previous, eventContext); + } + else if (event === 'mutations') { + callbackObject = new data_snapshot_1.MutationsDataSnapshot(ref, values.current, eventContext); + } + else { + const isRemoved = event === 'mutated' && values.current === null; + callbackObject = new data_snapshot_1.DataSnapshot(ref, values.current, isRemoved, values.previous, eventContext); + } + } + eventPublisher.publish(callbackObject); + if (eventContext === null || eventContext === void 0 ? void 0 : eventContext.acebase_cursor) { + this.cursor = eventContext.acebase_cursor; + } + }, + }; + this[_private].callbacks.push(cb); + const subscribe = () => { + // (NEW) Add callback to event stream + // ref.on('value', callback) is now exactly the same as ref.on('value').subscribe(callback) + if (typeof callback === 'function') { + eventStream.subscribe(callback, (activated, cancelReason) => { + if (!activated) { + cancelCallback && cancelCallback(cancelReason); + } + }); + } + const advancedOptions = typeof callback === 'object' + ? callback + : { newOnly: !callback }; // newOnly: if callback is not 'truthy', could change this to (typeof callback !== 'function' && callback !== true) but that would break client code that uses a truthy argument. + if (typeof advancedOptions.newOnly !== 'boolean') { + advancedOptions.newOnly = false; + } + if (this.isWildcardPath) { + advancedOptions.newOnly = true; + } + const cancelSubscription = (err) => { + // Access denied? + // Cancel subscription + const callbacks = this[_private].callbacks; + callbacks.splice(callbacks.indexOf(cb), 1); + this.db.api.unsubscribe(this.path, event, cb.ourCallback); + // Call cancelCallbacks + this.db.debug.error(`Subscription "${event}" on path "/${this.path}" canceled because of an error: ${err.message}`); + eventPublisher.cancel(err.message); + }; + const authorized = this.db.api.subscribe(this.path, event, cb.ourCallback, { newOnly: advancedOptions.newOnly, cancelCallback: cancelSubscription, syncFallback: advancedOptions.syncFallback }); + const allSubscriptionsStoppedCallback = () => { + const callbacks = this[_private].callbacks; + callbacks.splice(callbacks.indexOf(cb), 1); + return this.db.api.unsubscribe(this.path, event, cb.ourCallback); + }; + if (authorized instanceof Promise) { + // Web API now returns a promise that resolves if the request is allowed + // and rejects when access is denied by the set security rules + authorized.then(() => { + // Access granted + eventPublisher.start(allSubscriptionsStoppedCallback); + }).catch(cancelSubscription); + } + else { + // Local API, always authorized + eventPublisher.start(allSubscriptionsStoppedCallback); + } + if (!advancedOptions.newOnly) { + // If callback param is supplied (either a callback function or true or something else truthy), + // it will fire events for current values right now. + // Otherwise, it expects the .subscribe methode to be used, which will then + // only be called for future events + if (event === 'value') { + this.get(snap => { + eventPublisher.publish(snap); + }); + } + else if (event === 'child_added') { + this.get(snap => { + const val = snap.val(); + if (val === null || typeof val !== 'object') { + return; + } + Object.keys(val).forEach(key => { + const childSnap = new data_snapshot_1.DataSnapshot(this.child(key), val[key]); + eventPublisher.publish(childSnap); + }); + }); + } + else if (event === 'notify_child_added') { + // Use the reflect API to get current children. + // NOTE: This does not work with AceBaseServer <= v0.9.7, only when signed in as admin + const step = 100, limit = step; + let skip = 0; + const more = async () => { + const children = await this.db.api.reflect(this.path, 'children', { limit, skip }); + children.list.forEach(child => { + const childRef = this.child(child.key); + eventPublisher.publish(childRef); + // typeof callback === 'function' && callback(childRef); + }); + if (children.more) { + skip += step; + more(); + } + }; + more(); + } + } + }; + if (this.db.isReady) { + subscribe(); + } + else { + this.db.ready(subscribe); + } + return eventStream; + } + off(event, callback) { + const subscriptions = this[_private].callbacks; + const stopSubs = subscriptions.filter(sub => (!event || sub.event === event) && (!callback || sub.userCallback === callback)); + if (stopSubs.length === 0) { + this.db.debug.warn(`Can't find event subscriptions to stop (path: "${this.path}", event: ${event || '(any)'}, callback: ${callback})`); + } + stopSubs.forEach(sub => { + sub.stream.stop(); + }); + return this; + } + get(optionsOrCallback, callback) { + if (!this.db.isReady) { + const promise = this.db.ready().then(() => this.get(optionsOrCallback, callback)); + return typeof optionsOrCallback !== 'function' && typeof callback !== 'function' ? promise : undefined; // only return promise if no callback is used + } + callback = + typeof optionsOrCallback === 'function' + ? optionsOrCallback + : typeof callback === 'function' + ? callback + : undefined; + if (this.isWildcardPath) { + const error = new Error(`Cannot get value of wildcard path "/${this.path}". Use .query() instead`); + if (typeof callback === 'function') { + throw error; + } + return Promise.reject(error); + } + const options = new DataRetrievalOptions(typeof optionsOrCallback === 'object' ? optionsOrCallback : { cache_mode: 'allow' }); + const promise = this.db.api.get(this.path, options).then(result => { + var _a; + const isNewApiResult = ('context' in result && 'value' in result); + if (!isNewApiResult) { + // acebase-core version package was updated but acebase or acebase-client package was not? Warn, but don't throw an error. + console.warn('AceBase api.get method returned an old response value. Update your acebase or acebase-client package'); + result = { value: result, context: {} }; + } + const value = this.db.types.deserialize(this.path, result.value); + const snapshot = new data_snapshot_1.DataSnapshot(this, value, undefined, undefined, result.context); + if ((_a = result.context) === null || _a === void 0 ? void 0 : _a.acebase_cursor) { + this.cursor = result.context.acebase_cursor; + } + return snapshot; + }); + if (callback) { + promise.then(callback).catch(err => { + console.error('Uncaught error:', err); + }); + return; + } + else { + return promise; + } + } + /** + * Waits for an event to occur + * @param event Name of the event, eg "value", "child_added", "child_changed", "child_removed" + * @param options data retrieval options, to include or exclude specific child keys + * @returns returns promise that resolves with a snapshot of the data + */ + once(event, options) { + if (event === 'value' && !this.isWildcardPath) { + // Shortcut, do not start listening for future events + return this.get(options); + } + return new Promise((resolve) => { + const callback = (snap) => { + this.off(event, callback); // unsubscribe directly + resolve(snap); + }; + this.on(event, callback); + }); + } + /** + * @param value optional value to store into the database right away + * @param onComplete optional callback function to run once value has been stored + * @returns returns promise that resolves with the reference after the passed value has been stored + */ + push(value, onComplete) { + if (this.isWildcardPath) { + const error = new Error(`Cannot push to wildcard path "/${this.path}"`); + if (typeof value === 'undefined' || typeof onComplete === 'function') { + throw error; + } + return Promise.reject(error); + } + const id = id_1.ID.generate(); + const ref = this.child(id); + ref[_private].pushed = true; + if (typeof value !== 'undefined') { + return ref.set(value, onComplete).then(() => ref); + } + else { + return ref; + } + } + /** + * Removes this node and all children + */ + async remove() { + if (this.isWildcardPath) { + throw new Error(`Cannot remove wildcard path "/${this.path}". Use query().remove instead`); + } + if (this.parent === null) { + throw new Error('Cannot remove the root node'); + } + return this.set(null); + } + /** + * Quickly checks if this reference has a value in the database, without returning its data + * @returns returns a promise that resolves with a boolean value + */ + async exists() { + if (this.isWildcardPath) { + throw new Error(`Cannot check wildcard path "/${this.path}" existence`); + } + if (!this.db.isReady) { + await this.db.ready(); + } + return this.db.api.exists(this.path); + } + get isWildcardPath() { + return this.path.indexOf('*') >= 0 || this.path.indexOf('$') >= 0; + } + /** + * Creates a query object for current node + */ + query() { + return new DataReferenceQuery(this); + } + /** + * Gets the number of children this node has, uses reflection + */ + async count() { + const info = await this.reflect('info', { child_count: true }); + return info.children.count; + } + async reflect(type, args) { + if (this.isWildcardPath) { + throw new Error(`Cannot reflect on wildcard path "/${this.path}"`); + } + if (!this.db.isReady) { + await this.db.ready(); + } + return this.db.api.reflect(this.path, type, args); + } + async export(write, options = { format: 'json', type_safe: true }) { + if (this.isWildcardPath) { + throw new Error(`Cannot export wildcard path "/${this.path}"`); + } + if (!this.db.isReady) { + await this.db.ready(); + } + const writeFn = typeof write === 'function' ? write : write.write.bind(write); + return this.db.api.export(this.path, writeFn, options); + } + /** + * Imports the value of this node and all children + * @param read Function that reads data from your stream + * @param options Only supported format currently is json + * @returns returns a promise that resolves once all data is imported + */ + async import(read, options = { format: 'json', suppress_events: false }) { + if (this.isWildcardPath) { + throw new Error(`Cannot import to wildcard path "/${this.path}"`); + } + if (!this.db.isReady) { + await this.db.ready(); + } + return this.db.api.import(this.path, read, options); + } + proxy(options) { + const isOptionsArg = typeof options === 'object' && (typeof options.cursor !== 'undefined' || typeof options.defaultValue !== 'undefined'); + if (typeof options !== 'undefined' && !isOptionsArg) { + this.db.debug.warn('Warning: live data proxy is being initialized with a deprecated method signature. Use ref.proxy(options) instead of ref.proxy(defaultValue)'); + options = { defaultValue: options }; + } + return data_proxy_1.LiveDataProxy.create(this, options); + } + /** + * @param options optional initial data retrieval options. + * Not recommended to use yet - given includes/excludes are not applied to received mutations, + * or sync actions when using an AceBaseClient with cache db. + */ + observe(options) { + // options should not be used yet - we can't prevent/filter mutation events on excluded paths atm + if (options) { + throw new Error('observe does not support data retrieval options yet'); + } + if (this.isWildcardPath) { + throw new Error(`Cannot observe wildcard path "/${this.path}"`); + } + const Observable = (0, optional_observable_1.getObservable)(); + return new Observable(observer => { + let cache, resolved = false; + let promise = this.get(options).then(snap => { + resolved = true; + cache = snap.val(); + observer.next(cache); + }); + const updateCache = (snap) => { + if (!resolved) { + promise = promise.then(() => updateCache(snap)); + return; + } + const mutatedPath = snap.ref.path; + if (mutatedPath === this.path) { + cache = snap.val(); + return observer.next(cache); + } + const trailKeys = path_info_1.PathInfo.getPathKeys(mutatedPath).slice(path_info_1.PathInfo.getPathKeys(this.path).length); + let target = cache; + while (trailKeys.length > 1) { + const key = trailKeys.shift(); + if (!(key in target)) { + // Happens if initial loaded data did not include / excluded this data, + // or we missed out on an event + target[key] = typeof trailKeys[0] === 'number' ? [] : {}; + } + target = target[key]; + } + const prop = trailKeys.shift(); + const newValue = snap.val(); + if (newValue === null) { + // Remove it + target instanceof Array && typeof prop === 'number' ? target.splice(prop, 1) : delete target[prop]; + } + else { + // Set or update it + target[prop] = newValue; + } + observer.next(cache); + }; + this.on('mutated', updateCache); // TODO: Refactor to 'mutations' event instead + // Return unsubscribe function + return () => { + this.off('mutated', updateCache); + }; + }); + } + async forEach(callbackOrOptions, callback) { + let options; + if (typeof callbackOrOptions === 'function') { + callback = callbackOrOptions; + } + else { + options = callbackOrOptions; + } + if (typeof callback !== 'function') { + throw new TypeError('No callback function given'); + } + // Get all children through reflection. This could be tweaked further using paging + const info = await this.reflect('children', { limit: 0, skip: 0 }); // Gets ALL child keys + const summary = { + canceled: false, + total: info.list.length, + processed: 0, + }; + // Iterate through all children until callback returns false + for (let i = 0; i < info.list.length; i++) { + const key = info.list[i].key; + // Get child data + const snapshot = await this.child(key).get(options); + summary.processed++; + if (!snapshot.exists()) { + // Was removed in the meantime, skip + continue; + } + // Run callback + const result = await callback(snapshot); + if (result === false) { + summary.canceled = true; + break; // Stop looping + } + } + return summary; + } + async getMutations(cursorOrDate) { + const cursor = typeof cursorOrDate === 'string' ? cursorOrDate : undefined; + const timestamp = cursorOrDate === null || typeof cursorOrDate === 'undefined' ? 0 : cursorOrDate instanceof Date ? cursorOrDate.getTime() : undefined; + return this.db.api.getMutations({ path: this.path, cursor, timestamp }); + } + async getChanges(cursorOrDate) { + const cursor = typeof cursorOrDate === 'string' ? cursorOrDate : undefined; + const timestamp = cursorOrDate === null || typeof cursorOrDate === 'undefined' ? 0 : cursorOrDate instanceof Date ? cursorOrDate.getTime() : undefined; + return this.db.api.getChanges({ path: this.path, cursor, timestamp }); + } +} +exports.DataReference = DataReference; +class DataReferenceQuery { + /** + * Creates a query on a reference + */ + constructor(ref) { + this.ref = ref; + this[_private] = { + filters: [], + skip: 0, + take: 0, + order: [], + events: {}, + }; + } + /** + * Applies a filter to the children of the refence being queried. + * If there is an index on the property key being queried, it will be used + * to speed up the query + * @param key property to test value of + * @param op operator to use + * @param compare value to compare with + */ + filter(key, op, compare) { + if ((op === 'in' || op === '!in') && (!(compare instanceof Array) || compare.length === 0)) { + throw new Error(`${op} filter for ${key} must supply an Array compare argument containing at least 1 value`); + } + if ((op === 'between' || op === '!between') && (!(compare instanceof Array) || compare.length !== 2)) { + throw new Error(`${op} filter for ${key} must supply an Array compare argument containing 2 values`); + } + if ((op === 'matches' || op === '!matches') && !(compare instanceof RegExp)) { + throw new Error(`${op} filter for ${key} must supply a RegExp compare argument`); + } + // DISABLED 2019/10/23 because it is not fully implemented only works locally + // if (op === "custom" && typeof compare !== "function") { + // throw `${op} filter for ${key} must supply a Function compare argument`; + // } + // DISABLED 2022/08/15, implemented by query.ts in acebase + // if ((op === 'contains' || op === '!contains') && ((typeof compare === 'object' && !(compare instanceof Array) && !(compare instanceof Date)) || (compare instanceof Array && compare.length === 0))) { + // throw new Error(`${op} filter for ${key} must supply a simple value or (non-zero length) array compare argument`); + // } + this[_private].filters.push({ key, op, compare }); + return this; + } + /** + * @deprecated use `.filter` instead + */ + where(key, op, compare) { + return this.filter(key, op, compare); + } + /** + * Limits the number of query results + */ + take(n) { + this[_private].take = n; + return this; + } + /** + * Skips the first n query results + */ + skip(n) { + this[_private].skip = n; + return this; + } + sort(key, ascending = true) { + if (!['string', 'number'].includes(typeof key)) { + throw 'key must be a string or number'; + } + this[_private].order.push({ key, ascending }); + return this; + } + /** + * @deprecated use `.sort` instead + */ + order(key, ascending = true) { + return this.sort(key, ascending); + } + get(optionsOrCallback, callback) { + if (!this.ref.db.isReady) { + const promise = this.ref.db.ready().then(() => this.get(optionsOrCallback, callback)); + return typeof optionsOrCallback !== 'function' && typeof callback !== 'function' ? promise : undefined; // only return promise if no callback is used + } + callback = + typeof optionsOrCallback === 'function' + ? optionsOrCallback + : typeof callback === 'function' + ? callback + : undefined; + const options = new QueryDataRetrievalOptions(typeof optionsOrCallback === 'object' ? optionsOrCallback : { snapshots: true, cache_mode: 'allow' }); + options.allow_cache = options.cache_mode !== 'bypass'; // Backward compatibility when using older acebase-client + options.eventHandler = ev => { + // TODO: implement context for query events + if (!this[_private].events[ev.name]) { + return false; + } + const listeners = this[_private].events[ev.name]; + if (typeof listeners !== 'object' || listeners.length === 0) { + return false; + } + if (['add', 'change', 'remove'].includes(ev.name)) { + const ref = new DataReference(this.ref.db, ev.path); + const eventData = { name: ev.name }; + if (options.snapshots && ev.name !== 'remove') { + const val = db.types.deserialize(ev.path, ev.value); + eventData.snapshot = new data_snapshot_1.DataSnapshot(ref, val, false); + } + else { + eventData.ref = ref; + } + ev = eventData; + } + listeners.forEach(callback => { try { + callback(ev); + } + catch (e) { } }); + }; + // Check if there are event listeners set for realtime changes + options.monitor = { add: false, change: false, remove: false }; + if (this[_private].events) { + if (this[_private].events['add'] && this[_private].events['add'].length > 0) { + options.monitor.add = true; + } + if (this[_private].events['change'] && this[_private].events['change'].length > 0) { + options.monitor.change = true; + } + if (this[_private].events['remove'] && this[_private].events['remove'].length > 0) { + options.monitor.remove = true; + } + } + // Stop realtime results if they are still enabled on a previous .get on this instance + this.stop(); + // NOTE: returning promise here, regardless of callback argument. Good argument to refactor method to async/await soon + const db = this.ref.db; + return db.api.query(this.ref.path, this[_private], options) + .catch(err => { + throw new Error(err); + }) + .then(res => { + const { stop } = res; + let { results, context } = res; + this.stop = async () => { + await stop(); + }; + if (!('results' in res && 'context' in res)) { + console.warn('Query results missing context. Update your acebase and/or acebase-client packages'); + results = res, context = {}; + } + if (options.snapshots) { + const snaps = results.map(result => { + const val = db.types.deserialize(result.path, result.val); + return new data_snapshot_1.DataSnapshot(db.ref(result.path), val, false, undefined, context); + }); + return DataSnapshotsArray.from(snaps); + } + else { + const refs = results.map(path => db.ref(path)); + return DataReferencesArray.from(refs); + } + }) + .then(results => { + callback && callback(results); + return results; + }); + } + /** + * Stops a realtime query, no more notifications will be received. + */ + async stop() { + // Overridden by .get + } + /** + * Executes the query and returns references. Short for `.get({ snapshots: false })` + * @param callback callback to use instead of returning a promise + * @returns returns an Promise that resolves with an array of DataReferences, or void when using a callback + * @deprecated Use `find` instead + */ + getRefs(callback) { + return this.get({ snapshots: false }, callback); + } + /** + * Executes the query and returns an array of references. Short for `.get({ snapshots: false })` + */ + find() { + return this.get({ snapshots: false }); + } + /** + * Executes the query and returns the number of results + */ + async count() { + const refs = await this.find(); + return refs.length; + } + /** + * Executes the query and returns if there are any results + */ + async exists() { + const originalTake = this[_private].take; + const p = this.take(1).find(); + this.take(originalTake); + const refs = await p; + return refs.length !== 0; + } + /** + * Executes the query, removes all matches from the database + * @returns returns a Promise that resolves once all matches have been removed + */ + async remove(callback) { + const refs = await this.find(); + // Perform updates on each distinct parent collection (only 1 parent if this is not a wildcard path) + const parentUpdates = refs.reduce((parents, ref) => { + const parent = parents[ref.parent.path]; + if (!parent) { + parents[ref.parent.path] = [ref]; + } + else { + parent.push(ref); + } + return parents; + }, {}); + const db = this.ref.db; + const promises = Object.keys(parentUpdates).map(async (parentPath) => { + const updates = refs.reduce((updates, ref) => { + updates[ref.key] = null; + return updates; + }, {}); + const ref = db.ref(parentPath); + try { + await ref.update(updates); + return { ref, success: true }; + } + catch (error) { + return { ref, success: false, error }; + } + }); + const results = await Promise.all(promises); + callback && callback(results); + return results; + } + on(event, callback) { + if (!this[_private].events[event]) { + this[_private].events[event] = []; + } + this[_private].events[event].push(callback); + return this; + } + /** + * Unsubscribes from (a) previously added event(s) + * @param event Name of the event + * @param callback callback function to remove + * @returns returns reference to this query + */ + off(event, callback) { + if (typeof event === 'undefined') { + this[_private].events = {}; + return this; + } + if (!this[_private].events[event]) { + return this; + } + if (typeof callback === 'undefined') { + delete this[_private].events[event]; + return this; + } + const index = this[_private].events[event].indexOf(callback); + if (!~index) { + return this; + } + this[_private].events[event].splice(index, 1); + return this; + } + async forEach(callbackOrOptions, callback) { + let options; + if (typeof callbackOrOptions === 'function') { + callback = callbackOrOptions; + } + else { + options = callbackOrOptions; + } + if (typeof callback !== 'function') { + throw new TypeError('No callback function given'); + } + // Get all query results. This could be tweaked further using paging + const refs = await this.find(); + const summary = { + canceled: false, + total: refs.length, + processed: 0, + }; + // Iterate through all children until callback returns false + for (let i = 0; i < refs.length; i++) { + const ref = refs[i]; + // Get child data + const snapshot = await ref.get(options); + summary.processed++; + if (!snapshot.exists()) { + // Was removed in the meantime, skip + continue; + } + // Run callback + const result = await callback(snapshot); + if (result === false) { + summary.canceled = true; + break; // Stop looping + } + } + return summary; + } +} +exports.DataReferenceQuery = DataReferenceQuery; +class DataSnapshotsArray extends Array { + static from(snaps) { + const arr = new DataSnapshotsArray(snaps.length); + snaps.forEach((snap, i) => arr[i] = snap); + return arr; + } + getValues() { + return this.map(snap => snap.val()); + } +} +exports.DataSnapshotsArray = DataSnapshotsArray; +class DataReferencesArray extends Array { + static from(refs) { + const arr = new DataReferencesArray(refs.length); + refs.forEach((ref, i) => arr[i] = ref); + return arr; + } + getPaths() { + return this.map(ref => ref.path); + } +} +exports.DataReferencesArray = DataReferencesArray; + +},{"./data-proxy":33,"./data-snapshot":35,"./id":37,"./optional-observable":40,"./path-info":42,"./subscription":49}],35:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MutationsDataSnapshot = exports.DataSnapshot = void 0; +const path_info_1 = require("./path-info"); +function getChild(snapshot, path, previous = false) { + if (!snapshot.exists()) { + return null; + } + let child = previous ? snapshot.previous() : snapshot.val(); + if (typeof path === 'number') { + return child[path]; + } + path_info_1.PathInfo.getPathKeys(path).every(key => { + child = child[key]; + return typeof child !== 'undefined'; + }); + return child || null; +} +function getChildren(snapshot) { + if (!snapshot.exists()) { + return []; + } + const value = snapshot.val(); + if (value instanceof Array) { + return new Array(value.length).map((v, i) => i); + } + if (typeof value === 'object') { + return Object.keys(value); + } + return []; +} +class DataSnapshot { + /** + * Creates a new DataSnapshot instance + */ + constructor(ref, value, isRemoved = false, prevValue, context) { + this.ref = ref; + this.val = () => { return value; }; + this.previous = () => { return prevValue; }; + this.exists = () => { + if (isRemoved) { + return false; + } + return value !== null && typeof value !== 'undefined'; + }; + this.context = () => { return context || {}; }; + } + /** + * Indicates whether the node exists in the database + */ + exists() { return false; } + /** + * Creates a `DataSnapshot` instance + * @internal (for internal use) + */ + static for(ref, value) { + return new DataSnapshot(ref, value); + } + /** + * Gets a new snapshot for a child node + * @param path child key or path + * @returns Returns a `DataSnapshot` of the child + */ + child(path) { + // Create new snapshot for child data + const val = getChild(this, path, false); + const prev = getChild(this, path, true); + return new DataSnapshot(this.ref.child(path), val, false, prev); + } + /** + * Checks if the snapshot's value has a child with the given key or path + * @param path child key or path + */ + hasChild(path) { + return getChild(this, path) !== null; + } + /** + * Indicates whether the the snapshot's value has any child nodes + */ + hasChildren() { + return getChildren(this).length > 0; + } + /** + * The number of child nodes in this snapshot + */ + numChildren() { + return getChildren(this).length; + } + /** + * Runs a callback function for each child node in this snapshot until the callback returns false + * @param callback function that is called with a snapshot of each child node in this snapshot. + * Must return a boolean value that indicates whether to continue iterating or not. + */ + forEach(callback) { + const value = this.val(); + const prev = this.previous(); + return getChildren(this).every((key) => { + const snap = new DataSnapshot(this.ref.child(key), value[key], false, prev[key]); + return callback(snap); + }); + } + /** + * The key of the node's path + */ + get key() { return this.ref.key; } +} +exports.DataSnapshot = DataSnapshot; +class MutationsDataSnapshot extends DataSnapshot { + constructor(ref, mutations, context) { + super(ref, mutations, false, undefined, context); + /** + * Don't use this to get previous values of mutated nodes. + * Use `.previous` properties on the individual child snapshots instead. + * @throws Throws an error if you do use it. + */ + this.previous = () => { throw new Error('Iterate values to get previous values for each mutation'); }; + this.val = (warn = true) => { + if (warn) { + console.warn('Unless you know what you are doing, it is best not to use the value of a mutations snapshot directly. Use child methods and forEach to iterate the mutations instead'); + } + return mutations; + }; + } + /** + * Runs a callback function for each mutation in this snapshot until the callback returns false + * @param callback function that is called with a snapshot of each mutation in this snapshot. Must return a boolean value that indicates whether to continue iterating or not. + * @returns Returns whether every child was interated + */ + forEach(callback) { + const mutations = this.val(); + return mutations.every(mutation => { + const ref = mutation.target.reduce((ref, key) => ref.child(key), this.ref); + const snap = new DataSnapshot(ref, mutation.val, false, mutation.prev); + return callback(snap); + }); + } + /** + * Gets a snapshot of a mutated node + * @param index index of the mutation + * @returns Returns a DataSnapshot of the mutated node + */ + child(index) { + if (typeof index !== 'number') { + throw new Error('child index must be a number'); + } + const mutation = this.val()[index]; + const ref = mutation.target.reduce((ref, key) => ref.child(key), this.ref); + return new DataSnapshot(ref, mutation.val, false, mutation.prev); + } +} +exports.MutationsDataSnapshot = MutationsDataSnapshot; + +},{"./path-info":42}],36:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DebugLogger = void 0; +const process_1 = require("./process"); +// eslint-disable-next-line @typescript-eslint/no-empty-function +const noop = () => { }; +class DebugLogger { + constructor(level = 'log', prefix = '') { + this.level = level; + this.prefix = prefix; + this.setLevel(level); + } + setLevel(level) { + const prefix = this.prefix ? this.prefix + ' %s' : ''; + this.verbose = ['verbose'].includes(level) ? prefix ? console.log.bind(console, prefix) : console.log.bind(console) : noop; + this.log = ['verbose', 'log'].includes(level) ? prefix ? console.log.bind(console, prefix) : console.log.bind(console) : noop; + this.warn = ['verbose', 'log', 'warn'].includes(level) ? prefix ? console.warn.bind(console, prefix) : console.warn.bind(console) : noop; + this.error = ['verbose', 'log', 'warn', 'error'].includes(level) ? prefix ? console.error.bind(console, prefix) : console.error.bind(console) : noop; + this.write = (text) => { + const isRunKit = typeof process_1.default !== 'undefined' && process_1.default.env && typeof process_1.default.env.RUNKIT_ENDPOINT_PATH === 'string'; + if (text && isRunKit) { + text.split('\n').forEach(line => console.log(line)); // Logs each line separately + } + else { + console.log(text); + } + }; + } +} +exports.DebugLogger = DebugLogger; + +},{"./process":44}],37:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ID = void 0; +const cuid_1 = require("./cuid"); +// const uuid62 = require('uuid62'); +let timeBias = 0; +class ID { + /** + * (for internal use) + * bias in milliseconds to adjust generated cuid timestamps with + */ + static set timeBias(bias) { + if (typeof bias !== 'number') { + return; + } + timeBias = bias; + } + static generate() { + // Could also use https://www.npmjs.com/package/pushid for Firebase style 20 char id's + return (0, cuid_1.default)(timeBias).slice(1); // Cuts off the always leading 'c' + // return uuid62.v1(); + } +} +exports.ID = ID; + +},{"./cuid":31}],38:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ObjectCollection = exports.PartialArray = exports.SchemaDefinition = exports.Colorize = exports.ColorStyle = exports.SimpleEventEmitter = exports.SimpleCache = exports.ascii85 = exports.PathInfo = exports.Utils = exports.TypeMappings = exports.Transport = exports.EventSubscription = exports.EventPublisher = exports.EventStream = exports.PathReference = exports.ID = exports.DebugLogger = exports.OrderedCollectionProxy = exports.proxyAccess = exports.MutationsDataSnapshot = exports.DataSnapshot = exports.DataReferencesArray = exports.DataSnapshotsArray = exports.QueryDataRetrievalOptions = exports.DataRetrievalOptions = exports.DataReferenceQuery = exports.DataReference = exports.Api = exports.AceBaseBaseSettings = exports.AceBaseBase = void 0; +var acebase_base_1 = require("./acebase-base"); +Object.defineProperty(exports, "AceBaseBase", { enumerable: true, get: function () { return acebase_base_1.AceBaseBase; } }); +Object.defineProperty(exports, "AceBaseBaseSettings", { enumerable: true, get: function () { return acebase_base_1.AceBaseBaseSettings; } }); +var api_1 = require("./api"); +Object.defineProperty(exports, "Api", { enumerable: true, get: function () { return api_1.Api; } }); +var data_reference_1 = require("./data-reference"); +Object.defineProperty(exports, "DataReference", { enumerable: true, get: function () { return data_reference_1.DataReference; } }); +Object.defineProperty(exports, "DataReferenceQuery", { enumerable: true, get: function () { return data_reference_1.DataReferenceQuery; } }); +Object.defineProperty(exports, "DataRetrievalOptions", { enumerable: true, get: function () { return data_reference_1.DataRetrievalOptions; } }); +Object.defineProperty(exports, "QueryDataRetrievalOptions", { enumerable: true, get: function () { return data_reference_1.QueryDataRetrievalOptions; } }); +Object.defineProperty(exports, "DataSnapshotsArray", { enumerable: true, get: function () { return data_reference_1.DataSnapshotsArray; } }); +Object.defineProperty(exports, "DataReferencesArray", { enumerable: true, get: function () { return data_reference_1.DataReferencesArray; } }); +var data_snapshot_1 = require("./data-snapshot"); +Object.defineProperty(exports, "DataSnapshot", { enumerable: true, get: function () { return data_snapshot_1.DataSnapshot; } }); +Object.defineProperty(exports, "MutationsDataSnapshot", { enumerable: true, get: function () { return data_snapshot_1.MutationsDataSnapshot; } }); +var data_proxy_1 = require("./data-proxy"); +Object.defineProperty(exports, "proxyAccess", { enumerable: true, get: function () { return data_proxy_1.proxyAccess; } }); +Object.defineProperty(exports, "OrderedCollectionProxy", { enumerable: true, get: function () { return data_proxy_1.OrderedCollectionProxy; } }); +var debug_1 = require("./debug"); +Object.defineProperty(exports, "DebugLogger", { enumerable: true, get: function () { return debug_1.DebugLogger; } }); +var id_1 = require("./id"); +Object.defineProperty(exports, "ID", { enumerable: true, get: function () { return id_1.ID; } }); +var path_reference_1 = require("./path-reference"); +Object.defineProperty(exports, "PathReference", { enumerable: true, get: function () { return path_reference_1.PathReference; } }); +var subscription_1 = require("./subscription"); +Object.defineProperty(exports, "EventStream", { enumerable: true, get: function () { return subscription_1.EventStream; } }); +Object.defineProperty(exports, "EventPublisher", { enumerable: true, get: function () { return subscription_1.EventPublisher; } }); +Object.defineProperty(exports, "EventSubscription", { enumerable: true, get: function () { return subscription_1.EventSubscription; } }); +exports.Transport = require("./transport"); +var type_mappings_1 = require("./type-mappings"); +Object.defineProperty(exports, "TypeMappings", { enumerable: true, get: function () { return type_mappings_1.TypeMappings; } }); +exports.Utils = require("./utils"); +var path_info_1 = require("./path-info"); +Object.defineProperty(exports, "PathInfo", { enumerable: true, get: function () { return path_info_1.PathInfo; } }); +var ascii85_1 = require("./ascii85"); +Object.defineProperty(exports, "ascii85", { enumerable: true, get: function () { return ascii85_1.ascii85; } }); +var simple_cache_1 = require("./simple-cache"); +Object.defineProperty(exports, "SimpleCache", { enumerable: true, get: function () { return simple_cache_1.SimpleCache; } }); +var simple_event_emitter_1 = require("./simple-event-emitter"); +Object.defineProperty(exports, "SimpleEventEmitter", { enumerable: true, get: function () { return simple_event_emitter_1.SimpleEventEmitter; } }); +var simple_colors_1 = require("./simple-colors"); +Object.defineProperty(exports, "ColorStyle", { enumerable: true, get: function () { return simple_colors_1.ColorStyle; } }); +Object.defineProperty(exports, "Colorize", { enumerable: true, get: function () { return simple_colors_1.Colorize; } }); +var schema_1 = require("./schema"); +Object.defineProperty(exports, "SchemaDefinition", { enumerable: true, get: function () { return schema_1.SchemaDefinition; } }); +var partial_array_1 = require("./partial-array"); +Object.defineProperty(exports, "PartialArray", { enumerable: true, get: function () { return partial_array_1.PartialArray; } }); +const object_collection_1 = require("./object-collection"); +Object.defineProperty(exports, "ObjectCollection", { enumerable: true, get: function () { return object_collection_1.ObjectCollection; } }); + +},{"./acebase-base":27,"./api":28,"./ascii85":29,"./data-proxy":33,"./data-reference":34,"./data-snapshot":35,"./debug":36,"./id":37,"./object-collection":39,"./partial-array":41,"./path-info":42,"./path-reference":43,"./schema":45,"./simple-cache":46,"./simple-colors":47,"./simple-event-emitter":48,"./subscription":49,"./transport":50,"./type-mappings":51,"./utils":52}],39:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ObjectCollection = void 0; +const id_1 = require("./id"); +/** + * Convenience interface for defining an object collection + * @example + * type ChatMessage = { + * text: string, uid: string, sent: Date + * } + * type Chat = { + * title: text + * messages: ObjectCollection + * } + */ +class ObjectCollection { + /** + * Converts and array of values into an object collection, generating a unique key for each item in the array + * @param array + * @example + * const array = [ + * { title: "Don't make me think!", author: "Steve Krug" }, + * { title: "The tipping point", author: "Malcolm Gladwell" } + * ]; + * + * // Convert: + * const collection = ObjectCollection.from(array); + * // --> { + * // kh1x3ygb000120r7ipw6biln: { + * // title: "Don't make me think!", + * // author: "Steve Krug" + * // }, + * // kh1x3ygb000220r757ybpyec: { + * // title: "The tipping point", + * // author: "Malcolm Gladwell" + * // } + * // } + * + * // Now it's easy to add them to the db: + * db.ref('books').update(collection); + */ + static from(array) { + const collection = {}; + array.forEach(child => { + collection[id_1.ID.generate()] = child; + }); + return collection; + } +} +exports.ObjectCollection = ObjectCollection; + +},{"./id":37}],40:[function(require,module,exports){ +"use strict"; +// Optional dependency on rxjs package. If rxjs is installed into your project, you'll get the correct +// typings for AceBase methods that use Observables, and you'll be able to use them. If you don't use +// those methods, there is no need to install rxjs. +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ObservableShim = exports.setObservable = exports.getObservable = void 0; +let _observable; +function getObservable() { + if (_observable) { + return _observable; + } + if (typeof window !== 'undefined' && window.Observable) { + _observable = window.Observable; + return _observable; + } + try { + // eslint-disable-next-line @typescript-eslint/no-var-requires + const { Observable } = require('rxjs'); // fails in ESM module, need an elegant way to handle this. Can't use dynamic import() because it 1) requires Node 12+ and 2) causes Webpack build to fail if rxjs is not installed + if (!Observable) { + throw new Error('not loaded'); + } + _observable = Observable; + return Observable; + } + catch (err) { + throw new Error('RxJS Observable could not be loaded. If you are using a browser build, add it to AceBase using db.setObservable. For node.js builds, add it to your project with: npm i rxjs'); + } +} +exports.getObservable = getObservable; +function setObservable(Observable) { + if (Observable === 'shim') { + console.warn('Using AceBase\'s simple Observable shim. Only use this if you know what you\'re doing.'); + Observable = ObservableShim; + } + _observable = Observable; +} +exports.setObservable = setObservable; +/** + * rxjs is an optional dependency that only needs installing when any of AceBase's observe methods are used. + * If for some reason rxjs is not available (eg in test suite), we can provide a shim. This class is used when + * `db.setObservable("shim")` is called + */ +class ObservableShim { + constructor(create) { + this._active = false; + this._subscribers = []; + this._create = create; + } + subscribe(subscriber) { + if (!this._active) { + const next = (value) => { + // emit value to all subscribers + this._subscribers.forEach(s => { + try { + s(value); + } + catch (err) { + console.error('Error in subscriber callback:', err); + } + }); + }; + const observer = { next }; + this._cleanup = this._create(observer); + this._active = true; + } + this._subscribers.push(subscriber); + const unsubscribe = () => { + this._subscribers.splice(this._subscribers.indexOf(subscriber), 1); + if (this._subscribers.length === 0) { + this._active = false; + this._cleanup(); + } + }; + const subscription = { + unsubscribe, + }; + return subscription; + } +} +exports.ObservableShim = ObservableShim; + +},{"rxjs":53}],41:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PartialArray = void 0; +/** + * Sparse/partial array converted to a serializable object. Use `Object.keys(sparseArray)` and `Object.values(sparseArray)` to iterate its indice and/or values + */ +class PartialArray { + constructor(sparseArray) { + if (sparseArray instanceof Array) { + for (let i = 0; i < sparseArray.length; i++) { + if (typeof sparseArray[i] !== 'undefined') { + this[i] = sparseArray[i]; + } + } + } + else if (sparseArray) { + Object.assign(this, sparseArray); + } + } +} +exports.PartialArray = PartialArray; + +},{}],42:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PathInfo = void 0; +function getPathKeys(path) { + path = path.replace(/\[/g, '/[').replace(/^\/+/, '').replace(/\/+$/, ''); // Replace [ with /[, remove leading slashes, remove trailing slashes + if (path.length === 0) { + return []; + } + const keys = path.split('/'); + return keys.map(key => { + return key.startsWith('[') ? parseInt(key.slice(1, -1)) : key; + }); +} +class PathInfo { + constructor(path) { + if (typeof path === 'string') { + this.keys = getPathKeys(path); + } + else if (path instanceof Array) { + this.keys = path; + } + this.path = this.keys.reduce((path, key, i) => i === 0 ? `${key}` : typeof key === 'string' ? `${path}/${key}` : `${path}[${key}]`, ''); + } + static get(path) { + return new PathInfo(path); + } + static getChildPath(path, childKey) { + // return getChildPath(path, childKey); + return PathInfo.get(path).child(childKey).path; + } + static getPathKeys(path) { + return getPathKeys(path); + } + get key() { + return this.keys.length === 0 ? null : this.keys.slice(-1)[0]; + } + get parent() { + if (this.keys.length == 0) { + return null; + } + const parentKeys = this.keys.slice(0, -1); + return new PathInfo(parentKeys); + } + get parentPath() { + return this.keys.length === 0 ? null : this.parent.path; + } + child(childKey) { + if (typeof childKey === 'string') { + childKey = getPathKeys(childKey); + } + return new PathInfo(this.keys.concat(childKey)); + } + childPath(childKey) { + return this.child(childKey).path; + } + get pathKeys() { + return this.keys; + } + /** + * If varPath contains variables or wildcards, it will return them with the values found in fullPath + * @param {string} varPath path containing variables such as * and $name + * @param {string} fullPath real path to a node + * @returns {{ [index: number]: string|number, [variable: string]: string|number }} returns an array-like object with all variable values. All named variables are also set on the array by their name (eg vars.uid and vars.$uid) + * @example + * PathInfo.extractVariables('users/$uid/posts/$postid', 'users/ewout/posts/post1/title') === { + * 0: 'ewout', + * 1: 'post1', + * uid: 'ewout', // or $uid + * postid: 'post1' // or $postid + * }; + * + * PathInfo.extractVariables('users/*\/posts/*\/$property', 'users/ewout/posts/post1/title') === { + * 0: 'ewout', + * 1: 'post1', + * 2: 'title', + * property: 'title' // or $property + * }; + * + * PathInfo.extractVariables('users/$user/friends[*]/$friend', 'users/dora/friends[4]/diego') === { + * 0: 'dora', + * 1: 4, + * 2: 'diego', + * user: 'dora', // or $user + * friend: 'diego' // or $friend + * }; + */ + static extractVariables(varPath, fullPath) { + if (!varPath.includes('*') && !varPath.includes('$')) { + return []; + } + // if (!this.equals(fullPath)) { + // throw new Error(`path does not match with the path of this PathInfo instance: info.equals(path) === false!`) + // } + const keys = getPathKeys(varPath); + const pathKeys = getPathKeys(fullPath); + let count = 0; + const variables = { + get length() { return count; }, + }; + keys.forEach((key, index) => { + const pathKey = pathKeys[index]; + if (key === '*') { + variables[count++] = pathKey; + } + else if (typeof key === 'string' && key[0] === '$') { + variables[count++] = pathKey; + // Set the $variable property + variables[key] = pathKey; + // Set friendly property name (without $) + const varName = key.slice(1); + if (typeof variables[varName] === 'undefined') { + variables[varName] = pathKey; + } + } + }); + return variables; + } + /** + * If varPath contains variables or wildcards, it will return a path with the variables replaced by the keys found in fullPath. + * @example + * PathInfo.fillVariables('users/$uid/posts/$postid', 'users/ewout/posts/post1/title') === 'users/ewout/posts/post1' + */ + static fillVariables(varPath, fullPath) { + if (varPath.indexOf('*') < 0 && varPath.indexOf('$') < 0) { + return varPath; + } + const keys = getPathKeys(varPath); + const pathKeys = getPathKeys(fullPath); + const merged = keys.map((key, index) => { + if (key === pathKeys[index] || index >= pathKeys.length) { + return key; + } + else if (typeof key === 'string' && (key === '*' || key[0] === '$')) { + return pathKeys[index]; + } + else { + throw new Error(`Path "${fullPath}" cannot be used to fill variables of path "${varPath}" because they do not match`); + } + }); + let mergedPath = ''; + merged.forEach(key => { + if (typeof key === 'number') { + mergedPath += `[${key}]`; + } + else { + if (mergedPath.length > 0) { + mergedPath += '/'; + } + mergedPath += key; + } + }); + return mergedPath; + } + /** + * Replaces all variables in a path with the values in the vars argument + * @param varPath path containing variables + * @param vars variables object such as one gotten from PathInfo.extractVariables + */ + static fillVariables2(varPath, vars) { + if (typeof vars !== 'object' || Object.keys(vars).length === 0) { + return varPath; // Nothing to fill + } + const pathKeys = getPathKeys(varPath); + let n = 0; + const targetPath = pathKeys.reduce((path, key) => { + if (typeof key === 'string' && (key === '*' || key.startsWith('$'))) { + return PathInfo.getChildPath(path, vars[n++]); + } + else { + return PathInfo.getChildPath(path, key); + } + }, ''); + return targetPath; + } + /** + * Checks if a given path matches this path, eg "posts/*\/title" matches "posts/12344/title" and "users/123/name" matches "users/$uid/name" + */ + equals(otherPath) { + const other = otherPath instanceof PathInfo ? otherPath : new PathInfo(otherPath); + if (this.path === other.path) { + return true; + } // they are identical + if (this.keys.length !== other.keys.length) { + return false; + } + return this.keys.every((key, index) => { + const otherKey = other.keys[index]; + return otherKey === key + || (typeof otherKey === 'string' && (otherKey === '*' || otherKey[0] === '$')) + || (typeof key === 'string' && (key === '*' || key[0] === '$')); + }); + } + /** + * Checks if a given path is an ancestor, eg "posts" is an ancestor of "posts/12344/title" + */ + isAncestorOf(descendantPath) { + const descendant = descendantPath instanceof PathInfo ? descendantPath : new PathInfo(descendantPath); + if (descendant.path === '' || this.path === descendant.path) { + return false; + } + if (this.path === '') { + return true; + } + if (this.keys.length >= descendant.keys.length) { + return false; + } + return this.keys.every((key, index) => { + const otherKey = descendant.keys[index]; + return otherKey === key + || (typeof otherKey === 'string' && (otherKey === '*' || otherKey[0] === '$')) + || (typeof key === 'string' && (key === '*' || key[0] === '$')); + }); + } + /** + * Checks if a given path is a descendant, eg "posts/1234/title" is a descendant of "posts" + */ + isDescendantOf(ancestorPath) { + const ancestor = ancestorPath instanceof PathInfo ? ancestorPath : new PathInfo(ancestorPath); + if (this.path === '' || this.path === ancestor.path) { + return false; + } + if (ancestorPath === '') { + return true; + } + if (ancestor.keys.length >= this.keys.length) { + return false; + } + return ancestor.keys.every((key, index) => { + const otherKey = this.keys[index]; + return otherKey === key + || (typeof otherKey === 'string' && (otherKey === '*' || otherKey[0] === '$')) + || (typeof key === 'string' && (key === '*' || key[0] === '$')); + }); + } + /** + * Checks if the other path is on the same trail as this path. Paths on the same trail if they share a + * common ancestor. Eg: "posts" is on the trail of "posts/1234/title" and vice versa. + */ + isOnTrailOf(otherPath) { + const other = otherPath instanceof PathInfo ? otherPath : new PathInfo(otherPath); + if (this.path.length === 0 || other.path.length === 0) { + return true; + } + if (this.path === other.path) { + return true; + } + return this.pathKeys.every((key, index) => { + if (index >= other.keys.length) { + return true; + } + const otherKey = other.keys[index]; + return otherKey === key + || (typeof otherKey === 'string' && (otherKey === '*' || otherKey[0] === '$')) + || (typeof key === 'string' && (key === '*' || key[0] === '$')); + }); + } + /** + * Checks if a given path is a direct child, eg "posts/1234/title" is a child of "posts/1234" + */ + isChildOf(otherPath) { + const other = otherPath instanceof PathInfo ? otherPath : new PathInfo(otherPath); + if (this.path === '') { + return false; + } // If our path is the root, it's nobody's child... + return this.parent.equals(other); + } + /** + * Checks if a given path is its parent, eg "posts/1234" is the parent of "posts/1234/title" + */ + isParentOf(otherPath) { + const other = otherPath instanceof PathInfo ? otherPath : new PathInfo(otherPath); + if (other.path === '') { + return false; + } // If the other path is the root, this path cannot be its parent + return this.equals(other.parent); + } +} +exports.PathInfo = PathInfo; + +},{}],43:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PathReference = void 0; +class PathReference { + /** + * Creates a reference to a path that can be stored in the database. Use this to create cross-references to other data in your database + * @param path + */ + constructor(path) { + this.path = path; + } +} +exports.PathReference = PathReference; + +},{}],44:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = { + // eslint-disable-next-line @typescript-eslint/ban-types + nextTick(fn) { + setTimeout(fn, 0); + }, +}; + +},{}],45:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SchemaDefinition = void 0; +// parses a typestring, creates checker functions +function parse(definition) { + // tokenize + let pos = 0; + function consumeSpaces() { + let c; + while (c = definition[pos], [' ', '\r', '\n', '\t'].includes(c)) { + pos++; + } + } + function consumeCharacter(c) { + if (definition[pos] !== c) { + throw new Error(`Unexpected character at position ${pos}. Expected: '${c}', found '${definition[pos]}'`); + } + pos++; + } + function readProperty() { + consumeSpaces(); + const prop = { name: '', optional: false, wildcard: false }; + let c; + while (c = definition[pos], c === '_' || c === '$' || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (prop.name.length > 0 && c >= '0' && c <= '9') || (prop.name.length === 0 && c === '*')) { + prop.name += c; + pos++; + } + if (prop.name.length === 0) { + throw new Error(`Property name expected at position ${pos}, found: ${definition.slice(pos, pos + 10)}..`); + } + if (definition[pos] === '?') { + prop.optional = true; + pos++; + } + if (prop.name === '*' || prop.name[0] === '$') { + prop.optional = true; + prop.wildcard = true; + } + consumeSpaces(); + consumeCharacter(':'); + return prop; + } + function readType() { + consumeSpaces(); + let type = { typeOf: 'any' }, c; + // try reading simple type first: (string,number,boolean,Date etc) + let name = ''; + while (c = definition[pos], (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { + name += c; + pos++; + } + if (name.length === 0) { + if (definition[pos] === '*') { + // any value + consumeCharacter('*'); + type.typeOf = 'any'; + } + else if (['\'', '"', '`'].includes(definition[pos])) { + // Read string value + type.typeOf = 'string'; + type.value = ''; + const quote = definition[pos]; + consumeCharacter(quote); + while (c = definition[pos], c && c !== quote) { + type.value += c; + pos++; + } + consumeCharacter(quote); + } + else if (definition[pos] >= '0' && definition[pos] <= '9') { + // read numeric value + type.typeOf = 'number'; + let nr = ''; + while (c = definition[pos], c === '.' || c === 'n' || (c >= '0' && c <= '9')) { + nr += c; + pos++; + } + if (nr.endsWith('n')) { + type.value = BigInt(nr); + } + else if (nr.includes('.')) { + type.value = parseFloat(nr); + } + else { + type.value = parseInt(nr); + } + } + else if (definition[pos] === '{') { + // Read object (interface) definition + consumeCharacter('{'); + type.typeOf = 'object'; + type.instanceOf = Object; + // Read children: + type.children = []; + while (true) { + const prop = readProperty(); + const types = readTypes(); + type.children.push({ name: prop.name, optional: prop.optional, wildcard: prop.wildcard, types }); + consumeSpaces(); + if (definition[pos] === '}') { + break; + } + consumeCharacter(','); + } + consumeCharacter('}'); + } + else if (definition[pos] === '/') { + // Read regular expression definition + consumeCharacter('/'); + let pattern = '', flags = ''; + while (c = definition[pos], c !== '/' || pattern.endsWith('\\')) { + pattern += c; + pos++; + } + consumeCharacter('/'); + while (c = definition[pos], ['g', 'i', 'm', 's', 'u', 'y', 'd'].includes(c)) { + flags += c; + pos++; + } + type.typeOf = 'string'; + type.matches = new RegExp(pattern, flags); + } + else { + throw new Error(`Expected a type definition at position ${pos}, found character '${definition[pos]}'`); + } + } + else if (['string', 'number', 'boolean', 'bigint', 'undefined', 'String', 'Number', 'Boolean', 'BigInt'].includes(name)) { + type.typeOf = name.toLowerCase(); + } + else if (name === 'Object' || name === 'object') { + type.typeOf = 'object'; + type.instanceOf = Object; + } + else if (name === 'Date') { + type.typeOf = 'object'; + type.instanceOf = Date; + } + else if (name === 'Binary' || name === 'binary') { + type.typeOf = 'object'; + type.instanceOf = ArrayBuffer; + } + else if (name === 'any') { + type.typeOf = 'any'; + } + else if (name === 'null') { + // This is ignored, null values are not stored in the db (null indicates deletion) + type.typeOf = 'object'; + type.value = null; + } + else if (name === 'Array') { + // Read generic Array defintion + consumeCharacter('<'); + type.typeOf = 'object'; + type.instanceOf = Array; //name; + type.genericTypes = readTypes(); + consumeCharacter('>'); + } + else if (['true', 'false'].includes(name)) { + type.typeOf = 'boolean'; + type.value = name === 'true'; + } + else { + throw new Error(`Unknown type at position ${pos}: "${type}"`); + } + // Check if it's an Array of given type (eg: string[] or string[][]) + // Also converts to generics, string[] becomes Array, string[][] becomes Array> + consumeSpaces(); + while (definition[pos] === '[') { + consumeCharacter('['); + consumeCharacter(']'); + type = { typeOf: 'object', instanceOf: Array, genericTypes: [type] }; + } + return type; + } + function readTypes() { + consumeSpaces(); + const types = [readType()]; + while (definition[pos] === '|') { + consumeCharacter('|'); + types.push(readType()); + consumeSpaces(); + } + return types; + } + return readType(); +} +function checkObject(path, properties, obj, partial) { + // Are there any properties that should not be in there? + const invalidProperties = properties.find(prop => prop.name === '*' || prop.name[0] === '$') // Only if no wildcard properties are allowed + ? [] + : Object.keys(obj).filter(key => ![null, undefined].includes(obj[key]) // Ignore null or undefined values + && !properties.find(prop => prop.name === key)); + if (invalidProperties.length > 0) { + return { ok: false, reason: `Object at path "${path}" cannot have propert${invalidProperties.length === 1 ? 'y' : 'ies'} ${invalidProperties.map(p => `"${p}"`).join(', ')}` }; + } + // Loop through properties that should be present + function checkProperty(property) { + const hasValue = ![null, undefined].includes(obj[property.name]); + if (!property.optional && (partial ? obj[property.name] === null : !hasValue)) { + return { ok: false, reason: `Property at path "${path}/${property.name}" is not optional` }; + } + if (hasValue && property.types.length === 1) { + return checkType(`${path}/${property.name}`, property.types[0], obj[property.name], false); + } + if (hasValue && !property.types.some(type => checkType(`${path}/${property.name}`, type, obj[property.name], false).ok)) { + return { ok: false, reason: `Property at path "${path}/${property.name}" does not match any of ${property.types.length} allowed types` }; + } + return { ok: true }; + } + const namedProperties = properties.filter(prop => !prop.wildcard); + const failedProperty = namedProperties.find(prop => !checkProperty(prop).ok); + if (failedProperty) { + const reason = checkProperty(failedProperty).reason; + return { ok: false, reason }; + } + const wildcardProperty = properties.find(prop => prop.wildcard); + if (!wildcardProperty) { + return { ok: true }; + } + const wildcardChildKeys = Object.keys(obj).filter(key => !namedProperties.find(prop => prop.name === key)); + let result = { ok: true }; + for (let i = 0; i < wildcardChildKeys.length && result.ok; i++) { + const childKey = wildcardChildKeys[i]; + result = checkProperty({ name: childKey, types: wildcardProperty.types, optional: true, wildcard: true }); + } + return result; +} +function checkType(path, type, value, partial, trailKeys) { + const ok = { ok: true }; + if (type.typeOf === 'any') { + return ok; + } + if (trailKeys instanceof Array && trailKeys.length > 0) { + // The value to check resides in a descendant path of given type definition. + // Recursivly check child type definitions to find a match + if (type.typeOf !== 'object') { + return { ok: false, reason: `path "${path}" must be typeof ${type.typeOf}` }; // given value resides in a child path, but parent is not allowed be an object. + } + if (!type.children) { + return ok; + } + const childKey = trailKeys[0]; + let property = type.children.find(prop => prop.name === childKey); + if (!property) { + property = type.children.find(prop => prop.name === '*' || prop.name[0] === '$'); + } + if (!property) { + return { ok: false, reason: `Object at path "${path}" cannot have property "${childKey}"` }; + } + if (property.optional && value === null && trailKeys.length === 1) { + return ok; + } + let result; + property.types.some(type => { + const childPath = typeof childKey === 'number' ? `${path}[${childKey}]` : `${path}/${childKey}`; + result = checkType(childPath, type, value, partial, trailKeys.slice(1)); + return result.ok; + }); + return result; + } + if (value === null) { + return ok; + } + if (type.instanceOf === Object && (typeof value !== 'object' || value instanceof Array || value instanceof Date)) { + return { ok: false, reason: `path "${path}" must be an object collection` }; + } + if (type.instanceOf && (typeof value !== 'object' || value.constructor !== type.instanceOf)) { // !(value instanceof type.instanceOf) // value.constructor.name !== type.instanceOf + return { ok: false, reason: `path "${path}" must be an instance of ${type.instanceOf.name}` }; + } + if ('value' in type && value !== type.value) { + return { ok: false, reason: `path "${path}" must be value: ${type.value}` }; + } + if (typeof value !== type.typeOf) { + return { ok: false, reason: `path "${path}" must be typeof ${type.typeOf}` }; + } + if (type.instanceOf === Array && type.genericTypes && !value.every(v => type.genericTypes.some(t => checkType(path, t, v, false).ok))) { + return { ok: false, reason: `every array value of path "${path}" must match one of the specified types` }; + } + if (type.typeOf === 'object' && type.children) { + return checkObject(path, type.children, value, partial); + } + if (type.matches && !type.matches.test(value)) { + return { ok: false, reason: `path "${path}" must match regular expression /${type.matches.source}/${type.matches.flags}` }; + } + return ok; +} +// eslint-disable-next-line @typescript-eslint/ban-types +function getConstructorType(val) { + switch (val) { + case String: return 'string'; + case Number: return 'number'; + case Boolean: return 'boolean'; + case Date: return 'Date'; + case BigInt: return 'bigint'; + case Array: throw new Error('Schema error: Array cannot be used without a type. Use string[] or Array instead'); + default: throw new Error(`Schema error: unknown type used: ${val.name}`); + } +} +class SchemaDefinition { + constructor(definition) { + this.source = definition; + if (typeof definition === 'object') { + // Turn object into typescript definitions + // eg: + // const example = { + // name: String, + // born: Date, + // instrument: "'guitar'|'piano'", + // "address?": { + // street: String + // } + // }; + // Resulting ts: "{name:string,born:Date,instrument:'guitar'|'piano',address?:{street:string}}" + const toTS = obj => { + return '{' + Object.keys(obj) + .map(key => { + let val = obj[key]; + if (val === undefined) { + val = 'undefined'; + } + else if (val instanceof RegExp) { + val = `/${val.source}/${val.flags}`; + } + else if (typeof val === 'object') { + val = toTS(val); + } + else if (typeof val === 'function') { + val = getConstructorType(val); + } + else if (!['string', 'number', 'boolean', 'bigint'].includes(typeof val)) { + throw new Error(`Type definition for key "${key}" must be a string, number, boolean, bigint, object, regular expression, or one of these classes: String, Number, Boolean, Date, BigInt`); + } + return `${key}:${val}`; + }) + .join(',') + '}'; + }; + this.text = toTS(definition); + } + else if (typeof definition === 'string') { + this.text = definition; + } + else { + throw new Error('Type definiton must be a string or an object'); + } + this.type = parse(this.text); + } + check(path, value, partial, trailKeys) { + return checkType(path, this.type, value, partial, trailKeys); + } +} +exports.SchemaDefinition = SchemaDefinition; + +},{}],46:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SimpleCache = void 0; +const utils_1 = require("./utils"); +const calculateExpiryTime = (expirySeconds) => expirySeconds > 0 ? Date.now() + (expirySeconds * 1000) : Infinity; +/** + * Simple cache implementation that retains immutable values in memory for a limited time. + * Immutability is enforced by cloning the stored and retrieved values. To change a cached value, it will have to be `set` again with the new value. + */ +class SimpleCache { + constructor(options) { + var _a; + this.enabled = true; + if (typeof options === 'number') { + // Old signature: only expirySeconds given + options = { expirySeconds: options }; + } + options.cloneValues = options.cloneValues !== false; + if (typeof options.expirySeconds !== 'number' && typeof options.maxEntries !== 'number') { + throw new Error('Either expirySeconds or maxEntries must be specified'); + } + this.options = options; + this.cache = new Map(); + // Cleanup every minute + const interval = setInterval(() => { this.cleanUp(); }, 60 * 1000); + (_a = interval.unref) === null || _a === void 0 ? void 0 : _a.call(interval); + } + get size() { return this.cache.size; } + has(key) { + if (!this.enabled) { + return false; + } + return this.cache.has(key); + } + get(key) { + if (!this.enabled) { + return null; + } + const entry = this.cache.get(key); + if (!entry) { + return null; + } // if (!entry || entry.expires <= Date.now()) { return null; } + entry.expires = calculateExpiryTime(this.options.expirySeconds); + entry.accessed = Date.now(); + return this.options.cloneValues ? (0, utils_1.cloneObject)(entry.value) : entry.value; + } + set(key, value) { + if (this.options.maxEntries > 0 && this.cache.size >= this.options.maxEntries && !this.cache.has(key)) { + // console.warn(`* cache limit ${this.options.maxEntries} reached: ${this.cache.size}`); + // Remove an expired item or the one that was accessed longest ago + let oldest = null; + const now = Date.now(); + for (const [key, entry] of this.cache.entries()) { + if (entry.expires <= now) { + // Found an expired item. Remove it now and stop + this.cache.delete(key); + oldest = null; + break; + } + if (!oldest || entry.accessed < oldest.accessed) { + oldest = { key, accessed: entry.accessed }; + } + } + if (oldest !== null) { + this.cache.delete(oldest.key); + } + } + this.cache.set(key, { value: this.options.cloneValues ? (0, utils_1.cloneObject)(value) : value, added: Date.now(), accessed: Date.now(), expires: calculateExpiryTime(this.options.expirySeconds) }); + } + remove(key) { + this.cache.delete(key); + } + cleanUp() { + const now = Date.now(); + this.cache.forEach((entry, key) => { + if (entry.expires <= now) { + this.cache.delete(key); + } + }); + } +} +exports.SimpleCache = SimpleCache; + +},{"./utils":52}],47:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Colorize = exports.SetColorsEnabled = exports.ColorsSupported = exports.ColorStyle = void 0; +const process_1 = require("./process"); +// See from https://en.wikipedia.org/wiki/ANSI_escape_code +const FontCode = { + bold: 1, + dim: 2, + italic: 3, + underline: 4, + inverse: 7, + hidden: 8, + strikethrough: 94, +}; +const ColorCode = { + black: 30, + red: 31, + green: 32, + yellow: 33, + blue: 34, + magenta: 35, + cyan: 36, + white: 37, + grey: 90, + // Bright colors: + brightRed: 91, + // TODO, other bright colors +}; +const BgColorCode = { + bgBlack: 40, + bgRed: 41, + bgGreen: 42, + bgYellow: 43, + bgBlue: 44, + bgMagenta: 45, + bgCyan: 46, + bgWhite: 47, + bgGrey: 100, + bgBrightRed: 101, + // TODO, other bright colors +}; +const ResetCode = { + all: 0, + color: 39, + background: 49, + bold: 22, + dim: 22, + italic: 23, + underline: 24, + inverse: 27, + hidden: 28, + strikethrough: 29, +}; +var ColorStyle; +(function (ColorStyle) { + ColorStyle["reset"] = "reset"; + ColorStyle["bold"] = "bold"; + ColorStyle["dim"] = "dim"; + ColorStyle["italic"] = "italic"; + ColorStyle["underline"] = "underline"; + ColorStyle["inverse"] = "inverse"; + ColorStyle["hidden"] = "hidden"; + ColorStyle["strikethrough"] = "strikethrough"; + ColorStyle["black"] = "black"; + ColorStyle["red"] = "red"; + ColorStyle["green"] = "green"; + ColorStyle["yellow"] = "yellow"; + ColorStyle["blue"] = "blue"; + ColorStyle["magenta"] = "magenta"; + ColorStyle["cyan"] = "cyan"; + ColorStyle["grey"] = "grey"; + ColorStyle["bgBlack"] = "bgBlack"; + ColorStyle["bgRed"] = "bgRed"; + ColorStyle["bgGreen"] = "bgGreen"; + ColorStyle["bgYellow"] = "bgYellow"; + ColorStyle["bgBlue"] = "bgBlue"; + ColorStyle["bgMagenta"] = "bgMagenta"; + ColorStyle["bgCyan"] = "bgCyan"; + ColorStyle["bgWhite"] = "bgWhite"; + ColorStyle["bgGrey"] = "bgGrey"; +})(ColorStyle = exports.ColorStyle || (exports.ColorStyle = {})); +function ColorsSupported() { + // Checks for basic color support + if (typeof process_1.default === 'undefined' || !process_1.default.stdout || !process_1.default.env || !process_1.default.platform || process_1.default.platform === 'browser') { + return false; + } + if (process_1.default.platform === 'win32') { + return true; + } + const env = process_1.default.env; + if (env.COLORTERM) { + return true; + } + if (env.TERM === 'dumb') { + return false; + } + if (env.CI || env.TEAMCITY_VERSION) { + return !!env.TRAVIS; + } + if (['iTerm.app', 'HyperTerm', 'Hyper', 'MacTerm', 'Apple_Terminal', 'vscode'].includes(env.TERM_PROGRAM)) { + return true; + } + if (/^xterm-256|^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(env.TERM)) { + return true; + } + return false; +} +exports.ColorsSupported = ColorsSupported; +let _enabled = ColorsSupported(); +function SetColorsEnabled(enabled) { + _enabled = ColorsSupported() && enabled; +} +exports.SetColorsEnabled = SetColorsEnabled; +function Colorize(str, style) { + if (!_enabled) { + return str; + } + const openCodes = [], closeCodes = []; + const addStyle = style => { + if (style === ColorStyle.reset) { + openCodes.push(ResetCode.all); + } + else if (style in FontCode) { + openCodes.push(FontCode[style]); + closeCodes.push(ResetCode[style]); + } + else if (style in ColorCode) { + openCodes.push(ColorCode[style]); + closeCodes.push(ResetCode.color); + } + else if (style in BgColorCode) { + openCodes.push(BgColorCode[style]); + closeCodes.push(ResetCode.background); + } + }; + if (style instanceof Array) { + style.forEach(addStyle); + } + else { + addStyle(style); + } + // const open = '\u001b[' + openCodes.join(';') + 'm'; + // const close = '\u001b[' + closeCodes.join(';') + 'm'; + const open = openCodes.map(code => '\u001b[' + code + 'm').join(''); + const close = closeCodes.map(code => '\u001b[' + code + 'm').join(''); + // return open + str + close; + return str.split('\n').map(line => open + line + close).join('\n'); +} +exports.Colorize = Colorize; +String.prototype.colorize = function (style) { + return Colorize(this, style); +}; + +},{"./process":44}],48:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SimpleEventEmitter = void 0; +function runCallback(callback, data) { + try { + callback(data); + } + catch (err) { + console.error('Error in subscription callback', err); + } +} +class SimpleEventEmitter { + constructor() { + this._subscriptions = []; + this._oneTimeEvents = new Map(); + } + on(event, callback) { + if (this._oneTimeEvents.has(event)) { + return runCallback(callback, this._oneTimeEvents.get(event)); + } + this._subscriptions.push({ event, callback, once: false }); + return this; + } + off(event, callback) { + this._subscriptions = this._subscriptions.filter(s => s.event !== event || (callback && s.callback !== callback)); + return this; + } + once(event, callback) { + return new Promise(resolve => { + const ourCallback = (data) => { + resolve(data); + callback === null || callback === void 0 ? void 0 : callback(data); + }; + if (this._oneTimeEvents.has(event)) { + runCallback(ourCallback, this._oneTimeEvents.get(event)); + } + else { + this._subscriptions.push({ event, callback: ourCallback, once: true }); + } + }); + } + emit(event, data) { + if (this._oneTimeEvents.has(event)) { + throw new Error(`Event "${event}" was supposed to be emitted only once`); + } + for (let i = 0; i < this._subscriptions.length; i++) { + const s = this._subscriptions[i]; + if (s.event !== event) { + continue; + } + runCallback(s.callback, data); + if (s.once) { + this._subscriptions.splice(i, 1); + i--; + } + } + return this; + } + emitOnce(event, data) { + if (this._oneTimeEvents.has(event)) { + throw new Error(`Event "${event}" was supposed to be emitted only once`); + } + this.emit(event, data); + this._oneTimeEvents.set(event, data); // Mark event as being emitted once for future subscribers + this.off(event); // Remove all listeners for this event, they won't fire again + return this; + } +} +exports.SimpleEventEmitter = SimpleEventEmitter; + +},{}],49:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.EventStream = exports.EventPublisher = exports.EventSubscription = void 0; +class EventSubscription { + /** + * @param stop function that stops the subscription from receiving future events + */ + constructor(stop) { + this.stop = stop; + this._internal = { + state: 'init', + activatePromises: [], + }; + } + /** + * Notifies when subscription is activated or canceled + * @param callback optional callback to run each time activation state changes + * @returns returns a promise that resolves once activated, or rejects when it is denied (and no callback was supplied) + */ + activated(callback) { + if (callback) { + this._internal.activatePromises.push({ callback }); + if (this._internal.state === 'active') { + callback(true); + } + else if (this._internal.state === 'canceled') { + callback(false, this._internal.cancelReason); + } + } + // Changed behaviour: now also returns a Promise when the callback is used. + // This allows for 1 activated call to both handle: first activation result, + // and any future events using the callback + return new Promise((resolve, reject) => { + if (this._internal.state === 'active') { + return resolve(); + } + else if (this._internal.state === 'canceled' && !callback) { + return reject(new Error(this._internal.cancelReason)); + } + // eslint-disable-next-line @typescript-eslint/no-empty-function + const noop = () => { }; + this._internal.activatePromises.push({ + resolve, + reject: callback ? noop : reject, // Don't reject when callback is used: let callback handle this (prevents UnhandledPromiseRejection if only callback is used) + }); + }); + } + /** (for internal use) */ + _setActivationState(activated, cancelReason) { + this._internal.cancelReason = cancelReason; + this._internal.state = activated ? 'active' : 'canceled'; + while (this._internal.activatePromises.length > 0) { + const p = this._internal.activatePromises.shift(); + if (activated) { + p.callback && p.callback(true); + p.resolve && p.resolve(); + } + else { + p.callback && p.callback(false, cancelReason); + p.reject && p.reject(cancelReason); + } + } + } +} +exports.EventSubscription = EventSubscription; +class EventPublisher { + /** + * + * @param publish function that publishes a new value to subscribers, return if there are any active subscribers + * @param start function that notifies subscribers their subscription is activated + * @param cancel function that notifies subscribers their subscription has been canceled, removes all subscriptions + */ + constructor(publish, start, cancel) { + this.publish = publish; + this.start = start; + this.cancel = cancel; + } +} +exports.EventPublisher = EventPublisher; +class EventStream { + constructor(eventPublisherCallback) { + const subscribers = []; + let noMoreSubscribersCallback; + let activationState; + const _stoppedState = 'stopped (no more subscribers)'; + this.subscribe = (callback, activationCallback) => { + if (typeof callback !== 'function') { + throw new TypeError('callback must be a function'); + } + else if (activationState === _stoppedState) { + throw new Error('stream can\'t be used anymore because all subscribers were stopped'); + } + const sub = { + callback, + activationCallback: function (activated, cancelReason) { + activationCallback && activationCallback(activated, cancelReason); + this.subscription._setActivationState(activated, cancelReason); + }, + subscription: new EventSubscription(function stop() { + subscribers.splice(subscribers.indexOf(this), 1); + return checkActiveSubscribers(); + }), + }; + subscribers.push(sub); + if (typeof activationState !== 'undefined') { + if (activationState === true) { + activationCallback && activationCallback(true); + sub.subscription._setActivationState(true); + } + else if (typeof activationState === 'string') { + activationCallback && activationCallback(false, activationState); + sub.subscription._setActivationState(false, activationState); + } + } + return sub.subscription; + }; + const checkActiveSubscribers = () => { + let ret; + if (subscribers.length === 0) { + ret = noMoreSubscribersCallback && noMoreSubscribersCallback(); + activationState = _stoppedState; + } + return Promise.resolve(ret); + }; + this.unsubscribe = (callback) => { + const remove = callback + ? subscribers.filter(sub => sub.callback === callback) + : subscribers; + remove.forEach(sub => { + const i = subscribers.indexOf(sub); + subscribers.splice(i, 1); + }); + checkActiveSubscribers(); + }; + this.stop = () => { + // Stop (remove) all subscriptions + subscribers.splice(0); + checkActiveSubscribers(); + }; + /** + * For publishing side: adds a value that will trigger callbacks to all subscribers + * @param {any} val + * @returns {boolean} returns whether there are subscribers left + */ + const publish = (val) => { + subscribers.forEach(sub => { + try { + sub.callback(val); + } + catch (err) { + console.error(`Error running subscriber callback: ${err.message}`); + } + }); + if (subscribers.length === 0) { + checkActiveSubscribers(); + } + return subscribers.length > 0; + }; + /** + * For publishing side: let subscribers know their subscription is activated. Should be called only once + */ + const start = (allSubscriptionsStoppedCallback) => { + activationState = true; + noMoreSubscribersCallback = allSubscriptionsStoppedCallback; + subscribers.forEach(sub => { + sub.activationCallback && sub.activationCallback(true); + }); + }; + /** + * For publishing side: let subscribers know their subscription has been canceled. Should be called only once + */ + const cancel = (reason) => { + activationState = reason; + subscribers.forEach(sub => { + sub.activationCallback && sub.activationCallback(false, reason || new Error('unknown reason')); + }); + subscribers.splice(0); // Clear all + }; + const publisher = new EventPublisher(publish, start, cancel); + eventPublisherCallback(publisher); + } +} +exports.EventStream = EventStream; + +},{}],50:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.deserialize2 = exports.serialize2 = exports.serialize = exports.detectSerializeVersion = exports.deserialize = void 0; +const path_reference_1 = require("./path-reference"); +const utils_1 = require("./utils"); +const ascii85_1 = require("./ascii85"); +const path_info_1 = require("./path-info"); +const partial_array_1 = require("./partial-array"); +/* + There are now 2 different serialization methods for transporting values. + + v1: + The original version (v1) created an object with "map" and "val" properties. + The "map" property was made optional in v1.14.1 so they won't be present for values needing no serializing + + v2: + The new version replaces serialized values inline by objects containing ".type" and ".val" properties. + This serializing method was introduced by `export` and `import` methods because they use streaming and + are unable to prepare type mappings up-front. This format is smaller in transmission (in many cases), + and easier to read and process. + + original: { "date": (some date) } + v1 serialized: { "map": { "date": "date" }, "val": { date: "2022-04-22T07:49:23Z" } } + v2 serialized: { "date": { ".type": "date", ".val": "2022-04-22T07:49:23Z" } } + + original: (some date) + v1 serialized: { "map": "date", "val": "2022-04-22T07:49:23Z" } + v2 serialized: { ".type": "date", ".val": "2022-04-22T07:49:23Z" } + comment: top level value that need serializing is wrapped in an object with ".type" and ".val". v1 is smaller in this case + + original: 'some string' + v1 serialized: { "map": {}, "val": "some string" } + v2 serialized: "some string" + comment: primitive types such as strings don't need serializing and are returned as is in v2 + + original: { "date": (some date), "text": "Some string" } + v1 serialized: { "map": { "date": "date" }, "val": { date: "2022-04-22T07:49:23Z", "text": "Some string" } } + v2 serialized: { "date": { ".type": "date", ".val": "2022-04-22T07:49:23Z" }, "text": "Some string" } +*/ +/** + * Original deserialization method using global `map` and `val` properties + * @param data + * @returns + */ +const deserialize = (data) => { + if (data.map === null || typeof data.map === 'undefined') { + if (typeof data.val === 'undefined') { + throw new Error('serialized value must have a val property'); + } + return data.val; + } + const deserializeValue = (type, val) => { + if (type === 'date') { + // Date was serialized as a string (UTC) + return new Date(val); + } + else if (type === 'binary') { + // ascii85 encoded binary data + return ascii85_1.ascii85.decode(val); + } + else if (type === 'reference') { + return new path_reference_1.PathReference(val); + } + else if (type === 'regexp') { + return new RegExp(val.pattern, val.flags); + } + else if (type === 'array') { + return new partial_array_1.PartialArray(val); + } + else if (type === 'bigint') { + return BigInt(val); + } + return val; + }; + if (typeof data.map === 'string') { + // Single value + return deserializeValue(data.map, data.val); + } + Object.keys(data.map).forEach(path => { + const type = data.map[path]; + const keys = path_info_1.PathInfo.getPathKeys(path); + let parent = data; + let key = 'val'; + let val = data.val; + keys.forEach(k => { + key = k; + parent = val; + val = val[key]; // If an error occurs here, there's something wrong with the calling code... + }); + parent[key] = deserializeValue(type, val); + }); + return data.val; +}; +exports.deserialize = deserialize; +/** + * Function to detect the used serialization method with for the given object + * @param data + * @returns + */ +const detectSerializeVersion = (data) => { + if (typeof data !== 'object' || data === null) { + // This can only be v2, which allows primitive types to bypass serializing + return 2; + } + if ('map' in data && 'val' in data) { + return 1; + } + else if ('val' in data) { + // If it's v1, 'val' will be the only key in the object because serialize2 adds ".version": 2 to the object to prevent confusion. + if (Object.keys(data).length > 1) { + return 2; + } + return 1; + } + return 2; +}; +exports.detectSerializeVersion = detectSerializeVersion; +/** + * Original serialization method using global `map` and `val` properties + * @param data + * @returns + */ +const serialize = (obj) => { + var _a; + // Recursively find dates and binary data + if (obj === null || typeof obj !== 'object' || obj instanceof Date || obj instanceof ArrayBuffer || obj instanceof path_reference_1.PathReference || obj instanceof RegExp) { + // Single value + const ser = (0, exports.serialize)({ value: obj }); + return { + map: (_a = ser.map) === null || _a === void 0 ? void 0 : _a.value, + val: ser.val.value, + }; + } + obj = (0, utils_1.cloneObject)(obj); // Make sure we don't alter the original object + const process = (obj, mappings, prefix) => { + if (obj instanceof partial_array_1.PartialArray) { + mappings[prefix] = 'array'; + } + Object.keys(obj).forEach(key => { + const val = obj[key]; + const path = prefix.length === 0 ? key : `${prefix}/${key}`; + if (typeof val === 'bigint') { + obj[key] = val.toString(); + mappings[path] = 'bigint'; + } + else if (val instanceof Date) { + // serialize date to UTC string + obj[key] = val.toISOString(); + mappings[path] = 'date'; + } + else if (val instanceof ArrayBuffer) { + // Serialize binary data with ascii85 + obj[key] = ascii85_1.ascii85.encode(val); //ascii85.encode(Buffer.from(val)).toString(); + mappings[path] = 'binary'; + } + else if (val instanceof path_reference_1.PathReference) { + obj[key] = val.path; + mappings[path] = 'reference'; + } + else if (val instanceof RegExp) { + // Queries using the 'matches' filter with a regular expression can now also be used on remote db's + obj[key] = { pattern: val.source, flags: val.flags }; + mappings[path] = 'regexp'; + } + else if (typeof val === 'object' && val !== null) { + process(val, mappings, path); + } + }); + }; + const mappings = {}; + process(obj, mappings, ''); + const serialized = { val: obj }; + if (Object.keys(mappings).length > 0) { + serialized.map = mappings; + } + return serialized; +}; +exports.serialize = serialize; +/** + * New serialization method using inline `.type` and `.val` properties + * @param obj + * @returns + */ +const serialize2 = (obj) => { + // Recursively find data that needs serializing + const getSerializedValue = (val) => { + if (typeof val === 'bigint') { + // serialize bigint to string + return { + '.type': 'bigint', + '.val': val.toString(), + }; + } + else if (val instanceof Date) { + // serialize date to UTC string + return { + '.type': 'date', + '.val': val.toISOString(), + }; + } + else if (val instanceof ArrayBuffer) { + // Serialize binary data with ascii85 + return { + '.type': 'binary', + '.val': ascii85_1.ascii85.encode(val), + }; + } + else if (val instanceof path_reference_1.PathReference) { + return { + '.type': 'reference', + '.val': val.path, + }; + } + else if (val instanceof RegExp) { + // Queries using the 'matches' filter with a regular expression can now also be used on remote db's + return { + '.type': 'regexp', + '.val': `/${val.source}/${val.flags}`, // new: shorter + // '.val': { + // pattern: val.source, + // flags: val.flags + // } + }; + } + else if (typeof val === 'object' && val !== null) { + if (val instanceof Array) { + const copy = []; + for (let i = 0; i < val.length; i++) { + copy[i] = getSerializedValue(val[i]); + } + return copy; + } + else { + const copy = {}; //val instanceof Array ? [] : {} as SerializedValueV2; + if (val instanceof partial_array_1.PartialArray) { + // Mark the object as partial ("sparse") array + copy['.type'] = 'array'; + } + for (const prop in val) { + copy[prop] = getSerializedValue(val[prop]); + } + return copy; + } + } + else { + // Primitive value. Don't serialize + return val; + } + }; + const serialized = getSerializedValue(obj); + if (serialized !== null && typeof serialized === 'object' && 'val' in serialized && Object.keys(serialized).length === 1) { + // acebase-core v1.14.1 made the 'map' property optional. + // This v2 serialized object might be confused with a v1 without mappings, because it only has a "val" property + // To prevent this, mark the serialized object with version 2 + serialized['.version'] = 2; + } + return serialized; +}; +exports.serialize2 = serialize2; +/** + * New deserialization method using inline `.type` and `.val` properties + * @param obj + * @returns + */ +const deserialize2 = (data) => { + if (typeof data !== 'object' || data === null) { + // primitive value, not serialized + return data; + } + if (typeof data['.type'] === 'undefined') { + // No type given: this is a plain object or array + if (data instanceof Array) { + // Plain array, deserialize items into a copy + const copy = []; + const arr = data; + for (let i = 0; i < arr.length; i++) { + copy.push((0, exports.deserialize2)(arr[i])); + } + return copy; + } + else { + // Plain object, deserialize properties into a copy + const copy = {}; + const obj = data; + for (const prop in obj) { + copy[prop] = (0, exports.deserialize2)(obj[prop]); + } + return copy; + } + } + else if (typeof data['.type'] === 'string') { + const dataType = data['.type'].toLowerCase(); + if (dataType === 'bigint') { + const val = data['.val']; + return BigInt(val); + } + else if (dataType === 'array') { + // partial ("sparse") array, deserialize children into a copy + const copy = {}; + for (const index in data) { + copy[index] = (0, exports.deserialize2)(data[index]); + } + delete copy['.type']; + return new partial_array_1.PartialArray(copy); + } + else if (dataType === 'date') { + // Date was serialized as a string (UTC) + const val = data['.val']; + return new Date(val); + } + else if (dataType === 'binary') { + // ascii85 encoded binary data + const val = data['.val']; + return ascii85_1.ascii85.decode(val); + } + else if (dataType === 'reference') { + const val = data['.val']; + return new path_reference_1.PathReference(val); + } + else if (dataType === 'regexp') { + const val = data['.val']; + if (typeof val === 'string') { + // serialized as '/(pattern)/flags' + const match = /^\/(.*)\/([a-z]+)$/.exec(val); + return new RegExp(match[1], match[2]); + } + // serialized as object with pattern & flags properties + return new RegExp(val.pattern, val.flags); + } + } + throw new Error(`Unknown data type "${data['.type']}" in serialized value`); +}; +exports.deserialize2 = deserialize2; + +},{"./ascii85":29,"./partial-array":41,"./path-info":42,"./path-reference":43,"./utils":52}],51:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TypeMappings = void 0; +const utils_1 = require("./utils"); +const path_info_1 = require("./path-info"); +const data_reference_1 = require("./data-reference"); +const data_snapshot_1 = require("./data-snapshot"); +/** + * (for internal use) - gets the mapping set for a specific path + */ +function get(mappings, path) { + // path points to the mapped (object container) location + path = path.replace(/^\/|\/$/g, ''); // trim slashes + const keys = path_info_1.PathInfo.getPathKeys(path); + const mappedPath = Object.keys(mappings).find(mpath => { + const mkeys = path_info_1.PathInfo.getPathKeys(mpath); + if (mkeys.length !== keys.length) { + return false; // Can't be a match + } + return mkeys.every((mkey, index) => { + if (mkey === '*' || mkey[0] === '$') { + return true; // wildcard + } + return mkey === keys[index]; + }); + }); + const mapping = mappings[mappedPath]; + return mapping; +} +/** + * (for internal use) - gets the mapping set for a specific path's parent + */ +function map(mappings, path) { + // path points to the object location, its parent should have the mapping + const targetPath = path_info_1.PathInfo.get(path).parentPath; + if (targetPath === null) { + return; + } + return get(mappings, targetPath); +} +/** + * (for internal use) - gets all mappings set for a specific path and all subnodes + * @returns returns array of all matched mappings in path + */ +function mapDeep(mappings, entryPath) { + // returns mapping for this node, and all mappings for nested nodes + // entryPath: "users/ewout" + // mappingPath: "users" + // mappingPath: "users/*/posts" + entryPath = entryPath.replace(/^\/|\/$/g, ''); // trim slashes + // Start with current path's parent node + const pathInfo = path_info_1.PathInfo.get(entryPath); + const startPath = pathInfo.parentPath; + const keys = startPath ? path_info_1.PathInfo.getPathKeys(startPath) : []; + // Every path that starts with startPath, is a match + // TODO: refactor to return Object.keys(mappings),filter(...) + const matches = Object.keys(mappings).reduce((m, mpath) => { + //const mkeys = mpath.length > 0 ? mpath.split("/") : []; + const mkeys = path_info_1.PathInfo.getPathKeys(mpath); + if (mkeys.length < keys.length) { + return m; // Can't be a match + } + let isMatch = true; + if (keys.length === 0 && startPath !== null) { + // Only match first node's children if mapping pattern is "*" or "$variable" + isMatch = mkeys.length === 1 && (mkeys[0] === '*' || mkeys[0][0] === '$'); + } + else { + mkeys.every((mkey, index) => { + if (index >= keys.length) { + return false; // stop .every loop + } + else if (mkey === '*' || mkey[0] === '$' || mkey === keys[index]) { + return true; // continue .every loop + } + else { + isMatch = false; + return false; // stop .every loop + } + }); + } + if (isMatch) { + const mapping = mappings[mpath]; + m.push({ path: mpath, type: mapping }); + } + return m; + }, []); + return matches; +} +/** + * (for internal use) - serializes or deserializes an object using type mappings + * @returns returns the (de)serialized value + */ +function process(db, mappings, path, obj, action) { + if (obj === null || typeof obj !== 'object') { + return obj; + } + const keys = path_info_1.PathInfo.getPathKeys(path); // path.length > 0 ? path.split("/") : []; + const m = mapDeep(mappings, path); + const changes = []; + m.sort((a, b) => path_info_1.PathInfo.getPathKeys(a.path).length > path_info_1.PathInfo.getPathKeys(b.path).length ? -1 : 1); // Deepest paths first + m.forEach(mapping => { + const mkeys = path_info_1.PathInfo.getPathKeys(mapping.path); //mapping.path.length > 0 ? mapping.path.split("/") : []; + mkeys.push('*'); + const mTrailKeys = mkeys.slice(keys.length); + if (mTrailKeys.length === 0) { + const vars = path_info_1.PathInfo.extractVariables(mapping.path, path); + const ref = new data_reference_1.DataReference(db, path, vars); + if (action === 'serialize') { + // serialize this object + obj = mapping.type.serialize(obj, ref); + } + else if (action === 'deserialize') { + // deserialize this object + const snap = new data_snapshot_1.DataSnapshot(ref, obj); + obj = mapping.type.deserialize(snap); + } + return; + } + // Find all nested objects at this trail path + const process = (parentPath, parent, keys) => { + if (obj === null || typeof obj !== 'object') { + return obj; + } + const key = keys[0]; + let children = []; + if (key === '*' || key[0] === '$') { + // Include all children + if (parent instanceof Array) { + children = parent.map((val, index) => ({ key: index, val })); + } + else { + children = Object.keys(parent).map(k => ({ key: k, val: parent[k] })); + } + } + else { + // Get the 1 child + const child = parent[key]; + if (typeof child === 'object') { + children.push({ key, val: child }); + } + } + children.forEach(child => { + const childPath = path_info_1.PathInfo.getChildPath(parentPath, child.key); + const vars = path_info_1.PathInfo.extractVariables(mapping.path, childPath); + const ref = new data_reference_1.DataReference(db, childPath, vars); + if (keys.length === 1) { + // TODO: this alters the existing object, we must build our own copy! + if (action === 'serialize') { + // serialize this object + changes.push({ parent, key: child.key, original: parent[child.key] }); + parent[child.key] = mapping.type.serialize(child.val, ref); + } + else if (action === 'deserialize') { + // deserialize this object + const snap = new data_snapshot_1.DataSnapshot(ref, child.val); + parent[child.key] = mapping.type.deserialize(snap); + } + } + else { + // Dig deeper + process(childPath, child.val, keys.slice(1)); + } + }); + }; + process(path, obj, mTrailKeys); + }); + if (action === 'serialize') { + // Clone this serialized object so any types that remained + // will become plain objects without functions, and we can restore + // the original object's values if any mappings were processed. + // This will also prevent circular references + obj = (0, utils_1.cloneObject)(obj); + if (changes.length > 0) { + // Restore the changes made to the original object + changes.forEach(change => { + change.parent[change.key] = change.original; + }); + } + } + return obj; +} +const _mappings = Symbol('mappings'); +class TypeMappings { + constructor(db) { + this.db = db; + this[_mappings] = {}; + } + /** (for internal use) */ + get mappings() { return this[_mappings]; } + /** (for internal use) */ + map(path) { + return map(this[_mappings], path); + } + /** + * Maps objects that are stored in a specific path to a class, so they can automatically be + * serialized when stored to, and deserialized (instantiated) when loaded from the database. + * @param path path to an object container, eg "users" or "users/*\/posts" + * @param type class to bind all child objects of path to + * Best practice is to implement 2 methods for instantiation and serializing of your objects: + * 1) `static create(snap: DataSnapshot)` and 2) `serialize(ref: DataReference)`. See example + * @param options (optional) You can specify the functions to use to + * serialize and/or instantiate your class. If you do not specificy a creator (constructor) method, + * AceBase will call `YourClass.create(snapshot)` method if it exists, or create an instance of + * YourClass with `new YourClass(snapshot)`. + * If you do not specifiy a serializer method, AceBase will call `YourClass.prototype.serialize(ref)` + * if it exists, or tries storing your object's fields unaltered. NOTE: `this` in your creator + * function will point to `YourClass`, and `this` in your serializer function will point to the + * `instance` of `YourClass`. + * @example + * class User { + * static create(snap: DataSnapshot): User { + * // Deserialize (instantiate) User from plain database object + * let user = new User(); + * Object.assign(user, snap.val()); // Copy all properties to user + * user.id = snap.ref.key; // Add the key as id + * return user; + * } + * serialize(ref: DataReference) { + * // Serialize user for database storage + * return { + * name: this.name + * email: this.email + * }; + * } + * } + * db.types.bind('users', User); // Automatically uses serialize and static create methods + */ + bind(path, type, options = {}) { + // Maps objects that are stored in a specific path to a constructor method, + // so they are automatically deserialized + if (typeof path !== 'string') { + throw new TypeError('path must be a string'); + } + if (typeof type !== 'function') { + throw new TypeError('constructor must be a function'); + } + if (typeof options.serializer === 'undefined') { + // if (typeof type.prototype.serialize === 'function') { + // // Use .serialize instance method + // options.serializer = type.prototype.serialize; + // } + // Use object's serialize method upon serialization (if available) + } + else if (typeof options.serializer === 'string') { + if (typeof type.prototype[options.serializer] === 'function') { + options.serializer = type.prototype[options.serializer]; + } + else { + throw new TypeError(`${type.name}.prototype.${options.serializer} is not a function, cannot use it as serializer`); + } + } + else if (typeof options.serializer !== 'function') { + throw new TypeError(`serializer for class ${type.name} must be a function, or the name of a prototype method`); + } + if (typeof options.creator === 'undefined') { + if (typeof type.create === 'function') { + // Use static .create as creator method + options.creator = type.create; + } + } + else if (typeof options.creator === 'string') { + if (typeof type[options.creator] === 'function') { + options.creator = type[options.creator]; + } + else { + throw new TypeError(`${type.name}.${options.creator} is not a function, cannot use it as creator`); + } + } + else if (typeof options.creator !== 'function') { + throw new TypeError(`creator for class ${type.name} must be a function, or the name of a static method`); + } + path = path.replace(/^\/|\/$/g, ''); // trim slashes + this[_mappings][path] = { + db: this.db, + type, + creator: options.creator, + serializer: options.serializer, + deserialize(snap) { + // run constructor method + let obj; + if (this.creator) { + obj = this.creator.call(this.type, snap); + } + else { + obj = new this.type(snap); + } + return obj; + }, + serialize(obj, ref) { + if (this.serializer) { + obj = this.serializer.call(obj, ref, obj); + } + else if (obj && typeof obj.serialize === 'function') { + obj = obj.serialize(ref, obj); + } + return obj; + }, + }; + } + /** + * (for internal use) + * Serializes any child in given object that has a type mapping + * @param {string} path | path to the object's location + * @param {object} obj | object to serialize + */ + serialize(path, obj) { + return process(this.db, this[_mappings], path, obj, 'serialize'); + } + /** + * (for internal use) + * Deserialzes any child in given object that has a type mapping + * @param {string} path | path to the object's location + * @param {object} obj | object to deserialize + */ + deserialize(path, obj) { + return process(this.db, this[_mappings], path, obj, 'deserialize'); + } +} +exports.TypeMappings = TypeMappings; + +},{"./data-reference":34,"./data-snapshot":35,"./path-info":42,"./utils":52}],52:[function(require,module,exports){ +(function (Buffer){(function (){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.defer = exports.getChildValues = exports.getMutations = exports.compareValues = exports.ObjectDifferences = exports.valuesAreEqual = exports.cloneObject = exports.concatTypedArrays = exports.decodeString = exports.encodeString = exports.bytesToBigint = exports.bigintToBytes = exports.bytesToNumber = exports.numberToBytes = void 0; +const path_reference_1 = require("./path-reference"); +const process_1 = require("./process"); +const partial_array_1 = require("./partial-array"); +function numberToBytes(number) { + const bytes = new Uint8Array(8); + const view = new DataView(bytes.buffer); + view.setFloat64(0, number); + return new Array(...bytes); +} +exports.numberToBytes = numberToBytes; +function bytesToNumber(bytes) { + const length = Array.isArray(bytes) ? bytes.length : bytes.byteLength; + if (length !== 8) { + throw new TypeError('must be 8 bytes'); + } + const bin = new Uint8Array(bytes); + const view = new DataView(bin.buffer); + const nr = view.getFloat64(0); + return nr; +} +exports.bytesToNumber = bytesToNumber; +const big = { + zero: BigInt(0), + one: BigInt(1), + two: BigInt(2), + eight: BigInt(8), + ff: BigInt(0xff), +}; +function bigintToBytes(number) { + if (typeof number !== 'bigint') { + throw new Error('number must be a bigint'); + } + const bytes = []; + const negative = number < big.zero; + do { + const byte = Number(number & big.ff); // NOTE: bits are inverted on negative numbers + bytes.push(byte); + number = number >> big.eight; + } while (number !== (negative ? -big.one : big.zero)); + bytes.reverse(); // little-endian + if (negative ? bytes[0] < 128 : bytes[0] >= 128) { + bytes.unshift(negative ? 255 : 0); // extra sign byte needed + } + return bytes; +} +exports.bigintToBytes = bigintToBytes; +function bytesToBigint(bytes) { + const negative = bytes[0] >= 128; + let number = big.zero; + for (let b of bytes) { + if (negative) { + b = ~b & 0xff; + } // Invert the bits + number = (number << big.eight) + BigInt(b); + } + if (negative) { + number = -(number + big.one); + } + return number; +} +exports.bytesToBigint = bytesToBigint; +/** + * Converts a string to a utf-8 encoded Uint8Array + */ +function encodeString(str) { + if (typeof TextEncoder !== 'undefined') { + // Modern browsers, Node.js v11.0.0+ (or v8.3.0+ with util.TextEncoder) + const encoder = new TextEncoder(); + return encoder.encode(str); + } + else if (typeof Buffer === 'function') { + // Node.js + const buf = Buffer.from(str, 'utf-8'); + return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength); + } + else { + // Older browsers. Manually encode + const arr = []; + for (let i = 0; i < str.length; i++) { + let code = str.charCodeAt(i); + if (code > 128) { + // Attempt simple UTF-8 conversion. See https://en.wikipedia.org/wiki/UTF-8 + if ((code & 0xd800) === 0xd800) { + // code starts with 1101 10...: this is a 2-part utf-16 char code + const nextCode = str.charCodeAt(i + 1); + if ((nextCode & 0xdc00) !== 0xdc00) { + // next code must start with 1101 11... + throw new Error('follow-up utf-16 character does not start with 0xDC00'); + } + i++; + const p1 = code & 0x3ff; // Only use last 10 bits + const p2 = nextCode & 0x3ff; + // Create code point from these 2: (see https://en.wikipedia.org/wiki/UTF-16) + code = 0x10000 | (p1 << 10) | p2; + } + if (code < 2048) { + // Use 2 bytes for 11 bit value, first byte starts with 110xxxxx (0xc0), 2nd byte with 10xxxxxx (0x80) + const b1 = 0xc0 | ((code >> 6) & 0x1f); // 0xc0 = 11000000, 0x1f = 11111 + const b2 = 0x80 | (code & 0x3f); // 0x80 = 10000000, 0x3f = 111111 + arr.push(b1, b2); + } + else if (code < 65536) { + // Use 3 bytes for 16-bit value, bits per byte: 4, 6, 6 + const b1 = 0xe0 | ((code >> 12) & 0xf); // 0xe0 = 11100000, 0xf = 1111 + const b2 = 0x80 | ((code >> 6) & 0x3f); // 0x80 = 10000000, 0x3f = 111111 + const b3 = 0x80 | (code & 0x3f); + arr.push(b1, b2, b3); + } + else if (code < 2097152) { + // Use 4 bytes for 21-bit value, bits per byte: 3, 6, 6, 6 + const b1 = 0xf0 | ((code >> 18) & 0x7); // 0xf0 = 11110000, 0x7 = 111 + const b2 = 0x80 | ((code >> 12) & 0x3f); // 0x80 = 10000000, 0x3f = 111111 + const b3 = 0x80 | ((code >> 6) & 0x3f); // 0x80 = 10000000, 0x3f = 111111 + const b4 = 0x80 | (code & 0x3f); + arr.push(b1, b2, b3, b4); + } + else { + throw new Error(`Cannot convert character ${str.charAt(i)} (code ${code}) to utf-8`); + } + } + else { + arr.push(code < 128 ? code : 63); // 63 = ? + } + } + return new Uint8Array(arr); + } +} +exports.encodeString = encodeString; +/** + * Converts a utf-8 encoded buffer to string + */ +function decodeString(buffer) { + if (typeof TextDecoder !== 'undefined') { + // Modern browsers, Node.js v11.0.0+ (or v8.3.0+ with util.TextDecoder) + const decoder = new TextDecoder(); + if (buffer instanceof Uint8Array) { + return decoder.decode(buffer); + } + const buf = Uint8Array.from(buffer); + return decoder.decode(buf); + } + else if (typeof Buffer === 'function') { + // Node.js (v10 and below) + if (buffer instanceof Array) { + buffer = Uint8Array.from(buffer); // convert to typed array + } + if (!(buffer instanceof Buffer) && 'buffer' in buffer && buffer.buffer instanceof ArrayBuffer) { + const typedArray = buffer; + buffer = Buffer.from(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); // Convert typed array to node.js Buffer + } + if (!(buffer instanceof Buffer)) { + throw new Error('Unsupported buffer argument'); + } + return buffer.toString('utf-8'); + } + else { + // Older browsers. Manually decode! + if (!(buffer instanceof Uint8Array) && 'buffer' in buffer && buffer['buffer'] instanceof ArrayBuffer) { + // Convert TypedArray to Uint8Array + const typedArray = buffer; + buffer = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); + } + if (buffer instanceof Buffer || buffer instanceof Array || buffer instanceof Uint8Array) { + let str = ''; + for (let i = 0; i < buffer.length; i++) { + let code = buffer[i]; + if (code > 128) { + // Decode Unicode character + if ((code & 0xf0) === 0xf0) { + // 4 byte char + const b1 = code, b2 = buffer[i + 1], b3 = buffer[i + 2], b4 = buffer[i + 3]; + code = ((b1 & 0x7) << 18) | ((b2 & 0x3f) << 12) | ((b3 & 0x3f) << 6) | (b4 & 0x3f); + i += 3; + } + else if ((code & 0xe0) === 0xe0) { + // 3 byte char + const b1 = code, b2 = buffer[i + 1], b3 = buffer[i + 2]; + code = ((b1 & 0xf) << 12) | ((b2 & 0x3f) << 6) | (b3 & 0x3f); + i += 2; + } + else if ((code & 0xc0) === 0xc0) { + // 2 byte char + const b1 = code, b2 = buffer[i + 1]; + code = ((b1 & 0x1f) << 6) | (b2 & 0x3f); + i++; + } + else { + throw new Error('invalid utf-8 data'); + } + } + if (code >= 65536) { + // Split into 2-part utf-16 char codes + code ^= 0x10000; + const p1 = 0xd800 | (code >> 10); + const p2 = 0xdc00 | (code & 0x3ff); + str += String.fromCharCode(p1); + str += String.fromCharCode(p2); + } + else { + str += String.fromCharCode(code); + } + } + return str; + } + else { + throw new Error('Unsupported buffer argument'); + } + } +} +exports.decodeString = decodeString; +function concatTypedArrays(a, b) { + const c = new a.constructor(a.length + b.length); + c.set(a); + c.set(b, a.length); + return c; +} +exports.concatTypedArrays = concatTypedArrays; +function cloneObject(original, stack) { + var _a; + if (((_a = original === null || original === void 0 ? void 0 : original.constructor) === null || _a === void 0 ? void 0 : _a.name) === 'DataSnapshot') { + throw new TypeError(`Object to clone is a DataSnapshot (path "${original.ref.path}")`); + } + const checkAndFixTypedArray = obj => { + if (obj !== null && typeof obj === 'object' + && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' + && ['Buffer', 'Uint8Array', 'Int8Array', 'Uint16Array', 'Int16Array', 'Uint32Array', 'Int32Array', 'BigUint64Array', 'BigInt64Array'].includes(obj.constructor.name)) { + // FIX for typed array being converted to objects with numeric properties: + // Convert Buffer or TypedArray to ArrayBuffer + obj = obj.buffer.slice(obj.byteOffset, obj.byteOffset + obj.byteLength); + } + return obj; + }; + original = checkAndFixTypedArray(original); + if (typeof original !== 'object' || original === null || original instanceof Date || original instanceof ArrayBuffer || original instanceof path_reference_1.PathReference || original instanceof RegExp) { + return original; + } + const cloneValue = (val) => { + if (stack.indexOf(val) >= 0) { + throw new ReferenceError('object contains a circular reference'); + } + val = checkAndFixTypedArray(val); + if (val === null || val instanceof Date || val instanceof ArrayBuffer || val instanceof path_reference_1.PathReference || val instanceof RegExp) { // || val instanceof ID + return val; + } + else if (typeof val === 'object') { + stack.push(val); + val = cloneObject(val, stack); + stack.pop(); + return val; + } + else { + return val; // Anything other can just be copied + } + }; + if (typeof stack === 'undefined') { + stack = [original]; + } + const clone = original instanceof Array ? [] : original instanceof partial_array_1.PartialArray ? new partial_array_1.PartialArray() : {}; + Object.keys(original).forEach(key => { + const val = original[key]; + if (typeof val === 'function') { + return; // skip functions + } + clone[key] = cloneValue(val); + }); + return clone; +} +exports.cloneObject = cloneObject; +const isTypedArray = val => typeof val === 'object' && ['ArrayBuffer', 'Buffer', 'Uint8Array', 'Uint16Array', 'Uint32Array', 'Int8Array', 'Int16Array', 'Int32Array'].includes(val.constructor.name); +// CONSIDER: updating isTypedArray to: const isTypedArray = val => typeof val === 'object' && 'buffer' in val && 'byteOffset' in val && 'byteLength' in val; +function valuesAreEqual(val1, val2) { + if (val1 === val2) { + return true; + } + if (typeof val1 !== typeof val2) { + return false; + } + if (typeof val1 === 'object' || typeof val2 === 'object') { + if (val1 === null || val2 === null) { + return false; + } + if (val1 instanceof path_reference_1.PathReference || val2 instanceof path_reference_1.PathReference) { + return val1 instanceof path_reference_1.PathReference && val2 instanceof path_reference_1.PathReference && val1.path === val2.path; + } + if (val1 instanceof Date || val2 instanceof Date) { + return val1 instanceof Date && val2 instanceof Date && val1.getTime() === val2.getTime(); + } + if (val1 instanceof Array || val2 instanceof Array) { + return val1 instanceof Array && val2 instanceof Array && val1.length === val2.length && val1.every((item, i) => valuesAreEqual(val1[i], val2[i])); + } + if (isTypedArray(val1) || isTypedArray(val2)) { + if (!isTypedArray(val1) || !isTypedArray(val2) || val1.byteLength === val2.byteLength) { + return false; + } + const typed1 = val1 instanceof ArrayBuffer ? new Uint8Array(val1) : new Uint8Array(val1.buffer, val1.byteOffset, val1.byteLength), typed2 = val2 instanceof ArrayBuffer ? new Uint8Array(val2) : new Uint8Array(val2.buffer, val2.byteOffset, val2.byteLength); + return typed1.every((val, i) => typed2[i] === val); + } + const keys1 = Object.keys(val1), keys2 = Object.keys(val2); + return keys1.length === keys2.length && keys1.every(key => keys2.includes(key)) && keys1.every(key => valuesAreEqual(val1[key], val2[key])); + } + return false; +} +exports.valuesAreEqual = valuesAreEqual; +class ObjectDifferences { + constructor(added, removed, changed) { + this.added = added; + this.removed = removed; + this.changed = changed; + } + forChild(key) { + if (this.added.includes(key)) { + return 'added'; + } + if (this.removed.includes(key)) { + return 'removed'; + } + const changed = this.changed.find(ch => ch.key === key); + return changed ? changed.change : 'identical'; + } +} +exports.ObjectDifferences = ObjectDifferences; +function compareValues(oldVal, newVal, sortedResults = false) { + const voids = [undefined, null]; + if (oldVal === newVal) { + return 'identical'; + } + else if (voids.indexOf(oldVal) >= 0 && voids.indexOf(newVal) < 0) { + return 'added'; + } + else if (voids.indexOf(oldVal) < 0 && voids.indexOf(newVal) >= 0) { + return 'removed'; + } + else if (typeof oldVal !== typeof newVal) { + return 'changed'; + } + else if (isTypedArray(oldVal) || isTypedArray(newVal)) { + // One or both values are typed arrays. + if (!isTypedArray(oldVal) || !isTypedArray(newVal)) { + return 'changed'; + } + // Both are typed. Compare lengths and byte content of typed arrays + const typed1 = oldVal instanceof Uint8Array ? oldVal : oldVal instanceof ArrayBuffer ? new Uint8Array(oldVal) : new Uint8Array(oldVal.buffer, oldVal.byteOffset, oldVal.byteLength); + const typed2 = newVal instanceof Uint8Array ? newVal : newVal instanceof ArrayBuffer ? new Uint8Array(newVal) : new Uint8Array(newVal.buffer, newVal.byteOffset, newVal.byteLength); + return typed1.byteLength === typed2.byteLength && typed1.every((val, i) => typed2[i] === val) ? 'identical' : 'changed'; + } + else if (oldVal instanceof Date || newVal instanceof Date) { + return oldVal instanceof Date && newVal instanceof Date && oldVal.getTime() === newVal.getTime() ? 'identical' : 'changed'; + } + else if (oldVal instanceof path_reference_1.PathReference || newVal instanceof path_reference_1.PathReference) { + return oldVal instanceof path_reference_1.PathReference && newVal instanceof path_reference_1.PathReference && oldVal.path === newVal.path ? 'identical' : 'changed'; + } + else if (typeof oldVal === 'object') { + // Do key-by-key comparison of objects + const isArray = oldVal instanceof Array; + const getKeys = obj => { + let keys = Object.keys(obj).filter(key => !voids.includes(obj[key])); + if (isArray) { + keys = keys.map((v) => parseInt(v)); + } + return keys; + }; + const oldKeys = getKeys(oldVal); + const newKeys = getKeys(newVal); + const removedKeys = oldKeys.filter(key => !newKeys.includes(key)); + const addedKeys = newKeys.filter(key => !oldKeys.includes(key)); + const changedKeys = newKeys.reduce((changed, key) => { + if (oldKeys.includes(key)) { + const val1 = oldVal[key]; + const val2 = newVal[key]; + const c = compareValues(val1, val2); + if (c !== 'identical') { + changed.push({ key, change: c }); + } + } + return changed; + }, []); + if (addedKeys.length === 0 && removedKeys.length === 0 && changedKeys.length === 0) { + return 'identical'; + } + else { + return new ObjectDifferences(addedKeys, removedKeys, sortedResults ? changedKeys.sort((a, b) => a.key < b.key ? -1 : 1) : changedKeys); + } + } + return 'changed'; +} +exports.compareValues = compareValues; +function getMutations(oldVal, newVal, sortedResults = false) { + const process = (target, compareResult, prev, val) => { + switch (compareResult) { + case 'identical': return []; + case 'changed': return [{ target, prev, val }]; + case 'added': return [{ target, prev: null, val }]; + case 'removed': return [{ target, prev, val: null }]; + default: { + let changes = []; + compareResult.added.forEach(key => changes.push({ target: target.concat(key), prev: null, val: val[key] })); + compareResult.removed.forEach(key => changes.push({ target: target.concat(key), prev: prev[key], val: null })); + compareResult.changed.forEach(item => { + const childChanges = process(target.concat(item.key), item.change, prev[item.key], val[item.key]); + changes = changes.concat(childChanges); + }); + return changes; + } + } + }; + const compareResult = compareValues(oldVal, newVal, sortedResults); + return process([], compareResult, oldVal, newVal); +} +exports.getMutations = getMutations; +function getChildValues(childKey, oldValue, newValue) { + oldValue = oldValue === null ? null : oldValue[childKey]; + if (typeof oldValue === 'undefined') { + oldValue = null; + } + newValue = newValue === null ? null : newValue[childKey]; + if (typeof newValue === 'undefined') { + newValue = null; + } + return { oldValue, newValue }; +} +exports.getChildValues = getChildValues; +function defer(fn) { + process_1.default.nextTick(fn); +} +exports.defer = defer; + +}).call(this)}).call(this,require("buffer").Buffer) +},{"./partial-array":41,"./path-reference":43,"./process":44,"buffer":53}],53:[function(require,module,exports){ + +},{}]},{},[5])(5) }); diff --git a/dist/browser.min.js b/dist/browser.min.js index b4cb5d0..833e479 100644 --- a/dist/browser.min.js +++ b/dist/browser.min.js @@ -1 +1 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.acebase=f()}})((function(){var define,module,exports;return function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,(function(r){var n=e[i][1][r];return o(n||r)}),p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i{this._ready=true}))}async ready(callback){if(!this._ready){await new Promise((resolve=>this.on("ready",resolve)))}callback===null||callback===void 0?void 0:callback()}get isReady(){return this._ready}setObservable(ObservableImpl){(0,optional_observable_1.setObservable)(ObservableImpl)}ref(path){return new data_reference_1.DataReference(this,path)}get root(){return this.ref("")}query(path){const ref=new data_reference_1.DataReference(this,path);return new data_reference_1.DataReferenceQuery(ref)}get indexes(){return{get:()=>this.api.getIndexes(),create:(path,key,options)=>this.api.createIndex(path,key,options),delete:async filePath=>this.api.deleteIndex(filePath)}}get schema(){return{get:path=>this.api.getSchema(path),set:(path,schema)=>this.api.setSchema(path,schema),all:()=>this.api.getSchemas(),check:(path,value,isUpdate)=>this.api.validateSchema(path,value,isUpdate)}}}exports.AceBaseBase=AceBaseBase},{"./data-reference":8,"./debug":10,"./optional-observable":14,"./simple-colors":21,"./simple-event-emitter":22,"./type-mappings":25}],2:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Api=void 0;class NotImplementedError extends Error{constructor(name){super(`${name} is not implemented`)}}class Api{constructor(){}stats(options){throw new NotImplementedError("stats")}subscribe(path,event,callback,settings){throw new NotImplementedError("subscribe")}unsubscribe(path,event,callback){throw new NotImplementedError("unsubscribe")}update(path,updates,options){throw new NotImplementedError("update")}set(path,value,options){throw new NotImplementedError("set")}get(path,options){throw new NotImplementedError("get")}transaction(path,callback,options){throw new NotImplementedError("transaction")}exists(path){throw new NotImplementedError("exists")}query(path,query,options){throw new NotImplementedError("query")}reflect(path,type,args){throw new NotImplementedError("reflect")}export(path,write,options){throw new NotImplementedError("export")}import(path,read,options){throw new NotImplementedError("import")}createIndex(path,key,options){throw new NotImplementedError("createIndex")}getIndexes(){throw new NotImplementedError("getIndexes")}deleteIndex(filePath){throw new NotImplementedError("deleteIndex")}setSchema(path,schema){throw new NotImplementedError("setSchema")}getSchema(path){throw new NotImplementedError("getSchema")}getSchemas(){throw new NotImplementedError("getSchemas")}validateSchema(path,value,isUpdate){throw new NotImplementedError("validateSchema")}getMutations(filter){throw new NotImplementedError("getMutations")}getChanges(filter){throw new NotImplementedError("getChanges")}}exports.Api=Api},{}],3:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ascii85=void 0;function c(input,length,result){const b=[0,0,0,0,0];for(let i=0;i";return ret}exports.ascii85={encode:function(arr){if(arr instanceof ArrayBuffer){arr=new Uint8Array(arr,0,arr.byteLength)}return encode(arr)},decode:function(input){if(!input.startsWith("<~")||!input.endsWith("~>")){throw new Error("Invalid input string")}input=input.substr(2,input.length-4);const n=input.length,r=[],b=[0,0,0,0,0];let t,x,y,d;for(let i=0;i>>=8;y=t&255;t>>>=8;r.push(t>>>8,t&255,y,x);for(let j=d;j<5;++j,r.pop());i+=4}const data=new Uint8Array(r);return data.buffer.slice(data.byteOffset,data.byteOffset+data.byteLength)}}},{}],4:[function(require,module,exports){"use strict";var _a,_b;Object.defineProperty(exports,"__esModule",{value:true});const pad_1=require("../pad");const env=typeof window==="object"?window:self,globalCount=Object.keys(env).length,mimeTypesLength=(_b=(_a=navigator.mimeTypes)===null||_a===void 0?void 0:_a.length)!==null&&_b!==void 0?_b:0,clientId=(0,pad_1.default)((mimeTypesLength+navigator.userAgent.length).toString(36)+globalCount.toString(36),4);function fingerprint(){return clientId}exports.default=fingerprint},{"../pad":6}],5:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});const fingerprint_1=require("./fingerprint");const pad_1=require("./pad");let c=0;const blockSize=4,base=36,discreteValues=Math.pow(base,blockSize);function randomBlock(){return(0,pad_1.default)((Math.random()*discreteValues<<0).toString(base),blockSize)}function safeCounter(){c=ct2[i]===key))}static isAncestor(ancestor,other){return ancestor.lengthother[i]===key))}static isDescendant(descendant,other){return descendant.length>other.length&&other.every(((key,i)=>descendant[i]===key))}}const isProxy=Symbol("isProxy");class LiveDataProxy{static async create(ref,options){var _a;ref=new data_reference_1.DataReference(ref.db,ref.path);let cache,loaded=false;let latestCursor=options===null||options===void 0?void 0:options.cursor;let proxy;const proxyId=id_1.ID.generate();const clientSubscriptions=[];const clientEventEmitter=new simple_event_emitter_1.SimpleEventEmitter;clientEventEmitter.on("cursor",(cursor=>latestCursor=cursor));clientEventEmitter.on("error",(err=>{console.error(err.message,err.details)}));const applyChange=(keys,newValue)=>{if(keys.length===0){cache=newValue;return true}const allowCreation=false;if(allowCreation){cache=typeof keys[0]==="number"?[]:{}}let target=cache;const trailKeys=keys.slice();while(trailKeys.length>1){const key=trailKeys.shift();if(!(key in target)){if(allowCreation){target[key]=typeof key==="number"?[]:{}}else{return false}}target=target[key]}const prop=trailKeys.shift();if(newValue===null){target instanceof Array?target.splice(prop,1):delete target[prop]}else{target[prop]=newValue}return true};const syncFallback=async()=>{if(!loaded){return}await reload()};const subscription=ref.on("mutations",{syncFallback:syncFallback}).subscribe((async snap=>{var _a;if(!loaded){return}const context=snap.context();const isRemote=((_a=context.acebase_proxy)===null||_a===void 0?void 0:_a.id)!==proxyId;if(!isRemote){return}const mutations=snap.val(false);const proceed=mutations.every((mutation=>{if(!applyChange(mutation.target,mutation.val)){return false}const changeRef=mutation.target.reduce(((ref,key)=>ref.child(key)),ref);const changeSnap=new data_snapshot_1.DataSnapshot(changeRef,mutation.val,false,mutation.prev,snap.context());clientEventEmitter.emit("mutation",{snapshot:changeSnap,isRemote:isRemote});return true}));if(proceed){clientEventEmitter.emit("cursor",context.acebase_cursor);localMutationsEmitter.emit("mutations",{origin:"remote",snap:snap})}else{console.warn(`Cached value of live data proxy on "${ref.path}" appears outdated, will be reloaded`);await reload()}}));let processPromise=Promise.resolve();const mutationQueue=[];const transactions=[];const pushLocalMutations=async()=>{const mutations=[];for(let i=0,m=mutationQueue[0];iRelativeNodeTarget.areEqual(t.target,m.target)||RelativeNodeTarget.isAncestor(t.target,m.target)))){mutationQueue.splice(i,1);i--;mutations.push(m)}}if(mutations.length===0){return}mutations.forEach((mutation=>{mutation.value=(0,utils_1.cloneObject)(getTargetValue(cache,mutation.target))}));process_1.default.nextTick((()=>{const context={acebase_proxy:{id:proxyId,source:"update"}};mutations.forEach((mutation=>{const mutationRef=mutation.target.reduce(((ref,key)=>ref.child(key)),ref);const mutationSnap=new data_snapshot_1.DataSnapshot(mutationRef,mutation.value,false,mutation.previous,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false})}));const snap=new data_snapshot_1.MutationsDataSnapshot(ref,mutations.map((m=>({target:m.target,val:m.value,prev:m.previous}))),context);localMutationsEmitter.emit("mutations",{origin:"local",snap:snap})}));processPromise=mutations.reduce(((mutations,m,i,arr)=>{if(!arr.some((other=>RelativeNodeTarget.isAncestor(other.target,m.target)))){mutations.push(m)}return mutations}),[]).reduce(((updates,m)=>{const target=m.target;if(target.length===0){updates.push({ref:ref,target:target,value:cache,type:"set",previous:m.previous})}else{const parentTarget=target.slice(0,-1);const key=target.slice(-1)[0];const parentRef=parentTarget.reduce(((ref,key)=>ref.child(key)),ref);const parentUpdate=updates.find((update=>update.ref.path===parentRef.path));const cacheValue=getTargetValue(cache,target);const prevValue=m.previous;if(parentUpdate){parentUpdate.value[key]=cacheValue;parentUpdate.previous[key]=prevValue}else{updates.push({ref:parentRef,target:parentTarget,value:{[key]:cacheValue},type:"update",previous:{[key]:prevValue}})}}return updates}),[]).reduce((async(promise,update)=>{const context={acebase_proxy:{id:proxyId,source:update.type}};await promise;await update.ref.context(context)[update.type](update.value).catch((err=>{clientEventEmitter.emit("error",{source:"update",message:`Error processing update of "/${ref.path}"`,details:err});const context={acebase_proxy:{id:proxyId,source:"update-rollback"}};const mutations=[];if(update.type==="set"){setTargetValue(cache,update.target,update.previous);const mutationSnap=new data_snapshot_1.DataSnapshot(update.ref,update.previous,false,update.value,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false});mutations.push({target:update.target,val:update.previous,prev:update.value})}else{Object.keys(update.previous).forEach((key=>{setTargetValue(cache,update.target.concat(key),update.previous[key]);const mutationSnap=new data_snapshot_1.DataSnapshot(update.ref.child(key),update.previous[key],false,update.value[key],context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false});mutations.push({target:update.target.concat(key),val:update.previous[key],prev:update.value[key]})}))}mutations.forEach((m=>{const mutationRef=m.target.reduce(((ref,key)=>ref.child(key)),ref);const mutationSnap=new data_snapshot_1.DataSnapshot(mutationRef,m.val,false,m.prev,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false})}));const snap=new data_snapshot_1.MutationsDataSnapshot(update.ref,mutations,context);localMutationsEmitter.emit("mutations",{origin:"local",snap:snap})}));if(update.ref.cursor){clientEventEmitter.emit("cursor",update.ref.cursor)}}),processPromise);await processPromise};let syncInProgress=false;const syncPromises=[];const syncCompleted=()=>{let resolve;const promise=new Promise((rs=>resolve=rs));syncPromises.push({resolve:resolve});return promise};let processQueueTimeout=null;const scheduleSync=()=>{if(!processQueueTimeout){processQueueTimeout=setTimeout((async()=>{syncInProgress=true;processQueueTimeout=null;await pushLocalMutations();syncInProgress=false;syncPromises.splice(0).forEach((p=>p.resolve()))}),0)}};const flagOverwritten=target=>{if(!mutationQueue.find((m=>RelativeNodeTarget.areEqual(m.target,target)))){mutationQueue.push({target:target,previous:(0,utils_1.cloneObject)(getTargetValue(cache,target))})}scheduleSync()};const localMutationsEmitter=new simple_event_emitter_1.SimpleEventEmitter;const addOnChangeHandler=(target,callback)=>{const isObject=val=>val!==null&&typeof val==="object";const mutationsHandler=async details=>{var _a;const{snap:snap,origin:origin}=details;const context=snap.context();const causedByOurProxy=((_a=context.acebase_proxy)===null||_a===void 0?void 0:_a.id)===proxyId;if(details.origin==="remote"&&causedByOurProxy){console.error("DEV ISSUE: mutationsHandler was called from remote event originating from our own proxy");return}const mutations=snap.val(false).filter((mutation=>mutation.target.slice(0,target.length).every(((key,i)=>target[i]===key))));if(mutations.length===0){return}let newValue,previousValue;const singleMutation=mutations.find((m=>m.target.length<=target.length));if(singleMutation){const trailKeys=target.slice(singleMutation.target.length);newValue=trailKeys.reduce(((val,key)=>!isObject(val)||!(key in val)?null:val[key]),singleMutation.val);previousValue=trailKeys.reduce(((val,key)=>!isObject(val)||!(key in val)?null:val[key]),singleMutation.prev)}else{const currentValue=getTargetValue(cache,target);newValue=(0,utils_1.cloneObject)(currentValue);previousValue=(0,utils_1.cloneObject)(newValue);mutations.forEach((mutation=>{const trailKeys=mutation.target.slice(target.length);for(let i=0,val=newValue,prev=previousValue;i{let keepSubscription=true;try{keepSubscription=false!==callback(Object.freeze(newValue),Object.freeze(previousValue),!causedByOurProxy,context)}catch(err){clientEventEmitter.emit("error",{source:origin==="remote"?"remote_update":"local_update",message:"Error running subscription callback",details:err})}if(keepSubscription===false){stop()}}))};localMutationsEmitter.on("mutations",mutationsHandler);const stop=()=>{localMutationsEmitter.off("mutations").off("mutations",mutationsHandler);clientSubscriptions.splice(clientSubscriptions.findIndex((cs=>cs.stop===stop)),1)};clientSubscriptions.push({target:target,stop:stop});return{stop:stop}};const handleFlag=(flag,target,args)=>{if(flag==="write"){return flagOverwritten(target)}else if(flag==="onChange"){return addOnChangeHandler(target,args.callback)}else if(flag==="subscribe"||flag==="observe"){const subscribe=subscriber=>{const currentValue=getTargetValue(cache,target);subscriber.next(currentValue);const subscription=addOnChangeHandler(target,(value=>{subscriber.next(value)}));return function unsubscribe(){subscription.stop()}};if(flag==="subscribe"){return subscribe}const Observable=(0,optional_observable_1.getObservable)();return new Observable(subscribe)}else if(flag==="transaction"){const hasConflictingTransaction=transactions.some((t=>RelativeNodeTarget.areEqual(target,t.target)||RelativeNodeTarget.isAncestor(target,t.target)||RelativeNodeTarget.isDescendant(target,t.target)));if(hasConflictingTransaction){return Promise.reject(new Error("Cannot start transaction because it conflicts with another transaction"))}return new Promise((async resolve=>{const hasPendingMutations=mutationQueue.some((m=>RelativeNodeTarget.areEqual(target,m.target)||RelativeNodeTarget.isAncestor(target,m.target)));if(hasPendingMutations){if(!syncInProgress){scheduleSync()}await syncCompleted()}const tx={target:target,status:"started",transaction:null};transactions.push(tx);tx.transaction={get status(){return tx.status},get completed(){return tx.status!=="started"},get mutations(){return mutationQueue.filter((m=>RelativeNodeTarget.areEqual(tx.target,m.target)||RelativeNodeTarget.isAncestor(tx.target,m.target)))},get hasMutations(){return this.mutations.length>0},async commit(){if(this.completed){throw new Error(`Transaction has completed already (status '${tx.status}')`)}tx.status="finished";transactions.splice(transactions.indexOf(tx),1);if(syncInProgress){await syncCompleted()}scheduleSync();await syncCompleted()},rollback(){if(this.completed){throw new Error(`Transaction has completed already (status '${tx.status}')`)}tx.status="canceled";const mutations=[];for(let i=0;i{if(m.target.length===0){cache=m.previous}else{setTargetValue(cache,m.target,m.previous)}}));transactions.splice(transactions.indexOf(tx),1)}};resolve(tx.transaction)}))}};const snap=await ref.get({cache_mode:"allow",cache_cursor:options===null||options===void 0?void 0:options.cursor});if(snap.context().acebase_origin!=="cache"){clientEventEmitter.emit("cursor",(_a=ref.cursor)!==null&&_a!==void 0?_a:null)}loaded=true;cache=snap.val();if(cache===null&&typeof(options===null||options===void 0?void 0:options.defaultValue)!=="undefined"){cache=options.defaultValue;const context={acebase_proxy:{id:proxyId,source:"default"}};await ref.context(context).set(cache)}proxy=createProxy({root:{ref:ref,get cache(){return cache}},target:[],id:proxyId,flag:handleFlag});const assertProxyAvailable=()=>{if(proxy===null){throw new Error("Proxy was destroyed")}};const reload=async()=>{assertProxyAvailable();mutationQueue.splice(0);const snap=await ref.get({allow_cache:false});const oldVal=cache,newVal=snap.val();cache=newVal;const mutations=(0,utils_1.getMutations)(oldVal,newVal);if(mutations.length===0){return}const context=snap.context();context.acebase_proxy={id:proxyId,source:"reload"};mutations.forEach((m=>{const targetRef=getTargetRef(ref,m.target);const newSnap=new data_snapshot_1.DataSnapshot(targetRef,m.val,m.val===null,m.prev,context);clientEventEmitter.emit("mutation",{snapshot:newSnap,isRemote:true})}));const mutationsSnap=new data_snapshot_1.MutationsDataSnapshot(ref,mutations,context);localMutationsEmitter.emit("mutations",{origin:"local",snap:mutationsSnap})};return{async destroy(){await processPromise;const promises=[subscription.stop(),...clientSubscriptions.map((cs=>cs.stop()))];await Promise.all(promises);["cursor","mutation","error"].forEach((event=>clientEventEmitter.off(event)));cache=null;proxy=null},stop(){this.destroy()},get value(){assertProxyAvailable();return proxy},get hasValue(){assertProxyAvailable();return cache!==null},set value(val){assertProxyAvailable();if(val!==null&&typeof val==="object"&&val[isProxy]){val=val.valueOf()}flagOverwritten([]);cache=val},get ref(){return ref},get cursor(){return latestCursor},reload:reload,onMutation(callback){assertProxyAvailable();clientEventEmitter.off("mutation");clientEventEmitter.on("mutation",(({snapshot:snapshot,isRemote:isRemote})=>{try{callback(snapshot,isRemote)}catch(err){clientEventEmitter.emit("error",{source:"mutation_callback",message:"Error in dataproxy onMutation callback",details:err})}}))},onError(callback){assertProxyAvailable();clientEventEmitter.off("error");clientEventEmitter.on("error",(err=>{try{callback(err)}catch(err){console.error(`Error in dataproxy onError callback: ${err.message}`)}}))},on(event,callback){clientEventEmitter.on(event,callback)},off(event,callback){clientEventEmitter.off(event,callback)}}}}exports.LiveDataProxy=LiveDataProxy;function getTargetValue(obj,target){let val=obj;for(const key of target){val=typeof val==="object"&&val!==null&&key in val?val[key]:null}return val}function setTargetValue(obj,target,value){if(target.length===0){throw new Error("Cannot update root target, caller must do that itself!")}const targetObject=target.slice(0,-1).reduce(((obj,key)=>obj[key]),obj);const prop=target.slice(-1)[0];if(value===null||typeof value==="undefined"){targetObject instanceof Array?targetObject.splice(prop,1):delete targetObject[prop]}else{targetObject[prop]=value}}function getTargetRef(ref,target){const path=path_info_1.PathInfo.get(ref.path).childPath(target);return new data_reference_1.DataReference(ref.db,path)}function createProxy(context){const targetRef=getTargetRef(context.root.ref,context.target);const childProxies=[];const handler={get(target,prop,receiver){target=getTargetValue(context.root.cache,context.target);if(typeof prop==="symbol"){if(prop.toString()===Symbol.iterator.toString()){prop="values"}else if(prop.toString()===isProxy.toString()){return true}else{return Reflect.get(target,prop,receiver)}}if(prop==="valueOf"){return function valueOf(){return target}}if(target===null||typeof target!=="object"){throw new Error(`Cannot read property "${prop}" of ${target}. Value of path "/${targetRef.path}" is not an object (anymore)`)}if(target instanceof Array&&typeof prop==="string"&&/^[0-9]+$/.test(prop)){prop=parseInt(prop)}const value=target[prop];if(value===null){delete target[prop];return}const childProxy=childProxies.find((proxy=>proxy.prop===prop));if(childProxy){if(childProxy.typeof===typeof value){return childProxy.value}childProxies.splice(childProxies.indexOf(childProxy),1)}const proxifyChildValue=prop=>{const value=target[prop];const childProxy=childProxies.find((child=>child.prop===prop));if(childProxy){if(childProxy.typeof===typeof value){return childProxy.value}childProxies.splice(childProxies.indexOf(childProxy),1)}if(typeof value!=="object"){return value}const newChildProxy=createProxy({root:context.root,target:context.target.concat(prop),id:context.id,flag:context.flag});childProxies.push({typeof:typeof value,prop:prop,value:newChildProxy});return newChildProxy};const unproxyValue=value=>value!==null&&typeof value==="object"&&value[isProxy]?value.getTarget():value;if(["string","number","boolean"].includes(typeof value)||value instanceof Date||value instanceof path_reference_1.PathReference||value instanceof ArrayBuffer||typeof value==="object"&&"buffer"in value){return value}const isArray=target instanceof Array;if(prop==="toString"){return function toString(){return`[LiveDataProxy for "${targetRef.path}"]`}}if(typeof value==="undefined"){if(prop==="push"){return function push(item){const childRef=targetRef.push();context.flag("write",context.target.concat(childRef.key));target[childRef.key]=item;return childRef.key}}if(prop==="getTarget"){return function(warn=true){warn&&console.warn("Use getTarget with caution - any changes will not be synchronized!");return target}}if(prop==="getRef"){return function getRef(){const ref=getTargetRef(context.root.ref,context.target);return ref}}if(prop==="forEach"){return function forEach(callback){const keys=Object.keys(target);let stop=false;for(let i=0;!stop&&iproxifyChildValue(key)));if(sortFn){arr.sort(sortFn)}return arr}}if(prop==="onChanged"){return function onChanged(callback){return context.flag("onChange",context.target,{callback:callback})}}if(prop==="subscribe"){return function subscribe(){return context.flag("subscribe",context.target)}}if(prop==="getObservable"){return function getObservable(){return context.flag("observe",context.target)}}if(prop==="getOrderedCollection"){return function getOrderedCollection(orderProperty,orderIncrement){return new OrderedCollectionProxy(this,orderProperty,orderIncrement)}}if(prop==="startTransaction"){return function startTransaction(){return context.flag("transaction",context.target)}}if(prop==="remove"&&!isArray){return function remove(){if(context.target.length===0){throw new Error("Can't remove proxy root value")}const parent=getTargetValue(context.root.cache,context.target.slice(0,-1));const key=context.target.slice(-1)[0];context.flag("write",context.target);delete parent[key]}}return}else if(typeof value==="function"){if(isArray){const writeArray=action=>{context.flag("write",context.target);return action()};const cleanArrayValues=values=>values.map((value=>{value=unproxyValue(value);removeVoidProperties(value);return value}));if(prop==="push"){return function push(...items){items=cleanArrayValues(items);return writeArray((()=>target.push(...items)))}}if(prop==="pop"){return function pop(){return writeArray((()=>target.pop()))}}if(prop==="splice"){return function splice(start,deleteCount,...items){items=cleanArrayValues(items);return writeArray((()=>target.splice(start,deleteCount,...items)))}}if(prop==="shift"){return function shift(){return writeArray((()=>target.shift()))}}if(prop==="unshift"){return function unshift(...items){items=cleanArrayValues(items);return writeArray((()=>target.unshift(...items)))}}if(prop==="sort"){return function sort(compareFn){return writeArray((()=>target.sort(compareFn)))}}if(prop==="reverse"){return function reverse(){return writeArray((()=>target.reverse()))}}if(["indexOf","lastIndexOf"].includes(prop)){return function indexOf(item,start){if(item!==null&&typeof item==="object"&&item[isProxy]){item=item.getTarget(false)}return target[prop](item,start)}}if(["forEach","every","some","filter","map"].includes(prop)){return function iterate(callback){return target[prop](((value,i)=>callback(proxifyChildValue(i),i,proxy)))}}if(["reduce","reduceRight"].includes(prop)){return function reduce(callback,initialValue){return target[prop](((prev,value,i)=>callback(prev,proxifyChildValue(i),i,proxy)),initialValue)}}if(["find","findIndex"].includes(prop)){return function find(callback){let value=target[prop](((value,i)=>callback(proxifyChildValue(i),i,proxy)));if(prop==="find"&&value){const index=target.indexOf(value);value=proxifyChildValue(index)}return value}}if(["values","entries","keys"].includes(prop)){return function*generator(){for(let i=0;itypeof key==="number"))){context.flag("write",context.target.slice(0,context.target.findIndex((key=>typeof key==="number"))))}else if(target instanceof Array){context.flag("write",context.target)}else{context.flag("write",context.target.concat(prop))}if(value===null){delete target[prop]}else{removeVoidProperties(value);target[prop]=value}return true},deleteProperty(target,prop){target=getTargetValue(context.root.cache,context.target);if(target===null){throw new Error(`Cannot delete property ${prop.toString()} of null`)}if(typeof prop==="symbol"){return Reflect.deleteProperty(target,prop)}if(!(prop in target)){return true}context.flag("write",context.target.concat(prop));delete target[prop];return true},ownKeys(target){target=getTargetValue(context.root.cache,context.target);return Reflect.ownKeys(target)},has(target,prop){target=getTargetValue(context.root.cache,context.target);return Reflect.has(target,prop)},getOwnPropertyDescriptor(target,prop){target=getTargetValue(context.root.cache,context.target);const descriptor=Reflect.getOwnPropertyDescriptor(target,prop);if(descriptor){descriptor.configurable=true}return descriptor},getPrototypeOf(target){target=getTargetValue(context.root.cache,context.target);return Reflect.getPrototypeOf(target)}};const proxy=new Proxy({},handler);return proxy}function removeVoidProperties(obj){if(typeof obj!=="object"){return}Object.keys(obj).forEach((key=>{const val=obj[key];if(val===null||typeof val==="undefined"){delete obj[key]}else if(typeof val==="object"){removeVoidProperties(val)}}))}function proxyAccess(proxiedValue){if(typeof proxiedValue!=="object"||!proxiedValue[isProxy]){throw new Error("Given value is not proxied. Make sure you are referencing the value through the live data proxy.")}return proxiedValue}exports.proxyAccess=proxyAccess;class OrderedCollectionProxy{constructor(collection,orderProperty="order",orderIncrement=10){this.collection=collection;this.orderProperty=orderProperty;this.orderIncrement=orderIncrement;if(typeof collection!=="object"||!collection[isProxy]){throw new Error("Collection is not proxied")}if(collection.valueOf()instanceof Array){throw new Error("Collection is an array, not an object collection")}if(!Object.keys(collection).every((key=>typeof collection[key]==="object"))){throw new Error("Collection has non-object children")}const ok=Object.keys(collection).every((key=>typeof collection[key][orderProperty]==="number"));if(!ok){const keys=Object.keys(collection);for(let i=0;i{const subscription=this.getObservable().subscribe((()=>{const newArray=this.getArray();subscriber.next(newArray)}));return function unsubscribe(){subscription.unsubscribe()}}))}getArray(){const arr=proxyAccess(this.collection).toArray(((a,b)=>a[this.orderProperty]-b[this.orderProperty]));return arr}add(item,index,from){const arr=this.getArray();let minOrder=Number.POSITIVE_INFINITY,maxOrder=Number.NEGATIVE_INFINITY;for(let i=0;ithis.collection[key]===item));if(!fromKey){throw new Error("item not found in collection")}if(from===index){return{key:fromKey,index:index}}if(Math.abs(from-index)===1){const otherItem=arr[index];const otherOrder=otherItem[this.orderProperty];otherItem[this.orderProperty]=item[this.orderProperty];item[this.orderProperty]=otherOrder;return{key:fromKey,index:index}}else{arr.splice(from,1)}}if(typeof index!=="number"||index>=arr.length){index=arr.length;item[this.orderProperty]=arr.length==0?0:maxOrder+this.orderIncrement}else if(index===0){item[this.orderProperty]=arr.length==0?0:minOrder-this.orderIncrement}else{const orders=arr.map((item=>item[this.orderProperty]));const gap=orders[index]-orders[index-1];if(gap>1){item[this.orderProperty]=orders[index]-Math.floor(gap/2)}else{arr.splice(index,0,item);for(let i=0;ithis.collection[key]===item));if(!key){throw new Error("Cannot find target object to delete")}this.collection[key]=null;return{key:key,index:index}}move(fromIndex,toIndex){const arr=this.getArray();return this.add(arr[fromIndex],toIndex,fromIndex)}sort(sortFn){const arr=this.getArray();arr.sort(sortFn);for(let i=0;i{newContext[key]=context[key]}))}this[_private].context=newContext;return this}else if(typeof context==="undefined"){console.warn("Use snap.context() instead of snap.ref.context() to get updating context in event callbacks");return currentContext}else{throw new Error("Invalid context argument")}}get cursor(){return this[_private].cursor}set cursor(value){var _a;this[_private].cursor=value;(_a=this.onCursor)===null||_a===void 0?void 0:_a.call(this,value)}get path(){return this[_private].path}get key(){const key=this[_private].key;return typeof key==="number"?`[${key}]`:key}get index(){const key=this[_private].key;if(typeof key!=="number"){throw new Error(`"${key}" is not a number`)}return key}get parent(){const currentPath=path_info_1.PathInfo.fillVariables2(this.path,this.vars);const info=path_info_1.PathInfo.get(currentPath);if(info.parentPath===null){return null}return new DataReference(this.db,info.parentPath).context(this[_private].context)}get vars(){return this[_private].vars}child(childPath){childPath=typeof childPath==="number"?childPath:childPath.replace(/^\/|\/$/g,"");const currentPath=path_info_1.PathInfo.fillVariables2(this.path,this.vars);const targetPath=path_info_1.PathInfo.getChildPath(currentPath,childPath);return new DataReference(this.db,targetPath).context(this[_private].context)}async set(value,onComplete){try{if(this.isWildcardPath){throw new Error(`Cannot set the value of wildcard path "/${this.path}"`)}if(this.parent===null){throw new Error("Cannot set the root object. Use update, or set individual child properties")}if(typeof value==="undefined"){throw new TypeError(`Cannot store undefined value in "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}value=this.db.types.serialize(this.path,value);const{cursor:cursor}=await this.db.api.set(this.path,value,{context:this[_private].context});this.cursor=cursor;if(typeof onComplete==="function"){try{onComplete(null,this)}catch(err){console.error("Error in onComplete callback:",err)}}}catch(err){if(typeof onComplete==="function"){try{onComplete(err,this)}catch(err){console.error("Error in onComplete callback:",err)}}else{throw err}}return this}async update(updates,onComplete){try{if(this.isWildcardPath){throw new Error(`Cannot update the value of wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}if(typeof updates!=="object"||updates instanceof Array||updates instanceof ArrayBuffer||updates instanceof Date){await this.set(updates)}else if(Object.keys(updates).length===0){console.warn(`update called on path "/${this.path}", but there is nothing to update`)}else{updates=this.db.types.serialize(this.path,updates);const{cursor:cursor}=await this.db.api.update(this.path,updates,{context:this[_private].context});this.cursor=cursor}if(typeof onComplete==="function"){try{onComplete(null,this)}catch(err){console.error("Error in onComplete callback:",err)}}}catch(err){if(typeof onComplete==="function"){try{onComplete(err,this)}catch(err){console.error("Error in onComplete callback:",err)}}else{throw err}}return this}async transaction(callback){if(this.isWildcardPath){throw new Error(`Cannot start a transaction on wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}let throwError;const cb=currentValue=>{currentValue=this.db.types.deserialize(this.path,currentValue);const snap=new data_snapshot_1.DataSnapshot(this,currentValue);let newValue;try{newValue=callback(snap)}catch(err){throwError=err;return}if(newValue instanceof Promise){return newValue.then((val=>this.db.types.serialize(this.path,val))).catch((err=>{throwError=err;return}))}else{return this.db.types.serialize(this.path,newValue)}};const{cursor:cursor}=await this.db.api.transaction(this.path,cb,{context:this[_private].context});this.cursor=cursor;if(throwError){throw throwError}return this}on(event,callback,cancelCallback){if(this.path===""&&["value","child_changed"].includes(event)){console.warn("WARNING: Listening for value and child_changed events on the root node is a bad practice. These events require loading of all data (value event), or potentially lots of data (child_changed event) each time they are fired")}let eventPublisher=null;const eventStream=new subscription_1.EventStream((publisher=>{eventPublisher=publisher}));const cb={event:event,stream:eventStream,userCallback:typeof callback==="function"&&callback,ourCallback:(err,path,newValue,oldValue,eventContext)=>{if(err){this.db.debug.error(`Error getting data for event ${event} on path "${path}"`,err);return}const ref=this.db.ref(path);ref[_private].vars=path_info_1.PathInfo.extractVariables(this.path,path);let callbackObject;if(event.startsWith("notify_")){callbackObject=ref.context(eventContext||{})}else{const values={previous:this.db.types.deserialize(path,oldValue),current:this.db.types.deserialize(path,newValue)};if(event==="child_removed"){callbackObject=new data_snapshot_1.DataSnapshot(ref,values.previous,true,values.previous,eventContext)}else if(event==="mutations"){callbackObject=new data_snapshot_1.MutationsDataSnapshot(ref,values.current,eventContext)}else{const isRemoved=event==="mutated"&&values.current===null;callbackObject=new data_snapshot_1.DataSnapshot(ref,values.current,isRemoved,values.previous,eventContext)}}eventPublisher.publish(callbackObject);if(eventContext===null||eventContext===void 0?void 0:eventContext.acebase_cursor){this.cursor=eventContext.acebase_cursor}}};this[_private].callbacks.push(cb);const subscribe=()=>{if(typeof callback==="function"){eventStream.subscribe(callback,((activated,cancelReason)=>{if(!activated){cancelCallback&&cancelCallback(cancelReason)}}))}const advancedOptions=typeof callback==="object"?callback:{newOnly:!callback};if(typeof advancedOptions.newOnly!=="boolean"){advancedOptions.newOnly=false}if(this.isWildcardPath){advancedOptions.newOnly=true}const cancelSubscription=err=>{const callbacks=this[_private].callbacks;callbacks.splice(callbacks.indexOf(cb),1);this.db.api.unsubscribe(this.path,event,cb.ourCallback);this.db.debug.error(`Subscription "${event}" on path "/${this.path}" canceled because of an error: ${err.message}`);eventPublisher.cancel(err.message)};const authorized=this.db.api.subscribe(this.path,event,cb.ourCallback,{newOnly:advancedOptions.newOnly,cancelCallback:cancelSubscription,syncFallback:advancedOptions.syncFallback});const allSubscriptionsStoppedCallback=()=>{const callbacks=this[_private].callbacks;callbacks.splice(callbacks.indexOf(cb),1);return this.db.api.unsubscribe(this.path,event,cb.ourCallback)};if(authorized instanceof Promise){authorized.then((()=>{eventPublisher.start(allSubscriptionsStoppedCallback)})).catch(cancelSubscription)}else{eventPublisher.start(allSubscriptionsStoppedCallback)}if(!advancedOptions.newOnly){if(event==="value"){this.get((snap=>{eventPublisher.publish(snap)}))}else if(event==="child_added"){this.get((snap=>{const val=snap.val();if(val===null||typeof val!=="object"){return}Object.keys(val).forEach((key=>{const childSnap=new data_snapshot_1.DataSnapshot(this.child(key),val[key]);eventPublisher.publish(childSnap)}))}))}else if(event==="notify_child_added"){const step=100,limit=step;let skip=0;const more=async()=>{const children=await this.db.api.reflect(this.path,"children",{limit:limit,skip:skip});children.list.forEach((child=>{const childRef=this.child(child.key);eventPublisher.publish(childRef)}));if(children.more){skip+=step;more()}};more()}}};if(this.db.isReady){subscribe()}else{this.db.ready(subscribe)}return eventStream}off(event,callback){const subscriptions=this[_private].callbacks;const stopSubs=subscriptions.filter((sub=>(!event||sub.event===event)&&(!callback||sub.userCallback===callback)));if(stopSubs.length===0){this.db.debug.warn(`Can't find event subscriptions to stop (path: "${this.path}", event: ${event||"(any)"}, callback: ${callback})`)}stopSubs.forEach((sub=>{sub.stream.stop()}));return this}get(optionsOrCallback,callback){if(!this.db.isReady){const promise=this.db.ready().then((()=>this.get(optionsOrCallback,callback)));return typeof optionsOrCallback!=="function"&&typeof callback!=="function"?promise:undefined}callback=typeof optionsOrCallback==="function"?optionsOrCallback:typeof callback==="function"?callback:undefined;if(this.isWildcardPath){const error=new Error(`Cannot get value of wildcard path "/${this.path}". Use .query() instead`);if(typeof callback==="function"){throw error}return Promise.reject(error)}const options=new DataRetrievalOptions(typeof optionsOrCallback==="object"?optionsOrCallback:{cache_mode:"allow"});const promise=this.db.api.get(this.path,options).then((result=>{var _a;const isNewApiResult="context"in result&&"value"in result;if(!isNewApiResult){console.warn("AceBase api.get method returned an old response value. Update your acebase or acebase-client package");result={value:result,context:{}}}const value=this.db.types.deserialize(this.path,result.value);const snapshot=new data_snapshot_1.DataSnapshot(this,value,undefined,undefined,result.context);if((_a=result.context)===null||_a===void 0?void 0:_a.acebase_cursor){this.cursor=result.context.acebase_cursor}return snapshot}));if(callback){promise.then(callback).catch((err=>{console.error("Uncaught error:",err)}));return}else{return promise}}once(event,options){if(event==="value"&&!this.isWildcardPath){return this.get(options)}return new Promise((resolve=>{const callback=snap=>{this.off(event,callback);resolve(snap)};this.on(event,callback)}))}push(value,onComplete){if(this.isWildcardPath){const error=new Error(`Cannot push to wildcard path "/${this.path}"`);if(typeof value==="undefined"||typeof onComplete==="function"){throw error}return Promise.reject(error)}const id=id_1.ID.generate();const ref=this.child(id);ref[_private].pushed=true;if(typeof value!=="undefined"){return ref.set(value,onComplete).then((()=>ref))}else{return ref}}async remove(){if(this.isWildcardPath){throw new Error(`Cannot remove wildcard path "/${this.path}". Use query().remove instead`)}if(this.parent===null){throw new Error("Cannot remove the root node")}return this.set(null)}async exists(){if(this.isWildcardPath){throw new Error(`Cannot check wildcard path "/${this.path}" existence`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.exists(this.path)}get isWildcardPath(){return this.path.indexOf("*")>=0||this.path.indexOf("$")>=0}query(){return new DataReferenceQuery(this)}async count(){const info=await this.reflect("info",{child_count:true});return info.children.count}async reflect(type,args){if(this.isWildcardPath){throw new Error(`Cannot reflect on wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.reflect(this.path,type,args)}async export(write,options={format:"json",type_safe:true}){if(this.isWildcardPath){throw new Error(`Cannot export wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}const writeFn=typeof write==="function"?write:write.write.bind(write);return this.db.api.export(this.path,writeFn,options)}async import(read,options={format:"json",suppress_events:false}){if(this.isWildcardPath){throw new Error(`Cannot import to wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.import(this.path,read,options)}proxy(options){const isOptionsArg=typeof options==="object"&&(typeof options.cursor!=="undefined"||typeof options.defaultValue!=="undefined");if(typeof options!=="undefined"&&!isOptionsArg){this.db.debug.warn("Warning: live data proxy is being initialized with a deprecated method signature. Use ref.proxy(options) instead of ref.proxy(defaultValue)");options={defaultValue:options}}return data_proxy_1.LiveDataProxy.create(this,options)}observe(options){if(options){throw new Error("observe does not support data retrieval options yet")}if(this.isWildcardPath){throw new Error(`Cannot observe wildcard path "/${this.path}"`)}const Observable=(0,optional_observable_1.getObservable)();return new Observable((observer=>{let cache,resolved=false;let promise=this.get(options).then((snap=>{resolved=true;cache=snap.val();observer.next(cache)}));const updateCache=snap=>{if(!resolved){promise=promise.then((()=>updateCache(snap)));return}const mutatedPath=snap.ref.path;if(mutatedPath===this.path){cache=snap.val();return observer.next(cache)}const trailKeys=path_info_1.PathInfo.getPathKeys(mutatedPath).slice(path_info_1.PathInfo.getPathKeys(this.path).length);let target=cache;while(trailKeys.length>1){const key=trailKeys.shift();if(!(key in target)){target[key]=typeof trailKeys[0]==="number"?[]:{}}target=target[key]}const prop=trailKeys.shift();const newValue=snap.val();if(newValue===null){target instanceof Array&&typeof prop==="number"?target.splice(prop,1):delete target[prop]}else{target[prop]=newValue}observer.next(cache)};this.on("mutated",updateCache);return()=>{this.off("mutated",updateCache)}}))}async forEach(callbackOrOptions,callback){let options;if(typeof callbackOrOptions==="function"){callback=callbackOrOptions}else{options=callbackOrOptions}if(typeof callback!=="function"){throw new TypeError("No callback function given")}const info=await this.reflect("children",{limit:0,skip:0});const summary={canceled:false,total:info.list.length,processed:0};for(let i=0;ithis.get(optionsOrCallback,callback)));return typeof optionsOrCallback!=="function"&&typeof callback!=="function"?promise:undefined}callback=typeof optionsOrCallback==="function"?optionsOrCallback:typeof callback==="function"?callback:undefined;const options=new QueryDataRetrievalOptions(typeof optionsOrCallback==="object"?optionsOrCallback:{snapshots:true,cache_mode:"allow"});options.allow_cache=options.cache_mode!=="bypass";options.eventHandler=ev=>{if(!this[_private].events[ev.name]){return false}const listeners=this[_private].events[ev.name];if(typeof listeners!=="object"||listeners.length===0){return false}if(["add","change","remove"].includes(ev.name)){const ref=new DataReference(this.ref.db,ev.path);const eventData={name:ev.name};if(options.snapshots&&ev.name!=="remove"){const val=db.types.deserialize(ev.path,ev.value);eventData.snapshot=new data_snapshot_1.DataSnapshot(ref,val,false)}else{eventData.ref=ref}ev=eventData}listeners.forEach((callback=>{try{callback(ev)}catch(e){}}))};options.monitor={add:false,change:false,remove:false};if(this[_private].events){if(this[_private].events["add"]&&this[_private].events["add"].length>0){options.monitor.add=true}if(this[_private].events["change"]&&this[_private].events["change"].length>0){options.monitor.change=true}if(this[_private].events["remove"]&&this[_private].events["remove"].length>0){options.monitor.remove=true}}this.stop();const db=this.ref.db;return db.api.query(this.ref.path,this[_private],options).catch((err=>{throw new Error(err)})).then((res=>{const{stop:stop}=res;let{results:results,context:context}=res;this.stop=async()=>{await stop()};if(!("results"in res&&"context"in res)){console.warn("Query results missing context. Update your acebase and/or acebase-client packages");results=res,context={}}if(options.snapshots){const snaps=results.map((result=>{const val=db.types.deserialize(result.path,result.val);return new data_snapshot_1.DataSnapshot(db.ref(result.path),val,false,undefined,context)}));return DataSnapshotsArray.from(snaps)}else{const refs=results.map((path=>db.ref(path)));return DataReferencesArray.from(refs)}})).then((results=>{callback&&callback(results);return results}))}async stop(){}getRefs(callback){return this.get({snapshots:false},callback)}find(){return this.get({snapshots:false})}async count(){const refs=await this.find();return refs.length}async exists(){const originalTake=this[_private].take;const p=this.take(1).find();this.take(originalTake);const refs=await p;return refs.length!==0}async remove(callback){const refs=await this.find();const parentUpdates=refs.reduce(((parents,ref)=>{const parent=parents[ref.parent.path];if(!parent){parents[ref.parent.path]=[ref]}else{parent.push(ref)}return parents}),{});const db=this.ref.db;const promises=Object.keys(parentUpdates).map((async parentPath=>{const updates=refs.reduce(((updates,ref)=>{updates[ref.key]=null;return updates}),{});const ref=db.ref(parentPath);try{await ref.update(updates);return{ref:ref,success:true}}catch(error){return{ref:ref,success:false,error:error}}}));const results=await Promise.all(promises);callback&&callback(results);return results}on(event,callback){if(!this[_private].events[event]){this[_private].events[event]=[]}this[_private].events[event].push(callback);return this}off(event,callback){if(typeof event==="undefined"){this[_private].events={};return this}if(!this[_private].events[event]){return this}if(typeof callback==="undefined"){delete this[_private].events[event];return this}const index=this[_private].events[event].indexOf(callback);if(!~index){return this}this[_private].events[event].splice(index,1);return this}async forEach(callbackOrOptions,callback){let options;if(typeof callbackOrOptions==="function"){callback=callbackOrOptions}else{options=callbackOrOptions}if(typeof callback!=="function"){throw new TypeError("No callback function given")}const refs=await this.find();const summary={canceled:false,total:refs.length,processed:0};for(let i=0;iarr[i]=snap));return arr}getValues(){return this.map((snap=>snap.val()))}}exports.DataSnapshotsArray=DataSnapshotsArray;class DataReferencesArray extends Array{static from(refs){const arr=new DataReferencesArray(refs.length);refs.forEach(((ref,i)=>arr[i]=ref));return arr}getPaths(){return this.map((ref=>ref.path))}}exports.DataReferencesArray=DataReferencesArray},{"./data-proxy":7,"./data-snapshot":9,"./id":11,"./optional-observable":14,"./path-info":16,"./subscription":23}],9:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.MutationsDataSnapshot=exports.DataSnapshot=void 0;const path_info_1=require("./path-info");function getChild(snapshot,path,previous=false){if(!snapshot.exists()){return null}let child=previous?snapshot.previous():snapshot.val();if(typeof path==="number"){return child[path]}path_info_1.PathInfo.getPathKeys(path).every((key=>{child=child[key];return typeof child!=="undefined"}));return child||null}function getChildren(snapshot){if(!snapshot.exists()){return[]}const value=snapshot.val();if(value instanceof Array){return new Array(value.length).map(((v,i)=>i))}if(typeof value==="object"){return Object.keys(value)}return[]}class DataSnapshot{constructor(ref,value,isRemoved=false,prevValue,context){this.ref=ref;this.val=()=>value;this.previous=()=>prevValue;this.exists=()=>{if(isRemoved){return false}return value!==null&&typeof value!=="undefined"};this.context=()=>context||{}}exists(){return false}static for(ref,value){return new DataSnapshot(ref,value)}child(path){const val=getChild(this,path,false);const prev=getChild(this,path,true);return new DataSnapshot(this.ref.child(path),val,false,prev)}hasChild(path){return getChild(this,path)!==null}hasChildren(){return getChildren(this).length>0}numChildren(){return getChildren(this).length}forEach(callback){const value=this.val();const prev=this.previous();return getChildren(this).every((key=>{const snap=new DataSnapshot(this.ref.child(key),value[key],false,prev[key]);return callback(snap)}))}get key(){return this.ref.key}}exports.DataSnapshot=DataSnapshot;class MutationsDataSnapshot extends DataSnapshot{constructor(ref,mutations,context){super(ref,mutations,false,undefined,context);this.previous=()=>{throw new Error("Iterate values to get previous values for each mutation")};this.val=(warn=true)=>{if(warn){console.warn("Unless you know what you are doing, it is best not to use the value of a mutations snapshot directly. Use child methods and forEach to iterate the mutations instead")}return mutations}}forEach(callback){const mutations=this.val();return mutations.every((mutation=>{const ref=mutation.target.reduce(((ref,key)=>ref.child(key)),this.ref);const snap=new DataSnapshot(ref,mutation.val,false,mutation.prev);return callback(snap)}))}child(index){if(typeof index!=="number"){throw new Error("child index must be a number")}const mutation=this.val()[index];const ref=mutation.target.reduce(((ref,key)=>ref.child(key)),this.ref);return new DataSnapshot(ref,mutation.val,false,mutation.prev)}}exports.MutationsDataSnapshot=MutationsDataSnapshot},{"./path-info":16}],10:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DebugLogger=void 0;const process_1=require("./process");const noop=()=>{};class DebugLogger{constructor(level="log",prefix=""){this.level=level;this.prefix=prefix;this.setLevel(level)}setLevel(level){const prefix=this.prefix?this.prefix+" %s":"";this.verbose=["verbose"].includes(level)?prefix?console.log.bind(console,prefix):console.log.bind(console):noop;this.log=["verbose","log"].includes(level)?prefix?console.log.bind(console,prefix):console.log.bind(console):noop;this.warn=["verbose","log","warn"].includes(level)?prefix?console.warn.bind(console,prefix):console.warn.bind(console):noop;this.error=["verbose","log","warn","error"].includes(level)?prefix?console.error.bind(console,prefix):console.error.bind(console):noop;this.write=text=>{const isRunKit=typeof process_1.default!=="undefined"&&process_1.default.env&&typeof process_1.default.env.RUNKIT_ENDPOINT_PATH==="string";if(text&&isRunKit){text.split("\n").forEach((line=>console.log(line)))}else{console.log(text)}}}}exports.DebugLogger=DebugLogger},{"./process":18}],11:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ID=void 0;const cuid_1=require("./cuid");let timeBias=0;class ID{static set timeBias(bias){if(typeof bias!=="number"){return}timeBias=bias}static generate(){return(0,cuid_1.default)(timeBias).slice(1)}}exports.ID=ID},{"./cuid":5}],12:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObjectCollection=exports.PartialArray=exports.SchemaDefinition=exports.Colorize=exports.ColorStyle=exports.SimpleEventEmitter=exports.SimpleCache=exports.ascii85=exports.PathInfo=exports.Utils=exports.TypeMappings=exports.Transport=exports.EventSubscription=exports.EventPublisher=exports.EventStream=exports.PathReference=exports.ID=exports.DebugLogger=exports.OrderedCollectionProxy=exports.proxyAccess=exports.MutationsDataSnapshot=exports.DataSnapshot=exports.DataReferencesArray=exports.DataSnapshotsArray=exports.QueryDataRetrievalOptions=exports.DataRetrievalOptions=exports.DataReferenceQuery=exports.DataReference=exports.Api=exports.AceBaseBaseSettings=exports.AceBaseBase=void 0;var acebase_base_1=require("./acebase-base");Object.defineProperty(exports,"AceBaseBase",{enumerable:true,get:function(){return acebase_base_1.AceBaseBase}});Object.defineProperty(exports,"AceBaseBaseSettings",{enumerable:true,get:function(){return acebase_base_1.AceBaseBaseSettings}});var api_1=require("./api");Object.defineProperty(exports,"Api",{enumerable:true,get:function(){return api_1.Api}});var data_reference_1=require("./data-reference");Object.defineProperty(exports,"DataReference",{enumerable:true,get:function(){return data_reference_1.DataReference}});Object.defineProperty(exports,"DataReferenceQuery",{enumerable:true,get:function(){return data_reference_1.DataReferenceQuery}});Object.defineProperty(exports,"DataRetrievalOptions",{enumerable:true,get:function(){return data_reference_1.DataRetrievalOptions}});Object.defineProperty(exports,"QueryDataRetrievalOptions",{enumerable:true,get:function(){return data_reference_1.QueryDataRetrievalOptions}});Object.defineProperty(exports,"DataSnapshotsArray",{enumerable:true,get:function(){return data_reference_1.DataSnapshotsArray}});Object.defineProperty(exports,"DataReferencesArray",{enumerable:true,get:function(){return data_reference_1.DataReferencesArray}});var data_snapshot_1=require("./data-snapshot");Object.defineProperty(exports,"DataSnapshot",{enumerable:true,get:function(){return data_snapshot_1.DataSnapshot}});Object.defineProperty(exports,"MutationsDataSnapshot",{enumerable:true,get:function(){return data_snapshot_1.MutationsDataSnapshot}});var data_proxy_1=require("./data-proxy");Object.defineProperty(exports,"proxyAccess",{enumerable:true,get:function(){return data_proxy_1.proxyAccess}});Object.defineProperty(exports,"OrderedCollectionProxy",{enumerable:true,get:function(){return data_proxy_1.OrderedCollectionProxy}});var debug_1=require("./debug");Object.defineProperty(exports,"DebugLogger",{enumerable:true,get:function(){return debug_1.DebugLogger}});var id_1=require("./id");Object.defineProperty(exports,"ID",{enumerable:true,get:function(){return id_1.ID}});var path_reference_1=require("./path-reference");Object.defineProperty(exports,"PathReference",{enumerable:true,get:function(){return path_reference_1.PathReference}});var subscription_1=require("./subscription");Object.defineProperty(exports,"EventStream",{enumerable:true,get:function(){return subscription_1.EventStream}});Object.defineProperty(exports,"EventPublisher",{enumerable:true,get:function(){return subscription_1.EventPublisher}});Object.defineProperty(exports,"EventSubscription",{enumerable:true,get:function(){return subscription_1.EventSubscription}});exports.Transport=require("./transport");var type_mappings_1=require("./type-mappings");Object.defineProperty(exports,"TypeMappings",{enumerable:true,get:function(){return type_mappings_1.TypeMappings}});exports.Utils=require("./utils");var path_info_1=require("./path-info");Object.defineProperty(exports,"PathInfo",{enumerable:true,get:function(){return path_info_1.PathInfo}});var ascii85_1=require("./ascii85");Object.defineProperty(exports,"ascii85",{enumerable:true,get:function(){return ascii85_1.ascii85}});var simple_cache_1=require("./simple-cache");Object.defineProperty(exports,"SimpleCache",{enumerable:true,get:function(){return simple_cache_1.SimpleCache}});var simple_event_emitter_1=require("./simple-event-emitter");Object.defineProperty(exports,"SimpleEventEmitter",{enumerable:true,get:function(){return simple_event_emitter_1.SimpleEventEmitter}});var simple_colors_1=require("./simple-colors");Object.defineProperty(exports,"ColorStyle",{enumerable:true,get:function(){return simple_colors_1.ColorStyle}});Object.defineProperty(exports,"Colorize",{enumerable:true,get:function(){return simple_colors_1.Colorize}});var schema_1=require("./schema");Object.defineProperty(exports,"SchemaDefinition",{enumerable:true,get:function(){return schema_1.SchemaDefinition}});var partial_array_1=require("./partial-array");Object.defineProperty(exports,"PartialArray",{enumerable:true,get:function(){return partial_array_1.PartialArray}});const object_collection_1=require("./object-collection");Object.defineProperty(exports,"ObjectCollection",{enumerable:true,get:function(){return object_collection_1.ObjectCollection}})},{"./acebase-base":1,"./api":2,"./ascii85":3,"./data-proxy":7,"./data-reference":8,"./data-snapshot":9,"./debug":10,"./id":11,"./object-collection":13,"./partial-array":15,"./path-info":16,"./path-reference":17,"./schema":19,"./simple-cache":20,"./simple-colors":21,"./simple-event-emitter":22,"./subscription":23,"./transport":24,"./type-mappings":25,"./utils":26}],13:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObjectCollection=void 0;const id_1=require("./id");class ObjectCollection{static from(array){const collection={};array.forEach((child=>{collection[id_1.ID.generate()]=child}));return collection}}exports.ObjectCollection=ObjectCollection},{"./id":11}],14:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObservableShim=exports.setObservable=exports.getObservable=void 0;let _observable;function getObservable(){if(_observable){return _observable}if(typeof window!=="undefined"&&window.Observable){_observable=window.Observable;return _observable}try{const{Observable:Observable}=require("rxjs");if(!Observable){throw new Error("not loaded")}_observable=Observable;return Observable}catch(err){throw new Error("RxJS Observable could not be loaded. If you are using a browser build, add it to AceBase using db.setObservable. For node.js builds, add it to your project with: npm i rxjs")}}exports.getObservable=getObservable;function setObservable(Observable){if(Observable==="shim"){console.warn("Using AceBase's simple Observable shim. Only use this if you know what you're doing.");Observable=ObservableShim}_observable=Observable}exports.setObservable=setObservable;class ObservableShim{constructor(create){this._active=false;this._subscribers=[];this._create=create}subscribe(subscriber){if(!this._active){const next=value=>{this._subscribers.forEach((s=>{try{s(value)}catch(err){console.error("Error in subscriber callback:",err)}}))};const observer={next:next};this._cleanup=this._create(observer);this._active=true}this._subscribers.push(subscriber);const unsubscribe=()=>{this._subscribers.splice(this._subscribers.indexOf(subscriber),1);if(this._subscribers.length===0){this._active=false;this._cleanup()}};const subscription={unsubscribe:unsubscribe};return subscription}}exports.ObservableShim=ObservableShim},{rxjs:27}],15:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.PartialArray=void 0;class PartialArray{constructor(sparseArray){if(sparseArray instanceof Array){for(let i=0;ikey.startsWith("[")?parseInt(key.slice(1,-1)):key))}class PathInfo{constructor(path){if(typeof path==="string"){this.keys=getPathKeys(path)}else if(path instanceof Array){this.keys=path}this.path=this.keys.reduce(((path,key,i)=>i===0?`${key}`:typeof key==="string"?`${path}/${key}`:`${path}[${key}]`),"")}static get(path){return new PathInfo(path)}static getChildPath(path,childKey){return PathInfo.get(path).child(childKey).path}static getPathKeys(path){return getPathKeys(path)}get key(){return this.keys.length===0?null:this.keys.slice(-1)[0]}get parent(){if(this.keys.length==0){return null}const parentKeys=this.keys.slice(0,-1);return new PathInfo(parentKeys)}get parentPath(){return this.keys.length===0?null:this.parent.path}child(childKey){if(typeof childKey==="string"){childKey=getPathKeys(childKey)}return new PathInfo(this.keys.concat(childKey))}childPath(childKey){return this.child(childKey).path}get pathKeys(){return this.keys}static extractVariables(varPath,fullPath){if(!varPath.includes("*")&&!varPath.includes("$")){return[]}const keys=getPathKeys(varPath);const pathKeys=getPathKeys(fullPath);let count=0;const variables={get length(){return count}};keys.forEach(((key,index)=>{const pathKey=pathKeys[index];if(key==="*"){variables[count++]=pathKey}else if(typeof key==="string"&&key[0]==="$"){variables[count++]=pathKey;variables[key]=pathKey;const varName=key.slice(1);if(typeof variables[varName]==="undefined"){variables[varName]=pathKey}}}));return variables}static fillVariables(varPath,fullPath){if(varPath.indexOf("*")<0&&varPath.indexOf("$")<0){return varPath}const keys=getPathKeys(varPath);const pathKeys=getPathKeys(fullPath);const merged=keys.map(((key,index)=>{if(key===pathKeys[index]||index>=pathKeys.length){return key}else if(typeof key==="string"&&(key==="*"||key[0]==="$")){return pathKeys[index]}else{throw new Error(`Path "${fullPath}" cannot be used to fill variables of path "${varPath}" because they do not match`)}}));let mergedPath="";merged.forEach((key=>{if(typeof key==="number"){mergedPath+=`[${key}]`}else{if(mergedPath.length>0){mergedPath+="/"}mergedPath+=key}}));return mergedPath}static fillVariables2(varPath,vars){if(typeof vars!=="object"||Object.keys(vars).length===0){return varPath}const pathKeys=getPathKeys(varPath);let n=0;const targetPath=pathKeys.reduce(((path,key)=>{if(typeof key==="string"&&(key==="*"||key.startsWith("$"))){return PathInfo.getChildPath(path,vars[n++])}else{return PathInfo.getChildPath(path,key)}}),"");return targetPath}equals(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path===other.path){return true}if(this.keys.length!==other.keys.length){return false}return this.keys.every(((key,index)=>{const otherKey=other.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isAncestorOf(descendantPath){const descendant=descendantPath instanceof PathInfo?descendantPath:new PathInfo(descendantPath);if(descendant.path===""||this.path===descendant.path){return false}if(this.path===""){return true}if(this.keys.length>=descendant.keys.length){return false}return this.keys.every(((key,index)=>{const otherKey=descendant.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isDescendantOf(ancestorPath){const ancestor=ancestorPath instanceof PathInfo?ancestorPath:new PathInfo(ancestorPath);if(this.path===""||this.path===ancestor.path){return false}if(ancestorPath===""){return true}if(ancestor.keys.length>=this.keys.length){return false}return ancestor.keys.every(((key,index)=>{const otherKey=this.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isOnTrailOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path.length===0||other.path.length===0){return true}if(this.path===other.path){return true}return this.pathKeys.every(((key,index)=>{if(index>=other.keys.length){return true}const otherKey=other.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isChildOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path===""){return false}return this.parent.equals(other)}isParentOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(other.path===""){return false}return this.equals(other.parent)}}exports.PathInfo=PathInfo},{}],17:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.PathReference=void 0;class PathReference{constructor(path){this.path=path}}exports.PathReference=PathReference},{}],18:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default={nextTick(fn){setTimeout(fn,0)}}},{}],19:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SchemaDefinition=void 0;function parse(definition){let pos=0;function consumeSpaces(){let c;while(c=definition[pos],[" ","\r","\n","\t"].includes(c)){pos++}}function consumeCharacter(c){if(definition[pos]!==c){throw new Error(`Unexpected character at position ${pos}. Expected: '${c}', found '${definition[pos]}'`)}pos++}function readProperty(){consumeSpaces();const prop={name:"",optional:false,wildcard:false};let c;while(c=definition[pos],c==="_"||c==="$"||c>="a"&&c<="z"||c>="A"&&c<="Z"||prop.name.length>0&&c>="0"&&c<="9"||prop.name.length===0&&c==="*"){prop.name+=c;pos++}if(prop.name.length===0){throw new Error(`Property name expected at position ${pos}, found: ${definition.slice(pos,pos+10)}..`)}if(definition[pos]==="?"){prop.optional=true;pos++}if(prop.name==="*"||prop.name[0]==="$"){prop.optional=true;prop.wildcard=true}consumeSpaces();consumeCharacter(":");return prop}function readType(){consumeSpaces();let type={typeOf:"any"},c;let name="";while(c=definition[pos],c>="a"&&c<="z"||c>="A"&&c<="Z"){name+=c;pos++}if(name.length===0){if(definition[pos]==="*"){consumeCharacter("*");type.typeOf="any"}else if(["'",'"',"`"].includes(definition[pos])){type.typeOf="string";type.value="";const quote=definition[pos];consumeCharacter(quote);while(c=definition[pos],c&&c!==quote){type.value+=c;pos++}consumeCharacter(quote)}else if(definition[pos]>="0"&&definition[pos]<="9"){type.typeOf="number";let nr="";while(c=definition[pos],c==="."||c==="n"||c>="0"&&c<="9"){nr+=c;pos++}if(nr.endsWith("n")){type.value=BigInt(nr)}else if(nr.includes(".")){type.value=parseFloat(nr)}else{type.value=parseInt(nr)}}else if(definition[pos]==="{"){consumeCharacter("{");type.typeOf="object";type.instanceOf=Object;type.children=[];while(true){const prop=readProperty();const types=readTypes();type.children.push({name:prop.name,optional:prop.optional,wildcard:prop.wildcard,types:types});consumeSpaces();if(definition[pos]==="}"){break}consumeCharacter(",")}consumeCharacter("}")}else if(definition[pos]==="/"){consumeCharacter("/");let pattern="",flags="";while(c=definition[pos],c!=="/"||pattern.endsWith("\\")){pattern+=c;pos++}consumeCharacter("/");while(c=definition[pos],["g","i","m","s","u","y","d"].includes(c)){flags+=c;pos++}type.typeOf="string";type.matches=new RegExp(pattern,flags)}else{throw new Error(`Expected a type definition at position ${pos}, found character '${definition[pos]}'`)}}else if(["string","number","boolean","bigint","undefined","String","Number","Boolean","BigInt"].includes(name)){type.typeOf=name.toLowerCase()}else if(name==="Object"||name==="object"){type.typeOf="object";type.instanceOf=Object}else if(name==="Date"){type.typeOf="object";type.instanceOf=Date}else if(name==="Binary"||name==="binary"){type.typeOf="object";type.instanceOf=ArrayBuffer}else if(name==="any"){type.typeOf="any"}else if(name==="null"){type.typeOf="object";type.value=null}else if(name==="Array"){consumeCharacter("<");type.typeOf="object";type.instanceOf=Array;type.genericTypes=readTypes();consumeCharacter(">")}else if(["true","false"].includes(name)){type.typeOf="boolean";type.value=name==="true"}else{throw new Error(`Unknown type at position ${pos}: "${type}"`)}consumeSpaces();while(definition[pos]==="["){consumeCharacter("[");consumeCharacter("]");type={typeOf:"object",instanceOf:Array,genericTypes:[type]}}return type}function readTypes(){consumeSpaces();const types=[readType()];while(definition[pos]==="|"){consumeCharacter("|");types.push(readType());consumeSpaces()}return types}return readType()}function checkObject(path,properties,obj,partial){const invalidProperties=properties.find((prop=>prop.name==="*"||prop.name[0]==="$"))?[]:Object.keys(obj).filter((key=>![null,undefined].includes(obj[key])&&!properties.find((prop=>prop.name===key))));if(invalidProperties.length>0){return{ok:false,reason:`Object at path "${path}" cannot have propert${invalidProperties.length===1?"y":"ies"} ${invalidProperties.map((p=>`"${p}"`)).join(", ")}`}}function checkProperty(property){const hasValue=![null,undefined].includes(obj[property.name]);if(!property.optional&&(partial?obj[property.name]===null:!hasValue)){return{ok:false,reason:`Property at path "${path}/${property.name}" is not optional`}}if(hasValue&&property.types.length===1){return checkType(`${path}/${property.name}`,property.types[0],obj[property.name],false)}if(hasValue&&!property.types.some((type=>checkType(`${path}/${property.name}`,type,obj[property.name],false).ok))){return{ok:false,reason:`Property at path "${path}/${property.name}" does not match any of ${property.types.length} allowed types`}}return{ok:true}}const namedProperties=properties.filter((prop=>!prop.wildcard));const failedProperty=namedProperties.find((prop=>!checkProperty(prop).ok));if(failedProperty){const reason=checkProperty(failedProperty).reason;return{ok:false,reason:reason}}const wildcardProperty=properties.find((prop=>prop.wildcard));if(!wildcardProperty){return{ok:true}}const wildcardChildKeys=Object.keys(obj).filter((key=>!namedProperties.find((prop=>prop.name===key))));let result={ok:true};for(let i=0;i0){if(type.typeOf!=="object"){return{ok:false,reason:`path "${path}" must be typeof ${type.typeOf}`}}if(!type.children){return ok}const childKey=trailKeys[0];let property=type.children.find((prop=>prop.name===childKey));if(!property){property=type.children.find((prop=>prop.name==="*"||prop.name[0]==="$"))}if(!property){return{ok:false,reason:`Object at path "${path}" cannot have property "${childKey}"`}}if(property.optional&&value===null&&trailKeys.length===1){return ok}let result;property.types.some((type=>{const childPath=typeof childKey==="number"?`${path}[${childKey}]`:`${path}/${childKey}`;result=checkType(childPath,type,value,partial,trailKeys.slice(1));return result.ok}));return result}if(value===null){return ok}if(type.instanceOf===Object&&(typeof value!=="object"||value instanceof Array||value instanceof Date)){return{ok:false,reason:`path "${path}" must be an object collection`}}if(type.instanceOf&&(typeof value!=="object"||value.constructor!==type.instanceOf)){return{ok:false,reason:`path "${path}" must be an instance of ${type.instanceOf.name}`}}if("value"in type&&value!==type.value){return{ok:false,reason:`path "${path}" must be value: ${type.value}`}}if(typeof value!==type.typeOf){return{ok:false,reason:`path "${path}" must be typeof ${type.typeOf}`}}if(type.instanceOf===Array&&type.genericTypes&&!value.every((v=>type.genericTypes.some((t=>checkType(path,t,v,false).ok))))){return{ok:false,reason:`every array value of path "${path}" must match one of the specified types`}}if(type.typeOf==="object"&&type.children){return checkObject(path,type.children,value,partial)}if(type.matches&&!type.matches.test(value)){return{ok:false,reason:`path "${path}" must match regular expression /${type.matches.source}/${type.matches.flags}`}}return ok}function getConstructorType(val){switch(val){case String:return"string";case Number:return"number";case Boolean:return"boolean";case Date:return"Date";case BigInt:return"bigint";case Array:throw new Error("Schema error: Array cannot be used without a type. Use string[] or Array instead");default:throw new Error(`Schema error: unknown type used: ${val.name}`)}}class SchemaDefinition{constructor(definition){this.source=definition;if(typeof definition==="object"){const toTS=obj=>"{"+Object.keys(obj).map((key=>{let val=obj[key];if(val===undefined){val="undefined"}else if(val instanceof RegExp){val=`/${val.source}/${val.flags}`}else if(typeof val==="object"){val=toTS(val)}else if(typeof val==="function"){val=getConstructorType(val)}else if(!["string","number","boolean","bigint"].includes(typeof val)){throw new Error(`Type definition for key "${key}" must be a string, number, boolean, bigint, object, regular expression, or one of these classes: String, Number, Boolean, Date, BigInt`)}return`${key}:${val}`})).join(",")+"}";this.text=toTS(definition)}else if(typeof definition==="string"){this.text=definition}else{throw new Error("Type definiton must be a string or an object")}this.type=parse(this.text)}check(path,value,partial,trailKeys){return checkType(path,this.type,value,partial,trailKeys)}}exports.SchemaDefinition=SchemaDefinition},{}],20:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SimpleCache=void 0;const utils_1=require("./utils");const calculateExpiryTime=expirySeconds=>expirySeconds>0?Date.now()+expirySeconds*1e3:Infinity;class SimpleCache{constructor(options){var _a;this.enabled=true;if(typeof options==="number"){options={expirySeconds:options}}options.cloneValues=options.cloneValues!==false;if(typeof options.expirySeconds!=="number"&&typeof options.maxEntries!=="number"){throw new Error("Either expirySeconds or maxEntries must be specified")}this.options=options;this.cache=new Map;const interval=setInterval((()=>{this.cleanUp()}),60*1e3);(_a=interval.unref)===null||_a===void 0?void 0:_a.call(interval)}get size(){return this.cache.size}has(key){if(!this.enabled){return false}return this.cache.has(key)}get(key){if(!this.enabled){return null}const entry=this.cache.get(key);if(!entry){return null}entry.expires=calculateExpiryTime(this.options.expirySeconds);entry.accessed=Date.now();return this.options.cloneValues?(0,utils_1.cloneObject)(entry.value):entry.value}set(key,value){if(this.options.maxEntries>0&&this.cache.size>=this.options.maxEntries&&!this.cache.has(key)){let oldest=null;const now=Date.now();for(const[key,entry]of this.cache.entries()){if(entry.expires<=now){this.cache.delete(key);oldest=null;break}if(!oldest||entry.accessed{if(entry.expires<=now){this.cache.delete(key)}}))}}exports.SimpleCache=SimpleCache},{"./utils":26}],21:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Colorize=exports.SetColorsEnabled=exports.ColorsSupported=exports.ColorStyle=void 0;const process_1=require("./process");const FontCode={bold:1,dim:2,italic:3,underline:4,inverse:7,hidden:8,strikethrough:94};const ColorCode={black:30,red:31,green:32,yellow:33,blue:34,magenta:35,cyan:36,white:37,grey:90,brightRed:91};const BgColorCode={bgBlack:40,bgRed:41,bgGreen:42,bgYellow:43,bgBlue:44,bgMagenta:45,bgCyan:46,bgWhite:47,bgGrey:100,bgBrightRed:101};const ResetCode={all:0,color:39,background:49,bold:22,dim:22,italic:23,underline:24,inverse:27,hidden:28,strikethrough:29};var ColorStyle;(function(ColorStyle){ColorStyle["reset"]="reset";ColorStyle["bold"]="bold";ColorStyle["dim"]="dim";ColorStyle["italic"]="italic";ColorStyle["underline"]="underline";ColorStyle["inverse"]="inverse";ColorStyle["hidden"]="hidden";ColorStyle["strikethrough"]="strikethrough";ColorStyle["black"]="black";ColorStyle["red"]="red";ColorStyle["green"]="green";ColorStyle["yellow"]="yellow";ColorStyle["blue"]="blue";ColorStyle["magenta"]="magenta";ColorStyle["cyan"]="cyan";ColorStyle["grey"]="grey";ColorStyle["bgBlack"]="bgBlack";ColorStyle["bgRed"]="bgRed";ColorStyle["bgGreen"]="bgGreen";ColorStyle["bgYellow"]="bgYellow";ColorStyle["bgBlue"]="bgBlue";ColorStyle["bgMagenta"]="bgMagenta";ColorStyle["bgCyan"]="bgCyan";ColorStyle["bgWhite"]="bgWhite";ColorStyle["bgGrey"]="bgGrey"})(ColorStyle=exports.ColorStyle||(exports.ColorStyle={}));function ColorsSupported(){if(typeof process_1.default==="undefined"||!process_1.default.stdout||!process_1.default.env||!process_1.default.platform||process_1.default.platform==="browser"){return false}if(process_1.default.platform==="win32"){return true}const env=process_1.default.env;if(env.COLORTERM){return true}if(env.TERM==="dumb"){return false}if(env.CI||env.TEAMCITY_VERSION){return!!env.TRAVIS}if(["iTerm.app","HyperTerm","Hyper","MacTerm","Apple_Terminal","vscode"].includes(env.TERM_PROGRAM)){return true}if(/^xterm-256|^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(env.TERM)){return true}return false}exports.ColorsSupported=ColorsSupported;let _enabled=ColorsSupported();function SetColorsEnabled(enabled){_enabled=ColorsSupported()&&enabled}exports.SetColorsEnabled=SetColorsEnabled;function Colorize(str,style){if(!_enabled){return str}const openCodes=[],closeCodes=[];const addStyle=style=>{if(style===ColorStyle.reset){openCodes.push(ResetCode.all)}else if(style in FontCode){openCodes.push(FontCode[style]);closeCodes.push(ResetCode[style])}else if(style in ColorCode){openCodes.push(ColorCode[style]);closeCodes.push(ResetCode.color)}else if(style in BgColorCode){openCodes.push(BgColorCode[style]);closeCodes.push(ResetCode.background)}};if(style instanceof Array){style.forEach(addStyle)}else{addStyle(style)}const open=openCodes.map((code=>"["+code+"m")).join("");const close=closeCodes.map((code=>"["+code+"m")).join("");return str.split("\n").map((line=>open+line+close)).join("\n")}exports.Colorize=Colorize;String.prototype.colorize=function(style){return Colorize(this,style)}},{"./process":18}],22:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SimpleEventEmitter=void 0;function runCallback(callback,data){try{callback(data)}catch(err){console.error("Error in subscription callback",err)}}class SimpleEventEmitter{constructor(){this._subscriptions=[];this._oneTimeEvents=new Map}on(event,callback){if(this._oneTimeEvents.has(event)){return runCallback(callback,this._oneTimeEvents.get(event))}this._subscriptions.push({event:event,callback:callback,once:false});return this}off(event,callback){this._subscriptions=this._subscriptions.filter((s=>s.event!==event||callback&&s.callback!==callback));return this}once(event,callback){return new Promise((resolve=>{const ourCallback=data=>{resolve(data);callback===null||callback===void 0?void 0:callback(data)};if(this._oneTimeEvents.has(event)){runCallback(ourCallback,this._oneTimeEvents.get(event))}else{this._subscriptions.push({event:event,callback:ourCallback,once:true})}}))}emit(event,data){if(this._oneTimeEvents.has(event)){throw new Error(`Event "${event}" was supposed to be emitted only once`)}for(let i=0;i{if(this._internal.state==="active"){return resolve()}else if(this._internal.state==="canceled"&&!callback){return reject(new Error(this._internal.cancelReason))}const noop=()=>{};this._internal.activatePromises.push({resolve:resolve,reject:callback?noop:reject})}))}_setActivationState(activated,cancelReason){this._internal.cancelReason=cancelReason;this._internal.state=activated?"active":"canceled";while(this._internal.activatePromises.length>0){const p=this._internal.activatePromises.shift();if(activated){p.callback&&p.callback(true);p.resolve&&p.resolve()}else{p.callback&&p.callback(false,cancelReason);p.reject&&p.reject(cancelReason)}}}}exports.EventSubscription=EventSubscription;class EventPublisher{constructor(publish,start,cancel){this.publish=publish;this.start=start;this.cancel=cancel}}exports.EventPublisher=EventPublisher;class EventStream{constructor(eventPublisherCallback){const subscribers=[];let noMoreSubscribersCallback;let activationState;const _stoppedState="stopped (no more subscribers)";this.subscribe=(callback,activationCallback)=>{if(typeof callback!=="function"){throw new TypeError("callback must be a function")}else if(activationState===_stoppedState){throw new Error("stream can't be used anymore because all subscribers were stopped")}const sub={callback:callback,activationCallback:function(activated,cancelReason){activationCallback&&activationCallback(activated,cancelReason);this.subscription._setActivationState(activated,cancelReason)},subscription:new EventSubscription((function stop(){subscribers.splice(subscribers.indexOf(this),1);return checkActiveSubscribers()}))};subscribers.push(sub);if(typeof activationState!=="undefined"){if(activationState===true){activationCallback&&activationCallback(true);sub.subscription._setActivationState(true)}else if(typeof activationState==="string"){activationCallback&&activationCallback(false,activationState);sub.subscription._setActivationState(false,activationState)}}return sub.subscription};const checkActiveSubscribers=()=>{let ret;if(subscribers.length===0){ret=noMoreSubscribersCallback&&noMoreSubscribersCallback();activationState=_stoppedState}return Promise.resolve(ret)};this.unsubscribe=callback=>{const remove=callback?subscribers.filter((sub=>sub.callback===callback)):subscribers;remove.forEach((sub=>{const i=subscribers.indexOf(sub);subscribers.splice(i,1)}));checkActiveSubscribers()};this.stop=()=>{subscribers.splice(0);checkActiveSubscribers()};const publish=val=>{subscribers.forEach((sub=>{try{sub.callback(val)}catch(err){console.error(`Error running subscriber callback: ${err.message}`)}}));if(subscribers.length===0){checkActiveSubscribers()}return subscribers.length>0};const start=allSubscriptionsStoppedCallback=>{activationState=true;noMoreSubscribersCallback=allSubscriptionsStoppedCallback;subscribers.forEach((sub=>{sub.activationCallback&&sub.activationCallback(true)}))};const cancel=reason=>{activationState=reason;subscribers.forEach((sub=>{sub.activationCallback&&sub.activationCallback(false,reason||new Error("unknown reason"))}));subscribers.splice(0)};const publisher=new EventPublisher(publish,start,cancel);eventPublisherCallback(publisher)}}exports.EventStream=EventStream},{}],24:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.deserialize2=exports.serialize2=exports.serialize=exports.detectSerializeVersion=exports.deserialize=void 0;const path_reference_1=require("./path-reference");const utils_1=require("./utils");const ascii85_1=require("./ascii85");const path_info_1=require("./path-info");const partial_array_1=require("./partial-array");const deserialize=data=>{if(data.map===null||typeof data.map==="undefined"){if(typeof data.val==="undefined"){throw new Error("serialized value must have a val property")}return data.val}const deserializeValue=(type,val)=>{if(type==="date"){return new Date(val)}else if(type==="binary"){return ascii85_1.ascii85.decode(val)}else if(type==="reference"){return new path_reference_1.PathReference(val)}else if(type==="regexp"){return new RegExp(val.pattern,val.flags)}else if(type==="array"){return new partial_array_1.PartialArray(val)}else if(type==="bigint"){return BigInt(val)}return val};if(typeof data.map==="string"){return deserializeValue(data.map,data.val)}Object.keys(data.map).forEach((path=>{const type=data.map[path];const keys=path_info_1.PathInfo.getPathKeys(path);let parent=data;let key="val";let val=data.val;keys.forEach((k=>{key=k;parent=val;val=val[key]}));parent[key]=deserializeValue(type,val)}));return data.val};exports.deserialize=deserialize;const detectSerializeVersion=data=>{if(typeof data!=="object"||data===null){return 2}if("map"in data&&"val"in data){return 1}else if("val"in data){if(Object.keys(data).length>1){return 2}return 1}return 2};exports.detectSerializeVersion=detectSerializeVersion;const serialize=obj=>{var _a;if(obj===null||typeof obj!=="object"||obj instanceof Date||obj instanceof ArrayBuffer||obj instanceof path_reference_1.PathReference||obj instanceof RegExp){const ser=(0,exports.serialize)({value:obj});return{map:(_a=ser.map)===null||_a===void 0?void 0:_a.value,val:ser.val.value}}obj=(0,utils_1.cloneObject)(obj);const process=(obj,mappings,prefix)=>{if(obj instanceof partial_array_1.PartialArray){mappings[prefix]="array"}Object.keys(obj).forEach((key=>{const val=obj[key];const path=prefix.length===0?key:`${prefix}/${key}`;if(typeof val==="bigint"){obj[key]=val.toString();mappings[path]="bigint"}else if(val instanceof Date){obj[key]=val.toISOString();mappings[path]="date"}else if(val instanceof ArrayBuffer){obj[key]=ascii85_1.ascii85.encode(val);mappings[path]="binary"}else if(val instanceof path_reference_1.PathReference){obj[key]=val.path;mappings[path]="reference"}else if(val instanceof RegExp){obj[key]={pattern:val.source,flags:val.flags};mappings[path]="regexp"}else if(typeof val==="object"&&val!==null){process(val,mappings,path)}}))};const mappings={};process(obj,mappings,"");const serialized={val:obj};if(Object.keys(mappings).length>0){serialized.map=mappings}return serialized};exports.serialize=serialize;const serialize2=obj=>{const getSerializedValue=val=>{if(typeof val==="bigint"){return{".type":"bigint",".val":val.toString()}}else if(val instanceof Date){return{".type":"date",".val":val.toISOString()}}else if(val instanceof ArrayBuffer){return{".type":"binary",".val":ascii85_1.ascii85.encode(val)}}else if(val instanceof path_reference_1.PathReference){return{".type":"reference",".val":val.path}}else if(val instanceof RegExp){return{".type":"regexp",".val":`/${val.source}/${val.flags}`}}else if(typeof val==="object"&&val!==null){if(val instanceof Array){const copy=[];for(let i=0;i{if(typeof data!=="object"||data===null){return data}if(typeof data[".type"]==="undefined"){if(data instanceof Array){const copy=[];const arr=data;for(let i=0;i{const mkeys=path_info_1.PathInfo.getPathKeys(mpath);if(mkeys.length!==keys.length){return false}return mkeys.every(((mkey,index)=>{if(mkey==="*"||mkey[0]==="$"){return true}return mkey===keys[index]}))}));const mapping=mappings[mappedPath];return mapping}function map(mappings,path){const targetPath=path_info_1.PathInfo.get(path).parentPath;if(targetPath===null){return}return get(mappings,targetPath)}function mapDeep(mappings,entryPath){entryPath=entryPath.replace(/^\/|\/$/g,"");const pathInfo=path_info_1.PathInfo.get(entryPath);const startPath=pathInfo.parentPath;const keys=startPath?path_info_1.PathInfo.getPathKeys(startPath):[];const matches=Object.keys(mappings).reduce(((m,mpath)=>{const mkeys=path_info_1.PathInfo.getPathKeys(mpath);if(mkeys.length{if(index>=keys.length){return false}else if(mkey==="*"||mkey[0]==="$"||mkey===keys[index]){return true}else{isMatch=false;return false}}))}if(isMatch){const mapping=mappings[mpath];m.push({path:mpath,type:mapping})}return m}),[]);return matches}function process(db,mappings,path,obj,action){if(obj===null||typeof obj!=="object"){return obj}const keys=path_info_1.PathInfo.getPathKeys(path);const m=mapDeep(mappings,path);const changes=[];m.sort(((a,b)=>path_info_1.PathInfo.getPathKeys(a.path).length>path_info_1.PathInfo.getPathKeys(b.path).length?-1:1));m.forEach((mapping=>{const mkeys=path_info_1.PathInfo.getPathKeys(mapping.path);mkeys.push("*");const mTrailKeys=mkeys.slice(keys.length);if(mTrailKeys.length===0){const vars=path_info_1.PathInfo.extractVariables(mapping.path,path);const ref=new data_reference_1.DataReference(db,path,vars);if(action==="serialize"){obj=mapping.type.serialize(obj,ref)}else if(action==="deserialize"){const snap=new data_snapshot_1.DataSnapshot(ref,obj);obj=mapping.type.deserialize(snap)}return}const process=(parentPath,parent,keys)=>{if(obj===null||typeof obj!=="object"){return obj}const key=keys[0];let children=[];if(key==="*"||key[0]==="$"){if(parent instanceof Array){children=parent.map(((val,index)=>({key:index,val:val})))}else{children=Object.keys(parent).map((k=>({key:k,val:parent[k]})))}}else{const child=parent[key];if(typeof child==="object"){children.push({key:key,val:child})}}children.forEach((child=>{const childPath=path_info_1.PathInfo.getChildPath(parentPath,child.key);const vars=path_info_1.PathInfo.extractVariables(mapping.path,childPath);const ref=new data_reference_1.DataReference(db,childPath,vars);if(keys.length===1){if(action==="serialize"){changes.push({parent:parent,key:child.key,original:parent[child.key]});parent[child.key]=mapping.type.serialize(child.val,ref)}else if(action==="deserialize"){const snap=new data_snapshot_1.DataSnapshot(ref,child.val);parent[child.key]=mapping.type.deserialize(snap)}}else{process(childPath,child.val,keys.slice(1))}}))};process(path,obj,mTrailKeys)}));if(action==="serialize"){obj=(0,utils_1.cloneObject)(obj);if(changes.length>0){changes.forEach((change=>{change.parent[change.key]=change.original}))}}return obj}const _mappings=Symbol("mappings");class TypeMappings{constructor(db){this.db=db;this[_mappings]={}}get mappings(){return this[_mappings]}map(path){return map(this[_mappings],path)}bind(path,type,options={}){if(typeof path!=="string"){throw new TypeError("path must be a string")}if(typeof type!=="function"){throw new TypeError("constructor must be a function")}if(typeof options.serializer==="undefined"){}else if(typeof options.serializer==="string"){if(typeof type.prototype[options.serializer]==="function"){options.serializer=type.prototype[options.serializer]}else{throw new TypeError(`${type.name}.prototype.${options.serializer} is not a function, cannot use it as serializer`)}}else if(typeof options.serializer!=="function"){throw new TypeError(`serializer for class ${type.name} must be a function, or the name of a prototype method`)}if(typeof options.creator==="undefined"){if(typeof type.create==="function"){options.creator=type.create}}else if(typeof options.creator==="string"){if(typeof type[options.creator]==="function"){options.creator=type[options.creator]}else{throw new TypeError(`${type.name}.${options.creator} is not a function, cannot use it as creator`)}}else if(typeof options.creator!=="function"){throw new TypeError(`creator for class ${type.name} must be a function, or the name of a static method`)}path=path.replace(/^\/|\/$/g,"");this[_mappings][path]={db:this.db,type:type,creator:options.creator,serializer:options.serializer,deserialize(snap){let obj;if(this.creator){obj=this.creator.call(this.type,snap)}else{obj=new this.type(snap)}return obj},serialize(obj,ref){if(this.serializer){obj=this.serializer.call(obj,ref,obj)}else if(obj&&typeof obj.serialize==="function"){obj=obj.serialize(ref,obj)}return obj}}}serialize(path,obj){return process(this.db,this[_mappings],path,obj,"serialize")}deserialize(path,obj){return process(this.db,this[_mappings],path,obj,"deserialize")}}exports.TypeMappings=TypeMappings},{"./data-reference":8,"./data-snapshot":9,"./path-info":16,"./utils":26}],26:[function(require,module,exports){(function(Buffer){(function(){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.defer=exports.getChildValues=exports.getMutations=exports.compareValues=exports.ObjectDifferences=exports.valuesAreEqual=exports.cloneObject=exports.concatTypedArrays=exports.decodeString=exports.encodeString=exports.bytesToBigint=exports.bigintToBytes=exports.bytesToNumber=exports.numberToBytes=void 0;const path_reference_1=require("./path-reference");const process_1=require("./process");const partial_array_1=require("./partial-array");function numberToBytes(number){const bytes=new Uint8Array(8);const view=new DataView(bytes.buffer);view.setFloat64(0,number);return new Array(...bytes)}exports.numberToBytes=numberToBytes;function bytesToNumber(bytes){const length=Array.isArray(bytes)?bytes.length:bytes.byteLength;if(length!==8){throw new TypeError("must be 8 bytes")}const bin=new Uint8Array(bytes);const view=new DataView(bin.buffer);const nr=view.getFloat64(0);return nr}exports.bytesToNumber=bytesToNumber;const big={zero:BigInt(0),one:BigInt(1),two:BigInt(2),eight:BigInt(8),ff:BigInt(255)};function bigintToBytes(number){if(typeof number!=="bigint"){throw new Error("number must be a bigint")}const bytes=[];const negative=number>big.eight}while(number!==(negative?-big.one:big.zero));bytes.reverse();if(negative?bytes[0]<128:bytes[0]>=128){bytes.unshift(negative?255:0)}return bytes}exports.bigintToBytes=bigintToBytes;function bytesToBigint(bytes){const negative=bytes[0]>=128;let number=big.zero;for(let b of bytes){if(negative){b=~b&255}number=(number<128){if((code&55296)===55296){const nextCode=str.charCodeAt(i+1);if((nextCode&56320)!==56320){throw new Error("follow-up utf-16 character does not start with 0xDC00")}i++;const p1=code&1023;const p2=nextCode&1023;code=65536|p1<<10|p2}if(code<2048){const b1=192|code>>6&31;const b2=128|code&63;arr.push(b1,b2)}else if(code<65536){const b1=224|code>>12&15;const b2=128|code>>6&63;const b3=128|code&63;arr.push(b1,b2,b3)}else if(code<2097152){const b1=240|code>>18&7;const b2=128|code>>12&63;const b3=128|code>>6&63;const b4=128|code&63;arr.push(b1,b2,b3,b4)}else{throw new Error(`Cannot convert character ${str.charAt(i)} (code ${code}) to utf-8`)}}else{arr.push(code<128?code:63)}}return new Uint8Array(arr)}}exports.encodeString=encodeString;function decodeString(buffer){if(typeof TextDecoder!=="undefined"){const decoder=new TextDecoder;if(buffer instanceof Uint8Array){return decoder.decode(buffer)}const buf=Uint8Array.from(buffer);return decoder.decode(buf)}else if(typeof Buffer==="function"){if(buffer instanceof Array){buffer=Uint8Array.from(buffer)}if(!(buffer instanceof Buffer)&&"buffer"in buffer&&buffer.buffer instanceof ArrayBuffer){const typedArray=buffer;buffer=Buffer.from(typedArray.buffer,typedArray.byteOffset,typedArray.byteLength)}if(!(buffer instanceof Buffer)){throw new Error("Unsupported buffer argument")}return buffer.toString("utf-8")}else{if(!(buffer instanceof Uint8Array)&&"buffer"in buffer&&buffer["buffer"]instanceof ArrayBuffer){const typedArray=buffer;buffer=new Uint8Array(typedArray.buffer,typedArray.byteOffset,typedArray.byteLength)}if(buffer instanceof Buffer||buffer instanceof Array||buffer instanceof Uint8Array){let str="";for(let i=0;i128){if((code&240)===240){const b1=code,b2=buffer[i+1],b3=buffer[i+2],b4=buffer[i+3];code=(b1&7)<<18|(b2&63)<<12|(b3&63)<<6|b4&63;i+=3}else if((code&224)===224){const b1=code,b2=buffer[i+1],b3=buffer[i+2];code=(b1&15)<<12|(b2&63)<<6|b3&63;i+=2}else if((code&192)===192){const b1=code,b2=buffer[i+1];code=(b1&31)<<6|b2&63;i++}else{throw new Error("invalid utf-8 data")}}if(code>=65536){code^=65536;const p1=55296|code>>10;const p2=56320|code&1023;str+=String.fromCharCode(p1);str+=String.fromCharCode(p2)}else{str+=String.fromCharCode(code)}}return str}else{throw new Error("Unsupported buffer argument")}}}exports.decodeString=decodeString;function concatTypedArrays(a,b){const c=new a.constructor(a.length+b.length);c.set(a);c.set(b,a.length);return c}exports.concatTypedArrays=concatTypedArrays;function cloneObject(original,stack){var _a;if(((_a=original===null||original===void 0?void 0:original.constructor)===null||_a===void 0?void 0:_a.name)==="DataSnapshot"){throw new TypeError(`Object to clone is a DataSnapshot (path "${original.ref.path}")`)}const checkAndFixTypedArray=obj=>{if(obj!==null&&typeof obj==="object"&&typeof obj.constructor==="function"&&typeof obj.constructor.name==="string"&&["Buffer","Uint8Array","Int8Array","Uint16Array","Int16Array","Uint32Array","Int32Array","BigUint64Array","BigInt64Array"].includes(obj.constructor.name)){obj=obj.buffer.slice(obj.byteOffset,obj.byteOffset+obj.byteLength)}return obj};original=checkAndFixTypedArray(original);if(typeof original!=="object"||original===null||original instanceof Date||original instanceof ArrayBuffer||original instanceof path_reference_1.PathReference||original instanceof RegExp){return original}const cloneValue=val=>{if(stack.indexOf(val)>=0){throw new ReferenceError("object contains a circular reference")}val=checkAndFixTypedArray(val);if(val===null||val instanceof Date||val instanceof ArrayBuffer||val instanceof path_reference_1.PathReference||val instanceof RegExp){return val}else if(typeof val==="object"){stack.push(val);val=cloneObject(val,stack);stack.pop();return val}else{return val}};if(typeof stack==="undefined"){stack=[original]}const clone=original instanceof Array?[]:original instanceof partial_array_1.PartialArray?new partial_array_1.PartialArray:{};Object.keys(original).forEach((key=>{const val=original[key];if(typeof val==="function"){return}clone[key]=cloneValue(val)}));return clone}exports.cloneObject=cloneObject;const isTypedArray=val=>typeof val==="object"&&["ArrayBuffer","Buffer","Uint8Array","Uint16Array","Uint32Array","Int8Array","Int16Array","Int32Array"].includes(val.constructor.name);function valuesAreEqual(val1,val2){if(val1===val2){return true}if(typeof val1!==typeof val2){return false}if(typeof val1==="object"||typeof val2==="object"){if(val1===null||val2===null){return false}if(val1 instanceof path_reference_1.PathReference||val2 instanceof path_reference_1.PathReference){return val1 instanceof path_reference_1.PathReference&&val2 instanceof path_reference_1.PathReference&&val1.path===val2.path}if(val1 instanceof Date||val2 instanceof Date){return val1 instanceof Date&&val2 instanceof Date&&val1.getTime()===val2.getTime()}if(val1 instanceof Array||val2 instanceof Array){return val1 instanceof Array&&val2 instanceof Array&&val1.length===val2.length&&val1.every(((item,i)=>valuesAreEqual(val1[i],val2[i])))}if(isTypedArray(val1)||isTypedArray(val2)){if(!isTypedArray(val1)||!isTypedArray(val2)||val1.byteLength===val2.byteLength){return false}const typed1=val1 instanceof ArrayBuffer?new Uint8Array(val1):new Uint8Array(val1.buffer,val1.byteOffset,val1.byteLength),typed2=val2 instanceof ArrayBuffer?new Uint8Array(val2):new Uint8Array(val2.buffer,val2.byteOffset,val2.byteLength);return typed1.every(((val,i)=>typed2[i]===val))}const keys1=Object.keys(val1),keys2=Object.keys(val2);return keys1.length===keys2.length&&keys1.every((key=>keys2.includes(key)))&&keys1.every((key=>valuesAreEqual(val1[key],val2[key])))}return false}exports.valuesAreEqual=valuesAreEqual;class ObjectDifferences{constructor(added,removed,changed){this.added=added;this.removed=removed;this.changed=changed}forChild(key){if(this.added.includes(key)){return"added"}if(this.removed.includes(key)){return"removed"}const changed=this.changed.find((ch=>ch.key===key));return changed?changed.change:"identical"}}exports.ObjectDifferences=ObjectDifferences;function compareValues(oldVal,newVal,sortedResults=false){const voids=[undefined,null];if(oldVal===newVal){return"identical"}else if(voids.indexOf(oldVal)>=0&&voids.indexOf(newVal)<0){return"added"}else if(voids.indexOf(oldVal)<0&&voids.indexOf(newVal)>=0){return"removed"}else if(typeof oldVal!==typeof newVal){return"changed"}else if(isTypedArray(oldVal)||isTypedArray(newVal)){if(!isTypedArray(oldVal)||!isTypedArray(newVal)){return"changed"}const typed1=oldVal instanceof Uint8Array?oldVal:oldVal instanceof ArrayBuffer?new Uint8Array(oldVal):new Uint8Array(oldVal.buffer,oldVal.byteOffset,oldVal.byteLength);const typed2=newVal instanceof Uint8Array?newVal:newVal instanceof ArrayBuffer?new Uint8Array(newVal):new Uint8Array(newVal.buffer,newVal.byteOffset,newVal.byteLength);return typed1.byteLength===typed2.byteLength&&typed1.every(((val,i)=>typed2[i]===val))?"identical":"changed"}else if(oldVal instanceof Date||newVal instanceof Date){return oldVal instanceof Date&&newVal instanceof Date&&oldVal.getTime()===newVal.getTime()?"identical":"changed"}else if(oldVal instanceof path_reference_1.PathReference||newVal instanceof path_reference_1.PathReference){return oldVal instanceof path_reference_1.PathReference&&newVal instanceof path_reference_1.PathReference&&oldVal.path===newVal.path?"identical":"changed"}else if(typeof oldVal==="object"){const isArray=oldVal instanceof Array;const getKeys=obj=>{let keys=Object.keys(obj).filter((key=>!voids.includes(obj[key])));if(isArray){keys=keys.map((v=>parseInt(v)))}return keys};const oldKeys=getKeys(oldVal);const newKeys=getKeys(newVal);const removedKeys=oldKeys.filter((key=>!newKeys.includes(key)));const addedKeys=newKeys.filter((key=>!oldKeys.includes(key)));const changedKeys=newKeys.reduce(((changed,key)=>{if(oldKeys.includes(key)){const val1=oldVal[key];const val2=newVal[key];const c=compareValues(val1,val2);if(c!=="identical"){changed.push({key:key,change:c})}}return changed}),[]);if(addedKeys.length===0&&removedKeys.length===0&&changedKeys.length===0){return"identical"}else{return new ObjectDifferences(addedKeys,removedKeys,sortedResults?changedKeys.sort(((a,b)=>a.key{switch(compareResult){case"identical":return[];case"changed":return[{target:target,prev:prev,val:val}];case"added":return[{target:target,prev:null,val:val}];case"removed":return[{target:target,prev:prev,val:null}];default:{let changes=[];compareResult.added.forEach((key=>changes.push({target:target.concat(key),prev:null,val:val[key]})));compareResult.removed.forEach((key=>changes.push({target:target.concat(key),prev:prev[key],val:null})));compareResult.changed.forEach((item=>{const childChanges=process(target.concat(item.key),item.change,prev[item.key],val[item.key]);changes=changes.concat(childChanges)}));return changes}}};const compareResult=compareValues(oldVal,newVal,sortedResults);return process([],compareResult,oldVal,newVal)}exports.getMutations=getMutations;function getChildValues(childKey,oldValue,newValue){oldValue=oldValue===null?null:oldValue[childKey];if(typeof oldValue==="undefined"){oldValue=null}newValue=newValue===null?null:newValue[childKey];if(typeof newValue==="undefined"){newValue=null}return{oldValue:oldValue,newValue:newValue}}exports.getChildValues=getChildValues;function defer(fn){process_1.default.nextTick(fn)}exports.defer=defer}).call(this)}).call(this,require("buffer").Buffer)},{"./partial-array":15,"./path-reference":17,"./process":18,buffer:27}],27:[function(require,module,exports){},{}],28:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.BrowserAceBase=void 0;const acebase_local_1=require("./acebase-local");const indexed_db_1=require("./storage/custom/indexed-db");const deprecatedConstructorError=`Using AceBase constructor in the browser to use localStorage is deprecated!\nSwitch to:\nIndexedDB implementation (FASTER, MORE RELIABLE):\n let db = AceBase.WithIndexedDB(name, settings)\nOr, new LocalStorage implementation:\n let db = AceBase.WithLocalStorage(name, settings)\nOr, write your own CustomStorage adapter:\n let myCustomStorage = new CustomStorageSettings({ ... });\n let db = new AceBase(name, { storage: myCustomStorage })`;class BrowserAceBase extends acebase_local_1.AceBase{constructor(name,settings){if(typeof settings!=="object"||typeof settings.storage!=="object"){throw new Error(deprecatedConstructorError)}super(name,settings);this.settings.ipcEvents=settings.multipleTabs===true}static WithIndexedDB(dbname,init={}){return(0,indexed_db_1.createIndexedDBInstance)(dbname,init)}}exports.BrowserAceBase=BrowserAceBase},{"./acebase-local":29,"./storage/custom/indexed-db":46}],29:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AceBase=exports.AceBaseLocalSettings=exports.IndexedDBStorageSettings=exports.LocalStorageSettings=void 0;const acebase_core_1=require("acebase-core");const binary_1=require("./storage/binary");const api_local_1=require("./api-local");const local_storage_1=require("./storage/custom/local-storage");Object.defineProperty(exports,"LocalStorageSettings",{enumerable:true,get:function(){return local_storage_1.LocalStorageSettings}});const settings_1=require("./storage/custom/indexed-db/settings");Object.defineProperty(exports,"IndexedDBStorageSettings",{enumerable:true,get:function(){return settings_1.IndexedDBStorageSettings}});class AceBaseLocalSettings extends acebase_core_1.AceBaseBaseSettings{constructor(options={}){super(options);if(options.storage){this.storage=options.storage;if(options.ipc){this.storage.ipc=options.ipc}if(options.transactions){this.storage.transactions=options.transactions}}}}exports.AceBaseLocalSettings=AceBaseLocalSettings;class AceBase extends acebase_core_1.AceBaseBase{constructor(dbname,init={}){const settings=new AceBaseLocalSettings(init);super(dbname,settings);const apiSettings={db:this,settings:settings};this.api=new api_local_1.LocalApi(dbname,apiSettings,(()=>{this.emit("ready")}));this.recovery={repairNode:async(path,options)=>{if(this.api.storage instanceof binary_1.AceBaseStorage){await this.api.storage.repairNode(path,options)}else if(!this.api.storage.repairNode){throw new Error(`repairNode is not supported with chosen storage engine`)}}}}async close(){await this.api.storage.close()}get settings(){const ipc=this.api.storage.ipc,debug=this.debug;return{get logLevel(){return debug.level},set logLevel(level){debug.setLevel(level)},get ipcEvents(){return ipc.eventsEnabled},set ipcEvents(enabled){ipc.eventsEnabled=enabled}}}static WithLocalStorage(dbname,settings={}){const db=(0,local_storage_1.createLocalStorageInstance)(dbname,settings);return db}static WithIndexedDB(dbname,init={}){throw new Error(`IndexedDB storage can only be used in browser contexts`)}}exports.AceBase=AceBase},{"./api-local":30,"./storage/binary":40,"./storage/custom/indexed-db/settings":47,"./storage/custom/local-storage":49,"acebase-core":12}],30:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.LocalApi=void 0;const acebase_core_1=require("acebase-core");const binary_1=require("./storage/binary");const sqlite_1=require("./storage/sqlite");const mssql_1=require("./storage/mssql");const custom_1=require("./storage/custom");const node_value_types_1=require("./node-value-types");const query_1=require("./query");class LocalApi extends acebase_core_1.Api{constructor(dbname="default",init,readyCallback){super();this.db=init.db;const storageEnv={logLevel:init.settings.logLevel};if(typeof init.settings.storage==="object"){if(sqlite_1.SQLiteStorageSettings&&init.settings.storage instanceof sqlite_1.SQLiteStorageSettings){this.storage=new sqlite_1.SQLiteStorage(dbname,init.settings.storage,storageEnv)}else if(mssql_1.MSSQLStorageSettings&&init.settings.storage instanceof mssql_1.MSSQLStorageSettings){this.storage=new mssql_1.MSSQLStorage(dbname,init.settings.storage,storageEnv)}else if(custom_1.CustomStorageSettings&&init.settings.storage instanceof custom_1.CustomStorageSettings){this.storage=new custom_1.CustomStorage(dbname,init.settings.storage,storageEnv)}else{const storageSettings=init.settings.storage instanceof binary_1.AceBaseStorageSettings?init.settings.storage:new binary_1.AceBaseStorageSettings(init.settings.storage);this.storage=new binary_1.AceBaseStorage(dbname,storageSettings,storageEnv)}}else{this.storage=new binary_1.AceBaseStorage(dbname,new binary_1.AceBaseStorageSettings,storageEnv)}this.storage.on("ready",readyCallback)}async stats(options){return this.storage.stats}subscribe(path,event,callback){this.storage.subscriptions.add(path,event,callback)}unsubscribe(path,event,callback){this.storage.subscriptions.remove(path,event,callback)}async set(path,value,options={suppress_events:false,context:null}){const cursor=await this.storage.setNode(path,value,{suppress_events:options.suppress_events,context:options.context});return Object.assign({},cursor&&{cursor:cursor})}async update(path,updates,options={suppress_events:false,context:null}){const cursor=await this.storage.updateNode(path,updates,{suppress_events:options.suppress_events,context:options.context});return Object.assign({},cursor&&{cursor:cursor})}get transactionLoggingEnabled(){return this.storage.settings.transactions&&this.storage.settings.transactions.log===true}async get(path,options){if(!options){options={}}if(typeof options.include!=="undefined"&&!(options.include instanceof Array)){throw new TypeError(`options.include must be an array of key names`)}if(typeof options.exclude!=="undefined"&&!(options.exclude instanceof Array)){throw new TypeError(`options.exclude must be an array of key names`)}if(["undefined","boolean"].indexOf(typeof options.child_objects)<0){throw new TypeError(`options.child_objects must be a boolean`)}const node=await this.storage.getNode(path,options);return{value:node.value,context:{acebase_cursor:node.cursor},cursor:node.cursor}}async transaction(path,callback,options={suppress_events:false,context:null}){const cursor=await this.storage.transactNode(path,callback,{suppress_events:options.suppress_events,context:options.context});return Object.assign({},cursor&&{cursor:cursor})}async exists(path){const nodeInfo=await this.storage.getNodeInfo(path);return nodeInfo.exists}async query(path,query,options={snapshots:false}){const results=await(0,query_1.query)(this,path,query,options);return results}createIndex(path,key,options){return this.storage.indexes.create(path,key,options)}async getIndexes(){return this.storage.indexes.list()}async deleteIndex(filePath){return this.storage.indexes.delete(filePath)}async reflect(path,type,args){args=args||{};const getChildren=async(path,limit=50,skip=0,from=null)=>{if(typeof limit==="string"){limit=parseInt(limit)}if(typeof skip==="string"){skip=parseInt(skip)}if(["null","undefined"].includes(from)){from=null}const children=[];let n=0,stop=false,more=false;await this.storage.getChildren(path).next((childInfo=>{if(stop){more=true;return false}n++;const include=from!==null?childInfo.key>from:skip===0||n>skip;if(include){children.push(Object.assign({key:typeof childInfo.key==="string"?childInfo.key:childInfo.index,type:childInfo.valueTypeName,value:childInfo.value},typeof childInfo.address==="object"&&"pageNr"in childInfo.address&&{address:{pageNr:childInfo.address.pageNr,recordNr:childInfo.address.recordNr}}))}stop=limit>0&&children.length===limit})).catch((err=>{}));return{more:more,list:children}};switch(type){case"children":{return getChildren(path,args.limit,args.skip,args.from)}case"info":{const info={key:"",exists:false,type:"unknown",value:undefined,address:undefined,children:{count:0,more:false,list:[]}};const nodeInfo=await this.storage.getNodeInfo(path,{include_child_count:args.child_count===true});info.key=typeof nodeInfo.key!=="undefined"?nodeInfo.key:nodeInfo.index;info.exists=nodeInfo.exists;info.type=nodeInfo.exists?nodeInfo.valueTypeName:undefined;info.value=nodeInfo.value;info.address=typeof nodeInfo.address==="object"&&"pageNr"in nodeInfo.address?{pageNr:nodeInfo.address.pageNr,recordNr:nodeInfo.address.recordNr}:undefined;const isObjectOrArray=nodeInfo.exists&&nodeInfo.address&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(nodeInfo.type);if(args.child_count===true){info.children={count:isObjectOrArray?nodeInfo.childCount:0}}else if(typeof args.child_limit==="number"&&args.child_limit>0){if(isObjectOrArray){info.children=await getChildren(path,args.child_limit,args.child_skip,args.child_from)}}return info}}}export(path,stream,options={format:"json",type_safe:true}){return this.storage.exportNode(path,stream,options)}import(path,read,options={format:"json",suppress_events:false,method:"set"}){return this.storage.importNode(path,read,options)}async setSchema(path,schema){return this.storage.setSchema(path,schema)}async getSchema(path){return this.storage.getSchema(path)}async getSchemas(){return this.storage.getSchemas()}async validateSchema(path,value,isUpdate){return this.storage.validateSchema(path,value,{updates:isUpdate})}async getMutations(filter){if(typeof this.storage.getMutations!=="function"){throw new Error("Used storage type does not support getMutations")}if(typeof filter!=="object"){throw new Error("No filter specified")}if(typeof filter.cursor!=="string"&&typeof filter.timestamp!=="number"){throw new Error("No cursor or timestamp given")}return this.storage.getMutations(filter)}async getChanges(filter){if(typeof this.storage.getChanges!=="function"){throw new Error("Used storage type does not support getChanges")}if(typeof filter!=="object"){throw new Error("No filter specified")}if(typeof filter.cursor!=="string"&&typeof filter.timestamp!=="number"){throw new Error("No cursor or timestamp given")}return this.storage.getChanges(filter)}}exports.LocalApi=LocalApi},{"./node-value-types":39,"./query":42,"./storage/binary":40,"./storage/custom":45,"./storage/mssql":40,"./storage/sqlite":40,"acebase-core":12}],31:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AsyncTaskBatch=void 0;class AsyncTaskBatch{constructor(limit=1e3,options){this.limit=limit;this.options=options;this.added=0;this.scheduled=[];this.running=0;this.results=[];this.done=false}async execute(task,index){var _a,_b;try{this.running++;const result=await task();this.results[index]=result;this.running--;if(this.running===0&&this.scheduled.length===0){this.done=true;(_a=this.doneCallback)===null||_a===void 0?void 0:_a.call(this,this.results)}else if(this.scheduled.length>0){const next=this.scheduled.shift();this.execute(next.task,next.index)}}catch(err){this.done=true;(_b=this.errorCallback)===null||_b===void 0?void 0:_b.call(this,err)}}add(task){var _a;if(this.done){throw new Error(`Cannot add to a batch that has already finished. Use wait option and start batch processing manually if you are adding tasks in an async loop`)}const index=this.added++;if(((_a=this.options)===null||_a===void 0?void 0:_a.wait)!==true&&this.running{this.doneCallback=resolve;this.errorCallback=reject}));return this.results}}exports.AsyncTaskBatch=AsyncTaskBatch},{}],32:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SchemaValidationError=exports.StorageSettings=exports.ICustomStorageNodeMetaData=exports.ICustomStorageNode=exports.CustomStorageHelpers=exports.CustomStorageSettings=exports.CustomStorageTransaction=exports.MSSQLStorageSettings=exports.SQLiteStorageSettings=exports.AceBaseStorageSettings=exports.IndexedDBStorageSettings=exports.LocalStorageSettings=exports.AceBaseLocalSettings=exports.AceBase=exports.PartialArray=exports.proxyAccess=exports.ID=exports.ObjectCollection=exports.TypeMappings=exports.PathReference=exports.EventSubscription=exports.EventStream=exports.DataReferencesArray=exports.DataSnapshotsArray=exports.DataReference=exports.DataSnapshot=void 0;const acebase_core_1=require("acebase-core");Object.defineProperty(exports,"DataReference",{enumerable:true,get:function(){return acebase_core_1.DataReference}});Object.defineProperty(exports,"DataSnapshot",{enumerable:true,get:function(){return acebase_core_1.DataSnapshot}});Object.defineProperty(exports,"EventSubscription",{enumerable:true,get:function(){return acebase_core_1.EventSubscription}});Object.defineProperty(exports,"PathReference",{enumerable:true,get:function(){return acebase_core_1.PathReference}});Object.defineProperty(exports,"TypeMappings",{enumerable:true,get:function(){return acebase_core_1.TypeMappings}});Object.defineProperty(exports,"ID",{enumerable:true,get:function(){return acebase_core_1.ID}});Object.defineProperty(exports,"proxyAccess",{enumerable:true,get:function(){return acebase_core_1.proxyAccess}});Object.defineProperty(exports,"DataSnapshotsArray",{enumerable:true,get:function(){return acebase_core_1.DataSnapshotsArray}});Object.defineProperty(exports,"ObjectCollection",{enumerable:true,get:function(){return acebase_core_1.ObjectCollection}});Object.defineProperty(exports,"DataReferencesArray",{enumerable:true,get:function(){return acebase_core_1.DataReferencesArray}});Object.defineProperty(exports,"EventStream",{enumerable:true,get:function(){return acebase_core_1.EventStream}});Object.defineProperty(exports,"PartialArray",{enumerable:true,get:function(){return acebase_core_1.PartialArray}});const acebase_local_1=require("./acebase-local");const acebase_browser_1=require("./acebase-browser");Object.defineProperty(exports,"AceBase",{enumerable:true,get:function(){return acebase_browser_1.BrowserAceBase}});const custom_1=require("./storage/custom");const acebase={AceBase:acebase_browser_1.BrowserAceBase,AceBaseLocalSettings:acebase_local_1.AceBaseLocalSettings,DataReference:acebase_core_1.DataReference,DataSnapshot:acebase_core_1.DataSnapshot,EventSubscription:acebase_core_1.EventSubscription,PathReference:acebase_core_1.PathReference,TypeMappings:acebase_core_1.TypeMappings,CustomStorageSettings:custom_1.CustomStorageSettings,CustomStorageTransaction:custom_1.CustomStorageTransaction,CustomStorageHelpers:custom_1.CustomStorageHelpers,ID:acebase_core_1.ID,proxyAccess:acebase_core_1.proxyAccess,DataSnapshotsArray:acebase_core_1.DataSnapshotsArray};window.acebase=acebase;window.AceBase=acebase_browser_1.BrowserAceBase;exports.default=acebase;var acebase_local_2=require("./acebase-local");Object.defineProperty(exports,"AceBaseLocalSettings",{enumerable:true,get:function(){return acebase_local_2.AceBaseLocalSettings}});Object.defineProperty(exports,"LocalStorageSettings",{enumerable:true,get:function(){return acebase_local_2.LocalStorageSettings}});Object.defineProperty(exports,"IndexedDBStorageSettings",{enumerable:true,get:function(){return acebase_local_2.IndexedDBStorageSettings}});var binary_1=require("./storage/binary");Object.defineProperty(exports,"AceBaseStorageSettings",{enumerable:true,get:function(){return binary_1.AceBaseStorageSettings}});var sqlite_1=require("./storage/sqlite");Object.defineProperty(exports,"SQLiteStorageSettings",{enumerable:true,get:function(){return sqlite_1.SQLiteStorageSettings}});var mssql_1=require("./storage/mssql");Object.defineProperty(exports,"MSSQLStorageSettings",{enumerable:true,get:function(){return mssql_1.MSSQLStorageSettings}});var custom_2=require("./storage/custom");Object.defineProperty(exports,"CustomStorageTransaction",{enumerable:true,get:function(){return custom_2.CustomStorageTransaction}});Object.defineProperty(exports,"CustomStorageSettings",{enumerable:true,get:function(){return custom_2.CustomStorageSettings}});Object.defineProperty(exports,"CustomStorageHelpers",{enumerable:true,get:function(){return custom_2.CustomStorageHelpers}});Object.defineProperty(exports,"ICustomStorageNode",{enumerable:true,get:function(){return custom_2.ICustomStorageNode}});Object.defineProperty(exports,"ICustomStorageNodeMetaData",{enumerable:true,get:function(){return custom_2.ICustomStorageNodeMetaData}});var storage_1=require("./storage");Object.defineProperty(exports,"StorageSettings",{enumerable:true,get:function(){return storage_1.StorageSettings}});Object.defineProperty(exports,"SchemaValidationError",{enumerable:true,get:function(){return storage_1.SchemaValidationError}})},{"./acebase-browser":28,"./acebase-local":29,"./storage":52,"./storage/binary":40,"./storage/custom":45,"./storage/mssql":40,"./storage/sqlite":40,"acebase-core":12}],33:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.IPCPeer=void 0;const acebase_core_1=require("acebase-core");const ipc_1=require("./ipc");class IPCPeer extends ipc_1.AceBaseIPCPeer{constructor(storage){super(storage,acebase_core_1.ID.generate());this.masterPeerId=this.id;this.ipcType="browser.bcc";window.addEventListener("beforeunload",(()=>{this.exit()}));if(typeof window.BroadcastChannel!=="undefined"){this.channel=new BroadcastChannel(`acebase:${storage.name}`)}else{const listeners=[null];const notImplemented=()=>{throw new Error("Not implemented")};this.channel={name:`acebase:${storage.name}`,postMessage:message=>{const messageId=acebase_core_1.ID.generate(),key=`acebase:${storage.name}:${this.id}:${messageId}`,payload=JSON.stringify(acebase_core_1.Transport.serialize(message));localStorage.setItem(key,payload);setTimeout((()=>localStorage.removeItem(key)),10)},set onmessage(handler){listeners[0]=handler},set onmessageerror(handler){notImplemented()},close(){notImplemented()},addEventListener(event,callback){if(event!=="message"){notImplemented()}listeners.push(callback)},removeEventListener(event,callback){const i=listeners.indexOf(callback);i>=1&&listeners.splice(i,1)},dispatchEvent(event){listeners.forEach((callback=>{try{callback&&callback(event)}catch(err){console.error(err)}}));return true}};window.addEventListener("storage",(event=>{const[acebase,dbname,peerId,messageId]=event.key.split(":");if(acebase!=="acebase"||dbname!==storage.name||peerId===this.id||event.newValue===null){return}const message=acebase_core_1.Transport.deserialize(JSON.parse(event.newValue));this.channel.dispatchEvent({data:message})}))}this.channel.addEventListener("message",(async event=>{const message=event.data;if(message.to&&message.to!==this.id){return}storage.debug.verbose(`[BroadcastChannel] received: `,message);if(message.type==="hello"&&message.frompeer.id)).concat(this.id).filter((id=>id!==this.masterPeerId));this.masterPeerId=allPeerIds.sort()[0];storage.debug.log(`[BroadcastChannel] ${this.masterPeerId===this.id?"We are":`tab ${this.masterPeerId} is`} the new master. Requesting ${this._locks.length} locks (${this._locks.filter((r=>!r.granted)).length} pending)`);const requests=this._locks.splice(0);await Promise.all(requests.filter((req=>req.granted)).map((async req=>{let released,movedToParent;req.lock.release=()=>new Promise((resolve=>released=resolve));req.lock.moveToParent=()=>new Promise((resolve=>movedToParent=resolve));const lock=await this.lock({path:req.lock.path,write:req.lock.forWriting,tid:req.lock.tid,comment:req.lock.comment});if(movedToParent){const newLock=await lock.moveToParent();movedToParent(newLock)}if(released){await lock.release();released()}})));await Promise.all(requests.filter((req=>!req.granted)).map((async req=>{await this.lock(req.request)})))}return this.handleMessage(message)}));const helloMsg={type:"hello",from:this.id,data:undefined};this.sendMessage(helloMsg)}sendMessage(message){this.storage.debug.verbose(`[BroadcastChannel] sending: `,message);this.channel.postMessage(message)}}exports.IPCPeer=IPCPeer},{"./ipc":34,"acebase-core":12}],34:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AceBaseIPCPeer=exports.AceBaseIPCPeerExitingError=void 0;const acebase_core_1=require("acebase-core");const node_lock_1=require("../node-lock");class AceBaseIPCPeerExitingError extends Error{constructor(message){super(`Exiting: ${message}`)}}exports.AceBaseIPCPeerExitingError=AceBaseIPCPeerExitingError;class AceBaseIPCPeer extends acebase_core_1.SimpleEventEmitter{constructor(storage,id,dbname=storage.name){super();this.storage=storage;this.id=id;this.dbname=dbname;this.ipcType="ipc";this.ourSubscriptions=[];this.remoteSubscriptions=[];this.peers=[];this._exiting=false;this._locks=[];this._requests=new Map;this._eventsEnabled=true;this._nodeLocker=new node_lock_1.NodeLocker(storage.debug,storage.settings.lockTimeout);storage.on("subscribe",(subscription=>{storage.debug.verbose(`database subscription being added on peer ${this.id}`);const remoteSubscription=this.remoteSubscriptions.find((sub=>sub.callback===subscription.callback));if(remoteSubscription){return}const othersAlreadyNotifying=this.ourSubscriptions.some((sub=>sub.event===subscription.event&&sub.path===subscription.path));this.ourSubscriptions.push(subscription);if(othersAlreadyNotifying){return}const message={type:"subscribe",from:this.id,data:{path:subscription.path,event:subscription.event}};this.sendMessage(message)}));storage.on("unsubscribe",(subscription=>{const remoteSubscription=this.remoteSubscriptions.find((sub=>sub.callback===subscription.callback));if(remoteSubscription){this.remoteSubscriptions.splice(this.remoteSubscriptions.indexOf(remoteSubscription),1);return}this.ourSubscriptions.filter((sub=>sub.path===subscription.path&&(!subscription.event||sub.event===subscription.event)&&(!subscription.callback||sub.callback===subscription.callback))).forEach((sub=>{this.ourSubscriptions.splice(this.ourSubscriptions.indexOf(sub),1);const message={type:"unsubscribe",from:this.id,data:{path:sub.path,event:sub.event}};this.sendMessage(message)}))}))}get isMaster(){return this.masterPeerId===this.id}async exit(code=0){if(this._exiting){return this.once("exit")}this._exiting=true;this.storage.debug.warn(`Received ${this.isMaster?"master":"worker "+this.id} process exit request`);if(this._locks.length>0){this.storage.debug.warn(`Waiting for ${this.isMaster?"master":"worker"} ${this.id} locks to clear`);await this.once("locks-cleared")}this.sayGoodbye(this.id);this.storage.debug.warn(`${this.isMaster?"Master":"Worker "+this.id} will now exit`);this.emitOnce("exit",code)}sayGoodbye(forPeerId){const bye={type:"bye",from:forPeerId,data:undefined};this.sendMessage(bye)}addPeer(id,sendReply=true){if(this._exiting){return}const peer=this.peers.find((w=>w.id===id));if(!peer){this.peers.push({id:id,lastSeen:Date.now()})}if(sendReply){const helloMessage={type:"hello",from:this.id,to:id,data:undefined};this.sendMessage(helloMessage);this.ourSubscriptions.forEach((sub=>{const message={type:"subscribe",from:this.id,to:id,data:{path:sub.path,event:sub.event}};this.sendMessage(message)}))}}removePeer(id,ignoreUnknown=false){if(this._exiting){return}const peer=this.peers.find((peer=>peer.id===id));if(!peer){if(!ignoreUnknown){throw new Error(`We are supposed to know this peer!`)}return}this.peers.splice(this.peers.indexOf(peer),1);const subscriptions=this.remoteSubscriptions.filter((sub=>sub.for===id));subscriptions.forEach((sub=>{this.remoteSubscriptions.splice(this.remoteSubscriptions.indexOf(sub),1);this.storage.subscriptions.remove(sub.path,sub.event,sub.callback)}))}addRemoteSubscription(peerId,details){if(this._exiting){return}if(this.remoteSubscriptions.some((sub=>sub.for===peerId&&sub.event===details.event&&sub.path===details.path))){return}const subscribeCallback=(err,path,val,previous,context)=>{const eventMessage={type:"event",from:this.id,to:peerId,path:details.path,event:details.event,data:{path:path,val:val,previous:previous,context:context}};this.sendMessage(eventMessage)};this.remoteSubscriptions.push({for:peerId,event:details.event,path:details.path,callback:subscribeCallback});this.storage.subscriptions.add(details.path,details.event,subscribeCallback)}cancelRemoteSubscription(peerId,details){const sub=this.remoteSubscriptions.find((sub=>sub.for===peerId&&sub.event===details.event&&sub.path===details.event));if(!sub){return}this.storage.subscriptions.remove(details.path,details.event,sub.callback)}async handleMessage(message){switch(message.type){case"hello":return this.addPeer(message.from,message.to!==this.id);case"bye":return this.removePeer(message.from,true);case"subscribe":return this.addRemoteSubscription(message.from,message.data);case"unsubscribe":return this.cancelRemoteSubscription(message.from,message.data);case"event":{if(!this._eventsEnabled){break}const eventMessage=message;const context=eventMessage.data.context||{};context.acebase_ipc={type:this.ipcType,origin:eventMessage.from};const subscriptions=this.ourSubscriptions.filter((sub=>sub.event===eventMessage.event&&sub.path===eventMessage.path));subscriptions.forEach((sub=>{sub.callback(null,eventMessage.data.path,eventMessage.data.val,eventMessage.data.previous,context)}));break}case"lock-request":{if(!this.isMaster){throw new Error(`Workers are not supposed to receive lock requests!`)}const request=message;const result={type:"lock-result",id:request.id,from:this.id,to:request.from,ok:true,data:undefined};try{const lock=await this.lock(request.data);result.data={id:lock.id,path:lock.path,tid:lock.tid,write:lock.forWriting,expires:lock.expires,comment:lock.comment}}catch(err){result.ok=false;result.reason=err.stack||err.message||err}return this.sendMessage(result)}case"lock-result":{if(this.isMaster){throw new Error(`Masters are not supposed to receive results for lock requests!`)}const result=message;const request=this._requests.get(result.id);if(typeof request!=="object"){throw new Error(`The request must be known to us!`)}if(result.ok){request.resolve(result.data)}else{request.reject(new Error(result.reason))}return}case"unlock-request":{if(!this.isMaster){throw new Error(`Workers are not supposed to receive unlock requests!`)}const request=message;const result={type:"unlock-result",id:request.id,from:this.id,to:request.from,ok:true,data:{id:request.data.id}};try{const lockInfo=this._locks.find((l=>{var _a;return((_a=l.lock)===null||_a===void 0?void 0:_a.id)===request.data.id}));await lockInfo.lock.release()}catch(err){result.ok=false;result.reason=err.stack||err.message||err}return this.sendMessage(result)}case"unlock-result":{if(this.isMaster){throw new Error(`Masters are not supposed to receive results for unlock requests!`)}const result=message;const request=this._requests.get(result.id);if(typeof request!=="object"){throw new Error(`The request must be known to us!`)}if(result.ok){request.resolve(result.data)}else{request.reject(new Error(result.reason))}return}case"move-lock-request":{if(!this.isMaster){throw new Error(`Workers are not supposed to receive move lock requests!`)}const request=message;const result={type:"lock-result",id:request.id,from:this.id,to:request.from,ok:true,data:undefined};try{let movedLock;const lockRequest=this._locks.find((r=>{var _a;return((_a=r.lock)===null||_a===void 0?void 0:_a.id)===request.data.id}));if(request.data.move_to==="parent"){movedLock=await lockRequest.lock.moveToParent()}else{throw new Error(`Unknown lock move_to "${request.data.move_to}"`)}lockRequest.lock=movedLock;result.data={id:movedLock.id,path:movedLock.path,tid:movedLock.tid,write:movedLock.forWriting,expires:movedLock.expires,comment:movedLock.comment}}catch(err){result.ok=false;result.reason=err.stack||err.message||err}return this.sendMessage(result)}case"notification":{return this.emit("notification",message)}case"request":{return this.emit("request",message)}case"result":{const result=message;const request=this._requests.get(result.id);if(typeof request!=="object"){throw new Error(`Result of unknown request received`)}if(result.ok){request.resolve(result.data)}else{request.reject(new Error(result.reason))}}}}async lock(details){if(this._exiting){const tidApproved=this._locks.find((l=>l.tid===details.tid&&l.granted));if(!tidApproved){throw new AceBaseIPCPeerExitingError("new transaction lock denied because the IPC peer is exiting")}}const removeLock=lockDetails=>{this._locks.splice(this._locks.indexOf(lockDetails),1);if(this._locks.length===0){this.emit("locks-cleared")}};if(this.isMaster){const lockInfo={tid:details.tid,granted:false,request:details,lock:null};this._locks.push(lockInfo);const lock=await this._nodeLocker.lock(details.path,details.tid,details.write,details.comment);lockInfo.tid=lock.tid;lockInfo.granted=true;const createIPCLock=lock=>({get id(){return lock.id},get tid(){return lock.tid},get path(){return lock.path},get forWriting(){return lock.forWriting},get expires(){return lock.expires},get comment(){return lock.comment},get state(){return lock.state},release:async()=>{await lock.release();removeLock(lockInfo)},moveToParent:async()=>{const parentLock=await lock.moveToParent();lockInfo.lock=createIPCLock(parentLock);return lockInfo.lock}});lockInfo.lock=createIPCLock(lock);return lockInfo.lock}else{const lockInfo={tid:details.tid,granted:false,request:details,lock:null};this._locks.push(lockInfo);const createIPCLock=result=>{lockInfo.granted=true;lockInfo.tid=result.tid;lockInfo.lock={id:result.id,tid:result.tid,path:result.path,forWriting:result.write,state:node_lock_1.LOCK_STATE.LOCKED,expires:result.expires,comment:result.comment,release:async()=>{const req={type:"unlock-request",id:acebase_core_1.ID.generate(),from:this.id,to:this.masterPeerId,data:{id:lockInfo.lock.id}};await this.request(req);lockInfo.lock.state=node_lock_1.LOCK_STATE.DONE;this.storage.debug.verbose(`Worker ${this.id} released lock ${lockInfo.lock.id} (tid ${lockInfo.lock.tid}, ${lockInfo.lock.comment}, "/${lockInfo.lock.path}", ${lockInfo.lock.forWriting?"write":"read"})`);removeLock(lockInfo)},moveToParent:async()=>{const req={type:"move-lock-request",id:acebase_core_1.ID.generate(),from:this.id,to:this.masterPeerId,data:{id:lockInfo.lock.id,move_to:"parent"}};let result;try{result=await this.request(req)}catch(err){lockInfo.lock.state=node_lock_1.LOCK_STATE.DONE;removeLock(lockInfo);throw err}lockInfo.lock=createIPCLock(result);return lockInfo.lock}};return lockInfo.lock};const req={type:"lock-request",id:acebase_core_1.ID.generate(),from:this.id,to:this.masterPeerId,data:details};let result,err;try{result=await this.request(req)}catch(e){err=e;result=null}if(err){removeLock(lockInfo);throw err}return createIPCLock(result)}}async request(req){let resolve,reject;const promise=new Promise(((rs,rj)=>{resolve=result=>{this._requests.delete(req.id);rs(result)};reject=err=>{this._requests.delete(req.id);rj(err)}}));this._requests.set(req.id,{resolve:resolve,reject:reject,request:req});this.sendMessage(req);return promise}sendRequest(request){const req={type:"request",from:this.id,to:this.masterPeerId,id:acebase_core_1.ID.generate(),data:request};return this.request(req).catch((err=>{this.storage.debug.error(err);throw err}))}replyRequest(requestMessage,result){const reply={type:"result",id:requestMessage.id,ok:true,from:this.id,to:requestMessage.from,data:result};this.sendMessage(reply)}sendNotification(notification){const msg={type:"notification",from:this.id,data:notification};this.sendMessage(msg)}get eventsEnabled(){return this._eventsEnabled}set eventsEnabled(enabled){this.storage.debug.log(`ipc events ${enabled?"enabled":"disabled"}`);this._eventsEnabled=enabled}}exports.AceBaseIPCPeer=AceBaseIPCPeer},{"../node-lock":38,"acebase-core":12}],35:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.RemovedNodeAddress=exports.NodeAddress=void 0;class NodeAddress{constructor(path){this.path=path}toString(){return`"/${this.path}"`}equals(address){return this.path===address.path}}exports.NodeAddress=NodeAddress;class RemovedNodeAddress extends NodeAddress{constructor(path){super(path)}toString(){return`"/${this.path}" (removed)`}equals(address){return address instanceof RemovedNodeAddress&&this.path===address.path}}exports.RemovedNodeAddress=RemovedNodeAddress},{}],36:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.NodeRevisionError=exports.NodeNotFoundError=void 0;class NodeNotFoundError extends Error{}exports.NodeNotFoundError=NodeNotFoundError;class NodeRevisionError extends Error{}exports.NodeRevisionError=NodeRevisionError},{}],37:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.NodeInfo=void 0;const node_value_types_1=require("./node-value-types");const acebase_core_1=require("acebase-core");class NodeInfo{constructor(info){this.path=info.path;this.type=info.type;this.index=info.index;this.key=info.key;this.exists=info.exists;this.address=info.address;this.value=info.value;this.childCount=info.childCount;if(typeof this.path==="string"&&(typeof this.key==="undefined"&&typeof this.index==="undefined")){const pathInfo=acebase_core_1.PathInfo.get(this.path);if(typeof pathInfo.key==="number"){this.index=pathInfo.key}else{this.key=pathInfo.key}}if(typeof this.exists==="undefined"){this.exists=true}}get valueType(){return this.type}get valueTypeName(){return(0,node_value_types_1.getValueTypeName)(this.valueType)}toString(){if(!this.exists){return`"${this.path}" doesn't exist`}if(this.address){return`"${this.path}" is ${this.valueTypeName} stored at ${this.address.toString()}`}else{return`"${this.path}" is ${this.valueTypeName} with value ${this.value}`}}}exports.NodeInfo=NodeInfo},{"./node-value-types":39,"acebase-core":12}],38:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.NodeLock=exports.NodeLocker=exports.LOCK_STATE=void 0;const acebase_core_1=require("acebase-core");const DEBUG_MODE=false;const DEFAULT_LOCK_TIMEOUT=120;exports.LOCK_STATE={PENDING:"pending",LOCKED:"locked",EXPIRED:"expired",DONE:"done"};class NodeLocker{constructor(debug,lockTimeout=DEFAULT_LOCK_TIMEOUT){this._locks=[];this._lastTid=0;this.debug=debug;this.timeout=lockTimeout*1e3}setTimeout(timeout){this.timeout=timeout*1e3}createTid(){return DEBUG_MODE?++this._lastTid:acebase_core_1.ID.generate()}_allowLock(path,tid,forWriting){const conflict=this._locks.find((otherLock=>otherLock.tid!==tid&&otherLock.state===exports.LOCK_STATE.LOCKED&&(forWriting||otherLock.forWriting)));return{allow:!conflict,conflict:conflict}}quit(){return new Promise((resolve=>{if(this._locks.length===0){return resolve()}this._quit=resolve}))}_rejectLock(lock,err){this._locks.splice(this._locks.indexOf(lock),1);clearTimeout(lock.timeout);try{lock.reject(err)}catch(err){console.error(`Unhandled promise rejection:`,err)}}_processLockQueue(){if(this._quit){const quitError=new Error("Quitting");this._locks.filter((lock=>lock.state===exports.LOCK_STATE.PENDING)).forEach((lock=>this._rejectLock(lock,quitError)));if(this._locks.length===0){this._quit()}}const pending=this._locks.filter((lock=>lock.state===exports.LOCK_STATE.PENDING)).sort(((a,b)=>{if(a.priority&&!b.priority){return-1}else if(!a.priority&&b.priority){return 1}return a.requested-b.requested}));pending.forEach((lock=>{const check=this._allowLock(lock.path,lock.tid,lock.forWriting);lock.waitingFor=check.conflict||null;if(check.allow){this.lock(lock).then(lock.resolve).catch((err=>this._rejectLock(lock,err)))}}))}async lock(path,tid,forWriting=true,comment="",options={withPriority:false,noTimeout:false}){let lock,proceed;if(path instanceof NodeLock){lock=path;proceed=true}else if(this._locks.findIndex((l=>l.tid===tid&&l.state===exports.LOCK_STATE.EXPIRED))>=0){throw new Error(`lock on tid ${tid} has expired, not allowed to continue`)}else if(this._quit&&!options.withPriority){throw new Error(`Quitting`)}else{DEBUG_MODE&&console.error(`${forWriting?"write":"read"} lock requested on "${path}" by tid ${tid} (${comment})`);lock=new NodeLock(this,path,tid,forWriting,options.withPriority===true);lock.comment=comment;this._locks.push(lock);const check=this._allowLock(path,tid,forWriting);lock.waitingFor=check.conflict||null;proceed=check.allow}if(proceed){DEBUG_MODE&&console.error(`${lock.forWriting?"write":"read"} lock ALLOWED on "${lock.path}" by tid ${lock.tid} (${lock.comment})`);lock.state=exports.LOCK_STATE.LOCKED;if(typeof lock.granted==="number"){}else{lock.granted=Date.now();if(options.noTimeout!==true){lock.expires=Date.now()+this.timeout;let timeoutCount=0;const timeoutHandler=()=>{if(lock.state!==exports.LOCK_STATE.LOCKED){return}timeoutCount++;if(timeoutCount<=3){this.debug.warn(`${lock.forWriting?"write":"read"} lock on path "/${lock.path}" by tid ${lock.tid} (${lock.comment}) is taking a long time to complete [${timeoutCount}]`);lock.timeout=setTimeout(timeoutHandler,this.timeout/4);return}this.debug.error(`lock :: ${lock.forWriting?"write":"read"} lock on path "/${lock.path}" by tid ${lock.tid} (${lock.comment}) took too long`);lock.state=exports.LOCK_STATE.EXPIRED;this._processLockQueue()};lock.timeout=setTimeout(timeoutHandler,this.timeout/4)}}return lock}else{console.assert(lock.state===exports.LOCK_STATE.PENDING);return new Promise(((resolve,reject)=>{lock.resolve=resolve;lock.reject=reject}))}}unlock(lockOrId,comment,processQueue=true){let lock,i;if(lockOrId instanceof NodeLock){lock=lockOrId;i=this._locks.indexOf(lock)}else{const id=lockOrId;i=this._locks.findIndex((l=>l.id===id));lock=this._locks[i]}if(i<0){const msg=`lock on "/${lock.path}" for tid ${lock.tid} wasn't found; ${comment}`;throw new Error(msg)}lock.state=exports.LOCK_STATE.DONE;clearTimeout(lock.timeout);this._locks.splice(i,1);DEBUG_MODE&&console.error(`${lock.forWriting?"write":"read"} lock RELEASED on "${lock.path}" by tid ${lock.tid}`);processQueue&&this._processLockQueue();return lock}list(){return this._locks||[]}isAllowed(path,tid,forWriting){return this._allowLock(path,tid,forWriting).allow}}exports.NodeLocker=NodeLocker;let lastid=0;class NodeLock{constructor(locker,path,tid,forWriting,priority=false){this.locker=locker;this.path=path;this.tid=tid;this.forWriting=forWriting;this.priority=priority;this.state=exports.LOCK_STATE.PENDING;this.requested=Date.now();this.comment="";this.waitingFor=null;this.id=++lastid;this.history=[]}static get LOCK_STATE(){return exports.LOCK_STATE}async release(comment){this.history.push({action:"release",path:this.path,forWriting:this.forWriting,comment:comment});return this.locker.unlock(this,comment||this.comment)}async moveToParent(){const parentPath=acebase_core_1.PathInfo.get(this.path).parentPath;const allowed=this.locker.isAllowed(parentPath,this.tid,this.forWriting);if(allowed){DEBUG_MODE&&console.error(`moveToParent ALLOWED for ${this.forWriting?"write":"read"} lock on "${this.path}" by tid ${this.tid} (${this.comment})`);this.history.push({path:this.path,forWriting:this.forWriting,action:"moving to parent"});this.waitingFor=null;this.path=parentPath;return this}else{DEBUG_MODE&&console.error(`moveToParent QUEUED for ${this.forWriting?"write":"read"} lock on "${this.path}" by tid ${this.tid} (${this.comment})`);this.locker.unlock(this,`moveLockToParent: ${this.comment}`,false);const newLock=await this.locker.lock(parentPath,this.tid,this.forWriting,this.comment,{withPriority:true});DEBUG_MODE&&console.error(`QUEUED moveToParent ALLOWED for ${this.forWriting?"write":"read"} lock on "${this.path}" by tid ${this.tid} (${this.comment})`);newLock.history=this.history;newLock.history.push({path:this.path,forWriting:this.forWriting,action:"moving to parent through queue (priority)"});return newLock}}}exports.NodeLock=NodeLock},{"acebase-core":12}],39:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.getValueType=exports.getNodeValueType=exports.getValueTypeName=exports.VALUE_TYPES=void 0;const acebase_core_1=require("acebase-core");exports.VALUE_TYPES=Object.freeze({OBJECT:1,ARRAY:2,NUMBER:3,BOOLEAN:4,STRING:5,BIGINT:7,DATETIME:6,BINARY:8,REFERENCE:9});function getValueTypeName(valueType){switch(valueType){case exports.VALUE_TYPES.ARRAY:return"array";case exports.VALUE_TYPES.BINARY:return"binary";case exports.VALUE_TYPES.BOOLEAN:return"boolean";case exports.VALUE_TYPES.DATETIME:return"date";case exports.VALUE_TYPES.NUMBER:return"number";case exports.VALUE_TYPES.OBJECT:return"object";case exports.VALUE_TYPES.REFERENCE:return"reference";case exports.VALUE_TYPES.STRING:return"string";case exports.VALUE_TYPES.BIGINT:return"bigint";default:"unknown"}}exports.getValueTypeName=getValueTypeName;function getNodeValueType(value){if(value instanceof Array){return exports.VALUE_TYPES.ARRAY}else if(value instanceof acebase_core_1.PathReference){return exports.VALUE_TYPES.REFERENCE}else if(value instanceof ArrayBuffer){return exports.VALUE_TYPES.BINARY}else if(typeof value==="string"){return exports.VALUE_TYPES.STRING}else if(typeof value==="object"){return exports.VALUE_TYPES.OBJECT}else if(typeof value==="bigint"){return exports.VALUE_TYPES.BIGINT}throw new Error(`Invalid value for standalone node: ${value}`)}exports.getNodeValueType=getNodeValueType;function getValueType(value){if(value instanceof Array){return exports.VALUE_TYPES.ARRAY}else if(value instanceof acebase_core_1.PathReference){return exports.VALUE_TYPES.REFERENCE}else if(value instanceof ArrayBuffer){return exports.VALUE_TYPES.BINARY}else if(value instanceof Date){return exports.VALUE_TYPES.DATETIME}else if(typeof value==="string"){return exports.VALUE_TYPES.STRING}else if(typeof value==="object"){return exports.VALUE_TYPES.OBJECT}else if(typeof value==="number"){return exports.VALUE_TYPES.NUMBER}else if(typeof value==="boolean"){return exports.VALUE_TYPES.BOOLEAN}else if(typeof value==="bigint"){return exports.VALUE_TYPES.BIGINT}throw new Error(`Unknown value type: ${value}`)}exports.getValueType=getValueType},{"acebase-core":12}],40:[function(require,module,exports){},{}],41:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.pfs=void 0;class pfs{static get hasFileSystem(){return false}static get fs(){return null}}exports.pfs=pfs},{}],42:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.query=void 0;const acebase_core_1=require("acebase-core");const node_value_types_1=require("./node-value-types");const node_errors_1=require("./node-errors");const data_index_1=require("./data-index");const async_task_batch_1=require("./async-task-batch");const noop=()=>{};function query(api,path,query,options={snapshots:false,include:undefined,exclude:undefined,child_objects:undefined,eventHandler:noop}){var _a;if(typeof options!=="object"){options={}}if(typeof options.snapshots==="undefined"){options.snapshots=false}const context={};if((_a=api.storage.settings.transactions)===null||_a===void 0?void 0:_a.log){context.acebase_cursor=acebase_core_1.ID.generate()}const queryFilters=query.filters.map((f=>Object.assign({},f)));const querySort=query.order.map((s=>Object.assign({},s)));const sortMatches=matches=>{matches.sort(((a,b)=>{const compare=i=>{const o=querySort[i];const trailKeys=acebase_core_1.PathInfo.getPathKeys(typeof o.key==="number"?`[${o.key}]`:o.key);const left=trailKeys.reduce(((val,key)=>val!==null&&typeof val==="object"&&key in val?val[key]:null),a.val);const right=trailKeys.reduce(((val,key)=>val!==null&&typeof val==="object"&&key in val?val[key]:null),b.val);if(left===null){return right===null?0:o.ascending?-1:1}if(right===null){return o.ascending?1:-1}if(left==right){if(i{if(preResults.length===0){return[]}const maxBatchSize=50;const batch=new async_task_batch_1.AsyncTaskBatch(maxBatchSize);const results=[];preResults.forEach((({path:path},index)=>batch.add((async()=>{const node=await api.storage.getNode(path,options);const val=node.value;if(val===null){api.storage.debug.warn(`Indexed result "/${path}" does not have a record!`);return}const result={path:path,val:val};if(stepsExecuted.sorted){results[index]=result}else{results.push(result);if(!stepsExecuted.skipped&&results.length>query.skip+Math.abs(query.take)){sortMatches(results);results.pop()}}}))));await batch.finish();return results};const pathInfo=acebase_core_1.PathInfo.get(path);const isWildcardPath=pathInfo.keys.some((key=>key==="*"||key.toString().startsWith("$")));const availableIndexes=api.storage.indexes.get(path);const usingIndexes=[];if(isWildcardPath){if(availableIndexes.length===0){const err=new Error(`Query on wildcard path "/${path}" requires an index`);return Promise.reject(err)}if(queryFilters.length===0){const index=availableIndexes.filter((index=>index.type==="normal"))[0];queryFilters.push({key:index.key,op:"!=",compare:null})}}queryFilters.forEach((filter=>{if(filter.index){return}const indexesOnKey=availableIndexes.filter((index=>index.key===filter.key)).filter((index=>index.validOperators.includes(filter.op)));if(indexesOnKey.length>=1){const otherFilterKeys=queryFilters.filter((f=>f!==filter)).map((f=>f.key));const sortKeys=querySort.map((o=>o.key)).filter((key=>key!==filter.key));const beneficialIndexes=indexesOnKey.map((index=>{const availableKeys=index.includeKeys.concat(index.key);const forOtherFilters=availableKeys.filter((key=>otherFilterKeys.includes(key)));const forSorting=availableKeys.filter((key=>sortKeys.includes(key)));const forBoth=forOtherFilters.concat(forSorting.filter((index=>!forOtherFilters.includes(index))));const points={filters:forOtherFilters.length,sorting:forSorting.length*(query.take!==0?forSorting.length:1),both:forBoth.length*forBoth.length,get total(){return this.filters+this.sorting+this.both}};return{index:index,points:points.total,filterKeys:forOtherFilters,sortKeys:forSorting}}));beneficialIndexes.sort(((a,b)=>a.points>b.points?-1:1));const bestBenificialIndex=beneficialIndexes[0];filter.index=bestBenificialIndex.index;bestBenificialIndex.filterKeys.forEach((key=>{queryFilters.filter((f=>f!==filter&&f.key===key)).forEach((f=>{if(!data_index_1.DataIndex.validOperators.includes(f.op)){return}f.indexUsage="filter";f.index=bestBenificialIndex.index}))}));bestBenificialIndex.sortKeys.forEach((key=>{querySort.filter((s=>s.key===key)).forEach((s=>{s.index=bestBenificialIndex.index}))}))}if(filter.index){usingIndexes.push({index:filter.index,description:filter.index.description})}}));if(querySort.length>0&&query.take!==0&&queryFilters.length===0){querySort.forEach((sort=>{if(sort.index){return}sort.index=availableIndexes.filter((index=>index.key===sort.key)).find((index=>index.type==="normal"))}))}const indexDescriptions=usingIndexes.map((index=>index.description)).join(", ");usingIndexes.length>0&&api.storage.debug.log(`Using indexes for query: ${indexDescriptions}`);const tableScanFilters=queryFilters.filter((filter=>!filter.index));const specialOpsRegex=/^[a-z]+:/i;if(tableScanFilters.some((filter=>specialOpsRegex.test(filter.op)))){const f=tableScanFilters.find((filter=>specialOpsRegex.test(filter.op)));const err=new Error(`query contains operator "${f.op}" which requires a special index that was not found on path "${path}", key "${f.key}"`);return Promise.reject(err)}const allowedTableScanOperators=["<","<=","==","!=",">=",">","like","!like","in","!in","matches","!matches","between","!between","has","!has","contains","!contains","exists","!exists"];for(let i=0;i0){const keys=tableScanFilters.reduce(((keys,f)=>{if(keys.indexOf(f.key)<0){keys.push(f.key)}return keys}),[]).map((key=>`"${key}"`));const err=new Error(`This wildcard path query on "/${path}" requires index(es) on key(s): ${keys.join(", ")}. Create the index(es) and retry`);return Promise.reject(err)}const indexScanPromises=[];queryFilters.forEach((filter=>{if(filter.index&&filter.indexUsage!=="filter"){let promise=filter.index.query(filter.op,filter.compare).then((results=>{options.eventHandler&&options.eventHandler({name:"stats",type:"index_query",source:filter.index.description,stats:results.stats});if(results.hints.length>0){options.eventHandler&&options.eventHandler({name:"hints",type:"index_query",source:filter.index.description,hints:results.hints})}return results}));const resultFilters=queryFilters.filter((f=>f.index===filter.index&&f.indexUsage==="filter"));if(resultFilters.length>0){promise=promise.then((results=>{resultFilters.forEach((filter=>{const{key:key,op:op,index:index}=filter;let{compare:compare}=filter;if(typeof compare==="string"&&!index.caseSensitive){compare=compare.toLocaleLowerCase(index.textLocale)}results=results.filterMetadata(key,op,compare)}));return results}))}indexScanPromises.push(promise)}}));const stepsExecuted={filtered:queryFilters.length===0,skipped:query.skip===0,taken:query.take===0,sorted:querySort.length===0,preDataLoaded:false,dataLoaded:false};if(queryFilters.length===0&&query.take===0){api.storage.debug.warn(`Filterless queries must use .take to limit the results. Defaulting to 100 for query on path "${path}"`);query.take=100}if(querySort.length>0&&querySort[0].index){const sortIndex=querySort[0].index;const ascending=query.take<0?!querySort[0].ascending:querySort[0].ascending;if(queryFilters.length===0&&querySort.slice(1).every((s=>sortIndex.allMetadataKeys.includes(s.key)))){api.storage.debug.log(`Using index for sorting: ${sortIndex.description}`);const metadataSort=querySort.slice(1).map((s=>{s.index=sortIndex;return{key:s.key,ascending:s.ascending}}));const promise=sortIndex.take(query.skip,Math.abs(query.take),{ascending:ascending,metadataSort:metadataSort}).then((results=>{options.eventHandler&&options.eventHandler({name:"stats",type:"sort_index_take",source:sortIndex.description,stats:results.stats});if(results.hints.length>0){options.eventHandler&&options.eventHandler({name:"hints",type:"sort_index_take",source:sortIndex.description,hints:results.hints})}return results}));indexScanPromises.push(promise);stepsExecuted.skipped=true;stepsExecuted.taken=true;stepsExecuted.sorted=true}}return Promise.all(indexScanPromises).then((async indexResultSets=>{let indexedResults=[];if(indexResultSets.length===1){const resultSet=indexResultSets[0];indexedResults=resultSet.map((match=>{const result={key:match.key,path:match.path,val:{[resultSet.filterKey]:match.value}};match.metadata&&Object.assign(result.val,match.metadata);return result}));stepsExecuted.filtered=true}else if(indexResultSets.length>1){indexResultSets.sort(((a,b)=>a.length{const result={key:match.key,path:match.path,val:{[shortestSet.filterKey]:match.value}};const matchedInAllSets=otherSets.every((set=>set.findIndex((m=>m.path===match.path))>=0));if(matchedInAllSets){match.metadata&&Object.assign(result.val,match.metadata);otherSets.forEach((set=>{const otherResult=set.find((r=>r.path===result.path));result.val[set.filterKey]=otherResult.value;otherResult.metadata&&Object.assign(result.val,otherResult.metadata)}));results.push(result)}return results}),[]);stepsExecuted.filtered=true}if(isWildcardPath||indexScanPromises.length>0&&tableScanFilters.length===0){if(querySort.length===0||querySort.every((o=>o.index))){stepsExecuted.preDataLoaded=true;if(!stepsExecuted.sorted&&querySort.length>0){sortMatches(indexedResults)}stepsExecuted.sorted=true;if(!stepsExecuted.skipped&&query.skip>0){indexedResults=query.take<0?indexedResults.slice(0,-query.skip):indexedResults.slice(query.skip)}if(!stepsExecuted.taken&&query.take!==0){indexedResults=query.take<0?indexedResults.slice(query.take):indexedResults.slice(0,query.take)}stepsExecuted.skipped=true;stepsExecuted.taken=true;if(!options.snapshots){return indexedResults}const childOptions={include:options.include,exclude:options.exclude,child_objects:options.child_objects};return loadResultsData(indexedResults,childOptions).then((results=>{stepsExecuted.dataLoaded=true;return results}))}if(options.snapshots||!stepsExecuted.sorted){const loadPartialResults=querySort.length>0;const childOptions=loadPartialResults?{include:querySort.map((order=>order.key))}:{include:options.include,exclude:options.exclude,child_objects:options.child_objects};return loadResultsData(indexedResults,childOptions).then((results=>{if(querySort.length>0){sortMatches(results)}stepsExecuted.sorted=true;if(query.skip>0){results=query.take<0?results.slice(0,-query.skip):results.slice(query.skip)}if(query.take!==0){results=query.take<0?results.slice(query.take):results.slice(0,query.take)}stepsExecuted.skipped=true;stepsExecuted.taken=true;if(options.snapshots&&loadPartialResults){return loadResultsData(results,{include:options.include,exclude:options.exclude,child_objects:options.child_objects})}return results}))}else{return indexedResults}}let indexKeyFilter;if(indexedResults.length>0){indexKeyFilter=indexedResults.map((result=>result.key))}let matches=[];let preliminaryStop=false;const loadPartialData=querySort.length>0;const childOptions=loadPartialData?{include:querySort.map((order=>order.key))}:{include:options.include,exclude:options.exclude,child_objects:options.child_objects};const batch={promises:[],add(promise){this.promises.push(promise);if(this.promises.length>=1e3){return Promise.all(this.promises.splice(0)).then((_=>undefined))}}};try{await api.storage.getChildren(path,{keyFilter:indexKeyFilter,async:true}).next((child=>{if(child.type!==node_value_types_1.VALUE_TYPES.OBJECT){return}if(!child.address){return}if(preliminaryStop){return false}const matchNode=async()=>{const isMatch=await api.storage.matchNode(child.address.path,tableScanFilters);if(!isMatch){return}const childPath=child.address.path;let result;if(options.snapshots||querySort.length>0){const node=await api.storage.getNode(childPath,childOptions);result={path:childPath,val:node.value}}else{result={path:childPath}}matches.push(result);if(query.take!==0&&matches.length>Math.abs(query.take)+query.skip){if(querySort.length>0){sortMatches(matches)}else if(query.take>0){preliminaryStop=true}matches.pop()}};const p=batch.add(matchNode());if(p instanceof Promise){return p}}))}catch(reason){if(!(reason instanceof node_errors_1.NodeNotFoundError)){api.storage.debug.warn(`Error getting child stream: ${reason}`)}return[]}await Promise.all(batch.promises);stepsExecuted.preDataLoaded=loadPartialData;stepsExecuted.dataLoaded=!loadPartialData;if(querySort.length>0){sortMatches(matches)}stepsExecuted.sorted=true;if(query.skip>0){matches=query.take<0?matches.slice(0,-query.skip):matches.slice(query.skip)}stepsExecuted.skipped=true;if(query.take!==0){matches=query.take<0?matches.slice(query.take):matches.slice(0,query.take)}stepsExecuted.taken=true;if(!stepsExecuted.dataLoaded){matches=await loadResultsData(matches,{include:options.include,exclude:options.exclude,child_objects:options.child_objects});stepsExecuted.dataLoaded=true}return matches})).then((matches=>{if(!stepsExecuted.sorted&&querySort.length>0){sortMatches(matches)}if(!options.snapshots){matches=matches.map((match=>match.path))}if(!stepsExecuted.skipped&&query.skip>0){matches=query.take<0?matches.slice(0,-query.skip):matches.slice(query.skip)}if(!stepsExecuted.taken&&query.take!==0){matches=query.take<0?matches.slice(query.take):matches.slice(0,query.take)}if(options.monitor===true){options.monitor={add:true,change:true,remove:true}}let stop=async()=>{};if(typeof options.monitor==="object"&&(options.monitor.add||options.monitor.change||options.monitor.remove)){const matchedPaths=options.snapshots?matches.map((match=>match.path)):matches.slice();const ref=api.db.ref(path);const removeMatch=path=>{const index=matchedPaths.indexOf(path);if(index<0){return}matchedPaths.splice(index,1)};const addMatch=path=>{if(matchedPaths.includes(path)){return}matchedPaths.push(path)};const stopMonitoring=()=>{api.unsubscribe(ref.path,"child_changed",childChangedCallback);api.unsubscribe(ref.path,"child_added",childAddedCallback);api.unsubscribe(ref.path,"notify_child_removed",childRemovedCallback)};stop=async()=>{stopMonitoring()};const childChangedCallback=async(err,path,newValue,oldValue)=>{const wasMatch=matchedPaths.includes(path);let keepMonitoring=true;const checkKeys=[];queryFilters.forEach((f=>!checkKeys.includes(f.key)&&checkKeys.push(f.key)));const seenKeys=[];typeof oldValue==="object"&&Object.keys(oldValue).forEach((key=>!seenKeys.includes(key)&&seenKeys.push(key)));typeof newValue==="object"&&Object.keys(newValue).forEach((key=>!seenKeys.includes(key)&&seenKeys.push(key)));const missingKeys=[];let isMatch=seenKeys.every((key=>{if(!checkKeys.includes(key)){return true}const filters=queryFilters.filter((filter=>filter.key===key));return filters.every((filter=>{var _a;if(((_a=filter.index)===null||_a===void 0?void 0:_a.textLocaleKey)&&!seenKeys.includes(filter.index.textLocaleKey)){missingKeys.push(filter.index.textLocaleKey);return true}else if(allowedTableScanOperators.includes(filter.op)){return api.storage.test(newValue[key],filter.op,filter.compare)}else{return filter.index.test(newValue,filter.op,filter.compare)}}))}));if(isMatch){missingKeys.push(...checkKeys.filter((key=>!seenKeys.includes(key))));if(!wasMatch&&missingKeys.length>0){const filterQueue=queryFilters.filter((f=>missingKeys.includes(f.key)));const simpleFilters=filterQueue.filter((f=>allowedTableScanOperators.includes(f.op)));const indexFilters=filterQueue.filter((f=>!allowedTableScanOperators.includes(f.op)));if(simpleFilters.length>0){isMatch=await api.storage.matchNode(path,simpleFilters)}if(isMatch&&indexFilters.length>0){const keysToLoad=indexFilters.reduce(((keys,filter)=>{if(!keys.includes(filter.key)){keys.push(filter.key)}if(filter.index instanceof data_index_1.FullTextIndex&&filter.index.config.localeKey&&!keys.includes(filter.index.config.localeKey)){keys.push(filter.index.config.localeKey)}return keys}),[]);const node=await api.storage.getNode(path,{include:keysToLoad});if(node.value===null){return false}isMatch=indexFilters.every((filter=>filter.index.test(node.value,filter.op,filter.compare)))}}}if(isMatch){if(!wasMatch){addMatch(path)}if(options.snapshots){const loadOptions={include:options.include,exclude:options.exclude,child_objects:options.child_objects};const node=await api.storage.getNode(path,loadOptions);newValue=node.value}if(wasMatch&&options.monitor.change){keepMonitoring=options.eventHandler({name:"change",path:path,value:newValue})!==false}else if(!wasMatch&&options.monitor.add){keepMonitoring=options.eventHandler({name:"add",path:path,value:newValue})!==false}}else if(wasMatch){removeMatch(path);if(options.monitor.remove){keepMonitoring=options.eventHandler({name:"remove",path:path,value:oldValue})!==false}}if(keepMonitoring===false){stopMonitoring()}};const childAddedCallback=(err,path,newValue)=>{const isMatch=queryFilters.every((filter=>{if(allowedTableScanOperators.includes(filter.op)){return api.storage.test(newValue[filter.key],filter.op,filter.compare)}else{return filter.index.test(newValue,filter.op,filter.compare)}}));let keepMonitoring=true;if(isMatch){addMatch(path);if(options.monitor.add){keepMonitoring=options.eventHandler({name:"add",path:path,value:options.snapshots?newValue:null})!==false}}if(keepMonitoring===false){stopMonitoring()}};const childRemovedCallback=(err,path,newValue,oldValue)=>{let keepMonitoring=true;removeMatch(path);if(options.monitor.remove){keepMonitoring=options.eventHandler({name:"remove",path:path,value:options.snapshots?oldValue:null})!==false}if(keepMonitoring===false){stopMonitoring()}};if(options.monitor.add||options.monitor.change||options.monitor.remove){api.subscribe(ref.path,"child_changed",childChangedCallback)}if(options.monitor.remove){api.subscribe(ref.path,"notify_child_removed",childRemovedCallback)}if(options.monitor.add){api.subscribe(ref.path,"child_added",childAddedCallback)}}return{results:matches,context:context,stop:stop}}))}exports.query=query},{"./async-task-batch":31,"./data-index":40,"./node-errors":36,"./node-value-types":39,"acebase-core":12}],43:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createIndex=void 0;const acebase_core_1=require("acebase-core");const data_index_1=require("../data-index");const promise_fs_1=require("../promise-fs");async function createIndex(context,path,key,options){if(!context.storage.indexes.supported){throw new Error("Indexes are not supported in current environment because it requires Node.js fs")}const{ipc:ipc,debug:debug,indexes:indexes,storage:storage}=context;const rebuild=options&&options.rebuild===true;const indexType=options&&options.type||"normal";let includeKeys=options&&options.include||[];if(typeof includeKeys==="string"){includeKeys=[includeKeys]}const existingIndex=indexes.find((index=>index.path===path&&index.key===key&&index.type===indexType&&index.includeKeys.length===includeKeys.length&&index.includeKeys.every(((key,index)=>includeKeys[index]===key))));if(existingIndex&&options.config){existingIndex.config=options.config}if(existingIndex&&rebuild!==true){debug.log(`Index on "/${path}/*/${key}" already exists`.colorize(acebase_core_1.ColorStyle.inverse));return existingIndex}if(!ipc.isMaster){const result=await ipc.sendRequest({type:"index.create",path:path,key:key,options:options});if(result.ok){return this.add(result.fileName)}throw new Error(result.reason)}await promise_fs_1.pfs.mkdir(`${storage.settings.path}/${storage.name}.acebase`).catch((err=>{if(err.code!=="EEXIST"){throw err}}));const index=existingIndex||(()=>{const{include:include,caseSensitive:caseSensitive,textLocale:textLocale,textLocaleKey:textLocaleKey}=options;const indexOptions={include:include,caseSensitive:caseSensitive,textLocale:textLocale,textLocaleKey:textLocaleKey};switch(indexType){case"array":return new data_index_1.ArrayIndex(storage,path,key,Object.assign({},indexOptions));case"fulltext":return new data_index_1.FullTextIndex(storage,path,key,Object.assign(Object.assign({},indexOptions),{config:options.config}));case"geo":return new data_index_1.GeoIndex(storage,path,key,Object.assign({},indexOptions));default:return new data_index_1.DataIndex(storage,path,key,Object.assign({},indexOptions))}})();if(!existingIndex){indexes.push(index)}try{await index.build()}catch(err){context.debug.error(`Index build on "/${path}/*/${key}" failed: ${err.message} (code: ${err.code})`.colorize(acebase_core_1.ColorStyle.red));if(!existingIndex){indexes.splice(indexes.indexOf(index),1)}throw err}ipc.sendNotification({type:"index.created",fileName:index.fileName,path:path,key:key,options:options});return index}exports.createIndex=createIndex},{"../data-index":40,"../promise-fs":41,"acebase-core":12}],44:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.CustomStorageHelpers=void 0;const acebase_core_1=require("acebase-core");class CustomStorageHelpers{static ChildPathsSql(path,columnName="path"){const where=path===""?`${columnName} <> '' AND ${columnName} NOT LIKE '%/%'`:`(${columnName} LIKE '${path}/%' OR ${columnName} LIKE '${path}[%') AND ${columnName} NOT LIKE '${path}/%/%' AND ${columnName} NOT LIKE '${path}[%]/%' AND ${columnName} NOT LIKE '${path}[%][%'`;return where}static ChildPathsRegex(path){return new RegExp(`^${path}(?:/[^/[]+|\\[[0-9]+\\])$`)}static DescendantPathsSql(path,columnName="path"){const where=path===""?`${columnName} <> ''`:`${columnName} LIKE '${path}/%' OR ${columnName} LIKE '${path}[%'`;return where}static DescendantPathsRegex(path){return new RegExp(`^${path}(?:/[^/[]+|\\[[0-9]+\\])`)}static get PathInfo(){return acebase_core_1.PathInfo}}exports.CustomStorageHelpers=CustomStorageHelpers},{"acebase-core":12}],45:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.CustomStorage=exports.CustomStorageNodeInfo=exports.CustomStorageNodeAddress=exports.CustomStorageSettings=exports.CustomStorageTransaction=exports.ICustomStorageNode=exports.ICustomStorageNodeMetaData=exports.CustomStorageHelpers=void 0;const acebase_core_1=require("acebase-core");const{compareValues:compareValues}=acebase_core_1.Utils;const node_info_1=require("../../node-info");const node_lock_1=require("../../node-lock");const node_value_types_1=require("../../node-value-types");const node_errors_1=require("../../node-errors");const index_1=require("../index");const helpers_1=require("./helpers");const node_address_1=require("../../node-address");var helpers_2=require("./helpers");Object.defineProperty(exports,"CustomStorageHelpers",{enumerable:true,get:function(){return helpers_2.CustomStorageHelpers}});class ICustomStorageNodeMetaData{constructor(){this.revision="";this.revision_nr=0;this.created=0;this.modified=0;this.type=0}}exports.ICustomStorageNodeMetaData=ICustomStorageNodeMetaData;class ICustomStorageNode extends ICustomStorageNodeMetaData{constructor(){super();this.value=null}}exports.ICustomStorageNode=ICustomStorageNode;class CustomStorageTransaction{constructor(target){this.production=false;this.target={get originalPath(){return target.path},path:target.path,get write(){return target.write}};this.id=acebase_core_1.ID.generate()}async getChildCount(path){let childCount=0;await this.childrenOf(path,{metadata:false,value:false},(()=>{childCount++;return false}));return childCount}async getMultiple(paths){const map=new Map;await Promise.all(paths.map((path=>this.get(path).then((val=>map.set(path,val))))));return map}async setMultiple(nodes){await Promise.all(nodes.map((({path:path,node:node})=>this.set(path,node))))}async removeMultiple(paths){await Promise.all(paths.map((path=>this.remove(path))))}async commit(){throw new Error(`CustomStorageTransaction.rollback must be overridden by subclass`)}async moveToParentPath(targetPath){const currentPath=this._lock&&this._lock.path||this.target.path;if(currentPath===targetPath){return targetPath}const pathInfo=helpers_1.CustomStorageHelpers.PathInfo.get(targetPath);if(pathInfo.isParentOf(currentPath)){if(this._lock){this._lock=await this._lock.moveToParent()}}else{throw new Error(`Locking issue. Locked path "${this._lock.path}" is not a child/descendant of "${targetPath}"`)}this.target.path=targetPath;return targetPath}}exports.CustomStorageTransaction=CustomStorageTransaction;class CustomStorageSettings extends index_1.StorageSettings{constructor(settings){super(settings);this.locking=true;if(typeof settings!=="object"){throw new Error("settings missing")}if(typeof settings.ready!=="function"){throw new Error(`ready must be a function`)}if(typeof settings.getTransaction!=="function"){throw new Error(`getTransaction must be a function`)}this.name=settings.name;this.locking=settings.locking!==false;if(this.locking){this.lockTimeout=typeof settings.lockTimeout==="number"?settings.lockTimeout:120}this.ready=settings.ready;const useLocking=this.locking;const nodeLocker=useLocking?new node_lock_1.NodeLocker(console,this.lockTimeout):null;this.getTransaction=async({path:path,write:write})=>{const transaction=await settings.getTransaction({path:path,write:write});console.assert(typeof transaction.id==="string",`transaction id not set`);const rollback=transaction.rollback;const commit=transaction.commit;transaction.commit=async()=>{const ret=await commit.call(transaction);if(useLocking){await transaction._lock.release("commit")}return ret};transaction.rollback=async reason=>{const ret=await rollback.call(transaction,reason);if(useLocking){await transaction._lock.release("rollback")}return ret};if(useLocking){transaction._lock=await nodeLocker.lock(path,transaction.id,write,`${this.name}::getTransaction`)}return transaction}}}exports.CustomStorageSettings=CustomStorageSettings;class CustomStorageNodeAddress{constructor(containerPath){this.path=containerPath}}exports.CustomStorageNodeAddress=CustomStorageNodeAddress;class CustomStorageNodeInfo extends node_info_1.NodeInfo{constructor(info){super(info);this.revision=info.revision;this.revision_nr=info.revision_nr;this.created=info.created;this.modified=info.modified}}exports.CustomStorageNodeInfo=CustomStorageNodeInfo;class CustomStorage extends index_1.Storage{constructor(dbname,settings,env){super(dbname,settings,env);this._customImplementation=settings;this._init()}async _init(){this.debug.log(`Database "${this.name}" details:`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Type: CustomStorage`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Path: ${this.settings.path}`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Max inline value size: ${this.settings.maxInlineValueSize}`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Autoremove undefined props: ${this.settings.removeVoidProperties}`.colorize(acebase_core_1.ColorStyle.dim));await this._customImplementation.ready();const transaction=await this._customImplementation.getTransaction({path:"",write:true});const info=await this.getNodeInfo("",{transaction:transaction});if(!info.exists){await this._writeNode("",{},{transaction:transaction})}await transaction.commit();if(this.indexes.supported){await this.indexes.load()}this.emit("ready")}throwImplementationError(message){throw new Error(`CustomStorage "${this._customImplementation.name}" ${message}`)}_storeNode(path,node,options){const getTypedChildValue=val=>{if(val===null){throw new Error(`Not allowed to store null values. remove the property`)}else if(["string","number","boolean"].includes(typeof val)){return val}else if(val instanceof Date){return{type:node_value_types_1.VALUE_TYPES.DATETIME,value:val.getTime()}}else if(val instanceof acebase_core_1.PathReference){return{type:node_value_types_1.VALUE_TYPES.REFERENCE,value:val.path}}else if(val instanceof ArrayBuffer){return{type:node_value_types_1.VALUE_TYPES.BINARY,value:acebase_core_1.ascii85.encode(val)}}else if(typeof val==="object"){console.assert(Object.keys(val).length===0,"child object stored in parent can only be empty");return val}};const unprocessed=`Caller should have pre-processed the value by converting it to a string`;if(node.type===node_value_types_1.VALUE_TYPES.ARRAY&&node.value instanceof Array){console.warn(`Unprocessed array. ${unprocessed}`);const obj={};for(let i=0;i{node.value[key]=getTypedChildValue(original[key])}))}return options.transaction.set(path,node)}_processReadNodeValue(node){const getTypedChildValue=val=>{if(val.type===node_value_types_1.VALUE_TYPES.BINARY){return acebase_core_1.ascii85.decode(val.value)}else if(val.type===node_value_types_1.VALUE_TYPES.DATETIME){return new Date(val.value)}else if(val.type===node_value_types_1.VALUE_TYPES.REFERENCE){return new acebase_core_1.PathReference(val.value)}else{throw new Error(`Unhandled child value type ${val.type}`)}};switch(node.type){case node_value_types_1.VALUE_TYPES.ARRAY:case node_value_types_1.VALUE_TYPES.OBJECT:{const obj=node.value;Object.keys(obj).forEach((key=>{const item=obj[key];if(typeof item==="object"&&"type"in item){obj[key]=getTypedChildValue(item)}}));node.value=obj;break}case node_value_types_1.VALUE_TYPES.BINARY:{node.value=acebase_core_1.ascii85.decode(node.value);break}case node_value_types_1.VALUE_TYPES.REFERENCE:{node.value=new acebase_core_1.PathReference(node.value);break}case node_value_types_1.VALUE_TYPES.STRING:{break}default:throw new Error(`Invalid standalone record value type`)}}async _readNode(path,options){const node=await options.transaction.get(path);if(node===null){return null}if(typeof node!=="object"){this.throwImplementationError(`transaction.get must return an ICustomStorageNode object. Use JSON.parse if your set function stored it as a string`)}this._processReadNodeValue(node);return node}_getTypeFromStoredValue(val){let type;if(typeof val==="string"){type=node_value_types_1.VALUE_TYPES.STRING}else if(typeof val==="number"){type=node_value_types_1.VALUE_TYPES.NUMBER}else if(typeof val==="boolean"){type=node_value_types_1.VALUE_TYPES.BOOLEAN}else if(val instanceof Array){type=node_value_types_1.VALUE_TYPES.ARRAY}else if(typeof val==="object"){if("type"in val){const serialized=val;type=serialized.type;val=serialized.value;if(type===node_value_types_1.VALUE_TYPES.DATETIME){val=new Date(val)}else if(type===node_value_types_1.VALUE_TYPES.REFERENCE){val=new acebase_core_1.PathReference(val)}}else{type=node_value_types_1.VALUE_TYPES.OBJECT}}else{throw new Error(`Unknown value type`)}return{type:type,value:val}}async _writeNode(path,value,options){if(!options.merge&&this.valueFitsInline(value)&&path!==""){throw new Error(`invalid value to store in its own node`)}else if(path===""&&(typeof value!=="object"||value instanceof Array)){throw new Error(`Invalid root node value. Must be an object`)}if(typeof options.diff==="undefined"&&typeof options.currentValue!=="undefined"){const diff=compareValues(options.currentValue,value);if(options.merge&&typeof diff==="object"){diff.removed=diff.removed.filter((key=>value[key]===null))}options.diff=diff}if(options.diff==="identical"){return}const transaction=options.transaction;const currentRow=options.currentValue===null?null:await this._readNode(path,{transaction:transaction});if(options.merge&¤tRow){if(currentRow.type===node_value_types_1.VALUE_TYPES.ARRAY&&!(value instanceof Array)&&typeof value==="object"&&Object.keys(value).some((key=>isNaN(parseInt(key))))){throw new Error(`Cannot merge existing array of path "${path}" with an object`)}if(value instanceof Array&¤tRow.type!==node_value_types_1.VALUE_TYPES.ARRAY){throw new Error(`Cannot merge existing object of path "${path}" with an array`)}}const revision=options.revision||acebase_core_1.ID.generate();const mainNode={type:currentRow&¤tRow.type===node_value_types_1.VALUE_TYPES.ARRAY?node_value_types_1.VALUE_TYPES.ARRAY:node_value_types_1.VALUE_TYPES.OBJECT,value:{}};const childNodeValues={};if(value instanceof Array){mainNode.type=node_value_types_1.VALUE_TYPES.ARRAY;const obj={};for(let i=0;i{if(!(key in value)){value[key]=null}}))}Object.keys(value).forEach((key=>{const val=value[key];delete mainNode.value[key];if(val===null){return}else if(typeof val==="undefined"){if(this.settings.removeVoidProperties===true){delete value[key];return}else{throw new Error(`Property "${key}" has invalid value. Cannot store undefined values. Set removeVoidProperties option to true to automatically remove undefined properties`)}}if(this.valueFitsInline(val)){mainNode.value[key]=val}else{childNodeValues[key]=val}}))}const isArray=mainNode.type===node_value_types_1.VALUE_TYPES.ARRAY;if(currentRow){this.debug.log(`Node "/${path}" is being ${options.merge?"updated":"overwritten"}`.colorize(acebase_core_1.ColorStyle.cyan));if(currentIsObjectOrArray||newIsObjectOrArray){const pathInfo=acebase_core_1.PathInfo.get(path);const keys=[];let checkExecuted=false;const includeChildCheck=childPath=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isParentOf(childPath)){this.throwImplementationError(`"${childPath}" is not a child of "${path}" - childrenOf must only check and return paths that are children`)}return true};const addChildPath=childPath=>{if(!checkExecuted){this.throwImplementationError(`childrenOf did not call checkCallback before addCallback`)}const key=acebase_core_1.PathInfo.get(childPath).key;keys.push(key.toString());return true};await transaction.childrenOf(path,{metadata:false,value:false},includeChildCheck,addChildPath);children.current=children.current.concat(keys);if(newIsObjectOrArray){if(options&&options.merge){children.new=children.current.slice()}Object.keys(value).forEach((key=>{if(!children.new.includes(key)){children.new.push(key)}}))}const changes={insert:children.new.filter((key=>!children.current.includes(key))),update:[],delete:options&&options.merge?Object.keys(value).filter((key=>value[key]===null)):children.current.filter((key=>!children.new.includes(key)))};changes.update=children.new.filter((key=>children.current.includes(key)&&!changes.delete.includes(key)));if(isArray&&options.merge&&(changes.insert.length>0||changes.delete.length>0)){const newArrayKeys=changes.update.concat(changes.insert);const isExhaustive=newArrayKeys.every(((k,index,arr)=>arr.includes(index.toString())));if(!isExhaustive){throw new Error(`Elements cannot be inserted beyond, or removed before the end of an array. Rewrite the whole array at path "${path}" or change your schema to use an object collection instead`)}}const writePromises=Object.keys(childNodeValues).map((key=>{const keyOrIndex=isArray?parseInt(key):key;const childDiff=typeof options.diff==="object"?options.diff.forChild(keyOrIndex):undefined;if(childDiff==="identical"){return}const childPath=pathInfo.childPath(keyOrIndex);const childValue=childNodeValues[keyOrIndex];const currentChildValue=typeof options.currentValue==="undefined"?undefined:options.currentValue!==null&&typeof options.currentValue==="object"&&keyOrIndex in options.currentValue?options.currentValue[keyOrIndex]:null;return this._writeNode(childPath,childValue,{transaction:transaction,revision:revision,merge:false,currentValue:currentChildValue,diff:childDiff})}));const movingNodes=newIsObjectOrArray?keys.filter((key=>key in mainNode.value)):[];const deleteDedicatedKeys=changes.delete.concat(movingNodes);const deletePromises=deleteDedicatedKeys.map((key=>{const keyOrIndex=isArray?parseInt(key):key;const childPath=pathInfo.childPath(keyOrIndex);return this._deleteNode(childPath,{transaction:transaction})}));const promises=writePromises.concat(deletePromises);await Promise.all(promises)}const p=this._storeNode(path,{type:mainNode.type,value:mainNode.value,revision:currentRow.revision,revision_nr:currentRow.revision_nr+1,created:currentRow.created,modified:Date.now()},{transaction:transaction});if(p instanceof Promise){return await p}}else{this.debug.log(`Node "/${path}" is being created`.colorize(acebase_core_1.ColorStyle.cyan));if(isArray){const arrayKeys=Object.keys(mainNode.value).concat(Object.keys(childNodeValues));const isExhaustive=arrayKeys.every(((k,index,arr)=>arr.includes(index.toString())));if(!isExhaustive){throw new Error(`Cannot store arrays with missing entries`)}}const promises=Object.keys(childNodeValues).map((key=>{const keyOrIndex=isArray?parseInt(key):key;const childPath=acebase_core_1.PathInfo.getChildPath(path,keyOrIndex);const childValue=childNodeValues[keyOrIndex];return this._writeNode(childPath,childValue,{transaction:transaction,revision:revision,merge:false,currentValue:null})}));const p=this._storeNode(path,{type:mainNode.type,value:mainNode.value,revision:revision,revision_nr:1,created:Date.now(),modified:Date.now()},{transaction:transaction});if(p instanceof Promise){promises.push(p)}await Promise.all(promises)}}async _deleteNode(path,options){const pathInfo=acebase_core_1.PathInfo.get(path);this.debug.log(`Node "/${path}" is being deleted`.colorize(acebase_core_1.ColorStyle.cyan));const deletePaths=[path];let checkExecuted=false;const includeDescendantCheck=descPath=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isAncestorOf(descPath)){this.throwImplementationError(`"${descPath}" is not a descendant of "${path}" - descendantsOf must only check and return paths that are descendants`)}return true};const addDescendant=descPath=>{if(!checkExecuted){this.throwImplementationError(`descendantsOf did not call checkCallback before addCallback`)}deletePaths.push(descPath);return true};const transaction=options.transaction;await transaction.descendantsOf(path,{metadata:false,value:false},includeDescendantCheck,addDescendant);this.debug.log(`Nodes ${deletePaths.map((p=>`"/${p}"`)).join(",")} are being deleted`.colorize(acebase_core_1.ColorStyle.cyan));return transaction.removeMultiple(deletePaths)}getChildren(path,options={}){let callback;const generator={next(valueCallback){callback=valueCallback;return start()}};const start=async()=>{const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:false});try{let canceled=false;await(async()=>{const node=await this._readNode(path,{transaction:transaction});if(!node){throw new node_errors_1.NodeNotFoundError(`Node "/${path}" does not exist`)}if(![node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(node.type)){return}const isArray=node.type===node_value_types_1.VALUE_TYPES.ARRAY;const value=node.value;let keys=Object.keys(value).map((key=>isArray?parseInt(key):key));if(options.keyFilter){keys=keys.filter((key=>options.keyFilter.includes(key)))}const pathInfo=acebase_core_1.PathInfo.get(path);keys.length>0&&keys.every((key=>{const child=this._getTypeFromStoredValue(value[key]);const info=new CustomStorageNodeInfo({path:pathInfo.childPath(key),key:isArray?null:key,index:isArray?key:null,type:child.type,address:null,exists:true,value:child.value,revision:node.revision,revision_nr:node.revision_nr,created:new Date(node.created),modified:new Date(node.modified)});canceled=callback(info)===false;return!canceled}));if(canceled){return}let checkExecuted=false;const includeChildCheck=childPath=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isParentOf(childPath)){this.throwImplementationError(`"${childPath}" is not a child of "${path}" - childrenOf must only check and return paths that are children`)}if(options.keyFilter){const key=acebase_core_1.PathInfo.get(childPath).key;return options.keyFilter.includes(key)}return true};const addChildNode=(childPath,node)=>{if(!checkExecuted){this.throwImplementationError(`childrenOf did not call checkCallback before addCallback`)}const key=acebase_core_1.PathInfo.get(childPath).key;const info=new CustomStorageNodeInfo({path:childPath,type:node.type,key:isArray?null:key,index:isArray?key:null,address:new node_address_1.NodeAddress(childPath),exists:true,value:null,revision:node.revision,revision_nr:node.revision_nr,created:new Date(node.created),modified:new Date(node.modified)});canceled=callback(info)===false;return!canceled};await transaction.childrenOf(path,{metadata:true,value:false},includeChildCheck,addChildNode)})();if(!options.transaction){await transaction.commit()}return canceled}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}};return generator}async getNode(path,options){options=options||{};const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:false});try{const node=await(async()=>{const filtered=options.include&&options.include.length>0||options.exclude&&options.exclude.length>0||options.child_objects===false;const pathInfo=acebase_core_1.PathInfo.get(path);const targetNode=await this._readNode(path,{transaction:transaction});if(!targetNode){if(path===""){return{value:null}}const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);const parentNode=await this._readNode(pathInfo.parentPath,{transaction:transaction});if(parentNode&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(parentNode.type)&&pathInfo.key in parentNode.value){const childValueInfo=this._getTypeFromStoredValue(parentNode.value[pathInfo.key]);return{revision:parentNode.revision,revision_nr:parentNode.revision_nr,created:parentNode.created,modified:parentNode.modified,type:childValueInfo.type,value:childValueInfo.value}}return{value:null}}const isArray=targetNode.type===node_value_types_1.VALUE_TYPES.ARRAY;const convertFilterArray=arr=>{const isNumber=key=>/^[0-9]+$/.test(key);return arr.map((path=>acebase_core_1.PathInfo.get(isArray&&isNumber(path)?`[${path}]`:path)))};const includeFilter=options.include?convertFilterArray(options.include):[];const excludeFilter=options.exclude?convertFilterArray(options.exclude):[];const applyFiltersOnInlineData=(descPath,node)=>{if([node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(node.type)&&includeFilter.length>0){const trailKeys=acebase_core_1.PathInfo.getPathKeys(descPath).slice(pathInfo.keys.length);const checkPathInfo=new acebase_core_1.PathInfo(trailKeys);const remove=[];const includes=includeFilter.filter((info=>info.isDescendantOf(checkPathInfo)));if(includes.length>0){const isArray=node.type===node_value_types_1.VALUE_TYPES.ARRAY;remove.push(...Object.keys(node.value).map((key=>isArray?+key:key)));for(const info of includes){const targetProp=info.keys[trailKeys.length];if(typeof targetProp==="string"&&(targetProp==="*"||targetProp.startsWith("$"))){remove.splice(0);break}const index=remove.indexOf(targetProp);index>=0&&remove.splice(index,1)}}const hasIncludeOnChild=includeFilter.some((info=>info.isChildOf(checkPathInfo)));const hasExcludeOnChild=excludeFilter.some((info=>info.isChildOf(checkPathInfo)));if(hasExcludeOnChild&&!hasIncludeOnChild){const excludes=excludeFilter.filter((info=>info.isChildOf(checkPathInfo)));for(let i=0;iinfo.equals(remove[i])))){remove.splice(i,1);i--}}}for(const key of remove){delete node.value[key]}}};applyFiltersOnInlineData(path,targetNode);let checkExecuted=false;const includeDescendantCheck=(descPath,metadata)=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isAncestorOf(descPath)){this.throwImplementationError(`"${descPath}" is not a descendant of "${path}" - descendantsOf must only check and return paths that are descendants`)}if(!filtered){return true}const descPathKeys=acebase_core_1.PathInfo.getPathKeys(descPath);const trailKeys=descPathKeys.slice(pathInfo.keys.length);const checkPathInfo=new acebase_core_1.PathInfo(trailKeys);let include=(includeFilter.length>0?includeFilter.some((info=>checkPathInfo.isOnTrailOf(info))):true)&&(excludeFilter.length>0?!excludeFilter.some((info=>info.equals(checkPathInfo)||info.isAncestorOf(checkPathInfo))):true);if(include&&options.child_objects===false&&(pathInfo.isParentOf(descPath)&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(metadata?metadata.type:-1)||acebase_core_1.PathInfo.getPathKeys(descPath).length>pathInfo.pathKeys.length+1)){include=false}return include};const descRows=[];const addDescendant=(descPath,node)=>{if(!checkExecuted){this.throwImplementationError("descendantsOf did not call checkCallback before addCallback")}if(options.child_objects===false&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(node.type)){return true}applyFiltersOnInlineData(descPath,node);this._processReadNodeValue(node);const row=node;row.path=descPath;descRows.push(row);return true};await transaction.descendantsOf(path,{metadata:true,value:true},includeDescendantCheck,addDescendant);this.debug.log(`Read node "/${path}" and ${filtered?"(filtered) ":""}descendants from ${descRows.length+1} records`.colorize(acebase_core_1.ColorStyle.magenta));const result=targetNode;const objectToArray=obj=>{const arr=[];Object.keys(obj).forEach((key=>{const index=parseInt(key);arr[index]=obj[index]}));return arr};if(targetNode.type===node_value_types_1.VALUE_TYPES.ARRAY){result.value=objectToArray(result.value)}if(targetNode.type===node_value_types_1.VALUE_TYPES.OBJECT||targetNode.type===node_value_types_1.VALUE_TYPES.ARRAY){const targetPathKeys=acebase_core_1.PathInfo.getPathKeys(path);const value=targetNode.value;for(let i=0;i{if(childKey in parent[key]){this.throwImplementationError(`Custom storage merge error: child key "${childKey}" is in parent value already! Make sure the get/childrenOf/descendantsOf methods of the custom storage class return values that can be modified by AceBase without affecting the stored source`)}parent[key][childKey]=nodeValue[childKey]}))}}else{parent[key]=nodeValue}parent=parent[key]}}}else if(descRows.length>0){this.throwImplementationError(`multiple records found for non-object value!`)}if(options.child_objects===false){Object.keys(result.value).forEach((key=>{if(typeof result.value[key]==="object"&&result.value[key].constructor===Object){console.assert(Object.keys(result.value[key]).length===0);delete result.value[key]}}))}if(options.include){}if(options.exclude){const process=(obj,keys)=>{if(typeof obj!=="object"){return}const key=keys[0];if(key==="*"){Object.keys(obj).forEach((k=>{process(obj[k],keys.slice(1))}))}else if(keys.length>1){key in obj&&process(obj[key],keys.slice(1))}else{delete obj[key]}};options.exclude.forEach((path=>{const checkKeys=acebase_core_1.PathInfo.getPathKeys(path);process(result.value,checkKeys)}))}return result})();if(!options.transaction){await transaction.commit()}return node}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}async getNodeInfo(path,options={}){options=options||{};const pathInfo=acebase_core_1.PathInfo.get(path);const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:false});try{const node=await this._readNode(path,{transaction:transaction});const info=new CustomStorageNodeInfo({path:path,key:typeof pathInfo.key==="string"?pathInfo.key:null,index:typeof pathInfo.key==="number"?pathInfo.key:null,type:node?node.type:0,exists:node!==null,address:node?new node_address_1.NodeAddress(path):null,created:node?new Date(node.created):null,modified:node?new Date(node.modified):null,revision:node?node.revision:null,revision_nr:node?node.revision_nr:null});if(!node&&path!==""){const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);const parent=await this._readNode(pathInfo.parentPath,{transaction:transaction});if(parent&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(parent.type)&&pathInfo.key in parent.value){info.exists=true;info.value=parent.value[pathInfo.key];info.address=null;info.type=parent.type;info.created=new Date(parent.created);info.modified=new Date(parent.modified);info.revision=parent.revision;info.revision_nr=parent.revision_nr}else{info.address=null}}if(options.include_child_count){info.childCount=0;if([node_value_types_1.VALUE_TYPES.ARRAY,node_value_types_1.VALUE_TYPES.OBJECT].includes(info.valueType)&&info.address){info.childCount=node.value?Object.keys(node.value).length:0;info.childCount+=await transaction.getChildCount(path)}}if(!options.transaction){await transaction.commit()}return info}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}async setNode(path,value,options={suppress_events:false,context:null}){if(this.settings.readOnly){throw new Error(`Database is opened in read-only mode`)}const pathInfo=acebase_core_1.PathInfo.get(path);const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:true});try{if(path===""){if(value===null||typeof value!=="object"||value instanceof Array||value instanceof ArrayBuffer||"buffer"in value&&value.buffer instanceof ArrayBuffer){throw new Error(`Invalid value for root node: ${value}`)}await this._writeNodeWithTracking("",value,{merge:false,transaction:transaction,suppress_events:options.suppress_events,context:options.context})}else if(typeof options.assert_revision!=="undefined"){const info=await this.getNodeInfo(path,{transaction:transaction});if(info.revision!==options.assert_revision){throw new node_errors_1.NodeRevisionError(`revision '${info.revision}' does not match requested revision '${options.assert_revision}'`)}if(info.address&&info.address.path===path&&value!==null&&!this.valueFitsInline(value)){await this._writeNodeWithTracking(path,value,{merge:false,transaction:transaction,suppress_events:options.suppress_events,context:options.context})}else{const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this._writeNodeWithTracking(pathInfo.parentPath,{[pathInfo.key]:value},{merge:true,transaction:transaction,suppress_events:options.suppress_events,context:options.context})}}else{const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this.updateNode(pathInfo.parentPath,{[pathInfo.key]:value},{transaction:transaction,suppress_events:options.suppress_events,context:options.context})}if(!options.transaction){await transaction.commit()}}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}async updateNode(path,updates,options={suppress_events:false,context:null}){if(this.settings.readOnly){throw new Error(`Database is opened in read-only mode`)}if(typeof updates!=="object"){throw new Error(`invalid updates argument`)}else if(Object.keys(updates).length===0){return}const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:true});try{const nodeInfo=await this.getNodeInfo(path,{transaction:transaction});const pathInfo=acebase_core_1.PathInfo.get(path);if(nodeInfo.exists&&nodeInfo.address&&nodeInfo.address.path===path){await this._writeNodeWithTracking(path,updates,{transaction:transaction,merge:true,suppress_events:options.suppress_events,context:options.context})}else if(nodeInfo.exists){const pathInfo=acebase_core_1.PathInfo.get(path);const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this._writeNodeWithTracking(pathInfo.parentPath,{[pathInfo.key]:updates},{transaction:transaction,merge:true,suppress_events:options.suppress_events,context:options.context})}else{const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this.updateNode(pathInfo.parentPath,{[pathInfo.key]:updates},{transaction:transaction,suppress_events:options.suppress_events,context:options.context})}if(!options.transaction){await transaction.commit()}}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}}exports.CustomStorage=CustomStorage},{"../../node-address":35,"../../node-errors":36,"../../node-info":37,"../../node-lock":38,"../../node-value-types":39,"../index":52,"./helpers":44,"acebase-core":12}],46:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createIndexedDBInstance=void 0;const acebase_core_1=require("acebase-core");const __1=require("..");const __2=require("../../..");const settings_1=require("./settings");const transaction_1=require("./transaction");function createIndexedDBInstance(dbname,init={}){const settings=new settings_1.IndexedDBStorageSettings(init);const IndexedDB=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;const request=IndexedDB.open(`${dbname}.acebase`,1);request.onupgradeneeded=e=>{const db=request.result;db.createObjectStore("nodes",{keyPath:"path"});db.createObjectStore("content")};let idb;const readyPromise=new Promise(((resolve,reject)=>{request.onsuccess=e=>{idb=request.result;resolve()};request.onerror=e=>{reject(e)}}));const cache=new acebase_core_1.SimpleCache(typeof settings.cacheSeconds==="number"?settings.cacheSeconds:60);const storageSettings=new __1.CustomStorageSettings({name:"IndexedDB",locking:true,removeVoidProperties:settings.removeVoidProperties,maxInlineValueSize:settings.maxInlineValueSize,lockTimeout:settings.lockTimeout,ready(){return readyPromise},async getTransaction(target){await readyPromise;const context={debug:false,db:idb,cache:cache,ipc:ipc};return new transaction_1.IndexedDBStorageTransaction(context,target)}});const db=new __2.AceBase(dbname,{logLevel:settings.logLevel,storage:storageSettings,sponsor:settings.sponsor});const ipc=db.api.storage.ipc;db.settings.ipcEvents=settings.multipleTabs===true;ipc.on("notification",(async notification=>{const message=notification.data;if(typeof message!=="object"){return}if(message.action==="cache.invalidate"){for(const path of message.paths){cache.remove(path)}}}));return db}exports.createIndexedDBInstance=createIndexedDBInstance},{"..":45,"../../..":32,"./settings":47,"./transaction":48,"acebase-core":12}],47:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.IndexedDBStorageSettings=void 0;const __1=require("../..");class IndexedDBStorageSettings extends __1.StorageSettings{constructor(settings){super(settings);this.multipleTabs=false;this.cacheSeconds=60;this.sponsor=false;if(typeof settings.logLevel==="string"){this.logLevel=settings.logLevel}if(typeof settings.multipleTabs==="boolean"){this.multipleTabs=settings.multipleTabs}if(typeof settings.cacheSeconds==="number"){this.cacheSeconds=settings.cacheSeconds}if(typeof settings.sponsor==="boolean"){this.sponsor=settings.sponsor}["type","ipc","path"].forEach((prop=>{if(prop in settings){console.warn(`${prop} setting is not supported for AceBase IndexedDBStorage`)}}))}}exports.IndexedDBStorageSettings=IndexedDBStorageSettings},{"../..":52}],48:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.IndexedDBStorageTransaction=void 0;const __1=require("..");function _requestToPromise(request){return new Promise(((resolve,reject)=>{request.onsuccess=event=>resolve(request.result||null);request.onerror=reject}))}class IndexedDBStorageTransaction extends __1.CustomStorageTransaction{constructor(context,target){super(target);this.context=context;this.production=true;this._pending=[]}_createTransaction(write=false){const tx=this.context.db.transaction(["nodes","content"],write?"readwrite":"readonly");return tx}_splitMetadata(node){const value=node.value;const copy=Object.assign({},node);delete copy.value;const metadata=copy;return{metadata:metadata,value:value}}async commit(){if(this._pending.length===0){return}const batch=this._pending.splice(0);this.context.ipc.sendNotification({action:"cache.invalidate",paths:batch.map((op=>op.path))});const tx=this._createTransaction(true);try{await new Promise(((resolve,reject)=>{let stop=false,processed=0;const handleError=err=>{stop=true;reject(err)};const handleSuccess=()=>{if(++processed===batch.length){resolve()}};batch.forEach(((op,i)=>{if(stop){return}let r1,r2;const path=op.path;if(op.action==="set"){const{metadata:metadata,value:value}=this._splitMetadata(op.node);const nodeInfo={path:path,metadata:metadata};r1=tx.objectStore("nodes").put(nodeInfo);r2=tx.objectStore("content").put(value,path);this.context.cache.set(path,op.node)}else if(op.action==="remove"){r1=tx.objectStore("content").delete(path);r2=tx.objectStore("nodes").delete(path);this.context.cache.set(path,null)}else{handleError(new Error(`Unknown pending operation "${op.action}" on path "${path}" `))}let succeeded=0;r1.onsuccess=r2.onsuccess=()=>{if(++succeeded===2){handleSuccess()}};r1.onerror=r2.onerror=handleError}))}));tx.commit&&tx.commit()}catch(err){console.error(err);tx.abort&&tx.abort();throw err}}async rollback(err){this._pending=[]}async get(path){if(this.context.cache.has(path)){const cache=this.context.cache.get(path);return cache}const tx=this._createTransaction(false);const r1=_requestToPromise(tx.objectStore("nodes").get(path));const r2=_requestToPromise(tx.objectStore("content").get(path));try{const results=await Promise.all([r1,r2]);tx.commit&&tx.commit();const info=results[0];if(!info){this.context.cache.set(path,null);return null}const node=info.metadata;node.value=results[1];this.context.cache.set(path,node);return node}catch(err){console.error(`IndexedDB get error`,err);tx.abort&&tx.abort();throw err}}set(path,node){this._pending.push({action:"set",path:path,node:node})}remove(path){this._pending.push({action:"remove",path:path})}async removeMultiple(paths){paths.forEach((path=>{this._pending.push({action:"remove",path:path})}))}childrenOf(path,include,checkCallback,addCallback){return this._getChildrenOf(path,Object.assign(Object.assign({},include),{descendants:false}),checkCallback,addCallback)}descendantsOf(path,include,checkCallback,addCallback){return this._getChildrenOf(path,Object.assign(Object.assign({},include),{descendants:true}),checkCallback,addCallback)}_getChildrenOf(path,include,checkCallback,addCallback){return new Promise(((resolve,reject)=>{const pathInfo=__1.CustomStorageHelpers.PathInfo.get(path);const tx=this._createTransaction(false);const store=tx.objectStore("nodes");const query=IDBKeyRange.lowerBound(path,true);const cursor=include.metadata?store.openCursor(query):store.openKeyCursor(query);cursor.onerror=e=>{var _a;(_a=tx.abort)===null||_a===void 0?void 0:_a.call(tx);reject(e)};cursor.onsuccess=async e=>{var _a,_b,_c;const otherPath=(_b=(_a=cursor.result)===null||_a===void 0?void 0:_a.key)!==null&&_b!==void 0?_b:null;let keepGoing=true;if(otherPath===null){keepGoing=false}else if(!pathInfo.isAncestorOf(otherPath)){keepGoing=false}else if(include.descendants||pathInfo.isParentOf(otherPath)){let node;if(include.metadata){const valueCursor=cursor;const data=valueCursor.result.value;node=data.metadata}const shouldAdd=checkCallback(otherPath,node);if(shouldAdd){if(include.value){if(this.context.cache.has(otherPath)){const cache=this.context.cache.get(otherPath);node.value=cache.value}else{const req=tx.objectStore("content").get(otherPath);node.value=await new Promise(((resolve,reject)=>{req.onerror=e=>{resolve(null)};req.onsuccess=e=>{resolve(req.result)}}));this.context.cache.set(otherPath,node.value===null?null:node)}}keepGoing=addCallback(otherPath,node)}}if(keepGoing){try{cursor.result.continue()}catch(err){keepGoing=false}}if(!keepGoing){(_c=tx.commit)===null||_c===void 0?void 0:_c.call(tx);resolve()}}}))}}exports.IndexedDBStorageTransaction=IndexedDBStorageTransaction},{"..":45}],49:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createLocalStorageInstance=exports.LocalStorageTransaction=exports.LocalStorageSettings=void 0;const __1=require("..");const __2=require("../../..");const settings_1=require("./settings");Object.defineProperty(exports,"LocalStorageSettings",{enumerable:true,get:function(){return settings_1.LocalStorageSettings}});const transaction_1=require("./transaction");Object.defineProperty(exports,"LocalStorageTransaction",{enumerable:true,get:function(){return transaction_1.LocalStorageTransaction}});function createLocalStorageInstance(dbname,init={}){const settings=new settings_1.LocalStorageSettings(init);const localStorage=settings.provider?settings.provider:settings.temp?window.localStorage:window.sessionStorage;const storageSettings=new __1.CustomStorageSettings({name:"LocalStorage",locking:true,removeVoidProperties:settings.removeVoidProperties,maxInlineValueSize:settings.maxInlineValueSize,ready(){return Promise.resolve()},getTransaction(target){const context={debug:true,dbname:dbname,localStorage:localStorage};const transaction=new transaction_1.LocalStorageTransaction(context,target);return Promise.resolve(transaction)}});const db=new __2.AceBase(dbname,{logLevel:settings.logLevel,storage:storageSettings,sponsor:settings.sponsor});db.settings.ipcEvents=settings.multipleTabs===true;return db}exports.createLocalStorageInstance=createLocalStorageInstance},{"..":45,"../../..":32,"./settings":50,"./transaction":51}],50:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.LocalStorageSettings=void 0;const __1=require("../..");class LocalStorageSettings extends __1.StorageSettings{constructor(settings){super(settings);this.temp=false;this.multipleTabs=false;if(typeof settings.temp==="boolean"){this.temp=settings.temp}if(typeof settings.provider==="object"){this.provider=settings.provider}if(typeof settings.multipleTabs==="boolean"){this.multipleTabs=settings.multipleTabs}if(typeof settings.logLevel==="string"){this.logLevel=settings.logLevel}if(typeof settings.sponsor==="boolean"){this.sponsor=settings.sponsor}["type","ipc","path"].forEach((prop=>{if(prop in settings){console.warn(`${prop} setting is not supported for AceBase LocalStorage`)}}))}}exports.LocalStorageSettings=LocalStorageSettings},{"../..":52}],51:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.LocalStorageTransaction=void 0;const __1=require("..");class LocalStorageTransaction extends __1.CustomStorageTransaction{constructor(context,target){super(target);this.context=context;this._storageKeysPrefix=`${this.context.dbname}.acebase::`}async commit(){}async rollback(err){}async get(path){const json=this.context.localStorage.getItem(this.getStorageKeyForPath(path));const val=JSON.parse(json);return val}async set(path,val){const json=JSON.stringify(val);this.context.localStorage.setItem(this.getStorageKeyForPath(path),json)}async remove(path){this.context.localStorage.removeItem(this.getStorageKeyForPath(path))}async childrenOf(path,include,checkCallback,addCallback){const pathInfo=__1.CustomStorageHelpers.PathInfo.get(path);for(let i=0;i`notify_${event}`)));const NOOP=()=>{};class SchemaValidationError extends Error{constructor(reason){super(`Schema validation failed: ${reason}`);this.reason=reason}}exports.SchemaValidationError=SchemaValidationError;class StorageSettings{constructor(settings={}){this.maxInlineValueSize=50;this.removeVoidProperties=false;this.path=".";this.lockTimeout=120;this.type="data";this.readOnly=false;if(typeof settings.maxInlineValueSize==="number"){this.maxInlineValueSize=settings.maxInlineValueSize}if(typeof settings.removeVoidProperties==="boolean"){this.removeVoidProperties=settings.removeVoidProperties}if(typeof settings.path==="string"){this.path=settings.path}if(this.path.endsWith("/")){this.path=this.path.slice(0,-1)}if(typeof settings.lockTimeout==="number"){this.lockTimeout=settings.lockTimeout}if(typeof settings.type==="string"){this.type=settings.type}if(typeof settings.readOnly==="boolean"){this.readOnly=settings.readOnly}if(typeof settings.ipc==="object"){this.ipc=settings.ipc}}}exports.StorageSettings=StorageSettings;class Storage extends acebase_core_1.SimpleEventEmitter{constructor(name,settings,env){super();this.name=name;this.settings=settings;this._schemas=[];this._indexes=[];this.indexes={get supported(){return promise_fs_1.pfs===null||promise_fs_1.pfs===void 0?void 0:promise_fs_1.pfs.hasFileSystem},create:(path,key,options={rebuild:false})=>{const context={storage:this,debug:this.debug,indexes:this._indexes,ipc:this.ipc};return(0,indexes_1.createIndex)(context,path,key,options)},get:(path,key=null)=>{if(path.includes("$")){const pathKeys=acebase_core_1.PathInfo.getPathKeys(path).map((key=>typeof key==="string"&&key.startsWith("$")?"*":key));path=new acebase_core_1.PathInfo(pathKeys).path}return this._indexes.filter((index=>index.path===path&&(key===null||key===index.key)))},getAll:(targetPath,options={parentPaths:true,childPaths:true})=>{const pathKeys=acebase_core_1.PathInfo.getPathKeys(targetPath);return this._indexes.filter((index=>{const indexKeys=acebase_core_1.PathInfo.getPathKeys(index.path+"/*");if(options.parentPaths&&indexKeys.every(((key,i)=>key==="*"||pathKeys[i]===key))&&[index.key].concat(...index.includeKeys).includes(pathKeys[indexKeys.length])){return true}else if(indexKeys.length[key,"*"].includes(indexKeys[i])))}))},list:()=>this._indexes.slice(),load:async()=>{this._indexes.splice(0);if(!promise_fs_1.pfs.hasFileSystem){return}let files=[];try{files=await promise_fs_1.pfs.readdir(`${this.settings.path}/${this.name}.acebase`)}catch(err){if(err.code!=="ENOENT"){this.debug.error(err)}}const promises=[];files.forEach((fileName=>{if(!fileName.endsWith(".idx")){return}const needsStoragePrefix=this.settings.type!=="data";const hasStoragePrefix=/^\[[a-z]+\]-/.test(fileName);if(!needsStoragePrefix&&!hasStoragePrefix||needsStoragePrefix&&fileName.startsWith(`[${this.settings.type}]-`)){const p=this.indexes.add(fileName);promises.push(p)}}));await Promise.all(promises)},add:async fileName=>{try{const index=await data_index_1.DataIndex.readFromFile(this,fileName);this._indexes.push(index);return index}catch(err){this.debug.error(err);return null}},delete:async fileName=>{const index=await this.indexes.remove(fileName);await index.delete();this.ipc.sendNotification({type:"index.deleted",fileName:index.fileName,path:index.path,keys:index.key})},remove:async fileName=>{const index=this._indexes.find((index=>index.fileName===fileName));if(!index){throw new Error(`Index ${fileName} not found`)}this._indexes.splice(this._indexes.indexOf(index),1);return index},close:async()=>{const promises=this.indexes.list().map((index=>index.close().catch((err=>this.debug.error(err)))));await Promise.all(promises)}};this._eventSubscriptions={};this.subscriptions={add:(path,type,callback)=>{if(SUPPORTED_EVENTS.indexOf(type)<0){throw new TypeError(`Invalid event type "${type}"`)}let pathSubs=this._eventSubscriptions[path];if(!pathSubs){pathSubs=this._eventSubscriptions[path]=[]}pathSubs.push({created:Date.now(),type:type,callback:callback});this.emit("subscribe",{path:path,event:type,callback:callback})},remove:(path,type,callback)=>{const pathSubs=this._eventSubscriptions[path];if(!pathSubs){return}const next=()=>pathSubs.findIndex((ps=>(type?ps.type===type:true)&&(callback?ps.callback===callback:true)));let i;while((i=next())>=0){pathSubs.splice(i,1)}this.emit("unsubscribe",{path:path,event:type,callback:callback})},hasValueSubscribersForPath(path){const valueNeeded=this.getValueSubscribersForPath(path);return!!valueNeeded},getValueSubscribersForPath:path=>{const pathInfo=new acebase_core_1.PathInfo(path);const valueSubscribers=[];Object.keys(this._eventSubscriptions).forEach((subscriptionPath=>{if(pathInfo.equals(subscriptionPath)||pathInfo.isDescendantOf(subscriptionPath)){const pathSubs=this._eventSubscriptions[subscriptionPath];const eventPath=acebase_core_1.PathInfo.fillVariables(subscriptionPath,path);pathSubs.filter((sub=>!sub.type.startsWith("notify_"))).forEach((sub=>{let dataPath=null;if(sub.type==="value"){dataPath=eventPath}else if(["mutated","mutations"].includes(sub.type)&&pathInfo.isDescendantOf(eventPath)){dataPath=path}else if(sub.type==="child_changed"&&path!==eventPath){const childKey=acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}else if(["child_added","child_removed"].includes(sub.type)&&pathInfo.isChildOf(eventPath)){const childKey=acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}if(dataPath!==null&&!valueSubscribers.some((s=>s.type===sub.type&&s.eventPath===eventPath))){valueSubscribers.push({type:sub.type,eventPath:eventPath,dataPath:dataPath,subscriptionPath:subscriptionPath})}}))}}));return valueSubscribers},getAllSubscribersForPath:path=>{const pathInfo=acebase_core_1.PathInfo.get(path);const subscribers=[];Object.keys(this._eventSubscriptions).forEach((subscriptionPath=>{if(pathInfo.isOnTrailOf(subscriptionPath)){const pathSubs=this._eventSubscriptions[subscriptionPath];const eventPath=acebase_core_1.PathInfo.fillVariables(subscriptionPath,path);pathSubs.forEach((sub=>{let dataPath=null;if(sub.type==="value"||sub.type==="notify_value"){dataPath=eventPath}else if(["child_changed","notify_child_changed"].includes(sub.type)){const childKey=path===eventPath||pathInfo.isAncestorOf(eventPath)?"*":acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}else if(["mutated","mutations","notify_mutated","notify_mutations"].includes(sub.type)){dataPath=path}else if(["child_added","child_removed","notify_child_added","notify_child_removed"].includes(sub.type)&&(pathInfo.isChildOf(eventPath)||path===eventPath||pathInfo.isAncestorOf(eventPath))){const childKey=path===eventPath||pathInfo.isAncestorOf(eventPath)?"*":acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}if(dataPath!==null&&!subscribers.some((s=>s.type===sub.type&&s.eventPath===eventPath&&s.subscriptionPath===subscriptionPath))){subscribers.push({type:sub.type,eventPath:eventPath,dataPath:dataPath,subscriptionPath:subscriptionPath})}}))}}));return subscribers},trigger:(event,path,dataPath,oldValue,newValue,context)=>{const pathSubscriptions=this._eventSubscriptions[path]||[];pathSubscriptions.filter((sub=>sub.type===event)).forEach((sub=>{sub.callback(null,dataPath,newValue,oldValue,context)}))}};this.debug=new acebase_core_1.DebugLogger(env.logLevel,`[${name}${typeof settings.type==="string"&&settings.type!=="data"?`:${settings.type}`:""}]`);const ipcName=name+(typeof settings.type==="string"?`_${settings.type}`:"");if(settings.ipc){if(typeof settings.ipc.port!=="number"){throw new Error("IPC port number must be a number")}if(!["master","worker"].includes(settings.ipc.role)){throw new Error(`IPC client role must be either "master" or "worker", not "${settings.ipc.role}"`)}const ipcSettings=Object.assign({dbname:ipcName},settings.ipc);this.ipc=new ipc_1.RemoteIPCPeer(this,ipcSettings)}else{this.ipc=new ipc_1.IPCPeer(this,ipcName)}this.ipc.once("exit",(code=>{if(this.indexes.supported){this.indexes.close()}}));this.nodeLocker={lock:(path,tid,write,comment)=>this.ipc.lock({path:path,tid:tid,write:write,comment:comment})};this._lastTid=0}createTid(){return DEBUG_MODE?++this._lastTid:acebase_core_1.ID.generate()}async close(){await this.ipc.exit()}get path(){return`${this.settings.path}/${this.name}.acebase`}valueFitsInline(value){if(typeof value==="number"||typeof value==="boolean"||value instanceof Date){return true}else if(typeof value==="string"){if(value.length>this.settings.maxInlineValueSize){return false}const encoded=encodeString(value);return encoded.lengththis.settings.maxInlineValueSize){return false}const encoded=encodeString(value.path);return encoded.length0){hasValueSubscribers=true;const eventPaths=valueSubscribers.map((sub=>({path:sub.dataPath,keys:acebase_core_1.PathInfo.getPathKeys(sub.dataPath)}))).sort(((a,b)=>{if(a.keys.lengthb.keys.length)return 1;return 0}));const first=eventPaths[0];topEventPath=first.path;if(valueSubscribers.filter((sub=>sub.dataPath===topEventPath)).every((sub=>sub.type==="mutated"||sub.type.startsWith("notify_")))){hasValueSubscribers=false}topEventPath=acebase_core_1.PathInfo.fillVariables(topEventPath,path)}const indexes=this.indexes.getAll(path,{childPaths:true,parentPaths:true}).map((index=>({index:index,keys:acebase_core_1.PathInfo.getPathKeys(index.path)}))).sort(((a,b)=>{if(a.keys.lengthb.keys.length){return 1}return 0})).map((obj=>obj.index));const keysFilter=[];if(indexes.length>0){indexes.sort(((a,b)=>{if(typeof a._pathKeys==="undefined"){a._pathKeys=acebase_core_1.PathInfo.getPathKeys(a.path)}if(typeof b._pathKeys==="undefined"){b._pathKeys=acebase_core_1.PathInfo.getPathKeys(b.path)}if(a._pathKeys.lengthb._pathKeys.length)return 1;return 0}));const topIndex=indexes[0];const topIndexPath=topIndex.path===path?path:acebase_core_1.PathInfo.fillVariables(`${topIndex.path}/*`,path);if(topIndexPath.lengthindex.path===topIndex.path)).forEach((index=>{const keys=[index.key].concat(index.includeKeys);keys.forEach((key=>!keysFilter.includes(key)&&keysFilter.push(key)))}))}}return{topEventPath:topEventPath,eventSubscriptions:eventSubscriptions,valueSubscribers:valueSubscribers,hasValueSubscribers:hasValueSubscribers,indexes:indexes,keysFilter:keysFilter}}async _writeNodeWithTracking(path,value,options={merge:false,waitForIndexUpdates:true,suppress_events:false,context:null,impact:null}){options=options||{};if(!options.tid&&!options.transaction){throw new Error("_writeNodeWithTracking MUST be executed with a tid OR transaction!")}options.merge=options.merge===true;const validation=this.validateSchema(path,value,{updates:options.merge});if(!validation.ok){throw new SchemaValidationError(validation.reason)}const tid=options.tid;const transaction=options.transaction;let topEventData=null;const updateImpact=options.impact?options.impact:this.getUpdateImpact(path,options.suppress_events);const{topEventPath:topEventPath,eventSubscriptions:eventSubscriptions,hasValueSubscribers:hasValueSubscribers,indexes:indexes}=updateImpact;let{keysFilter:keysFilter}=updateImpact;const writeNode=()=>{if(typeof options._customWriteFunction==="function"){return options._customWriteFunction()}if(topEventData){const pathKeys=acebase_core_1.PathInfo.getPathKeys(path);const eventPathKeys=acebase_core_1.PathInfo.getPathKeys(topEventPath);const trailKeys=pathKeys.slice(eventPathKeys.length);let currentValue=topEventData;while(trailKeys.length>0&¤tValue!==null){const childKey=trailKeys.shift();currentValue=typeof currentValue==="object"&&childKey in currentValue?currentValue[childKey]:null}options.currentValue=currentValue}return this._writeNode(path,value,options)};const transactionLoggingEnabled=this.settings.transactions&&this.settings.transactions.log===true;if(eventSubscriptions.length===0&&indexes.length===0&&!transactionLoggingEnabled){return writeNode()}if(!hasValueSubscribers&&options.merge===true&&keysFilter.length===0){keysFilter=Object.keys(value);if(topEventPath!==path){const trailPath=path.slice(topEventPath.length);keysFilter=keysFilter.map((key=>`${trailPath}/${key}`))}}const eventNodeInfo=await this.getNodeInfo(topEventPath,{transaction:transaction,tid:tid});let currentValue=null;if(eventNodeInfo.exists){const valueOptions={transaction:transaction,tid:tid};if(keysFilter.length>0){valueOptions.include=keysFilter}if(topEventPath===""&&typeof valueOptions.include==="undefined"){this.debug.warn('WARNING: One or more value event listeners on the root node are causing the entire database value to be read to facilitate change tracking. Using "value", "notify_value", "child_changed" and "notify_child_changed" events on the root node are a bad practice because of the significant performance impact. Use "mutated" or "mutations" events instead')}const node=await this.getNode(topEventPath,valueOptions);currentValue=node.value}topEventData=currentValue;const result=await writeNode()||{};let newTopEventData,modifiedData;if(path===topEventPath){if(options.merge){if(topEventData===null){newTopEventData=value instanceof Array?[]:{}}else{newTopEventData=topEventData instanceof Array?[]:{};Object.keys(topEventData).forEach((key=>{newTopEventData[key]=topEventData[key]}))}}else{newTopEventData=value}modifiedData=newTopEventData}else{const trailPath=path.slice(topEventPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);if(topEventData===null){newTopEventData=typeof trailKeys[0]==="number"?[]:{}}else{newTopEventData=topEventData instanceof Array?[]:{};Object.keys(topEventData).forEach((key=>{newTopEventData[key]=topEventData[key]}))}modifiedData=newTopEventData;while(trailKeys.length>0){const childKey=trailKeys.shift();if(!options.merge&&trailKeys.length===0){modifiedData[childKey]=value}else{const original=modifiedData[childKey];const shallowCopy=typeof childKey==="number"?[...original]:Object.assign({},original);modifiedData[childKey]=shallowCopy}modifiedData=modifiedData[childKey]}}if(options.merge){Object.keys(value).forEach((key=>{modifiedData[key]=value[key]}))}const dataChanges=compareValues(topEventData,newTopEventData);if(dataChanges==="identical"){result.mutations=[];return result}function removeNulls(obj){if(obj===null||typeof obj!=="object"){return obj}Object.keys(obj).forEach((prop=>{const val=obj[prop];if(val===null){delete obj[prop];if(obj instanceof Array){obj.length--}}if(typeof val==="object"){removeNulls(val)}}))}removeNulls(newTopEventData);const indexUpdates=[];indexes.map((index=>({index:index,keys:acebase_core_1.PathInfo.getPathKeys(index.path)}))).sort(((a,b)=>{if(a.keys.lengthb.keys.length){return-1}return 0})).forEach((({index:index})=>{const pathKeys=acebase_core_1.PathInfo.getPathKeys(topEventPath);const indexPathKeys=acebase_core_1.PathInfo.getPathKeys(index.path+"/*");const trailKeys=indexPathKeys.slice(pathKeys.length);const oldValue=topEventData;const newValue=newTopEventData;if(trailKeys.length===0){console.assert(pathKeys.length===indexPathKeys.length,"check logic");const p=this.ipc.isMaster?index.handleRecordUpdate(topEventPath,oldValue,newValue):this.ipc.sendRequest({type:"index.update",path:topEventPath,oldValue:oldValue,newValue:newValue});indexUpdates.push(p);return}const getAllIndexUpdates=(path,oldValue,newValue)=>{if(oldValue===null&&newValue===null){return[]}const pathKeys=acebase_core_1.PathInfo.getPathKeys(path);const indexPathKeys=acebase_core_1.PathInfo.getPathKeys(index.path+"/*");const trailKeys=indexPathKeys.slice(pathKeys.length);if(trailKeys.length===0){console.assert(pathKeys.length===indexPathKeys.length,"check logic");return[{path:path,oldValue:oldValue,newValue:newValue}]}let results=[];let trailPath="";while(trailKeys.length>0){const subKey=trailKeys.shift();if(typeof subKey==="string"&&(subKey==="*"||subKey.startsWith("$"))){const allKeys=oldValue===null?[]:Object.keys(oldValue);newValue!==null&&Object.keys(newValue).forEach((key=>{if(allKeys.indexOf(key)<0){allKeys.push(key)}}));allKeys.forEach((key=>{const childPath=acebase_core_1.PathInfo.getChildPath(trailPath,key);const childValues=getChildValues(key,oldValue,newValue);const subTrailPath=acebase_core_1.PathInfo.getChildPath(path,childPath);const childResults=getAllIndexUpdates(subTrailPath,childValues.oldValue,childValues.newValue);results=results.concat(childResults)}));break}else{const values=getChildValues(subKey,oldValue,newValue);oldValue=values.oldValue;newValue=values.newValue;if(oldValue===null&&newValue===null){break}trailPath=acebase_core_1.PathInfo.getChildPath(trailPath,subKey)}}return results};const results=getAllIndexUpdates(topEventPath,oldValue,newValue);results.forEach((result=>{const p=this.ipc.isMaster?index.handleRecordUpdate(result.path,result.oldValue,result.newValue):this.ipc.sendRequest({type:"index.update",path:result.path,oldValue:result.oldValue,newValue:result.newValue});indexUpdates.push(p)}))}));const callSubscriberWithValues=(sub,oldValue,newValue,variables=[])=>{let trigger=true;let type=sub.type;if(type.startsWith("notify_")){type=type.slice("notify_".length)}if(type==="mutated"){return}else if(type==="child_changed"&&(oldValue===null||newValue===null)){trigger=false}else if(type==="value"||type==="child_changed"){const changes=compareValues(oldValue,newValue);trigger=changes!=="identical"}else if(type==="child_added"){trigger=oldValue===null&&newValue!==null}else if(type==="child_removed"){trigger=oldValue!==null&&newValue===null}const pathKeys=acebase_core_1.PathInfo.getPathKeys(sub.dataPath);variables.forEach((variable=>{const index=pathKeys.indexOf(variable.name);console.assert(index>=0,`Variable "${variable.name}" not found in subscription dataPath "${sub.dataPath}"`);pathKeys[index]=variable.value}));const dataPath=pathKeys.reduce(((path,key)=>acebase_core_1.PathInfo.getChildPath(path,key)),"");trigger&&this.subscriptions.trigger(sub.type,sub.subscriptionPath,dataPath,oldValue,newValue,options.context)};const prepareMutationEvents=(currentPath,oldValue,newValue,compareResult)=>{const batch=[];const result=compareResult||compareValues(oldValue,newValue);if(result==="identical"){return batch}else if(typeof result==="string"){batch.push({path:currentPath,oldValue:oldValue,newValue:newValue})}else{result.changed.forEach((info=>{const childPath=acebase_core_1.PathInfo.getChildPath(currentPath,info.key);const childValues=getChildValues(info.key,oldValue,newValue);const childBatch=prepareMutationEvents(childPath,childValues.oldValue,childValues.newValue,info.change);batch.push(...childBatch)}));result.added.forEach((key=>{const childPath=acebase_core_1.PathInfo.getChildPath(currentPath,key);batch.push({path:childPath,oldValue:null,newValue:newValue[key]})}));if(oldValue instanceof Array&&newValue instanceof Array){result.removed.sort(((a,b)=>a{const childPath=acebase_core_1.PathInfo.getChildPath(currentPath,key);batch.push({path:childPath,oldValue:oldValue[key],newValue:null})}))}return batch};if(transactionLoggingEnabled&&this.settings.type!=="transaction"){result.mutations=(()=>{const trailPath=path.slice(topEventPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);let oldValue=topEventData,newValue=newTopEventData;while(trailKeys.length>0){const key=trailKeys.shift();({oldValue:oldValue,newValue:newValue}=getChildValues(key,oldValue,newValue))}const compareResults=compareValues(oldValue,newValue);const batch=prepareMutationEvents(path,oldValue,newValue,compareResults);const mutations=batch.map((m=>({target:acebase_core_1.PathInfo.getPathKeys(m.path.slice(path.length)),prev:m.oldValue,val:m.newValue})));return mutations})()}const triggerAllEvents=()=>{eventSubscriptions.filter((sub=>!["mutated","mutations","notify_mutated","notify_mutations"].includes(sub.type))).map((sub=>{const keys=acebase_core_1.PathInfo.getPathKeys(sub.dataPath);return{sub:sub,keys:keys}})).sort(((a,b)=>{if(a.keys.lengthb.keys.length){return-1}return 0})).forEach((({sub:sub})=>{const process=(currentPath,oldValue,newValue,variables=[])=>{const trailPath=sub.dataPath.slice(currentPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);while(trailKeys.length>0){const subKey=trailKeys.shift();if(typeof subKey==="string"&&(subKey==="*"||subKey[0]==="$")){const allKeys=oldValue===null?[]:Object.keys(oldValue).map((key=>oldValue instanceof Array?parseInt(key):key));newValue!==null&&Object.keys(newValue).forEach((key=>{const keyOrIndex=newValue instanceof Array?parseInt(key):key;!allKeys.includes(keyOrIndex)&&allKeys.push(key)}));allKeys.forEach((key=>{const childValues=getChildValues(key,oldValue,newValue);const vars=variables.concat({name:subKey,value:key});if(trailKeys.length===0){callSubscriberWithValues(sub,childValues.oldValue,childValues.newValue,vars)}else{process(acebase_core_1.PathInfo.getChildPath(currentPath,subKey),childValues.oldValue,childValues.newValue,vars)}}));return}else{currentPath=acebase_core_1.PathInfo.getChildPath(currentPath,subKey);const childValues=getChildValues(subKey,oldValue,newValue);oldValue=childValues.oldValue;newValue=childValues.newValue}}callSubscriberWithValues(sub,oldValue,newValue,variables)};if(sub.type.startsWith("notify_")&&acebase_core_1.PathInfo.get(sub.eventPath).isAncestorOf(topEventPath)){const isOnParentPath=acebase_core_1.PathInfo.get(sub.eventPath).isParentOf(topEventPath);const trigger=sub.type==="notify_value"||sub.type==="notify_child_changed"&&(!isOnParentPath||!["added","removed"].includes(dataChanges))||sub.type==="notify_child_removed"&&dataChanges==="removed"&&isOnParentPath||sub.type==="notify_child_added"&&dataChanges==="added"&&isOnParentPath;trigger&&this.subscriptions.trigger(sub.type,sub.subscriptionPath,sub.dataPath,null,null,options.context)}else{process(topEventPath,topEventData,newTopEventData)}}));const mutationEvents=eventSubscriptions.filter((sub=>["mutated","mutations","notify_mutated","notify_mutations"].includes(sub.type)));mutationEvents.forEach((sub=>{let currentPath=topEventPath;const trailPath=sub.eventPath.slice(currentPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);let oldValue=topEventData,newValue=newTopEventData;while(trailKeys.length>0){const subKey=trailKeys.shift();currentPath=acebase_core_1.PathInfo.getChildPath(currentPath,subKey);const childValues=getChildValues(subKey,oldValue,newValue);oldValue=childValues.oldValue;newValue=childValues.newValue}const batch=prepareMutationEvents(currentPath,oldValue,newValue);if(batch.length===0){return}const isNotifyEvent=sub.type.startsWith("notify_");if(["mutated","notify_mutated"].includes(sub.type)){batch.forEach(((mutation,index)=>{const context=options.context;const prevVal=isNotifyEvent?null:mutation.oldValue;const newVal=isNotifyEvent?null:mutation.newValue;this.subscriptions.trigger(sub.type,sub.subscriptionPath,mutation.path,prevVal,newVal,context)}))}else if(["mutations","notify_mutations"].includes(sub.type)){const values=isNotifyEvent?null:batch.map((m=>({target:acebase_core_1.PathInfo.getPathKeys(m.path.slice(sub.subscriptionPath.length)),prev:m.oldValue,val:m.newValue})));this.subscriptions.trigger(sub.type,sub.subscriptionPath,sub.subscriptionPath,null,values,options.context)}}))};if(options.waitForIndexUpdates===false){indexUpdates.splice(0)}await Promise.all(indexUpdates);defer(triggerAllEvents);return result}getChildren(path,options){throw new Error("This method must be implemented by subclass")}async getNodeValue(path,options={}){const node=await this.getNode(path,options);return node.value}getNode(path,options){throw new Error("This method must be implemented by subclass")}getNodeInfo(path,options){throw new Error("This method must be implemented by subclass")}setNode(path,value,options){throw new Error("This method must be implemented by subclass")}updateNode(path,updates,options){throw new Error("This method must be implemented by subclass")}async transactNode(path,callback,options={no_lock:false,suppress_events:false,context:null}){const useFakeLock=options&&options.no_lock===true;const tid=this.createTid();const lock=useFakeLock?{tid:tid,release:NOOP}:await this.nodeLocker.lock(path,tid,true,"transactNode");try{let changed=false;const changeCallback=()=>{changed=true};if(useFakeLock){this.subscriptions.add(path,"notify_value",changeCallback)}const node=await this.getNode(path,{tid:tid});const checkRevision=node.revision;let newValue;try{newValue=callback(node.value);if(newValue instanceof Promise){newValue=await newValue.catch((err=>{this.debug.error(`Error in transaction callback: ${err.message}`)}))}}catch(err){this.debug.error(`Error in transaction callback: ${err.message}`)}if(typeof newValue==="undefined"){return}if(useFakeLock){this.subscriptions.remove(path,"notify_value",changeCallback)}if(changed){throw new node_errors_1.NodeRevisionError("Node changed")}const cursor=await this.setNode(path,newValue,{assert_revision:checkRevision,tid:lock.tid,suppress_events:options.suppress_events,context:options.context});return cursor}catch(err){if(err instanceof node_errors_1.NodeRevisionError){console.warn(`node value changed, running again. Error: ${err.message}`);return this.transactNode(path,callback,options)}else{throw err}}finally{lock.release()}}async matchNode(path,criteria,options){var _a;const tid=(_a=options===null||options===void 0?void 0:options.tid)!==null&&_a!==void 0?_a:acebase_core_1.ID.generate();const checkNode=async(path,criteria)=>{if(criteria.length===0){return Promise.resolve(true)}const criteriaKeys=criteria.reduce(((keys,cr)=>{let key=cr.key;if(typeof key==="string"&&key.includes("/")){key=key.slice(0,key.indexOf("/"))}if(keys.indexOf(key)<0){keys.push(key)}return keys}),[]);const unseenKeys=criteriaKeys.slice();let isMatch=true;const delayedMatchPromises=[];try{await this.getChildren(path,{tid:tid,keyFilter:criteriaKeys}).next((childInfo=>{var _a;const keyOrIndex=(_a=childInfo.key)!==null&&_a!==void 0?_a:childInfo.index;unseenKeys.includes(keyOrIndex)&&unseenKeys.splice(unseenKeys.indexOf(childInfo.key),1);const keyCriteria=criteria.filter((cr=>cr.key===keyOrIndex)).map((cr=>({op:cr.op,compare:cr.compare})));const keyResult=keyCriteria.length>0?checkChild(childInfo,keyCriteria):{isMatch:true,promises:[]};isMatch=keyResult.isMatch;if(isMatch){delayedMatchPromises.push(...keyResult.promises);const childCriteria=criteria.filter((cr=>typeof cr.key==="string"&&cr.key.startsWith(`${typeof keyOrIndex==="number"?`[${keyOrIndex}]`:keyOrIndex}/`))).map((cr=>{const key=cr.key.slice(cr.key.indexOf("/")+1);return{key:key,op:cr.op,compare:cr.compare}}));if(childCriteria.length>0){const childPath=acebase_core_1.PathInfo.getChildPath(path,childInfo.key);const childPromise=checkNode(childPath,childCriteria).then((isMatch=>({isMatch:isMatch})));delayedMatchPromises.push(childPromise)}}if(!isMatch||unseenKeys.length===0){return false}}));if(isMatch){const results=await Promise.all(delayedMatchPromises);isMatch=results.every((res=>res.isMatch))}if(!isMatch){return false}isMatch=unseenKeys.every((keyOrIndex=>{const childInfo=new node_info_1.NodeInfo(Object.assign(Object.assign(Object.assign({},typeof keyOrIndex==="number"&&{index:keyOrIndex}),typeof keyOrIndex==="string"&&{key:keyOrIndex}),{exists:false}));const childCriteria=criteria.filter((cr=>typeof cr.key==="string"&&cr.key.startsWith(`${typeof keyOrIndex==="number"?`[${keyOrIndex}]`:keyOrIndex}/`))).map((cr=>({op:cr.op,compare:cr.compare})));if(childCriteria.length>0&&!checkChild(childInfo,childCriteria).isMatch){return false}const keyCriteria=criteria.filter((cr=>cr.key===keyOrIndex)).map((cr=>({op:cr.op,compare:cr.compare})));if(keyCriteria.length===0){return true}const result=checkChild(childInfo,keyCriteria);return result.isMatch}));return isMatch}catch(err){this.debug.error(`Error matching on "${path}": `,err);throw err}};const checkChild=(child,criteria)=>{const promises=[];const isMatch=criteria.every((f=>{let proceed=true;if(f.op==="!exists"||f.op==="=="&&(typeof f.compare==="undefined"||f.compare===null)){proceed=!child.exists}else if(f.op==="exists"||f.op==="!="&&(typeof f.compare==="undefined"||f.compare===null)){proceed=child.exists}else if((f.op==="contains"||f.op==="!contains")&&f.compare instanceof Array&&f.compare.length===0){proceed=true}else if(!child.exists){proceed=false}else{if(child.address){if(child.valueType===node_value_types_1.VALUE_TYPES.OBJECT&&["has","!has"].indexOf(f.op)>=0){const op=f.op==="has"?"exists":"!exists";const p=checkNode(child.path,[{key:f.compare,op:op}]).then((isMatch=>({key:child.key,isMatch:isMatch})));promises.push(p);proceed=true}else if(child.valueType===node_value_types_1.VALUE_TYPES.ARRAY&&["contains","!contains"].indexOf(f.op)>=0){const p=this.getNode(child.path,{tid:tid}).then((({value:arr})=>{const isMatch=f.op==="contains"?f.compare instanceof Array?f.compare.every((val=>arr.includes(val))):arr.includes(f.compare):f.compare instanceof Array?!f.compare.some((val=>arr.includes(val))):!arr.includes(f.compare);return{key:child.key,isMatch:isMatch}}));promises.push(p);proceed=true}else if(child.valueType===node_value_types_1.VALUE_TYPES.STRING){const p=this.getNode(child.path,{tid:tid}).then((node=>({key:child.key,isMatch:this.test(node.value,f.op,f.compare)})));promises.push(p);proceed=true}else{proceed=false}}else if(child.type===node_value_types_1.VALUE_TYPES.OBJECT&&["has","!has"].indexOf(f.op)>=0){const has=f.compare in child.value;proceed=has&&f.op==="has"||!has&&f.op==="!has"}else if(child.type===node_value_types_1.VALUE_TYPES.ARRAY&&["contains","!contains"].indexOf(f.op)>=0){const contains=child.value.indexOf(f.compare)>=0;proceed=contains&&f.op==="contains"||!contains&&f.op==="!contains"}else{let ret=this.test(child.value,f.op,f.compare);if(ret instanceof Promise){promises.push(ret);ret=true}proceed=ret}}return proceed}));return{isMatch:isMatch,promises:promises}};return checkNode(path,criteria)}test(val,op,compare){if(op==="<"){return val"){return val>compare}if(op===">="){return val>=compare}if(op==="in"){return compare.indexOf(val)>=0}if(op==="!in"){return compare.indexOf(val)<0}if(op==="like"||op==="!like"){const pattern="^"+compare.replace(/[-[\]{}()+.,\\^$|#\s]/g,"\\$&").replace(/\?/g,".").replace(/\*/g,".*?")+"$";const re=new RegExp(pattern,"i");const isMatch=re.test(val.toString());return op==="like"?isMatch:!isMatch}if(op==="matches"){return compare.test(val.toString())}if(op==="!matches"){return!compare.test(val.toString())}if(op==="between"){return val>=compare[0]&&val<=compare[1]}if(op==="!between"){return valcompare[1]}if(op==="has"||op==="!has"){const has=typeof val==="object"&&compare in val;return op==="has"?has:!has}if(op==="contains"||op==="!contains"){const includes=typeof val==="object"&&val instanceof Array&&val.includes(compare);return op==="contains"?includes:!includes}return false}async exportNode(path,writeFn,options={format:"json",type_safe:true}){if((options===null||options===void 0?void 0:options.format)!=="json"){throw new Error("Only json output is currently supported")}const write=typeof writeFn!=="function"?writeFn.write.bind(writeFn):writeFn;const stringifyValue=(type,val)=>{const escape=str=>str.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/[\u0000-\u001f]/g,(ch=>`\\u${ch.charCodeAt(0).toString(16).padStart(4,"0")}`));if(type===node_value_types_1.VALUE_TYPES.DATETIME){val=`"${val.toISOString()}"`;if(options.type_safe){val=`{".type":"date",".val":${val}}`}}else if(type===node_value_types_1.VALUE_TYPES.STRING){val=`"${escape(val)}"`}else if(type===node_value_types_1.VALUE_TYPES.ARRAY){val="[]"}else if(type===node_value_types_1.VALUE_TYPES.OBJECT){val="{}"}else if(type===node_value_types_1.VALUE_TYPES.BINARY){val=`"${escape(acebase_core_1.ascii85.encode(val))}"`;if(options.type_safe){val=`{".type":"binary",".val":${val}}`}}else if(type===node_value_types_1.VALUE_TYPES.REFERENCE){val=`"${val.path}"`;if(options.type_safe){val=`{".type":"reference",".val":${val}}`}}else if(type===node_value_types_1.VALUE_TYPES.BIGINT){val=`"${val}"`;if(options.type_safe){val=`{".type":"bigint",".val":${val}}`}}return val};let objStart="",objEnd="";const nodeInfo=await this.getNodeInfo(path);if(!nodeInfo.exists){return write("null")}else if(nodeInfo.type===node_value_types_1.VALUE_TYPES.OBJECT){objStart="{";objEnd="}"}else if(nodeInfo.type===node_value_types_1.VALUE_TYPES.ARRAY){objStart="[";objEnd="]"}else{const node=await this.getNode(path);const val=stringifyValue(nodeInfo.type,node.value);return write(val)}if(objStart){const p=write(objStart);if(p instanceof Promise){await p}}let output="",outputCount=0;const pending=[];await this.getChildren(path).next((childInfo=>{if(childInfo.address){pending.push(childInfo)}else{if(outputCount++>0){output+=","}if(typeof childInfo.key==="string"){output+=`"${childInfo.key}":`}output+=stringifyValue(childInfo.type,childInfo.value)}}));if(output){const p=write(output);if(p instanceof Promise){await p}}while(pending.length>0){const childInfo=pending.shift();let output=outputCount++>0?",":"";const key=typeof childInfo.index==="number"?childInfo.index:childInfo.key;if(typeof key==="string"){output+=`"${key}":`}if(output){const p=write(output);if(p instanceof Promise){await p}}await this.exportNode(acebase_core_1.PathInfo.getChildPath(path,key),write,options)}if(objEnd){const p=write(objEnd);if(p instanceof Promise){await p}}}async importNode(path,read,options={format:"json",method:"set"}){const chunkSize=256*1024;const maxQueueBytes=1024*1024;const state={data:"",index:0,offset:0,queue:[],queueStartByte:0,timesFlushed:0,get processedBytes(){return this.offset+this.index}};const readNextChunk=async(append=false)=>{let data=await read(chunkSize);if(data===null){if(state.data){throw new Error(`Unexpected EOF at index ${state.offset+state.data.length}`)}else{throw new Error("Unable to read data from stream")}}else if(typeof data==="object"){data=acebase_core_1.Utils.decodeString(data)}if(append){state.data+=data}else{state.offset+=state.data.length;state.data=data;state.index=0}};const readBytes=async length=>{let str="";if(state.index+length>=state.data.length){str=state.data.slice(state.index);length-=str.length;await readNextChunk()}str+=state.data.slice(state.index,state.index+length);state.index+=length;return str};const assertBytes=async length=>{if(state.index+length>state.data.length){await readNextChunk(true)}if(state.index+length>state.data.length){throw new Error("Not enough data available from stream")}};const consumeToken=async token=>{const str=await readBytes(token.length);if(str!==token){throw new Error(`Unexpected character "${str[0]}" at index ${state.offset+state.index}, expected "${token}"`)}};const consumeSpaces=async()=>{const spaces=[" ","\t","\r","\n"];while(true){if(state.index>=state.data.length){await readNextChunk()}if(spaces.includes(state.data[state.index])){state.index++}else{break}}};const peekBytes=async length=>{await assertBytes(length);const index=state.index;return state.data.slice(index,index+length)};const peekValueType=async()=>{await consumeSpaces();const ch=await peekBytes(1);switch(ch){case'"':return"string";case"{":return"object";case"[":return"array";case"n":return"null";case"u":return"undefined";case"t":case"f":return"boolean";default:{if(ch==="-"||ch>="0"&&ch<="9"){return"number"}throw new Error(`Unknown value at index ${state.offset+state.index}`)}}};const readString=async()=>{await consumeToken('"');let str="";let i=state.index;while(state.data[i]!=='"'||state.data[i-1]==="\\"){i++;if(i>=state.data.length){str+=state.data.slice(state.index);await readNextChunk();i=0}}str+=state.data.slice(state.index,i);state.index=i+1;return unescape(str)};const readBoolean=async()=>{if(state.data[state.index]==="t"){await consumeToken("true")}else if(state.data[state.index]==="f"){await consumeToken("false")}throw new Error(`Expected true or false at index ${state.offset+state.index}`)};const readNumber=async()=>{let str="";let i=state.index;const nrChars=["-","0","1","2","3","4","5","6","7","8","9",".","e","b","f","x","o","n"];while(nrChars.includes(state.data[i])){i++;if(i>=state.data.length){str+=state.data.slice(state.index);await readNextChunk();i=0}}str+=state.data.slice(state.index,i);state.index=i;const nr=str.endsWith("n")?BigInt(str.slice(0,-1)):str.includes(".")?parseFloat(str):parseInt(str);return nr};const readValue=async()=>{await consumeSpaces();const type=await peekValueType();const value=await(()=>{switch(type){case"string":return readString();case"object":return{};case"array":return[];case"number":return readNumber();case"null":return null;case"undefined":return undefined;case"boolean":return readBoolean()}})();return{type:type,value:value}};const unescape=str=>str.replace(/\\n/g,"\n").replace(/\\"/g,'"');const getTypeSafeValue=(path,obj)=>{const type=obj[".type"];let val=obj[".val"];switch(type){case"Date":case"date":{val=new Date(val);break}case"Buffer":case"binary":{val=unescape(val);if(val.startsWith("<~")){val=acebase_core_1.ascii85.decode(val)}else{throw new Error(`Import error: Unexpected encoding for value for value at path "/${path}"`)}break}case"PathReference":case"reference":{val=new acebase_core_1.PathReference(val);break}case"bigint":{val=BigInt(val);break}default:throw new Error(`Import error: Unsupported type "${type}" for value at path "/${path}"`)}return val};const context={acebase_import_id:acebase_core_1.ID.generate()};const childOptions={suppress_events:options.suppress_events,context:context};const enqueue=async(target,value)=>{state.queue.push({target:target,value:value});if(state.processedBytes>=state.queueStartByte+maxQueueBytes){const operations=state.queue.reduce(((updates,item)=>{if(item.target.path===path){updates.push(Object.assign({op:options.method==="set"&&state.timesFlushed===0?"set":"update"},item))}else{const parent=updates.find((other=>other.target.isParentOf(item.target)));if(parent){parent.value[item.target.key]=item.value}else{updates.push(Object.assign({op:options.method==="merge"?"update":"set"},item))}}return updates}),[]);state.queueStartByte=state.processedBytes;state.queue=[];state.timesFlushed++}if(target.path===path){}};const importObject=async target=>{await consumeToken("{");await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="}"){state.index++;return this.setNode(target.path,{},childOptions)}let childCount=0;let obj={};let flushedBefore=false;const flushObject=async()=>{let p;if(!flushedBefore){flushedBefore=true;p=this.setNode(target.path,obj,childOptions)}else if(Object.keys(obj).length>0){p=this.updateNode(target.path,obj,childOptions)}obj={};if(p){await p}};const promises=[];while(true){await consumeSpaces();const property=await readString();await consumeSpaces();await consumeToken(":");await consumeSpaces();const{value:value,type:type}=await readValue();obj[property]=value;childCount++;if(["object","array"].includes(type)){promises.push(flushObject());if(type==="object"){await importObject(target.child(property))}else{await importArray(target.child(property))}}await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="}"){state.index++;break}await consumeToken(",")}const isTypedValue=childCount===2&&".type"in obj&&".val"in obj;if(isTypedValue){const val=getTypeSafeValue(target.path,obj);return this.setNode(target.path,val,childOptions)}promises.push(flushObject());await Promise.all(promises)};const importArray=async target=>{await consumeToken("[");await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="]"){state.index++;return this.setNode(target.path,[],childOptions)}let flushedBefore=false;let arr=[];let updates={};const flushArray=async()=>{let p;if(!flushedBefore){flushedBefore=true;p=this.setNode(target.path,arr,childOptions);arr=null}else if(Object.keys(updates).length>0){p=this.updateNode(target.path,updates,childOptions);updates={}}if(p){await p}};const pushChild=(value,index)=>{if(flushedBefore){updates[index]=value}else{arr.push(value)}};const promises=[];let index=0;while(true){await consumeSpaces();const{value:value,type:type}=await readValue();pushChild(value,index);if(["object","array"].includes(type)){promises.push(flushArray());if(type==="object"){await importObject(target.child(index))}else{await importArray(target.child(index))}}await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="]"){state.index++;break}await consumeToken(",");index++}promises.push(flushArray());await Promise.all(promises)};const start=async()=>{const{value:value,type:type}=await readValue();if(["object","array"].includes(type)){const target=acebase_core_1.PathInfo.get(path);if(type==="object"){await importObject(target)}else{await importArray(target)}}else{await this.setNode(path,value,childOptions)}};return start()}setSchema(path,schema){if(typeof schema==="undefined"){throw new TypeError("schema argument must be given")}if(schema===null){const i=this._schemas.findIndex((s=>s.path===path));i>=0&&this._schemas.splice(i,1);return}const definition=new acebase_core_1.SchemaDefinition(schema);const item=this._schemas.find((s=>s.path===path));if(item){item.schema=definition}else{this._schemas.push({path:path,schema:definition});this._schemas.sort(((a,b)=>{const ka=acebase_core_1.PathInfo.getPathKeys(a.path),kb=acebase_core_1.PathInfo.getPathKeys(b.path);if(ka.length===kb.length){return 0}return ka.lengthitem.path===path));return item?{path:path,schema:item.schema.source,text:item.schema.text}:null}getSchemas(){return this._schemas.map((item=>({path:item.path,schema:item.schema.source,text:item.schema.text})))}validateSchema(path,value,options={updates:false}){let result={ok:true};const pathInfo=acebase_core_1.PathInfo.get(path);this._schemas.filter((s=>pathInfo.isOnTrailOf(s.path))).every((s=>{if(pathInfo.isDescendantOf(s.path)){const ancestorPath=acebase_core_1.PathInfo.fillVariables(s.path,path);const trailKeys=pathInfo.keys.slice(acebase_core_1.PathInfo.getPathKeys(s.path).length);result=s.schema.check(ancestorPath,value,options.updates,trailKeys);return result.ok}const trailKeys=acebase_core_1.PathInfo.getPathKeys(s.path).slice(pathInfo.keys.length);const partial=options.updates===true&&trailKeys.length===0;const check=(path,value,trailKeys)=>{if(trailKeys.length===0){return s.schema.check(path,value,partial)}else if(value===null){return{ok:true}}const key=trailKeys[0];if(typeof key==="string"&&(key==="*"||key[0]==="$")){if(value===null||typeof value!=="object"){return{ok:true}}let result;Object.keys(value).every((childKey=>{const childPath=acebase_core_1.PathInfo.getChildPath(path,childKey);const childValue=value[childKey];result=check(childPath,childValue,trailKeys.slice(1));return result.ok}));return result}else{const childPath=acebase_core_1.PathInfo.getChildPath(path,key);const childValue=value[key];return check(childPath,childValue,trailKeys.slice(1))}};result=check(path,value,trailKeys);return result.ok}));return result}}exports.Storage=Storage},{"../data-index":40,"../ipc":33,"../node-errors":36,"../node-info":37,"../node-value-types":39,"../promise-fs":41,"./indexes":53,"acebase-core":12}],53:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createIndex=void 0;var create_index_1=require("./create-index");Object.defineProperty(exports,"createIndex",{enumerable:true,get:function(){return create_index_1.createIndex}})},{"./create-index":43}]},{},[32])(32)})); \ No newline at end of file +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.acebase=f()}})((function(){var define,module,exports;return function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,(function(r){var n=e[i][1][r];return o(n||r)}),p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i{this.emit("ready")}));this.recovery={repairNode:async(path,options)=>{if(this.api.storage instanceof binary_1.AceBaseStorage){await this.api.storage.repairNode(path,options)}else if(!this.api.storage.repairNode){throw new Error(`repairNode is not supported with chosen storage engine`)}}}}async close(){await this.api.storage.close()}get settings(){const ipc=this.api.storage.ipc,debug=this.debug;return{get logLevel(){return debug.level},set logLevel(level){debug.setLevel(level)},get ipcEvents(){return ipc.eventsEnabled},set ipcEvents(enabled){ipc.eventsEnabled=enabled}}}static WithLocalStorage(dbname,settings={}){const db=(0,local_storage_1.createLocalStorageInstance)(dbname,settings);return db}static WithIndexedDB(dbname,init={}){throw new Error(`IndexedDB storage can only be used in browser contexts`)}}exports.AceBase=AceBase},{"./api-local":3,"./storage/binary":13,"./storage/custom/indexed-db/settings":20,"./storage/custom/local-storage":22,"acebase-core":38}],3:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.LocalApi=void 0;const acebase_core_1=require("acebase-core");const binary_1=require("./storage/binary");const sqlite_1=require("./storage/sqlite");const mssql_1=require("./storage/mssql");const custom_1=require("./storage/custom");const node_value_types_1=require("./node-value-types");const query_1=require("./query");class LocalApi extends acebase_core_1.Api{constructor(dbname="default",init,readyCallback){super();this.db=init.db;const storageEnv={logLevel:init.settings.logLevel};if(typeof init.settings.storage==="object"){if(sqlite_1.SQLiteStorageSettings&&init.settings.storage instanceof sqlite_1.SQLiteStorageSettings){this.storage=new sqlite_1.SQLiteStorage(dbname,init.settings.storage,storageEnv)}else if(mssql_1.MSSQLStorageSettings&&init.settings.storage instanceof mssql_1.MSSQLStorageSettings){this.storage=new mssql_1.MSSQLStorage(dbname,init.settings.storage,storageEnv)}else if(custom_1.CustomStorageSettings&&init.settings.storage instanceof custom_1.CustomStorageSettings){this.storage=new custom_1.CustomStorage(dbname,init.settings.storage,storageEnv)}else{const storageSettings=init.settings.storage instanceof binary_1.AceBaseStorageSettings?init.settings.storage:new binary_1.AceBaseStorageSettings(init.settings.storage);this.storage=new binary_1.AceBaseStorage(dbname,storageSettings,storageEnv)}}else{this.storage=new binary_1.AceBaseStorage(dbname,new binary_1.AceBaseStorageSettings,storageEnv)}this.storage.on("ready",readyCallback)}async stats(options){return this.storage.stats}subscribe(path,event,callback){this.storage.subscriptions.add(path,event,callback)}unsubscribe(path,event,callback){this.storage.subscriptions.remove(path,event,callback)}async set(path,value,options={suppress_events:false,context:null}){const cursor=await this.storage.setNode(path,value,{suppress_events:options.suppress_events,context:options.context});return Object.assign({},cursor&&{cursor:cursor})}async update(path,updates,options={suppress_events:false,context:null}){const cursor=await this.storage.updateNode(path,updates,{suppress_events:options.suppress_events,context:options.context});return Object.assign({},cursor&&{cursor:cursor})}get transactionLoggingEnabled(){return this.storage.settings.transactions&&this.storage.settings.transactions.log===true}async get(path,options){if(!options){options={}}if(typeof options.include!=="undefined"&&!(options.include instanceof Array)){throw new TypeError(`options.include must be an array of key names`)}if(typeof options.exclude!=="undefined"&&!(options.exclude instanceof Array)){throw new TypeError(`options.exclude must be an array of key names`)}if(["undefined","boolean"].indexOf(typeof options.child_objects)<0){throw new TypeError(`options.child_objects must be a boolean`)}const node=await this.storage.getNode(path,options);return{value:node.value,context:{acebase_cursor:node.cursor},cursor:node.cursor}}async transaction(path,callback,options={suppress_events:false,context:null}){const cursor=await this.storage.transactNode(path,callback,{suppress_events:options.suppress_events,context:options.context});return Object.assign({},cursor&&{cursor:cursor})}async exists(path){const nodeInfo=await this.storage.getNodeInfo(path);return nodeInfo.exists}async query(path,query,options={snapshots:false}){const results=await(0,query_1.query)(this,path,query,options);return results}createIndex(path,key,options){return this.storage.indexes.create(path,key,options)}async getIndexes(){return this.storage.indexes.list()}async deleteIndex(filePath){return this.storage.indexes.delete(filePath)}async reflect(path,type,args){args=args||{};const getChildren=async(path,limit=50,skip=0,from=null)=>{if(typeof limit==="string"){limit=parseInt(limit)}if(typeof skip==="string"){skip=parseInt(skip)}if(["null","undefined"].includes(from)){from=null}const children=[];let n=0,stop=false,more=false;await this.storage.getChildren(path).next((childInfo=>{if(stop){more=true;return false}n++;const include=from!==null?childInfo.key>from:skip===0||n>skip;if(include){children.push(Object.assign({key:typeof childInfo.key==="string"?childInfo.key:childInfo.index,type:childInfo.valueTypeName,value:childInfo.value},typeof childInfo.address==="object"&&"pageNr"in childInfo.address&&{address:{pageNr:childInfo.address.pageNr,recordNr:childInfo.address.recordNr}}))}stop=limit>0&&children.length===limit})).catch((err=>{}));return{more:more,list:children}};switch(type){case"children":{return getChildren(path,args.limit,args.skip,args.from)}case"info":{const info={key:"",exists:false,type:"unknown",value:undefined,address:undefined,children:{count:0,more:false,list:[]}};const nodeInfo=await this.storage.getNodeInfo(path,{include_child_count:args.child_count===true});info.key=typeof nodeInfo.key!=="undefined"?nodeInfo.key:nodeInfo.index;info.exists=nodeInfo.exists;info.type=nodeInfo.exists?nodeInfo.valueTypeName:undefined;info.value=nodeInfo.value;info.address=typeof nodeInfo.address==="object"&&"pageNr"in nodeInfo.address?{pageNr:nodeInfo.address.pageNr,recordNr:nodeInfo.address.recordNr}:undefined;const isObjectOrArray=nodeInfo.exists&&nodeInfo.address&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(nodeInfo.type);if(args.child_count===true){info.children={count:isObjectOrArray?nodeInfo.childCount:0}}else if(typeof args.child_limit==="number"&&args.child_limit>0){if(isObjectOrArray){info.children=await getChildren(path,args.child_limit,args.child_skip,args.child_from)}}return info}}}export(path,stream,options={format:"json",type_safe:true}){return this.storage.exportNode(path,stream,options)}import(path,read,options={format:"json",suppress_events:false,method:"set"}){return this.storage.importNode(path,read,options)}async setSchema(path,schema){return this.storage.setSchema(path,schema)}async getSchema(path){return this.storage.getSchema(path)}async getSchemas(){return this.storage.getSchemas()}async validateSchema(path,value,isUpdate){return this.storage.validateSchema(path,value,{updates:isUpdate})}async getMutations(filter){if(typeof this.storage.getMutations!=="function"){throw new Error("Used storage type does not support getMutations")}if(typeof filter!=="object"){throw new Error("No filter specified")}if(typeof filter.cursor!=="string"&&typeof filter.timestamp!=="number"){throw new Error("No cursor or timestamp given")}return this.storage.getMutations(filter)}async getChanges(filter){if(typeof this.storage.getChanges!=="function"){throw new Error("Used storage type does not support getChanges")}if(typeof filter!=="object"){throw new Error("No filter specified")}if(typeof filter.cursor!=="string"&&typeof filter.timestamp!=="number"){throw new Error("No cursor or timestamp given")}return this.storage.getChanges(filter)}}exports.LocalApi=LocalApi},{"./node-value-types":12,"./query":15,"./storage/binary":13,"./storage/custom":18,"./storage/mssql":13,"./storage/sqlite":13,"acebase-core":38}],4:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AsyncTaskBatch=void 0;class AsyncTaskBatch{constructor(limit=1e3,options){this.limit=limit;this.options=options;this.added=0;this.scheduled=[];this.running=0;this.results=[];this.done=false}async execute(task,index){var _a,_b;try{this.running++;const result=await task();this.results[index]=result;this.running--;if(this.running===0&&this.scheduled.length===0){this.done=true;(_a=this.doneCallback)===null||_a===void 0?void 0:_a.call(this,this.results)}else if(this.scheduled.length>0){const next=this.scheduled.shift();this.execute(next.task,next.index)}}catch(err){this.done=true;(_b=this.errorCallback)===null||_b===void 0?void 0:_b.call(this,err)}}add(task){var _a;if(this.done){throw new Error(`Cannot add to a batch that has already finished. Use wait option and start batch processing manually if you are adding tasks in an async loop`)}const index=this.added++;if(((_a=this.options)===null||_a===void 0?void 0:_a.wait)!==true&&this.running{this.doneCallback=resolve;this.errorCallback=reject}));return this.results}}exports.AsyncTaskBatch=AsyncTaskBatch},{}],5:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SchemaValidationError=exports.StorageSettings=exports.ICustomStorageNodeMetaData=exports.ICustomStorageNode=exports.CustomStorageHelpers=exports.CustomStorageSettings=exports.CustomStorageTransaction=exports.MSSQLStorageSettings=exports.SQLiteStorageSettings=exports.AceBaseStorageSettings=exports.IndexedDBStorageSettings=exports.LocalStorageSettings=exports.AceBaseLocalSettings=exports.AceBase=exports.PartialArray=exports.proxyAccess=exports.ID=exports.ObjectCollection=exports.TypeMappings=exports.PathReference=exports.EventSubscription=exports.EventStream=exports.DataReferencesArray=exports.DataSnapshotsArray=exports.DataReference=exports.DataSnapshot=void 0;const acebase_core_1=require("acebase-core");Object.defineProperty(exports,"DataReference",{enumerable:true,get:function(){return acebase_core_1.DataReference}});Object.defineProperty(exports,"DataSnapshot",{enumerable:true,get:function(){return acebase_core_1.DataSnapshot}});Object.defineProperty(exports,"EventSubscription",{enumerable:true,get:function(){return acebase_core_1.EventSubscription}});Object.defineProperty(exports,"PathReference",{enumerable:true,get:function(){return acebase_core_1.PathReference}});Object.defineProperty(exports,"TypeMappings",{enumerable:true,get:function(){return acebase_core_1.TypeMappings}});Object.defineProperty(exports,"ID",{enumerable:true,get:function(){return acebase_core_1.ID}});Object.defineProperty(exports,"proxyAccess",{enumerable:true,get:function(){return acebase_core_1.proxyAccess}});Object.defineProperty(exports,"DataSnapshotsArray",{enumerable:true,get:function(){return acebase_core_1.DataSnapshotsArray}});Object.defineProperty(exports,"ObjectCollection",{enumerable:true,get:function(){return acebase_core_1.ObjectCollection}});Object.defineProperty(exports,"DataReferencesArray",{enumerable:true,get:function(){return acebase_core_1.DataReferencesArray}});Object.defineProperty(exports,"EventStream",{enumerable:true,get:function(){return acebase_core_1.EventStream}});Object.defineProperty(exports,"PartialArray",{enumerable:true,get:function(){return acebase_core_1.PartialArray}});const acebase_local_1=require("./acebase-local");const acebase_browser_1=require("./acebase-browser");Object.defineProperty(exports,"AceBase",{enumerable:true,get:function(){return acebase_browser_1.BrowserAceBase}});const custom_1=require("./storage/custom");const acebase={AceBase:acebase_browser_1.BrowserAceBase,AceBaseLocalSettings:acebase_local_1.AceBaseLocalSettings,DataReference:acebase_core_1.DataReference,DataSnapshot:acebase_core_1.DataSnapshot,EventSubscription:acebase_core_1.EventSubscription,PathReference:acebase_core_1.PathReference,TypeMappings:acebase_core_1.TypeMappings,CustomStorageSettings:custom_1.CustomStorageSettings,CustomStorageTransaction:custom_1.CustomStorageTransaction,CustomStorageHelpers:custom_1.CustomStorageHelpers,ID:acebase_core_1.ID,proxyAccess:acebase_core_1.proxyAccess,DataSnapshotsArray:acebase_core_1.DataSnapshotsArray};window.acebase=acebase;window.AceBase=acebase_browser_1.BrowserAceBase;exports.default=acebase;var acebase_local_2=require("./acebase-local");Object.defineProperty(exports,"AceBaseLocalSettings",{enumerable:true,get:function(){return acebase_local_2.AceBaseLocalSettings}});Object.defineProperty(exports,"LocalStorageSettings",{enumerable:true,get:function(){return acebase_local_2.LocalStorageSettings}});Object.defineProperty(exports,"IndexedDBStorageSettings",{enumerable:true,get:function(){return acebase_local_2.IndexedDBStorageSettings}});var binary_1=require("./storage/binary");Object.defineProperty(exports,"AceBaseStorageSettings",{enumerable:true,get:function(){return binary_1.AceBaseStorageSettings}});var sqlite_1=require("./storage/sqlite");Object.defineProperty(exports,"SQLiteStorageSettings",{enumerable:true,get:function(){return sqlite_1.SQLiteStorageSettings}});var mssql_1=require("./storage/mssql");Object.defineProperty(exports,"MSSQLStorageSettings",{enumerable:true,get:function(){return mssql_1.MSSQLStorageSettings}});var custom_2=require("./storage/custom");Object.defineProperty(exports,"CustomStorageTransaction",{enumerable:true,get:function(){return custom_2.CustomStorageTransaction}});Object.defineProperty(exports,"CustomStorageSettings",{enumerable:true,get:function(){return custom_2.CustomStorageSettings}});Object.defineProperty(exports,"CustomStorageHelpers",{enumerable:true,get:function(){return custom_2.CustomStorageHelpers}});Object.defineProperty(exports,"ICustomStorageNode",{enumerable:true,get:function(){return custom_2.ICustomStorageNode}});Object.defineProperty(exports,"ICustomStorageNodeMetaData",{enumerable:true,get:function(){return custom_2.ICustomStorageNodeMetaData}});var storage_1=require("./storage");Object.defineProperty(exports,"StorageSettings",{enumerable:true,get:function(){return storage_1.StorageSettings}});Object.defineProperty(exports,"SchemaValidationError",{enumerable:true,get:function(){return storage_1.SchemaValidationError}})},{"./acebase-browser":1,"./acebase-local":2,"./storage":25,"./storage/binary":13,"./storage/custom":18,"./storage/mssql":13,"./storage/sqlite":13,"acebase-core":38}],6:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.IPCPeer=void 0;const acebase_core_1=require("acebase-core");const ipc_1=require("./ipc");class IPCPeer extends ipc_1.AceBaseIPCPeer{constructor(storage){super(storage,acebase_core_1.ID.generate());this.masterPeerId=this.id;this.ipcType="browser.bcc";window.addEventListener("beforeunload",(()=>{this.exit()}));if(typeof window.BroadcastChannel!=="undefined"){this.channel=new BroadcastChannel(`acebase:${storage.name}`)}else{const listeners=[null];const notImplemented=()=>{throw new Error("Not implemented")};this.channel={name:`acebase:${storage.name}`,postMessage:message=>{const messageId=acebase_core_1.ID.generate(),key=`acebase:${storage.name}:${this.id}:${messageId}`,payload=JSON.stringify(acebase_core_1.Transport.serialize(message));localStorage.setItem(key,payload);setTimeout((()=>localStorage.removeItem(key)),10)},set onmessage(handler){listeners[0]=handler},set onmessageerror(handler){notImplemented()},close(){notImplemented()},addEventListener(event,callback){if(event!=="message"){notImplemented()}listeners.push(callback)},removeEventListener(event,callback){const i=listeners.indexOf(callback);i>=1&&listeners.splice(i,1)},dispatchEvent(event){listeners.forEach((callback=>{try{callback&&callback(event)}catch(err){console.error(err)}}));return true}};window.addEventListener("storage",(event=>{const[acebase,dbname,peerId,messageId]=event.key.split(":");if(acebase!=="acebase"||dbname!==storage.name||peerId===this.id||event.newValue===null){return}const message=acebase_core_1.Transport.deserialize(JSON.parse(event.newValue));this.channel.dispatchEvent({data:message})}))}this.channel.addEventListener("message",(async event=>{const message=event.data;if(message.to&&message.to!==this.id){return}storage.debug.verbose(`[BroadcastChannel] received: `,message);if(message.type==="hello"&&message.frompeer.id)).concat(this.id).filter((id=>id!==this.masterPeerId));this.masterPeerId=allPeerIds.sort()[0];storage.debug.log(`[BroadcastChannel] ${this.masterPeerId===this.id?"We are":`tab ${this.masterPeerId} is`} the new master. Requesting ${this._locks.length} locks (${this._locks.filter((r=>!r.granted)).length} pending)`);const requests=this._locks.splice(0);await Promise.all(requests.filter((req=>req.granted)).map((async req=>{let released,movedToParent;req.lock.release=()=>new Promise((resolve=>released=resolve));req.lock.moveToParent=()=>new Promise((resolve=>movedToParent=resolve));const lock=await this.lock({path:req.lock.path,write:req.lock.forWriting,tid:req.lock.tid,comment:req.lock.comment});if(movedToParent){const newLock=await lock.moveToParent();movedToParent(newLock)}if(released){await lock.release();released()}})));await Promise.all(requests.filter((req=>!req.granted)).map((async req=>{await this.lock(req.request)})))}return this.handleMessage(message)}));const helloMsg={type:"hello",from:this.id,data:undefined};this.sendMessage(helloMsg)}sendMessage(message){this.storage.debug.verbose(`[BroadcastChannel] sending: `,message);this.channel.postMessage(message)}}exports.IPCPeer=IPCPeer},{"./ipc":7,"acebase-core":38}],7:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AceBaseIPCPeer=exports.AceBaseIPCPeerExitingError=void 0;const acebase_core_1=require("acebase-core");const node_lock_1=require("../node-lock");class AceBaseIPCPeerExitingError extends Error{constructor(message){super(`Exiting: ${message}`)}}exports.AceBaseIPCPeerExitingError=AceBaseIPCPeerExitingError;class AceBaseIPCPeer extends acebase_core_1.SimpleEventEmitter{constructor(storage,id,dbname=storage.name){super();this.storage=storage;this.id=id;this.dbname=dbname;this.ipcType="ipc";this.ourSubscriptions=[];this.remoteSubscriptions=[];this.peers=[];this._exiting=false;this._locks=[];this._requests=new Map;this._eventsEnabled=true;this._nodeLocker=new node_lock_1.NodeLocker(storage.debug,storage.settings.lockTimeout);storage.on("subscribe",(subscription=>{storage.debug.verbose(`database subscription being added on peer ${this.id}`);const remoteSubscription=this.remoteSubscriptions.find((sub=>sub.callback===subscription.callback));if(remoteSubscription){return}const othersAlreadyNotifying=this.ourSubscriptions.some((sub=>sub.event===subscription.event&&sub.path===subscription.path));this.ourSubscriptions.push(subscription);if(othersAlreadyNotifying){return}const message={type:"subscribe",from:this.id,data:{path:subscription.path,event:subscription.event}};this.sendMessage(message)}));storage.on("unsubscribe",(subscription=>{const remoteSubscription=this.remoteSubscriptions.find((sub=>sub.callback===subscription.callback));if(remoteSubscription){this.remoteSubscriptions.splice(this.remoteSubscriptions.indexOf(remoteSubscription),1);return}this.ourSubscriptions.filter((sub=>sub.path===subscription.path&&(!subscription.event||sub.event===subscription.event)&&(!subscription.callback||sub.callback===subscription.callback))).forEach((sub=>{this.ourSubscriptions.splice(this.ourSubscriptions.indexOf(sub),1);const message={type:"unsubscribe",from:this.id,data:{path:sub.path,event:sub.event}};this.sendMessage(message)}))}))}get isMaster(){return this.masterPeerId===this.id}async exit(code=0){if(this._exiting){return this.once("exit")}this._exiting=true;this.storage.debug.warn(`Received ${this.isMaster?"master":"worker "+this.id} process exit request`);if(this._locks.length>0){this.storage.debug.warn(`Waiting for ${this.isMaster?"master":"worker"} ${this.id} locks to clear`);await this.once("locks-cleared")}this.sayGoodbye(this.id);this.storage.debug.warn(`${this.isMaster?"Master":"Worker "+this.id} will now exit`);this.emitOnce("exit",code)}sayGoodbye(forPeerId){const bye={type:"bye",from:forPeerId,data:undefined};this.sendMessage(bye)}addPeer(id,sendReply=true){if(this._exiting){return}const peer=this.peers.find((w=>w.id===id));if(!peer){this.peers.push({id:id,lastSeen:Date.now()})}if(sendReply){const helloMessage={type:"hello",from:this.id,to:id,data:undefined};this.sendMessage(helloMessage);this.ourSubscriptions.forEach((sub=>{const message={type:"subscribe",from:this.id,to:id,data:{path:sub.path,event:sub.event}};this.sendMessage(message)}))}}removePeer(id,ignoreUnknown=false){if(this._exiting){return}const peer=this.peers.find((peer=>peer.id===id));if(!peer){if(!ignoreUnknown){throw new Error(`We are supposed to know this peer!`)}return}this.peers.splice(this.peers.indexOf(peer),1);const subscriptions=this.remoteSubscriptions.filter((sub=>sub.for===id));subscriptions.forEach((sub=>{this.remoteSubscriptions.splice(this.remoteSubscriptions.indexOf(sub),1);this.storage.subscriptions.remove(sub.path,sub.event,sub.callback)}))}addRemoteSubscription(peerId,details){if(this._exiting){return}if(this.remoteSubscriptions.some((sub=>sub.for===peerId&&sub.event===details.event&&sub.path===details.path))){return}const subscribeCallback=(err,path,val,previous,context)=>{const eventMessage={type:"event",from:this.id,to:peerId,path:details.path,event:details.event,data:{path:path,val:val,previous:previous,context:context}};this.sendMessage(eventMessage)};this.remoteSubscriptions.push({for:peerId,event:details.event,path:details.path,callback:subscribeCallback});this.storage.subscriptions.add(details.path,details.event,subscribeCallback)}cancelRemoteSubscription(peerId,details){const sub=this.remoteSubscriptions.find((sub=>sub.for===peerId&&sub.event===details.event&&sub.path===details.event));if(!sub){return}this.storage.subscriptions.remove(details.path,details.event,sub.callback)}async handleMessage(message){switch(message.type){case"hello":return this.addPeer(message.from,message.to!==this.id);case"bye":return this.removePeer(message.from,true);case"subscribe":return this.addRemoteSubscription(message.from,message.data);case"unsubscribe":return this.cancelRemoteSubscription(message.from,message.data);case"event":{if(!this._eventsEnabled){break}const eventMessage=message;const context=eventMessage.data.context||{};context.acebase_ipc={type:this.ipcType,origin:eventMessage.from};const subscriptions=this.ourSubscriptions.filter((sub=>sub.event===eventMessage.event&&sub.path===eventMessage.path));subscriptions.forEach((sub=>{sub.callback(null,eventMessage.data.path,eventMessage.data.val,eventMessage.data.previous,context)}));break}case"lock-request":{if(!this.isMaster){throw new Error(`Workers are not supposed to receive lock requests!`)}const request=message;const result={type:"lock-result",id:request.id,from:this.id,to:request.from,ok:true,data:undefined};try{const lock=await this.lock(request.data);result.data={id:lock.id,path:lock.path,tid:lock.tid,write:lock.forWriting,expires:lock.expires,comment:lock.comment}}catch(err){result.ok=false;result.reason=err.stack||err.message||err}return this.sendMessage(result)}case"lock-result":{if(this.isMaster){throw new Error(`Masters are not supposed to receive results for lock requests!`)}const result=message;const request=this._requests.get(result.id);if(typeof request!=="object"){throw new Error(`The request must be known to us!`)}if(result.ok){request.resolve(result.data)}else{request.reject(new Error(result.reason))}return}case"unlock-request":{if(!this.isMaster){throw new Error(`Workers are not supposed to receive unlock requests!`)}const request=message;const result={type:"unlock-result",id:request.id,from:this.id,to:request.from,ok:true,data:{id:request.data.id}};try{const lockInfo=this._locks.find((l=>{var _a;return((_a=l.lock)===null||_a===void 0?void 0:_a.id)===request.data.id}));await lockInfo.lock.release()}catch(err){result.ok=false;result.reason=err.stack||err.message||err}return this.sendMessage(result)}case"unlock-result":{if(this.isMaster){throw new Error(`Masters are not supposed to receive results for unlock requests!`)}const result=message;const request=this._requests.get(result.id);if(typeof request!=="object"){throw new Error(`The request must be known to us!`)}if(result.ok){request.resolve(result.data)}else{request.reject(new Error(result.reason))}return}case"move-lock-request":{if(!this.isMaster){throw new Error(`Workers are not supposed to receive move lock requests!`)}const request=message;const result={type:"lock-result",id:request.id,from:this.id,to:request.from,ok:true,data:undefined};try{let movedLock;const lockRequest=this._locks.find((r=>{var _a;return((_a=r.lock)===null||_a===void 0?void 0:_a.id)===request.data.id}));if(request.data.move_to==="parent"){movedLock=await lockRequest.lock.moveToParent()}else{throw new Error(`Unknown lock move_to "${request.data.move_to}"`)}lockRequest.lock=movedLock;result.data={id:movedLock.id,path:movedLock.path,tid:movedLock.tid,write:movedLock.forWriting,expires:movedLock.expires,comment:movedLock.comment}}catch(err){result.ok=false;result.reason=err.stack||err.message||err}return this.sendMessage(result)}case"notification":{return this.emit("notification",message)}case"request":{return this.emit("request",message)}case"result":{const result=message;const request=this._requests.get(result.id);if(typeof request!=="object"){throw new Error(`Result of unknown request received`)}if(result.ok){request.resolve(result.data)}else{request.reject(new Error(result.reason))}}}}async lock(details){if(this._exiting){const tidApproved=this._locks.find((l=>l.tid===details.tid&&l.granted));if(!tidApproved){throw new AceBaseIPCPeerExitingError("new transaction lock denied because the IPC peer is exiting")}}const removeLock=lockDetails=>{this._locks.splice(this._locks.indexOf(lockDetails),1);if(this._locks.length===0){this.emit("locks-cleared")}};if(this.isMaster){const lockInfo={tid:details.tid,granted:false,request:details,lock:null};this._locks.push(lockInfo);const lock=await this._nodeLocker.lock(details.path,details.tid,details.write,details.comment);lockInfo.tid=lock.tid;lockInfo.granted=true;const createIPCLock=lock=>({get id(){return lock.id},get tid(){return lock.tid},get path(){return lock.path},get forWriting(){return lock.forWriting},get expires(){return lock.expires},get comment(){return lock.comment},get state(){return lock.state},release:async()=>{await lock.release();removeLock(lockInfo)},moveToParent:async()=>{const parentLock=await lock.moveToParent();lockInfo.lock=createIPCLock(parentLock);return lockInfo.lock}});lockInfo.lock=createIPCLock(lock);return lockInfo.lock}else{const lockInfo={tid:details.tid,granted:false,request:details,lock:null};this._locks.push(lockInfo);const createIPCLock=result=>{lockInfo.granted=true;lockInfo.tid=result.tid;lockInfo.lock={id:result.id,tid:result.tid,path:result.path,forWriting:result.write,state:node_lock_1.LOCK_STATE.LOCKED,expires:result.expires,comment:result.comment,release:async()=>{const req={type:"unlock-request",id:acebase_core_1.ID.generate(),from:this.id,to:this.masterPeerId,data:{id:lockInfo.lock.id}};await this.request(req);lockInfo.lock.state=node_lock_1.LOCK_STATE.DONE;this.storage.debug.verbose(`Worker ${this.id} released lock ${lockInfo.lock.id} (tid ${lockInfo.lock.tid}, ${lockInfo.lock.comment}, "/${lockInfo.lock.path}", ${lockInfo.lock.forWriting?"write":"read"})`);removeLock(lockInfo)},moveToParent:async()=>{const req={type:"move-lock-request",id:acebase_core_1.ID.generate(),from:this.id,to:this.masterPeerId,data:{id:lockInfo.lock.id,move_to:"parent"}};let result;try{result=await this.request(req)}catch(err){lockInfo.lock.state=node_lock_1.LOCK_STATE.DONE;removeLock(lockInfo);throw err}lockInfo.lock=createIPCLock(result);return lockInfo.lock}};return lockInfo.lock};const req={type:"lock-request",id:acebase_core_1.ID.generate(),from:this.id,to:this.masterPeerId,data:details};let result,err;try{result=await this.request(req)}catch(e){err=e;result=null}if(err){removeLock(lockInfo);throw err}return createIPCLock(result)}}async request(req){let resolve,reject;const promise=new Promise(((rs,rj)=>{resolve=result=>{this._requests.delete(req.id);rs(result)};reject=err=>{this._requests.delete(req.id);rj(err)}}));this._requests.set(req.id,{resolve:resolve,reject:reject,request:req});this.sendMessage(req);return promise}sendRequest(request){const req={type:"request",from:this.id,to:this.masterPeerId,id:acebase_core_1.ID.generate(),data:request};return this.request(req).catch((err=>{this.storage.debug.error(err);throw err}))}replyRequest(requestMessage,result){const reply={type:"result",id:requestMessage.id,ok:true,from:this.id,to:requestMessage.from,data:result};this.sendMessage(reply)}sendNotification(notification){const msg={type:"notification",from:this.id,data:notification};this.sendMessage(msg)}get eventsEnabled(){return this._eventsEnabled}set eventsEnabled(enabled){this.storage.debug.log(`ipc events ${enabled?"enabled":"disabled"}`);this._eventsEnabled=enabled}}exports.AceBaseIPCPeer=AceBaseIPCPeer},{"../node-lock":11,"acebase-core":38}],8:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.RemovedNodeAddress=exports.NodeAddress=void 0;class NodeAddress{constructor(path){this.path=path}toString(){return`"/${this.path}"`}equals(address){return this.path===address.path}}exports.NodeAddress=NodeAddress;class RemovedNodeAddress extends NodeAddress{constructor(path){super(path)}toString(){return`"/${this.path}" (removed)`}equals(address){return address instanceof RemovedNodeAddress&&this.path===address.path}}exports.RemovedNodeAddress=RemovedNodeAddress},{}],9:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.NodeRevisionError=exports.NodeNotFoundError=void 0;class NodeNotFoundError extends Error{}exports.NodeNotFoundError=NodeNotFoundError;class NodeRevisionError extends Error{}exports.NodeRevisionError=NodeRevisionError},{}],10:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.NodeInfo=void 0;const node_value_types_1=require("./node-value-types");const acebase_core_1=require("acebase-core");class NodeInfo{constructor(info){this.path=info.path;this.type=info.type;this.index=info.index;this.key=info.key;this.exists=info.exists;this.address=info.address;this.value=info.value;this.childCount=info.childCount;if(typeof this.path==="string"&&(typeof this.key==="undefined"&&typeof this.index==="undefined")){const pathInfo=acebase_core_1.PathInfo.get(this.path);if(typeof pathInfo.key==="number"){this.index=pathInfo.key}else{this.key=pathInfo.key}}if(typeof this.exists==="undefined"){this.exists=true}}get valueType(){return this.type}get valueTypeName(){return(0,node_value_types_1.getValueTypeName)(this.valueType)}toString(){if(!this.exists){return`"${this.path}" doesn't exist`}if(this.address){return`"${this.path}" is ${this.valueTypeName} stored at ${this.address.toString()}`}else{return`"${this.path}" is ${this.valueTypeName} with value ${this.value}`}}}exports.NodeInfo=NodeInfo},{"./node-value-types":12,"acebase-core":38}],11:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.NodeLock=exports.NodeLocker=exports.LOCK_STATE=void 0;const acebase_core_1=require("acebase-core");const DEBUG_MODE=false;const DEFAULT_LOCK_TIMEOUT=120;exports.LOCK_STATE={PENDING:"pending",LOCKED:"locked",EXPIRED:"expired",DONE:"done"};class NodeLocker{constructor(debug,lockTimeout=DEFAULT_LOCK_TIMEOUT){this._locks=[];this._lastTid=0;this.debug=debug;this.timeout=lockTimeout*1e3}setTimeout(timeout){this.timeout=timeout*1e3}createTid(){return DEBUG_MODE?++this._lastTid:acebase_core_1.ID.generate()}_allowLock(path,tid,forWriting){const conflict=this._locks.find((otherLock=>otherLock.tid!==tid&&otherLock.state===exports.LOCK_STATE.LOCKED&&(forWriting||otherLock.forWriting)));return{allow:!conflict,conflict:conflict}}quit(){return new Promise((resolve=>{if(this._locks.length===0){return resolve()}this._quit=resolve}))}_rejectLock(lock,err){this._locks.splice(this._locks.indexOf(lock),1);clearTimeout(lock.timeout);try{lock.reject(err)}catch(err){console.error(`Unhandled promise rejection:`,err)}}_processLockQueue(){if(this._quit){const quitError=new Error("Quitting");this._locks.filter((lock=>lock.state===exports.LOCK_STATE.PENDING)).forEach((lock=>this._rejectLock(lock,quitError)));if(this._locks.length===0){this._quit()}}const pending=this._locks.filter((lock=>lock.state===exports.LOCK_STATE.PENDING)).sort(((a,b)=>{if(a.priority&&!b.priority){return-1}else if(!a.priority&&b.priority){return 1}return a.requested-b.requested}));pending.forEach((lock=>{const check=this._allowLock(lock.path,lock.tid,lock.forWriting);lock.waitingFor=check.conflict||null;if(check.allow){this.lock(lock).then(lock.resolve).catch((err=>this._rejectLock(lock,err)))}}))}async lock(path,tid,forWriting=true,comment="",options={withPriority:false,noTimeout:false}){let lock,proceed;if(path instanceof NodeLock){lock=path;proceed=true}else if(this._locks.findIndex((l=>l.tid===tid&&l.state===exports.LOCK_STATE.EXPIRED))>=0){throw new Error(`lock on tid ${tid} has expired, not allowed to continue`)}else if(this._quit&&!options.withPriority){throw new Error(`Quitting`)}else{DEBUG_MODE&&console.error(`${forWriting?"write":"read"} lock requested on "${path}" by tid ${tid} (${comment})`);lock=new NodeLock(this,path,tid,forWriting,options.withPriority===true);lock.comment=comment;this._locks.push(lock);const check=this._allowLock(path,tid,forWriting);lock.waitingFor=check.conflict||null;proceed=check.allow}if(proceed){DEBUG_MODE&&console.error(`${lock.forWriting?"write":"read"} lock ALLOWED on "${lock.path}" by tid ${lock.tid} (${lock.comment})`);lock.state=exports.LOCK_STATE.LOCKED;if(typeof lock.granted==="number"){}else{lock.granted=Date.now();if(options.noTimeout!==true){lock.expires=Date.now()+this.timeout;let timeoutCount=0;const timeoutHandler=()=>{if(lock.state!==exports.LOCK_STATE.LOCKED){return}timeoutCount++;if(timeoutCount<=3){this.debug.warn(`${lock.forWriting?"write":"read"} lock on path "/${lock.path}" by tid ${lock.tid} (${lock.comment}) is taking a long time to complete [${timeoutCount}]`);lock.timeout=setTimeout(timeoutHandler,this.timeout/4);return}this.debug.error(`lock :: ${lock.forWriting?"write":"read"} lock on path "/${lock.path}" by tid ${lock.tid} (${lock.comment}) took too long`);lock.state=exports.LOCK_STATE.EXPIRED;this._processLockQueue()};lock.timeout=setTimeout(timeoutHandler,this.timeout/4)}}return lock}else{console.assert(lock.state===exports.LOCK_STATE.PENDING);return new Promise(((resolve,reject)=>{lock.resolve=resolve;lock.reject=reject}))}}unlock(lockOrId,comment,processQueue=true){let lock,i;if(lockOrId instanceof NodeLock){lock=lockOrId;i=this._locks.indexOf(lock)}else{const id=lockOrId;i=this._locks.findIndex((l=>l.id===id));lock=this._locks[i]}if(i<0){const msg=`lock on "/${lock.path}" for tid ${lock.tid} wasn't found; ${comment}`;throw new Error(msg)}lock.state=exports.LOCK_STATE.DONE;clearTimeout(lock.timeout);this._locks.splice(i,1);DEBUG_MODE&&console.error(`${lock.forWriting?"write":"read"} lock RELEASED on "${lock.path}" by tid ${lock.tid}`);processQueue&&this._processLockQueue();return lock}list(){return this._locks||[]}isAllowed(path,tid,forWriting){return this._allowLock(path,tid,forWriting).allow}}exports.NodeLocker=NodeLocker;let lastid=0;class NodeLock{constructor(locker,path,tid,forWriting,priority=false){this.locker=locker;this.path=path;this.tid=tid;this.forWriting=forWriting;this.priority=priority;this.state=exports.LOCK_STATE.PENDING;this.requested=Date.now();this.comment="";this.waitingFor=null;this.id=++lastid;this.history=[]}static get LOCK_STATE(){return exports.LOCK_STATE}async release(comment){this.history.push({action:"release",path:this.path,forWriting:this.forWriting,comment:comment});return this.locker.unlock(this,comment||this.comment)}async moveToParent(){const parentPath=acebase_core_1.PathInfo.get(this.path).parentPath;const allowed=this.locker.isAllowed(parentPath,this.tid,this.forWriting);if(allowed){DEBUG_MODE&&console.error(`moveToParent ALLOWED for ${this.forWriting?"write":"read"} lock on "${this.path}" by tid ${this.tid} (${this.comment})`);this.history.push({path:this.path,forWriting:this.forWriting,action:"moving to parent"});this.waitingFor=null;this.path=parentPath;return this}else{DEBUG_MODE&&console.error(`moveToParent QUEUED for ${this.forWriting?"write":"read"} lock on "${this.path}" by tid ${this.tid} (${this.comment})`);this.locker.unlock(this,`moveLockToParent: ${this.comment}`,false);const newLock=await this.locker.lock(parentPath,this.tid,this.forWriting,this.comment,{withPriority:true});DEBUG_MODE&&console.error(`QUEUED moveToParent ALLOWED for ${this.forWriting?"write":"read"} lock on "${this.path}" by tid ${this.tid} (${this.comment})`);newLock.history=this.history;newLock.history.push({path:this.path,forWriting:this.forWriting,action:"moving to parent through queue (priority)"});return newLock}}}exports.NodeLock=NodeLock},{"acebase-core":38}],12:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.getValueType=exports.getNodeValueType=exports.getValueTypeName=exports.VALUE_TYPES=void 0;const acebase_core_1=require("acebase-core");exports.VALUE_TYPES=Object.freeze({OBJECT:1,ARRAY:2,NUMBER:3,BOOLEAN:4,STRING:5,BIGINT:7,DATETIME:6,BINARY:8,REFERENCE:9});function getValueTypeName(valueType){switch(valueType){case exports.VALUE_TYPES.ARRAY:return"array";case exports.VALUE_TYPES.BINARY:return"binary";case exports.VALUE_TYPES.BOOLEAN:return"boolean";case exports.VALUE_TYPES.DATETIME:return"date";case exports.VALUE_TYPES.NUMBER:return"number";case exports.VALUE_TYPES.OBJECT:return"object";case exports.VALUE_TYPES.REFERENCE:return"reference";case exports.VALUE_TYPES.STRING:return"string";case exports.VALUE_TYPES.BIGINT:return"bigint";default:"unknown"}}exports.getValueTypeName=getValueTypeName;function getNodeValueType(value){if(value instanceof Array){return exports.VALUE_TYPES.ARRAY}else if(value instanceof acebase_core_1.PathReference){return exports.VALUE_TYPES.REFERENCE}else if(value instanceof ArrayBuffer){return exports.VALUE_TYPES.BINARY}else if(typeof value==="string"){return exports.VALUE_TYPES.STRING}else if(typeof value==="object"){return exports.VALUE_TYPES.OBJECT}else if(typeof value==="bigint"){return exports.VALUE_TYPES.BIGINT}throw new Error(`Invalid value for standalone node: ${value}`)}exports.getNodeValueType=getNodeValueType;function getValueType(value){if(value instanceof Array){return exports.VALUE_TYPES.ARRAY}else if(value instanceof acebase_core_1.PathReference){return exports.VALUE_TYPES.REFERENCE}else if(value instanceof ArrayBuffer){return exports.VALUE_TYPES.BINARY}else if(value instanceof Date){return exports.VALUE_TYPES.DATETIME}else if(typeof value==="string"){return exports.VALUE_TYPES.STRING}else if(typeof value==="object"){return exports.VALUE_TYPES.OBJECT}else if(typeof value==="number"){return exports.VALUE_TYPES.NUMBER}else if(typeof value==="boolean"){return exports.VALUE_TYPES.BOOLEAN}else if(typeof value==="bigint"){return exports.VALUE_TYPES.BIGINT}throw new Error(`Unknown value type: ${value}`)}exports.getValueType=getValueType},{"acebase-core":38}],13:[function(require,module,exports){},{}],14:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.pfs=void 0;class pfs{static get hasFileSystem(){return false}static get fs(){return null}}exports.pfs=pfs},{}],15:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.query=void 0;const acebase_core_1=require("acebase-core");const node_value_types_1=require("./node-value-types");const node_errors_1=require("./node-errors");const data_index_1=require("./data-index");const async_task_batch_1=require("./async-task-batch");const noop=()=>{};function query(api,path,query,options={snapshots:false,include:undefined,exclude:undefined,child_objects:undefined,eventHandler:noop}){var _a;if(typeof options!=="object"){options={}}if(typeof options.snapshots==="undefined"){options.snapshots=false}const context={};if((_a=api.storage.settings.transactions)===null||_a===void 0?void 0:_a.log){context.acebase_cursor=acebase_core_1.ID.generate()}const queryFilters=query.filters.map((f=>Object.assign({},f)));const querySort=query.order.map((s=>Object.assign({},s)));const sortMatches=matches=>{matches.sort(((a,b)=>{const compare=i=>{const o=querySort[i];const trailKeys=acebase_core_1.PathInfo.getPathKeys(typeof o.key==="number"?`[${o.key}]`:o.key);const left=trailKeys.reduce(((val,key)=>val!==null&&typeof val==="object"&&key in val?val[key]:null),a.val);const right=trailKeys.reduce(((val,key)=>val!==null&&typeof val==="object"&&key in val?val[key]:null),b.val);if(left===null){return right===null?0:o.ascending?-1:1}if(right===null){return o.ascending?1:-1}if(left==right){if(i{if(preResults.length===0){return[]}const maxBatchSize=50;const batch=new async_task_batch_1.AsyncTaskBatch(maxBatchSize);const results=[];preResults.forEach((({path:path},index)=>batch.add((async()=>{const node=await api.storage.getNode(path,options);const val=node.value;if(val===null){api.storage.debug.warn(`Indexed result "/${path}" does not have a record!`);return}const result={path:path,val:val};if(stepsExecuted.sorted){results[index]=result}else{results.push(result);if(!stepsExecuted.skipped&&results.length>query.skip+Math.abs(query.take)){sortMatches(results);results.pop()}}}))));await batch.finish();return results};const pathInfo=acebase_core_1.PathInfo.get(path);const isWildcardPath=pathInfo.keys.some((key=>key==="*"||key.toString().startsWith("$")));const availableIndexes=api.storage.indexes.get(path);const usingIndexes=[];if(isWildcardPath){if(availableIndexes.length===0){const err=new Error(`Query on wildcard path "/${path}" requires an index`);return Promise.reject(err)}if(queryFilters.length===0){const index=availableIndexes.filter((index=>index.type==="normal"))[0];queryFilters.push({key:index.key,op:"!=",compare:null})}}queryFilters.forEach((filter=>{if(filter.index){return}const indexesOnKey=availableIndexes.filter((index=>index.key===filter.key)).filter((index=>index.validOperators.includes(filter.op)));if(indexesOnKey.length>=1){const otherFilterKeys=queryFilters.filter((f=>f!==filter)).map((f=>f.key));const sortKeys=querySort.map((o=>o.key)).filter((key=>key!==filter.key));const beneficialIndexes=indexesOnKey.map((index=>{const availableKeys=index.includeKeys.concat(index.key);const forOtherFilters=availableKeys.filter((key=>otherFilterKeys.includes(key)));const forSorting=availableKeys.filter((key=>sortKeys.includes(key)));const forBoth=forOtherFilters.concat(forSorting.filter((index=>!forOtherFilters.includes(index))));const points={filters:forOtherFilters.length,sorting:forSorting.length*(query.take!==0?forSorting.length:1),both:forBoth.length*forBoth.length,get total(){return this.filters+this.sorting+this.both}};return{index:index,points:points.total,filterKeys:forOtherFilters,sortKeys:forSorting}}));beneficialIndexes.sort(((a,b)=>a.points>b.points?-1:1));const bestBenificialIndex=beneficialIndexes[0];filter.index=bestBenificialIndex.index;bestBenificialIndex.filterKeys.forEach((key=>{queryFilters.filter((f=>f!==filter&&f.key===key)).forEach((f=>{if(!data_index_1.DataIndex.validOperators.includes(f.op)){return}f.indexUsage="filter";f.index=bestBenificialIndex.index}))}));bestBenificialIndex.sortKeys.forEach((key=>{querySort.filter((s=>s.key===key)).forEach((s=>{s.index=bestBenificialIndex.index}))}))}if(filter.index){usingIndexes.push({index:filter.index,description:filter.index.description})}}));if(querySort.length>0&&query.take!==0&&queryFilters.length===0){querySort.forEach((sort=>{if(sort.index){return}sort.index=availableIndexes.filter((index=>index.key===sort.key)).find((index=>index.type==="normal"))}))}const indexDescriptions=usingIndexes.map((index=>index.description)).join(", ");usingIndexes.length>0&&api.storage.debug.log(`Using indexes for query: ${indexDescriptions}`);const tableScanFilters=queryFilters.filter((filter=>!filter.index));const specialOpsRegex=/^[a-z]+:/i;if(tableScanFilters.some((filter=>specialOpsRegex.test(filter.op)))){const f=tableScanFilters.find((filter=>specialOpsRegex.test(filter.op)));const err=new Error(`query contains operator "${f.op}" which requires a special index that was not found on path "${path}", key "${f.key}"`);return Promise.reject(err)}const allowedTableScanOperators=["<","<=","==","!=",">=",">","like","!like","in","!in","matches","!matches","between","!between","has","!has","contains","!contains","exists","!exists"];for(let i=0;i0){const keys=tableScanFilters.reduce(((keys,f)=>{if(keys.indexOf(f.key)<0){keys.push(f.key)}return keys}),[]).map((key=>`"${key}"`));const err=new Error(`This wildcard path query on "/${path}" requires index(es) on key(s): ${keys.join(", ")}. Create the index(es) and retry`);return Promise.reject(err)}const indexScanPromises=[];queryFilters.forEach((filter=>{if(filter.index&&filter.indexUsage!=="filter"){let promise=filter.index.query(filter.op,filter.compare).then((results=>{options.eventHandler&&options.eventHandler({name:"stats",type:"index_query",source:filter.index.description,stats:results.stats});if(results.hints.length>0){options.eventHandler&&options.eventHandler({name:"hints",type:"index_query",source:filter.index.description,hints:results.hints})}return results}));const resultFilters=queryFilters.filter((f=>f.index===filter.index&&f.indexUsage==="filter"));if(resultFilters.length>0){promise=promise.then((results=>{resultFilters.forEach((filter=>{const{key:key,op:op,index:index}=filter;let{compare:compare}=filter;if(typeof compare==="string"&&!index.caseSensitive){compare=compare.toLocaleLowerCase(index.textLocale)}results=results.filterMetadata(key,op,compare)}));return results}))}indexScanPromises.push(promise)}}));const stepsExecuted={filtered:queryFilters.length===0,skipped:query.skip===0,taken:query.take===0,sorted:querySort.length===0,preDataLoaded:false,dataLoaded:false};if(queryFilters.length===0&&query.take===0){api.storage.debug.warn(`Filterless queries must use .take to limit the results. Defaulting to 100 for query on path "${path}"`);query.take=100}if(querySort.length>0&&querySort[0].index){const sortIndex=querySort[0].index;const ascending=query.take<0?!querySort[0].ascending:querySort[0].ascending;if(queryFilters.length===0&&querySort.slice(1).every((s=>sortIndex.allMetadataKeys.includes(s.key)))){api.storage.debug.log(`Using index for sorting: ${sortIndex.description}`);const metadataSort=querySort.slice(1).map((s=>{s.index=sortIndex;return{key:s.key,ascending:s.ascending}}));const promise=sortIndex.take(query.skip,Math.abs(query.take),{ascending:ascending,metadataSort:metadataSort}).then((results=>{options.eventHandler&&options.eventHandler({name:"stats",type:"sort_index_take",source:sortIndex.description,stats:results.stats});if(results.hints.length>0){options.eventHandler&&options.eventHandler({name:"hints",type:"sort_index_take",source:sortIndex.description,hints:results.hints})}return results}));indexScanPromises.push(promise);stepsExecuted.skipped=true;stepsExecuted.taken=true;stepsExecuted.sorted=true}}return Promise.all(indexScanPromises).then((async indexResultSets=>{let indexedResults=[];if(indexResultSets.length===1){const resultSet=indexResultSets[0];indexedResults=resultSet.map((match=>{const result={key:match.key,path:match.path,val:{[resultSet.filterKey]:match.value}};match.metadata&&Object.assign(result.val,match.metadata);return result}));stepsExecuted.filtered=true}else if(indexResultSets.length>1){indexResultSets.sort(((a,b)=>a.length{const result={key:match.key,path:match.path,val:{[shortestSet.filterKey]:match.value}};const matchedInAllSets=otherSets.every((set=>set.findIndex((m=>m.path===match.path))>=0));if(matchedInAllSets){match.metadata&&Object.assign(result.val,match.metadata);otherSets.forEach((set=>{const otherResult=set.find((r=>r.path===result.path));result.val[set.filterKey]=otherResult.value;otherResult.metadata&&Object.assign(result.val,otherResult.metadata)}));results.push(result)}return results}),[]);stepsExecuted.filtered=true}if(isWildcardPath||indexScanPromises.length>0&&tableScanFilters.length===0){if(querySort.length===0||querySort.every((o=>o.index))){stepsExecuted.preDataLoaded=true;if(!stepsExecuted.sorted&&querySort.length>0){sortMatches(indexedResults)}stepsExecuted.sorted=true;if(!stepsExecuted.skipped&&query.skip>0){indexedResults=query.take<0?indexedResults.slice(0,-query.skip):indexedResults.slice(query.skip)}if(!stepsExecuted.taken&&query.take!==0){indexedResults=query.take<0?indexedResults.slice(query.take):indexedResults.slice(0,query.take)}stepsExecuted.skipped=true;stepsExecuted.taken=true;if(!options.snapshots){return indexedResults}const childOptions={include:options.include,exclude:options.exclude,child_objects:options.child_objects};return loadResultsData(indexedResults,childOptions).then((results=>{stepsExecuted.dataLoaded=true;return results}))}if(options.snapshots||!stepsExecuted.sorted){const loadPartialResults=querySort.length>0;const childOptions=loadPartialResults?{include:querySort.map((order=>order.key))}:{include:options.include,exclude:options.exclude,child_objects:options.child_objects};return loadResultsData(indexedResults,childOptions).then((results=>{if(querySort.length>0){sortMatches(results)}stepsExecuted.sorted=true;if(query.skip>0){results=query.take<0?results.slice(0,-query.skip):results.slice(query.skip)}if(query.take!==0){results=query.take<0?results.slice(query.take):results.slice(0,query.take)}stepsExecuted.skipped=true;stepsExecuted.taken=true;if(options.snapshots&&loadPartialResults){return loadResultsData(results,{include:options.include,exclude:options.exclude,child_objects:options.child_objects})}return results}))}else{return indexedResults}}let indexKeyFilter;if(indexedResults.length>0){indexKeyFilter=indexedResults.map((result=>result.key))}let matches=[];let preliminaryStop=false;const loadPartialData=querySort.length>0;const childOptions=loadPartialData?{include:querySort.map((order=>order.key))}:{include:options.include,exclude:options.exclude,child_objects:options.child_objects};const batch={promises:[],add(promise){this.promises.push(promise);if(this.promises.length>=1e3){return Promise.all(this.promises.splice(0)).then((_=>undefined))}}};try{await api.storage.getChildren(path,{keyFilter:indexKeyFilter,async:true}).next((child=>{if(child.type!==node_value_types_1.VALUE_TYPES.OBJECT){return}if(!child.address){return}if(preliminaryStop){return false}const matchNode=async()=>{const isMatch=await api.storage.matchNode(child.address.path,tableScanFilters);if(!isMatch){return}const childPath=child.address.path;let result;if(options.snapshots||querySort.length>0){const node=await api.storage.getNode(childPath,childOptions);result={path:childPath,val:node.value}}else{result={path:childPath}}matches.push(result);if(query.take!==0&&matches.length>Math.abs(query.take)+query.skip){if(querySort.length>0){sortMatches(matches)}else if(query.take>0){preliminaryStop=true}matches.pop()}};const p=batch.add(matchNode());if(p instanceof Promise){return p}}))}catch(reason){if(!(reason instanceof node_errors_1.NodeNotFoundError)){api.storage.debug.warn(`Error getting child stream: ${reason}`)}return[]}await Promise.all(batch.promises);stepsExecuted.preDataLoaded=loadPartialData;stepsExecuted.dataLoaded=!loadPartialData;if(querySort.length>0){sortMatches(matches)}stepsExecuted.sorted=true;if(query.skip>0){matches=query.take<0?matches.slice(0,-query.skip):matches.slice(query.skip)}stepsExecuted.skipped=true;if(query.take!==0){matches=query.take<0?matches.slice(query.take):matches.slice(0,query.take)}stepsExecuted.taken=true;if(!stepsExecuted.dataLoaded){matches=await loadResultsData(matches,{include:options.include,exclude:options.exclude,child_objects:options.child_objects});stepsExecuted.dataLoaded=true}return matches})).then((matches=>{if(!stepsExecuted.sorted&&querySort.length>0){sortMatches(matches)}if(!options.snapshots){matches=matches.map((match=>match.path))}if(!stepsExecuted.skipped&&query.skip>0){matches=query.take<0?matches.slice(0,-query.skip):matches.slice(query.skip)}if(!stepsExecuted.taken&&query.take!==0){matches=query.take<0?matches.slice(query.take):matches.slice(0,query.take)}if(options.monitor===true){options.monitor={add:true,change:true,remove:true}}let stop=async()=>{};if(typeof options.monitor==="object"&&(options.monitor.add||options.monitor.change||options.monitor.remove)){const matchedPaths=options.snapshots?matches.map((match=>match.path)):matches.slice();const ref=api.db.ref(path);const removeMatch=path=>{const index=matchedPaths.indexOf(path);if(index<0){return}matchedPaths.splice(index,1)};const addMatch=path=>{if(matchedPaths.includes(path)){return}matchedPaths.push(path)};const stopMonitoring=()=>{api.unsubscribe(ref.path,"child_changed",childChangedCallback);api.unsubscribe(ref.path,"child_added",childAddedCallback);api.unsubscribe(ref.path,"notify_child_removed",childRemovedCallback)};stop=async()=>{stopMonitoring()};const childChangedCallback=async(err,path,newValue,oldValue)=>{const wasMatch=matchedPaths.includes(path);let keepMonitoring=true;const checkKeys=[];queryFilters.forEach((f=>!checkKeys.includes(f.key)&&checkKeys.push(f.key)));const seenKeys=[];typeof oldValue==="object"&&Object.keys(oldValue).forEach((key=>!seenKeys.includes(key)&&seenKeys.push(key)));typeof newValue==="object"&&Object.keys(newValue).forEach((key=>!seenKeys.includes(key)&&seenKeys.push(key)));const missingKeys=[];let isMatch=seenKeys.every((key=>{if(!checkKeys.includes(key)){return true}const filters=queryFilters.filter((filter=>filter.key===key));return filters.every((filter=>{var _a;if(((_a=filter.index)===null||_a===void 0?void 0:_a.textLocaleKey)&&!seenKeys.includes(filter.index.textLocaleKey)){missingKeys.push(filter.index.textLocaleKey);return true}else if(allowedTableScanOperators.includes(filter.op)){return api.storage.test(newValue[key],filter.op,filter.compare)}else{return filter.index.test(newValue,filter.op,filter.compare)}}))}));if(isMatch){missingKeys.push(...checkKeys.filter((key=>!seenKeys.includes(key))));if(!wasMatch&&missingKeys.length>0){const filterQueue=queryFilters.filter((f=>missingKeys.includes(f.key)));const simpleFilters=filterQueue.filter((f=>allowedTableScanOperators.includes(f.op)));const indexFilters=filterQueue.filter((f=>!allowedTableScanOperators.includes(f.op)));if(simpleFilters.length>0){isMatch=await api.storage.matchNode(path,simpleFilters)}if(isMatch&&indexFilters.length>0){const keysToLoad=indexFilters.reduce(((keys,filter)=>{if(!keys.includes(filter.key)){keys.push(filter.key)}if(filter.index instanceof data_index_1.FullTextIndex&&filter.index.config.localeKey&&!keys.includes(filter.index.config.localeKey)){keys.push(filter.index.config.localeKey)}return keys}),[]);const node=await api.storage.getNode(path,{include:keysToLoad});if(node.value===null){return false}isMatch=indexFilters.every((filter=>filter.index.test(node.value,filter.op,filter.compare)))}}}if(isMatch){if(!wasMatch){addMatch(path)}if(options.snapshots){const loadOptions={include:options.include,exclude:options.exclude,child_objects:options.child_objects};const node=await api.storage.getNode(path,loadOptions);newValue=node.value}if(wasMatch&&options.monitor.change){keepMonitoring=options.eventHandler({name:"change",path:path,value:newValue})!==false}else if(!wasMatch&&options.monitor.add){keepMonitoring=options.eventHandler({name:"add",path:path,value:newValue})!==false}}else if(wasMatch){removeMatch(path);if(options.monitor.remove){keepMonitoring=options.eventHandler({name:"remove",path:path,value:oldValue})!==false}}if(keepMonitoring===false){stopMonitoring()}};const childAddedCallback=(err,path,newValue)=>{const isMatch=queryFilters.every((filter=>{if(allowedTableScanOperators.includes(filter.op)){return api.storage.test(newValue[filter.key],filter.op,filter.compare)}else{return filter.index.test(newValue,filter.op,filter.compare)}}));let keepMonitoring=true;if(isMatch){addMatch(path);if(options.monitor.add){keepMonitoring=options.eventHandler({name:"add",path:path,value:options.snapshots?newValue:null})!==false}}if(keepMonitoring===false){stopMonitoring()}};const childRemovedCallback=(err,path,newValue,oldValue)=>{let keepMonitoring=true;removeMatch(path);if(options.monitor.remove){keepMonitoring=options.eventHandler({name:"remove",path:path,value:options.snapshots?oldValue:null})!==false}if(keepMonitoring===false){stopMonitoring()}};if(options.monitor.add||options.monitor.change||options.monitor.remove){api.subscribe(ref.path,"child_changed",childChangedCallback)}if(options.monitor.remove){api.subscribe(ref.path,"notify_child_removed",childRemovedCallback)}if(options.monitor.add){api.subscribe(ref.path,"child_added",childAddedCallback)}}return{results:matches,context:context,stop:stop}}))}exports.query=query},{"./async-task-batch":4,"./data-index":13,"./node-errors":9,"./node-value-types":12,"acebase-core":38}],16:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createIndex=void 0;const acebase_core_1=require("acebase-core");const data_index_1=require("../data-index");const promise_fs_1=require("../promise-fs");async function createIndex(context,path,key,options){if(!context.storage.indexes.supported){throw new Error("Indexes are not supported in current environment because it requires Node.js fs")}const{ipc:ipc,debug:debug,indexes:indexes,storage:storage}=context;const rebuild=options&&options.rebuild===true;const indexType=options&&options.type||"normal";let includeKeys=options&&options.include||[];if(typeof includeKeys==="string"){includeKeys=[includeKeys]}const existingIndex=indexes.find((index=>index.path===path&&index.key===key&&index.type===indexType&&index.includeKeys.length===includeKeys.length&&index.includeKeys.every(((key,index)=>includeKeys[index]===key))));if(existingIndex&&options.config){existingIndex.config=options.config}if(existingIndex&&rebuild!==true){debug.log(`Index on "/${path}/*/${key}" already exists`.colorize(acebase_core_1.ColorStyle.inverse));return existingIndex}if(!ipc.isMaster){const result=await ipc.sendRequest({type:"index.create",path:path,key:key,options:options});if(result.ok){return this.add(result.fileName)}throw new Error(result.reason)}await promise_fs_1.pfs.mkdir(`${storage.settings.path}/${storage.name}.acebase`).catch((err=>{if(err.code!=="EEXIST"){throw err}}));const index=existingIndex||(()=>{const{include:include,caseSensitive:caseSensitive,textLocale:textLocale,textLocaleKey:textLocaleKey}=options;const indexOptions={include:include,caseSensitive:caseSensitive,textLocale:textLocale,textLocaleKey:textLocaleKey};switch(indexType){case"array":return new data_index_1.ArrayIndex(storage,path,key,Object.assign({},indexOptions));case"fulltext":return new data_index_1.FullTextIndex(storage,path,key,Object.assign(Object.assign({},indexOptions),{config:options.config}));case"geo":return new data_index_1.GeoIndex(storage,path,key,Object.assign({},indexOptions));default:return new data_index_1.DataIndex(storage,path,key,Object.assign({},indexOptions))}})();if(!existingIndex){indexes.push(index)}try{await index.build()}catch(err){context.debug.error(`Index build on "/${path}/*/${key}" failed: ${err.message} (code: ${err.code})`.colorize(acebase_core_1.ColorStyle.red));if(!existingIndex){indexes.splice(indexes.indexOf(index),1)}throw err}ipc.sendNotification({type:"index.created",fileName:index.fileName,path:path,key:key,options:options});return index}exports.createIndex=createIndex},{"../data-index":13,"../promise-fs":14,"acebase-core":38}],17:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.CustomStorageHelpers=void 0;const acebase_core_1=require("acebase-core");class CustomStorageHelpers{static ChildPathsSql(path,columnName="path"){const where=path===""?`${columnName} <> '' AND ${columnName} NOT LIKE '%/%'`:`(${columnName} LIKE '${path}/%' OR ${columnName} LIKE '${path}[%') AND ${columnName} NOT LIKE '${path}/%/%' AND ${columnName} NOT LIKE '${path}[%]/%' AND ${columnName} NOT LIKE '${path}[%][%'`;return where}static ChildPathsRegex(path){return new RegExp(`^${path}(?:/[^/[]+|\\[[0-9]+\\])$`)}static DescendantPathsSql(path,columnName="path"){const where=path===""?`${columnName} <> ''`:`${columnName} LIKE '${path}/%' OR ${columnName} LIKE '${path}[%'`;return where}static DescendantPathsRegex(path){return new RegExp(`^${path}(?:/[^/[]+|\\[[0-9]+\\])`)}static get PathInfo(){return acebase_core_1.PathInfo}}exports.CustomStorageHelpers=CustomStorageHelpers},{"acebase-core":38}],18:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.CustomStorage=exports.CustomStorageNodeInfo=exports.CustomStorageNodeAddress=exports.CustomStorageSettings=exports.CustomStorageTransaction=exports.ICustomStorageNode=exports.ICustomStorageNodeMetaData=exports.CustomStorageHelpers=void 0;const acebase_core_1=require("acebase-core");const{compareValues:compareValues}=acebase_core_1.Utils;const node_info_1=require("../../node-info");const node_lock_1=require("../../node-lock");const node_value_types_1=require("../../node-value-types");const node_errors_1=require("../../node-errors");const index_1=require("../index");const helpers_1=require("./helpers");const node_address_1=require("../../node-address");var helpers_2=require("./helpers");Object.defineProperty(exports,"CustomStorageHelpers",{enumerable:true,get:function(){return helpers_2.CustomStorageHelpers}});class ICustomStorageNodeMetaData{constructor(){this.revision="";this.revision_nr=0;this.created=0;this.modified=0;this.type=0}}exports.ICustomStorageNodeMetaData=ICustomStorageNodeMetaData;class ICustomStorageNode extends ICustomStorageNodeMetaData{constructor(){super();this.value=null}}exports.ICustomStorageNode=ICustomStorageNode;class CustomStorageTransaction{constructor(target){this.production=false;this.target={get originalPath(){return target.path},path:target.path,get write(){return target.write}};this.id=acebase_core_1.ID.generate()}async getChildCount(path){let childCount=0;await this.childrenOf(path,{metadata:false,value:false},(()=>{childCount++;return false}));return childCount}async getMultiple(paths){const map=new Map;await Promise.all(paths.map((path=>this.get(path).then((val=>map.set(path,val))))));return map}async setMultiple(nodes){await Promise.all(nodes.map((({path:path,node:node})=>this.set(path,node))))}async removeMultiple(paths){await Promise.all(paths.map((path=>this.remove(path))))}async commit(){throw new Error(`CustomStorageTransaction.rollback must be overridden by subclass`)}async moveToParentPath(targetPath){const currentPath=this._lock&&this._lock.path||this.target.path;if(currentPath===targetPath){return targetPath}const pathInfo=helpers_1.CustomStorageHelpers.PathInfo.get(targetPath);if(pathInfo.isParentOf(currentPath)){if(this._lock){this._lock=await this._lock.moveToParent()}}else{throw new Error(`Locking issue. Locked path "${this._lock.path}" is not a child/descendant of "${targetPath}"`)}this.target.path=targetPath;return targetPath}}exports.CustomStorageTransaction=CustomStorageTransaction;class CustomStorageSettings extends index_1.StorageSettings{constructor(settings){super(settings);this.locking=true;if(typeof settings!=="object"){throw new Error("settings missing")}if(typeof settings.ready!=="function"){throw new Error(`ready must be a function`)}if(typeof settings.getTransaction!=="function"){throw new Error(`getTransaction must be a function`)}this.name=settings.name;this.locking=settings.locking!==false;if(this.locking){this.lockTimeout=typeof settings.lockTimeout==="number"?settings.lockTimeout:120}this.ready=settings.ready;const useLocking=this.locking;const nodeLocker=useLocking?new node_lock_1.NodeLocker(console,this.lockTimeout):null;this.getTransaction=async({path:path,write:write})=>{const transaction=await settings.getTransaction({path:path,write:write});console.assert(typeof transaction.id==="string",`transaction id not set`);const rollback=transaction.rollback;const commit=transaction.commit;transaction.commit=async()=>{const ret=await commit.call(transaction);if(useLocking){await transaction._lock.release("commit")}return ret};transaction.rollback=async reason=>{const ret=await rollback.call(transaction,reason);if(useLocking){await transaction._lock.release("rollback")}return ret};if(useLocking){transaction._lock=await nodeLocker.lock(path,transaction.id,write,`${this.name}::getTransaction`)}return transaction}}}exports.CustomStorageSettings=CustomStorageSettings;class CustomStorageNodeAddress{constructor(containerPath){this.path=containerPath}}exports.CustomStorageNodeAddress=CustomStorageNodeAddress;class CustomStorageNodeInfo extends node_info_1.NodeInfo{constructor(info){super(info);this.revision=info.revision;this.revision_nr=info.revision_nr;this.created=info.created;this.modified=info.modified}}exports.CustomStorageNodeInfo=CustomStorageNodeInfo;class CustomStorage extends index_1.Storage{constructor(dbname,settings,env){super(dbname,settings,env);this._customImplementation=settings;this._init()}async _init(){this.debug.log(`Database "${this.name}" details:`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Type: CustomStorage`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Path: ${this.settings.path}`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Max inline value size: ${this.settings.maxInlineValueSize}`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Autoremove undefined props: ${this.settings.removeVoidProperties}`.colorize(acebase_core_1.ColorStyle.dim));await this._customImplementation.ready();const transaction=await this._customImplementation.getTransaction({path:"",write:true});const info=await this.getNodeInfo("",{transaction:transaction});if(!info.exists){await this._writeNode("",{},{transaction:transaction})}await transaction.commit();if(this.indexes.supported){await this.indexes.load()}this.emit("ready")}throwImplementationError(message){throw new Error(`CustomStorage "${this._customImplementation.name}" ${message}`)}_storeNode(path,node,options){const getTypedChildValue=val=>{if(val===null){throw new Error(`Not allowed to store null values. remove the property`)}else if(["string","number","boolean"].includes(typeof val)){return val}else if(val instanceof Date){return{type:node_value_types_1.VALUE_TYPES.DATETIME,value:val.getTime()}}else if(val instanceof acebase_core_1.PathReference){return{type:node_value_types_1.VALUE_TYPES.REFERENCE,value:val.path}}else if(val instanceof ArrayBuffer){return{type:node_value_types_1.VALUE_TYPES.BINARY,value:acebase_core_1.ascii85.encode(val)}}else if(typeof val==="object"){console.assert(Object.keys(val).length===0,"child object stored in parent can only be empty");return val}};const unprocessed=`Caller should have pre-processed the value by converting it to a string`;if(node.type===node_value_types_1.VALUE_TYPES.ARRAY&&node.value instanceof Array){console.warn(`Unprocessed array. ${unprocessed}`);const obj={};for(let i=0;i{node.value[key]=getTypedChildValue(original[key])}))}return options.transaction.set(path,node)}_processReadNodeValue(node){const getTypedChildValue=val=>{if(val.type===node_value_types_1.VALUE_TYPES.BINARY){return acebase_core_1.ascii85.decode(val.value)}else if(val.type===node_value_types_1.VALUE_TYPES.DATETIME){return new Date(val.value)}else if(val.type===node_value_types_1.VALUE_TYPES.REFERENCE){return new acebase_core_1.PathReference(val.value)}else{throw new Error(`Unhandled child value type ${val.type}`)}};switch(node.type){case node_value_types_1.VALUE_TYPES.ARRAY:case node_value_types_1.VALUE_TYPES.OBJECT:{const obj=node.value;Object.keys(obj).forEach((key=>{const item=obj[key];if(typeof item==="object"&&"type"in item){obj[key]=getTypedChildValue(item)}}));node.value=obj;break}case node_value_types_1.VALUE_TYPES.BINARY:{node.value=acebase_core_1.ascii85.decode(node.value);break}case node_value_types_1.VALUE_TYPES.REFERENCE:{node.value=new acebase_core_1.PathReference(node.value);break}case node_value_types_1.VALUE_TYPES.STRING:{break}default:throw new Error(`Invalid standalone record value type`)}}async _readNode(path,options){const node=await options.transaction.get(path);if(node===null){return null}if(typeof node!=="object"){this.throwImplementationError(`transaction.get must return an ICustomStorageNode object. Use JSON.parse if your set function stored it as a string`)}this._processReadNodeValue(node);return node}_getTypeFromStoredValue(val){let type;if(typeof val==="string"){type=node_value_types_1.VALUE_TYPES.STRING}else if(typeof val==="number"){type=node_value_types_1.VALUE_TYPES.NUMBER}else if(typeof val==="boolean"){type=node_value_types_1.VALUE_TYPES.BOOLEAN}else if(val instanceof Array){type=node_value_types_1.VALUE_TYPES.ARRAY}else if(typeof val==="object"){if("type"in val){const serialized=val;type=serialized.type;val=serialized.value;if(type===node_value_types_1.VALUE_TYPES.DATETIME){val=new Date(val)}else if(type===node_value_types_1.VALUE_TYPES.REFERENCE){val=new acebase_core_1.PathReference(val)}}else{type=node_value_types_1.VALUE_TYPES.OBJECT}}else{throw new Error(`Unknown value type`)}return{type:type,value:val}}async _writeNode(path,value,options){if(!options.merge&&this.valueFitsInline(value)&&path!==""){throw new Error(`invalid value to store in its own node`)}else if(path===""&&(typeof value!=="object"||value instanceof Array)){throw new Error(`Invalid root node value. Must be an object`)}if(typeof options.diff==="undefined"&&typeof options.currentValue!=="undefined"){const diff=compareValues(options.currentValue,value);if(options.merge&&typeof diff==="object"){diff.removed=diff.removed.filter((key=>value[key]===null))}options.diff=diff}if(options.diff==="identical"){return}const transaction=options.transaction;const currentRow=options.currentValue===null?null:await this._readNode(path,{transaction:transaction});if(options.merge&¤tRow){if(currentRow.type===node_value_types_1.VALUE_TYPES.ARRAY&&!(value instanceof Array)&&typeof value==="object"&&Object.keys(value).some((key=>isNaN(parseInt(key))))){throw new Error(`Cannot merge existing array of path "${path}" with an object`)}if(value instanceof Array&¤tRow.type!==node_value_types_1.VALUE_TYPES.ARRAY){throw new Error(`Cannot merge existing object of path "${path}" with an array`)}}const revision=options.revision||acebase_core_1.ID.generate();const mainNode={type:currentRow&¤tRow.type===node_value_types_1.VALUE_TYPES.ARRAY?node_value_types_1.VALUE_TYPES.ARRAY:node_value_types_1.VALUE_TYPES.OBJECT,value:{}};const childNodeValues={};if(value instanceof Array){mainNode.type=node_value_types_1.VALUE_TYPES.ARRAY;const obj={};for(let i=0;i{if(!(key in value)){value[key]=null}}))}Object.keys(value).forEach((key=>{const val=value[key];delete mainNode.value[key];if(val===null){return}else if(typeof val==="undefined"){if(this.settings.removeVoidProperties===true){delete value[key];return}else{throw new Error(`Property "${key}" has invalid value. Cannot store undefined values. Set removeVoidProperties option to true to automatically remove undefined properties`)}}if(this.valueFitsInline(val)){mainNode.value[key]=val}else{childNodeValues[key]=val}}))}const isArray=mainNode.type===node_value_types_1.VALUE_TYPES.ARRAY;if(currentRow){this.debug.log(`Node "/${path}" is being ${options.merge?"updated":"overwritten"}`.colorize(acebase_core_1.ColorStyle.cyan));if(currentIsObjectOrArray||newIsObjectOrArray){const pathInfo=acebase_core_1.PathInfo.get(path);const keys=[];let checkExecuted=false;const includeChildCheck=childPath=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isParentOf(childPath)){this.throwImplementationError(`"${childPath}" is not a child of "${path}" - childrenOf must only check and return paths that are children`)}return true};const addChildPath=childPath=>{if(!checkExecuted){this.throwImplementationError(`childrenOf did not call checkCallback before addCallback`)}const key=acebase_core_1.PathInfo.get(childPath).key;keys.push(key.toString());return true};await transaction.childrenOf(path,{metadata:false,value:false},includeChildCheck,addChildPath);children.current=children.current.concat(keys);if(newIsObjectOrArray){if(options&&options.merge){children.new=children.current.slice()}Object.keys(value).forEach((key=>{if(!children.new.includes(key)){children.new.push(key)}}))}const changes={insert:children.new.filter((key=>!children.current.includes(key))),update:[],delete:options&&options.merge?Object.keys(value).filter((key=>value[key]===null)):children.current.filter((key=>!children.new.includes(key)))};changes.update=children.new.filter((key=>children.current.includes(key)&&!changes.delete.includes(key)));if(isArray&&options.merge&&(changes.insert.length>0||changes.delete.length>0)){const newArrayKeys=changes.update.concat(changes.insert);const isExhaustive=newArrayKeys.every(((k,index,arr)=>arr.includes(index.toString())));if(!isExhaustive){throw new Error(`Elements cannot be inserted beyond, or removed before the end of an array. Rewrite the whole array at path "${path}" or change your schema to use an object collection instead`)}}const writePromises=Object.keys(childNodeValues).map((key=>{const keyOrIndex=isArray?parseInt(key):key;const childDiff=typeof options.diff==="object"?options.diff.forChild(keyOrIndex):undefined;if(childDiff==="identical"){return}const childPath=pathInfo.childPath(keyOrIndex);const childValue=childNodeValues[keyOrIndex];const currentChildValue=typeof options.currentValue==="undefined"?undefined:options.currentValue!==null&&typeof options.currentValue==="object"&&keyOrIndex in options.currentValue?options.currentValue[keyOrIndex]:null;return this._writeNode(childPath,childValue,{transaction:transaction,revision:revision,merge:false,currentValue:currentChildValue,diff:childDiff})}));const movingNodes=newIsObjectOrArray?keys.filter((key=>key in mainNode.value)):[];const deleteDedicatedKeys=changes.delete.concat(movingNodes);const deletePromises=deleteDedicatedKeys.map((key=>{const keyOrIndex=isArray?parseInt(key):key;const childPath=pathInfo.childPath(keyOrIndex);return this._deleteNode(childPath,{transaction:transaction})}));const promises=writePromises.concat(deletePromises);await Promise.all(promises)}const p=this._storeNode(path,{type:mainNode.type,value:mainNode.value,revision:currentRow.revision,revision_nr:currentRow.revision_nr+1,created:currentRow.created,modified:Date.now()},{transaction:transaction});if(p instanceof Promise){return await p}}else{this.debug.log(`Node "/${path}" is being created`.colorize(acebase_core_1.ColorStyle.cyan));if(isArray){const arrayKeys=Object.keys(mainNode.value).concat(Object.keys(childNodeValues));const isExhaustive=arrayKeys.every(((k,index,arr)=>arr.includes(index.toString())));if(!isExhaustive){throw new Error(`Cannot store arrays with missing entries`)}}const promises=Object.keys(childNodeValues).map((key=>{const keyOrIndex=isArray?parseInt(key):key;const childPath=acebase_core_1.PathInfo.getChildPath(path,keyOrIndex);const childValue=childNodeValues[keyOrIndex];return this._writeNode(childPath,childValue,{transaction:transaction,revision:revision,merge:false,currentValue:null})}));const p=this._storeNode(path,{type:mainNode.type,value:mainNode.value,revision:revision,revision_nr:1,created:Date.now(),modified:Date.now()},{transaction:transaction});if(p instanceof Promise){promises.push(p)}await Promise.all(promises)}}async _deleteNode(path,options){const pathInfo=acebase_core_1.PathInfo.get(path);this.debug.log(`Node "/${path}" is being deleted`.colorize(acebase_core_1.ColorStyle.cyan));const deletePaths=[path];let checkExecuted=false;const includeDescendantCheck=descPath=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isAncestorOf(descPath)){this.throwImplementationError(`"${descPath}" is not a descendant of "${path}" - descendantsOf must only check and return paths that are descendants`)}return true};const addDescendant=descPath=>{if(!checkExecuted){this.throwImplementationError(`descendantsOf did not call checkCallback before addCallback`)}deletePaths.push(descPath);return true};const transaction=options.transaction;await transaction.descendantsOf(path,{metadata:false,value:false},includeDescendantCheck,addDescendant);this.debug.log(`Nodes ${deletePaths.map((p=>`"/${p}"`)).join(",")} are being deleted`.colorize(acebase_core_1.ColorStyle.cyan));return transaction.removeMultiple(deletePaths)}getChildren(path,options={}){let callback;const generator={next(valueCallback){callback=valueCallback;return start()}};const start=async()=>{const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:false});try{let canceled=false;await(async()=>{const node=await this._readNode(path,{transaction:transaction});if(!node){throw new node_errors_1.NodeNotFoundError(`Node "/${path}" does not exist`)}if(![node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(node.type)){return}const isArray=node.type===node_value_types_1.VALUE_TYPES.ARRAY;const value=node.value;let keys=Object.keys(value).map((key=>isArray?parseInt(key):key));if(options.keyFilter){keys=keys.filter((key=>options.keyFilter.includes(key)))}const pathInfo=acebase_core_1.PathInfo.get(path);keys.length>0&&keys.every((key=>{const child=this._getTypeFromStoredValue(value[key]);const info=new CustomStorageNodeInfo({path:pathInfo.childPath(key),key:isArray?null:key,index:isArray?key:null,type:child.type,address:null,exists:true,value:child.value,revision:node.revision,revision_nr:node.revision_nr,created:new Date(node.created),modified:new Date(node.modified)});canceled=callback(info)===false;return!canceled}));if(canceled){return}let checkExecuted=false;const includeChildCheck=childPath=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isParentOf(childPath)){this.throwImplementationError(`"${childPath}" is not a child of "${path}" - childrenOf must only check and return paths that are children`)}if(options.keyFilter){const key=acebase_core_1.PathInfo.get(childPath).key;return options.keyFilter.includes(key)}return true};const addChildNode=(childPath,node)=>{if(!checkExecuted){this.throwImplementationError(`childrenOf did not call checkCallback before addCallback`)}const key=acebase_core_1.PathInfo.get(childPath).key;const info=new CustomStorageNodeInfo({path:childPath,type:node.type,key:isArray?null:key,index:isArray?key:null,address:new node_address_1.NodeAddress(childPath),exists:true,value:null,revision:node.revision,revision_nr:node.revision_nr,created:new Date(node.created),modified:new Date(node.modified)});canceled=callback(info)===false;return!canceled};await transaction.childrenOf(path,{metadata:true,value:false},includeChildCheck,addChildNode)})();if(!options.transaction){await transaction.commit()}return canceled}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}};return generator}async getNode(path,options){options=options||{};const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:false});try{const node=await(async()=>{const filtered=options.include&&options.include.length>0||options.exclude&&options.exclude.length>0||options.child_objects===false;const pathInfo=acebase_core_1.PathInfo.get(path);const targetNode=await this._readNode(path,{transaction:transaction});if(!targetNode){if(path===""){return{value:null}}const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);const parentNode=await this._readNode(pathInfo.parentPath,{transaction:transaction});if(parentNode&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(parentNode.type)&&pathInfo.key in parentNode.value){const childValueInfo=this._getTypeFromStoredValue(parentNode.value[pathInfo.key]);return{revision:parentNode.revision,revision_nr:parentNode.revision_nr,created:parentNode.created,modified:parentNode.modified,type:childValueInfo.type,value:childValueInfo.value}}return{value:null}}const isArray=targetNode.type===node_value_types_1.VALUE_TYPES.ARRAY;const convertFilterArray=arr=>{const isNumber=key=>/^[0-9]+$/.test(key);return arr.map((path=>acebase_core_1.PathInfo.get(isArray&&isNumber(path)?`[${path}]`:path)))};const includeFilter=options.include?convertFilterArray(options.include):[];const excludeFilter=options.exclude?convertFilterArray(options.exclude):[];const applyFiltersOnInlineData=(descPath,node)=>{if([node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(node.type)&&includeFilter.length>0){const trailKeys=acebase_core_1.PathInfo.getPathKeys(descPath).slice(pathInfo.keys.length);const checkPathInfo=new acebase_core_1.PathInfo(trailKeys);const remove=[];const includes=includeFilter.filter((info=>info.isDescendantOf(checkPathInfo)));if(includes.length>0){const isArray=node.type===node_value_types_1.VALUE_TYPES.ARRAY;remove.push(...Object.keys(node.value).map((key=>isArray?+key:key)));for(const info of includes){const targetProp=info.keys[trailKeys.length];if(typeof targetProp==="string"&&(targetProp==="*"||targetProp.startsWith("$"))){remove.splice(0);break}const index=remove.indexOf(targetProp);index>=0&&remove.splice(index,1)}}const hasIncludeOnChild=includeFilter.some((info=>info.isChildOf(checkPathInfo)));const hasExcludeOnChild=excludeFilter.some((info=>info.isChildOf(checkPathInfo)));if(hasExcludeOnChild&&!hasIncludeOnChild){const excludes=excludeFilter.filter((info=>info.isChildOf(checkPathInfo)));for(let i=0;iinfo.equals(remove[i])))){remove.splice(i,1);i--}}}for(const key of remove){delete node.value[key]}}};applyFiltersOnInlineData(path,targetNode);let checkExecuted=false;const includeDescendantCheck=(descPath,metadata)=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isAncestorOf(descPath)){this.throwImplementationError(`"${descPath}" is not a descendant of "${path}" - descendantsOf must only check and return paths that are descendants`)}if(!filtered){return true}const descPathKeys=acebase_core_1.PathInfo.getPathKeys(descPath);const trailKeys=descPathKeys.slice(pathInfo.keys.length);const checkPathInfo=new acebase_core_1.PathInfo(trailKeys);let include=(includeFilter.length>0?includeFilter.some((info=>checkPathInfo.isOnTrailOf(info))):true)&&(excludeFilter.length>0?!excludeFilter.some((info=>info.equals(checkPathInfo)||info.isAncestorOf(checkPathInfo))):true);if(include&&options.child_objects===false&&(pathInfo.isParentOf(descPath)&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(metadata?metadata.type:-1)||acebase_core_1.PathInfo.getPathKeys(descPath).length>pathInfo.pathKeys.length+1)){include=false}return include};const descRows=[];const addDescendant=(descPath,node)=>{if(!checkExecuted){this.throwImplementationError("descendantsOf did not call checkCallback before addCallback")}if(options.child_objects===false&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(node.type)){return true}applyFiltersOnInlineData(descPath,node);this._processReadNodeValue(node);const row=node;row.path=descPath;descRows.push(row);return true};await transaction.descendantsOf(path,{metadata:true,value:true},includeDescendantCheck,addDescendant);this.debug.log(`Read node "/${path}" and ${filtered?"(filtered) ":""}descendants from ${descRows.length+1} records`.colorize(acebase_core_1.ColorStyle.magenta));const result=targetNode;const objectToArray=obj=>{const arr=[];Object.keys(obj).forEach((key=>{const index=parseInt(key);arr[index]=obj[index]}));return arr};if(targetNode.type===node_value_types_1.VALUE_TYPES.ARRAY){result.value=objectToArray(result.value)}if(targetNode.type===node_value_types_1.VALUE_TYPES.OBJECT||targetNode.type===node_value_types_1.VALUE_TYPES.ARRAY){const targetPathKeys=acebase_core_1.PathInfo.getPathKeys(path);const value=targetNode.value;for(let i=0;i{if(childKey in parent[key]){this.throwImplementationError(`Custom storage merge error: child key "${childKey}" is in parent value already! Make sure the get/childrenOf/descendantsOf methods of the custom storage class return values that can be modified by AceBase without affecting the stored source`)}parent[key][childKey]=nodeValue[childKey]}))}}else{parent[key]=nodeValue}parent=parent[key]}}}else if(descRows.length>0){this.throwImplementationError(`multiple records found for non-object value!`)}if(options.child_objects===false){Object.keys(result.value).forEach((key=>{if(typeof result.value[key]==="object"&&result.value[key].constructor===Object){console.assert(Object.keys(result.value[key]).length===0);delete result.value[key]}}))}if(options.include){}if(options.exclude){const process=(obj,keys)=>{if(typeof obj!=="object"){return}const key=keys[0];if(key==="*"){Object.keys(obj).forEach((k=>{process(obj[k],keys.slice(1))}))}else if(keys.length>1){key in obj&&process(obj[key],keys.slice(1))}else{delete obj[key]}};options.exclude.forEach((path=>{const checkKeys=acebase_core_1.PathInfo.getPathKeys(path);process(result.value,checkKeys)}))}return result})();if(!options.transaction){await transaction.commit()}return node}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}async getNodeInfo(path,options={}){options=options||{};const pathInfo=acebase_core_1.PathInfo.get(path);const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:false});try{const node=await this._readNode(path,{transaction:transaction});const info=new CustomStorageNodeInfo({path:path,key:typeof pathInfo.key==="string"?pathInfo.key:null,index:typeof pathInfo.key==="number"?pathInfo.key:null,type:node?node.type:0,exists:node!==null,address:node?new node_address_1.NodeAddress(path):null,created:node?new Date(node.created):null,modified:node?new Date(node.modified):null,revision:node?node.revision:null,revision_nr:node?node.revision_nr:null});if(!node&&path!==""){const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);const parent=await this._readNode(pathInfo.parentPath,{transaction:transaction});if(parent&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(parent.type)&&pathInfo.key in parent.value){info.exists=true;info.value=parent.value[pathInfo.key];info.address=null;info.type=parent.type;info.created=new Date(parent.created);info.modified=new Date(parent.modified);info.revision=parent.revision;info.revision_nr=parent.revision_nr}else{info.address=null}}if(options.include_child_count){info.childCount=0;if([node_value_types_1.VALUE_TYPES.ARRAY,node_value_types_1.VALUE_TYPES.OBJECT].includes(info.valueType)&&info.address){info.childCount=node.value?Object.keys(node.value).length:0;info.childCount+=await transaction.getChildCount(path)}}if(!options.transaction){await transaction.commit()}return info}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}async setNode(path,value,options={suppress_events:false,context:null}){if(this.settings.readOnly){throw new Error(`Database is opened in read-only mode`)}const pathInfo=acebase_core_1.PathInfo.get(path);const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:true});try{if(path===""){if(value===null||typeof value!=="object"||value instanceof Array||value instanceof ArrayBuffer||"buffer"in value&&value.buffer instanceof ArrayBuffer){throw new Error(`Invalid value for root node: ${value}`)}await this._writeNodeWithTracking("",value,{merge:false,transaction:transaction,suppress_events:options.suppress_events,context:options.context})}else if(typeof options.assert_revision!=="undefined"){const info=await this.getNodeInfo(path,{transaction:transaction});if(info.revision!==options.assert_revision){throw new node_errors_1.NodeRevisionError(`revision '${info.revision}' does not match requested revision '${options.assert_revision}'`)}if(info.address&&info.address.path===path&&value!==null&&!this.valueFitsInline(value)){await this._writeNodeWithTracking(path,value,{merge:false,transaction:transaction,suppress_events:options.suppress_events,context:options.context})}else{const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this._writeNodeWithTracking(pathInfo.parentPath,{[pathInfo.key]:value},{merge:true,transaction:transaction,suppress_events:options.suppress_events,context:options.context})}}else{const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this.updateNode(pathInfo.parentPath,{[pathInfo.key]:value},{transaction:transaction,suppress_events:options.suppress_events,context:options.context})}if(!options.transaction){await transaction.commit()}}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}async updateNode(path,updates,options={suppress_events:false,context:null}){if(this.settings.readOnly){throw new Error(`Database is opened in read-only mode`)}if(typeof updates!=="object"){throw new Error(`invalid updates argument`)}else if(Object.keys(updates).length===0){return}const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:true});try{const nodeInfo=await this.getNodeInfo(path,{transaction:transaction});const pathInfo=acebase_core_1.PathInfo.get(path);if(nodeInfo.exists&&nodeInfo.address&&nodeInfo.address.path===path){await this._writeNodeWithTracking(path,updates,{transaction:transaction,merge:true,suppress_events:options.suppress_events,context:options.context})}else if(nodeInfo.exists){const pathInfo=acebase_core_1.PathInfo.get(path);const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this._writeNodeWithTracking(pathInfo.parentPath,{[pathInfo.key]:updates},{transaction:transaction,merge:true,suppress_events:options.suppress_events,context:options.context})}else{const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this.updateNode(pathInfo.parentPath,{[pathInfo.key]:updates},{transaction:transaction,suppress_events:options.suppress_events,context:options.context})}if(!options.transaction){await transaction.commit()}}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}}exports.CustomStorage=CustomStorage},{"../../node-address":8,"../../node-errors":9,"../../node-info":10,"../../node-lock":11,"../../node-value-types":12,"../index":25,"./helpers":17,"acebase-core":38}],19:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createIndexedDBInstance=void 0;const acebase_core_1=require("acebase-core");const __1=require("..");const __2=require("../../..");const settings_1=require("./settings");const transaction_1=require("./transaction");function createIndexedDBInstance(dbname,init={}){const settings=new settings_1.IndexedDBStorageSettings(init);const IndexedDB=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;const request=IndexedDB.open(`${dbname}.acebase`,1);request.onupgradeneeded=e=>{const db=request.result;db.createObjectStore("nodes",{keyPath:"path"});db.createObjectStore("content")};let idb;const readyPromise=new Promise(((resolve,reject)=>{request.onsuccess=e=>{idb=request.result;resolve()};request.onerror=e=>{reject(e)}}));const cache=new acebase_core_1.SimpleCache(typeof settings.cacheSeconds==="number"?settings.cacheSeconds:60);const storageSettings=new __1.CustomStorageSettings({name:"IndexedDB",locking:true,removeVoidProperties:settings.removeVoidProperties,maxInlineValueSize:settings.maxInlineValueSize,lockTimeout:settings.lockTimeout,ready(){return readyPromise},async getTransaction(target){await readyPromise;const context={debug:false,db:idb,cache:cache,ipc:ipc};return new transaction_1.IndexedDBStorageTransaction(context,target)}});const db=new __2.AceBase(dbname,{logLevel:settings.logLevel,storage:storageSettings,sponsor:settings.sponsor});const ipc=db.api.storage.ipc;db.settings.ipcEvents=settings.multipleTabs===true;ipc.on("notification",(async notification=>{const message=notification.data;if(typeof message!=="object"){return}if(message.action==="cache.invalidate"){for(const path of message.paths){cache.remove(path)}}}));return db}exports.createIndexedDBInstance=createIndexedDBInstance},{"..":18,"../../..":5,"./settings":20,"./transaction":21,"acebase-core":38}],20:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.IndexedDBStorageSettings=void 0;const __1=require("../..");class IndexedDBStorageSettings extends __1.StorageSettings{constructor(settings){super(settings);this.multipleTabs=false;this.cacheSeconds=60;this.sponsor=false;if(typeof settings.logLevel==="string"){this.logLevel=settings.logLevel}if(typeof settings.multipleTabs==="boolean"){this.multipleTabs=settings.multipleTabs}if(typeof settings.cacheSeconds==="number"){this.cacheSeconds=settings.cacheSeconds}if(typeof settings.sponsor==="boolean"){this.sponsor=settings.sponsor}["type","ipc","path"].forEach((prop=>{if(prop in settings){console.warn(`${prop} setting is not supported for AceBase IndexedDBStorage`)}}))}}exports.IndexedDBStorageSettings=IndexedDBStorageSettings},{"../..":25}],21:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.IndexedDBStorageTransaction=void 0;const __1=require("..");function _requestToPromise(request){return new Promise(((resolve,reject)=>{request.onsuccess=event=>resolve(request.result||null);request.onerror=reject}))}class IndexedDBStorageTransaction extends __1.CustomStorageTransaction{constructor(context,target){super(target);this.context=context;this.production=true;this._pending=[]}_createTransaction(write=false){const tx=this.context.db.transaction(["nodes","content"],write?"readwrite":"readonly");return tx}_splitMetadata(node){const value=node.value;const copy=Object.assign({},node);delete copy.value;const metadata=copy;return{metadata:metadata,value:value}}async commit(){if(this._pending.length===0){return}const batch=this._pending.splice(0);this.context.ipc.sendNotification({action:"cache.invalidate",paths:batch.map((op=>op.path))});const tx=this._createTransaction(true);try{await new Promise(((resolve,reject)=>{let stop=false,processed=0;const handleError=err=>{stop=true;reject(err)};const handleSuccess=()=>{if(++processed===batch.length){resolve()}};batch.forEach(((op,i)=>{if(stop){return}let r1,r2;const path=op.path;if(op.action==="set"){const{metadata:metadata,value:value}=this._splitMetadata(op.node);const nodeInfo={path:path,metadata:metadata};r1=tx.objectStore("nodes").put(nodeInfo);r2=tx.objectStore("content").put(value,path);this.context.cache.set(path,op.node)}else if(op.action==="remove"){r1=tx.objectStore("content").delete(path);r2=tx.objectStore("nodes").delete(path);this.context.cache.set(path,null)}else{handleError(new Error(`Unknown pending operation "${op.action}" on path "${path}" `))}let succeeded=0;r1.onsuccess=r2.onsuccess=()=>{if(++succeeded===2){handleSuccess()}};r1.onerror=r2.onerror=handleError}))}));tx.commit&&tx.commit()}catch(err){console.error(err);tx.abort&&tx.abort();throw err}}async rollback(err){this._pending=[]}async get(path){if(this.context.cache.has(path)){const cache=this.context.cache.get(path);return cache}const tx=this._createTransaction(false);const r1=_requestToPromise(tx.objectStore("nodes").get(path));const r2=_requestToPromise(tx.objectStore("content").get(path));try{const results=await Promise.all([r1,r2]);tx.commit&&tx.commit();const info=results[0];if(!info){this.context.cache.set(path,null);return null}const node=info.metadata;node.value=results[1];this.context.cache.set(path,node);return node}catch(err){console.error(`IndexedDB get error`,err);tx.abort&&tx.abort();throw err}}set(path,node){this._pending.push({action:"set",path:path,node:node})}remove(path){this._pending.push({action:"remove",path:path})}async removeMultiple(paths){paths.forEach((path=>{this._pending.push({action:"remove",path:path})}))}childrenOf(path,include,checkCallback,addCallback){return this._getChildrenOf(path,Object.assign(Object.assign({},include),{descendants:false}),checkCallback,addCallback)}descendantsOf(path,include,checkCallback,addCallback){return this._getChildrenOf(path,Object.assign(Object.assign({},include),{descendants:true}),checkCallback,addCallback)}_getChildrenOf(path,include,checkCallback,addCallback){return new Promise(((resolve,reject)=>{const pathInfo=__1.CustomStorageHelpers.PathInfo.get(path);const tx=this._createTransaction(false);const store=tx.objectStore("nodes");const query=IDBKeyRange.lowerBound(path,true);const cursor=include.metadata?store.openCursor(query):store.openKeyCursor(query);cursor.onerror=e=>{var _a;(_a=tx.abort)===null||_a===void 0?void 0:_a.call(tx);reject(e)};cursor.onsuccess=async e=>{var _a,_b,_c;const otherPath=(_b=(_a=cursor.result)===null||_a===void 0?void 0:_a.key)!==null&&_b!==void 0?_b:null;let keepGoing=true;if(otherPath===null){keepGoing=false}else if(!pathInfo.isAncestorOf(otherPath)){keepGoing=false}else if(include.descendants||pathInfo.isParentOf(otherPath)){let node;if(include.metadata){const valueCursor=cursor;const data=valueCursor.result.value;node=data.metadata}const shouldAdd=checkCallback(otherPath,node);if(shouldAdd){if(include.value){if(this.context.cache.has(otherPath)){const cache=this.context.cache.get(otherPath);node.value=cache.value}else{const req=tx.objectStore("content").get(otherPath);node.value=await new Promise(((resolve,reject)=>{req.onerror=e=>{resolve(null)};req.onsuccess=e=>{resolve(req.result)}}));this.context.cache.set(otherPath,node.value===null?null:node)}}keepGoing=addCallback(otherPath,node)}}if(keepGoing){try{cursor.result.continue()}catch(err){keepGoing=false}}if(!keepGoing){(_c=tx.commit)===null||_c===void 0?void 0:_c.call(tx);resolve()}}}))}}exports.IndexedDBStorageTransaction=IndexedDBStorageTransaction},{"..":18}],22:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createLocalStorageInstance=exports.LocalStorageTransaction=exports.LocalStorageSettings=void 0;const __1=require("..");const __2=require("../../..");const settings_1=require("./settings");Object.defineProperty(exports,"LocalStorageSettings",{enumerable:true,get:function(){return settings_1.LocalStorageSettings}});const transaction_1=require("./transaction");Object.defineProperty(exports,"LocalStorageTransaction",{enumerable:true,get:function(){return transaction_1.LocalStorageTransaction}});function createLocalStorageInstance(dbname,init={}){const settings=new settings_1.LocalStorageSettings(init);const localStorage=settings.provider?settings.provider:settings.temp?window.localStorage:window.sessionStorage;const storageSettings=new __1.CustomStorageSettings({name:"LocalStorage",locking:true,removeVoidProperties:settings.removeVoidProperties,maxInlineValueSize:settings.maxInlineValueSize,ready(){return Promise.resolve()},getTransaction(target){const context={debug:true,dbname:dbname,localStorage:localStorage};const transaction=new transaction_1.LocalStorageTransaction(context,target);return Promise.resolve(transaction)}});const db=new __2.AceBase(dbname,{logLevel:settings.logLevel,storage:storageSettings,sponsor:settings.sponsor});db.settings.ipcEvents=settings.multipleTabs===true;return db}exports.createLocalStorageInstance=createLocalStorageInstance},{"..":18,"../../..":5,"./settings":23,"./transaction":24}],23:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.LocalStorageSettings=void 0;const __1=require("../..");class LocalStorageSettings extends __1.StorageSettings{constructor(settings){super(settings);this.temp=false;this.multipleTabs=false;if(typeof settings.temp==="boolean"){this.temp=settings.temp}if(typeof settings.provider==="object"){this.provider=settings.provider}if(typeof settings.multipleTabs==="boolean"){this.multipleTabs=settings.multipleTabs}if(typeof settings.logLevel==="string"){this.logLevel=settings.logLevel}if(typeof settings.sponsor==="boolean"){this.sponsor=settings.sponsor}["type","ipc","path"].forEach((prop=>{if(prop in settings){console.warn(`${prop} setting is not supported for AceBase LocalStorage`)}}))}}exports.LocalStorageSettings=LocalStorageSettings},{"../..":25}],24:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.LocalStorageTransaction=void 0;const __1=require("..");class LocalStorageTransaction extends __1.CustomStorageTransaction{constructor(context,target){super(target);this.context=context;this._storageKeysPrefix=`${this.context.dbname}.acebase::`}async commit(){}async rollback(err){}async get(path){const json=this.context.localStorage.getItem(this.getStorageKeyForPath(path));const val=JSON.parse(json);return val}async set(path,val){const json=JSON.stringify(val);this.context.localStorage.setItem(this.getStorageKeyForPath(path),json)}async remove(path){this.context.localStorage.removeItem(this.getStorageKeyForPath(path))}async childrenOf(path,include,checkCallback,addCallback){const pathInfo=__1.CustomStorageHelpers.PathInfo.get(path);for(let i=0;i`notify_${event}`)));const NOOP=()=>{};class SchemaValidationError extends Error{constructor(reason){super(`Schema validation failed: ${reason}`);this.reason=reason}}exports.SchemaValidationError=SchemaValidationError;class StorageSettings{constructor(settings={}){this.maxInlineValueSize=50;this.removeVoidProperties=false;this.path=".";this.lockTimeout=120;this.type="data";this.readOnly=false;if(typeof settings.maxInlineValueSize==="number"){this.maxInlineValueSize=settings.maxInlineValueSize}if(typeof settings.removeVoidProperties==="boolean"){this.removeVoidProperties=settings.removeVoidProperties}if(typeof settings.path==="string"){this.path=settings.path}if(this.path.endsWith("/")){this.path=this.path.slice(0,-1)}if(typeof settings.lockTimeout==="number"){this.lockTimeout=settings.lockTimeout}if(typeof settings.type==="string"){this.type=settings.type}if(typeof settings.readOnly==="boolean"){this.readOnly=settings.readOnly}if(typeof settings.ipc==="object"){this.ipc=settings.ipc}}}exports.StorageSettings=StorageSettings;class Storage extends acebase_core_1.SimpleEventEmitter{constructor(name,settings,env){super();this.name=name;this.settings=settings;this._schemas=[];this._indexes=[];this.indexes={get supported(){return promise_fs_1.pfs===null||promise_fs_1.pfs===void 0?void 0:promise_fs_1.pfs.hasFileSystem},create:(path,key,options={rebuild:false})=>{const context={storage:this,debug:this.debug,indexes:this._indexes,ipc:this.ipc};return(0,indexes_1.createIndex)(context,path,key,options)},get:(path,key=null)=>{if(path.includes("$")){const pathKeys=acebase_core_1.PathInfo.getPathKeys(path).map((key=>typeof key==="string"&&key.startsWith("$")?"*":key));path=new acebase_core_1.PathInfo(pathKeys).path}return this._indexes.filter((index=>index.path===path&&(key===null||key===index.key)))},getAll:(targetPath,options={parentPaths:true,childPaths:true})=>{const pathKeys=acebase_core_1.PathInfo.getPathKeys(targetPath);return this._indexes.filter((index=>{const indexKeys=acebase_core_1.PathInfo.getPathKeys(index.path+"/*");if(options.parentPaths&&indexKeys.every(((key,i)=>key==="*"||pathKeys[i]===key))&&[index.key].concat(...index.includeKeys).includes(pathKeys[indexKeys.length])){return true}else if(indexKeys.length[key,"*"].includes(indexKeys[i])))}))},list:()=>this._indexes.slice(),load:async()=>{this._indexes.splice(0);if(!promise_fs_1.pfs.hasFileSystem){return}let files=[];try{files=await promise_fs_1.pfs.readdir(`${this.settings.path}/${this.name}.acebase`)}catch(err){if(err.code!=="ENOENT"){this.debug.error(err)}}const promises=[];files.forEach((fileName=>{if(!fileName.endsWith(".idx")){return}const needsStoragePrefix=this.settings.type!=="data";const hasStoragePrefix=/^\[[a-z]+\]-/.test(fileName);if(!needsStoragePrefix&&!hasStoragePrefix||needsStoragePrefix&&fileName.startsWith(`[${this.settings.type}]-`)){const p=this.indexes.add(fileName);promises.push(p)}}));await Promise.all(promises)},add:async fileName=>{try{const index=await data_index_1.DataIndex.readFromFile(this,fileName);this._indexes.push(index);return index}catch(err){this.debug.error(err);return null}},delete:async fileName=>{const index=await this.indexes.remove(fileName);await index.delete();this.ipc.sendNotification({type:"index.deleted",fileName:index.fileName,path:index.path,keys:index.key})},remove:async fileName=>{const index=this._indexes.find((index=>index.fileName===fileName));if(!index){throw new Error(`Index ${fileName} not found`)}this._indexes.splice(this._indexes.indexOf(index),1);return index},close:async()=>{const promises=this.indexes.list().map((index=>index.close().catch((err=>this.debug.error(err)))));await Promise.all(promises)}};this._eventSubscriptions={};this.subscriptions={add:(path,type,callback)=>{if(SUPPORTED_EVENTS.indexOf(type)<0){throw new TypeError(`Invalid event type "${type}"`)}let pathSubs=this._eventSubscriptions[path];if(!pathSubs){pathSubs=this._eventSubscriptions[path]=[]}pathSubs.push({created:Date.now(),type:type,callback:callback});this.emit("subscribe",{path:path,event:type,callback:callback})},remove:(path,type,callback)=>{const pathSubs=this._eventSubscriptions[path];if(!pathSubs){return}const next=()=>pathSubs.findIndex((ps=>(type?ps.type===type:true)&&(callback?ps.callback===callback:true)));let i;while((i=next())>=0){pathSubs.splice(i,1)}this.emit("unsubscribe",{path:path,event:type,callback:callback})},hasValueSubscribersForPath(path){const valueNeeded=this.getValueSubscribersForPath(path);return!!valueNeeded},getValueSubscribersForPath:path=>{const pathInfo=new acebase_core_1.PathInfo(path);const valueSubscribers=[];Object.keys(this._eventSubscriptions).forEach((subscriptionPath=>{if(pathInfo.equals(subscriptionPath)||pathInfo.isDescendantOf(subscriptionPath)){const pathSubs=this._eventSubscriptions[subscriptionPath];const eventPath=acebase_core_1.PathInfo.fillVariables(subscriptionPath,path);pathSubs.filter((sub=>!sub.type.startsWith("notify_"))).forEach((sub=>{let dataPath=null;if(sub.type==="value"){dataPath=eventPath}else if(["mutated","mutations"].includes(sub.type)&&pathInfo.isDescendantOf(eventPath)){dataPath=path}else if(sub.type==="child_changed"&&path!==eventPath){const childKey=acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}else if(["child_added","child_removed"].includes(sub.type)&&pathInfo.isChildOf(eventPath)){const childKey=acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}if(dataPath!==null&&!valueSubscribers.some((s=>s.type===sub.type&&s.eventPath===eventPath))){valueSubscribers.push({type:sub.type,eventPath:eventPath,dataPath:dataPath,subscriptionPath:subscriptionPath})}}))}}));return valueSubscribers},getAllSubscribersForPath:path=>{const pathInfo=acebase_core_1.PathInfo.get(path);const subscribers=[];Object.keys(this._eventSubscriptions).forEach((subscriptionPath=>{if(pathInfo.isOnTrailOf(subscriptionPath)){const pathSubs=this._eventSubscriptions[subscriptionPath];const eventPath=acebase_core_1.PathInfo.fillVariables(subscriptionPath,path);pathSubs.forEach((sub=>{let dataPath=null;if(sub.type==="value"||sub.type==="notify_value"){dataPath=eventPath}else if(["child_changed","notify_child_changed"].includes(sub.type)){const childKey=path===eventPath||pathInfo.isAncestorOf(eventPath)?"*":acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}else if(["mutated","mutations","notify_mutated","notify_mutations"].includes(sub.type)){dataPath=path}else if(["child_added","child_removed","notify_child_added","notify_child_removed"].includes(sub.type)&&(pathInfo.isChildOf(eventPath)||path===eventPath||pathInfo.isAncestorOf(eventPath))){const childKey=path===eventPath||pathInfo.isAncestorOf(eventPath)?"*":acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}if(dataPath!==null&&!subscribers.some((s=>s.type===sub.type&&s.eventPath===eventPath&&s.subscriptionPath===subscriptionPath))){subscribers.push({type:sub.type,eventPath:eventPath,dataPath:dataPath,subscriptionPath:subscriptionPath})}}))}}));return subscribers},trigger:(event,path,dataPath,oldValue,newValue,context)=>{const pathSubscriptions=this._eventSubscriptions[path]||[];pathSubscriptions.filter((sub=>sub.type===event)).forEach((sub=>{sub.callback(null,dataPath,newValue,oldValue,context)}))}};this.debug=new acebase_core_1.DebugLogger(env.logLevel,`[${name}${typeof settings.type==="string"&&settings.type!=="data"?`:${settings.type}`:""}]`);const ipcName=name+(typeof settings.type==="string"?`_${settings.type}`:"");if(settings.ipc){if(typeof settings.ipc.port!=="number"){throw new Error("IPC port number must be a number")}if(!["master","worker"].includes(settings.ipc.role)){throw new Error(`IPC client role must be either "master" or "worker", not "${settings.ipc.role}"`)}const ipcSettings=Object.assign({dbname:ipcName},settings.ipc);this.ipc=new ipc_1.RemoteIPCPeer(this,ipcSettings)}else{this.ipc=new ipc_1.IPCPeer(this,ipcName)}this.ipc.once("exit",(code=>{if(this.indexes.supported){this.indexes.close()}}));this.nodeLocker={lock:(path,tid,write,comment)=>this.ipc.lock({path:path,tid:tid,write:write,comment:comment})};this._lastTid=0}createTid(){return DEBUG_MODE?++this._lastTid:acebase_core_1.ID.generate()}async close(){await this.ipc.exit()}get path(){return`${this.settings.path}/${this.name}.acebase`}valueFitsInline(value){if(typeof value==="number"||typeof value==="boolean"||value instanceof Date){return true}else if(typeof value==="string"){if(value.length>this.settings.maxInlineValueSize){return false}const encoded=encodeString(value);return encoded.lengththis.settings.maxInlineValueSize){return false}const encoded=encodeString(value.path);return encoded.length0){hasValueSubscribers=true;const eventPaths=valueSubscribers.map((sub=>({path:sub.dataPath,keys:acebase_core_1.PathInfo.getPathKeys(sub.dataPath)}))).sort(((a,b)=>{if(a.keys.lengthb.keys.length)return 1;return 0}));const first=eventPaths[0];topEventPath=first.path;if(valueSubscribers.filter((sub=>sub.dataPath===topEventPath)).every((sub=>sub.type==="mutated"||sub.type.startsWith("notify_")))){hasValueSubscribers=false}topEventPath=acebase_core_1.PathInfo.fillVariables(topEventPath,path)}const indexes=this.indexes.getAll(path,{childPaths:true,parentPaths:true}).map((index=>({index:index,keys:acebase_core_1.PathInfo.getPathKeys(index.path)}))).sort(((a,b)=>{if(a.keys.lengthb.keys.length){return 1}return 0})).map((obj=>obj.index));const keysFilter=[];if(indexes.length>0){indexes.sort(((a,b)=>{if(typeof a._pathKeys==="undefined"){a._pathKeys=acebase_core_1.PathInfo.getPathKeys(a.path)}if(typeof b._pathKeys==="undefined"){b._pathKeys=acebase_core_1.PathInfo.getPathKeys(b.path)}if(a._pathKeys.lengthb._pathKeys.length)return 1;return 0}));const topIndex=indexes[0];const topIndexPath=topIndex.path===path?path:acebase_core_1.PathInfo.fillVariables(`${topIndex.path}/*`,path);if(topIndexPath.lengthindex.path===topIndex.path)).forEach((index=>{const keys=[index.key].concat(index.includeKeys);keys.forEach((key=>!keysFilter.includes(key)&&keysFilter.push(key)))}))}}return{topEventPath:topEventPath,eventSubscriptions:eventSubscriptions,valueSubscribers:valueSubscribers,hasValueSubscribers:hasValueSubscribers,indexes:indexes,keysFilter:keysFilter}}async _writeNodeWithTracking(path,value,options={merge:false,waitForIndexUpdates:true,suppress_events:false,context:null,impact:null}){options=options||{};if(!options.tid&&!options.transaction){throw new Error("_writeNodeWithTracking MUST be executed with a tid OR transaction!")}options.merge=options.merge===true;const validation=this.validateSchema(path,value,{updates:options.merge});if(!validation.ok){throw new SchemaValidationError(validation.reason)}const tid=options.tid;const transaction=options.transaction;let topEventData=null;const updateImpact=options.impact?options.impact:this.getUpdateImpact(path,options.suppress_events);const{topEventPath:topEventPath,eventSubscriptions:eventSubscriptions,hasValueSubscribers:hasValueSubscribers,indexes:indexes}=updateImpact;let{keysFilter:keysFilter}=updateImpact;const writeNode=()=>{if(typeof options._customWriteFunction==="function"){return options._customWriteFunction()}if(topEventData){const pathKeys=acebase_core_1.PathInfo.getPathKeys(path);const eventPathKeys=acebase_core_1.PathInfo.getPathKeys(topEventPath);const trailKeys=pathKeys.slice(eventPathKeys.length);let currentValue=topEventData;while(trailKeys.length>0&¤tValue!==null){const childKey=trailKeys.shift();currentValue=typeof currentValue==="object"&&childKey in currentValue?currentValue[childKey]:null}options.currentValue=currentValue}return this._writeNode(path,value,options)};const transactionLoggingEnabled=this.settings.transactions&&this.settings.transactions.log===true;if(eventSubscriptions.length===0&&indexes.length===0&&!transactionLoggingEnabled){return writeNode()}if(!hasValueSubscribers&&options.merge===true&&keysFilter.length===0){keysFilter=Object.keys(value);if(topEventPath!==path){const trailPath=path.slice(topEventPath.length);keysFilter=keysFilter.map((key=>`${trailPath}/${key}`))}}const eventNodeInfo=await this.getNodeInfo(topEventPath,{transaction:transaction,tid:tid});let currentValue=null;if(eventNodeInfo.exists){const valueOptions={transaction:transaction,tid:tid};if(keysFilter.length>0){valueOptions.include=keysFilter}if(topEventPath===""&&typeof valueOptions.include==="undefined"){this.debug.warn('WARNING: One or more value event listeners on the root node are causing the entire database value to be read to facilitate change tracking. Using "value", "notify_value", "child_changed" and "notify_child_changed" events on the root node are a bad practice because of the significant performance impact. Use "mutated" or "mutations" events instead')}const node=await this.getNode(topEventPath,valueOptions);currentValue=node.value}topEventData=currentValue;const result=await writeNode()||{};let newTopEventData,modifiedData;if(path===topEventPath){if(options.merge){if(topEventData===null){newTopEventData=value instanceof Array?[]:{}}else{newTopEventData=topEventData instanceof Array?[]:{};Object.keys(topEventData).forEach((key=>{newTopEventData[key]=topEventData[key]}))}}else{newTopEventData=value}modifiedData=newTopEventData}else{const trailPath=path.slice(topEventPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);if(topEventData===null){newTopEventData=typeof trailKeys[0]==="number"?[]:{}}else{newTopEventData=topEventData instanceof Array?[]:{};Object.keys(topEventData).forEach((key=>{newTopEventData[key]=topEventData[key]}))}modifiedData=newTopEventData;while(trailKeys.length>0){const childKey=trailKeys.shift();if(!options.merge&&trailKeys.length===0){modifiedData[childKey]=value}else{const original=modifiedData[childKey];const shallowCopy=typeof childKey==="number"?[...original]:Object.assign({},original);modifiedData[childKey]=shallowCopy}modifiedData=modifiedData[childKey]}}if(options.merge){Object.keys(value).forEach((key=>{modifiedData[key]=value[key]}))}const dataChanges=compareValues(topEventData,newTopEventData);if(dataChanges==="identical"){result.mutations=[];return result}function removeNulls(obj){if(obj===null||typeof obj!=="object"){return obj}Object.keys(obj).forEach((prop=>{const val=obj[prop];if(val===null){delete obj[prop];if(obj instanceof Array){obj.length--}}if(typeof val==="object"){removeNulls(val)}}))}removeNulls(newTopEventData);const indexUpdates=[];indexes.map((index=>({index:index,keys:acebase_core_1.PathInfo.getPathKeys(index.path)}))).sort(((a,b)=>{if(a.keys.lengthb.keys.length){return-1}return 0})).forEach((({index:index})=>{const pathKeys=acebase_core_1.PathInfo.getPathKeys(topEventPath);const indexPathKeys=acebase_core_1.PathInfo.getPathKeys(index.path+"/*");const trailKeys=indexPathKeys.slice(pathKeys.length);const oldValue=topEventData;const newValue=newTopEventData;if(trailKeys.length===0){console.assert(pathKeys.length===indexPathKeys.length,"check logic");const p=this.ipc.isMaster?index.handleRecordUpdate(topEventPath,oldValue,newValue):this.ipc.sendRequest({type:"index.update",path:topEventPath,oldValue:oldValue,newValue:newValue});indexUpdates.push(p);return}const getAllIndexUpdates=(path,oldValue,newValue)=>{if(oldValue===null&&newValue===null){return[]}const pathKeys=acebase_core_1.PathInfo.getPathKeys(path);const indexPathKeys=acebase_core_1.PathInfo.getPathKeys(index.path+"/*");const trailKeys=indexPathKeys.slice(pathKeys.length);if(trailKeys.length===0){console.assert(pathKeys.length===indexPathKeys.length,"check logic");return[{path:path,oldValue:oldValue,newValue:newValue}]}let results=[];let trailPath="";while(trailKeys.length>0){const subKey=trailKeys.shift();if(typeof subKey==="string"&&(subKey==="*"||subKey.startsWith("$"))){const allKeys=oldValue===null?[]:Object.keys(oldValue);newValue!==null&&Object.keys(newValue).forEach((key=>{if(allKeys.indexOf(key)<0){allKeys.push(key)}}));allKeys.forEach((key=>{const childPath=acebase_core_1.PathInfo.getChildPath(trailPath,key);const childValues=getChildValues(key,oldValue,newValue);const subTrailPath=acebase_core_1.PathInfo.getChildPath(path,childPath);const childResults=getAllIndexUpdates(subTrailPath,childValues.oldValue,childValues.newValue);results=results.concat(childResults)}));break}else{const values=getChildValues(subKey,oldValue,newValue);oldValue=values.oldValue;newValue=values.newValue;if(oldValue===null&&newValue===null){break}trailPath=acebase_core_1.PathInfo.getChildPath(trailPath,subKey)}}return results};const results=getAllIndexUpdates(topEventPath,oldValue,newValue);results.forEach((result=>{const p=this.ipc.isMaster?index.handleRecordUpdate(result.path,result.oldValue,result.newValue):this.ipc.sendRequest({type:"index.update",path:result.path,oldValue:result.oldValue,newValue:result.newValue});indexUpdates.push(p)}))}));const callSubscriberWithValues=(sub,oldValue,newValue,variables=[])=>{let trigger=true;let type=sub.type;if(type.startsWith("notify_")){type=type.slice("notify_".length)}if(type==="mutated"){return}else if(type==="child_changed"&&(oldValue===null||newValue===null)){trigger=false}else if(type==="value"||type==="child_changed"){const changes=compareValues(oldValue,newValue);trigger=changes!=="identical"}else if(type==="child_added"){trigger=oldValue===null&&newValue!==null}else if(type==="child_removed"){trigger=oldValue!==null&&newValue===null}const pathKeys=acebase_core_1.PathInfo.getPathKeys(sub.dataPath);variables.forEach((variable=>{const index=pathKeys.indexOf(variable.name);console.assert(index>=0,`Variable "${variable.name}" not found in subscription dataPath "${sub.dataPath}"`);pathKeys[index]=variable.value}));const dataPath=pathKeys.reduce(((path,key)=>acebase_core_1.PathInfo.getChildPath(path,key)),"");trigger&&this.subscriptions.trigger(sub.type,sub.subscriptionPath,dataPath,oldValue,newValue,options.context)};const prepareMutationEvents=(currentPath,oldValue,newValue,compareResult)=>{const batch=[];const result=compareResult||compareValues(oldValue,newValue);if(result==="identical"){return batch}else if(typeof result==="string"){batch.push({path:currentPath,oldValue:oldValue,newValue:newValue})}else{result.changed.forEach((info=>{const childPath=acebase_core_1.PathInfo.getChildPath(currentPath,info.key);const childValues=getChildValues(info.key,oldValue,newValue);const childBatch=prepareMutationEvents(childPath,childValues.oldValue,childValues.newValue,info.change);batch.push(...childBatch)}));result.added.forEach((key=>{const childPath=acebase_core_1.PathInfo.getChildPath(currentPath,key);batch.push({path:childPath,oldValue:null,newValue:newValue[key]})}));if(oldValue instanceof Array&&newValue instanceof Array){result.removed.sort(((a,b)=>a{const childPath=acebase_core_1.PathInfo.getChildPath(currentPath,key);batch.push({path:childPath,oldValue:oldValue[key],newValue:null})}))}return batch};if(transactionLoggingEnabled&&this.settings.type!=="transaction"){result.mutations=(()=>{const trailPath=path.slice(topEventPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);let oldValue=topEventData,newValue=newTopEventData;while(trailKeys.length>0){const key=trailKeys.shift();({oldValue:oldValue,newValue:newValue}=getChildValues(key,oldValue,newValue))}const compareResults=compareValues(oldValue,newValue);const batch=prepareMutationEvents(path,oldValue,newValue,compareResults);const mutations=batch.map((m=>({target:acebase_core_1.PathInfo.getPathKeys(m.path.slice(path.length)),prev:m.oldValue,val:m.newValue})));return mutations})()}const triggerAllEvents=()=>{eventSubscriptions.filter((sub=>!["mutated","mutations","notify_mutated","notify_mutations"].includes(sub.type))).map((sub=>{const keys=acebase_core_1.PathInfo.getPathKeys(sub.dataPath);return{sub:sub,keys:keys}})).sort(((a,b)=>{if(a.keys.lengthb.keys.length){return-1}return 0})).forEach((({sub:sub})=>{const process=(currentPath,oldValue,newValue,variables=[])=>{const trailPath=sub.dataPath.slice(currentPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);while(trailKeys.length>0){const subKey=trailKeys.shift();if(typeof subKey==="string"&&(subKey==="*"||subKey[0]==="$")){const allKeys=oldValue===null?[]:Object.keys(oldValue).map((key=>oldValue instanceof Array?parseInt(key):key));newValue!==null&&Object.keys(newValue).forEach((key=>{const keyOrIndex=newValue instanceof Array?parseInt(key):key;!allKeys.includes(keyOrIndex)&&allKeys.push(key)}));allKeys.forEach((key=>{const childValues=getChildValues(key,oldValue,newValue);const vars=variables.concat({name:subKey,value:key});if(trailKeys.length===0){callSubscriberWithValues(sub,childValues.oldValue,childValues.newValue,vars)}else{process(acebase_core_1.PathInfo.getChildPath(currentPath,subKey),childValues.oldValue,childValues.newValue,vars)}}));return}else{currentPath=acebase_core_1.PathInfo.getChildPath(currentPath,subKey);const childValues=getChildValues(subKey,oldValue,newValue);oldValue=childValues.oldValue;newValue=childValues.newValue}}callSubscriberWithValues(sub,oldValue,newValue,variables)};if(sub.type.startsWith("notify_")&&acebase_core_1.PathInfo.get(sub.eventPath).isAncestorOf(topEventPath)){const isOnParentPath=acebase_core_1.PathInfo.get(sub.eventPath).isParentOf(topEventPath);const trigger=sub.type==="notify_value"||sub.type==="notify_child_changed"&&(!isOnParentPath||!["added","removed"].includes(dataChanges))||sub.type==="notify_child_removed"&&dataChanges==="removed"&&isOnParentPath||sub.type==="notify_child_added"&&dataChanges==="added"&&isOnParentPath;trigger&&this.subscriptions.trigger(sub.type,sub.subscriptionPath,sub.dataPath,null,null,options.context)}else{process(topEventPath,topEventData,newTopEventData)}}));const mutationEvents=eventSubscriptions.filter((sub=>["mutated","mutations","notify_mutated","notify_mutations"].includes(sub.type)));mutationEvents.forEach((sub=>{let currentPath=topEventPath;const trailPath=sub.eventPath.slice(currentPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);let oldValue=topEventData,newValue=newTopEventData;while(trailKeys.length>0){const subKey=trailKeys.shift();currentPath=acebase_core_1.PathInfo.getChildPath(currentPath,subKey);const childValues=getChildValues(subKey,oldValue,newValue);oldValue=childValues.oldValue;newValue=childValues.newValue}const batch=prepareMutationEvents(currentPath,oldValue,newValue);if(batch.length===0){return}const isNotifyEvent=sub.type.startsWith("notify_");if(["mutated","notify_mutated"].includes(sub.type)){batch.forEach(((mutation,index)=>{const context=options.context;const prevVal=isNotifyEvent?null:mutation.oldValue;const newVal=isNotifyEvent?null:mutation.newValue;this.subscriptions.trigger(sub.type,sub.subscriptionPath,mutation.path,prevVal,newVal,context)}))}else if(["mutations","notify_mutations"].includes(sub.type)){const values=isNotifyEvent?null:batch.map((m=>({target:acebase_core_1.PathInfo.getPathKeys(m.path.slice(sub.subscriptionPath.length)),prev:m.oldValue,val:m.newValue})));this.subscriptions.trigger(sub.type,sub.subscriptionPath,sub.subscriptionPath,null,values,options.context)}}))};if(options.waitForIndexUpdates===false){indexUpdates.splice(0)}await Promise.all(indexUpdates);defer(triggerAllEvents);return result}getChildren(path,options){throw new Error("This method must be implemented by subclass")}async getNodeValue(path,options={}){const node=await this.getNode(path,options);return node.value}getNode(path,options){throw new Error("This method must be implemented by subclass")}getNodeInfo(path,options){throw new Error("This method must be implemented by subclass")}setNode(path,value,options){throw new Error("This method must be implemented by subclass")}updateNode(path,updates,options){throw new Error("This method must be implemented by subclass")}async transactNode(path,callback,options={no_lock:false,suppress_events:false,context:null}){const useFakeLock=options&&options.no_lock===true;const tid=this.createTid();const lock=useFakeLock?{tid:tid,release:NOOP}:await this.nodeLocker.lock(path,tid,true,"transactNode");try{let changed=false;const changeCallback=()=>{changed=true};if(useFakeLock){this.subscriptions.add(path,"notify_value",changeCallback)}const node=await this.getNode(path,{tid:tid});const checkRevision=node.revision;let newValue;try{newValue=callback(node.value);if(newValue instanceof Promise){newValue=await newValue.catch((err=>{this.debug.error(`Error in transaction callback: ${err.message}`)}))}}catch(err){this.debug.error(`Error in transaction callback: ${err.message}`)}if(typeof newValue==="undefined"){return}if(useFakeLock){this.subscriptions.remove(path,"notify_value",changeCallback)}if(changed){throw new node_errors_1.NodeRevisionError("Node changed")}const cursor=await this.setNode(path,newValue,{assert_revision:checkRevision,tid:lock.tid,suppress_events:options.suppress_events,context:options.context});return cursor}catch(err){if(err instanceof node_errors_1.NodeRevisionError){console.warn(`node value changed, running again. Error: ${err.message}`);return this.transactNode(path,callback,options)}else{throw err}}finally{lock.release()}}async matchNode(path,criteria,options){var _a;const tid=(_a=options===null||options===void 0?void 0:options.tid)!==null&&_a!==void 0?_a:acebase_core_1.ID.generate();const checkNode=async(path,criteria)=>{if(criteria.length===0){return Promise.resolve(true)}const criteriaKeys=criteria.reduce(((keys,cr)=>{let key=cr.key;if(typeof key==="string"&&key.includes("/")){key=key.slice(0,key.indexOf("/"))}if(keys.indexOf(key)<0){keys.push(key)}return keys}),[]);const unseenKeys=criteriaKeys.slice();let isMatch=true;const delayedMatchPromises=[];try{await this.getChildren(path,{tid:tid,keyFilter:criteriaKeys}).next((childInfo=>{var _a;const keyOrIndex=(_a=childInfo.key)!==null&&_a!==void 0?_a:childInfo.index;unseenKeys.includes(keyOrIndex)&&unseenKeys.splice(unseenKeys.indexOf(childInfo.key),1);const keyCriteria=criteria.filter((cr=>cr.key===keyOrIndex)).map((cr=>({op:cr.op,compare:cr.compare})));const keyResult=keyCriteria.length>0?checkChild(childInfo,keyCriteria):{isMatch:true,promises:[]};isMatch=keyResult.isMatch;if(isMatch){delayedMatchPromises.push(...keyResult.promises);const childCriteria=criteria.filter((cr=>typeof cr.key==="string"&&cr.key.startsWith(`${typeof keyOrIndex==="number"?`[${keyOrIndex}]`:keyOrIndex}/`))).map((cr=>{const key=cr.key.slice(cr.key.indexOf("/")+1);return{key:key,op:cr.op,compare:cr.compare}}));if(childCriteria.length>0){const childPath=acebase_core_1.PathInfo.getChildPath(path,childInfo.key);const childPromise=checkNode(childPath,childCriteria).then((isMatch=>({isMatch:isMatch})));delayedMatchPromises.push(childPromise)}}if(!isMatch||unseenKeys.length===0){return false}}));if(isMatch){const results=await Promise.all(delayedMatchPromises);isMatch=results.every((res=>res.isMatch))}if(!isMatch){return false}isMatch=unseenKeys.every((keyOrIndex=>{const childInfo=new node_info_1.NodeInfo(Object.assign(Object.assign(Object.assign({},typeof keyOrIndex==="number"&&{index:keyOrIndex}),typeof keyOrIndex==="string"&&{key:keyOrIndex}),{exists:false}));const childCriteria=criteria.filter((cr=>typeof cr.key==="string"&&cr.key.startsWith(`${typeof keyOrIndex==="number"?`[${keyOrIndex}]`:keyOrIndex}/`))).map((cr=>({op:cr.op,compare:cr.compare})));if(childCriteria.length>0&&!checkChild(childInfo,childCriteria).isMatch){return false}const keyCriteria=criteria.filter((cr=>cr.key===keyOrIndex)).map((cr=>({op:cr.op,compare:cr.compare})));if(keyCriteria.length===0){return true}const result=checkChild(childInfo,keyCriteria);return result.isMatch}));return isMatch}catch(err){this.debug.error(`Error matching on "${path}": `,err);throw err}};const checkChild=(child,criteria)=>{const promises=[];const isMatch=criteria.every((f=>{let proceed=true;if(f.op==="!exists"||f.op==="=="&&(typeof f.compare==="undefined"||f.compare===null)){proceed=!child.exists}else if(f.op==="exists"||f.op==="!="&&(typeof f.compare==="undefined"||f.compare===null)){proceed=child.exists}else if((f.op==="contains"||f.op==="!contains")&&f.compare instanceof Array&&f.compare.length===0){proceed=true}else if(!child.exists){proceed=false}else{if(child.address){if(child.valueType===node_value_types_1.VALUE_TYPES.OBJECT&&["has","!has"].indexOf(f.op)>=0){const op=f.op==="has"?"exists":"!exists";const p=checkNode(child.path,[{key:f.compare,op:op}]).then((isMatch=>({key:child.key,isMatch:isMatch})));promises.push(p);proceed=true}else if(child.valueType===node_value_types_1.VALUE_TYPES.ARRAY&&["contains","!contains"].indexOf(f.op)>=0){const p=this.getNode(child.path,{tid:tid}).then((({value:arr})=>{const isMatch=f.op==="contains"?f.compare instanceof Array?f.compare.every((val=>arr.includes(val))):arr.includes(f.compare):f.compare instanceof Array?!f.compare.some((val=>arr.includes(val))):!arr.includes(f.compare);return{key:child.key,isMatch:isMatch}}));promises.push(p);proceed=true}else if(child.valueType===node_value_types_1.VALUE_TYPES.STRING){const p=this.getNode(child.path,{tid:tid}).then((node=>({key:child.key,isMatch:this.test(node.value,f.op,f.compare)})));promises.push(p);proceed=true}else{proceed=false}}else if(child.type===node_value_types_1.VALUE_TYPES.OBJECT&&["has","!has"].indexOf(f.op)>=0){const has=f.compare in child.value;proceed=has&&f.op==="has"||!has&&f.op==="!has"}else if(child.type===node_value_types_1.VALUE_TYPES.ARRAY&&["contains","!contains"].indexOf(f.op)>=0){const contains=child.value.indexOf(f.compare)>=0;proceed=contains&&f.op==="contains"||!contains&&f.op==="!contains"}else{let ret=this.test(child.value,f.op,f.compare);if(ret instanceof Promise){promises.push(ret);ret=true}proceed=ret}}return proceed}));return{isMatch:isMatch,promises:promises}};return checkNode(path,criteria)}test(val,op,compare){if(op==="<"){return val"){return val>compare}if(op===">="){return val>=compare}if(op==="in"){return compare.indexOf(val)>=0}if(op==="!in"){return compare.indexOf(val)<0}if(op==="like"||op==="!like"){const pattern="^"+compare.replace(/[-[\]{}()+.,\\^$|#\s]/g,"\\$&").replace(/\?/g,".").replace(/\*/g,".*?")+"$";const re=new RegExp(pattern,"i");const isMatch=re.test(val.toString());return op==="like"?isMatch:!isMatch}if(op==="matches"){return compare.test(val.toString())}if(op==="!matches"){return!compare.test(val.toString())}if(op==="between"){return val>=compare[0]&&val<=compare[1]}if(op==="!between"){return valcompare[1]}if(op==="has"||op==="!has"){const has=typeof val==="object"&&compare in val;return op==="has"?has:!has}if(op==="contains"||op==="!contains"){const includes=typeof val==="object"&&val instanceof Array&&val.includes(compare);return op==="contains"?includes:!includes}return false}async exportNode(path,writeFn,options={format:"json",type_safe:true}){if((options===null||options===void 0?void 0:options.format)!=="json"){throw new Error("Only json output is currently supported")}const write=typeof writeFn!=="function"?writeFn.write.bind(writeFn):writeFn;const stringifyValue=(type,val)=>{const escape=str=>str.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/[\u0000-\u001f]/g,(ch=>`\\u${ch.charCodeAt(0).toString(16).padStart(4,"0")}`));if(type===node_value_types_1.VALUE_TYPES.DATETIME){val=`"${val.toISOString()}"`;if(options.type_safe){val=`{".type":"date",".val":${val}}`}}else if(type===node_value_types_1.VALUE_TYPES.STRING){val=`"${escape(val)}"`}else if(type===node_value_types_1.VALUE_TYPES.ARRAY){val="[]"}else if(type===node_value_types_1.VALUE_TYPES.OBJECT){val="{}"}else if(type===node_value_types_1.VALUE_TYPES.BINARY){val=`"${escape(acebase_core_1.ascii85.encode(val))}"`;if(options.type_safe){val=`{".type":"binary",".val":${val}}`}}else if(type===node_value_types_1.VALUE_TYPES.REFERENCE){val=`"${val.path}"`;if(options.type_safe){val=`{".type":"reference",".val":${val}}`}}else if(type===node_value_types_1.VALUE_TYPES.BIGINT){val=`"${val}"`;if(options.type_safe){val=`{".type":"bigint",".val":${val}}`}}return val};let objStart="",objEnd="";const nodeInfo=await this.getNodeInfo(path);if(!nodeInfo.exists){return write("null")}else if(nodeInfo.type===node_value_types_1.VALUE_TYPES.OBJECT){objStart="{";objEnd="}"}else if(nodeInfo.type===node_value_types_1.VALUE_TYPES.ARRAY){objStart="[";objEnd="]"}else{const node=await this.getNode(path);const val=stringifyValue(nodeInfo.type,node.value);return write(val)}if(objStart){const p=write(objStart);if(p instanceof Promise){await p}}let output="",outputCount=0;const pending=[];await this.getChildren(path).next((childInfo=>{if(childInfo.address){pending.push(childInfo)}else{if(outputCount++>0){output+=","}if(typeof childInfo.key==="string"){output+=`"${childInfo.key}":`}output+=stringifyValue(childInfo.type,childInfo.value)}}));if(output){const p=write(output);if(p instanceof Promise){await p}}while(pending.length>0){const childInfo=pending.shift();let output=outputCount++>0?",":"";const key=typeof childInfo.index==="number"?childInfo.index:childInfo.key;if(typeof key==="string"){output+=`"${key}":`}if(output){const p=write(output);if(p instanceof Promise){await p}}await this.exportNode(acebase_core_1.PathInfo.getChildPath(path,key),write,options)}if(objEnd){const p=write(objEnd);if(p instanceof Promise){await p}}}async importNode(path,read,options={format:"json",method:"set"}){const chunkSize=256*1024;const maxQueueBytes=1024*1024;const state={data:"",index:0,offset:0,queue:[],queueStartByte:0,timesFlushed:0,get processedBytes(){return this.offset+this.index}};const readNextChunk=async(append=false)=>{let data=await read(chunkSize);if(data===null){if(state.data){throw new Error(`Unexpected EOF at index ${state.offset+state.data.length}`)}else{throw new Error("Unable to read data from stream")}}else if(typeof data==="object"){data=acebase_core_1.Utils.decodeString(data)}if(append){state.data+=data}else{state.offset+=state.data.length;state.data=data;state.index=0}};const readBytes=async length=>{let str="";if(state.index+length>=state.data.length){str=state.data.slice(state.index);length-=str.length;await readNextChunk()}str+=state.data.slice(state.index,state.index+length);state.index+=length;return str};const assertBytes=async length=>{if(state.index+length>state.data.length){await readNextChunk(true)}if(state.index+length>state.data.length){throw new Error("Not enough data available from stream")}};const consumeToken=async token=>{const str=await readBytes(token.length);if(str!==token){throw new Error(`Unexpected character "${str[0]}" at index ${state.offset+state.index}, expected "${token}"`)}};const consumeSpaces=async()=>{const spaces=[" ","\t","\r","\n"];while(true){if(state.index>=state.data.length){await readNextChunk()}if(spaces.includes(state.data[state.index])){state.index++}else{break}}};const peekBytes=async length=>{await assertBytes(length);const index=state.index;return state.data.slice(index,index+length)};const peekValueType=async()=>{await consumeSpaces();const ch=await peekBytes(1);switch(ch){case'"':return"string";case"{":return"object";case"[":return"array";case"n":return"null";case"u":return"undefined";case"t":case"f":return"boolean";default:{if(ch==="-"||ch>="0"&&ch<="9"){return"number"}throw new Error(`Unknown value at index ${state.offset+state.index}`)}}};const readString=async()=>{await consumeToken('"');let str="";let i=state.index;while(state.data[i]!=='"'||state.data[i-1]==="\\"){i++;if(i>=state.data.length){str+=state.data.slice(state.index);await readNextChunk();i=0}}str+=state.data.slice(state.index,i);state.index=i+1;return unescape(str)};const readBoolean=async()=>{if(state.data[state.index]==="t"){await consumeToken("true")}else if(state.data[state.index]==="f"){await consumeToken("false")}throw new Error(`Expected true or false at index ${state.offset+state.index}`)};const readNumber=async()=>{let str="";let i=state.index;const nrChars=["-","0","1","2","3","4","5","6","7","8","9",".","e","b","f","x","o","n"];while(nrChars.includes(state.data[i])){i++;if(i>=state.data.length){str+=state.data.slice(state.index);await readNextChunk();i=0}}str+=state.data.slice(state.index,i);state.index=i;const nr=str.endsWith("n")?BigInt(str.slice(0,-1)):str.includes(".")?parseFloat(str):parseInt(str);return nr};const readValue=async()=>{await consumeSpaces();const type=await peekValueType();const value=await(()=>{switch(type){case"string":return readString();case"object":return{};case"array":return[];case"number":return readNumber();case"null":return null;case"undefined":return undefined;case"boolean":return readBoolean()}})();return{type:type,value:value}};const unescape=str=>str.replace(/\\n/g,"\n").replace(/\\"/g,'"');const getTypeSafeValue=(path,obj)=>{const type=obj[".type"];let val=obj[".val"];switch(type){case"Date":case"date":{val=new Date(val);break}case"Buffer":case"binary":{val=unescape(val);if(val.startsWith("<~")){val=acebase_core_1.ascii85.decode(val)}else{throw new Error(`Import error: Unexpected encoding for value for value at path "/${path}"`)}break}case"PathReference":case"reference":{val=new acebase_core_1.PathReference(val);break}case"bigint":{val=BigInt(val);break}default:throw new Error(`Import error: Unsupported type "${type}" for value at path "/${path}"`)}return val};const context={acebase_import_id:acebase_core_1.ID.generate()};const childOptions={suppress_events:options.suppress_events,context:context};const enqueue=async(target,value)=>{state.queue.push({target:target,value:value});if(state.processedBytes>=state.queueStartByte+maxQueueBytes){const operations=state.queue.reduce(((updates,item)=>{if(item.target.path===path){updates.push(Object.assign({op:options.method==="set"&&state.timesFlushed===0?"set":"update"},item))}else{const parent=updates.find((other=>other.target.isParentOf(item.target)));if(parent){parent.value[item.target.key]=item.value}else{updates.push(Object.assign({op:options.method==="merge"?"update":"set"},item))}}return updates}),[]);state.queueStartByte=state.processedBytes;state.queue=[];state.timesFlushed++}if(target.path===path){}};const importObject=async target=>{await consumeToken("{");await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="}"){state.index++;return this.setNode(target.path,{},childOptions)}let childCount=0;let obj={};let flushedBefore=false;const flushObject=async()=>{let p;if(!flushedBefore){flushedBefore=true;p=this.setNode(target.path,obj,childOptions)}else if(Object.keys(obj).length>0){p=this.updateNode(target.path,obj,childOptions)}obj={};if(p){await p}};const promises=[];while(true){await consumeSpaces();const property=await readString();await consumeSpaces();await consumeToken(":");await consumeSpaces();const{value:value,type:type}=await readValue();obj[property]=value;childCount++;if(["object","array"].includes(type)){promises.push(flushObject());if(type==="object"){await importObject(target.child(property))}else{await importArray(target.child(property))}}await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="}"){state.index++;break}await consumeToken(",")}const isTypedValue=childCount===2&&".type"in obj&&".val"in obj;if(isTypedValue){const val=getTypeSafeValue(target.path,obj);return this.setNode(target.path,val,childOptions)}promises.push(flushObject());await Promise.all(promises)};const importArray=async target=>{await consumeToken("[");await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="]"){state.index++;return this.setNode(target.path,[],childOptions)}let flushedBefore=false;let arr=[];let updates={};const flushArray=async()=>{let p;if(!flushedBefore){flushedBefore=true;p=this.setNode(target.path,arr,childOptions);arr=null}else if(Object.keys(updates).length>0){p=this.updateNode(target.path,updates,childOptions);updates={}}if(p){await p}};const pushChild=(value,index)=>{if(flushedBefore){updates[index]=value}else{arr.push(value)}};const promises=[];let index=0;while(true){await consumeSpaces();const{value:value,type:type}=await readValue();pushChild(value,index);if(["object","array"].includes(type)){promises.push(flushArray());if(type==="object"){await importObject(target.child(index))}else{await importArray(target.child(index))}}await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="]"){state.index++;break}await consumeToken(",");index++}promises.push(flushArray());await Promise.all(promises)};const start=async()=>{const{value:value,type:type}=await readValue();if(["object","array"].includes(type)){const target=acebase_core_1.PathInfo.get(path);if(type==="object"){await importObject(target)}else{await importArray(target)}}else{await this.setNode(path,value,childOptions)}};return start()}setSchema(path,schema){if(typeof schema==="undefined"){throw new TypeError("schema argument must be given")}if(schema===null){const i=this._schemas.findIndex((s=>s.path===path));i>=0&&this._schemas.splice(i,1);return}const definition=new acebase_core_1.SchemaDefinition(schema);const item=this._schemas.find((s=>s.path===path));if(item){item.schema=definition}else{this._schemas.push({path:path,schema:definition});this._schemas.sort(((a,b)=>{const ka=acebase_core_1.PathInfo.getPathKeys(a.path),kb=acebase_core_1.PathInfo.getPathKeys(b.path);if(ka.length===kb.length){return 0}return ka.lengthitem.path===path));return item?{path:path,schema:item.schema.source,text:item.schema.text}:null}getSchemas(){return this._schemas.map((item=>({path:item.path,schema:item.schema.source,text:item.schema.text})))}validateSchema(path,value,options={updates:false}){let result={ok:true};const pathInfo=acebase_core_1.PathInfo.get(path);this._schemas.filter((s=>pathInfo.isOnTrailOf(s.path))).every((s=>{if(pathInfo.isDescendantOf(s.path)){const ancestorPath=acebase_core_1.PathInfo.fillVariables(s.path,path);const trailKeys=pathInfo.keys.slice(acebase_core_1.PathInfo.getPathKeys(s.path).length);result=s.schema.check(ancestorPath,value,options.updates,trailKeys);return result.ok}const trailKeys=acebase_core_1.PathInfo.getPathKeys(s.path).slice(pathInfo.keys.length);const partial=options.updates===true&&trailKeys.length===0;const check=(path,value,trailKeys)=>{if(trailKeys.length===0){return s.schema.check(path,value,partial)}else if(value===null){return{ok:true}}const key=trailKeys[0];if(typeof key==="string"&&(key==="*"||key[0]==="$")){if(value===null||typeof value!=="object"){return{ok:true}}let result;Object.keys(value).every((childKey=>{const childPath=acebase_core_1.PathInfo.getChildPath(path,childKey);const childValue=value[childKey];result=check(childPath,childValue,trailKeys.slice(1));return result.ok}));return result}else{const childPath=acebase_core_1.PathInfo.getChildPath(path,key);const childValue=value[key];return check(childPath,childValue,trailKeys.slice(1))}};result=check(path,value,trailKeys);return result.ok}));return result}}exports.Storage=Storage},{"../data-index":13,"../ipc":6,"../node-errors":9,"../node-info":10,"../node-value-types":12,"../promise-fs":14,"./indexes":26,"acebase-core":38}],26:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createIndex=void 0;var create_index_1=require("./create-index");Object.defineProperty(exports,"createIndex",{enumerable:true,get:function(){return create_index_1.createIndex}})},{"./create-index":16}],27:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AceBaseBase=exports.AceBaseBaseSettings=void 0;const simple_event_emitter_1=require("./simple-event-emitter");const data_reference_1=require("./data-reference");const type_mappings_1=require("./type-mappings");const optional_observable_1=require("./optional-observable");const debug_1=require("./debug");const simple_colors_1=require("./simple-colors");class AceBaseBaseSettings{constructor(options){this.logLevel="log";this.logColors=true;this.info="realtime database";this.sponsor=false;if(typeof options!=="object"){options={}}if(typeof options.logLevel==="string"){this.logLevel=options.logLevel}if(typeof options.logColors==="boolean"){this.logColors=options.logColors}if(typeof options.info==="string"){this.info=options.info}if(typeof options.sponsor==="boolean"){this.sponsor=options.sponsor}}}exports.AceBaseBaseSettings=AceBaseBaseSettings;class AceBaseBase extends simple_event_emitter_1.SimpleEventEmitter{constructor(dbname,options={}){super();this._ready=false;options=new AceBaseBaseSettings(options);this.name=dbname;this.debug=new debug_1.DebugLogger(options.logLevel,`[${dbname}]`);(0,simple_colors_1.SetColorsEnabled)(options.logColors);const logoStyle=[simple_colors_1.ColorStyle.magenta,simple_colors_1.ColorStyle.bold];const logo=" ___ ______ "+"\n"+" / _ \\ | ___ \\ "+"\n"+" / /_\\ \\ ___ ___| |_/ / __ _ ___ ___ "+"\n"+" | _ |/ __/ _ \\ ___ \\/ _` / __|/ _ \\"+"\n"+" | | | | (_| __/ |_/ / (_| \\__ \\ __/"+"\n"+" \\_| |_/\\___\\___\\____/ \\__,_|___/\\___|";const info=options.info?"".padStart(40-options.info.length," ")+options.info+"\n":"";if(!options.sponsor){this.debug.write(logo.colorize(logoStyle));info&&this.debug.write(info.colorize(simple_colors_1.ColorStyle.magenta))}this.types=new type_mappings_1.TypeMappings(this);this.once("ready",(()=>{this._ready=true}))}async ready(callback){if(!this._ready){await new Promise((resolve=>this.on("ready",resolve)))}callback===null||callback===void 0?void 0:callback()}get isReady(){return this._ready}setObservable(ObservableImpl){(0,optional_observable_1.setObservable)(ObservableImpl)}ref(path){return new data_reference_1.DataReference(this,path)}get root(){return this.ref("")}query(path){const ref=new data_reference_1.DataReference(this,path);return new data_reference_1.DataReferenceQuery(ref)}get indexes(){return{get:()=>this.api.getIndexes(),create:(path,key,options)=>this.api.createIndex(path,key,options),delete:async filePath=>this.api.deleteIndex(filePath)}}get schema(){return{get:path=>this.api.getSchema(path),set:(path,schema)=>this.api.setSchema(path,schema),all:()=>this.api.getSchemas(),check:(path,value,isUpdate)=>this.api.validateSchema(path,value,isUpdate)}}}exports.AceBaseBase=AceBaseBase},{"./data-reference":34,"./debug":36,"./optional-observable":40,"./simple-colors":47,"./simple-event-emitter":48,"./type-mappings":51}],28:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Api=void 0;class NotImplementedError extends Error{constructor(name){super(`${name} is not implemented`)}}class Api{constructor(){}stats(options){throw new NotImplementedError("stats")}subscribe(path,event,callback,settings){throw new NotImplementedError("subscribe")}unsubscribe(path,event,callback){throw new NotImplementedError("unsubscribe")}update(path,updates,options){throw new NotImplementedError("update")}set(path,value,options){throw new NotImplementedError("set")}get(path,options){throw new NotImplementedError("get")}transaction(path,callback,options){throw new NotImplementedError("transaction")}exists(path){throw new NotImplementedError("exists")}query(path,query,options){throw new NotImplementedError("query")}reflect(path,type,args){throw new NotImplementedError("reflect")}export(path,write,options){throw new NotImplementedError("export")}import(path,read,options){throw new NotImplementedError("import")}createIndex(path,key,options){throw new NotImplementedError("createIndex")}getIndexes(){throw new NotImplementedError("getIndexes")}deleteIndex(filePath){throw new NotImplementedError("deleteIndex")}setSchema(path,schema){throw new NotImplementedError("setSchema")}getSchema(path){throw new NotImplementedError("getSchema")}getSchemas(){throw new NotImplementedError("getSchemas")}validateSchema(path,value,isUpdate){throw new NotImplementedError("validateSchema")}getMutations(filter){throw new NotImplementedError("getMutations")}getChanges(filter){throw new NotImplementedError("getChanges")}}exports.Api=Api},{}],29:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ascii85=void 0;function c(input,length,result){const b=[0,0,0,0,0];for(let i=0;i";return ret}exports.ascii85={encode:function(arr){if(arr instanceof ArrayBuffer){arr=new Uint8Array(arr,0,arr.byteLength)}return encode(arr)},decode:function(input){if(!input.startsWith("<~")||!input.endsWith("~>")){throw new Error("Invalid input string")}input=input.substr(2,input.length-4);const n=input.length,r=[],b=[0,0,0,0,0];let t,x,y,d;for(let i=0;i>>=8;y=t&255;t>>>=8;r.push(t>>>8,t&255,y,x);for(let j=d;j<5;++j,r.pop());i+=4}const data=new Uint8Array(r);return data.buffer.slice(data.byteOffset,data.byteOffset+data.byteLength)}}},{}],30:[function(require,module,exports){"use strict";var _a,_b;Object.defineProperty(exports,"__esModule",{value:true});const pad_1=require("../pad");const env=typeof window==="object"?window:self,globalCount=Object.keys(env).length,mimeTypesLength=(_b=(_a=navigator.mimeTypes)===null||_a===void 0?void 0:_a.length)!==null&&_b!==void 0?_b:0,clientId=(0,pad_1.default)((mimeTypesLength+navigator.userAgent.length).toString(36)+globalCount.toString(36),4);function fingerprint(){return clientId}exports.default=fingerprint},{"../pad":32}],31:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});const fingerprint_1=require("./fingerprint");const pad_1=require("./pad");let c=0;const blockSize=4,base=36,discreteValues=Math.pow(base,blockSize);function randomBlock(){return(0,pad_1.default)((Math.random()*discreteValues<<0).toString(base),blockSize)}function safeCounter(){c=ct2[i]===key))}static isAncestor(ancestor,other){return ancestor.lengthother[i]===key))}static isDescendant(descendant,other){return descendant.length>other.length&&other.every(((key,i)=>descendant[i]===key))}}const isProxy=Symbol("isProxy");class LiveDataProxy{static async create(ref,options){var _a;ref=new data_reference_1.DataReference(ref.db,ref.path);let cache,loaded=false;let latestCursor=options===null||options===void 0?void 0:options.cursor;let proxy;const proxyId=id_1.ID.generate();const clientSubscriptions=[];const clientEventEmitter=new simple_event_emitter_1.SimpleEventEmitter;clientEventEmitter.on("cursor",(cursor=>latestCursor=cursor));clientEventEmitter.on("error",(err=>{console.error(err.message,err.details)}));const applyChange=(keys,newValue)=>{if(keys.length===0){cache=newValue;return true}const allowCreation=false;if(allowCreation){cache=typeof keys[0]==="number"?[]:{}}let target=cache;const trailKeys=keys.slice();while(trailKeys.length>1){const key=trailKeys.shift();if(!(key in target)){if(allowCreation){target[key]=typeof key==="number"?[]:{}}else{return false}}target=target[key]}const prop=trailKeys.shift();if(newValue===null){target instanceof Array?target.splice(prop,1):delete target[prop]}else{target[prop]=newValue}return true};const syncFallback=async()=>{if(!loaded){return}await reload()};const subscription=ref.on("mutations",{syncFallback:syncFallback}).subscribe((async snap=>{var _a;if(!loaded){return}const context=snap.context();const isRemote=((_a=context.acebase_proxy)===null||_a===void 0?void 0:_a.id)!==proxyId;if(!isRemote){return}const mutations=snap.val(false);const proceed=mutations.every((mutation=>{if(!applyChange(mutation.target,mutation.val)){return false}const changeRef=mutation.target.reduce(((ref,key)=>ref.child(key)),ref);const changeSnap=new data_snapshot_1.DataSnapshot(changeRef,mutation.val,false,mutation.prev,snap.context());clientEventEmitter.emit("mutation",{snapshot:changeSnap,isRemote:isRemote});return true}));if(proceed){clientEventEmitter.emit("cursor",context.acebase_cursor);localMutationsEmitter.emit("mutations",{origin:"remote",snap:snap})}else{console.warn(`Cached value of live data proxy on "${ref.path}" appears outdated, will be reloaded`);await reload()}}));let processPromise=Promise.resolve();const mutationQueue=[];const transactions=[];const pushLocalMutations=async()=>{const mutations=[];for(let i=0,m=mutationQueue[0];iRelativeNodeTarget.areEqual(t.target,m.target)||RelativeNodeTarget.isAncestor(t.target,m.target)))){mutationQueue.splice(i,1);i--;mutations.push(m)}}if(mutations.length===0){return}mutations.forEach((mutation=>{mutation.value=(0,utils_1.cloneObject)(getTargetValue(cache,mutation.target))}));process_1.default.nextTick((()=>{const context={acebase_proxy:{id:proxyId,source:"update"}};mutations.forEach((mutation=>{const mutationRef=mutation.target.reduce(((ref,key)=>ref.child(key)),ref);const mutationSnap=new data_snapshot_1.DataSnapshot(mutationRef,mutation.value,false,mutation.previous,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false})}));const snap=new data_snapshot_1.MutationsDataSnapshot(ref,mutations.map((m=>({target:m.target,val:m.value,prev:m.previous}))),context);localMutationsEmitter.emit("mutations",{origin:"local",snap:snap})}));processPromise=mutations.reduce(((mutations,m,i,arr)=>{if(!arr.some((other=>RelativeNodeTarget.isAncestor(other.target,m.target)))){mutations.push(m)}return mutations}),[]).reduce(((updates,m)=>{const target=m.target;if(target.length===0){updates.push({ref:ref,target:target,value:cache,type:"set",previous:m.previous})}else{const parentTarget=target.slice(0,-1);const key=target.slice(-1)[0];const parentRef=parentTarget.reduce(((ref,key)=>ref.child(key)),ref);const parentUpdate=updates.find((update=>update.ref.path===parentRef.path));const cacheValue=getTargetValue(cache,target);const prevValue=m.previous;if(parentUpdate){parentUpdate.value[key]=cacheValue;parentUpdate.previous[key]=prevValue}else{updates.push({ref:parentRef,target:parentTarget,value:{[key]:cacheValue},type:"update",previous:{[key]:prevValue}})}}return updates}),[]).reduce((async(promise,update)=>{const context={acebase_proxy:{id:proxyId,source:update.type}};await promise;await update.ref.context(context)[update.type](update.value).catch((err=>{clientEventEmitter.emit("error",{source:"update",message:`Error processing update of "/${ref.path}"`,details:err});const context={acebase_proxy:{id:proxyId,source:"update-rollback"}};const mutations=[];if(update.type==="set"){setTargetValue(cache,update.target,update.previous);const mutationSnap=new data_snapshot_1.DataSnapshot(update.ref,update.previous,false,update.value,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false});mutations.push({target:update.target,val:update.previous,prev:update.value})}else{Object.keys(update.previous).forEach((key=>{setTargetValue(cache,update.target.concat(key),update.previous[key]);const mutationSnap=new data_snapshot_1.DataSnapshot(update.ref.child(key),update.previous[key],false,update.value[key],context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false});mutations.push({target:update.target.concat(key),val:update.previous[key],prev:update.value[key]})}))}mutations.forEach((m=>{const mutationRef=m.target.reduce(((ref,key)=>ref.child(key)),ref);const mutationSnap=new data_snapshot_1.DataSnapshot(mutationRef,m.val,false,m.prev,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false})}));const snap=new data_snapshot_1.MutationsDataSnapshot(update.ref,mutations,context);localMutationsEmitter.emit("mutations",{origin:"local",snap:snap})}));if(update.ref.cursor){clientEventEmitter.emit("cursor",update.ref.cursor)}}),processPromise);await processPromise};let syncInProgress=false;const syncPromises=[];const syncCompleted=()=>{let resolve;const promise=new Promise((rs=>resolve=rs));syncPromises.push({resolve:resolve});return promise};let processQueueTimeout=null;const scheduleSync=()=>{if(!processQueueTimeout){processQueueTimeout=setTimeout((async()=>{syncInProgress=true;processQueueTimeout=null;await pushLocalMutations();syncInProgress=false;syncPromises.splice(0).forEach((p=>p.resolve()))}),0)}};const flagOverwritten=target=>{if(!mutationQueue.find((m=>RelativeNodeTarget.areEqual(m.target,target)))){mutationQueue.push({target:target,previous:(0,utils_1.cloneObject)(getTargetValue(cache,target))})}scheduleSync()};const localMutationsEmitter=new simple_event_emitter_1.SimpleEventEmitter;const addOnChangeHandler=(target,callback)=>{const isObject=val=>val!==null&&typeof val==="object";const mutationsHandler=async details=>{var _a;const{snap:snap,origin:origin}=details;const context=snap.context();const causedByOurProxy=((_a=context.acebase_proxy)===null||_a===void 0?void 0:_a.id)===proxyId;if(details.origin==="remote"&&causedByOurProxy){console.error("DEV ISSUE: mutationsHandler was called from remote event originating from our own proxy");return}const mutations=snap.val(false).filter((mutation=>mutation.target.slice(0,target.length).every(((key,i)=>target[i]===key))));if(mutations.length===0){return}let newValue,previousValue;const singleMutation=mutations.find((m=>m.target.length<=target.length));if(singleMutation){const trailKeys=target.slice(singleMutation.target.length);newValue=trailKeys.reduce(((val,key)=>!isObject(val)||!(key in val)?null:val[key]),singleMutation.val);previousValue=trailKeys.reduce(((val,key)=>!isObject(val)||!(key in val)?null:val[key]),singleMutation.prev)}else{const currentValue=getTargetValue(cache,target);newValue=(0,utils_1.cloneObject)(currentValue);previousValue=(0,utils_1.cloneObject)(newValue);mutations.forEach((mutation=>{const trailKeys=mutation.target.slice(target.length);for(let i=0,val=newValue,prev=previousValue;i{let keepSubscription=true;try{keepSubscription=false!==callback(Object.freeze(newValue),Object.freeze(previousValue),!causedByOurProxy,context)}catch(err){clientEventEmitter.emit("error",{source:origin==="remote"?"remote_update":"local_update",message:"Error running subscription callback",details:err})}if(keepSubscription===false){stop()}}))};localMutationsEmitter.on("mutations",mutationsHandler);const stop=()=>{localMutationsEmitter.off("mutations").off("mutations",mutationsHandler);clientSubscriptions.splice(clientSubscriptions.findIndex((cs=>cs.stop===stop)),1)};clientSubscriptions.push({target:target,stop:stop});return{stop:stop}};const handleFlag=(flag,target,args)=>{if(flag==="write"){return flagOverwritten(target)}else if(flag==="onChange"){return addOnChangeHandler(target,args.callback)}else if(flag==="subscribe"||flag==="observe"){const subscribe=subscriber=>{const currentValue=getTargetValue(cache,target);subscriber.next(currentValue);const subscription=addOnChangeHandler(target,(value=>{subscriber.next(value)}));return function unsubscribe(){subscription.stop()}};if(flag==="subscribe"){return subscribe}const Observable=(0,optional_observable_1.getObservable)();return new Observable(subscribe)}else if(flag==="transaction"){const hasConflictingTransaction=transactions.some((t=>RelativeNodeTarget.areEqual(target,t.target)||RelativeNodeTarget.isAncestor(target,t.target)||RelativeNodeTarget.isDescendant(target,t.target)));if(hasConflictingTransaction){return Promise.reject(new Error("Cannot start transaction because it conflicts with another transaction"))}return new Promise((async resolve=>{const hasPendingMutations=mutationQueue.some((m=>RelativeNodeTarget.areEqual(target,m.target)||RelativeNodeTarget.isAncestor(target,m.target)));if(hasPendingMutations){if(!syncInProgress){scheduleSync()}await syncCompleted()}const tx={target:target,status:"started",transaction:null};transactions.push(tx);tx.transaction={get status(){return tx.status},get completed(){return tx.status!=="started"},get mutations(){return mutationQueue.filter((m=>RelativeNodeTarget.areEqual(tx.target,m.target)||RelativeNodeTarget.isAncestor(tx.target,m.target)))},get hasMutations(){return this.mutations.length>0},async commit(){if(this.completed){throw new Error(`Transaction has completed already (status '${tx.status}')`)}tx.status="finished";transactions.splice(transactions.indexOf(tx),1);if(syncInProgress){await syncCompleted()}scheduleSync();await syncCompleted()},rollback(){if(this.completed){throw new Error(`Transaction has completed already (status '${tx.status}')`)}tx.status="canceled";const mutations=[];for(let i=0;i{if(m.target.length===0){cache=m.previous}else{setTargetValue(cache,m.target,m.previous)}}));transactions.splice(transactions.indexOf(tx),1)}};resolve(tx.transaction)}))}};const snap=await ref.get({cache_mode:"allow",cache_cursor:options===null||options===void 0?void 0:options.cursor});if(snap.context().acebase_origin!=="cache"){clientEventEmitter.emit("cursor",(_a=ref.cursor)!==null&&_a!==void 0?_a:null)}loaded=true;cache=snap.val();if(cache===null&&typeof(options===null||options===void 0?void 0:options.defaultValue)!=="undefined"){cache=options.defaultValue;const context={acebase_proxy:{id:proxyId,source:"default"}};await ref.context(context).set(cache)}proxy=createProxy({root:{ref:ref,get cache(){return cache}},target:[],id:proxyId,flag:handleFlag});const assertProxyAvailable=()=>{if(proxy===null){throw new Error("Proxy was destroyed")}};const reload=async()=>{assertProxyAvailable();mutationQueue.splice(0);const snap=await ref.get({allow_cache:false});const oldVal=cache,newVal=snap.val();cache=newVal;const mutations=(0,utils_1.getMutations)(oldVal,newVal);if(mutations.length===0){return}const context=snap.context();context.acebase_proxy={id:proxyId,source:"reload"};mutations.forEach((m=>{const targetRef=getTargetRef(ref,m.target);const newSnap=new data_snapshot_1.DataSnapshot(targetRef,m.val,m.val===null,m.prev,context);clientEventEmitter.emit("mutation",{snapshot:newSnap,isRemote:true})}));const mutationsSnap=new data_snapshot_1.MutationsDataSnapshot(ref,mutations,context);localMutationsEmitter.emit("mutations",{origin:"local",snap:mutationsSnap})};return{async destroy(){await processPromise;const promises=[subscription.stop(),...clientSubscriptions.map((cs=>cs.stop()))];await Promise.all(promises);["cursor","mutation","error"].forEach((event=>clientEventEmitter.off(event)));cache=null;proxy=null},stop(){this.destroy()},get value(){assertProxyAvailable();return proxy},get hasValue(){assertProxyAvailable();return cache!==null},set value(val){assertProxyAvailable();if(val!==null&&typeof val==="object"&&val[isProxy]){val=val.valueOf()}flagOverwritten([]);cache=val},get ref(){return ref},get cursor(){return latestCursor},reload:reload,onMutation(callback){assertProxyAvailable();clientEventEmitter.off("mutation");clientEventEmitter.on("mutation",(({snapshot:snapshot,isRemote:isRemote})=>{try{callback(snapshot,isRemote)}catch(err){clientEventEmitter.emit("error",{source:"mutation_callback",message:"Error in dataproxy onMutation callback",details:err})}}))},onError(callback){assertProxyAvailable();clientEventEmitter.off("error");clientEventEmitter.on("error",(err=>{try{callback(err)}catch(err){console.error(`Error in dataproxy onError callback: ${err.message}`)}}))},on(event,callback){clientEventEmitter.on(event,callback)},off(event,callback){clientEventEmitter.off(event,callback)}}}}exports.LiveDataProxy=LiveDataProxy;function getTargetValue(obj,target){let val=obj;for(const key of target){val=typeof val==="object"&&val!==null&&key in val?val[key]:null}return val}function setTargetValue(obj,target,value){if(target.length===0){throw new Error("Cannot update root target, caller must do that itself!")}const targetObject=target.slice(0,-1).reduce(((obj,key)=>obj[key]),obj);const prop=target.slice(-1)[0];if(value===null||typeof value==="undefined"){targetObject instanceof Array?targetObject.splice(prop,1):delete targetObject[prop]}else{targetObject[prop]=value}}function getTargetRef(ref,target){const path=path_info_1.PathInfo.get(ref.path).childPath(target);return new data_reference_1.DataReference(ref.db,path)}function createProxy(context){const targetRef=getTargetRef(context.root.ref,context.target);const childProxies=[];const handler={get(target,prop,receiver){target=getTargetValue(context.root.cache,context.target);if(typeof prop==="symbol"){if(prop.toString()===Symbol.iterator.toString()){prop="values"}else if(prop.toString()===isProxy.toString()){return true}else{return Reflect.get(target,prop,receiver)}}if(prop==="valueOf"){return function valueOf(){return target}}if(target===null||typeof target!=="object"){throw new Error(`Cannot read property "${prop}" of ${target}. Value of path "/${targetRef.path}" is not an object (anymore)`)}if(target instanceof Array&&typeof prop==="string"&&/^[0-9]+$/.test(prop)){prop=parseInt(prop)}const value=target[prop];if(value===null){delete target[prop];return}const childProxy=childProxies.find((proxy=>proxy.prop===prop));if(childProxy){if(childProxy.typeof===typeof value){return childProxy.value}childProxies.splice(childProxies.indexOf(childProxy),1)}const proxifyChildValue=prop=>{const value=target[prop];const childProxy=childProxies.find((child=>child.prop===prop));if(childProxy){if(childProxy.typeof===typeof value){return childProxy.value}childProxies.splice(childProxies.indexOf(childProxy),1)}if(typeof value!=="object"){return value}const newChildProxy=createProxy({root:context.root,target:context.target.concat(prop),id:context.id,flag:context.flag});childProxies.push({typeof:typeof value,prop:prop,value:newChildProxy});return newChildProxy};const unproxyValue=value=>value!==null&&typeof value==="object"&&value[isProxy]?value.getTarget():value;if(["string","number","boolean"].includes(typeof value)||value instanceof Date||value instanceof path_reference_1.PathReference||value instanceof ArrayBuffer||typeof value==="object"&&"buffer"in value){return value}const isArray=target instanceof Array;if(prop==="toString"){return function toString(){return`[LiveDataProxy for "${targetRef.path}"]`}}if(typeof value==="undefined"){if(prop==="push"){return function push(item){const childRef=targetRef.push();context.flag("write",context.target.concat(childRef.key));target[childRef.key]=item;return childRef.key}}if(prop==="getTarget"){return function(warn=true){warn&&console.warn("Use getTarget with caution - any changes will not be synchronized!");return target}}if(prop==="getRef"){return function getRef(){const ref=getTargetRef(context.root.ref,context.target);return ref}}if(prop==="forEach"){return function forEach(callback){const keys=Object.keys(target);let stop=false;for(let i=0;!stop&&iproxifyChildValue(key)));if(sortFn){arr.sort(sortFn)}return arr}}if(prop==="onChanged"){return function onChanged(callback){return context.flag("onChange",context.target,{callback:callback})}}if(prop==="subscribe"){return function subscribe(){return context.flag("subscribe",context.target)}}if(prop==="getObservable"){return function getObservable(){return context.flag("observe",context.target)}}if(prop==="getOrderedCollection"){return function getOrderedCollection(orderProperty,orderIncrement){return new OrderedCollectionProxy(this,orderProperty,orderIncrement)}}if(prop==="startTransaction"){return function startTransaction(){return context.flag("transaction",context.target)}}if(prop==="remove"&&!isArray){return function remove(){if(context.target.length===0){throw new Error("Can't remove proxy root value")}const parent=getTargetValue(context.root.cache,context.target.slice(0,-1));const key=context.target.slice(-1)[0];context.flag("write",context.target);delete parent[key]}}return}else if(typeof value==="function"){if(isArray){const writeArray=action=>{context.flag("write",context.target);return action()};const cleanArrayValues=values=>values.map((value=>{value=unproxyValue(value);removeVoidProperties(value);return value}));if(prop==="push"){return function push(...items){items=cleanArrayValues(items);return writeArray((()=>target.push(...items)))}}if(prop==="pop"){return function pop(){return writeArray((()=>target.pop()))}}if(prop==="splice"){return function splice(start,deleteCount,...items){items=cleanArrayValues(items);return writeArray((()=>target.splice(start,deleteCount,...items)))}}if(prop==="shift"){return function shift(){return writeArray((()=>target.shift()))}}if(prop==="unshift"){return function unshift(...items){items=cleanArrayValues(items);return writeArray((()=>target.unshift(...items)))}}if(prop==="sort"){return function sort(compareFn){return writeArray((()=>target.sort(compareFn)))}}if(prop==="reverse"){return function reverse(){return writeArray((()=>target.reverse()))}}if(["indexOf","lastIndexOf"].includes(prop)){return function indexOf(item,start){if(item!==null&&typeof item==="object"&&item[isProxy]){item=item.getTarget(false)}return target[prop](item,start)}}if(["forEach","every","some","filter","map"].includes(prop)){return function iterate(callback){return target[prop](((value,i)=>callback(proxifyChildValue(i),i,proxy)))}}if(["reduce","reduceRight"].includes(prop)){return function reduce(callback,initialValue){return target[prop](((prev,value,i)=>callback(prev,proxifyChildValue(i),i,proxy)),initialValue)}}if(["find","findIndex"].includes(prop)){return function find(callback){let value=target[prop](((value,i)=>callback(proxifyChildValue(i),i,proxy)));if(prop==="find"&&value){const index=target.indexOf(value);value=proxifyChildValue(index)}return value}}if(["values","entries","keys"].includes(prop)){return function*generator(){for(let i=0;itypeof key==="number"))){context.flag("write",context.target.slice(0,context.target.findIndex((key=>typeof key==="number"))))}else if(target instanceof Array){context.flag("write",context.target)}else{context.flag("write",context.target.concat(prop))}if(value===null){delete target[prop]}else{removeVoidProperties(value);target[prop]=value}return true},deleteProperty(target,prop){target=getTargetValue(context.root.cache,context.target);if(target===null){throw new Error(`Cannot delete property ${prop.toString()} of null`)}if(typeof prop==="symbol"){return Reflect.deleteProperty(target,prop)}if(!(prop in target)){return true}context.flag("write",context.target.concat(prop));delete target[prop];return true},ownKeys(target){target=getTargetValue(context.root.cache,context.target);return Reflect.ownKeys(target)},has(target,prop){target=getTargetValue(context.root.cache,context.target);return Reflect.has(target,prop)},getOwnPropertyDescriptor(target,prop){target=getTargetValue(context.root.cache,context.target);const descriptor=Reflect.getOwnPropertyDescriptor(target,prop);if(descriptor){descriptor.configurable=true}return descriptor},getPrototypeOf(target){target=getTargetValue(context.root.cache,context.target);return Reflect.getPrototypeOf(target)}};const proxy=new Proxy({},handler);return proxy}function removeVoidProperties(obj){if(typeof obj!=="object"){return}Object.keys(obj).forEach((key=>{const val=obj[key];if(val===null||typeof val==="undefined"){delete obj[key]}else if(typeof val==="object"){removeVoidProperties(val)}}))}function proxyAccess(proxiedValue){if(typeof proxiedValue!=="object"||!proxiedValue[isProxy]){throw new Error("Given value is not proxied. Make sure you are referencing the value through the live data proxy.")}return proxiedValue}exports.proxyAccess=proxyAccess;class OrderedCollectionProxy{constructor(collection,orderProperty="order",orderIncrement=10){this.collection=collection;this.orderProperty=orderProperty;this.orderIncrement=orderIncrement;if(typeof collection!=="object"||!collection[isProxy]){throw new Error("Collection is not proxied")}if(collection.valueOf()instanceof Array){throw new Error("Collection is an array, not an object collection")}if(!Object.keys(collection).every((key=>typeof collection[key]==="object"))){throw new Error("Collection has non-object children")}const ok=Object.keys(collection).every((key=>typeof collection[key][orderProperty]==="number"));if(!ok){const keys=Object.keys(collection);for(let i=0;i{const subscription=this.getObservable().subscribe((()=>{const newArray=this.getArray();subscriber.next(newArray)}));return function unsubscribe(){subscription.unsubscribe()}}))}getArray(){const arr=proxyAccess(this.collection).toArray(((a,b)=>a[this.orderProperty]-b[this.orderProperty]));return arr}add(item,index,from){const arr=this.getArray();let minOrder=Number.POSITIVE_INFINITY,maxOrder=Number.NEGATIVE_INFINITY;for(let i=0;ithis.collection[key]===item));if(!fromKey){throw new Error("item not found in collection")}if(from===index){return{key:fromKey,index:index}}if(Math.abs(from-index)===1){const otherItem=arr[index];const otherOrder=otherItem[this.orderProperty];otherItem[this.orderProperty]=item[this.orderProperty];item[this.orderProperty]=otherOrder;return{key:fromKey,index:index}}else{arr.splice(from,1)}}if(typeof index!=="number"||index>=arr.length){index=arr.length;item[this.orderProperty]=arr.length==0?0:maxOrder+this.orderIncrement}else if(index===0){item[this.orderProperty]=arr.length==0?0:minOrder-this.orderIncrement}else{const orders=arr.map((item=>item[this.orderProperty]));const gap=orders[index]-orders[index-1];if(gap>1){item[this.orderProperty]=orders[index]-Math.floor(gap/2)}else{arr.splice(index,0,item);for(let i=0;ithis.collection[key]===item));if(!key){throw new Error("Cannot find target object to delete")}this.collection[key]=null;return{key:key,index:index}}move(fromIndex,toIndex){const arr=this.getArray();return this.add(arr[fromIndex],toIndex,fromIndex)}sort(sortFn){const arr=this.getArray();arr.sort(sortFn);for(let i=0;i{newContext[key]=context[key]}))}this[_private].context=newContext;return this}else if(typeof context==="undefined"){console.warn("Use snap.context() instead of snap.ref.context() to get updating context in event callbacks");return currentContext}else{throw new Error("Invalid context argument")}}get cursor(){return this[_private].cursor}set cursor(value){var _a;this[_private].cursor=value;(_a=this.onCursor)===null||_a===void 0?void 0:_a.call(this,value)}get path(){return this[_private].path}get key(){const key=this[_private].key;return typeof key==="number"?`[${key}]`:key}get index(){const key=this[_private].key;if(typeof key!=="number"){throw new Error(`"${key}" is not a number`)}return key}get parent(){const currentPath=path_info_1.PathInfo.fillVariables2(this.path,this.vars);const info=path_info_1.PathInfo.get(currentPath);if(info.parentPath===null){return null}return new DataReference(this.db,info.parentPath).context(this[_private].context)}get vars(){return this[_private].vars}child(childPath){childPath=typeof childPath==="number"?childPath:childPath.replace(/^\/|\/$/g,"");const currentPath=path_info_1.PathInfo.fillVariables2(this.path,this.vars);const targetPath=path_info_1.PathInfo.getChildPath(currentPath,childPath);return new DataReference(this.db,targetPath).context(this[_private].context)}async set(value,onComplete){try{if(this.isWildcardPath){throw new Error(`Cannot set the value of wildcard path "/${this.path}"`)}if(this.parent===null){throw new Error("Cannot set the root object. Use update, or set individual child properties")}if(typeof value==="undefined"){throw new TypeError(`Cannot store undefined value in "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}value=this.db.types.serialize(this.path,value);const{cursor:cursor}=await this.db.api.set(this.path,value,{context:this[_private].context});this.cursor=cursor;if(typeof onComplete==="function"){try{onComplete(null,this)}catch(err){console.error("Error in onComplete callback:",err)}}}catch(err){if(typeof onComplete==="function"){try{onComplete(err,this)}catch(err){console.error("Error in onComplete callback:",err)}}else{throw err}}return this}async update(updates,onComplete){try{if(this.isWildcardPath){throw new Error(`Cannot update the value of wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}if(typeof updates!=="object"||updates instanceof Array||updates instanceof ArrayBuffer||updates instanceof Date){await this.set(updates)}else if(Object.keys(updates).length===0){console.warn(`update called on path "/${this.path}", but there is nothing to update`)}else{updates=this.db.types.serialize(this.path,updates);const{cursor:cursor}=await this.db.api.update(this.path,updates,{context:this[_private].context});this.cursor=cursor}if(typeof onComplete==="function"){try{onComplete(null,this)}catch(err){console.error("Error in onComplete callback:",err)}}}catch(err){if(typeof onComplete==="function"){try{onComplete(err,this)}catch(err){console.error("Error in onComplete callback:",err)}}else{throw err}}return this}async transaction(callback){if(this.isWildcardPath){throw new Error(`Cannot start a transaction on wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}let throwError;const cb=currentValue=>{currentValue=this.db.types.deserialize(this.path,currentValue);const snap=new data_snapshot_1.DataSnapshot(this,currentValue);let newValue;try{newValue=callback(snap)}catch(err){throwError=err;return}if(newValue instanceof Promise){return newValue.then((val=>this.db.types.serialize(this.path,val))).catch((err=>{throwError=err;return}))}else{return this.db.types.serialize(this.path,newValue)}};const{cursor:cursor}=await this.db.api.transaction(this.path,cb,{context:this[_private].context});this.cursor=cursor;if(throwError){throw throwError}return this}on(event,callback,cancelCallback){if(this.path===""&&["value","child_changed"].includes(event)){console.warn("WARNING: Listening for value and child_changed events on the root node is a bad practice. These events require loading of all data (value event), or potentially lots of data (child_changed event) each time they are fired")}let eventPublisher=null;const eventStream=new subscription_1.EventStream((publisher=>{eventPublisher=publisher}));const cb={event:event,stream:eventStream,userCallback:typeof callback==="function"&&callback,ourCallback:(err,path,newValue,oldValue,eventContext)=>{if(err){this.db.debug.error(`Error getting data for event ${event} on path "${path}"`,err);return}const ref=this.db.ref(path);ref[_private].vars=path_info_1.PathInfo.extractVariables(this.path,path);let callbackObject;if(event.startsWith("notify_")){callbackObject=ref.context(eventContext||{})}else{const values={previous:this.db.types.deserialize(path,oldValue),current:this.db.types.deserialize(path,newValue)};if(event==="child_removed"){callbackObject=new data_snapshot_1.DataSnapshot(ref,values.previous,true,values.previous,eventContext)}else if(event==="mutations"){callbackObject=new data_snapshot_1.MutationsDataSnapshot(ref,values.current,eventContext)}else{const isRemoved=event==="mutated"&&values.current===null;callbackObject=new data_snapshot_1.DataSnapshot(ref,values.current,isRemoved,values.previous,eventContext)}}eventPublisher.publish(callbackObject);if(eventContext===null||eventContext===void 0?void 0:eventContext.acebase_cursor){this.cursor=eventContext.acebase_cursor}}};this[_private].callbacks.push(cb);const subscribe=()=>{if(typeof callback==="function"){eventStream.subscribe(callback,((activated,cancelReason)=>{if(!activated){cancelCallback&&cancelCallback(cancelReason)}}))}const advancedOptions=typeof callback==="object"?callback:{newOnly:!callback};if(typeof advancedOptions.newOnly!=="boolean"){advancedOptions.newOnly=false}if(this.isWildcardPath){advancedOptions.newOnly=true}const cancelSubscription=err=>{const callbacks=this[_private].callbacks;callbacks.splice(callbacks.indexOf(cb),1);this.db.api.unsubscribe(this.path,event,cb.ourCallback);this.db.debug.error(`Subscription "${event}" on path "/${this.path}" canceled because of an error: ${err.message}`);eventPublisher.cancel(err.message)};const authorized=this.db.api.subscribe(this.path,event,cb.ourCallback,{newOnly:advancedOptions.newOnly,cancelCallback:cancelSubscription,syncFallback:advancedOptions.syncFallback});const allSubscriptionsStoppedCallback=()=>{const callbacks=this[_private].callbacks;callbacks.splice(callbacks.indexOf(cb),1);return this.db.api.unsubscribe(this.path,event,cb.ourCallback)};if(authorized instanceof Promise){authorized.then((()=>{eventPublisher.start(allSubscriptionsStoppedCallback)})).catch(cancelSubscription)}else{eventPublisher.start(allSubscriptionsStoppedCallback)}if(!advancedOptions.newOnly){if(event==="value"){this.get((snap=>{eventPublisher.publish(snap)}))}else if(event==="child_added"){this.get((snap=>{const val=snap.val();if(val===null||typeof val!=="object"){return}Object.keys(val).forEach((key=>{const childSnap=new data_snapshot_1.DataSnapshot(this.child(key),val[key]);eventPublisher.publish(childSnap)}))}))}else if(event==="notify_child_added"){const step=100,limit=step;let skip=0;const more=async()=>{const children=await this.db.api.reflect(this.path,"children",{limit:limit,skip:skip});children.list.forEach((child=>{const childRef=this.child(child.key);eventPublisher.publish(childRef)}));if(children.more){skip+=step;more()}};more()}}};if(this.db.isReady){subscribe()}else{this.db.ready(subscribe)}return eventStream}off(event,callback){const subscriptions=this[_private].callbacks;const stopSubs=subscriptions.filter((sub=>(!event||sub.event===event)&&(!callback||sub.userCallback===callback)));if(stopSubs.length===0){this.db.debug.warn(`Can't find event subscriptions to stop (path: "${this.path}", event: ${event||"(any)"}, callback: ${callback})`)}stopSubs.forEach((sub=>{sub.stream.stop()}));return this}get(optionsOrCallback,callback){if(!this.db.isReady){const promise=this.db.ready().then((()=>this.get(optionsOrCallback,callback)));return typeof optionsOrCallback!=="function"&&typeof callback!=="function"?promise:undefined}callback=typeof optionsOrCallback==="function"?optionsOrCallback:typeof callback==="function"?callback:undefined;if(this.isWildcardPath){const error=new Error(`Cannot get value of wildcard path "/${this.path}". Use .query() instead`);if(typeof callback==="function"){throw error}return Promise.reject(error)}const options=new DataRetrievalOptions(typeof optionsOrCallback==="object"?optionsOrCallback:{cache_mode:"allow"});const promise=this.db.api.get(this.path,options).then((result=>{var _a;const isNewApiResult="context"in result&&"value"in result;if(!isNewApiResult){console.warn("AceBase api.get method returned an old response value. Update your acebase or acebase-client package");result={value:result,context:{}}}const value=this.db.types.deserialize(this.path,result.value);const snapshot=new data_snapshot_1.DataSnapshot(this,value,undefined,undefined,result.context);if((_a=result.context)===null||_a===void 0?void 0:_a.acebase_cursor){this.cursor=result.context.acebase_cursor}return snapshot}));if(callback){promise.then(callback).catch((err=>{console.error("Uncaught error:",err)}));return}else{return promise}}once(event,options){if(event==="value"&&!this.isWildcardPath){return this.get(options)}return new Promise((resolve=>{const callback=snap=>{this.off(event,callback);resolve(snap)};this.on(event,callback)}))}push(value,onComplete){if(this.isWildcardPath){const error=new Error(`Cannot push to wildcard path "/${this.path}"`);if(typeof value==="undefined"||typeof onComplete==="function"){throw error}return Promise.reject(error)}const id=id_1.ID.generate();const ref=this.child(id);ref[_private].pushed=true;if(typeof value!=="undefined"){return ref.set(value,onComplete).then((()=>ref))}else{return ref}}async remove(){if(this.isWildcardPath){throw new Error(`Cannot remove wildcard path "/${this.path}". Use query().remove instead`)}if(this.parent===null){throw new Error("Cannot remove the root node")}return this.set(null)}async exists(){if(this.isWildcardPath){throw new Error(`Cannot check wildcard path "/${this.path}" existence`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.exists(this.path)}get isWildcardPath(){return this.path.indexOf("*")>=0||this.path.indexOf("$")>=0}query(){return new DataReferenceQuery(this)}async count(){const info=await this.reflect("info",{child_count:true});return info.children.count}async reflect(type,args){if(this.isWildcardPath){throw new Error(`Cannot reflect on wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.reflect(this.path,type,args)}async export(write,options={format:"json",type_safe:true}){if(this.isWildcardPath){throw new Error(`Cannot export wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}const writeFn=typeof write==="function"?write:write.write.bind(write);return this.db.api.export(this.path,writeFn,options)}async import(read,options={format:"json",suppress_events:false}){if(this.isWildcardPath){throw new Error(`Cannot import to wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.import(this.path,read,options)}proxy(options){const isOptionsArg=typeof options==="object"&&(typeof options.cursor!=="undefined"||typeof options.defaultValue!=="undefined");if(typeof options!=="undefined"&&!isOptionsArg){this.db.debug.warn("Warning: live data proxy is being initialized with a deprecated method signature. Use ref.proxy(options) instead of ref.proxy(defaultValue)");options={defaultValue:options}}return data_proxy_1.LiveDataProxy.create(this,options)}observe(options){if(options){throw new Error("observe does not support data retrieval options yet")}if(this.isWildcardPath){throw new Error(`Cannot observe wildcard path "/${this.path}"`)}const Observable=(0,optional_observable_1.getObservable)();return new Observable((observer=>{let cache,resolved=false;let promise=this.get(options).then((snap=>{resolved=true;cache=snap.val();observer.next(cache)}));const updateCache=snap=>{if(!resolved){promise=promise.then((()=>updateCache(snap)));return}const mutatedPath=snap.ref.path;if(mutatedPath===this.path){cache=snap.val();return observer.next(cache)}const trailKeys=path_info_1.PathInfo.getPathKeys(mutatedPath).slice(path_info_1.PathInfo.getPathKeys(this.path).length);let target=cache;while(trailKeys.length>1){const key=trailKeys.shift();if(!(key in target)){target[key]=typeof trailKeys[0]==="number"?[]:{}}target=target[key]}const prop=trailKeys.shift();const newValue=snap.val();if(newValue===null){target instanceof Array&&typeof prop==="number"?target.splice(prop,1):delete target[prop]}else{target[prop]=newValue}observer.next(cache)};this.on("mutated",updateCache);return()=>{this.off("mutated",updateCache)}}))}async forEach(callbackOrOptions,callback){let options;if(typeof callbackOrOptions==="function"){callback=callbackOrOptions}else{options=callbackOrOptions}if(typeof callback!=="function"){throw new TypeError("No callback function given")}const info=await this.reflect("children",{limit:0,skip:0});const summary={canceled:false,total:info.list.length,processed:0};for(let i=0;ithis.get(optionsOrCallback,callback)));return typeof optionsOrCallback!=="function"&&typeof callback!=="function"?promise:undefined}callback=typeof optionsOrCallback==="function"?optionsOrCallback:typeof callback==="function"?callback:undefined;const options=new QueryDataRetrievalOptions(typeof optionsOrCallback==="object"?optionsOrCallback:{snapshots:true,cache_mode:"allow"});options.allow_cache=options.cache_mode!=="bypass";options.eventHandler=ev=>{if(!this[_private].events[ev.name]){return false}const listeners=this[_private].events[ev.name];if(typeof listeners!=="object"||listeners.length===0){return false}if(["add","change","remove"].includes(ev.name)){const ref=new DataReference(this.ref.db,ev.path);const eventData={name:ev.name};if(options.snapshots&&ev.name!=="remove"){const val=db.types.deserialize(ev.path,ev.value);eventData.snapshot=new data_snapshot_1.DataSnapshot(ref,val,false)}else{eventData.ref=ref}ev=eventData}listeners.forEach((callback=>{try{callback(ev)}catch(e){}}))};options.monitor={add:false,change:false,remove:false};if(this[_private].events){if(this[_private].events["add"]&&this[_private].events["add"].length>0){options.monitor.add=true}if(this[_private].events["change"]&&this[_private].events["change"].length>0){options.monitor.change=true}if(this[_private].events["remove"]&&this[_private].events["remove"].length>0){options.monitor.remove=true}}this.stop();const db=this.ref.db;return db.api.query(this.ref.path,this[_private],options).catch((err=>{throw new Error(err)})).then((res=>{const{stop:stop}=res;let{results:results,context:context}=res;this.stop=async()=>{await stop()};if(!("results"in res&&"context"in res)){console.warn("Query results missing context. Update your acebase and/or acebase-client packages");results=res,context={}}if(options.snapshots){const snaps=results.map((result=>{const val=db.types.deserialize(result.path,result.val);return new data_snapshot_1.DataSnapshot(db.ref(result.path),val,false,undefined,context)}));return DataSnapshotsArray.from(snaps)}else{const refs=results.map((path=>db.ref(path)));return DataReferencesArray.from(refs)}})).then((results=>{callback&&callback(results);return results}))}async stop(){}getRefs(callback){return this.get({snapshots:false},callback)}find(){return this.get({snapshots:false})}async count(){const refs=await this.find();return refs.length}async exists(){const originalTake=this[_private].take;const p=this.take(1).find();this.take(originalTake);const refs=await p;return refs.length!==0}async remove(callback){const refs=await this.find();const parentUpdates=refs.reduce(((parents,ref)=>{const parent=parents[ref.parent.path];if(!parent){parents[ref.parent.path]=[ref]}else{parent.push(ref)}return parents}),{});const db=this.ref.db;const promises=Object.keys(parentUpdates).map((async parentPath=>{const updates=refs.reduce(((updates,ref)=>{updates[ref.key]=null;return updates}),{});const ref=db.ref(parentPath);try{await ref.update(updates);return{ref:ref,success:true}}catch(error){return{ref:ref,success:false,error:error}}}));const results=await Promise.all(promises);callback&&callback(results);return results}on(event,callback){if(!this[_private].events[event]){this[_private].events[event]=[]}this[_private].events[event].push(callback);return this}off(event,callback){if(typeof event==="undefined"){this[_private].events={};return this}if(!this[_private].events[event]){return this}if(typeof callback==="undefined"){delete this[_private].events[event];return this}const index=this[_private].events[event].indexOf(callback);if(!~index){return this}this[_private].events[event].splice(index,1);return this}async forEach(callbackOrOptions,callback){let options;if(typeof callbackOrOptions==="function"){callback=callbackOrOptions}else{options=callbackOrOptions}if(typeof callback!=="function"){throw new TypeError("No callback function given")}const refs=await this.find();const summary={canceled:false,total:refs.length,processed:0};for(let i=0;iarr[i]=snap));return arr}getValues(){return this.map((snap=>snap.val()))}}exports.DataSnapshotsArray=DataSnapshotsArray;class DataReferencesArray extends Array{static from(refs){const arr=new DataReferencesArray(refs.length);refs.forEach(((ref,i)=>arr[i]=ref));return arr}getPaths(){return this.map((ref=>ref.path))}}exports.DataReferencesArray=DataReferencesArray},{"./data-proxy":33,"./data-snapshot":35,"./id":37,"./optional-observable":40,"./path-info":42,"./subscription":49}],35:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.MutationsDataSnapshot=exports.DataSnapshot=void 0;const path_info_1=require("./path-info");function getChild(snapshot,path,previous=false){if(!snapshot.exists()){return null}let child=previous?snapshot.previous():snapshot.val();if(typeof path==="number"){return child[path]}path_info_1.PathInfo.getPathKeys(path).every((key=>{child=child[key];return typeof child!=="undefined"}));return child||null}function getChildren(snapshot){if(!snapshot.exists()){return[]}const value=snapshot.val();if(value instanceof Array){return new Array(value.length).map(((v,i)=>i))}if(typeof value==="object"){return Object.keys(value)}return[]}class DataSnapshot{constructor(ref,value,isRemoved=false,prevValue,context){this.ref=ref;this.val=()=>value;this.previous=()=>prevValue;this.exists=()=>{if(isRemoved){return false}return value!==null&&typeof value!=="undefined"};this.context=()=>context||{}}exists(){return false}static for(ref,value){return new DataSnapshot(ref,value)}child(path){const val=getChild(this,path,false);const prev=getChild(this,path,true);return new DataSnapshot(this.ref.child(path),val,false,prev)}hasChild(path){return getChild(this,path)!==null}hasChildren(){return getChildren(this).length>0}numChildren(){return getChildren(this).length}forEach(callback){const value=this.val();const prev=this.previous();return getChildren(this).every((key=>{const snap=new DataSnapshot(this.ref.child(key),value[key],false,prev[key]);return callback(snap)}))}get key(){return this.ref.key}}exports.DataSnapshot=DataSnapshot;class MutationsDataSnapshot extends DataSnapshot{constructor(ref,mutations,context){super(ref,mutations,false,undefined,context);this.previous=()=>{throw new Error("Iterate values to get previous values for each mutation")};this.val=(warn=true)=>{if(warn){console.warn("Unless you know what you are doing, it is best not to use the value of a mutations snapshot directly. Use child methods and forEach to iterate the mutations instead")}return mutations}}forEach(callback){const mutations=this.val();return mutations.every((mutation=>{const ref=mutation.target.reduce(((ref,key)=>ref.child(key)),this.ref);const snap=new DataSnapshot(ref,mutation.val,false,mutation.prev);return callback(snap)}))}child(index){if(typeof index!=="number"){throw new Error("child index must be a number")}const mutation=this.val()[index];const ref=mutation.target.reduce(((ref,key)=>ref.child(key)),this.ref);return new DataSnapshot(ref,mutation.val,false,mutation.prev)}}exports.MutationsDataSnapshot=MutationsDataSnapshot},{"./path-info":42}],36:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DebugLogger=void 0;const process_1=require("./process");const noop=()=>{};class DebugLogger{constructor(level="log",prefix=""){this.level=level;this.prefix=prefix;this.setLevel(level)}setLevel(level){const prefix=this.prefix?this.prefix+" %s":"";this.verbose=["verbose"].includes(level)?prefix?console.log.bind(console,prefix):console.log.bind(console):noop;this.log=["verbose","log"].includes(level)?prefix?console.log.bind(console,prefix):console.log.bind(console):noop;this.warn=["verbose","log","warn"].includes(level)?prefix?console.warn.bind(console,prefix):console.warn.bind(console):noop;this.error=["verbose","log","warn","error"].includes(level)?prefix?console.error.bind(console,prefix):console.error.bind(console):noop;this.write=text=>{const isRunKit=typeof process_1.default!=="undefined"&&process_1.default.env&&typeof process_1.default.env.RUNKIT_ENDPOINT_PATH==="string";if(text&&isRunKit){text.split("\n").forEach((line=>console.log(line)))}else{console.log(text)}}}}exports.DebugLogger=DebugLogger},{"./process":44}],37:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ID=void 0;const cuid_1=require("./cuid");let timeBias=0;class ID{static set timeBias(bias){if(typeof bias!=="number"){return}timeBias=bias}static generate(){return(0,cuid_1.default)(timeBias).slice(1)}}exports.ID=ID},{"./cuid":31}],38:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObjectCollection=exports.PartialArray=exports.SchemaDefinition=exports.Colorize=exports.ColorStyle=exports.SimpleEventEmitter=exports.SimpleCache=exports.ascii85=exports.PathInfo=exports.Utils=exports.TypeMappings=exports.Transport=exports.EventSubscription=exports.EventPublisher=exports.EventStream=exports.PathReference=exports.ID=exports.DebugLogger=exports.OrderedCollectionProxy=exports.proxyAccess=exports.MutationsDataSnapshot=exports.DataSnapshot=exports.DataReferencesArray=exports.DataSnapshotsArray=exports.QueryDataRetrievalOptions=exports.DataRetrievalOptions=exports.DataReferenceQuery=exports.DataReference=exports.Api=exports.AceBaseBaseSettings=exports.AceBaseBase=void 0;var acebase_base_1=require("./acebase-base");Object.defineProperty(exports,"AceBaseBase",{enumerable:true,get:function(){return acebase_base_1.AceBaseBase}});Object.defineProperty(exports,"AceBaseBaseSettings",{enumerable:true,get:function(){return acebase_base_1.AceBaseBaseSettings}});var api_1=require("./api");Object.defineProperty(exports,"Api",{enumerable:true,get:function(){return api_1.Api}});var data_reference_1=require("./data-reference");Object.defineProperty(exports,"DataReference",{enumerable:true,get:function(){return data_reference_1.DataReference}});Object.defineProperty(exports,"DataReferenceQuery",{enumerable:true,get:function(){return data_reference_1.DataReferenceQuery}});Object.defineProperty(exports,"DataRetrievalOptions",{enumerable:true,get:function(){return data_reference_1.DataRetrievalOptions}});Object.defineProperty(exports,"QueryDataRetrievalOptions",{enumerable:true,get:function(){return data_reference_1.QueryDataRetrievalOptions}});Object.defineProperty(exports,"DataSnapshotsArray",{enumerable:true,get:function(){return data_reference_1.DataSnapshotsArray}});Object.defineProperty(exports,"DataReferencesArray",{enumerable:true,get:function(){return data_reference_1.DataReferencesArray}});var data_snapshot_1=require("./data-snapshot");Object.defineProperty(exports,"DataSnapshot",{enumerable:true,get:function(){return data_snapshot_1.DataSnapshot}});Object.defineProperty(exports,"MutationsDataSnapshot",{enumerable:true,get:function(){return data_snapshot_1.MutationsDataSnapshot}});var data_proxy_1=require("./data-proxy");Object.defineProperty(exports,"proxyAccess",{enumerable:true,get:function(){return data_proxy_1.proxyAccess}});Object.defineProperty(exports,"OrderedCollectionProxy",{enumerable:true,get:function(){return data_proxy_1.OrderedCollectionProxy}});var debug_1=require("./debug");Object.defineProperty(exports,"DebugLogger",{enumerable:true,get:function(){return debug_1.DebugLogger}});var id_1=require("./id");Object.defineProperty(exports,"ID",{enumerable:true,get:function(){return id_1.ID}});var path_reference_1=require("./path-reference");Object.defineProperty(exports,"PathReference",{enumerable:true,get:function(){return path_reference_1.PathReference}});var subscription_1=require("./subscription");Object.defineProperty(exports,"EventStream",{enumerable:true,get:function(){return subscription_1.EventStream}});Object.defineProperty(exports,"EventPublisher",{enumerable:true,get:function(){return subscription_1.EventPublisher}});Object.defineProperty(exports,"EventSubscription",{enumerable:true,get:function(){return subscription_1.EventSubscription}});exports.Transport=require("./transport");var type_mappings_1=require("./type-mappings");Object.defineProperty(exports,"TypeMappings",{enumerable:true,get:function(){return type_mappings_1.TypeMappings}});exports.Utils=require("./utils");var path_info_1=require("./path-info");Object.defineProperty(exports,"PathInfo",{enumerable:true,get:function(){return path_info_1.PathInfo}});var ascii85_1=require("./ascii85");Object.defineProperty(exports,"ascii85",{enumerable:true,get:function(){return ascii85_1.ascii85}});var simple_cache_1=require("./simple-cache");Object.defineProperty(exports,"SimpleCache",{enumerable:true,get:function(){return simple_cache_1.SimpleCache}});var simple_event_emitter_1=require("./simple-event-emitter");Object.defineProperty(exports,"SimpleEventEmitter",{enumerable:true,get:function(){return simple_event_emitter_1.SimpleEventEmitter}});var simple_colors_1=require("./simple-colors");Object.defineProperty(exports,"ColorStyle",{enumerable:true,get:function(){return simple_colors_1.ColorStyle}});Object.defineProperty(exports,"Colorize",{enumerable:true,get:function(){return simple_colors_1.Colorize}});var schema_1=require("./schema");Object.defineProperty(exports,"SchemaDefinition",{enumerable:true,get:function(){return schema_1.SchemaDefinition}});var partial_array_1=require("./partial-array");Object.defineProperty(exports,"PartialArray",{enumerable:true,get:function(){return partial_array_1.PartialArray}});const object_collection_1=require("./object-collection");Object.defineProperty(exports,"ObjectCollection",{enumerable:true,get:function(){return object_collection_1.ObjectCollection}})},{"./acebase-base":27,"./api":28,"./ascii85":29,"./data-proxy":33,"./data-reference":34,"./data-snapshot":35,"./debug":36,"./id":37,"./object-collection":39,"./partial-array":41,"./path-info":42,"./path-reference":43,"./schema":45,"./simple-cache":46,"./simple-colors":47,"./simple-event-emitter":48,"./subscription":49,"./transport":50,"./type-mappings":51,"./utils":52}],39:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObjectCollection=void 0;const id_1=require("./id");class ObjectCollection{static from(array){const collection={};array.forEach((child=>{collection[id_1.ID.generate()]=child}));return collection}}exports.ObjectCollection=ObjectCollection},{"./id":37}],40:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObservableShim=exports.setObservable=exports.getObservable=void 0;let _observable;function getObservable(){if(_observable){return _observable}if(typeof window!=="undefined"&&window.Observable){_observable=window.Observable;return _observable}try{const{Observable:Observable}=require("rxjs");if(!Observable){throw new Error("not loaded")}_observable=Observable;return Observable}catch(err){throw new Error("RxJS Observable could not be loaded. If you are using a browser build, add it to AceBase using db.setObservable. For node.js builds, add it to your project with: npm i rxjs")}}exports.getObservable=getObservable;function setObservable(Observable){if(Observable==="shim"){console.warn("Using AceBase's simple Observable shim. Only use this if you know what you're doing.");Observable=ObservableShim}_observable=Observable}exports.setObservable=setObservable;class ObservableShim{constructor(create){this._active=false;this._subscribers=[];this._create=create}subscribe(subscriber){if(!this._active){const next=value=>{this._subscribers.forEach((s=>{try{s(value)}catch(err){console.error("Error in subscriber callback:",err)}}))};const observer={next:next};this._cleanup=this._create(observer);this._active=true}this._subscribers.push(subscriber);const unsubscribe=()=>{this._subscribers.splice(this._subscribers.indexOf(subscriber),1);if(this._subscribers.length===0){this._active=false;this._cleanup()}};const subscription={unsubscribe:unsubscribe};return subscription}}exports.ObservableShim=ObservableShim},{rxjs:53}],41:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.PartialArray=void 0;class PartialArray{constructor(sparseArray){if(sparseArray instanceof Array){for(let i=0;ikey.startsWith("[")?parseInt(key.slice(1,-1)):key))}class PathInfo{constructor(path){if(typeof path==="string"){this.keys=getPathKeys(path)}else if(path instanceof Array){this.keys=path}this.path=this.keys.reduce(((path,key,i)=>i===0?`${key}`:typeof key==="string"?`${path}/${key}`:`${path}[${key}]`),"")}static get(path){return new PathInfo(path)}static getChildPath(path,childKey){return PathInfo.get(path).child(childKey).path}static getPathKeys(path){return getPathKeys(path)}get key(){return this.keys.length===0?null:this.keys.slice(-1)[0]}get parent(){if(this.keys.length==0){return null}const parentKeys=this.keys.slice(0,-1);return new PathInfo(parentKeys)}get parentPath(){return this.keys.length===0?null:this.parent.path}child(childKey){if(typeof childKey==="string"){childKey=getPathKeys(childKey)}return new PathInfo(this.keys.concat(childKey))}childPath(childKey){return this.child(childKey).path}get pathKeys(){return this.keys}static extractVariables(varPath,fullPath){if(!varPath.includes("*")&&!varPath.includes("$")){return[]}const keys=getPathKeys(varPath);const pathKeys=getPathKeys(fullPath);let count=0;const variables={get length(){return count}};keys.forEach(((key,index)=>{const pathKey=pathKeys[index];if(key==="*"){variables[count++]=pathKey}else if(typeof key==="string"&&key[0]==="$"){variables[count++]=pathKey;variables[key]=pathKey;const varName=key.slice(1);if(typeof variables[varName]==="undefined"){variables[varName]=pathKey}}}));return variables}static fillVariables(varPath,fullPath){if(varPath.indexOf("*")<0&&varPath.indexOf("$")<0){return varPath}const keys=getPathKeys(varPath);const pathKeys=getPathKeys(fullPath);const merged=keys.map(((key,index)=>{if(key===pathKeys[index]||index>=pathKeys.length){return key}else if(typeof key==="string"&&(key==="*"||key[0]==="$")){return pathKeys[index]}else{throw new Error(`Path "${fullPath}" cannot be used to fill variables of path "${varPath}" because they do not match`)}}));let mergedPath="";merged.forEach((key=>{if(typeof key==="number"){mergedPath+=`[${key}]`}else{if(mergedPath.length>0){mergedPath+="/"}mergedPath+=key}}));return mergedPath}static fillVariables2(varPath,vars){if(typeof vars!=="object"||Object.keys(vars).length===0){return varPath}const pathKeys=getPathKeys(varPath);let n=0;const targetPath=pathKeys.reduce(((path,key)=>{if(typeof key==="string"&&(key==="*"||key.startsWith("$"))){return PathInfo.getChildPath(path,vars[n++])}else{return PathInfo.getChildPath(path,key)}}),"");return targetPath}equals(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path===other.path){return true}if(this.keys.length!==other.keys.length){return false}return this.keys.every(((key,index)=>{const otherKey=other.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isAncestorOf(descendantPath){const descendant=descendantPath instanceof PathInfo?descendantPath:new PathInfo(descendantPath);if(descendant.path===""||this.path===descendant.path){return false}if(this.path===""){return true}if(this.keys.length>=descendant.keys.length){return false}return this.keys.every(((key,index)=>{const otherKey=descendant.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isDescendantOf(ancestorPath){const ancestor=ancestorPath instanceof PathInfo?ancestorPath:new PathInfo(ancestorPath);if(this.path===""||this.path===ancestor.path){return false}if(ancestorPath===""){return true}if(ancestor.keys.length>=this.keys.length){return false}return ancestor.keys.every(((key,index)=>{const otherKey=this.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isOnTrailOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path.length===0||other.path.length===0){return true}if(this.path===other.path){return true}return this.pathKeys.every(((key,index)=>{if(index>=other.keys.length){return true}const otherKey=other.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isChildOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path===""){return false}return this.parent.equals(other)}isParentOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(other.path===""){return false}return this.equals(other.parent)}}exports.PathInfo=PathInfo},{}],43:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.PathReference=void 0;class PathReference{constructor(path){this.path=path}}exports.PathReference=PathReference},{}],44:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default={nextTick(fn){setTimeout(fn,0)}}},{}],45:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SchemaDefinition=void 0;function parse(definition){let pos=0;function consumeSpaces(){let c;while(c=definition[pos],[" ","\r","\n","\t"].includes(c)){pos++}}function consumeCharacter(c){if(definition[pos]!==c){throw new Error(`Unexpected character at position ${pos}. Expected: '${c}', found '${definition[pos]}'`)}pos++}function readProperty(){consumeSpaces();const prop={name:"",optional:false,wildcard:false};let c;while(c=definition[pos],c==="_"||c==="$"||c>="a"&&c<="z"||c>="A"&&c<="Z"||prop.name.length>0&&c>="0"&&c<="9"||prop.name.length===0&&c==="*"){prop.name+=c;pos++}if(prop.name.length===0){throw new Error(`Property name expected at position ${pos}, found: ${definition.slice(pos,pos+10)}..`)}if(definition[pos]==="?"){prop.optional=true;pos++}if(prop.name==="*"||prop.name[0]==="$"){prop.optional=true;prop.wildcard=true}consumeSpaces();consumeCharacter(":");return prop}function readType(){consumeSpaces();let type={typeOf:"any"},c;let name="";while(c=definition[pos],c>="a"&&c<="z"||c>="A"&&c<="Z"){name+=c;pos++}if(name.length===0){if(definition[pos]==="*"){consumeCharacter("*");type.typeOf="any"}else if(["'",'"',"`"].includes(definition[pos])){type.typeOf="string";type.value="";const quote=definition[pos];consumeCharacter(quote);while(c=definition[pos],c&&c!==quote){type.value+=c;pos++}consumeCharacter(quote)}else if(definition[pos]>="0"&&definition[pos]<="9"){type.typeOf="number";let nr="";while(c=definition[pos],c==="."||c==="n"||c>="0"&&c<="9"){nr+=c;pos++}if(nr.endsWith("n")){type.value=BigInt(nr)}else if(nr.includes(".")){type.value=parseFloat(nr)}else{type.value=parseInt(nr)}}else if(definition[pos]==="{"){consumeCharacter("{");type.typeOf="object";type.instanceOf=Object;type.children=[];while(true){const prop=readProperty();const types=readTypes();type.children.push({name:prop.name,optional:prop.optional,wildcard:prop.wildcard,types:types});consumeSpaces();if(definition[pos]==="}"){break}consumeCharacter(",")}consumeCharacter("}")}else if(definition[pos]==="/"){consumeCharacter("/");let pattern="",flags="";while(c=definition[pos],c!=="/"||pattern.endsWith("\\")){pattern+=c;pos++}consumeCharacter("/");while(c=definition[pos],["g","i","m","s","u","y","d"].includes(c)){flags+=c;pos++}type.typeOf="string";type.matches=new RegExp(pattern,flags)}else{throw new Error(`Expected a type definition at position ${pos}, found character '${definition[pos]}'`)}}else if(["string","number","boolean","bigint","undefined","String","Number","Boolean","BigInt"].includes(name)){type.typeOf=name.toLowerCase()}else if(name==="Object"||name==="object"){type.typeOf="object";type.instanceOf=Object}else if(name==="Date"){type.typeOf="object";type.instanceOf=Date}else if(name==="Binary"||name==="binary"){type.typeOf="object";type.instanceOf=ArrayBuffer}else if(name==="any"){type.typeOf="any"}else if(name==="null"){type.typeOf="object";type.value=null}else if(name==="Array"){consumeCharacter("<");type.typeOf="object";type.instanceOf=Array;type.genericTypes=readTypes();consumeCharacter(">")}else if(["true","false"].includes(name)){type.typeOf="boolean";type.value=name==="true"}else{throw new Error(`Unknown type at position ${pos}: "${type}"`)}consumeSpaces();while(definition[pos]==="["){consumeCharacter("[");consumeCharacter("]");type={typeOf:"object",instanceOf:Array,genericTypes:[type]}}return type}function readTypes(){consumeSpaces();const types=[readType()];while(definition[pos]==="|"){consumeCharacter("|");types.push(readType());consumeSpaces()}return types}return readType()}function checkObject(path,properties,obj,partial){const invalidProperties=properties.find((prop=>prop.name==="*"||prop.name[0]==="$"))?[]:Object.keys(obj).filter((key=>![null,undefined].includes(obj[key])&&!properties.find((prop=>prop.name===key))));if(invalidProperties.length>0){return{ok:false,reason:`Object at path "${path}" cannot have propert${invalidProperties.length===1?"y":"ies"} ${invalidProperties.map((p=>`"${p}"`)).join(", ")}`}}function checkProperty(property){const hasValue=![null,undefined].includes(obj[property.name]);if(!property.optional&&(partial?obj[property.name]===null:!hasValue)){return{ok:false,reason:`Property at path "${path}/${property.name}" is not optional`}}if(hasValue&&property.types.length===1){return checkType(`${path}/${property.name}`,property.types[0],obj[property.name],false)}if(hasValue&&!property.types.some((type=>checkType(`${path}/${property.name}`,type,obj[property.name],false).ok))){return{ok:false,reason:`Property at path "${path}/${property.name}" does not match any of ${property.types.length} allowed types`}}return{ok:true}}const namedProperties=properties.filter((prop=>!prop.wildcard));const failedProperty=namedProperties.find((prop=>!checkProperty(prop).ok));if(failedProperty){const reason=checkProperty(failedProperty).reason;return{ok:false,reason:reason}}const wildcardProperty=properties.find((prop=>prop.wildcard));if(!wildcardProperty){return{ok:true}}const wildcardChildKeys=Object.keys(obj).filter((key=>!namedProperties.find((prop=>prop.name===key))));let result={ok:true};for(let i=0;i0){if(type.typeOf!=="object"){return{ok:false,reason:`path "${path}" must be typeof ${type.typeOf}`}}if(!type.children){return ok}const childKey=trailKeys[0];let property=type.children.find((prop=>prop.name===childKey));if(!property){property=type.children.find((prop=>prop.name==="*"||prop.name[0]==="$"))}if(!property){return{ok:false,reason:`Object at path "${path}" cannot have property "${childKey}"`}}if(property.optional&&value===null&&trailKeys.length===1){return ok}let result;property.types.some((type=>{const childPath=typeof childKey==="number"?`${path}[${childKey}]`:`${path}/${childKey}`;result=checkType(childPath,type,value,partial,trailKeys.slice(1));return result.ok}));return result}if(value===null){return ok}if(type.instanceOf===Object&&(typeof value!=="object"||value instanceof Array||value instanceof Date)){return{ok:false,reason:`path "${path}" must be an object collection`}}if(type.instanceOf&&(typeof value!=="object"||value.constructor!==type.instanceOf)){return{ok:false,reason:`path "${path}" must be an instance of ${type.instanceOf.name}`}}if("value"in type&&value!==type.value){return{ok:false,reason:`path "${path}" must be value: ${type.value}`}}if(typeof value!==type.typeOf){return{ok:false,reason:`path "${path}" must be typeof ${type.typeOf}`}}if(type.instanceOf===Array&&type.genericTypes&&!value.every((v=>type.genericTypes.some((t=>checkType(path,t,v,false).ok))))){return{ok:false,reason:`every array value of path "${path}" must match one of the specified types`}}if(type.typeOf==="object"&&type.children){return checkObject(path,type.children,value,partial)}if(type.matches&&!type.matches.test(value)){return{ok:false,reason:`path "${path}" must match regular expression /${type.matches.source}/${type.matches.flags}`}}return ok}function getConstructorType(val){switch(val){case String:return"string";case Number:return"number";case Boolean:return"boolean";case Date:return"Date";case BigInt:return"bigint";case Array:throw new Error("Schema error: Array cannot be used without a type. Use string[] or Array instead");default:throw new Error(`Schema error: unknown type used: ${val.name}`)}}class SchemaDefinition{constructor(definition){this.source=definition;if(typeof definition==="object"){const toTS=obj=>"{"+Object.keys(obj).map((key=>{let val=obj[key];if(val===undefined){val="undefined"}else if(val instanceof RegExp){val=`/${val.source}/${val.flags}`}else if(typeof val==="object"){val=toTS(val)}else if(typeof val==="function"){val=getConstructorType(val)}else if(!["string","number","boolean","bigint"].includes(typeof val)){throw new Error(`Type definition for key "${key}" must be a string, number, boolean, bigint, object, regular expression, or one of these classes: String, Number, Boolean, Date, BigInt`)}return`${key}:${val}`})).join(",")+"}";this.text=toTS(definition)}else if(typeof definition==="string"){this.text=definition}else{throw new Error("Type definiton must be a string or an object")}this.type=parse(this.text)}check(path,value,partial,trailKeys){return checkType(path,this.type,value,partial,trailKeys)}}exports.SchemaDefinition=SchemaDefinition},{}],46:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SimpleCache=void 0;const utils_1=require("./utils");const calculateExpiryTime=expirySeconds=>expirySeconds>0?Date.now()+expirySeconds*1e3:Infinity;class SimpleCache{constructor(options){var _a;this.enabled=true;if(typeof options==="number"){options={expirySeconds:options}}options.cloneValues=options.cloneValues!==false;if(typeof options.expirySeconds!=="number"&&typeof options.maxEntries!=="number"){throw new Error("Either expirySeconds or maxEntries must be specified")}this.options=options;this.cache=new Map;const interval=setInterval((()=>{this.cleanUp()}),60*1e3);(_a=interval.unref)===null||_a===void 0?void 0:_a.call(interval)}get size(){return this.cache.size}has(key){if(!this.enabled){return false}return this.cache.has(key)}get(key){if(!this.enabled){return null}const entry=this.cache.get(key);if(!entry){return null}entry.expires=calculateExpiryTime(this.options.expirySeconds);entry.accessed=Date.now();return this.options.cloneValues?(0,utils_1.cloneObject)(entry.value):entry.value}set(key,value){if(this.options.maxEntries>0&&this.cache.size>=this.options.maxEntries&&!this.cache.has(key)){let oldest=null;const now=Date.now();for(const[key,entry]of this.cache.entries()){if(entry.expires<=now){this.cache.delete(key);oldest=null;break}if(!oldest||entry.accessed{if(entry.expires<=now){this.cache.delete(key)}}))}}exports.SimpleCache=SimpleCache},{"./utils":52}],47:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Colorize=exports.SetColorsEnabled=exports.ColorsSupported=exports.ColorStyle=void 0;const process_1=require("./process");const FontCode={bold:1,dim:2,italic:3,underline:4,inverse:7,hidden:8,strikethrough:94};const ColorCode={black:30,red:31,green:32,yellow:33,blue:34,magenta:35,cyan:36,white:37,grey:90,brightRed:91};const BgColorCode={bgBlack:40,bgRed:41,bgGreen:42,bgYellow:43,bgBlue:44,bgMagenta:45,bgCyan:46,bgWhite:47,bgGrey:100,bgBrightRed:101};const ResetCode={all:0,color:39,background:49,bold:22,dim:22,italic:23,underline:24,inverse:27,hidden:28,strikethrough:29};var ColorStyle;(function(ColorStyle){ColorStyle["reset"]="reset";ColorStyle["bold"]="bold";ColorStyle["dim"]="dim";ColorStyle["italic"]="italic";ColorStyle["underline"]="underline";ColorStyle["inverse"]="inverse";ColorStyle["hidden"]="hidden";ColorStyle["strikethrough"]="strikethrough";ColorStyle["black"]="black";ColorStyle["red"]="red";ColorStyle["green"]="green";ColorStyle["yellow"]="yellow";ColorStyle["blue"]="blue";ColorStyle["magenta"]="magenta";ColorStyle["cyan"]="cyan";ColorStyle["grey"]="grey";ColorStyle["bgBlack"]="bgBlack";ColorStyle["bgRed"]="bgRed";ColorStyle["bgGreen"]="bgGreen";ColorStyle["bgYellow"]="bgYellow";ColorStyle["bgBlue"]="bgBlue";ColorStyle["bgMagenta"]="bgMagenta";ColorStyle["bgCyan"]="bgCyan";ColorStyle["bgWhite"]="bgWhite";ColorStyle["bgGrey"]="bgGrey"})(ColorStyle=exports.ColorStyle||(exports.ColorStyle={}));function ColorsSupported(){if(typeof process_1.default==="undefined"||!process_1.default.stdout||!process_1.default.env||!process_1.default.platform||process_1.default.platform==="browser"){return false}if(process_1.default.platform==="win32"){return true}const env=process_1.default.env;if(env.COLORTERM){return true}if(env.TERM==="dumb"){return false}if(env.CI||env.TEAMCITY_VERSION){return!!env.TRAVIS}if(["iTerm.app","HyperTerm","Hyper","MacTerm","Apple_Terminal","vscode"].includes(env.TERM_PROGRAM)){return true}if(/^xterm-256|^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(env.TERM)){return true}return false}exports.ColorsSupported=ColorsSupported;let _enabled=ColorsSupported();function SetColorsEnabled(enabled){_enabled=ColorsSupported()&&enabled}exports.SetColorsEnabled=SetColorsEnabled;function Colorize(str,style){if(!_enabled){return str}const openCodes=[],closeCodes=[];const addStyle=style=>{if(style===ColorStyle.reset){openCodes.push(ResetCode.all)}else if(style in FontCode){openCodes.push(FontCode[style]);closeCodes.push(ResetCode[style])}else if(style in ColorCode){openCodes.push(ColorCode[style]);closeCodes.push(ResetCode.color)}else if(style in BgColorCode){openCodes.push(BgColorCode[style]);closeCodes.push(ResetCode.background)}};if(style instanceof Array){style.forEach(addStyle)}else{addStyle(style)}const open=openCodes.map((code=>"["+code+"m")).join("");const close=closeCodes.map((code=>"["+code+"m")).join("");return str.split("\n").map((line=>open+line+close)).join("\n")}exports.Colorize=Colorize;String.prototype.colorize=function(style){return Colorize(this,style)}},{"./process":44}],48:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SimpleEventEmitter=void 0;function runCallback(callback,data){try{callback(data)}catch(err){console.error("Error in subscription callback",err)}}class SimpleEventEmitter{constructor(){this._subscriptions=[];this._oneTimeEvents=new Map}on(event,callback){if(this._oneTimeEvents.has(event)){return runCallback(callback,this._oneTimeEvents.get(event))}this._subscriptions.push({event:event,callback:callback,once:false});return this}off(event,callback){this._subscriptions=this._subscriptions.filter((s=>s.event!==event||callback&&s.callback!==callback));return this}once(event,callback){return new Promise((resolve=>{const ourCallback=data=>{resolve(data);callback===null||callback===void 0?void 0:callback(data)};if(this._oneTimeEvents.has(event)){runCallback(ourCallback,this._oneTimeEvents.get(event))}else{this._subscriptions.push({event:event,callback:ourCallback,once:true})}}))}emit(event,data){if(this._oneTimeEvents.has(event)){throw new Error(`Event "${event}" was supposed to be emitted only once`)}for(let i=0;i{if(this._internal.state==="active"){return resolve()}else if(this._internal.state==="canceled"&&!callback){return reject(new Error(this._internal.cancelReason))}const noop=()=>{};this._internal.activatePromises.push({resolve:resolve,reject:callback?noop:reject})}))}_setActivationState(activated,cancelReason){this._internal.cancelReason=cancelReason;this._internal.state=activated?"active":"canceled";while(this._internal.activatePromises.length>0){const p=this._internal.activatePromises.shift();if(activated){p.callback&&p.callback(true);p.resolve&&p.resolve()}else{p.callback&&p.callback(false,cancelReason);p.reject&&p.reject(cancelReason)}}}}exports.EventSubscription=EventSubscription;class EventPublisher{constructor(publish,start,cancel){this.publish=publish;this.start=start;this.cancel=cancel}}exports.EventPublisher=EventPublisher;class EventStream{constructor(eventPublisherCallback){const subscribers=[];let noMoreSubscribersCallback;let activationState;const _stoppedState="stopped (no more subscribers)";this.subscribe=(callback,activationCallback)=>{if(typeof callback!=="function"){throw new TypeError("callback must be a function")}else if(activationState===_stoppedState){throw new Error("stream can't be used anymore because all subscribers were stopped")}const sub={callback:callback,activationCallback:function(activated,cancelReason){activationCallback&&activationCallback(activated,cancelReason);this.subscription._setActivationState(activated,cancelReason)},subscription:new EventSubscription((function stop(){subscribers.splice(subscribers.indexOf(this),1);return checkActiveSubscribers()}))};subscribers.push(sub);if(typeof activationState!=="undefined"){if(activationState===true){activationCallback&&activationCallback(true);sub.subscription._setActivationState(true)}else if(typeof activationState==="string"){activationCallback&&activationCallback(false,activationState);sub.subscription._setActivationState(false,activationState)}}return sub.subscription};const checkActiveSubscribers=()=>{let ret;if(subscribers.length===0){ret=noMoreSubscribersCallback&&noMoreSubscribersCallback();activationState=_stoppedState}return Promise.resolve(ret)};this.unsubscribe=callback=>{const remove=callback?subscribers.filter((sub=>sub.callback===callback)):subscribers;remove.forEach((sub=>{const i=subscribers.indexOf(sub);subscribers.splice(i,1)}));checkActiveSubscribers()};this.stop=()=>{subscribers.splice(0);checkActiveSubscribers()};const publish=val=>{subscribers.forEach((sub=>{try{sub.callback(val)}catch(err){console.error(`Error running subscriber callback: ${err.message}`)}}));if(subscribers.length===0){checkActiveSubscribers()}return subscribers.length>0};const start=allSubscriptionsStoppedCallback=>{activationState=true;noMoreSubscribersCallback=allSubscriptionsStoppedCallback;subscribers.forEach((sub=>{sub.activationCallback&&sub.activationCallback(true)}))};const cancel=reason=>{activationState=reason;subscribers.forEach((sub=>{sub.activationCallback&&sub.activationCallback(false,reason||new Error("unknown reason"))}));subscribers.splice(0)};const publisher=new EventPublisher(publish,start,cancel);eventPublisherCallback(publisher)}}exports.EventStream=EventStream},{}],50:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.deserialize2=exports.serialize2=exports.serialize=exports.detectSerializeVersion=exports.deserialize=void 0;const path_reference_1=require("./path-reference");const utils_1=require("./utils");const ascii85_1=require("./ascii85");const path_info_1=require("./path-info");const partial_array_1=require("./partial-array");const deserialize=data=>{if(data.map===null||typeof data.map==="undefined"){if(typeof data.val==="undefined"){throw new Error("serialized value must have a val property")}return data.val}const deserializeValue=(type,val)=>{if(type==="date"){return new Date(val)}else if(type==="binary"){return ascii85_1.ascii85.decode(val)}else if(type==="reference"){return new path_reference_1.PathReference(val)}else if(type==="regexp"){return new RegExp(val.pattern,val.flags)}else if(type==="array"){return new partial_array_1.PartialArray(val)}else if(type==="bigint"){return BigInt(val)}return val};if(typeof data.map==="string"){return deserializeValue(data.map,data.val)}Object.keys(data.map).forEach((path=>{const type=data.map[path];const keys=path_info_1.PathInfo.getPathKeys(path);let parent=data;let key="val";let val=data.val;keys.forEach((k=>{key=k;parent=val;val=val[key]}));parent[key]=deserializeValue(type,val)}));return data.val};exports.deserialize=deserialize;const detectSerializeVersion=data=>{if(typeof data!=="object"||data===null){return 2}if("map"in data&&"val"in data){return 1}else if("val"in data){if(Object.keys(data).length>1){return 2}return 1}return 2};exports.detectSerializeVersion=detectSerializeVersion;const serialize=obj=>{var _a;if(obj===null||typeof obj!=="object"||obj instanceof Date||obj instanceof ArrayBuffer||obj instanceof path_reference_1.PathReference||obj instanceof RegExp){const ser=(0,exports.serialize)({value:obj});return{map:(_a=ser.map)===null||_a===void 0?void 0:_a.value,val:ser.val.value}}obj=(0,utils_1.cloneObject)(obj);const process=(obj,mappings,prefix)=>{if(obj instanceof partial_array_1.PartialArray){mappings[prefix]="array"}Object.keys(obj).forEach((key=>{const val=obj[key];const path=prefix.length===0?key:`${prefix}/${key}`;if(typeof val==="bigint"){obj[key]=val.toString();mappings[path]="bigint"}else if(val instanceof Date){obj[key]=val.toISOString();mappings[path]="date"}else if(val instanceof ArrayBuffer){obj[key]=ascii85_1.ascii85.encode(val);mappings[path]="binary"}else if(val instanceof path_reference_1.PathReference){obj[key]=val.path;mappings[path]="reference"}else if(val instanceof RegExp){obj[key]={pattern:val.source,flags:val.flags};mappings[path]="regexp"}else if(typeof val==="object"&&val!==null){process(val,mappings,path)}}))};const mappings={};process(obj,mappings,"");const serialized={val:obj};if(Object.keys(mappings).length>0){serialized.map=mappings}return serialized};exports.serialize=serialize;const serialize2=obj=>{const getSerializedValue=val=>{if(typeof val==="bigint"){return{".type":"bigint",".val":val.toString()}}else if(val instanceof Date){return{".type":"date",".val":val.toISOString()}}else if(val instanceof ArrayBuffer){return{".type":"binary",".val":ascii85_1.ascii85.encode(val)}}else if(val instanceof path_reference_1.PathReference){return{".type":"reference",".val":val.path}}else if(val instanceof RegExp){return{".type":"regexp",".val":`/${val.source}/${val.flags}`}}else if(typeof val==="object"&&val!==null){if(val instanceof Array){const copy=[];for(let i=0;i{if(typeof data!=="object"||data===null){return data}if(typeof data[".type"]==="undefined"){if(data instanceof Array){const copy=[];const arr=data;for(let i=0;i{const mkeys=path_info_1.PathInfo.getPathKeys(mpath);if(mkeys.length!==keys.length){return false}return mkeys.every(((mkey,index)=>{if(mkey==="*"||mkey[0]==="$"){return true}return mkey===keys[index]}))}));const mapping=mappings[mappedPath];return mapping}function map(mappings,path){const targetPath=path_info_1.PathInfo.get(path).parentPath;if(targetPath===null){return}return get(mappings,targetPath)}function mapDeep(mappings,entryPath){entryPath=entryPath.replace(/^\/|\/$/g,"");const pathInfo=path_info_1.PathInfo.get(entryPath);const startPath=pathInfo.parentPath;const keys=startPath?path_info_1.PathInfo.getPathKeys(startPath):[];const matches=Object.keys(mappings).reduce(((m,mpath)=>{const mkeys=path_info_1.PathInfo.getPathKeys(mpath);if(mkeys.length{if(index>=keys.length){return false}else if(mkey==="*"||mkey[0]==="$"||mkey===keys[index]){return true}else{isMatch=false;return false}}))}if(isMatch){const mapping=mappings[mpath];m.push({path:mpath,type:mapping})}return m}),[]);return matches}function process(db,mappings,path,obj,action){if(obj===null||typeof obj!=="object"){return obj}const keys=path_info_1.PathInfo.getPathKeys(path);const m=mapDeep(mappings,path);const changes=[];m.sort(((a,b)=>path_info_1.PathInfo.getPathKeys(a.path).length>path_info_1.PathInfo.getPathKeys(b.path).length?-1:1));m.forEach((mapping=>{const mkeys=path_info_1.PathInfo.getPathKeys(mapping.path);mkeys.push("*");const mTrailKeys=mkeys.slice(keys.length);if(mTrailKeys.length===0){const vars=path_info_1.PathInfo.extractVariables(mapping.path,path);const ref=new data_reference_1.DataReference(db,path,vars);if(action==="serialize"){obj=mapping.type.serialize(obj,ref)}else if(action==="deserialize"){const snap=new data_snapshot_1.DataSnapshot(ref,obj);obj=mapping.type.deserialize(snap)}return}const process=(parentPath,parent,keys)=>{if(obj===null||typeof obj!=="object"){return obj}const key=keys[0];let children=[];if(key==="*"||key[0]==="$"){if(parent instanceof Array){children=parent.map(((val,index)=>({key:index,val:val})))}else{children=Object.keys(parent).map((k=>({key:k,val:parent[k]})))}}else{const child=parent[key];if(typeof child==="object"){children.push({key:key,val:child})}}children.forEach((child=>{const childPath=path_info_1.PathInfo.getChildPath(parentPath,child.key);const vars=path_info_1.PathInfo.extractVariables(mapping.path,childPath);const ref=new data_reference_1.DataReference(db,childPath,vars);if(keys.length===1){if(action==="serialize"){changes.push({parent:parent,key:child.key,original:parent[child.key]});parent[child.key]=mapping.type.serialize(child.val,ref)}else if(action==="deserialize"){const snap=new data_snapshot_1.DataSnapshot(ref,child.val);parent[child.key]=mapping.type.deserialize(snap)}}else{process(childPath,child.val,keys.slice(1))}}))};process(path,obj,mTrailKeys)}));if(action==="serialize"){obj=(0,utils_1.cloneObject)(obj);if(changes.length>0){changes.forEach((change=>{change.parent[change.key]=change.original}))}}return obj}const _mappings=Symbol("mappings");class TypeMappings{constructor(db){this.db=db;this[_mappings]={}}get mappings(){return this[_mappings]}map(path){return map(this[_mappings],path)}bind(path,type,options={}){if(typeof path!=="string"){throw new TypeError("path must be a string")}if(typeof type!=="function"){throw new TypeError("constructor must be a function")}if(typeof options.serializer==="undefined"){}else if(typeof options.serializer==="string"){if(typeof type.prototype[options.serializer]==="function"){options.serializer=type.prototype[options.serializer]}else{throw new TypeError(`${type.name}.prototype.${options.serializer} is not a function, cannot use it as serializer`)}}else if(typeof options.serializer!=="function"){throw new TypeError(`serializer for class ${type.name} must be a function, or the name of a prototype method`)}if(typeof options.creator==="undefined"){if(typeof type.create==="function"){options.creator=type.create}}else if(typeof options.creator==="string"){if(typeof type[options.creator]==="function"){options.creator=type[options.creator]}else{throw new TypeError(`${type.name}.${options.creator} is not a function, cannot use it as creator`)}}else if(typeof options.creator!=="function"){throw new TypeError(`creator for class ${type.name} must be a function, or the name of a static method`)}path=path.replace(/^\/|\/$/g,"");this[_mappings][path]={db:this.db,type:type,creator:options.creator,serializer:options.serializer,deserialize(snap){let obj;if(this.creator){obj=this.creator.call(this.type,snap)}else{obj=new this.type(snap)}return obj},serialize(obj,ref){if(this.serializer){obj=this.serializer.call(obj,ref,obj)}else if(obj&&typeof obj.serialize==="function"){obj=obj.serialize(ref,obj)}return obj}}}serialize(path,obj){return process(this.db,this[_mappings],path,obj,"serialize")}deserialize(path,obj){return process(this.db,this[_mappings],path,obj,"deserialize")}}exports.TypeMappings=TypeMappings},{"./data-reference":34,"./data-snapshot":35,"./path-info":42,"./utils":52}],52:[function(require,module,exports){(function(Buffer){(function(){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.defer=exports.getChildValues=exports.getMutations=exports.compareValues=exports.ObjectDifferences=exports.valuesAreEqual=exports.cloneObject=exports.concatTypedArrays=exports.decodeString=exports.encodeString=exports.bytesToBigint=exports.bigintToBytes=exports.bytesToNumber=exports.numberToBytes=void 0;const path_reference_1=require("./path-reference");const process_1=require("./process");const partial_array_1=require("./partial-array");function numberToBytes(number){const bytes=new Uint8Array(8);const view=new DataView(bytes.buffer);view.setFloat64(0,number);return new Array(...bytes)}exports.numberToBytes=numberToBytes;function bytesToNumber(bytes){const length=Array.isArray(bytes)?bytes.length:bytes.byteLength;if(length!==8){throw new TypeError("must be 8 bytes")}const bin=new Uint8Array(bytes);const view=new DataView(bin.buffer);const nr=view.getFloat64(0);return nr}exports.bytesToNumber=bytesToNumber;const big={zero:BigInt(0),one:BigInt(1),two:BigInt(2),eight:BigInt(8),ff:BigInt(255)};function bigintToBytes(number){if(typeof number!=="bigint"){throw new Error("number must be a bigint")}const bytes=[];const negative=number>big.eight}while(number!==(negative?-big.one:big.zero));bytes.reverse();if(negative?bytes[0]<128:bytes[0]>=128){bytes.unshift(negative?255:0)}return bytes}exports.bigintToBytes=bigintToBytes;function bytesToBigint(bytes){const negative=bytes[0]>=128;let number=big.zero;for(let b of bytes){if(negative){b=~b&255}number=(number<128){if((code&55296)===55296){const nextCode=str.charCodeAt(i+1);if((nextCode&56320)!==56320){throw new Error("follow-up utf-16 character does not start with 0xDC00")}i++;const p1=code&1023;const p2=nextCode&1023;code=65536|p1<<10|p2}if(code<2048){const b1=192|code>>6&31;const b2=128|code&63;arr.push(b1,b2)}else if(code<65536){const b1=224|code>>12&15;const b2=128|code>>6&63;const b3=128|code&63;arr.push(b1,b2,b3)}else if(code<2097152){const b1=240|code>>18&7;const b2=128|code>>12&63;const b3=128|code>>6&63;const b4=128|code&63;arr.push(b1,b2,b3,b4)}else{throw new Error(`Cannot convert character ${str.charAt(i)} (code ${code}) to utf-8`)}}else{arr.push(code<128?code:63)}}return new Uint8Array(arr)}}exports.encodeString=encodeString;function decodeString(buffer){if(typeof TextDecoder!=="undefined"){const decoder=new TextDecoder;if(buffer instanceof Uint8Array){return decoder.decode(buffer)}const buf=Uint8Array.from(buffer);return decoder.decode(buf)}else if(typeof Buffer==="function"){if(buffer instanceof Array){buffer=Uint8Array.from(buffer)}if(!(buffer instanceof Buffer)&&"buffer"in buffer&&buffer.buffer instanceof ArrayBuffer){const typedArray=buffer;buffer=Buffer.from(typedArray.buffer,typedArray.byteOffset,typedArray.byteLength)}if(!(buffer instanceof Buffer)){throw new Error("Unsupported buffer argument")}return buffer.toString("utf-8")}else{if(!(buffer instanceof Uint8Array)&&"buffer"in buffer&&buffer["buffer"]instanceof ArrayBuffer){const typedArray=buffer;buffer=new Uint8Array(typedArray.buffer,typedArray.byteOffset,typedArray.byteLength)}if(buffer instanceof Buffer||buffer instanceof Array||buffer instanceof Uint8Array){let str="";for(let i=0;i128){if((code&240)===240){const b1=code,b2=buffer[i+1],b3=buffer[i+2],b4=buffer[i+3];code=(b1&7)<<18|(b2&63)<<12|(b3&63)<<6|b4&63;i+=3}else if((code&224)===224){const b1=code,b2=buffer[i+1],b3=buffer[i+2];code=(b1&15)<<12|(b2&63)<<6|b3&63;i+=2}else if((code&192)===192){const b1=code,b2=buffer[i+1];code=(b1&31)<<6|b2&63;i++}else{throw new Error("invalid utf-8 data")}}if(code>=65536){code^=65536;const p1=55296|code>>10;const p2=56320|code&1023;str+=String.fromCharCode(p1);str+=String.fromCharCode(p2)}else{str+=String.fromCharCode(code)}}return str}else{throw new Error("Unsupported buffer argument")}}}exports.decodeString=decodeString;function concatTypedArrays(a,b){const c=new a.constructor(a.length+b.length);c.set(a);c.set(b,a.length);return c}exports.concatTypedArrays=concatTypedArrays;function cloneObject(original,stack){var _a;if(((_a=original===null||original===void 0?void 0:original.constructor)===null||_a===void 0?void 0:_a.name)==="DataSnapshot"){throw new TypeError(`Object to clone is a DataSnapshot (path "${original.ref.path}")`)}const checkAndFixTypedArray=obj=>{if(obj!==null&&typeof obj==="object"&&typeof obj.constructor==="function"&&typeof obj.constructor.name==="string"&&["Buffer","Uint8Array","Int8Array","Uint16Array","Int16Array","Uint32Array","Int32Array","BigUint64Array","BigInt64Array"].includes(obj.constructor.name)){obj=obj.buffer.slice(obj.byteOffset,obj.byteOffset+obj.byteLength)}return obj};original=checkAndFixTypedArray(original);if(typeof original!=="object"||original===null||original instanceof Date||original instanceof ArrayBuffer||original instanceof path_reference_1.PathReference||original instanceof RegExp){return original}const cloneValue=val=>{if(stack.indexOf(val)>=0){throw new ReferenceError("object contains a circular reference")}val=checkAndFixTypedArray(val);if(val===null||val instanceof Date||val instanceof ArrayBuffer||val instanceof path_reference_1.PathReference||val instanceof RegExp){return val}else if(typeof val==="object"){stack.push(val);val=cloneObject(val,stack);stack.pop();return val}else{return val}};if(typeof stack==="undefined"){stack=[original]}const clone=original instanceof Array?[]:original instanceof partial_array_1.PartialArray?new partial_array_1.PartialArray:{};Object.keys(original).forEach((key=>{const val=original[key];if(typeof val==="function"){return}clone[key]=cloneValue(val)}));return clone}exports.cloneObject=cloneObject;const isTypedArray=val=>typeof val==="object"&&["ArrayBuffer","Buffer","Uint8Array","Uint16Array","Uint32Array","Int8Array","Int16Array","Int32Array"].includes(val.constructor.name);function valuesAreEqual(val1,val2){if(val1===val2){return true}if(typeof val1!==typeof val2){return false}if(typeof val1==="object"||typeof val2==="object"){if(val1===null||val2===null){return false}if(val1 instanceof path_reference_1.PathReference||val2 instanceof path_reference_1.PathReference){return val1 instanceof path_reference_1.PathReference&&val2 instanceof path_reference_1.PathReference&&val1.path===val2.path}if(val1 instanceof Date||val2 instanceof Date){return val1 instanceof Date&&val2 instanceof Date&&val1.getTime()===val2.getTime()}if(val1 instanceof Array||val2 instanceof Array){return val1 instanceof Array&&val2 instanceof Array&&val1.length===val2.length&&val1.every(((item,i)=>valuesAreEqual(val1[i],val2[i])))}if(isTypedArray(val1)||isTypedArray(val2)){if(!isTypedArray(val1)||!isTypedArray(val2)||val1.byteLength===val2.byteLength){return false}const typed1=val1 instanceof ArrayBuffer?new Uint8Array(val1):new Uint8Array(val1.buffer,val1.byteOffset,val1.byteLength),typed2=val2 instanceof ArrayBuffer?new Uint8Array(val2):new Uint8Array(val2.buffer,val2.byteOffset,val2.byteLength);return typed1.every(((val,i)=>typed2[i]===val))}const keys1=Object.keys(val1),keys2=Object.keys(val2);return keys1.length===keys2.length&&keys1.every((key=>keys2.includes(key)))&&keys1.every((key=>valuesAreEqual(val1[key],val2[key])))}return false}exports.valuesAreEqual=valuesAreEqual;class ObjectDifferences{constructor(added,removed,changed){this.added=added;this.removed=removed;this.changed=changed}forChild(key){if(this.added.includes(key)){return"added"}if(this.removed.includes(key)){return"removed"}const changed=this.changed.find((ch=>ch.key===key));return changed?changed.change:"identical"}}exports.ObjectDifferences=ObjectDifferences;function compareValues(oldVal,newVal,sortedResults=false){const voids=[undefined,null];if(oldVal===newVal){return"identical"}else if(voids.indexOf(oldVal)>=0&&voids.indexOf(newVal)<0){return"added"}else if(voids.indexOf(oldVal)<0&&voids.indexOf(newVal)>=0){return"removed"}else if(typeof oldVal!==typeof newVal){return"changed"}else if(isTypedArray(oldVal)||isTypedArray(newVal)){if(!isTypedArray(oldVal)||!isTypedArray(newVal)){return"changed"}const typed1=oldVal instanceof Uint8Array?oldVal:oldVal instanceof ArrayBuffer?new Uint8Array(oldVal):new Uint8Array(oldVal.buffer,oldVal.byteOffset,oldVal.byteLength);const typed2=newVal instanceof Uint8Array?newVal:newVal instanceof ArrayBuffer?new Uint8Array(newVal):new Uint8Array(newVal.buffer,newVal.byteOffset,newVal.byteLength);return typed1.byteLength===typed2.byteLength&&typed1.every(((val,i)=>typed2[i]===val))?"identical":"changed"}else if(oldVal instanceof Date||newVal instanceof Date){return oldVal instanceof Date&&newVal instanceof Date&&oldVal.getTime()===newVal.getTime()?"identical":"changed"}else if(oldVal instanceof path_reference_1.PathReference||newVal instanceof path_reference_1.PathReference){return oldVal instanceof path_reference_1.PathReference&&newVal instanceof path_reference_1.PathReference&&oldVal.path===newVal.path?"identical":"changed"}else if(typeof oldVal==="object"){const isArray=oldVal instanceof Array;const getKeys=obj=>{let keys=Object.keys(obj).filter((key=>!voids.includes(obj[key])));if(isArray){keys=keys.map((v=>parseInt(v)))}return keys};const oldKeys=getKeys(oldVal);const newKeys=getKeys(newVal);const removedKeys=oldKeys.filter((key=>!newKeys.includes(key)));const addedKeys=newKeys.filter((key=>!oldKeys.includes(key)));const changedKeys=newKeys.reduce(((changed,key)=>{if(oldKeys.includes(key)){const val1=oldVal[key];const val2=newVal[key];const c=compareValues(val1,val2);if(c!=="identical"){changed.push({key:key,change:c})}}return changed}),[]);if(addedKeys.length===0&&removedKeys.length===0&&changedKeys.length===0){return"identical"}else{return new ObjectDifferences(addedKeys,removedKeys,sortedResults?changedKeys.sort(((a,b)=>a.key{switch(compareResult){case"identical":return[];case"changed":return[{target:target,prev:prev,val:val}];case"added":return[{target:target,prev:null,val:val}];case"removed":return[{target:target,prev:prev,val:null}];default:{let changes=[];compareResult.added.forEach((key=>changes.push({target:target.concat(key),prev:null,val:val[key]})));compareResult.removed.forEach((key=>changes.push({target:target.concat(key),prev:prev[key],val:null})));compareResult.changed.forEach((item=>{const childChanges=process(target.concat(item.key),item.change,prev[item.key],val[item.key]);changes=changes.concat(childChanges)}));return changes}}};const compareResult=compareValues(oldVal,newVal,sortedResults);return process([],compareResult,oldVal,newVal)}exports.getMutations=getMutations;function getChildValues(childKey,oldValue,newValue){oldValue=oldValue===null?null:oldValue[childKey];if(typeof oldValue==="undefined"){oldValue=null}newValue=newValue===null?null:newValue[childKey];if(typeof newValue==="undefined"){newValue=null}return{oldValue:oldValue,newValue:newValue}}exports.getChildValues=getChildValues;function defer(fn){process_1.default.nextTick(fn)}exports.defer=defer}).call(this)}).call(this,require("buffer").Buffer)},{"./partial-array":41,"./path-reference":43,"./process":44,buffer:53}],53:[function(require,module,exports){},{}]},{},[5])(5)})); \ No newline at end of file diff --git a/dist/cjs/acebase-browser.js.map b/dist/cjs/acebase-browser.js.map index b6dc9a0..74e6ef3 100644 --- a/dist/cjs/acebase-browser.js.map +++ b/dist/cjs/acebase-browser.js.map @@ -1 +1 @@ -{"version":3,"file":"acebase-browser.js","sourceRoot":"","sources":["ts/acebase-browser.ts"],"names":[],"mappings":";;;AAAA,mDAAgE;AAChE,4DAAsE;AAGtE,MAAM,0BAA0B,GAAG;;;;;;;;6DAQ0B,CAAC;AAE9D,MAAa,cAAe,SAAQ,uBAAO;IACvC;;;;OAIG;IACH,YAAY,IAAY,EAAE,QAAoE;QAC1F,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE;YACtE,oDAAoD;YACpD,gDAAgD;YAChD,EAAE;YACF,iEAAiE;YACjE,qEAAqE;YACrE,+DAA+D;YAC/D,kDAAkD;YAClD,iFAAiF;YAEjF,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;SAC/C;QACD,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC;IAC7D,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,MAAc,EAAE,OAA0C,EAAE;QAC7E,OAAO,IAAA,oCAAuB,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;CACJ;AA/BD,wCA+BC"} \ No newline at end of file +{"version":3,"file":"acebase-browser.js","sourceRoot":"","sources":["../../src/acebase-browser.ts"],"names":[],"mappings":";;;AAAA,mDAAgE;AAChE,4DAAsE;AAGtE,MAAM,0BAA0B,GAAG;;;;;;;;6DAQ0B,CAAC;AAE9D,MAAa,cAAe,SAAQ,uBAAO;IACvC;;;;OAIG;IACH,YAAY,IAAY,EAAE,QAAoE;QAC1F,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE;YACtE,oDAAoD;YACpD,gDAAgD;YAChD,EAAE;YACF,iEAAiE;YACjE,qEAAqE;YACrE,+DAA+D;YAC/D,kDAAkD;YAClD,iFAAiF;YAEjF,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;SAC/C;QACD,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC;IAC7D,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,MAAc,EAAE,OAA0C,EAAE;QAC7E,OAAO,IAAA,oCAAuB,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;CACJ;AA/BD,wCA+BC"} \ No newline at end of file diff --git a/dist/cjs/acebase-local.js.map b/dist/cjs/acebase-local.js.map index 0eefa20..a36c0b0 100644 --- a/dist/cjs/acebase-local.js.map +++ b/dist/cjs/acebase-local.js.map @@ -1 +1 @@ -{"version":3,"file":"acebase-local.js","sourceRoot":"","sources":["ts/acebase-local.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"acebase-local.js","sourceRoot":"","sources":["../../src/acebase-local.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/api-local.js.map b/dist/cjs/api-local.js.map index c7ccf88..2f9d951 100644 --- a/dist/cjs/api-local.js.map +++ b/dist/cjs/api-local.js.map @@ -1 +1 @@ -{"version":3,"file":"api-local.js","sourceRoot":"","sources":["ts/api-local.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"api-local.js","sourceRoot":"","sources":["../../src/api-local.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/async-task-batch.js.map b/dist/cjs/async-task-batch.js.map index 770dbea..89367ac 100644 --- a/dist/cjs/async-task-batch.js.map +++ b/dist/cjs/async-task-batch.js.map @@ -1 +1 @@ -{"version":3,"file":"async-task-batch.js","sourceRoot":"","sources":["ts/async-task-batch.ts"],"names":[],"mappings":";;;AAAA,MAAa,cAAc;IASvB;;;;;;;OAOG;IACH,YAAmB,QAAQ,IAAI,EAAS,OAA2C;QAAhE,UAAK,GAAL,KAAK,CAAO;QAAS,YAAO,GAAP,OAAO,CAAoC;QAhB3E,UAAK,GAAG,CAAC,CAAC;QACV,cAAS,GAAG,EAAwD,CAAC;QACrE,YAAO,GAAG,CAAC,CAAC;QACZ,YAAO,GAAG,EAAW,CAAC;QAGtB,SAAI,GAAG,KAAK,CAAC;IAUkE,CAAC;IAEhF,KAAK,CAAC,OAAO,CAAC,IAAwB,EAAE,KAAa;;QACzD,IAAI;YACA,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;YAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;YAEf,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;gBACnD,WAAW;gBACX,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBACjB,MAAA,IAAI,CAAC,YAAY,qDAAG,IAAI,CAAC,OAAO,CAAC,CAAC;aACrC;iBACI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChC,0BAA0B;gBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;gBACpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;aACvC;SACJ;QACD,OAAO,GAAG,EAAE;YACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,MAAA,IAAI,CAAC,aAAa,qDAAG,GAAG,CAAC,CAAC;SAC7B;IACL,CAAC;IAED,GAAG,CAAC,IAAwB;;QACxB,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,+IAA+I,CAAC,CAAC;SACpK;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,MAAK,IAAI,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE;YAC1D,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAC7B;aACI;YACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;SACxC;IACL,CAAC;IAED;;OAEG;IACH,KAAK;QACD,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;SACvC;IACL,CAAC;IAED,KAAK,CAAC,MAAM;QACR,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YACnD,OAAO,IAAI,CAAC,OAAO,CAAC;SACvB;QACD,MAAM,IAAI,OAAO,CAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;YAC5B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;CACJ;AA5ED,wCA4EC"} \ No newline at end of file +{"version":3,"file":"async-task-batch.js","sourceRoot":"","sources":["../../src/async-task-batch.ts"],"names":[],"mappings":";;;AAAA,MAAa,cAAc;IASvB;;;;;;;OAOG;IACH,YAAmB,QAAQ,IAAI,EAAS,OAA2C;QAAhE,UAAK,GAAL,KAAK,CAAO;QAAS,YAAO,GAAP,OAAO,CAAoC;QAhB3E,UAAK,GAAG,CAAC,CAAC;QACV,cAAS,GAAG,EAAwD,CAAC;QACrE,YAAO,GAAG,CAAC,CAAC;QACZ,YAAO,GAAG,EAAW,CAAC;QAGtB,SAAI,GAAG,KAAK,CAAC;IAUkE,CAAC;IAEhF,KAAK,CAAC,OAAO,CAAC,IAAwB,EAAE,KAAa;;QACzD,IAAI;YACA,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;YAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;YAEf,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;gBACnD,WAAW;gBACX,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBACjB,MAAA,IAAI,CAAC,YAAY,qDAAG,IAAI,CAAC,OAAO,CAAC,CAAC;aACrC;iBACI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChC,0BAA0B;gBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;gBACpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;aACvC;SACJ;QACD,OAAO,GAAG,EAAE;YACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,MAAA,IAAI,CAAC,aAAa,qDAAG,GAAG,CAAC,CAAC;SAC7B;IACL,CAAC;IAED,GAAG,CAAC,IAAwB;;QACxB,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,+IAA+I,CAAC,CAAC;SACpK;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,MAAK,IAAI,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE;YAC1D,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAC7B;aACI;YACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;SACxC;IACL,CAAC;IAED;;OAEG;IACH,KAAK;QACD,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;SACvC;IACL,CAAC;IAED,KAAK,CAAC,MAAM;QACR,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YACnD,OAAO,IAAI,CAAC,OAAO,CAAC;SACvB;QACD,MAAM,IAAI,OAAO,CAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;YAC5B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;CACJ;AA5ED,wCA4EC"} \ No newline at end of file diff --git a/dist/cjs/binary.js.map b/dist/cjs/binary.js.map index f56940b..97973a7 100644 --- a/dist/cjs/binary.js.map +++ b/dist/cjs/binary.js.map @@ -1 +1 @@ -{"version":3,"file":"binary.js","sourceRoot":"","sources":["ts/binary.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"binary.js","sourceRoot":"","sources":["../../src/binary.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/browser.js.map b/dist/cjs/browser.js.map index 75c1328..909e186 100644 --- a/dist/cjs/browser.js.map +++ b/dist/cjs/browser.js.map @@ -1 +1 @@ -{"version":3,"file":"browser.js","sourceRoot":"","sources":["ts/browser.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;EAiBE;;;AAEF,+CAG0D;AAgCtD,8FAnCK,4BAAa,OAmCL;AADb,6FAlCoB,2BAAY,OAkCpB;AAKZ,kGAvCkC,gCAAiB,OAuClC;AACjB,8FAxCqD,4BAAa,OAwCrD;AACb,6FAzCoE,2BAAY,OAyCpE;AASZ,mFAlDkF,iBAAE,OAkDlF;AACF,4FAnDsF,0BAAW,OAmDtF;AAfX,mGAnCA,iCAAkB,OAmCA;AAalB,iGAhDoB,+BAAgB,OAgDpB;AAZhB,oGApCsC,kCAAmB,OAoCtC;AACnB,4FArC2D,0BAAW,OAqC3D;AAcX,6FAjDmB,2BAAY,OAiDnB;AAhDhB,mDAAuD;AACvD,uDAAmD;AAoD7B,wFApDb,gCAAc,OAoDM;AAnD7B,6CAAyG;AAEzG,MAAM,OAAO,GAAG;IACZ,OAAO,EAAE,gCAAc;IACvB,oBAAoB,EAApB,oCAAoB;IACpB,aAAa,EAAb,4BAAa;IACb,YAAY,EAAZ,2BAAY;IACZ,iBAAiB,EAAjB,gCAAiB;IACjB,aAAa,EAAb,4BAAa;IACb,YAAY,EAAZ,2BAAY;IACZ,qBAAqB,EAArB,8BAAqB;IACrB,wBAAwB,EAAxB,iCAAwB;IACxB,oBAAoB,EAApB,6BAAoB;IACpB,EAAE,EAAF,iBAAE;IACF,WAAW,EAAX,0BAAW;IACX,kBAAkB,EAAlB,iCAAkB;CACrB,CAAC;AAEF,oCAAoC;AACnC,MAAc,CAAC,OAAO,GAAG,OAAO,CAAC;AAClC,iDAAiD;AAChD,MAAc,CAAC,OAAO,GAAG,gCAAc,CAAC;AAEzC,qCAAqC;AACrC,kBAAe,OAAO,CAAC;AA8BvB,iDAIyB;AAHrB,qHAAA,oBAAoB,OAAA;AACpB,qHAAA,oBAAoB,OAAA;AACpB,yHAAA,wBAAwB,OAAA;AAG5B,2CAA0D;AAAjD,gHAAA,sBAAsB,OAAA;AAC/B,2CAAyD;AAAhD,+GAAA,qBAAqB,OAAA;AAC9B,yCAAuD;AAA9C,6GAAA,oBAAoB,OAAA;AAE7B,2CAM0B;AALtB,kHAAA,wBAAwB,OAAA;AACxB,+GAAA,qBAAqB,OAAA;AACrB,8GAAA,oBAAoB,OAAA;AACpB,4GAAA,kBAAkB,OAAA;AAClB,oHAAA,0BAA0B,OAAA;AAG9B,qCAKmB;AAJf,0GAAA,eAAe,OAAA;AAGf,gHAAA,qBAAqB,OAAA"} \ No newline at end of file +{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;EAiBE;;;AAEF,+CAG0D;AAgCtD,8FAnCK,4BAAa,OAmCL;AADb,6FAlCoB,2BAAY,OAkCpB;AAKZ,kGAvCkC,gCAAiB,OAuClC;AACjB,8FAxCqD,4BAAa,OAwCrD;AACb,6FAzCoE,2BAAY,OAyCpE;AASZ,mFAlDkF,iBAAE,OAkDlF;AACF,4FAnDsF,0BAAW,OAmDtF;AAfX,mGAnCA,iCAAkB,OAmCA;AAalB,iGAhDoB,+BAAgB,OAgDpB;AAZhB,oGApCsC,kCAAmB,OAoCtC;AACnB,4FArC2D,0BAAW,OAqC3D;AAcX,6FAjDmB,2BAAY,OAiDnB;AAhDhB,mDAAuD;AACvD,uDAAmD;AAoD7B,wFApDb,gCAAc,OAoDM;AAnD7B,6CAAyG;AAEzG,MAAM,OAAO,GAAG;IACZ,OAAO,EAAE,gCAAc;IACvB,oBAAoB,EAApB,oCAAoB;IACpB,aAAa,EAAb,4BAAa;IACb,YAAY,EAAZ,2BAAY;IACZ,iBAAiB,EAAjB,gCAAiB;IACjB,aAAa,EAAb,4BAAa;IACb,YAAY,EAAZ,2BAAY;IACZ,qBAAqB,EAArB,8BAAqB;IACrB,wBAAwB,EAAxB,iCAAwB;IACxB,oBAAoB,EAApB,6BAAoB;IACpB,EAAE,EAAF,iBAAE;IACF,WAAW,EAAX,0BAAW;IACX,kBAAkB,EAAlB,iCAAkB;CACrB,CAAC;AAEF,oCAAoC;AACnC,MAAc,CAAC,OAAO,GAAG,OAAO,CAAC;AAClC,iDAAiD;AAChD,MAAc,CAAC,OAAO,GAAG,gCAAc,CAAC;AAEzC,qCAAqC;AACrC,kBAAe,OAAO,CAAC;AA8BvB,iDAIyB;AAHrB,qHAAA,oBAAoB,OAAA;AACpB,qHAAA,oBAAoB,OAAA;AACpB,yHAAA,wBAAwB,OAAA;AAG5B,2CAA0D;AAAjD,gHAAA,sBAAsB,OAAA;AAC/B,2CAAyD;AAAhD,+GAAA,qBAAqB,OAAA;AAC9B,yCAAuD;AAA9C,6GAAA,oBAAoB,OAAA;AAE7B,2CAM0B;AALtB,kHAAA,wBAAwB,OAAA;AACxB,+GAAA,qBAAqB,OAAA;AACrB,8GAAA,oBAAoB,OAAA;AACpB,4GAAA,kBAAkB,OAAA;AAClB,oHAAA,0BAA0B,OAAA;AAG9B,qCAKmB;AAJf,0GAAA,eAAe,OAAA;AAGf,gHAAA,qBAAqB,OAAA"} \ No newline at end of file diff --git a/dist/cjs/btree/binary-reader.js.map b/dist/cjs/btree/binary-reader.js.map index 5687243..fa63059 100644 --- a/dist/cjs/btree/binary-reader.js.map +++ b/dist/cjs/btree/binary-reader.js.map @@ -1 +1 @@ -{"version":3,"file":"binary-reader.js","sourceRoot":"","sources":["../ts/btree/binary-reader.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"binary-reader.js","sourceRoot":"","sources":["../../../src/btree/binary-reader.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/btree/binary-tree-builder.js.map b/dist/cjs/btree/binary-tree-builder.js.map index affb5c9..ea6649f 100644 --- a/dist/cjs/btree/binary-tree-builder.js.map +++ b/dist/cjs/btree/binary-tree-builder.js.map @@ -1 +1 @@ -{"version":3,"file":"binary-tree-builder.js","sourceRoot":"","sources":["../ts/btree/binary-tree-builder.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"binary-tree-builder.js","sourceRoot":"","sources":["../../../src/btree/binary-tree-builder.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/btree/binary-tree-leaf-entry-extdata.js.map b/dist/cjs/btree/binary-tree-leaf-entry-extdata.js.map index d90d268..f8f8f06 100644 --- a/dist/cjs/btree/binary-tree-leaf-entry-extdata.js.map +++ b/dist/cjs/btree/binary-tree-leaf-entry-extdata.js.map @@ -1 +1 @@ -{"version":3,"file":"binary-tree-leaf-entry-extdata.js","sourceRoot":"","sources":["../ts/btree/binary-tree-leaf-entry-extdata.ts"],"names":[],"mappings":";;AA0BA,oEAAoE;AACpE,iDAAiD;AAEjD,qCAAqC;AACrC,UAAU;AACV,SAAS;AACT,gCAAgC;AAChC,yCAAyC;AACzC,4CAA4C;AAC5C,wCAAwC;AACxC,gDAAgD;AAChD,UAAU;AACV,0BAA0B;AAC1B,2EAA2E;AAC3E,oFAAoF;AACpF,gFAAgF;AAChF,iDAAiD;AACjD,qCAAqC;AACrC,YAAY;AACZ,QAAQ;AACR,UAAU;AACV,+FAA+F;AAC/F,UAAU;AACV,eAAe;AACf,iFAAiF;AACjF,QAAQ;AACR,IAAI"} \ No newline at end of file +{"version":3,"file":"binary-tree-leaf-entry-extdata.js","sourceRoot":"","sources":["../../../src/btree/binary-tree-leaf-entry-extdata.ts"],"names":[],"mappings":";;AA0BA,oEAAoE;AACpE,iDAAiD;AAEjD,qCAAqC;AACrC,UAAU;AACV,SAAS;AACT,gCAAgC;AAChC,yCAAyC;AACzC,4CAA4C;AAC5C,wCAAwC;AACxC,gDAAgD;AAChD,UAAU;AACV,0BAA0B;AAC1B,2EAA2E;AAC3E,oFAAoF;AACpF,gFAAgF;AAChF,iDAAiD;AACjD,qCAAqC;AACrC,YAAY;AACZ,QAAQ;AACR,UAAU;AACV,+FAA+F;AAC/F,UAAU;AACV,eAAe;AACf,iFAAiF;AACjF,QAAQ;AACR,IAAI"} \ No newline at end of file diff --git a/dist/cjs/btree/binary-tree-leaf-entry-value.js.map b/dist/cjs/btree/binary-tree-leaf-entry-value.js.map index 3695924..88fdc28 100644 --- a/dist/cjs/btree/binary-tree-leaf-entry-value.js.map +++ b/dist/cjs/btree/binary-tree-leaf-entry-value.js.map @@ -1 +1 @@ -{"version":3,"file":"binary-tree-leaf-entry-value.js","sourceRoot":"","sources":["../ts/btree/binary-tree-leaf-entry-value.ts"],"names":[],"mappings":";;;AAGA,MAAa,6BAA6B;IACtC;;;;OAIG;IACH,YAAmB,aAAqC,EAAS,QAA4B;QAA1E,kBAAa,GAAb,aAAa,CAAwB;QAAS,aAAQ,GAAR,QAAQ,CAAoB;IAC7F,CAAC;IAED,6CAA6C;IAC7C,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;CACJ;AAbD,sEAaC"} \ No newline at end of file +{"version":3,"file":"binary-tree-leaf-entry-value.js","sourceRoot":"","sources":["../../../src/btree/binary-tree-leaf-entry-value.ts"],"names":[],"mappings":";;;AAGA,MAAa,6BAA6B;IACtC;;;;OAIG;IACH,YAAmB,aAAqC,EAAS,QAA4B;QAA1E,kBAAa,GAAb,aAAa,CAAwB;QAAS,aAAQ,GAAR,QAAQ,CAAoB;IAC7F,CAAC;IAED,6CAA6C;IAC7C,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;CACJ;AAbD,sEAaC"} \ No newline at end of file diff --git a/dist/cjs/btree/binary-tree-leaf-entry.js.map b/dist/cjs/btree/binary-tree-leaf-entry.js.map index af9e897..49565ef 100644 --- a/dist/cjs/btree/binary-tree-leaf-entry.js.map +++ b/dist/cjs/btree/binary-tree-leaf-entry.js.map @@ -1 +1 @@ -{"version":3,"file":"binary-tree-leaf-entry.js","sourceRoot":"","sources":["../ts/btree/binary-tree-leaf-entry.ts"],"names":[],"mappings":";;;AAIA,MAAa,wBAAwB;IAMjC;;;OAGG;IACH,YAAmB,GAAqB,EAAS,MAAuC;QAArE,QAAG,GAAH,GAAG,CAAkB;QAAS,WAAM,GAAN,MAAM,CAAiC;QACpF,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,WAAW;QACX,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC;SAAE;QACxE,IAAI,IAAI,CAAC,OAAO,EAAE;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;SAAE;QACtD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,IAAI,WAAW,CAAC,EAAE;QACd,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;IAC3B,CAAC;IAOD,6CAA6C;IAC7C,KAAK,CAAC,UAAU;QACZ,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC/E,CAAC;CAEJ;AA1CD,4DA0CC"} \ No newline at end of file +{"version":3,"file":"binary-tree-leaf-entry.js","sourceRoot":"","sources":["../../../src/btree/binary-tree-leaf-entry.ts"],"names":[],"mappings":";;;AAIA,MAAa,wBAAwB;IAMjC;;;OAGG;IACH,YAAmB,GAAqB,EAAS,MAAuC;QAArE,QAAG,GAAH,GAAG,CAAkB;QAAS,WAAM,GAAN,MAAM,CAAiC;QACpF,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,WAAW;QACX,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC;SAAE;QACxE,IAAI,IAAI,CAAC,OAAO,EAAE;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;SAAE;QACtD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,IAAI,WAAW,CAAC,EAAE;QACd,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;IAC3B,CAAC;IAOD,6CAA6C;IAC7C,KAAK,CAAC,UAAU;QACZ,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC/E,CAAC;CAEJ;AA1CD,4DA0CC"} \ No newline at end of file diff --git a/dist/cjs/btree/binary-tree-leaf.js.map b/dist/cjs/btree/binary-tree-leaf.js.map index a0575af..62210fb 100644 --- a/dist/cjs/btree/binary-tree-leaf.js.map +++ b/dist/cjs/btree/binary-tree-leaf.js.map @@ -1 +1 @@ -{"version":3,"file":"binary-tree-leaf.js","sourceRoot":"","sources":["../ts/btree/binary-tree-leaf.ts"],"names":[],"mappings":";;;AAAA,sDAAkD;AAElD,mEAAkE;AAElE,yDAA8C;AAE9C,MAAa,mBAAoB,SAAQ,+CAAuB;IAgC5D,YAAY,QAA0C;QAClD,OAAO,CAAC,MAAM,CAAC,OAAO,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,uCAAuC,CAAC,CAAC;QAClG,KAAK,CAAC,QAAQ,CAAC,CAAC;QAjBb,mBAAc,GAAG,CAAC,CAAC;QACnB,mBAAc,GAAG,CAAC,CAAC;QAEnB,YAAO,GAAG;YACb,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,CAAC;YACZ,MAAM,EAAE,KAAK;YACb,KAAK,CAAC,IAAI;gBACN,mEAAmE;gBACnE,MAAM,IAAI,8BAAa,CAAC,uBAAuB,EAAE,oDAAoD,CAAC,CAAC;YAC3G,CAAC;SACJ,CAAC;QAEK,YAAO,GAA+B,EAAE,CAAC;IAKhD,CAAC;IAjCD,MAAM,KAAK,gBAAgB,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAK,gBAAgB,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;IAE5C,MAAM,CAAC,iBAAiB,CAAC,SAAiB,EAAE,aAAqB;QAC7D,OAAO,aAAa,GAAG,CAAC;YACpB,CAAC,CAAC,aAAa,GAAG,SAAS,GAAG,CAAC;YAC/B,CAAC,CAAC,CAAC,CAAC;IACZ,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,SAAiB,EAAE,aAAqB;QAC7D,OAAO,aAAa,GAAG,CAAC;YACpB,CAAC,CAAC,aAAa,GAAG,SAAS,GAAG,EAAE;YAChC,CAAC,CAAC,CAAC,CAAC;IACZ,CAAC;IAiCD,IAAI,WAAW,KAAK,OAAO,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC;IACpE,IAAI,OAAO,KAAK,OAAO,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC;IAE5D,IAAI,aAAa;QACb,OAAO,IAAI,CAAC,cAAc,KAAK,CAAC;YAC5B,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc;YACtC,CAAC,CAAC,CAAC,CAAC;IACZ,CAAC;IACD,IAAI,aAAa,CAAC,QAAQ;QACtB,IAAI,CAAC,cAAc,GAAG,QAAQ,GAAG,CAAC;YAC9B,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAI,CAAC;YAC5B,CAAC,CAAC,CAAC,CAAC;IACZ,CAAC;IAED,IAAI,aAAa;QACb,OAAO,IAAI,CAAC,cAAc,KAAK,CAAC;YAC5B,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc;YAC5E,CAAC,CAAC,CAAC,CAAC;IACZ,CAAC;IACD,IAAI,aAAa,CAAC,QAAQ;QACtB,IAAI,CAAC,cAAc,GAAG,QAAQ,GAAG,CAAC;YAC9B,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,CAAC,CAAC,CAAC,CAAC;IACZ,CAAC;IAED,cAAc,CAAC,GAAqB;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,IAAA,2BAAQ,EAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,SAAS,CAAC,GAAqB;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC;CACJ;AAhFD,kDAgFC"} \ No newline at end of file +{"version":3,"file":"binary-tree-leaf.js","sourceRoot":"","sources":["../../../src/btree/binary-tree-leaf.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/btree/binary-tree-node-entry.js.map b/dist/cjs/btree/binary-tree-node-entry.js.map index d734f73..42d870a 100644 --- a/dist/cjs/btree/binary-tree-node-entry.js.map +++ b/dist/cjs/btree/binary-tree-node-entry.js.map @@ -1 +1 @@ -{"version":3,"file":"binary-tree-node-entry.js","sourceRoot":"","sources":["../ts/btree/binary-tree-node-entry.ts"],"names":[],"mappings":";;;AAAA,sDAAkD;AAIlD,MAAa,wBAAwB;IAQjC,YAAmB,GAAqB;QAArB,QAAG,GAAH,GAAG,CAAkB;QAPxC,kBAAa,GAAW,IAAI,CAAC;IAQ7B,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,MAAM,IAAI,8BAAa,CAAC,uBAAuB,EAAE,+BAA+B,CAAC,CAAC;IACtF,CAAC;CACJ;AAdD,4DAcC"} \ No newline at end of file +{"version":3,"file":"binary-tree-node-entry.js","sourceRoot":"","sources":["../../../src/btree/binary-tree-node-entry.ts"],"names":[],"mappings":";;;AAAA,sDAAkD;AAIlD,MAAa,wBAAwB;IAQjC,YAAmB,GAAqB;QAArB,QAAG,GAAH,GAAG,CAAkB;QAPxC,kBAAa,GAAW,IAAI,CAAC;IAQ7B,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,MAAM,IAAI,8BAAa,CAAC,uBAAuB,EAAE,+BAA+B,CAAC,CAAC;IACtF,CAAC;CACJ;AAdD,4DAcC"} \ No newline at end of file diff --git a/dist/cjs/btree/binary-tree-node-info.js.map b/dist/cjs/btree/binary-tree-node-info.js.map index 1c82460..f68b739 100644 --- a/dist/cjs/btree/binary-tree-node-info.js.map +++ b/dist/cjs/btree/binary-tree-node-info.js.map @@ -1 +1 @@ -{"version":3,"file":"binary-tree-node-info.js","sourceRoot":"","sources":["../ts/btree/binary-tree-node-info.ts"],"names":[],"mappings":";;;AAIA,MAAa,uBAAuB;IA+ChC,YAAY,IAAsC;QAC9C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,WAAW,EAAE;YACzC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;SACjC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,WAAW,EAAE;YACvC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,8BAA8B;SACxE;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACxC,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAI,KAAK,CAAC,KAAK;QACX,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC7B,CAAC;CACJ;AAzED,0DAyEC"} \ No newline at end of file +{"version":3,"file":"binary-tree-node-info.js","sourceRoot":"","sources":["../../../src/btree/binary-tree-node-info.ts"],"names":[],"mappings":";;;AAIA,MAAa,uBAAuB;IA+ChC,YAAY,IAAsC;QAC9C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,WAAW,EAAE;YACzC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;SACjC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,WAAW,EAAE;YACvC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,8BAA8B;SACxE;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACxC,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAI,KAAK,CAAC,KAAK;QACX,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC7B,CAAC;CACJ;AAzED,0DAyEC"} \ No newline at end of file diff --git a/dist/cjs/btree/binary-tree-node.js.map b/dist/cjs/btree/binary-tree-node.js.map index acca070..d389405 100644 --- a/dist/cjs/btree/binary-tree-node.js.map +++ b/dist/cjs/btree/binary-tree-node.js.map @@ -1 +1 @@ -{"version":3,"file":"binary-tree-node.js","sourceRoot":"","sources":["../ts/btree/binary-tree-node.ts"],"names":[],"mappings":";;;AAAA,sDAAkD;AAElD,mEAAkE;AAElE,MAAa,mBAAoB,SAAQ,+CAAuB;IAW5D,YAAY,QAA0C;QAClD,KAAK,CAAC,QAAQ,CAAC,CAAC;QAVpB,YAAO,GAA+B,EAAE,CAAC;QAEzC,kBAAa,GAAW,IAAI,CAAC;IAS7B,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,MAAM,IAAI,8BAAa,CAAC,uBAAuB,EAAE,+BAA+B,CAAC,CAAC;IACtF,CAAC;CACJ;AAlBD,kDAkBC"} \ No newline at end of file +{"version":3,"file":"binary-tree-node.js","sourceRoot":"","sources":["../../../src/btree/binary-tree-node.ts"],"names":[],"mappings":";;;AAAA,sDAAkD;AAElD,mEAAkE;AAElE,MAAa,mBAAoB,SAAQ,+CAAuB;IAW5D,YAAY,QAA0C;QAClD,KAAK,CAAC,QAAQ,CAAC,CAAC;QAVpB,YAAO,GAA+B,EAAE,CAAC;QAEzC,kBAAa,GAAW,IAAI,CAAC;IAS7B,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,MAAM,IAAI,8BAAa,CAAC,uBAAuB,EAAE,+BAA+B,CAAC,CAAC;IACtF,CAAC;CACJ;AAlBD,kDAkBC"} \ No newline at end of file diff --git a/dist/cjs/btree/binary-tree-transaction-operation.js.map b/dist/cjs/btree/binary-tree-transaction-operation.js.map index e20b2c2..c833924 100644 --- a/dist/cjs/btree/binary-tree-transaction-operation.js.map +++ b/dist/cjs/btree/binary-tree-transaction-operation.js.map @@ -1 +1 @@ -{"version":3,"file":"binary-tree-transaction-operation.js","sourceRoot":"","sources":["../ts/btree/binary-tree-transaction-operation.ts"],"names":[],"mappings":";;;AAKA,MAAa,mCAAmC;IAoB5C,YAAY,SAA8C;QACtD,iIAAiI;QACjI,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC;QACzB,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE;YACzD,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,aAAa,CAAC;SAChD;QACD,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE;YAC1B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;SACtC;QACD,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC7B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;YACnC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC;SAC9C;IACL,CAAC;IAjCD,MAAM,CAAC,GAAG,CAAC,GAAqB,EAAE,aAAqC,EAAE,QAA4B;QACjG,OAAO,IAAI,mCAAmC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClG,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,GAAqB,EAAE,QAAuC,EAAE,YAA2C,EAAE,QAA4B;QACnJ,OAAO,IAAI,mCAAmC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9G,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,GAAqB,EAAE,aAAqC;QACtE,OAAO,IAAI,mCAAmC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC;IAC3F,CAAC;CAwBJ;AAnCD,kFAmCC"} \ No newline at end of file +{"version":3,"file":"binary-tree-transaction-operation.js","sourceRoot":"","sources":["../../../src/btree/binary-tree-transaction-operation.ts"],"names":[],"mappings":";;;AAKA,MAAa,mCAAmC;IAoB5C,YAAY,SAA8C;QACtD,iIAAiI;QACjI,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC;QACzB,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE;YACzD,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,aAAa,CAAC;SAChD;QACD,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE;YAC1B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;SACtC;QACD,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC7B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;YACnC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC;SAC9C;IACL,CAAC;IAjCD,MAAM,CAAC,GAAG,CAAC,GAAqB,EAAE,aAAqC,EAAE,QAA4B;QACjG,OAAO,IAAI,mCAAmC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClG,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,GAAqB,EAAE,QAAuC,EAAE,YAA2C,EAAE,QAA4B;QACnJ,OAAO,IAAI,mCAAmC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9G,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,GAAqB,EAAE,aAAqC;QACtE,OAAO,IAAI,mCAAmC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC;IAC3F,CAAC;CAwBJ;AAnCD,kFAmCC"} \ No newline at end of file diff --git a/dist/cjs/btree/binary-tree.js.map b/dist/cjs/btree/binary-tree.js.map index 33b123c..d97dbe7 100644 --- a/dist/cjs/btree/binary-tree.js.map +++ b/dist/cjs/btree/binary-tree.js.map @@ -1 +1 @@ -{"version":3,"file":"binary-tree.js","sourceRoot":"","sources":["../ts/btree/binary-tree.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"binary-tree.js","sourceRoot":"","sources":["../../../src/btree/binary-tree.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/btree/binary-writer.js.map b/dist/cjs/btree/binary-writer.js.map index 0ae0c50..06d82f4 100644 --- a/dist/cjs/btree/binary-writer.js.map +++ b/dist/cjs/btree/binary-writer.js.map @@ -1 +1 @@ -{"version":3,"file":"binary-writer.js","sourceRoot":"","sources":["../ts/btree/binary-writer.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"binary-writer.js","sourceRoot":"","sources":["../../../src/btree/binary-writer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/btree/config.js.map b/dist/cjs/btree/config.js.map index ab19abe..fb8723f 100644 --- a/dist/cjs/btree/config.js.map +++ b/dist/cjs/btree/config.js.map @@ -1 +1 @@ -{"version":3,"file":"config.js","sourceRoot":"","sources":["../ts/btree/config.ts"],"names":[],"mappings":";;;AAAa,QAAA,iBAAiB,GAAG,IAAI,CAAC;AACzB,QAAA,2BAA2B,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,8DAA8D;AACrG,QAAA,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/btree/config.ts"],"names":[],"mappings":";;;AAAa,QAAA,iBAAiB,GAAG,IAAI,CAAC;AACzB,QAAA,2BAA2B,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,8DAA8D;AACrG,QAAA,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC"} \ No newline at end of file diff --git a/dist/cjs/btree/entry-key-type.js.map b/dist/cjs/btree/entry-key-type.js.map index c189a74..a763823 100644 --- a/dist/cjs/btree/entry-key-type.js.map +++ b/dist/cjs/btree/entry-key-type.js.map @@ -1 +1 @@ -{"version":3,"file":"entry-key-type.js","sourceRoot":"","sources":["../ts/btree/entry-key-type.ts"],"names":[],"mappings":""} \ No newline at end of file +{"version":3,"file":"entry-key-type.js","sourceRoot":"","sources":["../../../src/btree/entry-key-type.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/cjs/btree/index.js.map b/dist/cjs/btree/index.js.map index 15484f8..6ab9133 100644 --- a/dist/cjs/btree/index.js.map +++ b/dist/cjs/btree/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/btree/index.ts"],"names":[],"mappings":";;;AAAA,mDAA+C;AAe3C,6FAfK,4BAAY,OAeL;AAdhB,+CAA4E;AASxE,gGATK,6BAAe,OASL;AAMf,2GAfsB,wCAA0B,OAetB;AAd9B,yDAAyD;AASrD,oGATK,sCAAmB,OASL;AARvB,qEAAoE;AAShE,yGATK,iDAAwB,OASL;AAR5B,mDAA+C;AAU3C,6FAVK,4BAAY,OAUL;AAThB,iCAAmC;AAI/B,0FAJK,gBAAS,OAIL;AAHb,iDAAkD;AAO9C,iGAPK,+BAAgB,OAOL"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/btree/index.ts"],"names":[],"mappings":";;;AAAA,mDAA+C;AAe3C,6FAfK,4BAAY,OAeL;AAdhB,+CAA4E;AASxE,gGATK,6BAAe,OASL;AAMf,2GAfsB,wCAA0B,OAetB;AAd9B,yDAAyD;AASrD,oGATK,sCAAmB,OASL;AARvB,qEAAoE;AAShE,yGATK,iDAAwB,OASL;AAR5B,mDAA+C;AAU3C,6FAVK,4BAAY,OAUL;AAThB,iCAAmC;AAI/B,0FAJK,gBAAS,OAIL;AAHb,iDAAkD;AAO9C,iGAPK,+BAAgB,OAOL"} \ No newline at end of file diff --git a/dist/cjs/btree/leaf-entry-metadata.js.map b/dist/cjs/btree/leaf-entry-metadata.js.map index 915e69a..7539fe1 100644 --- a/dist/cjs/btree/leaf-entry-metadata.js.map +++ b/dist/cjs/btree/leaf-entry-metadata.js.map @@ -1 +1 @@ -{"version":3,"file":"leaf-entry-metadata.js","sourceRoot":"","sources":["../ts/btree/leaf-entry-metadata.ts"],"names":[],"mappings":""} \ No newline at end of file +{"version":3,"file":"leaf-entry-metadata.js","sourceRoot":"","sources":["../../../src/btree/leaf-entry-metadata.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/cjs/btree/leaf-entry-recordpointer.js.map b/dist/cjs/btree/leaf-entry-recordpointer.js.map index 32e3234..4effa49 100644 --- a/dist/cjs/btree/leaf-entry-recordpointer.js.map +++ b/dist/cjs/btree/leaf-entry-recordpointer.js.map @@ -1 +1 @@ -{"version":3,"file":"leaf-entry-recordpointer.js","sourceRoot":"","sources":["../ts/btree/leaf-entry-recordpointer.ts"],"names":[],"mappings":""} \ No newline at end of file +{"version":3,"file":"leaf-entry-recordpointer.js","sourceRoot":"","sources":["../../../src/btree/leaf-entry-recordpointer.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/cjs/btree/tree-builder.js.map b/dist/cjs/btree/tree-builder.js.map index f8cf6a0..8b37d86 100644 --- a/dist/cjs/btree/tree-builder.js.map +++ b/dist/cjs/btree/tree-builder.js.map @@ -1 +1 @@ -{"version":3,"file":"tree-builder.js","sourceRoot":"","sources":["../ts/btree/tree-builder.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tree-builder.js","sourceRoot":"","sources":["../../../src/btree/tree-builder.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/btree/tree-leaf-entry-value.js.map b/dist/cjs/btree/tree-leaf-entry-value.js.map index 77276c6..4d19f8f 100644 --- a/dist/cjs/btree/tree-leaf-entry-value.js.map +++ b/dist/cjs/btree/tree-leaf-entry-value.js.map @@ -1 +1 @@ -{"version":3,"file":"tree-leaf-entry-value.js","sourceRoot":"","sources":["../ts/btree/tree-leaf-entry-value.ts"],"names":[],"mappings":";;;AAGA,MAAa,uBAAuB;IAChC;;;OAGG;IACH,YAAmB,aAAqC,EAAS,QAA4B;QAA1E,kBAAa,GAAb,aAAa,CAAwB;QAAS,aAAQ,GAAR,QAAQ,CAAoB;IAC7F,CAAC;IAED,6CAA6C;IAC7C,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;CACJ;AAZD,0DAYC"} \ No newline at end of file +{"version":3,"file":"tree-leaf-entry-value.js","sourceRoot":"","sources":["../../../src/btree/tree-leaf-entry-value.ts"],"names":[],"mappings":";;;AAGA,MAAa,uBAAuB;IAChC;;;OAGG;IACH,YAAmB,aAAqC,EAAS,QAA4B;QAA1E,kBAAa,GAAb,aAAa,CAAwB;QAAS,aAAQ,GAAR,QAAQ,CAAoB;IAC7F,CAAC;IAED,6CAA6C;IAC7C,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;CACJ;AAZD,0DAYC"} \ No newline at end of file diff --git a/dist/cjs/btree/tree-leaf-entry.js.map b/dist/cjs/btree/tree-leaf-entry.js.map index d0b1eb7..6a483e9 100644 --- a/dist/cjs/btree/tree-leaf-entry.js.map +++ b/dist/cjs/btree/tree-leaf-entry.js.map @@ -1 +1 @@ -{"version":3,"file":"tree-leaf-entry.js","sourceRoot":"","sources":["../ts/btree/tree-leaf-entry.ts"],"names":[],"mappings":";;;AAEA,mEAAkE;AAElE,MAAa,kBAAkB;IAG3B,YAAmB,IAAmB,EAAS,GAAqB,EAAE,KAA+B;QAAlF,SAAI,GAAJ,IAAI,CAAe;QAAS,QAAG,GAAH,GAAG,CAAkB;QAChE,IAAI,OAAO,KAAK,KAAK,WAAW,IAAI,CAAC,CAAC,KAAK,YAAY,+CAAuB,CAAC,EAAE;YAC7E,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;SAC3E;QACD,IAAI,CAAC,MAAM,GAAG,OAAO,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;CACJ;AATD,gDASC"} \ No newline at end of file +{"version":3,"file":"tree-leaf-entry.js","sourceRoot":"","sources":["../../../src/btree/tree-leaf-entry.ts"],"names":[],"mappings":";;;AAEA,mEAAkE;AAElE,MAAa,kBAAkB;IAG3B,YAAmB,IAAmB,EAAS,GAAqB,EAAE,KAA+B;QAAlF,SAAI,GAAJ,IAAI,CAAe;QAAS,QAAG,GAAH,GAAG,CAAkB;QAChE,IAAI,OAAO,KAAK,KAAK,WAAW,IAAI,CAAC,CAAC,KAAK,YAAY,+CAAuB,CAAC,EAAE;YAC7E,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;SAC3E;QACD,IAAI,CAAC,MAAM,GAAG,OAAO,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;CACJ;AATD,gDASC"} \ No newline at end of file diff --git a/dist/cjs/btree/tree-leaf.js.map b/dist/cjs/btree/tree-leaf.js.map index 650e44e..f421b3c 100644 --- a/dist/cjs/btree/tree-leaf.js.map +++ b/dist/cjs/btree/tree-leaf.js.map @@ -1 +1 @@ -{"version":3,"file":"tree-leaf.js","sourceRoot":"","sources":["../ts/btree/tree-leaf.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tree-leaf.js","sourceRoot":"","sources":["../../../src/btree/tree-leaf.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/btree/tree-node-entry.js.map b/dist/cjs/btree/tree-node-entry.js.map index 312eb07..9ba12bc 100644 --- a/dist/cjs/btree/tree-node-entry.js.map +++ b/dist/cjs/btree/tree-node-entry.js.map @@ -1 +1 @@ -{"version":3,"file":"tree-node-entry.js","sourceRoot":"","sources":["../ts/btree/tree-node-entry.ts"],"names":[],"mappings":";;;AAIA,MAAa,kBAAkB;IAG3B,YAAmB,IAAmB,EAAS,GAAqB;QAAjD,SAAI,GAAJ,IAAI,CAAe;QAAS,QAAG,GAAH,GAAG,CAAkB;QAFpE,YAAO,GAAkC,IAAI,CAAC;IAG9C,CAAC;CACJ;AALD,gDAKC"} \ No newline at end of file +{"version":3,"file":"tree-node-entry.js","sourceRoot":"","sources":["../../../src/btree/tree-node-entry.ts"],"names":[],"mappings":";;;AAIA,MAAa,kBAAkB;IAG3B,YAAmB,IAAmB,EAAS,GAAqB;QAAjD,SAAI,GAAJ,IAAI,CAAe;QAAS,QAAG,GAAH,GAAG,CAAkB;QAFpE,YAAO,GAAkC,IAAI,CAAC;IAG9C,CAAC;CACJ;AALD,gDAKC"} \ No newline at end of file diff --git a/dist/cjs/btree/tree-node.js.map b/dist/cjs/btree/tree-node.js.map index 2c6e838..86c5ef9 100644 --- a/dist/cjs/btree/tree-node.js.map +++ b/dist/cjs/btree/tree-node.js.map @@ -1 +1 @@ -{"version":3,"file":"tree-node.js","sourceRoot":"","sources":["../ts/btree/tree-node.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tree-node.js","sourceRoot":"","sources":["../../../src/btree/tree-node.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/btree/tree.js.map b/dist/cjs/btree/tree.js.map index 4dc838c..9dd22ca 100644 --- a/dist/cjs/btree/tree.js.map +++ b/dist/cjs/btree/tree.js.map @@ -1 +1 @@ -{"version":3,"file":"tree.js","sourceRoot":"","sources":["../ts/btree/tree.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../../src/btree/tree.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/btree/tx.js.map b/dist/cjs/btree/tx.js.map index 07101b1..cb817fe 100644 --- a/dist/cjs/btree/tx.js.map +++ b/dist/cjs/btree/tx.js.map @@ -1 +1 @@ -{"version":3,"file":"tx.js","sourceRoot":"","sources":["../ts/btree/tx.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tx.js","sourceRoot":"","sources":["../../../src/btree/tx.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/btree/typesafe-compare.js.map b/dist/cjs/btree/typesafe-compare.js.map index d91cdb0..89046a6 100644 --- a/dist/cjs/btree/typesafe-compare.js.map +++ b/dist/cjs/btree/typesafe-compare.js.map @@ -1 +1 @@ -{"version":3,"file":"typesafe-compare.js","sourceRoot":"","sources":["../ts/btree/typesafe-compare.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"typesafe-compare.js","sourceRoot":"","sources":["../../../src/btree/typesafe-compare.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/btree/utils.js.map b/dist/cjs/btree/utils.js.map index 32f3696..39ddd0f 100644 --- a/dist/cjs/btree/utils.js.map +++ b/dist/cjs/btree/utils.js.map @@ -1 +1 @@ -{"version":3,"file":"utils.js","sourceRoot":"","sources":["../ts/btree/utils.ts"],"names":[],"mappings":";;;AAIA,SAAgB,kBAAkB,CAAC,GAAqB,EAAE,aAAqC,EAAE,YAAsB,EAAE,QAA2B;IAChJ,MAAM,gBAAgB,GAAG,iEAAiE,CAAC;IAC3F,MAAM,cAAc,GAAG,CAAC,GAAqB,EAAE,EAAE;QAC7C,OAAO,CAAC,QAAQ,EAAC,QAAQ,EAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,IAAI,GAAG,YAAY,IAAI,CAAC;IAC1G,CAAC,CAAC;IACF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;QACtB,OAAO,IAAI,SAAS,CAAC,+CAA+C,gBAAgB,EAAE,CAAC,CAAC;KAC3F;IACD,IAAI,CAAC,CAAC,aAAa,YAAY,KAAK,IAAI,aAAa,YAAY,UAAU,CAAC,EAAE;QAC1E,OAAO,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC;KAC5E;IACD,IAAI,aAAa,CAAC,MAAM,GAAG,GAAG,EAAE;QAC5B,OAAO,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC,CAAC,qBAAqB;KAClG;IACD,6DAA6D;IAC7D,IAAI;QACA,YAAY,IAAI,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACvC,IAAI,CAAC,CAAC,GAAG,IAAI,QAAQ,CAAC,EAAE;gBACpB,MAAM,IAAI,SAAS,CAAC,8BAA8B,GAAG,GAAG,CAAC,CAAC;aAC7D;YACD,IAAI,CAAC,cAAc,CAAC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;gBACvC,MAAM,IAAI,SAAS,CAAC,aAAa,GAAG,6CAA6C,gBAAgB,EAAE,CAAC,CAAC;aACxG;QACL,CAAC,CAAC,CAAC;KACN;IACD,OAAM,GAAG,EAAE;QACP,OAAO,GAAG,CAAC;KACd;AACL,CAAC;AA5BD,gDA4BC;AAEM,MAAM,cAAc,GAAG,CAAC,WAAsB,EAAE,IAAe,EAAE,EAAE;IACtE,MAAM,CAAC,GAAG,GAAG,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;QACxB,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QAClD,KAAK,IAAI,CAAC,CAAC;KACd;AACL,CAAC,CAAC;AAPW,QAAA,cAAc,kBAOzB"} \ No newline at end of file +{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/btree/utils.ts"],"names":[],"mappings":";;;AAIA,SAAgB,kBAAkB,CAAC,GAAqB,EAAE,aAAqC,EAAE,YAAsB,EAAE,QAA2B;IAChJ,MAAM,gBAAgB,GAAG,iEAAiE,CAAC;IAC3F,MAAM,cAAc,GAAG,CAAC,GAAqB,EAAE,EAAE;QAC7C,OAAO,CAAC,QAAQ,EAAC,QAAQ,EAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,IAAI,GAAG,YAAY,IAAI,CAAC;IAC1G,CAAC,CAAC;IACF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;QACtB,OAAO,IAAI,SAAS,CAAC,+CAA+C,gBAAgB,EAAE,CAAC,CAAC;KAC3F;IACD,IAAI,CAAC,CAAC,aAAa,YAAY,KAAK,IAAI,aAAa,YAAY,UAAU,CAAC,EAAE;QAC1E,OAAO,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC;KAC5E;IACD,IAAI,aAAa,CAAC,MAAM,GAAG,GAAG,EAAE;QAC5B,OAAO,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC,CAAC,qBAAqB;KAClG;IACD,6DAA6D;IAC7D,IAAI;QACA,YAAY,IAAI,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACvC,IAAI,CAAC,CAAC,GAAG,IAAI,QAAQ,CAAC,EAAE;gBACpB,MAAM,IAAI,SAAS,CAAC,8BAA8B,GAAG,GAAG,CAAC,CAAC;aAC7D;YACD,IAAI,CAAC,cAAc,CAAC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;gBACvC,MAAM,IAAI,SAAS,CAAC,aAAa,GAAG,6CAA6C,gBAAgB,EAAE,CAAC,CAAC;aACxG;QACL,CAAC,CAAC,CAAC;KACN;IACD,OAAM,GAAG,EAAE;QACP,OAAO,GAAG,CAAC;KACd;AACL,CAAC;AA5BD,gDA4BC;AAEM,MAAM,cAAc,GAAG,CAAC,WAAsB,EAAE,IAAe,EAAE,EAAE;IACtE,MAAM,CAAC,GAAG,GAAG,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;QACxB,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QAClD,KAAK,IAAI,CAAC,CAAC;KACd;AACL,CAAC,CAAC;AAPW,QAAA,cAAc,kBAOzB"} \ No newline at end of file diff --git a/dist/cjs/data-index/array-index-query-hint.js.map b/dist/cjs/data-index/array-index-query-hint.js.map index 5c991a8..ae2c1cb 100644 --- a/dist/cjs/data-index/array-index-query-hint.js.map +++ b/dist/cjs/data-index/array-index-query-hint.js.map @@ -1 +1 @@ -{"version":3,"file":"array-index-query-hint.js","sourceRoot":"","sources":["../ts/data-index/array-index-query-hint.ts"],"names":[],"mappings":";;;AAAA,6CAA8C;AAE9C,MAAa,mBAAoB,SAAQ,2BAAc;IACnD,MAAM,KAAK,KAAK;QACZ,OAAO,MAAM,CAAC,MAAM,CAAC;YACjB,YAAY,EAAE,SAAS;SAC1B,CAAC,CAAC;IACP,CAAC;IAED,YAAY,IAAe,EAAE,KAAc;QACvC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,WAAW;QACX,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5E,QAAQ,IAAI,CAAC,IAAI,EAAE;YACf,KAAK,mBAAmB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBACzC,OAAO,SAAS,GAAG,2EAA2E,CAAC;aAClG;YACD,OAAO,CAAC,CAAC;gBACL,OAAO,aAAa,CAAC;aACxB;SACJ;IACL,CAAC;CACJ;AAtBD,kDAsBC"} \ No newline at end of file +{"version":3,"file":"array-index-query-hint.js","sourceRoot":"","sources":["../../../src/data-index/array-index-query-hint.ts"],"names":[],"mappings":";;;AAAA,6CAA8C;AAE9C,MAAa,mBAAoB,SAAQ,2BAAc;IACnD,MAAM,KAAK,KAAK;QACZ,OAAO,MAAM,CAAC,MAAM,CAAC;YACjB,YAAY,EAAE,SAAS;SAC1B,CAAC,CAAC;IACP,CAAC;IAED,YAAY,IAAe,EAAE,KAAc;QACvC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,WAAW;QACX,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5E,QAAQ,IAAI,CAAC,IAAI,EAAE;YACf,KAAK,mBAAmB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBACzC,OAAO,SAAS,GAAG,2EAA2E,CAAC;aAClG;YACD,OAAO,CAAC,CAAC;gBACL,OAAO,aAAa,CAAC;aACxB;SACJ;IACL,CAAC;CACJ;AAtBD,kDAsBC"} \ No newline at end of file diff --git a/dist/cjs/data-index/array-index.js.map b/dist/cjs/data-index/array-index.js.map index 04402f1..2ff9262 100644 --- a/dist/cjs/data-index/array-index.js.map +++ b/dist/cjs/data-index/array-index.js.map @@ -1 +1 @@ -{"version":3,"file":"array-index.js","sourceRoot":"","sources":["../ts/data-index/array-index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"array-index.js","sourceRoot":"","sources":["../../../src/data-index/array-index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/data-index/data-index.js.map b/dist/cjs/data-index/data-index.js.map index ed4b1f4..0203653 100644 --- a/dist/cjs/data-index/data-index.js.map +++ b/dist/cjs/data-index/data-index.js.map @@ -1 +1 @@ -{"version":3,"file":"data-index.js","sourceRoot":"","sources":["../ts/data-index/data-index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"data-index.js","sourceRoot":"","sources":["../../../src/data-index/data-index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/data-index/fulltext-index-query-hint.js.map b/dist/cjs/data-index/fulltext-index-query-hint.js.map index cd77c63..6e8011e 100644 --- a/dist/cjs/data-index/fulltext-index-query-hint.js.map +++ b/dist/cjs/data-index/fulltext-index-query-hint.js.map @@ -1 +1 @@ -{"version":3,"file":"fulltext-index-query-hint.js","sourceRoot":"","sources":["../ts/data-index/fulltext-index-query-hint.ts"],"names":[],"mappings":";;;AAAA,6CAA8C;AAE9C,MAAa,sBAAuB,SAAQ,2BAAc;IACtD,MAAM,KAAK,KAAK;QACZ,OAAO,MAAM,CAAC,MAAM,CAAC;YACjB,WAAW,EAAE,SAAS;YACtB,WAAW,EAAE,SAAS;YACtB,WAAW,EAAE,SAAS;SACzB,CAAC,CAAC;IACP,CAAC;IAED,YAAY,IAAuC,EAAE,KAAc;QAC/D,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,WAAW;QACX,QAAQ,IAAI,CAAC,IAAI,EAAE;YACf,KAAK,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC3C,OAAO,SAAS,IAAI,CAAC,KAAK,4EAA4E,CAAC;aAC1G;YACD,KAAK,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC3C,OAAO,SAAS,IAAI,CAAC,KAAK,mKAAmK,CAAC;aACjM;YACD,KAAK,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC3C,OAAO,SAAS,IAAI,CAAC,KAAK,8IAA8I,CAAC;aAC5K;YACD,OAAO,CAAC,CAAC;gBACL,OAAO,aAAa,CAAC;aACxB;SACJ;IACL,CAAC;CACJ;AA7BD,wDA6BC"} \ No newline at end of file +{"version":3,"file":"fulltext-index-query-hint.js","sourceRoot":"","sources":["../../../src/data-index/fulltext-index-query-hint.ts"],"names":[],"mappings":";;;AAAA,6CAA8C;AAE9C,MAAa,sBAAuB,SAAQ,2BAAc;IACtD,MAAM,KAAK,KAAK;QACZ,OAAO,MAAM,CAAC,MAAM,CAAC;YACjB,WAAW,EAAE,SAAS;YACtB,WAAW,EAAE,SAAS;YACtB,WAAW,EAAE,SAAS;SACzB,CAAC,CAAC;IACP,CAAC;IAED,YAAY,IAAuC,EAAE,KAAc;QAC/D,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,WAAW;QACX,QAAQ,IAAI,CAAC,IAAI,EAAE;YACf,KAAK,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC3C,OAAO,SAAS,IAAI,CAAC,KAAK,4EAA4E,CAAC;aAC1G;YACD,KAAK,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC3C,OAAO,SAAS,IAAI,CAAC,KAAK,mKAAmK,CAAC;aACjM;YACD,KAAK,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC3C,OAAO,SAAS,IAAI,CAAC,KAAK,8IAA8I,CAAC;aAC5K;YACD,OAAO,CAAC,CAAC;gBACL,OAAO,aAAa,CAAC;aACxB;SACJ;IACL,CAAC;CACJ;AA7BD,wDA6BC"} \ No newline at end of file diff --git a/dist/cjs/data-index/fulltext-index.js.map b/dist/cjs/data-index/fulltext-index.js.map index 725f835..6bbab23 100644 --- a/dist/cjs/data-index/fulltext-index.js.map +++ b/dist/cjs/data-index/fulltext-index.js.map @@ -1 +1 @@ -{"version":3,"file":"fulltext-index.js","sourceRoot":"","sources":["../ts/data-index/fulltext-index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"fulltext-index.js","sourceRoot":"","sources":["../../../src/data-index/fulltext-index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/data-index/geo-index.js.map b/dist/cjs/data-index/geo-index.js.map index a7546e0..2ec6656 100644 --- a/dist/cjs/data-index/geo-index.js.map +++ b/dist/cjs/data-index/geo-index.js.map @@ -1 +1 @@ -{"version":3,"file":"geo-index.js","sourceRoot":"","sources":["../ts/data-index/geo-index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"geo-index.js","sourceRoot":"","sources":["../../../src/data-index/geo-index.ts"],"names":[],"mappings":";;;AACA,oCAAsD;AACtD,0DAAkD;AAClD,6CAAyC;AAEzC,mDAAoD;AACpD,+CAAgD;AAEhD,sCAAsC;AAEtC,SAAS,sBAAsB,CAAC,OAAe;IAC3C,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAAE,OAAO;KAAE;IAC5C,IAAI,OAAO,GAAG,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;KAAE;IAClC,IAAI,OAAO,GAAG,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;KAAE;IACnC,IAAI,OAAO,GAAG,GAAG,EAAE;QAAE,OAAO,EAAE,CAAC;KAAE;IACjC,IAAI,OAAO,GAAG,GAAG,EAAE;QAAE,OAAO,CAAC,CAAC;KAAE;IAChC,IAAI,OAAO,GAAG,EAAE,EAAE;QAAE,OAAO,CAAC,CAAC;KAAE;IAC/B,IAAI,OAAO,GAAG,EAAE,EAAE;QAAE,OAAO,CAAC,CAAC;KAAE;IAC/B,IAAI,OAAO,GAAG,GAAG,EAAE;QAAE,OAAO,CAAC,CAAC;KAAE;IAChC,IAAI,OAAO,GAAG,IAAI,EAAE;QAAE,OAAO,CAAC,CAAC;KAAE;IACjC,IAAI,OAAO,GAAG,KAAK,EAAE;QAAE,OAAO,CAAC,CAAC;KAAE;IAClC,IAAI,OAAO,GAAG,KAAK,EAAE;QAAE,OAAO,CAAC,CAAC;KAAE;IAClC,IAAI,OAAO,GAAG,MAAM,EAAE;QAAE,OAAO,CAAC,CAAC;KAAE;IACnC,OAAO,CAAC,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAC,GAAkC;IACnD,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;QAC7D,OAAO;KACV;IACD,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC,qCAAqC;IAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7D,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,qFAAqF;AACrF,SAAS,eAAe,CAAC,GAAW,EAAE,GAAW,EAAE,OAAe,EAAE,SAAiB;IAEjF,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAE,QAAgB,EAAE,GAAW,EAAE,GAAW,EAAE,OAAe,EAAE,EAAE;QACjG,MAAM,QAAQ,GAAG,QAAQ,GAAG,GAAG,CAAC;QAChC,MAAM,QAAQ,GAAG,QAAQ,GAAG,GAAG,CAAC;QAChC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACjF,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAE,SAAiB,EAAE,MAAc,EAAE,KAAa,EAAE,EAAE;QACvF,MAAM,KAAK,GAAG,QAAQ,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,SAAS,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACtC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IAClC,CAAC,CAAC;IACF,MAAM,eAAe,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,GAAW,EAAE,GAAW,EAAE,EAAE;QACvE,MAAM,EAAE,GAAG,aAAa,CAAC;QACzB,MAAM,OAAO,GAAG,OAAO,CAAC;QAExB,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAC,GAAG,CAAC,CAAC;QAErE,MAAM,SAAS,GAAG,GAAG,GAAG,QAAQ,CAAC;QACjC,MAAM,SAAS,GAAG,GAAG,GAAG,QAAQ,CAAC;QAEjC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;IAC9C,CAAC,CAAC;IAEF,MAAM,CAAC,GAAG,CAAC,CAAC;IACZ,MAAM,CAAC,GAAG,CAAC,CAAC;IAEZ,MAAM,MAAM,GAAG,EAA0C,CAAC;IAC1D,MAAM,SAAS,GAAG,EAAc,CAAC;IAEjC,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACnH,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAEpH,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,GAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,GAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC;IAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,GAAC,CAAC,CAAC;QAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;YAC/B,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;YAE7B,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE;gBAC3C,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;gBAC1D,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC3D,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC5D,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC5D,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;aAChE;SACJ;KACJ;IAED,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACnB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC7D,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC7B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACxB;IACL,CAAC,CAAC,CAAC;IAEH,8DAA8D;IAC9D,mCAAmC;IACnC,SAAS,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC1C,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC;QACrC,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,GAAC,CAAC,CAAC,CAAC;QACtD,IAAI,oBAAoB,GAAG,CAAC,CAAC;QAC7B,MAAM,aAAa,GAAG,EAAE,CAAC;QACzB,GAAG,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE;YAClC,IAAI,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;gBAClC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC/B,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,EAAE;oBAC/B,oBAAoB,EAAE,CAAC;iBAC1B;aACJ;QACL,CAAC,CAAC,CAAC;QACH,IAAI,oBAAoB,KAAK,EAAE,EAAE;YAC7B,uDAAuD;YACvD,6CAA6C;YAC7C,KAAK,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;gBAChD,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aACpB;YACD,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;SACpC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,MAAa,QAAS,SAAQ,sBAAS;IACnC,YAAY,OAAgB,EAAE,IAAY,EAAE,GAAW,EAAE,OAAyB;QAC9E,IAAI,GAAG,KAAK,OAAO,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;SAAE;QACjF,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,mBAAmB;IACnB,uDAAuD;IACvD,IAAI;IAEJ,IAAI,IAAI;QACJ,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,IAAY,EAAE,QAAiB,EAAE,QAAiB;QACvE,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,EAAS,EAAE,GAAG,EAAE,EAAS,EAAE,CAAC;QACnD,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC1F,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC1F,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;YAC7E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;SAC9D;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;YAC7E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;SAC9D;QACD,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK;QACD,OAAO,KAAK,CAAC,KAAK,CAAC;YACf,WAAW,EAAE,CAAC,GAAG,EAAE,GAAmC,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE;gBAC/E,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;oBACzB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,iDAAiD,GAAG,oBAAoB,CAAC,CAAC;oBAClG,OAAO;iBACV;gBACD,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;oBAC7D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,+CAA+C,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,IAAI,eAAe,CAAC,CAAC;oBACrH,OAAO;iBACV;gBACD,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;gBACjC,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;gBACtC,OAAO,OAAO,CAAC;YACnB,CAAC;YACD,UAAU,EAAE,CAAC,8BAAW,CAAC,MAAM,CAAC;SACnC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,KAAK,cAAc;QACrB,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,cAAc;QACd,OAAO,QAAQ,CAAC,cAAc,CAAC;IACnC,CAAC;IAED,IAAI,CAAC,GAAQ,EAAE,EAAgB,EAAE,GAAkD;QAC/E,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YACnC,MAAM,IAAI,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;SACnD;QACD,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YACxC,mBAAmB;YACnB,OAAO,KAAK,CAAC;SAChB;QACD,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAkC,CAAC;QAC3D,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;YACxF,2BAA2B;YAC3B,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE;YAC1H,wCAAwC;YACxC,OAAO,KAAK,CAAC;SAChB;QAED,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAE,QAAgB,EAAE,GAAW,EAAE,GAAW,EAAE,OAAe,EAAE,EAAE;YACjG,MAAM,QAAQ,GAAG,QAAQ,GAAG,GAAG,CAAC;YAChC,MAAM,QAAQ,GAAG,QAAQ,GAAG,GAAG,CAAC;YAChC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACjF,CAAC,CAAC;QACF,OAAO,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,EAAuC,EAAE,GAA2B,EAAE,OAAyC;QACvH,IAAI,EAAE,YAAY,kCAA0B,EAAE;YAC1C,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;SAC5F;QACD,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;SACzF;QACD,IAAI,EAAE,KAAK,YAAY,EAAE;YACrB,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,EAAE;gBACtG,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;aAC9F;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SAC3B;aACI;YACD,MAAM,IAAI,KAAK,CAAC,kDAAkD,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAChI;IACL,CAAC;IACD;;OAEG;IACH,KAAK,CAAC,MAAM,CACR,GAeC;QAED,MAAM,EAAE,GAAG,YAAY,CAAC;QAExB,cAAc;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnC,IAAI,MAAM,EAAE;YACR,qBAAqB;YACrB,OAAO,MAAM,CAAC;SACjB;QAED,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE;YAC/F,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;SACrG;QACD,MAAM,KAAK,GAAG,IAAI,6BAAe,CAAC,kBAAkB,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAEjE,MAAM,SAAS,GAAG,sBAAsB,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAE/E,KAAK,CAAC,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC;QAEpC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACrC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QACH,MAAM,UAAU,GAAE,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE9C,sBAAsB;QACtB,MAAM,OAAO,GAAG,IAAI,iCAAiB,EAAE,CAAC;QACxC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC;QAC7B,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACrB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3B,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;QAEtB,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAE7B,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ;AA5JD,4BA4JC"} \ No newline at end of file diff --git a/dist/cjs/data-index/index.js.map b/dist/cjs/data-index/index.js.map index 4bf8aaa..ee82eb5 100644 --- a/dist/cjs/data-index/index.js.map +++ b/dist/cjs/data-index/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/data-index/index.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AAKhC,0FALA,sBAAS,OAKA;AAJlB,qDAAiD;AAI7B,8FAJX,8BAAa,OAIW;AAHjC,2CAAuC;AAGJ,yFAH1B,oBAAQ,OAG0B;AAF3C,+CAA2C;AAEE,2FAFpC,wBAAU,OAEoC;AACvD,iDAAoD;AAA3C,kHAAA,iBAAiB,OAAA;AAE1B,sBAAS,CAAC,eAAe,GAAG;IACxB,MAAM,EAAE,sBAAS;IACjB,QAAQ,EAAE,8BAAa;IACvB,GAAG,EAAE,oBAAQ;IACb,KAAK,EAAE,wBAAU;CACpB,CAAC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/data-index/index.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AAKhC,0FALA,sBAAS,OAKA;AAJlB,qDAAiD;AAI7B,8FAJX,8BAAa,OAIW;AAHjC,2CAAuC;AAGJ,yFAH1B,oBAAQ,OAG0B;AAF3C,+CAA2C;AAEE,2FAFpC,wBAAU,OAEoC;AACvD,iDAAoD;AAA3C,kHAAA,iBAAiB,OAAA;AAE1B,sBAAS,CAAC,eAAe,GAAG;IACxB,MAAM,EAAE,sBAAS;IACjB,QAAQ,EAAE,8BAAa;IACvB,GAAG,EAAE,oBAAQ;IACb,KAAK,EAAE,wBAAU;CACpB,CAAC"} \ No newline at end of file diff --git a/dist/cjs/data-index/options.js.map b/dist/cjs/data-index/options.js.map index 8d62fee..e286995 100644 --- a/dist/cjs/data-index/options.js.map +++ b/dist/cjs/data-index/options.js.map @@ -1 +1 @@ -{"version":3,"file":"options.js","sourceRoot":"","sources":["../ts/data-index/options.ts"],"names":[],"mappings":""} \ No newline at end of file +{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/data-index/options.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/cjs/data-index/query-hint.js.map b/dist/cjs/data-index/query-hint.js.map index bf2b233..1078aa9 100644 --- a/dist/cjs/data-index/query-hint.js.map +++ b/dist/cjs/data-index/query-hint.js.map @@ -1 +1 @@ -{"version":3,"file":"query-hint.js","sourceRoot":"","sources":["../ts/data-index/query-hint.ts"],"names":[],"mappings":";;;AAAA,MAAa,cAAc;IACvB,YAAmB,IAAY,EAAS,KAAc;QAAnC,SAAI,GAAJ,IAAI,CAAQ;QAAS,UAAK,GAAL,KAAK,CAAS;IAAI,CAAC;CAC9D;AAFD,wCAEC"} \ No newline at end of file +{"version":3,"file":"query-hint.js","sourceRoot":"","sources":["../../../src/data-index/query-hint.ts"],"names":[],"mappings":";;;AAAA,MAAa,cAAc;IACvB,YAAmB,IAAY,EAAS,KAAc;QAAnC,SAAI,GAAJ,IAAI,CAAQ;QAAS,UAAK,GAAL,KAAK,CAAS;IAAI,CAAC;CAC9D;AAFD,wCAEC"} \ No newline at end of file diff --git a/dist/cjs/data-index/query-results.js.map b/dist/cjs/data-index/query-results.js.map index 4f17bd0..9e21261 100644 --- a/dist/cjs/data-index/query-results.js.map +++ b/dist/cjs/data-index/query-results.js.map @@ -1 +1 @@ -{"version":3,"file":"query-results.js","sourceRoot":"","sources":["../ts/data-index/query-results.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"query-results.js","sourceRoot":"","sources":["../../../src/data-index/query-results.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/data-index/query-stats.js.map b/dist/cjs/data-index/query-stats.js.map index 9d6b0e8..f3d87a7 100644 --- a/dist/cjs/data-index/query-stats.js.map +++ b/dist/cjs/data-index/query-stats.js.map @@ -1 +1 @@ -{"version":3,"file":"query-stats.js","sourceRoot":"","sources":["../ts/data-index/query-stats.ts"],"names":[],"mappings":";;;AACA,MAAa,eAAe;IAWxB,YAAmB,IAAY,EAAS,IAAa,EAAE,KAAK,GAAG,KAAK;QAAjD,SAAI,GAAJ,IAAI,CAAQ;QAAS,SAAI,GAAJ,IAAI,CAAS;QAV9C,YAAO,GAAG,CAAC,CAAC;QACZ,YAAO,GAAG,CAAC,CAAC;QACZ,UAAK,GAAG,EAAuB,CAAC;QAChC,WAAM,GAAG,IAAW,CAAC;QAE5B;;WAEG;QACI,YAAO,GAAG,CAAC,CAAC;QAGf,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,KAAK,EAAE,CAAC;SAChB;IACL,CAAC;IAED,KAAK;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,SAAc,IAAI;QACnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;CACzD;AA3BD,0CA2BC"} \ No newline at end of file +{"version":3,"file":"query-stats.js","sourceRoot":"","sources":["../../../src/data-index/query-stats.ts"],"names":[],"mappings":";;;AACA,MAAa,eAAe;IAWxB,YAAmB,IAAY,EAAS,IAAa,EAAE,KAAK,GAAG,KAAK;QAAjD,SAAI,GAAJ,IAAI,CAAQ;QAAS,SAAI,GAAJ,IAAI,CAAS;QAV9C,YAAO,GAAG,CAAC,CAAC;QACZ,YAAO,GAAG,CAAC,CAAC;QACZ,UAAK,GAAG,EAAuB,CAAC;QAChC,WAAM,GAAG,IAAW,CAAC;QAE5B;;WAEG;QACI,YAAO,GAAG,CAAC,CAAC;QAGf,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,KAAK,EAAE,CAAC;SAChB;IACL,CAAC;IAED,KAAK;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,SAAc,IAAI;QACnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;CACzD;AA3BD,0CA2BC"} \ No newline at end of file diff --git a/dist/cjs/data-index/shared.js.map b/dist/cjs/data-index/shared.js.map index 95422a9..e50b07e 100644 --- a/dist/cjs/data-index/shared.js.map +++ b/dist/cjs/data-index/shared.js.map @@ -1 +1 @@ -{"version":3,"file":"shared.js","sourceRoot":"","sources":["../ts/data-index/shared.ts"],"names":[],"mappings":""} \ No newline at end of file +{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/data-index/shared.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/cjs/detailed-error.js.map b/dist/cjs/detailed-error.js.map index 6a68d29..55a276c 100644 --- a/dist/cjs/detailed-error.js.map +++ b/dist/cjs/detailed-error.js.map @@ -1 +1 @@ -{"version":3,"file":"detailed-error.js","sourceRoot":"","sources":["ts/detailed-error.ts"],"names":[],"mappings":";;;AAAA,qDAAqD;AACrD,MAAa,aAAc,SAAQ,KAAK;IAMpC;;;;;OAKG;IACH,YAAY,IAAY,EAAE,OAAe,EAAE,gBAAuC,IAAI;QAClF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACvC,CAAC;IAED,IAAI,KAAK;QACL,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,IAAI,GAAG,GAAU,IAAI,CAAC;QACtB,OAAM,GAAG,EAAE;YACP,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC7D,GAAG,GAAG,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;SACjE;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,IAAI,MAAM;QACN,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,IAAI,GAAG,GAAU,IAAI,CAAC;QACtB,OAAM,GAAG,EAAE;YACP,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpB,GAAG,GAAG,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;SACjE;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACjD,CAAC;IAED,YAAY,CAAC,IAAY;QACrB,IAAI,GAAG,GAAkB,IAAI,CAAC;QAC9B,OAAO,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,aAAa,EAAE;YAC3C,GAAG,GAAG,GAAG,CAAC,aAA8B,CAAC;SAC5C;QACD,OAAO,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;QACzB,4CAA4C;QAC5C,oCAAoC;IACxC,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,GAAU,EAAE,IAAY;QACxC,IAAI,CAAC,CAAC,GAAG,YAAY,aAAa,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;SAAE;QACtD,OAAO,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;CACJ;AApDD,sCAoDC"} \ No newline at end of file +{"version":3,"file":"detailed-error.js","sourceRoot":"","sources":["../../src/detailed-error.ts"],"names":[],"mappings":";;;AAAA,qDAAqD;AACrD,MAAa,aAAc,SAAQ,KAAK;IAMpC;;;;;OAKG;IACH,YAAY,IAAY,EAAE,OAAe,EAAE,gBAAuC,IAAI;QAClF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACvC,CAAC;IAED,IAAI,KAAK;QACL,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,IAAI,GAAG,GAAU,IAAI,CAAC;QACtB,OAAM,GAAG,EAAE;YACP,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC7D,GAAG,GAAG,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;SACjE;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,IAAI,MAAM;QACN,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,IAAI,GAAG,GAAU,IAAI,CAAC;QACtB,OAAM,GAAG,EAAE;YACP,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpB,GAAG,GAAG,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;SACjE;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACjD,CAAC;IAED,YAAY,CAAC,IAAY;QACrB,IAAI,GAAG,GAAkB,IAAI,CAAC;QAC9B,OAAO,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,aAAa,EAAE;YAC3C,GAAG,GAAG,GAAG,CAAC,aAA8B,CAAC;SAC5C;QACD,OAAO,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;QACzB,4CAA4C;QAC5C,oCAAoC;IACxC,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,GAAU,EAAE,IAAY;QACxC,IAAI,CAAC,CAAC,GAAG,YAAY,aAAa,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;SAAE;QACtD,OAAO,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;CACJ;AApDD,sCAoDC"} \ No newline at end of file diff --git a/dist/cjs/geohash.js.map b/dist/cjs/geohash.js.map index bb8e053..3561475 100644 --- a/dist/cjs/geohash.js.map +++ b/dist/cjs/geohash.js.map @@ -1 +1 @@ -{"version":3,"file":"geohash.js","sourceRoot":"","sources":["ts/geohash.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"geohash.js","sourceRoot":"","sources":["../../src/geohash.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/index.js.map b/dist/cjs/index.js.map index 485026b..0a9841b 100644 --- a/dist/cjs/index.js.map +++ b/dist/cjs/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["ts/index.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;EAiBE;AACF,6CAoBsB;AAnBlB,4GAAA,YAAY,OAAA;AACZ,6GAAA,aAAa,OAAA;AACb,kHAAA,kBAAkB,OAAA;AAClB,mHAAA,mBAAmB,OAAA;AACnB,2GAAA,WAAW,OAAA;AACX,iHAAA,iBAAiB,OAAA;AACjB,6GAAA,aAAa,OAAA;AACb,4GAAA,YAAY,OAAA;AAQZ,gHAAA,gBAAgB,OAAA;AAChB,kGAAA,EAAE,OAAA;AACF,2GAAA,WAAW,OAAA;AACX,4GAAA,YAAY,OAAA;AAGhB,iDAKyB;AAJrB,wGAAA,OAAO,OAAA;AACP,qHAAA,oBAAoB,OAAA;AACpB,qHAAA,oBAAoB,OAAA;AACpB,yHAAA,wBAAwB,OAAA;AAG5B,2CAA0D;AAAjD,gHAAA,sBAAsB,OAAA;AAC/B,2CAAyD;AAAhD,+GAAA,qBAAqB,OAAA;AAC9B,yCAAuD;AAA9C,6GAAA,oBAAoB,OAAA;AAE7B,2CAM0B;AALtB,kHAAA,wBAAwB,OAAA;AACxB,+GAAA,qBAAqB,OAAA;AACrB,8GAAA,oBAAoB,OAAA;AACpB,4GAAA,kBAAkB,OAAA;AAClB,oHAAA,0BAA0B,OAAA;AAG9B,qCAKmB;AAJf,0GAAA,eAAe,OAAA;AAGf,gHAAA,qBAAqB,OAAA"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;EAiBE;AACF,6CAoBsB;AAnBlB,4GAAA,YAAY,OAAA;AACZ,6GAAA,aAAa,OAAA;AACb,kHAAA,kBAAkB,OAAA;AAClB,mHAAA,mBAAmB,OAAA;AACnB,2GAAA,WAAW,OAAA;AACX,iHAAA,iBAAiB,OAAA;AACjB,6GAAA,aAAa,OAAA;AACb,4GAAA,YAAY,OAAA;AAQZ,gHAAA,gBAAgB,OAAA;AAChB,kGAAA,EAAE,OAAA;AACF,2GAAA,WAAW,OAAA;AACX,4GAAA,YAAY,OAAA;AAGhB,iDAKyB;AAJrB,wGAAA,OAAO,OAAA;AACP,qHAAA,oBAAoB,OAAA;AACpB,qHAAA,oBAAoB,OAAA;AACpB,yHAAA,wBAAwB,OAAA;AAG5B,2CAA0D;AAAjD,gHAAA,sBAAsB,OAAA;AAC/B,2CAAyD;AAAhD,+GAAA,qBAAqB,OAAA;AAC9B,yCAAuD;AAA9C,6GAAA,oBAAoB,OAAA;AAE7B,2CAM0B;AALtB,kHAAA,wBAAwB,OAAA;AACxB,+GAAA,qBAAqB,OAAA;AACrB,8GAAA,oBAAoB,OAAA;AACpB,4GAAA,kBAAkB,OAAA;AAClB,oHAAA,0BAA0B,OAAA;AAG9B,qCAKmB;AAJf,0GAAA,eAAe,OAAA;AAGf,gHAAA,qBAAqB,OAAA"} \ No newline at end of file diff --git a/dist/cjs/ipc/browser.js.map b/dist/cjs/ipc/browser.js.map index 708ca4d..51acb3b 100644 --- a/dist/cjs/ipc/browser.js.map +++ b/dist/cjs/ipc/browser.js.map @@ -1 +1 @@ -{"version":3,"file":"browser.js","sourceRoot":"","sources":["../ts/ipc/browser.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/ipc/browser.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/ipc/index.js.map b/dist/cjs/ipc/index.js.map index 69df71d..44b94a0 100644 --- a/dist/cjs/ipc/index.js.map +++ b/dist/cjs/ipc/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/ipc/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ipc/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/ipc/ipc.js.map b/dist/cjs/ipc/ipc.js.map index 161c363..b0fea32 100644 --- a/dist/cjs/ipc/ipc.js.map +++ b/dist/cjs/ipc/ipc.js.map @@ -1 +1 @@ -{"version":3,"file":"ipc.js","sourceRoot":"","sources":["../ts/ipc/ipc.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ipc.js","sourceRoot":"","sources":["../../../src/ipc/ipc.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/ipc/remote.js.map b/dist/cjs/ipc/remote.js.map index 651d468..db62859 100644 --- a/dist/cjs/ipc/remote.js.map +++ b/dist/cjs/ipc/remote.js.map @@ -1 +1 @@ -{"version":3,"file":"remote.js","sourceRoot":"","sources":["../ts/ipc/remote.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"remote.js","sourceRoot":"","sources":["../../../src/ipc/remote.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/node-address.js.map b/dist/cjs/node-address.js.map index 638d643..4e45b9e 100644 --- a/dist/cjs/node-address.js.map +++ b/dist/cjs/node-address.js.map @@ -1 +1 @@ -{"version":3,"file":"node-address.js","sourceRoot":"","sources":["ts/node-address.ts"],"names":[],"mappings":";;;AAAA,MAAa,WAAW;IACpB,YAA4B,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;IAAG,CAAC;IAE5C,QAAQ;QACJ,OAAO,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAoB;QACvB,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC;IACtC,CAAC;CACJ;AAbD,kCAaC;AAED,MAAa,kBAAmB,SAAQ,WAAW;IAC/C,YAAY,IAAY;QACpB,KAAK,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,QAAQ;QACJ,OAAO,KAAK,IAAI,CAAC,IAAI,aAAa,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAoB;QACvB,OAAO,OAAO,YAAY,kBAAkB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC;IAC/E,CAAC;CACJ;AAfD,gDAeC"} \ No newline at end of file +{"version":3,"file":"node-address.js","sourceRoot":"","sources":["../../src/node-address.ts"],"names":[],"mappings":";;;AAAA,MAAa,WAAW;IACpB,YAA4B,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;IAAG,CAAC;IAE5C,QAAQ;QACJ,OAAO,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAoB;QACvB,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC;IACtC,CAAC;CACJ;AAbD,kCAaC;AAED,MAAa,kBAAmB,SAAQ,WAAW;IAC/C,YAAY,IAAY;QACpB,KAAK,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,QAAQ;QACJ,OAAO,KAAK,IAAI,CAAC,IAAI,aAAa,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAoB;QACvB,OAAO,OAAO,YAAY,kBAAkB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC;IAC/E,CAAC;CACJ;AAfD,gDAeC"} \ No newline at end of file diff --git a/dist/cjs/node-cache.js.map b/dist/cjs/node-cache.js.map index 6a9c1c2..4215cb4 100644 --- a/dist/cjs/node-cache.js.map +++ b/dist/cjs/node-cache.js.map @@ -1 +1 @@ -{"version":3,"file":"node-cache.js","sourceRoot":"","sources":["ts/node-cache.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"node-cache.js","sourceRoot":"","sources":["../../src/node-cache.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/node-changes.js.map b/dist/cjs/node-changes.js.map index c1e09b8..dfb39a1 100644 --- a/dist/cjs/node-changes.js.map +++ b/dist/cjs/node-changes.js.map @@ -1 +1 @@ -{"version":3,"file":"node-changes.js","sourceRoot":"","sources":["ts/node-changes.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"node-changes.js","sourceRoot":"","sources":["../../src/node-changes.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/node-errors.js.map b/dist/cjs/node-errors.js.map index 34d14f0..ca12fa3 100644 --- a/dist/cjs/node-errors.js.map +++ b/dist/cjs/node-errors.js.map @@ -1 +1 @@ -{"version":3,"file":"node-errors.js","sourceRoot":"","sources":["ts/node-errors.ts"],"names":[],"mappings":";;;AAAA,MAAa,iBAAkB,SAAQ,KAAK;CAAG;AAA/C,8CAA+C;AAC/C,MAAa,iBAAkB,SAAQ,KAAK;CAAG;AAA/C,8CAA+C"} \ No newline at end of file +{"version":3,"file":"node-errors.js","sourceRoot":"","sources":["../../src/node-errors.ts"],"names":[],"mappings":";;;AAAA,MAAa,iBAAkB,SAAQ,KAAK;CAAG;AAA/C,8CAA+C;AAC/C,MAAa,iBAAkB,SAAQ,KAAK;CAAG;AAA/C,8CAA+C"} \ No newline at end of file diff --git a/dist/cjs/node-info.js.map b/dist/cjs/node-info.js.map index 2ec96c9..6ea03fc 100644 --- a/dist/cjs/node-info.js.map +++ b/dist/cjs/node-info.js.map @@ -1 +1 @@ -{"version":3,"file":"node-info.js","sourceRoot":"","sources":["ts/node-info.ts"],"names":[],"mappings":";;;AAAA,yDAAsD;AACtD,+CAAwC;AAGxC,MAAa,QAAQ;IAWjB,YAAY,IAAuB;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAElC,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,KAAK,WAAW,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,EAAE;YACzG,MAAM,QAAQ,GAAG,uBAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,OAAO,QAAQ,CAAC,GAAG,KAAK,QAAQ,EAAE;gBAClC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC;aAC7B;iBACI;gBACD,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;aAC3B;SACJ;QACD,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE;YACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACtB;IACL,CAAC;IAED,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,aAAa;QACb,OAAO,IAAA,mCAAgB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,OAAO,IAAI,IAAI,CAAC,IAAI,iBAAiB,CAAC;SACzC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,OAAO,IAAI,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,aAAa,cAAc,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACzF;aACI;YACD,OAAO,IAAI,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,aAAa,eAAe,IAAI,CAAC,KAAK,EAAE,CAAC;SAC7E;IACL,CAAC;CACJ;AAtDD,4BAsDC"} \ No newline at end of file +{"version":3,"file":"node-info.js","sourceRoot":"","sources":["../../src/node-info.ts"],"names":[],"mappings":";;;AAAA,yDAAsD;AACtD,+CAAwC;AAGxC,MAAa,QAAQ;IAWjB,YAAY,IAAuB;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAElC,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,KAAK,WAAW,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,EAAE;YACzG,MAAM,QAAQ,GAAG,uBAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,OAAO,QAAQ,CAAC,GAAG,KAAK,QAAQ,EAAE;gBAClC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC;aAC7B;iBACI;gBACD,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;aAC3B;SACJ;QACD,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE;YACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACtB;IACL,CAAC;IAED,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,aAAa;QACb,OAAO,IAAA,mCAAgB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,OAAO,IAAI,IAAI,CAAC,IAAI,iBAAiB,CAAC;SACzC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,OAAO,IAAI,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,aAAa,cAAc,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACzF;aACI;YACD,OAAO,IAAI,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,aAAa,eAAe,IAAI,CAAC,KAAK,EAAE,CAAC;SAC7E;IACL,CAAC;CACJ;AAtDD,4BAsDC"} \ No newline at end of file diff --git a/dist/cjs/node-lock.js.map b/dist/cjs/node-lock.js.map index 3b7354e..29ddfc7 100644 --- a/dist/cjs/node-lock.js.map +++ b/dist/cjs/node-lock.js.map @@ -1 +1 @@ -{"version":3,"file":"node-lock.js","sourceRoot":"","sources":["ts/node-lock.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"node-lock.js","sourceRoot":"","sources":["../../src/node-lock.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/node-transaction.js.map b/dist/cjs/node-transaction.js.map index b3ccdf2..f8426cd 100644 --- a/dist/cjs/node-transaction.js.map +++ b/dist/cjs/node-transaction.js.map @@ -1 +1 @@ -{"version":3,"file":"node-transaction.js","sourceRoot":"","sources":["ts/node-transaction.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"node-transaction.js","sourceRoot":"","sources":["../../src/node-transaction.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/node-value-types.js.map b/dist/cjs/node-value-types.js.map index 332ea68..8921107 100644 --- a/dist/cjs/node-value-types.js.map +++ b/dist/cjs/node-value-types.js.map @@ -1 +1 @@ -{"version":3,"file":"node-value-types.js","sourceRoot":"","sources":["ts/node-value-types.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"node-value-types.js","sourceRoot":"","sources":["../../src/node-value-types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/node.js.map b/dist/cjs/node.js.map index d60d127..6b38636 100644 --- a/dist/cjs/node.js.map +++ b/dist/cjs/node.js.map @@ -1 +1 @@ -{"version":3,"file":"node.js","sourceRoot":"","sources":["ts/node.ts"],"names":[],"mappings":";;;AAAA,yDAAiD;AAEjD,MAAa,IAAI;IACb,MAAM,KAAK,WAAW;QAClB,OAAO,8BAAW,CAAC;IACvB,CAAC;CACJ;AAJD,oBAIC"} \ No newline at end of file +{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/node.ts"],"names":[],"mappings":";;;AAAA,yDAAiD;AAEjD,MAAa,IAAI;IACb,MAAM,KAAK,WAAW;QAClB,OAAO,8BAAW,CAAC;IACvB,CAAC;CACJ;AAJD,oBAIC"} \ No newline at end of file diff --git a/dist/cjs/not-supported.js b/dist/cjs/not-supported.js new file mode 100644 index 0000000..20b1bd0 --- /dev/null +++ b/dist/cjs/not-supported.js @@ -0,0 +1,2 @@ +// Not supported in current environment +//# sourceMappingURL=not-supported.js.map \ No newline at end of file diff --git a/dist/cjs/not-supported.js.map b/dist/cjs/not-supported.js.map new file mode 100644 index 0000000..731a279 --- /dev/null +++ b/dist/cjs/not-supported.js.map @@ -0,0 +1 @@ +{"version":3,"file":"not-supported.js","sourceRoot":"","sources":["../../src/not-supported.ts"],"names":[],"mappings":"AAAA,uCAAuC"} \ No newline at end of file diff --git a/dist/cjs/promise-fs/browser.js.map b/dist/cjs/promise-fs/browser.js.map index 4ac6afd..dafff06 100644 --- a/dist/cjs/promise-fs/browser.js.map +++ b/dist/cjs/promise-fs/browser.js.map @@ -1 +1 @@ -{"version":3,"file":"browser.js","sourceRoot":"","sources":["../ts/promise-fs/browser.ts"],"names":[],"mappings":";;;AAAA,MAAsB,GAAG;IACrB,MAAM,KAAK,aAAa,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;IAC5C,MAAM,KAAK,EAAE,KAAW,OAAO,IAAI,CAAC,CAAC,CAAC;CACzC;AAHD,kBAGC"} \ No newline at end of file +{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/promise-fs/browser.ts"],"names":[],"mappings":";;;AAAA,MAAsB,GAAG;IACrB,MAAM,KAAK,aAAa,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;IAC5C,MAAM,KAAK,EAAE,KAAW,OAAO,IAAI,CAAC,CAAC,CAAC;CACzC;AAHD,kBAGC"} \ No newline at end of file diff --git a/dist/cjs/promise-fs/index.js.map b/dist/cjs/promise-fs/index.js.map index 9ae0b4b..2cad5ca 100644 --- a/dist/cjs/promise-fs/index.js.map +++ b/dist/cjs/promise-fs/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/promise-fs/index.ts"],"names":[],"mappings":";;;AAAA,yBAAyB;AAGzB,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AAEzK,MAAsB,GAAG;IACrB,MAAM,KAAK,aAAa,KAAK,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAI,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7E,MAAM,KAAK,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;IAC9B,MAAM,KAAK,KAAK;QACZ,OAAO;YACH,4FAA4F;YAC5F,IAAI,MAAM,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC;YAC5B,0EAA0E;YAC1E,IAAI,eAAe,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;YACtC,yGAAyG;YACzG,IAAI,aAAa,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;YACpC,mFAAmF;YACnF,IAAI,sBAAsB,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;YAC9C,iHAAiH;YACjH,IAAI,iBAAiB,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;YACxC,8HAA8H;YAC9H,IAAI,wBAAwB,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;YAChD,gGAAgG;YAChG,IAAI,IAAI,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC;YAC1B,4GAA4G;YAC5G,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;YACnC,shBAAshB;YACthB,IAAI,uBAAuB,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;YAC/C,wHAAwH;YACxH,IAAI,KAAK,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC;YAC3B,yEAAyE;YACzE,IAAI,cAAc,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;YACrC,qIAAqI;YACrI,IAAI,gCAAgC,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;YACvD,sGAAsG;YACtG,IAAI,qBAAqB,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;SAChD,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,IAA+B;QACzC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;gBACrB,OAAO,CAAC,MAAM,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,CAAC,IAA+B,EAAE,KAAoB,EAAE,IAAY;QAC3E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE;gBACnC,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,CAAC,EAAE,CAAC,CAAC;iBAAE;YACzB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,EAAU;QACnB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;gBACjB,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,EAAE,CAAC;iBAAE;YACvB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAK,CAAC,EAAU,EAAE,MAAkC,EAAE,MAAc,EAAE,MAAc,EAAE,QAAgB;QACzG,kFAAkF;QAClF,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YAAE,MAAM,GAAG,CAAC,CAAC;SAAE;QAClD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YAAE,MAAM,GAAG,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC;SAAE;QAC3E,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;YAAE,QAAQ,GAAG,IAAI,CAAC;SAAE;QAEzD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE;gBACzE,IAAI,GAAG,EAAE;oBACJ,GAAW,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;oBAC7D,MAAM,CAAC,GAAG,CAAC,CAAC;iBACf;qBACI;oBAAE,OAAO,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;iBAAE;YAC/C,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,SAAS,CAAC,IAAqC,EAAE,IAAuC,EAAE,OAAqF;QAClL,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE;gBACpC,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,EAAE,CAAC;iBAAE;YACvB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,IAAI,CAAuC,EAAU,EAAE,MAAS,EAAE,MAAc,EAAE,MAAc,EAAE,QAAgB;QACrH,iFAAiF;QACjF,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YAAE,MAAM,GAAG,CAAC,CAAC;SAAE;QAClD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YAAE,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;SAAE;QAClE,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;YAAE,QAAQ,GAAG,IAAI,CAAC;SAAE;QAEzD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE;gBACrE,IAAI,GAAG,EAAE;oBACJ,GAAW,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;oBAC7D,MAAM,CAAC,GAAG,CAAC,CAAC;iBACf;qBACI;oBAAE,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;iBAAE;YAC5C,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAsC,EAAE,OAAuE;QAC3H,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;gBACrC,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,CAAC,IAAI,CAAC,CAAC;iBAAE;YAC3B,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,IAA8B,EAAE,GAAG,GAAG,CAAC;QACnD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC3B,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,EAAE,CAAC;iBAAE;YACvB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,SAAS,CAAC,EAAU,EAAE,GAAG,GAAG,CAAC;QAChC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC1B,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,EAAE,CAAC;iBAAE;YACvB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,CAAC,IAA8B,EAAE,OAA4E;QACvH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;gBACrC,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,CAAC,KAAK,CAAC,CAAC;iBAAE;YAC5B,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,CAAC,IAA8B,EAAE,OAAsD;QAC/F,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC5B,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,EAAE,CAAC;iBAAE;YACvB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,IAA+B;QACzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;gBACpB,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,EAAE,CAAC;iBAAE;YACvB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,IAA+B;QACrC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,IAA+B,EAAE,OAA2E;QACrH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,MAAM,QAAQ,GAAG,CAAC,GAAU,EAAE,EAAE;gBAC5B,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,EAAE,CAAC;iBAAE;YACvB,CAAC,CAAC;YACF,MAAM,kBAAkB,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,MAAK,IAAI,CAAC;YACvD,IAAI,WAAW,CAAC,KAAK,GAAG,EAAE,EAAE;gBACxB,6CAA6C;gBAC7C,IAAI,kBAAkB,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;iBAAE;gBACxG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;aAC5B;iBACI,IAAI,kBAAkB,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,KAAK,EAAE,IAAI,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE;gBAC9G,mFAAmF;gBACnF,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;aAClC;iBACI;gBACD,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;aACrC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,MAAM,CAAC,OAAkC,EAAE,OAAiC;QAC/E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAChC,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,EAAE,CAAC;iBAAE;YACvB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,CAAC,IAA8B,EAAE,OAA8B;QACtE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;gBAClC,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,CAAC,KAAK,CAAC,CAAC;iBAAE;YAC5B,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,EAAU;QACnB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;gBACjB,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,EAAE,CAAC;iBAAE;YACvB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,EAAU;QACvB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;gBACrB,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,EAAE,CAAC;iBAAE;YACvB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAnVD,kBAmVC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/promise-fs/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/query.js.map b/dist/cjs/query.js.map index aaa971d..a0586cf 100644 --- a/dist/cjs/query.js.map +++ b/dist/cjs/query.js.map @@ -1 +1 @@ -{"version":3,"file":"query.js","sourceRoot":"","sources":["ts/query.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/quicksort.js.map b/dist/cjs/quicksort.js.map index 8dd54d8..aeeb49c 100644 --- a/dist/cjs/quicksort.js.map +++ b/dist/cjs/quicksort.js.map @@ -1 +1 @@ -{"version":3,"file":"quicksort.js","sourceRoot":"","sources":["ts/quicksort.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"quicksort.js","sourceRoot":"","sources":["../../src/quicksort.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/storage/binary/index.js.map b/dist/cjs/storage/binary/index.js.map index 7f70a4d..e7f8dd6 100644 --- a/dist/cjs/storage/binary/index.js.map +++ b/dist/cjs/storage/binary/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../ts/storage/binary/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/storage/binary/index.ts"],"names":[],"mappings":";;;AAAA,yBAAyB;AACzB,iDAAuC;AACvC,+CAA4F;AAC5F,qDAAmE;AACnE,iDAAmD;AACnD,iDAA6C;AAC7C,2CAA6C;AAC7C,8CAA8C;AAC9C,mDAAsD;AACtD,oCAAgH;AAChH,6DAAqD;AACrD,uCAA8E;AAC9E,yCAAiD;AAGjD,+CAA2C;AAE3C,MAAM,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,oBAAK,CAAC;AACzI,MAAM,8BAA8B,GAAG,KAAK,CAAC,CAAC,6FAA6F;AAO3I,MAAa,sBAAuB,SAAQ,uBAAe;IA4BvD,YAAY,WAA4C,EAAE;QACtD,KAAK,CAAC,QAAQ,CAAC,CAAC;QA5BpB;;;WAGG;QACH,eAAU,GAAG,GAAG,CAAC;QAEjB;;;WAGG;QACH,aAAQ,GAAG,IAAI,CAAC;QAEhB;;WAEG;QACH,SAAI,GAAoC,MAAM,CAAC;QAO/C;;WAEG;QACH,SAAI,GAAG,KAAK,CAAC;QAIT,IAAI,OAAO,QAAQ,CAAC,UAAU,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;SAAE;QACvF,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;SAAE;QACjF,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;SAAE;QACrE,IAAI,CAAC,YAAY,GAAG,IAAI,6BAA6B,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACjF,CAAC;CACJ;AAnCD,wDAmCC;AAED,MAAM,6BAA6B;IAmB/B;;;;;;;;;OASG;IACH,YAAY,WAAmD,EAAE;QA3BjE;;;WAGG;QACH,QAAG,GAAG,KAAK,CAAC;QAEZ;;;WAGG;QACH,WAAM,GAAG,EAAE,CAAC;QAEZ;;WAEG;QACH,WAAM,GAAG,KAAK,CAAC;QAaX,IAAI,OAAO,QAAQ,CAAC,GAAG,KAAK,SAAS,EAAE;YAAE,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;SAAE;QACnE,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;SAAE;QAC3E,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE;YAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;SAAE;IAChF,CAAC;CACJ;AAED,MAAa,cAAe,SAAQ,eAAO;IAkBvC;;OAEG;IACH,YAAY,IAAY,EAAE,QAAgC,EAAE,GAAe;QACvE,OAAO,CAAC,MAAM,CAAC,QAAQ,YAAY,sBAAsB,EAAE,wDAAwD,CAAC,CAAC;QACrH,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QAVvB,WAAM,GAAG,KAAK,CAAC;QAGvB,cAAS,GAAc,IAAI,sBAAS,EAAE,CAAC;QASnC,IAAI,QAAQ,CAAC,kBAAkB,GAAG,EAAE,EAAE;YAClC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC,CAAC,mQAAmQ;SACtU;QACD,IAAI,QAAQ,CAAC,UAAU,GAAG,KAAK,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC,4DAA4D;SAC1H;QACD,IAAI,QAAQ,CAAC,QAAQ,GAAG,KAAK,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC,CAAC,oEAAoE;SAChI;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC,qFAAqF;QAC/G,IAAI,CAAC,KAAK,GAAG;YACT,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,CAAC;YACR,SAAS,EAAE,CAAC;YACZ,YAAY,EAAE,CAAC;SAClB,CAAC;QAEF,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,YAAY,CAAC,GAAG,KAAK,IAAI,EAAE;YAC5D,2CAA2C;YAC3C,MAAM,UAAU,GAAG,IAAI,sBAAsB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;YAC7J,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;SAChF;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,8BAA8B;QAC9B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAC,OAAO,EAAC,EAAE;YACnC,qDAAqD;YAErD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,qCAAqC,CAAC,CAAC;YACzE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAC7B,MAAM,KAAK,GAAG,CAAC,MAAW,EAAE,EAAE;gBAC1B,iHAAiH;gBACjH,+BAA+B;gBAC/B,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC3C,CAAC,CAAC;YACF,IAAI;gBACA,QAAQ,OAAO,CAAC,IAAI,EAAE;oBAClB,gDAAgD;oBAChD,KAAK,cAAc,CAAC,CAAC;wBACjB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;wBAC5D,OAAO,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;qBAC1C;oBACD,KAAK,aAAa,CAAC,CAAC;wBAChB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;wBACjC,OAAO,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;qBAC9B;oBACD,kCAAkC;oBAClC,KAAK,SAAS,CAAC,CAAC;wBACZ,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;wBAC7C,OAAO,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;qBACrC;oBACD,qBAAqB;oBACrB,0DAA0D;oBAC1D,6DAA6D;oBAC7D,uCAAuC;oBACvC,KAAK,cAAc,CAAC,CAAC;wBACjB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;wBACpF,OAAO,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;qBACxD;oBACD,KAAK,cAAc,CAAC,CAAC;wBACjB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;wBACrF,IAAI,CAAC,KAAK,EAAE;4BAAE,OAAO,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,OAAO,CAAC,QAAQ,YAAY,EAAE,CAAC,CAAC;yBAAE;wBAC3F,MAAM,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;wBACjF,OAAO,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;qBAC9B;oBACD,OAAO,CAAC,CAAC;wBACL,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;qBAC5D;iBACJ;aACJ;YACD,OAAM,GAAG,EAAE;gBACP,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;aAC7C;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE;YAClC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;YAClC,QAAO,YAAY,CAAC,IAAI,EAAE;gBACtB,KAAK,aAAa,CAAC,CAAC;oBAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC;oBACrD,MAAM;iBACT;gBACD,KAAK,aAAa,CAAC,CAAC;oBAChB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;iBAC9D;gBACD,KAAK,cAAc,CAAC,CAAC;oBACjB,MAAM,QAAQ,GAAG,IAAI,0BAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;oBACvD,QAAQ,CAAC,OAAO,GAAG,IAAI,gCAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBACpH,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;iBACjD;gBACD,KAAK,kBAAkB,CAAC,CAAC;oBACrB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;iBACrG;gBACD,KAAK,eAAe,CAAC,CAAC;oBAClB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;iBAClD;gBACD,KAAK,eAAe,CAAC,CAAC;oBAClB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;iBACrD;gBACD,OAAO,CAAC,CAAC;oBACL,MAAM,IAAI,KAAK,CAAC,6BAA6B,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC;iBACtE;aACJ;QACL,CAAC,CAAC,CAAC;QAEH,wBAAwB;QAExB,sBAAsB;QACtB,MAAM,GAAG,GAAG;YACR,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;YAC9B,IAAI,MAAM,KAAK,OAAO,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;YACnC,SAAS,EAAE,CAAC;YACZ,IAAI,EAAE,EAAc;SACvB,CAAC;QACF,IAAI,CAAC,GAAG,GAAG;YACP,IAAI,SAAS,KAAK,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;YACzC,IAAI,MAAM,KAAK,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;YACnC,IAAI,SAAS,KAAK,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;YACzC,IAAI,IAAI,KAAK,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAE/B,QAAQ,EAAE,CAAC,GAAW,EAAE,EAAE;gBACtB,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;oBACrC,OAAO,CAAC,CAAC,CAAC;iBACb;gBACD,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;oBACtB,OAAO,CAAC,CAAC,CAAC,CAAC,oDAAoD;iBAClE;gBACD,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAClC,IAAI,KAAK,GAAG,CAAC,EAAE;oBACX,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;wBACpB,8GAA8G;wBAC9G,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;6BACzC,IAAI,CAAC,MAAM,CAAC,EAAE;4BACX,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,yBAAyB;wBAC3D,CAAC,CAAC,CAAC;wBACP,OAAO,CAAC,CAAC,CAAC;qBACb;oBACD,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC/B,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;wBACnB,qBAAqB;wBACrB,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;qBAClE;iBACJ;qBACI;oBACD,OAAO,KAAK,CAAC;iBAChB;gBACD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAAQ,EAAE,EAAE;oBAChC,uEAAuE;oBACvE,oHAAoH;oBACpH,4GAA4G;oBAC5G,uDAAuD;oBACvD,MAAM,IAAI,KAAK,CAAC,mDAAmD,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;oBAClF,qCAAqC;oBACrC,cAAc;gBAClB,CAAC,CAAC,CAAC;gBACH,OAAO,KAAK,CAAC;YACjB,CAAC;YAED,KAAK,EAAE,KAAK,IAAI,EAAE;gBACd,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;oBACpB,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;iBAC1F;gBACD,qEAAqE;gBACrE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACtC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvC,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACrC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAExB,uDAAuD;oBACvD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;oBACjC,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC;oBAEpC,IAAI,KAAK,GAAG,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE;wBACjC,MAAM,IAAI,KAAK,CAAC,gDAAgD,GAAG,CAAC,MAAM,gDAAgD,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;qBAChJ;oBAED,wBAAwB;oBACxB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;oBAChC,KAAK,EAAE,CAAC;oBAER,UAAU;oBACV,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;oBACxB,KAAK,IAAI,SAAS,CAAC;iBACtB;gBACD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAI,sEAAsE;gBAC9H,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;gBAEtB,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;YAC/D,CAAC;YAED,IAAI,EAAE,KAAK,IAAI,EAAE;gBACb,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACtC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,gBAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;oBAC7F,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;oBACvD,MAAM,GAAG,CAAC;gBACd,CAAC,CAAC,CAAC;gBAEH,0BAA0B;gBAC1B,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;gBACrD,MAAM,IAAI,GAAG,EAAE,CAAC;gBAChB,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,IAAI,SAAS,GAAG,CAAC,CAAC;gBAClB,OAAM,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE;oBAC1C,KAAK,EAAE,CAAC;oBACR,4BAA4B;oBAC5B,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;oBAC7D,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;oBACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACf,KAAK,IAAI,SAAS,CAAC;iBACtB;gBACD,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;gBACtB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;gBAChB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,MAAM,eAAe,CAAC,QAAQ,CAAC,yBAAU,CAAC,IAAI,CAAC,CAAC,CAAC;gBACtF,0BAA0B;gBAC1B,OAAO,IAAI,CAAC;YAChB,CAAC;SACJ,CAAC;QAEF,8CAA8C;QAC9C,MAAM,GAAG,GAAG;YACR,IAAI,SAAS,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;YACjC,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,CAAC;YACZ,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,EAA4B;YACpC,YAAY,EAAE,GAAG,EAAE;gBACf,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;oBAAE,OAAO,EAAE,CAAC;iBAAE;gBACtC,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC;SACJ,CAAC;QACF,IAAI,CAAC,GAAG,GAAG;YACP,IAAI,SAAS,KAAK,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;YACzC,IAAI,MAAM,KAAK,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;YACnC,IAAI,SAAS,KAAK,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;YACzC,IAAI,KAAK,KAAK,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YACjC,IAAI,MAAM,KAAK,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;YAEnC,IAAI,SAAS,KAAK,OAAO,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;YAE9C,QAAQ,EAAE,KAAK,EAAE,eAAuB,EAAkC,EAAE;gBACxE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;oBACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;oBAC9F,OAAO,MAAM,CAAC,UAAU,CAAC;iBAC5B;gBACD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;oBACrB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;iBACzC;gBACD,0EAA0E;gBAC1E,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAC9C,MAAM,UAAU,GAA0B,EAAE,CAAC;gBAC7C,IAAI,SAAS,GAAG,KAAK,CAAC;gBACtB,MAAM,GAAG,GAAG,KAAK,EAAE,OAAe,EAAE,EAAE;oBAClC,uHAAuH;oBACvH,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oBAChC,OAAO,UAAU,CAAC;gBACtB,CAAC,CAAC;gBAEF,IAAI,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACpE,OAAO,SAAS,GAAG,eAAe,EAAE;oBAChC,iEAAiE;oBACjE,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC;oBAC5B,GAAG,CAAC,KAAK,EAAE,CAAC;oBACZ,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC;oBACpE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC1B,SAAS,IAAI,cAAc,CAAC;oBAC5B,SAAS,GAAG,IAAI,CAAC;iBACpB;gBAED,IAAI,eAAe,IAAI,cAAc,EAAE;oBACnC,mBAAmB;oBACnB,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,KAAK,eAAe,CAAC,CAAC;oBAClE,IAAI,CAAC,EAAE;wBACH,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;wBAChF,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBAChC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBACxB,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC;qBAC7B;oBAED,2BAA2B;oBAC3B,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC;oBAC5D,IAAI,CAAC,EAAE;wBACH,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;wBAChF,CAAC,CAAC,KAAK,IAAI,eAAe,CAAC;wBAC3B,OAAO,GAAG,CAAC,eAAe,CAAC,CAAC;qBAC/B;iBACJ;gBAED,qDAAqD;gBACrD,mFAAmF;gBACnF,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAE;oBACjD,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC;oBAC3B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC;oBAC3B,IAAI,EAAE,GAAG,EAAE,EAAE;wBAAE,OAAO,CAAC,CAAC;qBAAE;oBAC1B,IAAI,EAAE,GAAG,EAAE,EAAE;wBAAE,OAAO,CAAC,CAAC,CAAC;qBAAE;oBAC3B,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE;wBAAE,OAAO,CAAC,CAAC,CAAC;qBAAE;oBACnC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE;wBAAE,OAAO,CAAC,CAAC;qBAAE;oBAClC,OAAO,CAAC,CAAC;gBACb,CAAC,CAAC,CAAC;gBAEH,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG;oBACT,MAAM,EAAE,EAAuB;oBAC/B,YAAY,EAAE,CAAC;oBACf,UAAU,EAAE,CAAC;oBACb,gBAAgB,EAAE,CAAC;iBACtB,CAAC;gBACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,YAAY,GAAG,eAAe,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,gBAAgB,IAAI,UAAU,EAAE,CAAC,EAAE,EAAE;oBACxH,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;oBAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACpB,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC;oBACpC,IAAI,CAAC,YAAY,IAAI,WAAW,CAAC;oBACjC,IAAI,WAAW,KAAK,cAAc,EAAE;wBAChC,IAAI,CAAC,UAAU,EAAE,CAAC;qBACrB;yBACI;wBACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;qBAC3B;iBACJ;gBAED,IAAI,IAAI,CAAC,gBAAgB,GAAG,UAAU,EAAE;oBACpC,0DAA0D;oBAE1D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;oBAEpF,yCAAyC;oBACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;wBACtC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,cAAc,EAAE,+EAA+E,CAAC,CAAC;wBACnJ,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;wBAC7C,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;wBACjC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;wBAC7E,eAAe,IAAI,cAAc,CAAC;qBACrC;oBAED,oCAAoC;oBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE;wBACpC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC;wBAC5B,GAAG,CAAC,KAAK,EAAE,CAAC;wBACZ,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;wBAC7D,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;wBACxE,IAAI,UAAU,GAAG,cAAc,EAAE;4BAC7B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,CAAC;yBAChF;wBACD,eAAe,IAAI,UAAU,CAAC;wBAC9B,SAAS,GAAG,IAAI,CAAC;qBACpB;iBACJ;qBACI;oBACD,uBAAuB;oBACvB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;wBACzB,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC;wBAC/B,IAAI,MAAM,GAAG,eAAe,EAAE;4BAC1B,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,+DAA+D,CAAC,CAAC;4BAC9G,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;4BAChF,CAAC,CAAC,KAAK,IAAI,eAAe,CAAC;4BAC3B,eAAe,GAAG,CAAC,CAAC;yBACvB;6BACI;4BACD,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;4BAC/D,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;4BACzC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;4BACjC,eAAe,IAAI,MAAM,CAAC;yBAC7B;oBACL,CAAC,CAAC,CAAC;iBACN;gBACD,OAAO,CAAC,MAAM,CAAC,eAAe,KAAK,CAAC,EAAE,8CAA8C,CAAC,CAAC;gBACtF,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC;YACzB,CAAC;YAED,OAAO,EAAE,KAAK,EAAE,MAA6B,EAAE,EAAE;gBAC7C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;oBACpB,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;oBAC5D,OAAO;iBACV;gBACD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;oBACrB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;iBACzC;gBACD,mBAAmB;gBACnB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBACnB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;gBACvG,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBAEhB,2BAA2B;gBAC3B,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACvC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC5B,IAAI,QAAQ,CAAC;oBACb,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBAC5C,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBACjC,IAAI,UAAU,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;4BAAE,SAAS;yBAAE;wBACjD,IAAI,UAAU,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,EAAE;4BAChC,6CAA6C;4BAC7C,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;4BAC/B,QAAQ,GAAG,UAAU,CAAC;4BACtB,MAAM;yBACT;wBACD,IAAI,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,GAAG,EAAE;4BAChC,gDAAgD;4BAChD,UAAU,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;4BAC3B,QAAQ,GAAG,UAAU,CAAC;4BACtB,MAAM;yBACT;qBACJ;oBACD,IAAI,QAAQ,EAAE;wBACV,qCAAqC;wBACrC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBACxB,CAAC,EAAE,CAAC;qBACP;iBACJ;gBAED,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,wCAAwC;gBACzD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;YAED,IAAI,EAAE,GAAG,EAAE;gBACP,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAE;oBACpB,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI;wBAAE,OAAO,CAAC,CAAC,CAAC;oBAC/B,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI;wBAAE,OAAO,CAAC,CAAC;oBAC9B,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;wBAAE,OAAO,CAAC,CAAC,CAAC;oBACjC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;wBAAE,OAAO,CAAC,CAAC;oBAChC,OAAO,CAAC,CAAC,CAAC,cAAc;gBAC5B,CAAC,CAAC,CAAC;YACP,CAAC;YAED,KAAK,EAAE,KAAK,EAAE,gBAAgB,GAAG,KAAK,EAAE,EAAE;gBACtC,iFAAiF;gBACjF,uFAAuF;gBACvF,wFAAwF;gBACxF,6FAA6F;gBAE7F,MAAM,cAAc,GAAG,IAAI,CAAC;gBAC5B,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,cAAc,EAAE;oBACpC,yBAAyB;oBACzB,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,cAAc,CAAC;oBAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE;yBAC5B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;yBAC1D,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACjB,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC/F,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,gBAAgB,YAAY,UAAU,CAAC,CAAC;oBACrH,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;wBACnB,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;wBACpC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC5B,CAAC,CAAC,CAAC;oBACH,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,cAAc,EAAE;wBACpC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;qBACpE;iBACJ;gBAED,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACtC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvC,wBAAwB;gBACxB,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC7B,mCAAmC;gBACnC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACrC,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACvC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC5B,qBAAqB;oBACrB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBAClC,mDAAmD;oBACnD,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;oBACvC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;oBACrC,KAAK,IAAI,CAAC,CAAC;iBACd;gBACD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAI,sEAAsE;gBAC9H,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;gBAEtB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;oBAC7E,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;gBACjD,CAAC,CAAC,CAAC;gBACH,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC;gBACzB,IAAI,gBAAgB,KAAK,IAAI,EAAE;oBAC3B,uBAAuB;oBACvB,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;oBACtG,MAAM,OAAO,GAAG,gBAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;oBACtD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBACxB;gBACD,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC1B,4FAA4F;YAChG,CAAC;YAED,IAAI,EAAE,KAAK,IAAI,EAAE;gBACb,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;oBAAE,OAAO,EAAE,CAAC;iBAAE;gBACtC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACtC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,gBAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;oBAClG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;oBAChD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACtB,MAAM,GAAG,CAAC;gBACd,CAAC,CAAC,CAAC;gBACH,0BAA0B;gBAC1B,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;gBACrD,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,+CAA+C;gBACzF,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,+CAA+C;gBACzF,MAAM,MAAM,GAAG,EAAE,CAAC;gBAClB,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE;oBACrC,iDAAiD;oBACjD,MAAM,KAAK,GAAG;wBACV,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;wBAC3B,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;wBAChC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;qBACjC,CAAC;oBACF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACnB,KAAK,IAAI,CAAC,CAAC;iBACd;gBACD,GAAG,CAAC,KAAK,GAAG,cAAc,CAAC;gBAC3B,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;gBACtB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;gBACpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,cAAc,qBAAqB,cAAc,cAAc,CAAC,QAAQ,CAAC,yBAAU,CAAC,IAAI,CAAC,CAAC,CAAC;gBACvH,OAAO,MAAM,CAAC;YAClB,CAAC;SACJ,CAAC;QAEF,sBAAsB;QACtB,MAAM,UAAU,GAAG;YACf,IAAI,SAAS,KAAK,OAAO,MAAM,CAAC,CAAC,CAAC;YAClC,MAAM,EAAE,CAAC;YACT,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,KAAK;SAChB,CAAC;QACF,IAAI,CAAC,UAAU,GAAG;YACd,IAAI,SAAS,KAAK,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;YAChD,IAAI,MAAM,KAAK,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1C,IAAI,QAAQ,KAAK,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC9C,IAAI,MAAM,KAAK,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1C,IAAI,OAAO;gBACP,OAAO,IAAI,gCAAiB,CAAC,EAAE,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC7E,CAAC;YACD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,GAAG,KAAK,EAAE,EAAE;gBACvC,uBAAuB;gBACvB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;gBACpC,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ,EAAE;oBAClF,oBAAoB;oBACpB,OAAO;iBACV;gBACD,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;gBACnC,UAAU,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;gBACvC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;gBACzB,qHAAqH;gBAErH,IAAI,CAAC,OAAO,EAAE;oBACV,gBAAgB;oBAChB,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;oBAE5D,oCAAoC;oBACpC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;oBAChC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBACxC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;oBAClC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;oBAEpC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;oBACtG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAU,CAAC,IAAI,CAAC,CAAC,CAAC;iBACrH;YACL,CAAC;SACJ,CAAC;QAEF,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC;QACpC,MAAM,cAAc,GAAG;YACnB,UAAU,EAAE,SAAS;YACrB,OAAO,EAAE,SAAS,GAAG,CAAC;YACtB,mBAAmB,EAAE,SAAS,GAAG,CAAC;YAClC,WAAW,EAAE,SAAS,GAAG,CAAC;YAC1B,SAAS,EAAE,SAAS,GAAG,EAAE;YACzB,qBAAqB,EAAE,SAAS,GAAG,EAAE;SACxC,CAAC;QAEF,MAAM,gBAAgB,GAAG,KAAK,EAAE,WAAW,GAAG,KAAK,EAAE,EAAE;YACnD,MAAM,WAAW,GAAG,CAAC,GAAQ,EAAE,GAAW,EAAE,EAAE;gBAC1C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACtB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACtB,IAAI,IAAI,CAAC,IAAI,EAAE;oBACX,gBAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;wBAC7B,MAAM;oBACV,CAAC,CAAC,CAAC;iBACN;gBACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACxB,MAAM,GAAG,CAAC;YACd,CAAC,CAAC;YAEF,IAAI;gBACA,IAAI,CAAC,IAAI,GAAG,MAAM,gBAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;aACzF;YACD,OAAO,GAAG,EAAE;gBACR,WAAW,CAAC,GAAG,EAAE,8BAA8B,CAAC,CAAC;aACpD;YAED,uFAAuF;YACvF,gCAAgC;YAChC,gEAAgE;YAChE,KAAK;YAEL,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC9B,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI;gBACA,MAAM,MAAM,GAAG,MAAM,gBAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAClE,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;aAChC;YACD,OAAO,GAAG,EAAE;gBACR,WAAW,CAAC,GAAG,EAAE,gCAAgC,CAAC,CAAC;aACtD;YAED,4BAA4B;YAC5B,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;YAEpC,mBAAmB;YACnB,MAAM,oBAAoB,GAAG,GAAG,EAAE;gBAC9B,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACvC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE;wBAC7B,OAAO,KAAK,CAAC;qBAChB;iBACJ;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC;YACF,IAAI,SAAS,GAAG,EAAE,IAAI,CAAC,oBAAoB,EAAE,EAAE;gBAC3C,OAAO,WAAW,CAAC,gBAAgB,EAAE,uCAAuC,CAAC,CAAC;aACjF;YAED,sBAAsB;YACtB,IAAI,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC;YAC9B,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACrB,OAAO,WAAW,CAAC,gBAAgB,EAAE,iEAAiE,CAAC,CAAC;aAC3G;YACD,KAAK,EAAE,CAAC;YAER,aAAa;YACb,MAAM,UAAU,GAAG,KAAK,CAAC;YACzB,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,4CAA4C;YAC9E,MAAM,IAAI,GAAG;gBACT,OAAO,EAAE,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5B,KAAK,EAAE,IAAI;aACd,CAAC;YACF,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,GAAG,KAAK,EAAE,EAAE;gBAC9B,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;YAChD,CAAC,CAAC;YACF,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE;gBAChC,MAAM,gBAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,UAAU,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;gBAC5E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACnC,CAAC,CAAC;YACF,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,EAAE;gBACrB,MAAM,gBAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,UAAU,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;gBAC7E,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACrB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1B,CAAC,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;gBACpB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;aAChE;YACD,KAAK,EAAE,CAAC;YAER,2BAA2B;YAC3B,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACnD,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACtC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,WAAW,EAAE;gBACd,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;aAC5B;YACD,KAAK,IAAI,CAAC,CAAC;YAEX,sBAAsB;YACtB,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC;YAChE,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,GAAC,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC;YAChE,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,MAAM,CAAC,KAAK,GAAC,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC;YAC1E,uEAAuE;YACvE,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,KAAK,CAAC,EAAE;gBAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC;aAAE;YACzE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,CAAC,EAAE;gBAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC;aAAE;YACrE,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,KAAK,CAAC,EAAE;gBAAE,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,KAAK,CAAC;aAAE;YAEzF,MAAM,KAAK,GAAG,yBAAU,CAAC,GAAG,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YACzD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,QAAQ,CAAC,UAAU,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YACnF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,QAAQ,CAAC,QAAQ,aAAa,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9I,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,IAAI,CAAC,QAAQ,CAAC,kBAAkB,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YACrG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAEhH,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAE,uBAAuB;YAC/C,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAE,wBAAwB;YAChD,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,eAAe;YAC1C,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC,IAAI,CAAC;QACrB,CAAC,CAAC;QAEF,MAAM,kBAAkB,GAAG,KAAK,IAAI,EAAE;YAClC,6EAA6E;YAC7E,MAAM,OAAO,GAAG,CAAC,CAAC;YAClB,MAAM,WAAW,GAAG,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,+CAA+C;YAEhE,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC;gBACzB,OAAO;gBACP,KAAK;gBACL,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC;gBACP,CAAC,EAAC,CAAC;gBACH,QAAQ,CAAC,UAAU,IAAI,CAAC,GAAG,IAAI;gBAC/B,QAAQ,CAAC,UAAU,GAAG,IAAI;gBAC1B,QAAQ,CAAC,QAAQ,IAAI,CAAC,GAAG,IAAI;gBAC7B,QAAQ,CAAC,QAAQ,GAAG,IAAI;gBACxB,QAAQ,CAAC,kBAAkB,IAAI,CAAC,GAAG,IAAI;gBACvC,QAAQ,CAAC,kBAAkB,GAAG,IAAI;aACrC,CAAC,CAAC;YACH,IAAI,MAAM,GAAG,iBAAiB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,MAAM,GAAG,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAE5C,2EAA2E;YAC3E,0EAA0E;YAC1E,sEAAsE;YACtE,4EAA4E;YAC5E,sEAAsE;YACtE,4EAA4E;YAC5E,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;YACtD,IAAI,KAAK,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAE3C,6CAA6C;YAC7C,8BAA8B;YAC9B,sBAAsB;YACtB,8BAA8B;YAC9B,4BAA4B;YAC5B,+EAA+E;YAC/E,4DAA4D;YAC5D,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;YAClC,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAEtC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YACnE,IAAI,GAAG,KAAK,GAAG,EAAE;gBACb,MAAM,gBAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;oBAC7B,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;wBAAE,MAAM,GAAG,CAAC;qBAAE;gBAC7C,CAAC,CAAC,CAAC;aACN;YAED,MAAM,gBAAG,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YAC9D,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC7B,6BAA6B;YAC7B,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3B,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEF,0BAA0B;QAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,MAAM,EAAE;YACR,OAAO;YACP,gBAAgB,CAAC,KAAK,CAAC,CAAC;SAC3B;aACI,IAAI,QAAQ,CAAC,QAAQ,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,GAAG,CAAC,CAAC;SAChE;aACI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;YACzB,kFAAkF;YAClF,MAAM,IAAI,GAAG,GAAG,EAAE;gBACd,UAAU,CAAC,KAAK,IAAI,EAAE;oBAClB,MAAM,MAAM,GAAG,MAAM,gBAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC/C,IAAI,MAAM,EAAE;wBAAE,gBAAgB,EAAE,CAAC;qBAAE;yBAC9B;wBAAE,IAAI,EAAE,CAAC;qBAAE;gBACpB,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gCAAgC;YAC5C,CAAC,CAAC;YACF,IAAI,EAAE,CAAC;SACV;aACI;YACD,kBAAkB;YAClB,kBAAkB,EAAE,CAAC;SACxB;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;YACzB,sBAAsB;YACtB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAChD,gBAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBAC7B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACrC,IAAI,QAAQ,KAAK,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;IAKhF,KAAK,CAAC,SAAS,CAAC,SAAiB,EAAE,MAA2D,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;QAC1H,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;YACxB,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC3E,GAAW,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,wCAAwC;YACrE,MAAM,GAAG,CAAC;SACb;QACD,IAAI,MAAM,CAAC,WAAW,KAAK,UAAU,EAAE,EAAE,iCAAiC;YACtE,yFAAyF;YACzF,yDAAyD;YACzD,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;SAC7E;QACD,OAAO,CAAC,MAAM,CAAC,MAAM,YAAY,MAAM,EAAE,gDAAgD,CAAC,CAAC;QAC3F,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE;YACf,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;SAC9B;QACD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,gBAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,MAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACzG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;YAC/C,MAAM,GAAG,CAAC;QACd,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,YAAY,CAAC;QACxC,OAAO,YAAY,CAAC;IACxB,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,QAAQ,CAAC,SAAiB,EAAE,MAA8C,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;QAC5G,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE;YACf,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;SAC9B;QACD,IAAI,MAAM,YAAY,WAAW,EAAE;YAC/B,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAChC;aACI,IAAI,CAAC,CAAC,MAAM,YAAY,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,YAAY,WAAW,EAAE;YAC1E,8EAA8E;YAC9E,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACpC,IAAK,MAAiB,CAAC,UAAU,GAAG,CAAC,EAAE;gBACnC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;aACnF;SACJ;QACD,IAAI;YACA,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,gBAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YAC7F,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,SAAS,CAAC;YAClC,OAAO,SAAS,CAAC;SACpB;QACD,OAAO,GAAG,EAAE;YACR,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YAC5E,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACtB,MAAM,GAAG,CAAC;SACb;IACL,CAAC;IAwDD;;;;;OAKG;IACI,WAAW,CAAC,OAAgB,EAAE,QAAwB,EAAE,QAAQ,GAAG,IAAI;QAC1E,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa;QAC9C,IAAI,CAAC,OAAO,IAAI,QAAQ,EAAE;YACtB,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;SACvE;IACL,CAAC;IAEM,eAAe,CAAC,OAAgB,EAAE,IAAY,EAAE,SAA4D,EAAE,MAAe;QAChI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,EAAE;YACV,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;SACpF;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACP,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,4BAA4B;QACjF,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC7D,CAAC;IAED,kBAAkB,CAAC,MAAc,EAAE,QAAgB;QAC/C,MAAM,KAAK,GACP,IAAI,CAAC,UAAU,CAAC,SAAS;cACvB,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;cAC5B,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CACZ,UAAkB,EAClB,UAWI;QACA,YAAY,EAAE,KAAK;QACnB,aAAa,EAAE,IAAI;KACtB;QAED,IAAI,OAAO,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE;YAC3C,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC;SAChC;QACD,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE;YAC5C,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;SAChC;QACD,MAAM,cAAc,GAAG,uBAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC;QACnE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC7B,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QAC/E,IAAI;YACA,yDAAyD;YACzD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAExC,kDAAkD;YAClD,IAAI,cAAc,GAAmB,IAAI,CAAC;YAC1C,IAAI;gBACA,cAAc,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;aAChE;oBACO;gBACJ,IAAI,cAAc,EAAE;oBAChB,MAAM,GAAG,GAAG,iBAAiB,UAAU,+BAA+B,cAAc,CAAC,aAAa,WAAW,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBAC9R,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACrB,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;wBACvB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;qBACxB;iBACJ;aACJ;YAED,IAAI,QAAwB,CAAC;YAC7B,IAAI;gBACA,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;aACpD;YACD,OAAO,GAAG,EAAE;gBACR,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC;aAC7D;YAED,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;gBAClB,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,iBAAiB,CAAC,CAAC;aAC1D;iBACI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;gBACxB,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,kCAAkC,CAAC,CAAC;aACtE;YACD,MAAM,qBAAqB,GAAG,aAAa,CAAC;YAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,KAAK,8BAAW,CAAC,KAAK,CAAC;YACzD,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;gBACnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,+CAA+C,GAAG,oBAAoB,qBAAqB,WAAW,CAAC,CAAC;gBAC7I,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;aAChC;YACD,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACvE,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,UAAU,EAAE,CAAC;YACjD,IAAI,SAAyB,CAAC;YAC9B,IAAI;gBACA,SAAS,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;aAClD;YACD,OAAO,GAAG,EAAE;gBACR,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,cAAc,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC;aACnF;YACD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;gBACpB,MAAM,IAAI,KAAK,CAAC,mBAAmB,UAAU,8CAA8C,CAAC,CAAC;aAChG;YAED,IAAI,UAAU,CAAC,WAAW,EAAE;gBACxB,4CAA4C;gBAC5C,sCAAsC;gBAEtC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,qBAAqB,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,CAAuB,CAAC;gBACnJ,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;gBACrC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,qBAAqB,EAAE,GAAG,CAAuB,CAAC;gBACvG,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;gBACrC,MAAM,IAAI,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;gBACvC,MAAM,aAAa,GAAG,IAAI,uBAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAC7D,MAAM,aAAa,GAAG,IAAI,uBAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAC7D,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa;oBAC5B,CAAC,CAAC,uBAAe,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,EAAE,aAAa,EAAE,aAAa,CAAC;oBAChF,CAAC,CAAC,uBAAe,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;gBACpF,IAAI;oBACA,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;iBAChC;gBACD,OAAO,GAAG,EAAE;oBACR,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,MAAM,GAAG,EAAE,CAAC,CAAC;iBAClE;aACJ;iBACI;gBACD,kDAAkD;gBAClD,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,EAAW,CAAC,CAAC,CAAC,EAAyB,CAAC;gBAEtE,MAAM,UAAU,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;oBAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;oBACrD,IAAI,UAAU,KAAK,GAAG,EAAE;wBACpB,0CAA0C;wBAC1C,IAAI,OAAO,CAAC,aAAa,EAAE;4BACvB,WAAW,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC;yBAC5C;qBACJ;yBACI,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,0CAA0C;wBAChE,WAAW,CAAC,UAAU,CAAC,GAAG,IAAI,qBAAqB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;qBACvF;yBACI;wBACD,WAAW,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;qBACzC;gBACL,CAAC,CAAC,CAAC;gBAEH,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;gBAC7F,IAAI,aAAa,KAAK,UAAU,CAAC,UAAU,EAAE;oBACzC,yFAAyF;oBACzF,IAAI,QAAQ,CAAC,MAAM,EAAE;wBACjB,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;wBACjC,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,qBAAqB,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;qBACrL;oBACD,IAAI;wBACA,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;qBACnE;oBACD,OAAO,GAAG,EAAE;wBACR,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,uDAAuD,IAAI,MAAM,GAAG,EAAE,CAAC,CAAC;qBAC5F;oBACD,iGAAiG;iBACpG;aACJ;YAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,UAAU,QAAQ,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,GAAG,qBAAqB,IAAI,kBAAkB,qBAAqB,IAAI,CAAC,CAAC,CAAC,iBAAiB,GAAG,uBAAuB,IAAI,GAAG,EAAE,CAAC,CAAC;YAE7O,uCAAuC;YACvC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;SACjD;gBACO;YACJ,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;SACxB;IACL,CAAC;IAED,IAAI,yBAAyB;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,KAAK,IAAI,CAAC;IACjF,CAAC;IAED,WAAW,CACP,IAAsB,EACtB,IAAY,EACZ,KAAU,EACV,OAAmC,EACnC,SAA4B;QAE5B,yBAAyB;QACzB,IAAI,CAAC,CAAC,KAAK,EAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAC;SAAE;QACvG,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;SAAE;QAC3G,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;SAAE;QAC9F,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,yCAAyC;YACzC,OAAO;SACV;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YACvB,uCAAuC;YACvC,OAAO;SACV;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;YACtB,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;SAC5E;aACI,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;YAClC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;SAC1C;QAED,IAAI,KAAK,KAAK,IAAI,EAAE;YAChB,wIAAwI;YACxI,MAAM,QAAQ,GAAG,uBAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,GAAG,QAAQ,CAAC;YAChB,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC;YAC3B,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;SACpC;QAED,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,KAAK,IAAI;YACvC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC9F,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;QAC3H,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,KAAK,IAAI;YACvC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAChG,CAAC,CAAC,EAAE,CAAC;QACT,MAAM,IAAI,GAAG;YACT,IAAI;YACJ,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,WAAW;YACpB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,IAAI;YACJ,KAAK;YACL,OAAO;YACP,SAAS;SACZ,CAAC;QACF,qFAAqF;QAErF,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;YACrB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACf,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC5B;YACD,IAAI;gBACA,4DAA4D;gBAC5D,qBAAqB;gBACrB,0EAA0E;gBAC1E,IAAI;gBACJ,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;aAC3F;YACD,OAAM,GAAG,EAAE;gBACP,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;aAC/D;QACL,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE;YACpC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;SACrC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,MAiBlB;QAaG,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;YACtB,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;aAAE;YAC/F,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;SAC9C;aACI,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;YAClC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;SAC1C;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC5B;QACD,MAAM,MAAM,GAAG,sDAAsD;SACjE,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;eACzC,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;eAC1F,UAAU,CAAC;QAClB,MAAM,KAAK,GACP,CAAC,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC;eACvD,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;eAChC,CAAC,CAAC;QAET,iCAAiC;QACjC,IAAI,KAAK,KAAK,CAAC,IAAI,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE;YAChD,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;SACrC;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;YACxC,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,+CAA+C;SAClJ;QAED,0EAA0E;QAC1E,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;YACvC,MAAM,QAAQ,GAAG,uBAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YACvC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,gBAAgB;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;QAC1F,IAAI;YAEA,IAAI,SAAS,GAAG,EAAoB,CAAC;YACrC,MAAM,UAAU,GAAG,EAAc,CAAC;YAClC,IAAI,IAAgB,CAAC;YACrB,MAAM,WAAW,GAAG,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;YACjE,IAAI,aAAa,GAAG,KAAK,CAAC;YAE1B,MAAM,QAAQ,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC/D,MAAM,gBAAgB,GAAG,CAAC,GAAQ,EAAE,IAAqB,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAE9H,0DAA0D;YAC1D,MAAM,KAAK,GAAG,KAAK,EAAE,GAAW,EAAE,EAAE;gBAChC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GASvB,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,wBAAwB;gBACvI,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC1D,MAAM,gBAAgB,GAAG,uBAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAErD,yGAAyG;gBACzG,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE;oBACrB,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC1E,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;gBAClD,CAAC,CAAC,EAAE,CAAC;gBACL,MAAM,cAAc,GAAG,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,uBAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC7E,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE;oBACf;;;;;;;;;;;;;;;;;;uBAkBG;oBACH,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;wBAChC,OAAO,MAAM,CAAC;qBACjB;oBACD,IAAI,QAAQ,CAAC,SAAS,GAAG,KAAK,IAAI,UAAU,KAAK,IAAI,EAAE;wBACnD,OAAO,MAAM,CAAC;qBACjB;oBACD,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE;wBAClD,OAAO,KAAK,CAAC;qBAChB;oBACD,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;wBAClM,OAAO,QAAQ,CAAC;qBACnB;oBACD,OAAO,MAAM,CAAC;gBAClB,CAAC,CAAC,EAAE,CAAC;gBAEL,IAAI,IAAI,KAAK,MAAM,EAAE;oBACjB,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACvI,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,GAMjB,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;oBAE7F,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC;oBACjC,IAAI,WAAW,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;oBACrD,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;wBACpC,WAAW,GAAG,IAAI,CAAC;qBACtB;yBACI;wBACD,mDAAmD;wBACnD,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;qBAC5D;oBACD,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE;wBAC/B,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE;4BAAE,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC;yBAAE;wBACnD,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE;4BAAE,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;yBAAE;qBACxD;oBACD,IAAI,IAAI,KAAK,QAAQ,EAAE;wBACnB,QAAQ,GAAG,KAAK,CAAC;wBACjB,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAC1E,MAAM,OAAO,GAAG,CAAC,UAAkB,EAAE,WAAgB,EAAE,SAA8B,EAAE,EAAE;4BACrF,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;4BAC9B,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;4BAC/B,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gCACzD,mCAAmC;gCACnC,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;oCAC/C,OAAO,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,QAAQ,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;gCAC/D,CAAC,CAAC,CAAC;6BACN;4BACD,UAAU,GAAG,uBAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;4BACzD,WAAW,GAAG,WAAW,KAAK,IAAI,IAAI,QAAQ,IAAI,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;4BAC7F,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;gCACxB,2FAA2F;gCAC3F,+CAA+C;gCAC/C,MAAM,cAAc,GAAG,uBAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gCAChD,MAAM,iBAAiB,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;oCACjD,MAAM,eAAe,GAAG,uBAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oCACxE,IAAI,eAAe,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE;wCAC9C,+EAA+E;wCAC/E,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wCACzE,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;wCAC1H,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;wCAChI,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;qCACzB;oCACD,OAAO,eAAe,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;gCACvD,CAAC,CAAC,CAAC;gCACH,iBAAiB,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;6BACrL;iCACI;gCACD,OAAO,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS;6BACzD;wBACL,CAAC,CAAC;wBACF,OAAO,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;qBAC/C;yBACI;wBACD,2FAA2F;wBAC3F,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,qCAAqC;qBACtM;iBACJ;gBAED,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9C,IAAI,aAAa,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC1C,IAAI,EAAE,CAAC;iBACV;YACL,CAAC,CAAC;YAEF,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAAE,mBAAmB,GAAa,EAAE,EAAE,cAAc,GAAa,EAAE,CAAC;YACpH,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC;iBACrC,IAAI,CAAC,SAAS,CAAC,EAAE;gBACd,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;gBACvD,IAAI,QAAQ,GAAG,iBAAiB,EAAE;oBAAE,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;iBAAE;gBAC9E,IAAI,QAAQ,GAAG,MAAM,EAAE;oBAAE,OAAO;iBAAE;gBAClC,IAAI,QAAQ,KAAK,MAAM,EAAE;oBACzB,kIAAkI;oBAC9H,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;iBACtC;gBACD,KAAK,EAAE,CAAC;gBACR,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YAEP,aAAa,GAAG,IAAI,CAAC;YACrB,IAAI,KAAK,GAAG,CAAC,EAAE;gBACX,MAAM,WAAW,CAAC;aACrB;YAED,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChC,8BAA8B;gBAC9B,MAAM,aAAa,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;oBAC9D,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;oBACpB,OAAO,OAAO,CAAC;gBACnB,CAAC,EAAE,EAA0B,CAAC,CAAC;gBAC/B,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,6EAA6E;aAC3H;YAED,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE;gBACpE,wFAAwF;gBACxF,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC/D,KAAK,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aAC5C;iBACI,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChC,8FAA8F;gBAC9F,oGAAoG;gBACpG,qGAAqG;gBACrG,yEAAyE;gBACzE,+BAA+B;gBAC/B,mGAAmG;gBACnG,2GAA2G;gBAC3G,UAAU;aACb;YAED,4BAA4B;YAC5B,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;YAEpD,qDAAqD;YACrD,MAAM,UAAU,GAAG,CAAC,GAAQ,EAAE,IAAS,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACvG,MAAM,cAAc,GAAG,CAAC,GAAQ,EAAE,IAAS,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3G,MAAM,YAAY,GAAG,CAAC,GAAG,MAAgB,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/F,MAAM,QAAQ,GAAG,CAAC,MAAgB,EAAE,KAAe,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7G,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;gBAEhC,wDAAwD;gBACxD,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;oBAClB,MAAM,YAAY,GAAG,uBAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACrD,IAAI,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBACtC,6CAA6C;wBAC7C,mGAAmG;wBACnG,iDAAiD;wBACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;4BAC/C,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BAChC,sCAAsC;4BACtC,wCAAwC;4BACxC,yBAAyB;4BACzB,sBAAsB;4BACtB,MAAM,SAAS,GAAG,uBAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;4BAE/E,sDAAsD;4BACtD,MAAM,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;4BAC3E,IAAI,CAAC,QAAQ,EAAE;gCACX,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gCAC/B,CAAC,EAAE,CAAC;gCAAC,SAAS;6BACjB;4BAED,gCAAgC;4BAChC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;4BAEtC,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;4BAC5H,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;4BAClI,IAAI,GAAG,KAAK,IAAI,EAAE;gCACd,8CAA8C;gCAC9C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gCAC/B,CAAC,EAAE,CAAC;gCAAC,SAAS;6BACjB;4BACD,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC;4BACb,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;4BACf,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,gBAAgB;yBACjD;wBACD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;4BAChC,kCAAkC;4BAClC,OAAO,EAAE,CAAC;yBACb;qBACJ;oBACD,oDAAoD;oBACpD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;wBAC7B,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;wBAC3F,OAAO;4BACH,EAAE,EAAE,IAAI,CAAC,EAAE;4BACX,IAAI,EAAE,KAAK;4BACX,IAAI,EAAE,cAAc,CAAC,IAAI;4BACzB,QAAQ,EAAE,cAAc;4BACxB,SAAS,EAAE,IAAI,CAAC,SAAS;4BACzB,OAAO,EAAE,IAAI,CAAC,OAAO;4BACrB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;4BACtC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;yBACtC,CAAC;oBACN,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,EAAE,CAAC;gBAEL,0FAA0F;gBAC1F,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;oBACrB,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;wBAE5B,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;4BACvC,OAAO,KAAK,CAAC;yBAChB;6BACI,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;+BAC9E,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,EAAC,eAAe,EAAC,SAAS,EAAC,WAAW,CAAC,CAAC,EAAE;4BAC7E,OAAO,IAAI,CAAC;yBACf;6BACI,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;4BACtC,kDAAkD;4BAClD,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,EAAC,eAAe,EAAC,SAAS,EAAC,WAAW,CAAC,CAAC,EAAE;gCAC1E,OAAO,IAAI,CAAC;6BACf;4BACD,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;gCACzE,OAAO,IAAI,CAAC;6BACf;4BACD,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,CAAC,IAAI,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;gCAC/E,OAAO,IAAI,CAAC;6BACf;yBACJ;6BACI,IAAI,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;4BAC9C,sCAAsC;4BACtC,0EAA0E;4BAC1E,0FAA0F;4BAC1F,IAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,aAAa,EAAC,eAAe,CAAC,CAAC,EAAE;gCACzD,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;oCAAE,OAAO,KAAK,CAAC;iCAAE;gCAC1D,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE;oCAAE,OAAO,IAAI,CAAC;iCAAE;gCAClF,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,IAAI,EAAE;oCAAE,OAAO,IAAI,CAAC;iCAAE;6BACtF;yBACJ;6BACI;4BACD,uCAAuC;4BACvC,mFAAmF;4BACnF,4BAA4B;4BAC5B,MAAM,SAAS,GAAG,uBAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;4BACnF,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;4BACxH,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;4BAClH,IAAI,IAAI,KAAK,GAAG,EAAE;gCAAE,OAAO,KAAK,CAAC;6BAAE;4BACnC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,EAAC,SAAS,EAAC,WAAW,CAAC,CAAC,EAAE;gCAC1D,OAAO,IAAI,CAAC;6BACf;4BACD,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE;gCACnE,OAAO,IAAI,CAAC;6BACf;4BACD,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,CAAC,IAAI,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE;gCACzE,OAAO,IAAI,CAAC;6BACf;yBACJ;wBACD,OAAO,KAAK,CAAC;oBACjB,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,iBAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;SAC/E;gBACO;YACJ,IAAI,CAAC,OAAO,EAAE,CAAC;SAClB;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,MAkBhB;QAWG,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACxD,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,eAAe,CAAC;QAE/D,MAAM,QAAQ,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAE/D,4CAA4C;QAC5C,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACvC,8IAA8I;YAC9I,MAAM,YAAY,GAAG,uBAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBAC1B,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAE3F,mEAAmE;gBACnE,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC;gBAEjH,GAAG,CAAC,IAAI,CAAC;oBACL,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,IAAI,EAAE,KAAK;oBACX,IAAI,EAAE,cAAc,CAAC,IAAI;oBACzB,QAAQ,EAAE,cAAc;oBACxB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;oBACtC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;iBACtC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YACH,OAAO,GAAG,CAAC;QACf,CAAC,EAAE,EASD,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACrB,6GAA6G;YAC7G,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,EAAE;gBACtB,uCAAuC;gBACnC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAClB;iBACI;gBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC/B,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;gBACvC,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;gBAC1D,IAAI,CAAC,YAAY,EAAE;oBACf,2BAA2B;oBAC3B,GAAG,CAAC,IAAI,CAAC;wBACL,EAAE,EAAE,IAAI,CAAC,EAAE;wBACX,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE,QAAQ,CAAC,MAAM;wBACzB,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE;wBACjC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE;wBACnC,OAAO,EAAE,IAAI,CAAC,OAAO;qBACxB,CAAC,CAAC;iBACN;qBACI;oBACD,mCAAmC;oBACnC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;oBAC1C,IAAI,YAAY,CAAC,IAAI,KAAK,IAAI,EAAE,EAAE,kDAAkD;wBAChF,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;qBAC/C;oBACD,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;iBACvC;aACJ;YACD,OAAO,GAAG,CAAC;QACf,CAAC,EAAE,EAQD,CAAC,CAAC;QAGJ,sCAAsC;QACtC,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7B,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;YACxD,KAAK,EAAE,IAAI,CAAC,GAAG;YACf,QAAQ,EAAE,IAAI,CAAC,IAAI;SACtB,CAAC,CAAC,CAAC;QAEJ,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IAChD,CAAC;IAED,IAAI,iBAAiB;QACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE;YACxC,OAAO,EAAE,CAAC;SACb;QACD,MAAM,QAAQ,GAAG,QAAQ,EAAE,sBAAsB;QAC7C,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,QAAQ,EACvD,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAC7B,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAChC,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACH,WAAW,CACP,IAAY,EACZ,UAUI;QACA,KAAK,EAAE,KAAK;KACf;QAGD,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE;YACpC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;SACzB;QACD,MAAM,SAAS,GAAG;YACd;;;;eAIG;YACH,KAAK,CAAC,IAAI,CAAC,aAAoC,EAAE,QAAQ,GAAG,OAAO,CAAC,KAAK;gBACrE,OAAO,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YAC1C,CAAC;SACJ,CAAC;QACF,MAAM,KAAK,GAAG,KAAK,EAAE,QAA+B,EAAE,OAAO,GAAG,KAAK,EAAE,EAAE;YACrE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,gBAAgB;YAC9C,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,yBAAyB,IAAI,GAAG,CAAC,CAAC;YACvG,IAAI;gBACA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;gBACvD,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;oBAClB,MAAM,IAAI,+BAAiB,CAAC,UAAU,IAAI,kBAAkB,CAAC,CAAC;iBACjE;qBACI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;oBACxB,2DAA2D;oBAC3D,OAAO;iBACV;gBACD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAClE,MAAM,YAAY,GAAG,OAAO;oBACxB,CAAC,CAAC,KAAK,EAAE,SAAyB,EAAE,EAAE;wBAClC,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,CAAC;wBACjD,OAAO,CAAC,QAAQ,CAAC;oBACrB,CAAC;oBACD,CAAC,CAAC,CAAC,SAAyB,EAAE,EAAE;wBAC5B,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,KAAK,CAAC;wBACzC,OAAO,CAAC,QAAQ,CAAC;oBACrB,CAAC,CAAC;gBACN,MAAM,MAAM,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;qBACxD,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;gBACjC,OAAO,QAAQ,CAAC;aACnB;YACD,OAAM,GAAG,EAAE;gBACP,IAAI,CAAC,CAAC,GAAG,YAAY,+BAAiB,CAAC,EAAE;oBACrC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,2BAA2B,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;iBAC5D;gBACD,MAAM,GAAG,CAAC;aACb;oBACO;gBACJ,IAAI,CAAC,OAAO,EAAE,CAAC;aAClB;QACL,CAAC,CAAC;QACF,OAAO,SAAS,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CACT,IAAY,EACZ,UAAwC,EAAE,aAAa,EAAE,IAAI,EAAE;QAE/D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,qBAAqB,IAAI,GAAG,CAAC,CAAC;QACnG,IAAI;YACA,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,iBAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACvD,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;gBAClB,KAAK,GAAG,IAAI,CAAC;aAChB;iBACI,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACvB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAClE,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;oBAC1B,OAAO,EAAE,OAAO,CAAC,OAAmB;oBACpC,OAAO,EAAE,OAAO,CAAC,OAAmB;oBACpC,aAAa,EAAE,OAAO,CAAC,aAAa;iBACvC,CAAC,CAAC;aACN;YACD,OAAO;gBACH,QAAQ,EAAE,IAAI;gBACd,KAAK;gBACL,MAAM;aACT,CAAC;SACL;QACD,OAAM,GAAG,EAAE;YACP,IAAI,GAAG,YAAY,kBAAkB,EAAE;gBACnC,0EAA0E;gBAC1E,mDAAmD;gBACnD,0EAA0E;gBAC1E,+DAA+D;gBAC/D,oDAAoD;aACvD;iBACI;gBACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;aACvD;YACD,MAAM,GAAG,CAAC;SACb;gBACO;YACJ,IAAI,CAAC,OAAO,EAAE,CAAC;SAClB;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAW,CACb,IAAY,EACZ,UAgBI;QACA,QAAQ,EAAE,KAAK;QACf,mBAAmB,EAAE,KAAK;QAC1B,YAAY,EAAE,KAAK;KACtB;QAED,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC;QAC7C,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,KAAK,IAAI,CAAC;QACnE,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,oDAAoD;QAClF,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAE5C,MAAM,aAAa,GAAG,KAAK,EAAE,QAAwB,EAAE,EAAE;YACrD,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,IAAI,CAAC,8BAAW,CAAC,KAAK,EAAE,8BAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE;gBAC1F,yBAAyB;gBACzB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,yBAAyB,IAAI,GAAG,CAAC,CAAC;gBAC5G,IAAI;oBACA,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;oBAC5E,UAAU,GAAG,MAAM,WAAW,CAAC,aAAa,EAAE,CAAC;iBAClD;wBACO;oBACJ,SAAS,CAAC,OAAO,CAAC,yCAAyC,IAAI,GAAG,CAAC,CAAC;iBACvE;aACJ;YACD,OAAO,UAAU,CAAC;QACtB,CAAC,CAAC;QAEF,IAAI,IAAI,KAAK,EAAE,EAAE;YACb,mDAAmD;YACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,yBAAyB,CAAC,CAAC;YAClG,IAAI;gBACA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;oBACzB,OAAO,IAAI,0BAAc,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;iBACtD;gBACD,MAAM,IAAI,GAAG,IAAI,0BAAc,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,8BAAW,CAAC,MAAM,EAAE,CAAC,CAAC;gBACpH,IAAI,OAAO,CAAC,mBAAmB,EAAE;oBAC7B,IAAI,CAAC,UAAU,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;iBAC/C;gBACD,OAAO,IAAI,CAAC;aACf;oBACO;gBACJ,QAAQ,CAAC,OAAO,EAAE,CAAC;aACtB;SACJ;QAED,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,KAAK,IAAI,IAAI,OAAO,CAAC,mBAAmB,KAAK,IAAI,CAAC;QAC1F,IAAI,eAAe,EAAE;YACjB,oCAAoC;YACpC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACnD,IAAI,UAAU,EAAE;gBACZ,uBAAuB;gBACvB,OAAO,UAA4B,CAAC;aACvC;SACJ;QAED,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,uBAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QAEvC,qDAAqD;QACrD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,yBAAyB,UAAU,GAAG,CAAC,CAAC;QACnH,IAAI;YACA,2FAA2F;YAC3F,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAmB,CAAC;YAClE,IAAI,SAAS,YAAY,OAAO,EAAE;gBAC9B,2CAA2C;gBAC3C,SAAS,GAAG,MAAM,SAAS,CAAC;aAC/B;YACD,IAAI,SAAS,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE;gBAC3C,qBAAqB;gBACrB,OAAO,SAA2B,CAAC;aACtC;YACD,IAAI,CAAC,SAAS,EAAE;gBACZ,0BAA0B;gBAC1B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAE9B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC3F,IAAI,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,SAAS,KAAK,8BAAW,CAAC,SAAS,IAAI,OAAO,CAAC,YAAY,EAAE;oBAC7F,kFAAkF;oBAClF,IAAI,aAAa,CAAC;oBAClB,IAAI,UAAU,CAAC,OAAO,EAAE;wBACpB,8CAA8C;wBAC9C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;wBACpE,aAAa,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;qBAC3C;yBACI;wBACD,2BAA2B;wBAC3B,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;qBACpC;oBACD,6DAA6D;oBAC7D,MAAM,SAAS,GAAG,uBAAQ,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAC1E,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;iBACtF;qBACI,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC,8BAAW,CAAC,MAAM,EAAE,8BAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;oBAC3H,0GAA0G;oBAC1G,yBAAyB;oBACzB,SAAS,GAAG,IAAI,0BAAc,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;iBAC3D;qBACI;oBACD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBACpE,SAAS,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;iBACvD;aACJ;YAED,IAAI,OAAO,CAAC,mBAAmB,EAAE;gBAC7B,SAAS,CAAC,UAAU,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;aACzD;YACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,uBAAuB;YAElE,OAAO,SAAS,CAAC;SACpB;QACD,OAAM,GAAG,EAAE;YACP,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;YACvD,MAAM,GAAG,CAAC;SACb;gBACO;YACJ,IAAI,CAAC,OAAO,CAAC,yCAAyC,UAAU,GAAG,CAAC,CAAC;SACxE;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CACT,IAAY,EACZ,KAAU,EACV,UAUI;QACA,eAAe,EAAE,KAAK;QACtB,OAAO,EAAE,IAAI;KAChB;QAED,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,OAAO,CAAC,OAAO,CAAC,cAAc,GAAG,iBAAE,CAAC,QAAQ,EAAE,CAAC;SAClD;QACD,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,4DAA4D;QAC1G,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7I,IAAI,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE;YAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAqC,EAAE,SAAS,CAAC,CAAC;YACjG,IAAI,CAAC,YAAY,OAAO,EAAE;gBAAE,MAAM,CAAC,CAAC;aAAE;SACzC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,UAAU,CACZ,IAAY,EACZ,OAAY,EACZ,UAYI;QACA,eAAe,EAAE,KAAK;QACtB,OAAO,EAAE,IAAI;KAChB;QAED,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,OAAO,CAAC,OAAO,CAAC,cAAc,GAAG,iBAAE,CAAC,QAAQ,EAAE,CAAC;SAClD;QACD,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,4DAA4D;QAC1G,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9I,IAAI,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE;YAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAqC,EAAE,SAAS,CAAC,CAAC;YACtG,IAAI,CAAC,YAAY,OAAO,EAAE;gBAAE,MAAM,CAAC,CAAC;aAAE;SACzC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC;IAC1C,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,WAAW,CACb,IAAY,EACZ,KAAU,EACV,UAcI;QACA,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,KAAK;QAChB,eAAe,EAAE,KAAK;QACtB,OAAO,EAAE,IAAI;KAChB;QAED,wDAAwD;QAExD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,iBAAiB;QAC9D,MAAM,QAAQ,GAAG,uBAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,KAAK,KAAK,IAAI,EAAE;YAChB,+CAA+C;YAC/C,OAAO,IAAI,CAAC,WAAW,CACnB,QAAQ,CAAC,UAAU,EACnB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EACxB,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAC3F,CAAC;SACL;QAED,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;YAC5C,sCAAsC;YACtC,OAAO,IAAI,CAAC,WAAW,CACnB,QAAQ,CAAC,UAAU,EACnB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EACzB,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAC3F,CAAC;SACL;QAED,uEAAuE;QACvE,+CAA+C;QAC/C,0FAA0F;QAC1F,cAAc;QAEd,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;QACjF,IAAI;YACA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACvD,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,KAAK,EAAE,EAAE;gBACjC,4CAA4C;gBAC5C,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;gBACjC,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;aAC3K;YAED,yBAAyB;YACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC;YACnE,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;gBACrB,IAAI,KAAK,EAAE;oBACP,oFAAoF;oBACpF,yFAAyF;oBACzF,OAAO,MAAM,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;iBACxD;qBACI;oBACD,6EAA6E;oBAC7E,OAAO,MAAM,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;iBAC7E;YACL,CAAC,CAAC;YAEF,IAAI,MAAqE,CAAC;YAC1E,IAAI,OAAO,CAAC,SAAS,EAAE;gBACnB,MAAM,GAAG,MAAM,KAAK,EAAE,CAAC;aAC1B;iBACI;gBACD,MAAM,GAAS,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE;oBAC1D,GAAG;oBACH,KAAK;oBACL,eAAe,EAAE,OAAO,CAAC,eAAe;oBACxC,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,oBAAoB,EAAE,KAAK,EAAE,oDAAoD;oBACjF,SAAS;iBACZ,CAAC,CAAC;aACN;YAED,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;YAElE,oCAAoC;YACpC,IAAI,aAAa,GAAG,KAAK,CAAC;YAC1B,IAAI,WAAW,IAAI,QAAQ,CAAC,UAAU,KAAK,IAAI,EAAE;gBAC7C,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;gBACjC,4HAA4H;gBAC5H,MAAM,IAAI,CAAC,WAAW,CAClB,QAAQ,CAAC,UAAU,EACnB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,qBAAqB,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,EACvF,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAClE,CAAC;gBACF,aAAa,GAAG,IAAI,CAAC;aACxB;YAED,IAAI,aAAa,IAAI,QAAQ,CAAC,UAAU,KAAK,EAAE,EAAE;gBAC7C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC,CAAC;aAC5E;YAED,IAAI,UAAU,IAAI,UAAU,CAAC,cAAc,GAAG,CAAC,EAAE;gBAC7C,oDAAoD;gBACpD,UAAU,CAAC,SAAS,EAAE,CAAC;gBACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,UAAU,CAAC,cAAc,eAAe,UAAU,CAAC,MAAM,CAAC,MAAM,sCAAsC,IAAI,yBAAyB,UAAU,EAAE,CAAC,QAAQ,CAAC,yBAAU,CAAC,IAAI,CAAC,CAAC,CAAC;gBAE3M,+CAA+C;gBAC/C,sDAAsD;gBACtD,kDAAkD;gBAClD,sCAAsC;gBACtC,iIAAiI;gBACjI,oBAAoB;gBACpB,0CAA0C;gBAC1C,QAAQ;gBACR,MAAM;gBAEN,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;aACvC;YAED,OAAO;gBACH,IAAI;gBACJ,IAAI,EAAE,SAAS;aAClB,CAAC;SACL;QACD,eAAe;QACf,qDAAqD;QACrD,+IAA+I;QAC/I,WAAW;QACX,qDAAqD;QACrD,gEAAgE;QAChE,QAAQ;QACR,iCAAiC;QACjC,IAAI;gBACI;YACJ,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,gCAAgC;SACnC;IACL,CAAC;CACJ;AAxqED,wCAwqEC;AAED,MAAM,0BAA0B,GAAG,EAAE,CAAC;AACtC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAEtC,MAAM,eAAe,GAAG,IAAI,CAAC;AAC7B,MAAM,cAAc,GAAG,IAAI,CAAC;AAC5B,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B,MAAM,mBAAmB;IACrB,YAAmB,MAAc,EAAS,QAAgB,EAAS,MAAc;QAA9D,WAAM,GAAN,MAAM,CAAQ;QAAS,aAAQ,GAAR,QAAQ,CAAQ;QAAS,WAAM,GAAN,MAAM,CAAQ;IAAI,CAAC;CACzF;AAED,MAAM,cAAc;IAChB,YAAmB,MAAc,EAAS,QAAgB;QAAvC,WAAM,GAAN,MAAM,CAAQ;QAAS,aAAQ,GAAR,QAAQ,CAAQ;IAAI,CAAC;CAClE;AAED,MAAM,cAAc;IAEhB,YAAmB,MAA6B;QAA7B,WAAM,GAAN,MAAM,CAAuB;IAAI,CAAC;IAErD,IAAI,SAAS;QACT,MAAM,SAAS,GAAG,EAAsB,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;gBACrE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC3B;QACL,CAAC,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,YAAY;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,mBAAmB,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAEhH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/C,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAE,sBAAsB;SAC9C;aACI;YACD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAC,KAAK,EAAE,EAAE;gBAC3B,IAAI,KAAK,KAAK,CAAC,EAAE;oBACb,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAK,sBAAsB;iBAC7C;qBACI;oBACD,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAK,0CAA0C;iBACjE;gBACD,4CAA4C;YAChD,CAAC,CAAC,CAAC;SACN;QACD,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAyB;QACzC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;SAC/D;QACD,IAAI,KAAK,GAAG,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC;QACvB,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE;gBAC7F,KAAK,GAAG,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAC3E,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACtB;iBACI;gBACD,KAAK,CAAC,MAAM,EAAE,CAAC;aAClB;SACJ;QACD,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,QAAQ;QACJ,oBAAoB;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAC3B,OAAO,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAC,CAAC,EAAE,CAAC;QACjE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IAED,SAAS;QACL,iBAAiB;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC;QAClC,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,QAAQ,CAAC;YACb,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAClC,IAAI,UAAU,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;oBAAE,SAAS;iBAAE;gBACrD,IAAI,UAAU,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE;oBACvD,6CAA6C;oBAC7C,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;oBAClC,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;oBACrC,QAAQ,GAAG,UAAU,CAAC;oBACtB,MAAM;iBACT;gBACD,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ,GAAG,UAAU,CAAC,MAAM,EAAE;oBAC5D,gDAAgD;oBAChD,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,6BAA6B;oBAChE,QAAQ,GAAG,UAAU,CAAC;oBACtB,MAAM;iBACT;aACJ;YACD,IAAI,QAAQ,EAAE;gBACV,qCAAqC;gBACrC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzB,CAAC,EAAE,CAAC;aACP;SACJ;QACD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,KAAK,KAAK,EAAE,sDAAsD,CAAC,CAAC;IAC1G,CAAC;CACJ;AAED,MAAM,cAAc;IAChB,YAAmB,MAA6B;QAA7B,WAAM,GAAN,MAAM,CAAuB;IAAI,CAAC;CACxD;AAED,MAAM,mBAAmB;IACrB,YAAmB,IAAY,EAAS,MAAc,EAAS,QAAgB,EAAS,MAAc;QAAnF,SAAI,GAAJ,IAAI,CAAQ;QAAS,WAAM,GAAN,MAAM,CAAQ;QAAS,aAAQ,GAAR,QAAQ,CAAQ;QAAS,WAAM,GAAN,MAAM,CAAQ;IAAI,CAAC;CAC9G;AAED,MAAM,UAAU;IAKZ,YACW,IAAY,EACZ,WAAoB,EACpB,SAAiB,EACjB,UAA0B,EAC1B,YAAoB,EACpB,gBAAwB,EACxB,cAAsB,EACtB,SAAsB;QAPtB,SAAI,GAAJ,IAAI,CAAQ;QACZ,gBAAW,GAAX,WAAW,CAAS;QACpB,cAAS,GAAT,SAAS,CAAQ;QACjB,eAAU,GAAV,UAAU,CAAgB;QAC1B,iBAAY,GAAZ,YAAY,CAAQ;QACpB,qBAAgB,GAAhB,gBAAgB,CAAQ;QACxB,mBAAc,GAAd,cAAc,CAAQ;QACtB,cAAS,GAAT,SAAS,CAAa;QAZjC,kBAAa,GAAG,CAAC,CAAC,CAAC;QACnB,cAAS,GAAG,CAAC,CAAC,CAAC;QACf,cAAS,GAAG,CAAC,CAAC,CAAC;IAWX,CAAC;IAEL,IAAI,eAAe;QACf,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/E,iCAAiC;YACjC,OAAO,IAAI,CAAC,gBAAgB,CAAC;SAChC;QAED,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,GAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QAC5H,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,IAAI,OAAO;QACP,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,IAAI,gCAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpF,CAAC;CACJ;AAED,MAAM,qBAAsB,SAAQ,KAAK;IACrC,gBAAgB,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC,CAAC;CAC3E;AACD,MAAM,kBAAmB,SAAQ,KAAK;IAClC,YAAmB,MAAyB,EAAS,GAAoB,EAAE,OAAe;QACtF,KAAK,CAAC,OAAO,CAAC,CAAC;QADA,WAAM,GAAN,MAAM,CAAmB;QAAS,QAAG,GAAH,GAAG,CAAiB;IAEzE,CAAC;CACJ;AACD,MAAM,UAAU;IAGZ,YACW,OAAuB,EACvB,OAA0B,EAC1B,IAAqB,EACrB,cAAc,KAAK,EACnB,QAAQ,EAAuC;QAJ/C,YAAO,GAAP,OAAO,CAAgB;QACvB,YAAO,GAAP,OAAO,CAAmB;QAC1B,SAAI,GAAJ,IAAI,CAAiB;QACrB,gBAAW,GAAX,WAAW,CAAQ;QACnB,UAAK,GAAL,KAAK,CAA0C;QAP1D,eAAU,GAAe,IAAI,CAAC;QAS1B,IAAI,CAAC,CAAC,OAAO,YAAY,gCAAiB,CAAC,EAAE;YACzC,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;SACvE;QAED,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACpD,IAAI,GAAG,IAAI,KAAK,EAAE;YACd,mGAAmG;YACnG,8GAA8G;YAE9G,6GAA6G;YAC7G,sGAAsG;YACtG,kEAAkE;YAElE,0DAA0D;YAE1D,2EAA2E;YAC3E,kEAAkE;YAClE,uEAAuE;YACvE,+EAA+E;YAC/E,wHAAwH;YACxH,kGAAkG;YAClG,2EAA2E;YAC3E,2FAA2F;YAE3F,sFAAsF;YAEtF,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACzB,MAAM,QAAQ,GAAG,uBAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;YACrG,kRAAkR;YAClR,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,aAAa,EAAE,QAAQ,CAAC,GAAG,EAAE,wBAAwB,QAAQ,CAAC,GAAG,UAAU,aAAa,CAAC,IAAI,OAAO,aAAa,CAAC,MAAM,IAAI,aAAa,CAAC,QAAQ,wBAAwB,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,qCAAqC,KAAK,CAAC,IAAI,sDAAsD,CAAC,CAAC;YACpV,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACxC,MAAM,KAAK,CAAC;SACf;QACD,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,8GAA8G;QAC9G,sDAAsD;QACtD,gBAAgB;QAChB,0HAA0H;QAC1H,IAAI;QACJ,6BAA6B;QAC7B,oEAAoE;QACpE,IAAI;QACJ,6CAA6C;QAC7C,8GAA8G;QAC9G,IAAI;IACR,CAAC;IAED,WAAW;QACP,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,oBAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7H,IAAI,OAAO,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,OAAO,CAAC,IAAI,wBAAwB,CAAC,CAAC;SACnF;QACD,wDAAwD;QACxD,kHAAkH;QAClH,IAAI;QACJ,kDAAkD;QAClD,oFAAoF;QACpF,gCAAgC;QAChC,oCAAoC;QACpC,4GAA4G;QAC5G,IAAI;IACR,CAAC;IAID,KAAK,CAAC,aAAa,CAAC,iBAAiB,GAAG,KAAK;QACzC,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;YAChD,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;SACrC;QACD,IAAI,UAAU,GAAmB,IAAI,CAAC;QAEtC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QACxC,IAAI,CAAC,iBAAiB,EAAE;YACpB,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;SACpD;QAED,MAAM,aAAa,GAAG,EAAoB,CAAC;QAC3C,MAAM,IAAI,CAAC,cAAc,EAAE;aACtB,IAAI,CAAC,KAAK,CAAC,EAAE;YACV,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC9B,IAAI,OAAO,EAAE;gBACb,uBAAuB;gBACnB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,oCAAoC,KAAK,CAAC,IAAI,GAAG,CAAC;qBAC5H,IAAI,CAAC,KAAK,EAAC,SAAS,EAAC,EAAE;oBACpB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;oBAClF,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;oBACzD,SAAS,CAAC,OAAO,EAAE,CAAC;oBACpB,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;gBAC7D,CAAC,CAAC,CAAC;gBACP,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC/B;QACL,CAAC,CAAC,CAAC;QACP,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC7C,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACjB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QACH,gCAAgC;QAChC,OAAO,UAAU,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACZ,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;YAC1B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;SAC3B;QAED,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QAChE,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,IAAI,CAAC,aAAa,EAAE;aACrB,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;YACf,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACzB,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC;QACzB,CAAC,CAAC,CAAC;QACP,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,QAAQ,CACV,UAKI;QACA,aAAa,EAAE,IAAI;QACnB,QAAQ,EAAE,KAAK;KAClB;QAED,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,YAAY,KAAK,CAAC,EAAE;YAC/E,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;SACxE;QACD,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,YAAY,KAAK,CAAC,EAAE;YAC/E,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;SACxE;QACD,IAAI,CAAC,WAAW,EAAC,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;YACnE,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAC;SAClE;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;YAC1B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;SAC3B;QAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,OAAO,CAAC,IAAI,kBAAkB,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAEzJ,QAAQ,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;YAC/B,KAAK,8BAAW,CAAC,MAAM,CAAC,CAAC;gBACrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;gBACvC,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;gBACjC,OAAO,GAAG,CAAC;aACd;YACD,KAAK,8BAAW,CAAC,SAAS,CAAC,CAAC;gBACxB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;gBACvC,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;gBAClC,OAAO,IAAI,4BAAa,CAAC,IAAI,CAAC,CAAC;aAClC;YACD,KAAK,8BAAW,CAAC,MAAM,CAAC,CAAC;gBACrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;gBACvC,OAAO,MAAM,CAAC,MAAM,CAAC;aACxB;YACD,KAAK,8BAAW,CAAC,KAAK,CAAC;YACvB,KAAK,8BAAW,CAAC,MAAM,CAAC,CAAC;gBACrB,qDAAqD;gBACrD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK,8BAAW,CAAC,KAAK,CAAC;gBAEhE;;mBAEG;gBACH,MAAM,kBAAkB,GAAG,CAAC,GAAa,EAAE,EAAE;oBACzC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACvD,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,uBAAQ,CAAC,GAAG,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACzF,CAAC,CAAC;gBACF,MAAM,aAAa,GAAe,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,YAAY,uBAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAqB,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClM,MAAM,aAAa,GAAe,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,YAAY,uBAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAqB,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAElM,gFAAgF;gBAChF,yDAAyD;gBACzD,wCAAwC;gBACxC,0CAA0C;gBAC1C,mEAAmE;gBACnE,QAAQ;gBACR,IAAI;gBACJ,gFAAgF;gBAChF,yDAAyD;gBACzD,wCAAwC;gBACxC,0CAA0C;gBAC1C,mEAAmE;gBACnE,QAAQ;gBACR,IAAI;gBACJ,qEAAqE;gBACrE,wCAAwC;gBACxC,2IAA2I;gBAC3I,sFAAsF;gBACtF,kCAAkC;gBAClC,+CAA+C;gBAC/C,QAAQ;gBACR,IAAI;gBAEJ,MAAM,QAAQ,GAAG,EAAoB,CAAC;gBACtC,MAAM,aAAa,GAAG,CAAC,GAAoB,EAAE,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;gBAC3G,MAAM,kBAAkB,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrJ,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpJ,MAAM,UAAU,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,kBAAkB,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAE,IAAI,OAAO,CAAC,aAAa,KAAK,KAAK,CAAC;gBACnQ,MAAM,GAAG,GAAgD,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,2BAAY,EAAE,CAAC,CAAC,CAAC,EAAW,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtH,MAAM,aAAa,GAAG,EAAyC,CAAC;gBAChE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,kBAAkB,IAAI,gBAAgB,EAAE;oBACrE,MAAM,SAAS,GAAG,aAAa;yBAC1B,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAgC;yBACrF,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;yBACjC,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAa,CAAC,CAAC,IAAI,IAAI,EAAE,EAAc,CAAC,CAAC;oBAC/G,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;wBACtB,aAAa,CAAC,SAAS,GAAG,SAAS,CAAC;qBACvC;iBACJ;gBAED,MAAM,cAAc,GAAG,KAAK,EAAE,KAAqB,EAAE,EAAE;oBACnD,IAAI,SAAS,CAAC;oBACd,IAAI;wBACA,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,+BAA+B,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;wBAE/I,qDAAqD;wBACrD,yEAAyE;wBACzE,MAAM,YAAY,GAAG,EAGpB,CAAC;wBACF,MAAM,cAAc,GAAG,CAAC,MAAkB,EAAE,EAAE;4BAC1C,OAAO,MAAM;iCACR,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;gCACjB,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gCAC7B,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,GAAG,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;4BACnI,CAAC,CAAC;iCACD,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,uBAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC/D,CAAC,CAAC;wBACF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;4BAC1B,MAAM,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;4BAC9C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gCAAE,YAAY,CAAC,OAAO,GAAG,OAAO,CAAC;6BAAE;yBAC9D;wBACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;4BAC1B,MAAM,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;4BAC9C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gCAAE,YAAY,CAAC,OAAO,GAAG,OAAO,CAAC;6BAAE;yBAC9D;wBACD,+CAA+C;wBAC/C,gDAAgD;wBAChD,IAAI;wBAEJ,mCAAmC;wBACnC,4DAA4D;wBAC5D,0BAA0B;wBAC1B,iFAAiF;wBACjF,QAAQ;wBACR,0DAA0D;wBAC1D,sQAAsQ;wBACtQ,4CAA4C;wBAC5C,WAAW;wBACX,IAAI;wBAEJ,6JAA6J;wBAC7J,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;wBACpG,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;wBAC/C,GAAW,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;qBACzD;oBACD,OAAO,MAAM,EAAE;wBACX,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,mCAAmC,EAAE,MAAM,CAAC,CAAC;wBACtE,MAAM,MAAM,CAAC;qBAChB;4BACO;wBACJ,SAAS,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;qBACpC;gBACL,CAAC,CAAC;gBAEF,IAAI;oBACA,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;yBACnC,IAAI,CAAC,KAAK,CAAC,EAAE;wBACV,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;wBACrD,IAAI,OAAO,CAAC,aAAa,KAAK,KAAK,IAAI,CAAC,8BAAW,CAAC,MAAM,EAAE,8BAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;4BACjG,mDAAmD;4BACnD,OAAO;yBACV;wBACD,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,qHAAqH;4BACzT,mDAAmD;4BACnD,OAAO;yBACV;wBACD,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,EAAE;4BAC/F,+CAA+C;4BAC/C,OAAO;yBACV;wBACD,IAAI,KAAK,CAAC,OAAO,EAAE;4BACf,MAAM,iBAAiB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;4BAChD,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;yBACpC;6BACI,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,WAAW,EAAE;4BACxC,GAAW,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;yBAC1C;6BACI;4BACD,IAAI,OAAO,EAAE;gCACT,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,KAAK,8CAA8C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;6BACpH;iCACI;gCACD,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAC,GAAG,8CAA8C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;6BAChH;yBACJ;oBACL,CAAC,CAAC,CAAC;oBACP,gCAAgC;oBAChC,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,uCAAuC;oBACpE,OAAO,GAAG,CAAC;iBACd;gBACD,OAAO,GAAG,EAAE;oBACR,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC9B,MAAM,GAAG,CAAC;iBACb;aACJ;YACD,OAAO,CAAC,CAAC;gBACL,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;aAClF;SACJ;IACL,CAAC;IAED,aAAa;QACT,IAAI,CAAC,WAAW,EAAE,CAAC;QAGnB,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;QACxD,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,sKAAsK;QACjO,MAAM,SAAS,GAAG;YACd;;;eAGG;YACH,KAAK,CAAC,IAAI,CAAC,QAA8B;gBACrC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;SACJ,CAAC;QAEF,MAAM,IAAI,GAAG,KAAK,EAAE,QAA8B,EAAE,EAAE;YAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAE9F,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;gBAC1B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;aAC3B;YACD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YAEnC,iEAAiE;YACjE,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;YAC5C,MAAM,MAAM,GAAG,EAA4D,CAAC,CAAC,yFAAyF;YACtK,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;gBACxB,IAAI,KAAK,GAAG;oBACR,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,MAAM,EAAE,KAAK,CAAC,MAAM;iBACvB,CAAC;gBACF,IAAI,WAAW,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC;gBAClD,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,GAAC,CAAC,EAAE;oBACvB,WAAW,IAAI,cAAc,CAAC;oBAC9B,WAAW,IAAI,UAAU,CAAC,gBAAgB,CAAC;iBAC9C;gBACD,UAAU,IAAI,WAAW,CAAC;gBAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC7B,8CAA8C;oBAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;oBACnC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;oBACjB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACnB,KAAK,GAAG;wBACJ,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAG,CAAC;wBAC5B,MAAM,EAAE,SAAS;qBACpB,CAAC;iBACL;gBACD,OAAO,KAAK,CAAC,MAAM,GAAG,kBAAkB,EAAE;oBACtC,4CAA4C;oBAC5C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,kBAAkB,CAAC;oBACpD,KAAK,CAAC,MAAM,GAAG,kBAAkB,CAAC;oBAClC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACnB,KAAK,GAAG;wBACJ,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAG,kBAAkB;wBAC7C,MAAM,EAAE,SAAS;qBACpB,CAAC;iBACL;gBACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;YAExC,+EAA+E;YAC/E,uEAAuE;YACvE,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,CAAC;YAC5C,IAAI,kBAAkB,GAAG,UAAU,CAAC,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC;YAC3E,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,UAAU,CAAC;YAE9E,IAAI,OAAO,GAAG,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC;gBACzD,IAAI,EAAE,cAAc;gBACpB,SAAS;gBACT,MAAM;gBACN,UAAU,EAAE,CAAC;gBACb,UAAU;gBACV,UAAU,EAAE,WAAW;gBACvB,SAAS;gBACT,YAAY;aACf,CAAC,KAAK,KAAK,CAAC,CAAC;YAEd,IAAI,WAAW,EAAE;gBAAE,OAAO,GAAG,KAAK,CAAC;aAAE;YACrC,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,OAAO,OAAO,EAAE;gBACZ,uCAAuC;gBACvC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5B,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC9E,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC;gBAC3C,IAAI,kBAAkB,GAAG,UAAU,CAAC,YAAY,EAAE;oBAC9C,sCAAsC;oBACtC,MAAM,oBAAoB,GAAG,UAAU,CAAC,YAAY,GAAG,kBAAkB,CAAC;oBAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;oBACpD,SAAS,IAAI,IAAI,CAAC;oBAClB,MAAM,IAAI,IAAI,CAAC;oBACf,kBAAkB,IAAI,IAAI,CAAC;oBAC3B,IAAI,MAAM,IAAI,CAAC,EAAE;wBACb,KAAK,EAAE,CAAC;wBACR,SAAS;qBACZ;iBACJ;gBACD,MAAM,WAAW,GAAG,KAAK,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC;gBAChD,IAAI,WAAW,EAAE;oBACb,MAAM,IAAI,cAAc,GAAG,gBAAgB,CAAC;iBAC/C;gBACD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;gBACpC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAC/D,OAAO,GAAG,MAAM,QAAQ,CAAC;oBACrB,IAAI;oBACJ,SAAS;oBACT,MAAM;oBACN,UAAU,EAAC,KAAK;oBAChB,UAAU;oBACV,UAAU,EAAE,WAAW;oBACvB,SAAS;oBACT,YAAY;iBACf,CAAC,KAAK,KAAK,CAAC;gBAEb,IAAI,WAAW,EAAE;oBAAE,OAAO,GAAG,KAAK,CAAC;iBAAE;gBACrC,KAAK,EAAE,CAAC;aACX;YACD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QACjC,CAAC,CAAC;QAEF,OAAO,SAAS,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,UAA+C,EAAE;QAC5D,IAAI,CAAC,WAAW,EAAE,CAAC;QAGnB,IAAI,QAA+B,CAAC;QACpC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,SAAS,GAAG;YACd,KAAK,CAAC,IAAI,CAAC,EAAyB,EAAE,QAAQ,GAAG,KAAK;gBAClD,QAAQ,GAAG,EAAE,CAAC;gBACd,OAAO,GAAG,QAAQ,CAAC;gBACnB,OAAO,KAAK,EAAE,CAAC;YACnB,CAAC;SACJ,CAAC;QAEF,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;YACrB,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;gBAC1B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;aAC3B;YAED,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK,8BAAW,CAAC,KAAK,CAAC;YAC1D,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;gBAC7B,OAAO,0BAA0B,EAAE,CAAC;aACvC;iBACI,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;gBACxD,4CAA4C;gBAC5C,OAAO,0BAA0B,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;aACtE;iBACI;gBACD,OAAO,IAAI,CAAC,aAAa,EAAE;qBACtB,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE;oBACnC,MAAM,WAAW,GAAG,UAAU,KAAK,MAAM,CAAC,MAAM,GAAC,CAAC,CAAC;oBACnD,OAAO,0BAA0B,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,aAAa;gBACvE,CAAC,CAAC,CAAC;aACV;QACL,CAAC,CAAC;QAEF,6DAA6D;QAC7D,MAAM,0BAA0B,GAAG,KAAK,IAAI,EAAE;YAC1C,MAAM,IAAI,GAAG,IAAI,uBAAe,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,EAAE,GAAG,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,qBAAqB;YAE5D,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,IAAI,OAAO,CAAC,SAAS,EAAE;gBAEnB,uCAAuC;gBACvC,uDAAuD;gBACvD,wCAAwC;gBACxC,wDAAwD;gBACxD,6FAA6F;gBAC7F,qBAAqB;gBACrB,UAAU;gBAEV,6DAA6D;gBAC7D,mKAAmK;gBACnK,yEAAyE;gBACzE,uBAAuB;gBACvB,+CAA+C;gBAC/C,+EAA+E;gBAC/E,kFAAkF;gBAClF,mCAAmC;gBACnC,QAAQ;gBACR,IAAI;gBAEJ,uIAAuI;gBACvI,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC9E,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE;oBAClC,MAAM,SAAS,GAAG,OAAO;wBACrB,CAAC,CAAC,IAAI,0BAAc,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE,GAAa,EAAE,CAAC;wBACpF,CAAC,CAAC,IAAI,0BAAc,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,GAAa,EAAE,CAAC,CAAC;oBACtF,MAAM,GAAG,GAAG,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;oBAClE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;wBACX,IAAI,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;wBACtC,IAAI,OAAO,IAAI,MAAM,YAAY,OAAO,EAAE;4BAAE,MAAM,GAAG,MAAM,MAAM,CAAC;yBAAE;wBACpE,QAAQ,GAAG,MAAM,KAAK,KAAK,CAAC,CAAC,0CAA0C;wBACvE,IAAI,QAAQ,EAAE;4BAAE,MAAM;yBAAE;qBAC3B;iBACJ;aACJ;iBACI;gBACD,mDAAmD;gBACnD,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;gBACrC,OAAO,IAAI,EAAE;oBACT,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;wBAClD,MAAM,KAAK,GAAG,OAAO;4BACjB,CAAC,CAAC,IAAI,0BAAc,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,GAAa,EAAE,CAAC;4BAChG,CAAC,CAAC,IAAI,0BAAc,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAa,EAAE,CAAC,CAAC;wBAClG,MAAM,GAAG,GAAG,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;wBACpE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;4BAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;yBAAE;wBACrC,OAAO,KAAK,CAAC;oBACjB,CAAC,EAAE,EAAE,CAAC,CAAC;oBAEP,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBAClD,IAAI,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBACtC,IAAI,OAAO,IAAI,MAAM,YAAY,OAAO,EAAE;4BAAE,MAAM,GAAG,MAAM,MAAM,CAAC;yBAAE;wBACpE,QAAQ,GAAG,MAAM,KAAK,KAAK,CAAC,CAAC,0CAA0C;qBAC1E;oBACD,IAAI,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBAClE;aACJ;YACD,OAAO,CAAC,QAAQ,CAAC;QACrB,CAAC,CAAC;QAEF,kCAAkC;QAClC,MAAM,kBAAkB,GAAG,CAAC,KAAqB,EAAE,MAA6B,EAAE,KAAa,EAAE,EAAE;YAC/F,4BAA4B;YAC5B,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;gBAC7B,IAAI,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE;oBAC/B,MAAM,IAAI,qBAAqB,EAAE,CAAC;iBACrC;YACL,CAAC,CAAC;YACF,MAAM,CAAC,CAAC,CAAC,CAAC;YACV,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,qBAAqB;YACrB,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;YACtC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACpC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC;YACnC,MAAM,gBAAgB,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,MAAM,WAAW,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;YAC7C,MAAM,aAAa,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC;YAChD,MAAM,aAAa,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC;YAEhD,KAAK,IAAI,CAAC,CAAC;YACX,IAAI,SAAS,EAAE;gBACX,IAAI,CAAC,8BAA8B,EAAE;oBACjC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;iBACzE;gBACD,qEAAqE;gBACrE,qEAAqE;gBACrE,2EAA2E;gBAC3E,uCAAuC;gBACvC,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBACzB,KAAK,IAAI,gBAAgB,CAAC;gBAC1B,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;gBACrB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,uBAAuB;aACxD;iBACI,IAAI,WAAW,EAAE;gBAClB,IAAI,KAAK,CAAC,IAAI,KAAK,8BAAW,CAAC,OAAO,EAAE;oBAAE,KAAK,CAAC,KAAK,GAAG,SAAS,KAAK,CAAC,CAAC;iBAAE;qBACrE,IAAI,KAAK,CAAC,IAAI,KAAK,8BAAW,CAAC,MAAM,EAAE;oBAAE,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;iBAAE;qBACnE,IAAI,KAAK,CAAC,IAAI,KAAK,8BAAW,CAAC,MAAM,EAAE;oBAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;iBAAE;qBAC3E,IAAI,KAAK,CAAC,IAAI,KAAK,8BAAW,CAAC,MAAM,EAAE;oBAAE,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;iBAAE;qBAC5D,IAAI,KAAK,CAAC,IAAI,KAAK,8BAAW,CAAC,KAAK,EAAE;oBAAE,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;iBAAE;qBAC3D,IAAI,KAAK,CAAC,IAAI,KAAK,8BAAW,CAAC,MAAM,EAAE;oBAAE,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;iBAAE;qBAC5D,IAAI,KAAK,CAAC,IAAI,KAAK,8BAAW,CAAC,MAAM,EAAE;oBAAE,KAAK,CAAC,KAAK,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;iBAAE;qBAC5E,IAAI,KAAK,CAAC,IAAI,KAAK,8BAAW,CAAC,SAAS,EAAE;oBAAE,KAAK,CAAC,KAAK,GAAG,IAAI,4BAAa,CAAC,EAAE,CAAC,CAAC;iBAAE;qBAClF;oBAAE,MAAM,IAAI,KAAK,CAAC,4DAA4D,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;iBAAE;aACtG;iBACI,IAAI,aAAa,EAAE;gBACpB,MAAM,MAAM,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;gBACpC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACf,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;gBAClD,IAAI,KAAK,CAAC,IAAI,KAAK,8BAAW,CAAC,MAAM,EAAE;oBAAE,KAAK,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;iBAAE;qBACzE,IAAI,KAAK,CAAC,IAAI,KAAK,8BAAW,CAAC,MAAM,EAAE;oBAAE,KAAK,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;iBAAE;qBAC9E,IAAI,KAAK,CAAC,IAAI,KAAK,8BAAW,CAAC,MAAM,EAAE;oBACxC,KAAK,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,8CAA8C;iBACpF;qBACI,IAAI,KAAK,CAAC,IAAI,KAAK,8BAAW,CAAC,QAAQ,EAAE;oBAAE,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;oBAAC,KAAK,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;iBAAE;gBAClH,8DAA8D;qBACzD,IAAI,KAAK,CAAC,IAAI,KAAK,8BAAW,CAAC,KAAK,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;iBAAE;qBAC1G,IAAI,KAAK,CAAC,IAAI,KAAK,8BAAW,CAAC,MAAM,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;iBAAE;qBAC5G,IAAI,KAAK,CAAC,IAAI,KAAK,8BAAW,CAAC,MAAM,EAAE;oBAAE,KAAK,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;iBAAE;qBACtF,IAAI,KAAK,CAAC,IAAI,KAAK,8BAAW,CAAC,SAAS,EAAE;oBAC3C,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,8CAA8C;oBAChF,KAAK,CAAC,KAAK,GAAG,IAAI,4BAAa,CAAC,IAAI,CAAC,CAAC;iBACzC;qBACI;oBACD,MAAM,IAAI,KAAK,CAAC,8DAA8D,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;iBAC/F;gBACD,KAAK,IAAI,MAAM,CAAC;aACnB;iBACI,IAAI,aAAa,EAAE;gBACpB,iBAAiB;gBACjB,MAAM,CAAC,CAAC,CAAC,CAAC;gBACV,IAAI,OAAQ,MAAc,CAAC,MAAM,KAAK,WAAW,EAAE;oBAC/C,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;iBACnC;gBACD,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAE,MAAqB,CAAC,MAAM,EAAG,MAAqB,CAAC,UAAU,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;gBACvG,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;gBAChJ,KAAK,CAAC,OAAO,GAAG,IAAI,gCAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAEnE,kCAAkC;gBAClC,kFAAkF;gBAClF,IAAI,IAAI,CAAC,WAAW,EAAE;oBAClB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;iBACjD;gBAED,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;oBACrD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;iBACxD;gBAED,KAAK,IAAI,CAAC,CAAC;aACd;iBACI;gBACD,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;aAC9B;YAED,yCAAyC;YACzC,OAAO,EAAE,KAAK,EAAE,CAAC;QACrB,CAAC,CAAC;QAEF,8DAA8D;QAC9D,IAAI,cAAc,GAAe,IAAI,CAAC;QACtC,MAAM,oBAAoB,GAAG,CAAC,SAAiB,EAAE,MAAkB,EAAE,EAAE;YACnE,IAAI,cAAc,KAAK,IAAI,EAAE;gBACzB,2CAA2C;gBAC3C,MAAM,GAAG,iBAAiB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;gBACnD,cAAc,GAAG,IAAI,CAAC;aACzB;YACD,MAAM,QAAQ,GAAG,EAAE,CAAC;YACpB,IAAI,SAAS,KAAK,8BAAW,CAAC,MAAM,IAAI,SAAS,KAAK,8BAAW,CAAC,KAAK,EAAE;gBACrE,OAAO,GAAG,SAAS,KAAK,8BAAW,CAAC,KAAK,CAAC;gBAC1C,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;oBAC7B,IAAI,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,4BAA4B;wBAC7D,MAAM,IAAI,qBAAqB,EAAE,CAAC;qBACrC;gBACL,CAAC,CAAC;gBAEF,oCAAoC;gBACpC,OAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE;oBACzB,MAAM,UAAU,GAAG,KAAK,CAAC;oBACzB,MAAM,KAAK,GAAG,IAAI,0BAAc,CAAC,EAAE,CAAC,CAAC;oBAErC,IAAI;wBACA,IAAI,OAAO,EAAE;4BACT,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,6GAA6G;4BAC5I,KAAK,CAAC,IAAI,GAAG,uBAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;4BAClE,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC;yBAC5B;6BACI;4BACD,MAAM,CAAC,CAAC,CAAC,CAAC;4BACV,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC;4BACjG,IAAI,QAAQ,IAAI,CAAC,EAAE;gCACf,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gCAC5C,KAAK,CAAC,IAAI,GAAG,uBAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;gCACjE,KAAK,IAAI,CAAC,CAAC;6BACd;iCACI;gCACD,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;gCAC5C,KAAK,EAAE,CAAC;gCACR,MAAM,CAAC,SAAS,CAAC,CAAC;gCAClB,IAAI,GAAG,GAAG,EAAE,CAAC;gCACb,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;oCAC/B,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;iCACjD;gCAED,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;gCAChB,KAAK,CAAC,IAAI,GAAG,uBAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gCAC3D,KAAK,IAAI,SAAS,CAAC;6BACtB;yBACJ;wBAED,MAAM,GAAG,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;wBACrD,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;wBAClB,UAAU,EAAE,CAAC;wBACb,IAAI,GAAG,CAAC,IAAI,EAAE;4BACV,SAAS;yBACZ;6BACI,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,IAAI,CAAE,OAAO,CAAC,SAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;4BAC5F,SAAS;yBACZ;6BACI,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,IAAI,CAAE,OAAO,CAAC,SAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;4BAC7F,SAAS;yBACZ;wBAED,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBACxB;oBACD,OAAM,GAAG,EAAE;wBACP,IAAI,GAAG,YAAY,qBAAqB,EAAE;4BACtC,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;4BAC1C,MAAM;yBACT;6BACI;4BACD,MAAM,GAAG,CAAC;yBACb;qBACJ;oBACD,OAAO;iBACV;aACJ;YACD,OAAO,QAAQ,CAAC;QACpB,CAAC,CAAC;QAEF,MAAM,0BAA0B,GAAG,KAAK,EAAE,SAAqB,EAAE,WAAoB,EAAE,EAAE;YACrF,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,qBAAqB;YAClG,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAChC,IAAI,OAAO,IAAI,MAAM,YAAY,OAAO,EAAE;oBAAE,MAAM,GAAG,MAAM,MAAM,CAAC;iBAAE;gBACpE,QAAQ,GAAG,MAAM,KAAK,KAAK,CAAC,CAAC,0CAA0C;aAC1E;YACD,IAAI,QAAQ,IAAI,WAAW,EAAE;gBACzB,OAAO,KAAK,CAAC;aAChB;QACL,CAAC,CAAC;QAEF,OAAO,SAAS,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa;QACf,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,IAAI,CAAC,cAAc,EAAE;aACtB,IAAI,CAAC,SAAS,CAAC,EAAE;YACd,KAAK,EAAE,CAAC;YACR,OAAO,IAAI,CAAC,CAAC,QAAQ;QACzB,CAAC,CAAC,CAAC;QACP,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,YAAY,CAAC,GAAoB;QACnC,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAwB,EAAE,CAAC;aACjE,IAAI,CAAC,IAAI,CAAC,EAAE;YACT,SAAS,GAAG,IAAI,CAAC;QACrB,CAAC,CAAC,CAAC;QACP,IAAI,SAAS,EAAE;YACX,OAAO,SAAS,CAAC;SACpB;QACD,MAAM,SAAS,GAAG,uBAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAChE,OAAO,IAAI,0BAAc,6CACrB,IAAI,EAAE,SAAS,IACZ,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,EAAE,GAAG,EAAE,GAAa,EAAE,CAAC,GACnD,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,EAAE,KAAK,EAAE,GAAa,EAAE,CAAC,KACxD,MAAM,EAAE,KAAK,IACf,CAAC;IACP,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,MAAyB,EAAE,KAAa;QAC1D,IAAI,MAAM,YAAY,KAAK,EAAE;YACzB,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAChC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAClD,MAAM,WAAW,GAAG;YAChB,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC,GAAG,UAAU,CAAC;YACnD,MAAM,EAAE,CAAC,YAAY,GAAG,KAAK,CAAC,GAAG,UAAU;SAC9C,CAAC;QACF,MAAM,SAAS,GAAG;YACd,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,KAAK,GAAG,MAAM,CAAC,GAAG,UAAU,CAAC;YAC5D,MAAM,EAAE,CAAC,YAAY,GAAG,KAAK,GAAG,MAAM,CAAC,GAAG,UAAU;SACvD,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAClG,MAAM,WAAW,GAAG,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;QACrE,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACzC,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC3E,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC;YACxC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACT,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC;gBAC7B,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC;aACjC;YACD,IAAI,OAAO,GAAG,OAAO,GAAG,MAAM,EAAE;gBAC5B,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;aAC9B;YACD,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YACnE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACf,OAAO,IAAI,OAAO,CAAC;SACtB;QACD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,yFAAyF;IACzF,KAAK,CAAC,eAAe,CAAC,KAAa,EAAE,MAAc;QAC/C,0EAA0E;QAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAClD,MAAM,WAAW,GAAG;YAChB,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC,GAAG,UAAU,CAAC;YACnD,MAAM,EAAE,CAAC,YAAY,GAAG,KAAK,CAAC,GAAG,UAAU;SAC9C,CAAC;QACF,MAAM,SAAS,GAAG;YACd,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,KAAK,GAAG,MAAM,CAAC,GAAG,UAAU,CAAC;YAC5D,MAAM,EAAE,CAAC,YAAY,GAAG,KAAK,GAAG,MAAM,CAAC,GAAG,UAAU;SACvD,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACjG,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;SAC3D;QACD,MAAM,UAAU,GAAG,cAAc,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;QACnE,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,MAAM,WAAW,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC;QAC3E,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC3E,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC;YACxC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACT,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC;gBAC7B,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC;aACjC;YACD,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAClE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACd,OAAO,IAAI,OAAO,CAAC;SACtB;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,gFAAgF;QAEhF,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9F,IAAI,IAAI,GAAG,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC;QAE1C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACtE,IAAI,SAAS,GAAG,cAAc,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,SAAS,cAAc,cAAc,YAAY,SAAS,EAAE,CAAC,CAAC;SAAE;QAE9J,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,KAAK,aAAa,CAAC;QAChE,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,wDAAwD;QAErG,mBAAmB;QACnB,IAAI,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,MAAM,UAAU,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC1F,oCAAoC;QACpC,MAAM,MAAM,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5B,MAAM,UAAU,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,kBAAkB,GAAG,CAAC,CAAC;QAC3B,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,OAAM,CAAC,IAAI,EAAE;YAET,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC/B,+BAA+B;gBAC/B,kBAAkB,EAAE,CAAC;gBACrB,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;gBACzD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACpF,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC;gBAChD,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACxD,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACzC,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACpC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,IAAI,KAAK,CAAC,EAAE;gBACZ,uBAAuB;gBACvB,MAAM,EAAE,CAAC;gBACT,IAAI,GAAG,IAAI,CAAC;aACf;iBACI,IAAI,IAAI,KAAK,CAAC,EAAE;gBACjB,uDAAuD;gBACvD,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC/C,MAAM,IAAI,CAAC,CAAC;aACf;iBACI,IAAI,IAAI,KAAK,CAAC,EAAE;gBACjB,yDAAyD;gBACzD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAE1C,MAAM,KAAK,GAAG,IAAI,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAChE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnB,MAAM,IAAI,CAAC,CAAC;aACf;iBACI,IAAI,IAAI,KAAK,CAAC,EAAE;gBACjB,0DAA0D;gBAC1D,sBAAsB;gBACtB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC9C,MAAM,KAAK,GAAG,IAAI,mBAAmB,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC9F,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnB,MAAM,IAAI,CAAC,CAAC;aACf;iBACI;gBACD,MAAM,IAAI,SAAS,CAAC,sBAAsB,IAAI,4BAA4B,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;aAC7F;SACJ;QAED,MAAM,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,IAAI,CAAC,CAAC;QAEZ,MAAM,YAAY,GAAG,MAAM,CAAC;QAC5B,iDAAiD;QACjD,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC;YACtE,CAAC,CAAC,oBAAoB;YACtB,CAAC,CAAC,cAAc,GAAG,YAAY,CAAC;QAEpC,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,EACjB,WAAW,EACX,SAAS,EACT,UAAU,EACV,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,YAAY,GAAG,qBAAqB,CAAC,CACjE,CAAC;QACF,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,YAAY;QACR,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;SAAE;QACvF,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;SAAE;QACtF,OAAO,IAAI,uBAAe,CACtB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAC/B,IAAI,GAAG,GAAG,EAAE,qBAAqB;QACjC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAC/B,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,CACjD,CAAC;IACN,CAAC;CACJ;AAED;;GAEG;AACH,KAAK,UAAU,UAAU,CAAC,OAAuB,EAAE,QAAwB,EAAE,OAAqC,EAAE,IAAqB;IACrI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAC7B,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAC;KAC9D;IAED,IAAI,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACxE,MAAM,YAAY,GAA2B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,IAAI,gCAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAErD,MAAM,iBAAiB,GAAG,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;IACjD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAE7B,IAAI,UAAU,GAAG,MAAM,UAAU,CAAC,UAAU,EAAE,CAAC;IAC/C,OAAO,GAAG,UAAU,CAAC,SAAS,KAAK,8BAAW,CAAC,KAAK,CAAC;IACrD,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,mDAAmD;IAEzF,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,MAAM,IAAI,GAAG,CAAC,aAAyB,EAAE,EAAE;QACvC,IAAI,aAAa,KAAK,UAAU,CAAC,UAAU,EAAE;YACzC,oCAAoC;YACpC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC1E,WAAW,GAAG,IAAI,CAAC;SACtB;QACD,aAAa;QACb,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,0BAAc,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;QACxJ,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;IACrF,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,EAAwB,CAAC;IAEpD,IAAI,OAAO,EAAE;QACT,kCAAkC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAW,CAAC,EAAE;gBAClC,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,CAAC,IAAI,gCAAgC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;aAC7K;YACD,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;SACtD;KACJ;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;IAErC,MAAM,UAAU,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,YAAmC,EAAE,CAAC;SAC9E,IAAI,CAAC,KAAK,CAAC,EAAE;QAEV,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QACrD,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,+CAA+C;QAC/F,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAErC,oBAAoB;QACpB,IAAI,KAAK,CAAC,OAAO,EAAE;YAEf,IAAI,QAAQ,YAAY,qBAAqB,EAAE;gBAC/C,+EAA+E;gBAC/E,8DAA8D;gBAE1D,gBAAgB,GAAG,IAAI,CAAC;gBACxB,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,uCAAuC;gBACzE,MAAM,YAAY,GAAG,IAAI,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBACvE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;gBAChD,OAAO,IAAI,CAAC,CAAC,yLAAyL;aACzM;YAED,gFAAgF;YAChF,4DAA4D;YAC5D,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,4BAA4B,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;iBAC1H,IAAI,CAAC,KAAK,EAAC,SAAS,EAAC,EAAE;gBACpB,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;gBAC7E,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBACzD,SAAS,CAAC,OAAO,EAAE,CAAC;gBACpB,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;gBACpD,MAAM,iBAAiB,GAAG,IAAI,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC/E,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC;YACzD,CAAC,CAAC,CAAC;YACP,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACpC;aACI;YACD,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SAClD;IACL,CAAC,CAAC,CAAC;IAEP,MAAM,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAEtC,uFAAuF;IACvF,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAClB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,QAAQ,KAAK,IAAI,EAAE;YACnB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;SACpC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;QAC1B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,yBAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9G,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;KACtC;IAED,IAAI,OAAO,EAAE;QACT,mFAAmF;QACnF,MAAM,eAAe,GAAG,CAAC,OAAqB,EAAE,EAAE;YAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAoB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,sCAAsC;YACxG,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACxE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACtD,CAAC,CAAC;QACF,MAAM,aAAa,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,aAAa,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,QAAQ,GAAG,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC;QAC9D,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACzC,8FAA8F;YAC9F,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvD,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;YACtE,IAAI,aAAa,CAAC,MAAM,EAAE;gBAAE,QAAQ,GAAG,IAAI,CAAC;aAAE;SACjD;QACD,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACzC,0FAA0F;YAC1F,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,WAAW,GAAG,CAAC,EAAE;gBACjB,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;gBACrE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;oBAAE,QAAQ,GAAG,IAAI,CAAC;iBAAE;aAClD;SACJ;QACD,IAAI,QAAQ,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,+GAA+G,QAAQ,CAAC,IAAI,6DAA6D,CAAC,CAAC;SAC9M;KACJ;IAED,MAAM,aAAa,GAAG,EAAE,CAAC;IACzB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,QAAQ,CAAC,IAAI,mBAAmB,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,WAAW,OAAO,CAAC,OAAO,CAAC,MAAM,UAAU,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,eAAe,OAAO,CAAC,OAAO,CAAC,MAAM,UAAU,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,eAAe,OAAO,CAAC,OAAO,CAAC,MAAM,UAAU,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,yBAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9pB,IAAI,CAAC,gBAAgB,EAAE;QACnB,wDAAwD;QACxD,gDAAgD;QAChD,sCAAsC;QACtC,qEAAqE;QACrE,mBAAmB;QACnB,+DAA+D;QAC/D,mBAAmB;QACnB,+BAA+B;QAC/B,iDAAiD;QACjD,gGAAgG;QAChG,aAAa;QACb,UAAU;QACV,qEAAqE;QACrE,oCAAoC;QACpC,0GAA0G;QAC1G,oDAAoD;QACpD,MAAM;QACN,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG;aAClB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,YAAY,qBAAqB,CAAC,CAAC;aAC7D,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE;YAChB,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,KAAK,yBAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC;YAC/F,OAAO,GAAG,CAAC;QACf,CAAC,EAAE,EAAsD,CAAC,CAAC;QAC/D,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;KACnE;IAED,oEAAoE;IACpE,yDAAyD;IACzD,kDAAkD;IAClD,qBAAqB;IACrB,IAAI,aAAa,CAAC;IAClB,IAAI,UAAU,CAAC,UAAU,CAAC,WAAW,EAAE;QAEnC,oFAAoF;QACpF,6FAA6F;QAE7F,MAAM,QAAQ,GAAG,uBAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,aAAa,GAAG,EAAE,CAAC;QACzB,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE;YAC9B,kCAAkC;YAClC,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,0DAA0D;YACnH,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE;gBAC1B,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAC1F,IAAG,CAAC,CAAC,GAAG,YAAY,kBAAkB,CAAC,EAAE;oBACrC,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;iBAC/F;gBACD,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;gBAClC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;aAC3B;YACD,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE;gBAC1B,MAAM,CAAC,GAAG,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC5F,MAAM,OAAO,GAAG,CAAC,GAAuB,EAAE,EAAE;oBACxC,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;oBAClC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;gBAC5B,CAAC,CAAC;gBACF,IAAI,CAAC,YAAY,OAAO,EAAE;oBACtB,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;iBACvC;qBACI;oBACD,OAAO,CAAC,CAAC,CAAC,CAAC;iBACd;aACJ;YACD,sCAAsC;YACtC,oDAAoD;YACpD,kDAAkD;YAClD,IAAI;SACP,CAAC,IAAI;QAEN,MAAM,UAAU,GAAG,EAA2C,CAAC;QAC/D,IAAI,IAAI,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;QACrC,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAEjC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7B,MAAM,EAAE,GAAG,uBAAe,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAsB,CAAC,CAAC;YACzG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7B,MAAM,aAAa,GAAG,IAAI,uBAAe,CAAC,UAAU,CAAC,MAAM,CAAC,QAAsB,CAAC,CAAC;YACpF,MAAM,aAAa,GAAG,IAAI,uBAAe,CAAC,UAAU,CAAC,MAAM,CAAC,QAAsB,CAAC,CAAC;YACpF,MAAM,EAAE,GAAG,uBAAe,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;YACxG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7B,MAAM,EAAE,GAAG,uBAAe,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAsB,CAAC,CAAC;YACtG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,qBAAqB;QACrB,qHAAqH;QACrH,kGAAkG;QAClG,MAAM,WAAW,GAAa,EAAE,EAAE,UAAU,GAAG,EAAW,CAAC;QAC3D,MAAM,iBAAiB,GAAG,KAAK,EAAE,KAAK,GAAG,CAAC,EAAuB,EAAE;YAC/D,IAAI,KAAK,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,WAAW,CAAC,WAAW,CAAC,MAAM,GAAC,CAAC,CAAC,EAAE;gBACtE,4EAA4E;gBAC5E,MAAM,IAAI,KAAK,CAAC,0CAA0C,UAAU,CAAC,MAAM,yEAAyE,CAAC,CAAC;aACzJ;YACD,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI;gBACA,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBACnC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,yBAAU,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC1F,OAAO,UAAU,CAAC,CAAC,qGAAqG;aAC3H;YACD,OAAO,GAAG,EAAE;gBACR,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,QAAQ,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,yBAAU,CAAC,MAAM,CAAC,CAAC,CAAC;gBAEpK,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC,uBAAuB,CAAC,EAAE;oBAC/D,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;oBAE/C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW;oBACpE,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;oBAEvD,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC;oBAEhG,kDAAkD;oBAClD,IAAI,WAAW,GAAG,CAAC,CAAC;oBACpB,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;oBAC5C,MAAM,MAAM,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;wBACpC,IAAI,IAAI,CAAC;wBACT,IAAI,WAAW,GAAG,cAAc,EAAE;4BAC9B,UAAU;4BACV,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;yBACjC;6BACI;4BACD,MAAM,UAAU,GAAG,WAAW,GAAG,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,GAAG,WAAW,CAAC;4BACjG,IAAI,GAAG,MAAM,UAAU,CAAC,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;4BACjE,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE;gCACtB,YAAY;gCACZ,IAAI,GAAG,iBAAiB,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;6BACxF;iCACI,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE;gCAC3B,+DAA+D;gCAC/D,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;6BAChC;yBACJ;wBACD,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC;wBAC/B,OAAO,IAAI,CAAC;oBAChB,CAAC,CAAC;oBACF,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC;oBACrC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC;oBACjC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAClC,UAAU,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;iBAC1I;qBACI;oBACD,uEAAuE;oBACvE,oBAAoB;oBACpB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;oBAC5C,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;oBAEzC,mCAAmC;oBACnC,MAAM,YAAY,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,iBAAiB,iBAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;oBAClG,IAAI,YAAY,GAAG,CAAC,CAAC;oBACrB,MAAM,EAAE,GAAG,MAAM,gBAAG,CAAC,IAAI,CAAC,YAAY,EAAE,gBAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;oBACzE,MAAM,MAAM,GAAG,oBAAY,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;wBAC1D,MAAM,gBAAG,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;wBACjD,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC;oBAChC,CAAC,CAAC,CAAC;oBACH,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,yBAAyB,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,+CAA+C;oBAE3J,yDAAyD;oBACzD,IAAI,UAAU,GAAG,CAAC,CAAC;oBACnB,MAAM,MAAM,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;wBACpC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;wBACtC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,gBAAG,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;wBAC/E,UAAU,IAAI,SAAS,CAAC;wBACxB,IAAI,SAAS,GAAG,MAAM,EAAE;4BACpB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,sFAAsF;yBAC5H;wBACD,OAAO,MAAM,CAAC;oBAClB,CAAC,CAAC;oBACF,UAAU,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;oBACtI,qDAAqD;oBACrD,gBAAG,CAAC,KAAK,CAAC,EAAE,CAAC;yBACR,IAAI,CAAC,GAAG,EAAE,CAAC,gBAAG,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;yBAChC,KAAK,CAAC,GAAG,CAAC,EAAE;wBACT,2BAA2B;wBAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,kCAAkC,YAAY,IAAI,EAAE,GAAG,CAAC,CAAC;oBACjF,CAAC,CAAC,CAAC;iBACV;gBAED,IAAI,UAAU,KAAK,UAAU,CAAC,UAAU,EAAE;oBACtC,8BAA8B;oBAC9B,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBAC1E,WAAW,GAAG,IAAI,CAAC;iBACtB;gBAED,sCAAsC;gBACtC,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;gBACtE,UAAU,GAAG,MAAM,UAAU,CAAC,UAAU,EAAE,CAAC;gBAC3C,IAAI,GAAG,IAAI,uBAAe,CACtB,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,EAC3C,IAAI,GAAG,GAAG,EAAE,qBAAqB;gBACjC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,EAC3C,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,CACvD,CAAC;gBAEF,gCAAgC;gBAChC,OAAO,iBAAiB,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC;aACrC;QACL,CAAC,CAAC;QACF,aAAa,GAAG,MAAM,iBAAiB,EAAE,CAAC;KAC7C;SACI;QACD,0EAA0E;QAC1E,2DAA2D;QAC3D,iDAAiD;QAEjD,MAAM,WAAW,GAAiC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAEpE,MAAM,UAAU,CAAC,cAAc,EAAE;aAC5B,IAAI,CAAC,KAAK,CAAC,EAAE;YACV,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;YACrD,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,0CAA0C;gBAC3D,wGAAwG;gBACxG,WAAW,CAAC,UAAU,CAAC,GAAG,IAAI,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;aAClF;iBACI;gBACD,WAAW,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;aACzC;QACL,CAAC,CAAC,CAAC;QAEP,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7B,OAAO,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7B,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QACrD,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7B,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QACrD,CAAC,CAAC,CAAC;QACH,IAAI,OAAO,EAAE;YACT,WAAW,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;SACzE;QAED,iHAAiH;QACjH,iBAAiB;QACjB,uJAAuJ;QACvJ,2BAA2B;QAC3B,sNAAsN;QACtN,QAAQ;QACR,IAAI;QACJ,aAAa,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;KACtG;IAED,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;AAC/B,CAAC;AAGD;;GAEG;AACH,KAAK,UAAU,WAAW,CAAC,OAAuB,EAAE,QAAwB,EAAE,QAAa,EAAE,IAAqB,EAAE,eAAe,GAAG,IAAI;IACtI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,QAAQ,CAAC,IAAI,cAAc,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,yBAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhI,IAAI,iBAAiB,GAAmB,IAAI,CAAC;IAC7C,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE;QACrC,kEAAkE;QAClE,2EAA2E;QAC3E,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,kDAAkD;QAC7H,iBAAiB,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KAC5D;IAED,IAAI,eAAe,EAAE;QACjB,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,eAAe;KAChG;IACD,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC5E,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;AAC5E,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,OAAuB,EAAE,IAAY,EAAE,KAAU,EAAE,SAA0B;IAC1G,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,kBAAkB,IAAI,GAAG,CAAC,CAAC;IACxG,IAAI;QACA,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAChE,OAAO,UAAU,CAAC;KACrB;YACO;QACJ,IAAI,CAAC,OAAO,EAAE,CAAC;KAClB;AACL,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,OAAuB,EAAE,IAAY,EAAE,KAAU,EAAE,IAAqB,EAAE,iBAA8B;IAC9H,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;QACxC,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,wDAAwD,CAAC,CAAC;KAC3G;IAED,MAAM,KAAK,GAAG,CAAC,SAAiB,EAAE,MAA6B,EAAE,OAAO,GAAG,KAAK,EAAE,EAAE;QAChF,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,EAAE;YAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAAC,CAAC;YAC5D,UAAU,IAAI,MAAM,CAAC;YACrB,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC;QACF,OAAO,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC/F,CAAC,CAAC;IAEF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC3B,OAAO,KAAK,CAAC,8BAAW,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;KACzD;SACI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAChC,OAAO,KAAK,CAAC,8BAAW,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,oEAAoE;KAC/H;SACI,IAAI,KAAK,YAAY,4BAAa,EAAE;QACrC,OAAO,KAAK,CAAC,8BAAW,CAAC,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;KACjE;SACI,IAAI,KAAK,YAAY,WAAW,EAAE;QACnC,OAAO,KAAK,CAAC,8BAAW,CAAC,MAAM,EAAE,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;KAC3D;SACI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAChC,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;KAC1E;IAED,wBAAwB;IACxB,MAAM,aAAa,GAAG,EAAoB,CAAC;IAC3C,MAAM,UAAU,GAAG,EAA0B,CAAC;IAC9C,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC;IAEvC,IAAI,OAAO,EAAE;QACT,cAAc;QACd,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,yCAAyC;QACrI,IAAI,CAAC,YAAY,EAAE;YACf,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;SAC/D;QACA,KAAe,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACpC,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE;gBAC3B,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,4CAA4C,CAAC,CAAC;aACxF;YACD,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC;YACtC,MAAM,CAAC,GAAG,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YACpE,MAAM,GAAG,GAAG,CAAC,CAAqB,EAAE,EAAE;gBAClC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,uFAAuF;YAClH,CAAC,CAAC;YACF,IAAI,CAAC,YAAY,OAAO,EAAE;gBACtB,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;aACnC;iBACI;gBACD,GAAG,CAAC,CAAC,CAAC,CAAC;aACV;QACL,CAAC,CAAC,CAAC;KACN;SACI;QACD,eAAe;QACf,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC7B,4CAA4C;YAC5C,IAAI,oCAAoC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAChD,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,kCAAkC,IAAI,wFAAwF,CAAC,CAAC;aACtK;YACD,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,8CAA8C,IAAI,0BAA0B,CAAC,CAAC;aAAE;YAEnI,MAAM,SAAS,GAAG,uBAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,oBAAoB;YACxE,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,OAAO,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,IAAI,EAAE;gBAC3C,OAAO,CAAC,iCAAiC;aAC5C;iBACI,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;gBACjC,IAAI,OAAO,CAAC,QAAQ,CAAC,oBAAoB,KAAK,IAAI,EAAE;oBAChD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,sGAAsG;oBACzH,OAAO;iBACV;qBACI;oBACD,MAAM,IAAI,KAAK,CAAC,aAAa,GAAG,0IAA0I,CAAC,CAAC;iBAC/K;aACJ;iBACI;gBACD,MAAM,CAAC,GAAG,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClE,MAAM,GAAG,GAAG,CAAC,CAAqB,EAAE,EAAE;oBAClC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvB,CAAC,CAAC;gBACF,IAAI,CAAC,YAAY,OAAO,EAAE;oBACtB,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;iBACnC;qBACI;oBACD,GAAG,CAAC,CAAC,CAAC,CAAC;iBACV;aACJ;QACL,CAAC,CAAC,CAAC;KACN;IAED,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAEjC,iDAAiD;IACjD,IAAI,MAA8C,CAAC;IACnD,MAAM,cAAc,GAAG,EAAE,CAAC;IAC1B,MAAM,sBAAsB,GAAG,GAAG,CAAC;IACnC,IAAI,IAAI,IAAI,UAAU,CAAC,MAAM,GAAG,sBAAsB,EAAE;QACpD,kBAAkB;QAClB,MAAM,UAAU,GACZ,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACvF,CAAC,CAAC,0BAA0B;YAC5B,CAAC,CAAC,0BAA0B,CAAC;QAErC,MAAM,WAAW,GAAG,IAAI,wBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC3D,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACrB,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;YACxC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,0BAAiB,EAAE,CAAC;QACxC,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,oBAAY,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;QACtF,eAAe;QACf,oCAAoC;QACpC,MAAM,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;KAClD;SACI;QACD,MAAM,OAAO,GAAG,IAAI,0BAAiB,EAAE,CAAC;QACxC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACrB,IAAI,CAAC,OAAO,EAAE;gBACV,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,8BAA8B;gBAE9E,YAAY;gBACZ,IAAI,QAAQ,IAAI,CAAC,EAAE;oBACf,kBAAkB;oBAClB,OAAO,CAAC,SAAS,CACb,GAAG,CAA0B,kBAAkB;0BAC7C,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAC5B,CAAC;oBACF,OAAO,CAAC,SAAS,CACb,QAAQ,GAAG,GAAG,CACjB,CAAC;iBACL;qBACI;oBACD,kBAAkB;oBAClB,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa;oBACpD,YAAY;oBACZ,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;iBAC5B;aACJ;YACD,2CAA2C;YAC3C,+BAA+B;YAC/B,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,MAAM,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;KACnD;IACD,uBAAuB;IACvB,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,8BAAW,CAAC,KAAK,CAAC,CAAC,CAAC,8BAAW,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAChG,CAAC;AAED,kDAAkD;AAClD,MAAM,kBAAkB;IAUpB,YAAY,IAAwB;QAChC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,mCAAmC;QAC9D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAC5B,CAAC;CACJ;AAED,SAAS,cAAc,CAAC,GAAuB;IAC3C,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,GAAuB,EAAE,OAAO,GAAG,IAAI,0BAAiB,CAAC,IAAI,EAAE,EAAE,CAAC;IACzF,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAClC,cAAc;IACd,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAI,WAAW;IAE3C,eAAe;IACf,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;IACnB,IAAI,GAAG,CAAC,IAAI,KAAK,8BAAW,CAAC,OAAO,EAAE;QAAE,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE;SAClE,IAAI,GAAG,CAAC,IAAI,KAAK,8BAAW,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE;QAAE,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC;KAAE;SACjI,IAAI,GAAG,CAAC,IAAI,KAAK,8BAAW,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC,EAAE;QAAE,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KAAE;SACtH,IAAI,GAAG,CAAC,IAAI,KAAK,8BAAW,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QAAE,SAAS,GAAG,CAAC,CAAC;KAAE;SAChG,IAAI,GAAG,CAAC,IAAI,KAAK,8BAAW,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;QAAE,SAAS,GAAG,CAAC,CAAC;KAAE;SAC9E,IAAI,GAAG,CAAC,IAAI,KAAK,8BAAW,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;QAAE,SAAS,GAAG,CAAC,CAAC;KAAE;SAC5F,IAAI,GAAG,CAAC,IAAI,KAAK,8BAAW,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,EAAE;QAAE,SAAS,GAAG,CAAC,CAAC;KAAE;IACxF,IAAI,SAAS,IAAI,CAAC,EAAE;QAChB,aAAa;QACb,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,0BAA0B;QAC5C,UAAU;KACb;SACI,IAAI,GAAG,CAAC,MAAM,EAAE;QACjB,kBAAkB;QAClB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,4BAA4B;QAE/C,oDAAoD;QACpD,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;KAC5C;SACI;QACD,eAAe;QACf,IAAI,IAAI,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC;QACnC,MAAM,MAAM,GAAG,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QAEpE,OAAO,CAAC,IAAI,CACR,GAAG,CAAa,4BAA4B;cAC1C,CAAC,MAAM,GAAG,CAAC,CAAC,CACjB,CAAC;QACF,IAAI,IAAI,YAAY,WAAW,EAAE;YAC7B,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;SAC/B;QACD,OAAO,CAAC,MAAM,CAAC,IAAkB,CAAC,CAAC;QAEnC,MAAM;KACT;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CACpB,OAAuB,EACvB,IAAY,EACZ,UAA2B,EAC3B,GAAQ,EACR,SAA0B;IAE1B,MAAM,iBAAiB,GAAG,6DAA6D,CAAC;IACxF,MAAM,MAAM,GAAG,CAAC,OAA2B,EAAE,EAAE;QAC3C,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAChC,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC;SAC9B;aACI;YACD,OAAO,CAAC,GAAG,GAAG,UAAU,CAAC;SAC5B;QACD,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;QAClB,OAAO,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF,IAAI,GAAG,YAAY,IAAI,EAAE;QACrB,2CAA2C;QAC3C,4EAA4E;QAC5E,6EAA6E;QAC7E,kGAAkG;QAClG,4EAA4E;QAC5E,sGAAsG;QACtG,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QAChC,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,8BAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;KACxD;SACI,IAAI,GAAG,YAAY,KAAK,EAAE;QAC3B,uCAAuC;QACvC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;YAClB,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,8BAAW,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;SACzD;QACD,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QAC7C,OAAO,iBAAiB,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC;aAClD,IAAI,CAAC,UAAU,CAAC,EAAE;YACf,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,8BAAW,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;KACV;SACI,IAAI,GAAG,YAAY,qBAAqB,EAAE;QAC3C,uFAAuF;QACvF,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;KAC1D;SACI,IAAI,GAAG,YAAY,WAAW,EAAE;QACjC,IAAI,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,kBAAkB,EAAE;YACtD,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;YAC7C,OAAO,iBAAiB,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC;iBAClD,IAAI,CAAC,UAAU,CAAC,EAAE;gBACf,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,8BAAW,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5E,CAAC,CAAC,CAAC;SACV;aACI;YACD,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,8BAAW,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;SAC3D;KACJ;SACI,IAAI,GAAG,YAAY,4BAAa,EAAE;QACnC,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,gCAAgC;QACxE,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,kBAAkB,EAAE;YACtD,+CAA+C;YAC/C,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;YAC7C,OAAO,iBAAiB,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC;iBAClD,IAAI,CAAC,UAAU,CAAC,EAAE;gBACf,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,8BAAW,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/E,CAAC,CAAC,CAAC;SACV;aACI;YACD,+BAA+B;YAC/B,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,8BAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;SACnE;KACJ;SACI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QAC9B,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/B,yDAAyD;YACzD,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,8BAAW,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;SAC1D;QACD,yCAAyC;QACzC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QAC7C,OAAO,iBAAiB,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC;aAClD,IAAI,CAAC,UAAU,CAAC,EAAE;YACf,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,8BAAW,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;KACV;SACI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QAC9B,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,8BAAW,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;KACtD;SACI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QAC9B,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,8BAAW,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;KACtD;SACI,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE;QAC/B,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,8BAAW,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;KAC3D;SACI;QACD,+DAA+D;QAC/D,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YACzB,+BAA+B;YAC/B,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;SACxB;QACD,mFAAmF;QACnF,2CAA2C;QAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,2BAA2B;QAC9D,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,kBAAkB,EAAE;YACtD,+CAA+C;YAC/C,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;YAC7C,OAAO,iBAAiB,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC;iBAClD,IAAI,CAAC,UAAU,CAAC,EAAE;gBACf,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,8BAAW,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5E,CAAC,CAAC,CAAC;SACV;aACI;YACD,+BAA+B;YAC/B,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,8BAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;SAChE;KACJ;AACL,CAAC;AAGD,KAAK,UAAU,MAAM,CACjB,OAAuB,EACvB,IAAY,EACZ,IAAY,EACZ,MAAc,EACd,UAAmB,EACnB,MAAkF,EAClF,iBAA6B;IAE7B,iBAAiB;IACjB,iDAAiD;IACjD,4EAA4E;IAC5E,mFAAmF;IACnF,oCAAoC;IACpC,mEAAmE;IACnE,qDAAqD;IACrD,qCAAqC;IACrC,uDAAuD;IACvD,kIAAkI;IAClI,8FAA8F;IAC9F,yFAAyF;IACzF,EAAE;IACF,qCAAqC;IACrC,qCAAqC;IACrC,qEAAqE;IACrE,uDAAuD;IACvD,EAAE;IACF,qDAAqD;IACrD,qDAAqD;IACrD,oCAAoC;IACpC,oCAAoC;IACpC,oCAAoC;IACpC,kCAAkC;IAClC,0CAA0C;IAC1C,uFAAuF;IACvF,0CAA0C;IAC1C,2EAA2E;IAC3E,2CAA2C;IAC3C,2CAA2C;IAC3C,EAAE;IACF,2CAA2C;IAC3C,uEAAuE;IACvE,6EAA6E;IAC7E,qDAAqD;IACrD,4BAA4B;IAC5B,mCAAmC;IACnC,+CAA+C;IAC/C,oCAAoC;IACpC,EAAE;IACF,iDAAiD;IACjD,8BAA8B;IAC9B,uDAAuD;IACvD,6EAA6E;IAC7E,oCAAoC;IACpC,wCAAwC;IACxC,iDAAiD;IACjD,mFAAmF;IACnF,8DAA8D;IAC9D,EAAE;IACF,oDAAoD;IACpD,8BAA8B;IAC9B,4DAA4D;IAC5D,mCAAmC;IACnC,qCAAqC;IACrC,qCAAqC;IACrC,EAAE;IACF,wDAAwD;IACxD,sCAAsC;IACtC,0DAA0D;IAC1D,8DAA8D;IAC9D,EAAE;IACF,oCAAoC;IACpC,oCAAoC;IACpC,EAAE;IAEF,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IACnD,IAAI,gBAAgB,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,eAAe,GAAG,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC;IAEjF,MAAM,qBAAqB,GAAG,CAAC,UAAkB,EAAE,EAAE;QACjD,+CAA+C;QAC/C,gBAAgB,GAAG,CAAC,CAAC,CAAC,4GAA4G;QAClI,UAAU,GAAG,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC;QACzC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC;QACzD,IAAI,eAAe,GAAG,CAAC,EAAE;YACrB,4CAA4C;YAC5C,gBAAgB,IAAI,CAAC,CAAC,CAAC,kEAAkE;YACzF,gBAAgB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,4IAA4I;YACtL,0CAA0C;YAC1C,UAAU,GAAG,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC;YACzC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC;SAC5D;QACD,aAAa,GAAG,eAAe,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,GAAG,cAAc,CAAC;QAC7E,IAAI,aAAa,KAAK,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;YACnC,2CAA2C;YAC3C,8GAA8G;YAC9G,aAAa,GAAG,cAAc,CAAC;SAClC;IACL,CAAC,CAAC;IAEF,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,8DAA8D;IAExF,IAAI,eAAe,GAAG,CAAC,EAAE;QACrB,uFAAuF;QACvF,6FAA6F;QAC7F,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC3E,MAAM,gBAAgB,GAAG,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACrE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QAC9F,qBAAqB,CAAC,SAAS,CAAC,CAAC;KACpC;IAED,0CAA0C;IAC1C,MAAM,qBAAqB,GAAG,iBAAiB,IAAI,iBAAiB,CAAC,UAAU,CAAC,cAAc,KAAK,eAAe,CAAC;IACnH,MAAM,MAAM,GAAG,qBAAqB;QAChC,CAAC,CAAC,iBAAiB,CAAC,UAAU,CAAC,MAAM;QACrC,CAAC,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAElD,IAAI,UAAU,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC,qBAAqB,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,UAAU,CAAC,cAAc,yBAAyB,IAAI,MAAM,UAAU,EAAE,CAAC,QAAQ,CAAC,yBAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjK,qBAAqB,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,eAAe,GAAG,UAAU,CAAC,cAAc,EAAE;QAC7C,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;QACvC,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,UAAU,CAAC,MAAM,uCAAuC,IAAI,mBAAmB,CAAC,QAAQ,CAAC,yBAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9I,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;QACpE,UAAU,GAAG,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACpD,qBAAqB,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KACnD;IAED,+BAA+B;IAC/B,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACjE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,aAAa;IAC/B,IAAI,UAAU,EAAE;QACZ,MAAM,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC;KAC9B;IAED,kBAAkB;IAClB,MAAM,UAAU,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;IAC7C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QAC9B,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE;YAClB,OAAO,CAAC,wBAAwB;SACnC;aACI,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE;YACvB,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,IAAI,CAAC,CAAC;SACf;aACI,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE;YACvB,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAC/C,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YACjD,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,IAAI,CAAC,CAAC;SACf;aACI;YACD,MAAM,wBAAwB,CAAC;SAClC;IACL,CAAC,CAAC,CAAC;IACH,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAa,gCAAgC;IAC5E,MAAM,EAAE,CAAC;IACT,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAE,2BAA2B;IACzE,MAAM,IAAI,CAAC,CAAC;IAEZ,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,MAAM,SAAS,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;QACvC,IAAI,WAAW,CAAC;QAChB,IAAI,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE;YAC/B,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,CAAC;YAC1D,SAAS,IAAI,WAAW,CAAC,UAAU,CAAC;YACpC,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC;YACjC,IAAI,MAAM,KAAK,CAAC,EAAE;gBAAE,OAAO,WAAW,CAAC;aAAE;SAC5C;QACD,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,SAAS,YAAY,OAAO,EAAE;YAAE,SAAS,GAAG,MAAM,SAAS,CAAC;SAAE;QAClE,IAAI,SAAS,YAAY,KAAK,EAAE;YAC5B,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC1C;aACI,IAAI,CAAC,CAAC,SAAS,YAAY,UAAU,CAAC,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;SACnE;QACD,SAAS,IAAI,SAAS,CAAC,UAAU,CAAC;QAClC,IAAI,WAAW,EAAE;YACb,SAAS,GAAG,iBAAiB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;SACzD;QACD,OAAO,SAAS,CAAC;IACrB,CAAC,CAAC;IAEF,IAAI;QACA,8BAA8B;QAC9B,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACzE,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC3E,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE;gBAClB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;aACzC;YACD,IAAI,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC;YAC5D,YAAY,IAAI,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;YACrE,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACzC,OAAO,YAAY,CAAC;QACxB,CAAC,EAAE,IAAuB,CAAC,CAAC;QAE5B,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,gCAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACxG,MAAM,QAAQ,GAAG,IAAI,0BAAc,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAE3E,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY;QACxD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,OAAO,CAAC,IAAI,sBAAsB,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,MAAM,UAAU,CAAC,cAAc,eAAe,YAAY,qBAAqB,MAAM,WAAW,CAAC,QAAQ,CAAC,yBAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7N,4EAA4E;QAE5E,IAAI,UAAU,CAAC;QACf,IAAI,qBAAqB,EAAE;YACvB,+EAA+E;YAC/E,UAAU,GAAG,iBAAiB,CAAC;YAC/B,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,aAAa;YACjD,UAAU,CAAC,WAAW,GAAG,UAAU,CAAC;YACpC,UAAU,CAAC,YAAY,GAAG,gBAAgB,CAAC;YAC3C,UAAU,CAAC,aAAa,GAAG,aAAa,CAAC;SAC5C;aACI;YACD,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;YACzH,UAAU,CAAC,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;SACvF;QACD,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAElC,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE,EAAE;YACrB,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,8DAA8D;SAC3G;QACD,OAAO,UAAU,CAAC;KACrB;IACD,OAAO,MAAM,EAAE;QACX,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,0BAA0B,IAAI,MAAM,MAAM,EAAE,CAAC,CAAC;QAClE,MAAM,MAAM,CAAC;KAChB;AACL,CAAC;AAED,MAAM,qBAAqB;IAEvB,YAAmB,IAAY,EAAE,OAA0B;QAAxC,SAAI,GAAJ,IAAI,CAAQ;QAC3B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC5B,CAAC;IACD,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IACD,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC9B,CAAC;IACD,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAChC,CAAC;IACD,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAClC,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/cjs/storage/binary/node-address.js.map b/dist/cjs/storage/binary/node-address.js.map index 93b8a06..8ddc822 100644 --- a/dist/cjs/storage/binary/node-address.js.map +++ b/dist/cjs/storage/binary/node-address.js.map @@ -1 +1 @@ -{"version":3,"file":"node-address.js","sourceRoot":"","sources":["../../ts/storage/binary/node-address.ts"],"names":[],"mappings":";;;AAAA,qDAAiD;AAEjD,MAAa,iBAAkB,SAAQ,0BAAW;IAC9C,YACI,IAAY,EACI,MAAc,EACd,QAAgB;QAEhC,KAAK,CAAC,IAAI,CAAC,CAAC;QAHI,WAAM,GAAN,MAAM,CAAQ;QACd,aAAQ,GAAR,QAAQ,CAAQ;IAGpC,CAAC;IAED,QAAQ;QACJ,OAAO,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAA0B;QAC7B,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC;IAC9G,CAAC;CAEJ;AApBD,8CAoBC"} \ No newline at end of file +{"version":3,"file":"node-address.js","sourceRoot":"","sources":["../../../../src/storage/binary/node-address.ts"],"names":[],"mappings":";;;AAAA,qDAAiD;AAEjD,MAAa,iBAAkB,SAAQ,0BAAW;IAC9C,YACI,IAAY,EACI,MAAc,EACd,QAAgB;QAEhC,KAAK,CAAC,IAAI,CAAC,CAAC;QAHI,WAAM,GAAN,MAAM,CAAQ;QACd,aAAQ,GAAR,QAAQ,CAAQ;IAGpC,CAAC;IAED,QAAQ;QACJ,OAAO,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAA0B;QAC7B,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC;IAC9G,CAAC;CAEJ;AApBD,8CAoBC"} \ No newline at end of file diff --git a/dist/cjs/storage/binary/node-info.js.map b/dist/cjs/storage/binary/node-info.js.map index d80f5d0..b1e5b9d 100644 --- a/dist/cjs/storage/binary/node-info.js.map +++ b/dist/cjs/storage/binary/node-info.js.map @@ -1 +1 @@ -{"version":3,"file":"node-info.js","sourceRoot":"","sources":["../../ts/storage/binary/node-info.ts"],"names":[],"mappings":";;;AAAA,+CAA2C;AAG3C,MAAa,cAAe,SAAQ,oBAAQ;CAE3C;AAFD,wCAEC"} \ No newline at end of file +{"version":3,"file":"node-info.js","sourceRoot":"","sources":["../../../../src/storage/binary/node-info.ts"],"names":[],"mappings":";;;AAAA,+CAA2C;AAG3C,MAAa,cAAe,SAAQ,oBAAQ;CAE3C;AAFD,wCAEC"} \ No newline at end of file diff --git a/dist/cjs/storage/context.js.map b/dist/cjs/storage/context.js.map index de642cc..360370c 100644 --- a/dist/cjs/storage/context.js.map +++ b/dist/cjs/storage/context.js.map @@ -1 +1 @@ -{"version":3,"file":"context.js","sourceRoot":"","sources":["../ts/storage/context.ts"],"names":[],"mappings":""} \ No newline at end of file +{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/storage/context.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/cjs/storage/create-index.js.map b/dist/cjs/storage/create-index.js.map index a0b001d..73861a2 100644 --- a/dist/cjs/storage/create-index.js.map +++ b/dist/cjs/storage/create-index.js.map @@ -1 +1 @@ -{"version":3,"file":"create-index.js","sourceRoot":"","sources":["../ts/storage/create-index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"create-index.js","sourceRoot":"","sources":["../../../src/storage/create-index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/storage/custom/helpers.js.map b/dist/cjs/storage/custom/helpers.js.map index 777ace8..90fb200 100644 --- a/dist/cjs/storage/custom/helpers.js.map +++ b/dist/cjs/storage/custom/helpers.js.map @@ -1 +1 @@ -{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../ts/storage/custom/helpers.ts"],"names":[],"mappings":";;;AAAA,+CAAwC;AAExC;;GAEG;AACH,MAAa,oBAAoB;IAC7B;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,IAAY,EAAE,UAAU,GAAG,MAAM;QAClD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;YACrB,CAAC,CAAC,GAAG,UAAU,cAAc,UAAU,iBAAiB;YACxD,CAAC,CAAC,IAAI,UAAU,UAAU,IAAI,UAAU,UAAU,UAAU,IAAI,YAAY,UAAU,cAAc,IAAI,aAAa,UAAU,cAAc,IAAI,cAAc,UAAU,cAAc,IAAI,QAAQ,CAAC;QACxM,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,IAAY;QAC/B,OAAO,IAAI,MAAM,CAAC,IAAI,IAAI,2BAA2B,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,kBAAkB,CAAC,IAAY,EAAE,UAAU,GAAG,MAAM;QACvD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;YACrB,CAAC,CAAC,GAAG,UAAU,QAAQ;YACvB,CAAC,CAAC,GAAG,UAAU,UAAU,IAAI,UAAU,UAAU,UAAU,IAAI,KAAK,CAAC;QACzE,OAAO,KAAK,CAAC;IACjB,CAAC;IACD;;;;OAIG;IACH,MAAM,CAAC,oBAAoB,CAAC,IAAY;QACpC,OAAO,IAAI,MAAM,CAAC,IAAI,IAAI,0BAA0B,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,MAAM,KAAK,QAAQ;QACf,OAAO,uBAAQ,CAAC;IACpB,CAAC;CACJ;AA7DD,oDA6DC"} \ No newline at end of file +{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../src/storage/custom/helpers.ts"],"names":[],"mappings":";;;AAAA,+CAAwC;AAExC;;GAEG;AACH,MAAa,oBAAoB;IAC7B;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,IAAY,EAAE,UAAU,GAAG,MAAM;QAClD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;YACrB,CAAC,CAAC,GAAG,UAAU,cAAc,UAAU,iBAAiB;YACxD,CAAC,CAAC,IAAI,UAAU,UAAU,IAAI,UAAU,UAAU,UAAU,IAAI,YAAY,UAAU,cAAc,IAAI,aAAa,UAAU,cAAc,IAAI,cAAc,UAAU,cAAc,IAAI,QAAQ,CAAC;QACxM,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,IAAY;QAC/B,OAAO,IAAI,MAAM,CAAC,IAAI,IAAI,2BAA2B,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,kBAAkB,CAAC,IAAY,EAAE,UAAU,GAAG,MAAM;QACvD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;YACrB,CAAC,CAAC,GAAG,UAAU,QAAQ;YACvB,CAAC,CAAC,GAAG,UAAU,UAAU,IAAI,UAAU,UAAU,UAAU,IAAI,KAAK,CAAC;QACzE,OAAO,KAAK,CAAC;IACjB,CAAC;IACD;;;;OAIG;IACH,MAAM,CAAC,oBAAoB,CAAC,IAAY;QACpC,OAAO,IAAI,MAAM,CAAC,IAAI,IAAI,0BAA0B,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,MAAM,KAAK,QAAQ;QACf,OAAO,uBAAQ,CAAC;IACpB,CAAC;CACJ;AA7DD,oDA6DC"} \ No newline at end of file diff --git a/dist/cjs/storage/custom/index.js.map b/dist/cjs/storage/custom/index.js.map index fda527b..4767c7d 100644 --- a/dist/cjs/storage/custom/index.js.map +++ b/dist/cjs/storage/custom/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../ts/storage/custom/index.ts"],"names":[],"mappings":";;;AAAA,+CAAoG;AACpG,MAAM,EAAE,aAAa,EAAE,GAAG,oBAAK,CAAC;AAChC,+CAA2C;AAC3C,+CAAuD;AACvD,6DAAqD;AACrD,mDAAyE;AACzE,oCAAgE;AAChE,uCAAiD;AACjD,qDAAiD;AACjD,qCAAiD;AAAxC,+GAAA,oBAAoB,OAAA;AAE7B,oDAAoD;AACpD,MAAa,0BAA0B;IAAvC;QACI,yFAAyF;QACzF,aAAQ,GAAG,EAAE,CAAC;QACd,sFAAsF;QACtF,gBAAW,GAAG,CAAC,CAAC;QAChB,+CAA+C;QAC/C,YAAO,GAAG,CAAC,CAAC;QACZ,wDAAwD;QACxD,aAAQ,GAAG,CAAC,CAAC;QACb,4HAA4H;QAC5H,SAAI,GAAG,CAAC,CAAC;IACb,CAAC;CAAA;AAXD,gEAWC;AAED,0DAA0D;AAC1D,MAAa,kBAAmB,SAAQ,0BAA0B;IAG9D;QACI,KAAK,EAAE,CAAC;QAHZ,0DAA0D;QAC1D,UAAK,GAAQ,IAAI,CAAC;IAGlB,CAAC;CACJ;AAND,gDAMC;AAED,8GAA8G;AAC9G,MAAsB,wBAAwB;IAc1C;;OAEG;IACH,YAAY,MAAwC;QAhBpD,eAAU,GAAG,KAAK,CAAC,CAAE,sBAAsB;QAiBvC,IAAI,CAAC,MAAM,GAAG;YACV,IAAI,YAAY,KAAK,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1C,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,KAAK,KAAK,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;SACvC,CAAC;QACF,IAAI,CAAC,EAAE,GAAG,iBAAE,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAgDD;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CAAC,IAAY;QAC5B,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACtG,OAAO,UAAU,CAAC;IACtB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW,CAAC,KAAe;QAC7B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAW,CAAC,KAAwD;QACtE,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAAC,KAAe;QAChC,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAOD;;OAEG;IACH,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC,CAAC,CAAC;IAEvG;;;;OAIG;IACH,KAAK,CAAC,gBAAgB,CAAC,UAAkB;QACrC,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QACxE,IAAI,WAAW,KAAK,UAAU,EAAE;YAC5B,OAAO,UAAU,CAAC,CAAC,4BAA4B;SAClD;QACD,MAAM,QAAQ,GAAG,8BAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/D,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;YAClC,IAAI,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;aAChD;SACJ;aACI;YACD,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,CAAC,KAAK,CAAC,IAAI,mCAAmC,UAAU,GAAG,CAAC,CAAC;SACnH;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC;QAC9B,OAAO,UAAU,CAAC;IACtB,CAAC;CACJ;AAjJD,4DAiJC;AAED;;;GAGG;AACH,MAAa,qBAAsB,SAAQ,uBAAe;IAyBtD,YAAY,QAAwC;QAChD,KAAK,CAAC,QAAQ,CAAC,CAAC;QApBpB;;;;;;WAMG;QACH,YAAO,GAAG,IAAI,CAAC;QAcX,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;SACvC;QACD,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,UAAU,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;SAC/C;QACD,IAAI,OAAO,QAAQ,CAAC,cAAc,KAAK,UAAU,EAAE;YAC/C,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;SACxD;QACD,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC1B,mEAAmE;QACnE,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC;QAC1C,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,WAAW,GAAG,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC;SAC5F;QACD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAE5B,uCAAuC;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC;QAChC,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,sBAAU,CAAC,OAA6B,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvG,IAAI,CAAC,cAAc,GAAG,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;YAC5C,sFAAsF;YACtF,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACnE,OAAO,CAAC,MAAM,CAAC,OAAO,WAAW,CAAC,EAAE,KAAK,QAAQ,EAAE,wBAAwB,CAAC,CAAC;YAC7E,sGAAsG;YAEtG,6BAA6B;YAC7B,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;YACtC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;YAClC,WAAW,CAAC,MAAM,GAAG,KAAK,IAAI,EAAE;gBAC5B,6FAA6F;gBAC7F,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC3C,kGAAkG;gBAClG,IAAI,UAAU,EAAE;oBACZ,MAAM,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;iBAC7C;gBACD,OAAO,GAAG,CAAC;YACf,CAAC,CAAC;YACF,WAAW,CAAC,QAAQ,GAAG,KAAK,EAAE,MAAM,EAAE,EAAE;gBACpC,mFAAmF;gBACnF,0GAA0G;gBAC1G,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;gBACrD,oGAAoG;gBACpG,IAAI,UAAU,EAAE;oBACZ,MAAM,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;iBAC/C;gBACD,OAAO,GAAG,CAAC;YACf,CAAC,CAAC;YAEF,IAAI,UAAU,EAAE;gBACZ,kCAAkC;gBAClC,WAAW,CAAC,KAAK,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,kBAAkB,CAAC,CAAC;aAC1G;YACD,OAAO,WAAW,CAAC;QACvB,CAAC,CAAC;IACN,CAAC;CACJ;AAnFD,sDAmFC;AAED,MAAa,wBAAwB;IAEjC,YAAY,aAAqB;QAC7B,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC9B,CAAC;CACJ;AALD,4DAKC;AAED,MAAa,qBAAsB,SAAQ,oBAAQ;IAO/C,YAAY,IAAgE;QACxE,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAClC,CAAC;CACJ;AAdD,sDAcC;AAED,MAAa,aAAc,SAAQ,eAAO;IAGtC,YAAY,MAAc,EAAE,QAA+B,EAAE,GAAe;QACxE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QAE7B,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC;QACtC,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,KAAK;QACf,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,yBAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,QAAQ,CAAC,yBAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,yBAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC,yBAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QACxG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC,yBAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAE/G,yCAAyC;QACzC,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;QACzC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/F,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;SAClD;QACD,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YACxB,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SAC7B;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAEO,wBAAwB,CAAC,OAAe;QAC5C,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,CAAC,qBAAqB,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;IACrF,CAAC;IAEO,UAAU,CAAC,IAAY,EAAE,IAAwB,EAAE,OAAkD;QACzG,+BAA+B;QAC/B,MAAM,kBAAkB,GAAG,CAAC,GAAQ,EAAE,EAAE;YACpC,IAAI,GAAG,KAAK,IAAI,EAAE;gBACd,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;aAC5E;iBACI,IAAI,CAAC,QAAQ,EAAC,QAAQ,EAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,EAAE;gBACzD,OAAO,GAAG,CAAC;aACd;iBACI,IAAI,GAAG,YAAY,IAAI,EAAE;gBAC1B,OAAO,EAAE,IAAI,EAAE,8BAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;aAC/D;iBACI,IAAI,GAAG,YAAY,4BAAa,EAAE;gBACnC,OAAO,EAAE,IAAI,EAAE,8BAAW,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;aAC3D;iBACI,IAAI,GAAG,YAAY,WAAW,EAAE;gBACjC,OAAO,EAAE,IAAI,EAAE,8BAAW,CAAC,MAAM,EAAE,KAAK,EAAE,sBAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;aACnE;iBACI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,iDAAiD,CAAC,CAAC;gBACjG,OAAO,GAAG,CAAC;aACd;QACL,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,yEAAyE,CAAC;QAC9F,IAAI,IAAI,CAAC,IAAI,KAAK,8BAAW,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,YAAY,KAAK,EAAE;YAChE,kDAAkD;YAClD,6CAA6C;YAC7C,OAAO,CAAC,IAAI,CAAC,sBAAsB,WAAW,EAAE,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,EAAyB,CAAC;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACxC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAC1B;YACD,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;SACpB;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,8BAAW,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;YACpE,OAAO,CAAC,IAAI,CAAC,6BAA6B,WAAW,EAAE,CAAC,CAAC;YACzD,IAAI,CAAC,KAAK,GAAG,sBAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC3C;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,8BAAW,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,YAAY,4BAAa,EAAE;YAC5E,OAAO,CAAC,IAAI,CAAC,+BAA+B,WAAW,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;SAChC;QACD,IAAI,CAAC,8BAAW,CAAC,MAAM,EAAE,8BAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;YAC5B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAChB,6EAA6E;YAC7E,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;SACN;QAED,OAAO,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAEO,qBAAqB,CAAC,IAAwB;QAElD,MAAM,kBAAkB,GAAG,CAAC,GAAiC,EAAE,EAAE;YAC7D,sCAAsC;YACtC,IAAI,GAAG,CAAC,IAAI,KAAK,8BAAW,CAAC,MAAM,EAAE;gBACjC,+CAA+C;gBAC/C,OAAO,sBAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aACpC;iBACI,IAAI,GAAG,CAAC,IAAI,KAAK,8BAAW,CAAC,QAAQ,EAAE;gBACxC,8BAA8B;gBAC9B,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aAC9B;iBACI,IAAI,GAAG,CAAC,IAAI,KAAK,8BAAW,CAAC,SAAS,EAAE;gBACzC,kCAAkC;gBAClC,OAAO,IAAI,4BAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aACvC;iBACI;gBACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;aAC7D;QACL,CAAC,CAAC;QAEF,QAAQ,IAAI,CAAC,IAAI,EAAE;YAEf,KAAK,8BAAW,CAAC,KAAK,CAAC;YACvB,KAAK,8BAAW,CAAC,MAAM,CAAC,CAAC;gBACrB,2CAA2C;gBAC3C,kDAAkD;gBAClD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBAC3B,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;oBACtB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,IAAI,IAAI,EAAE;wBAC5C,GAAG,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;qBACvC;gBACL,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;gBACjB,MAAM;aACT;YAED,KAAK,8BAAW,CAAC,MAAM,CAAC,CAAC;gBACrB,IAAI,CAAC,KAAK,GAAG,sBAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACxC,MAAM;aACT;YAED,KAAK,8BAAW,CAAC,SAAS,CAAC,CAAC;gBACxB,IAAI,CAAC,KAAK,GAAG,IAAI,4BAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC3C,MAAM;aACT;YAED,KAAK,8BAAW,CAAC,MAAM,CAAC,CAAC;gBACrB,mBAAmB;gBACnB,2BAA2B;gBAC3B,MAAM;aACT;YAED;gBACI,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC,CAAC,sBAAsB;SACtF;IACL,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,OAAkD;QACpF,uHAAuH;QACvH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,IAAI,KAAK,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC;SAAE;QACnC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC1B,IAAI,CAAC,wBAAwB,CAAC,qHAAqH,CAAC,CAAC;SACxJ;QAED,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,uBAAuB,CAAC,GAAY;QACxC,IAAI,IAAI,CAAC;QACT,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YACzB,IAAI,GAAG,8BAAW,CAAC,MAAM,CAAC;SAC7B;aACI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC9B,IAAI,GAAG,8BAAW,CAAC,MAAM,CAAC;SAC7B;aACI,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE;YAC/B,IAAI,GAAG,8BAAW,CAAC,OAAO,CAAC;SAC9B;aACI,IAAI,GAAG,YAAY,KAAK,EAAE;YAC3B,IAAI,GAAG,8BAAW,CAAC,KAAK,CAAC;SAC5B;aACI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC9B,IAAI,MAAM,IAAI,GAAG,EAAE;gBACf,MAAM,UAAU,GAAG,GAA+C,CAAC;gBACnE,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;gBACvB,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC;gBACvB,IAAI,IAAI,KAAK,8BAAW,CAAC,QAAQ,EAAE;oBAC/B,GAAG,GAAG,IAAI,IAAI,CAAC,GAAa,CAAC,CAAC;iBACjC;qBACI,IAAI,IAAI,KAAK,8BAAW,CAAC,SAAS,EAAE;oBACrC,GAAG,GAAG,IAAI,4BAAa,CAAC,GAAa,CAAC,CAAC;iBAC1C;aACJ;iBACI;gBACD,IAAI,GAAG,8BAAW,CAAC,MAAM,CAAC;aAC7B;SACJ;aACI;YACD,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;SACzC;QACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAChC,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,KAAU,EAAE,OAOpD;QACG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,EAAE,EAAE;YAC9D,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;SAC7D;aACI,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,KAAK,CAAC,EAAE;YAC3E,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;SACjE;QAED,0EAA0E;QAC1E,yDAAyD;QACzD,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,OAAO,CAAC,YAAY,KAAK,WAAW,EAAE;YACpF,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YACxD,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;gBAC3C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,6EAA6E;aAChJ;YACD,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;SACvB;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE;YAC9B,OAAO,CAAC,QAAQ;SACnB;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QAExC,sCAAsC;QACtC,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,KAAK,IAAI;YAC5C,CAAC,CAAC,IAAI,CAAC,kFAAkF;YACzF,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QAElD,IAAI,OAAO,CAAC,KAAK,IAAI,UAAU,EAAE;YAC7B,IAAI,UAAU,CAAC,IAAI,KAAK,8BAAW,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBACzJ,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,kBAAkB,CAAC,CAAC;aACnF;YACD,IAAI,KAAK,YAAY,KAAK,IAAI,UAAU,CAAC,IAAI,KAAK,8BAAW,CAAC,KAAK,EAAE;gBACjE,MAAM,IAAI,KAAK,CAAC,yCAAyC,IAAI,iBAAiB,CAAC,CAAC;aACnF;SACJ;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,iBAAE,CAAC,QAAQ,EAAE,CAAC;QACnD,MAAM,QAAQ,GAAG;YACb,IAAI,EAAE,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,8BAAW,CAAC,KAAK,CAAC,CAAC,CAAC,8BAAW,CAAC,KAAK,CAAC,CAAC,CAAC,8BAAW,CAAC,MAAM;YAClG,KAAK,EAAE,EAAkC;SAC5C,CAAC;QACF,MAAM,eAAe,GAAG,EAAkC,CAAC;QAC3D,IAAI,KAAK,YAAY,KAAK,EAAE;YACxB,QAAQ,CAAC,IAAI,GAAG,8BAAW,CAAC,KAAK,CAAC;YAClC,kDAAkD;YAClD,MAAM,GAAG,GAAG,EAAyB,CAAC;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;aACrB;YACD,KAAK,GAAG,GAAG,CAAC;SACf;aACI,IAAI,KAAK,YAAY,4BAAa,EAAE;YACrC,QAAQ,CAAC,IAAI,GAAG,8BAAW,CAAC,SAAS,CAAC;YACtC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;SAC/B;aACI,IAAI,KAAK,YAAY,WAAW,EAAE;YACnC,QAAQ,CAAC,IAAI,GAAG,8BAAW,CAAC,MAAM,CAAC;YACnC,QAAQ,CAAC,KAAK,GAAG,sBAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAC1C;aACI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAChC,QAAQ,CAAC,IAAI,GAAG,8BAAW,CAAC,MAAM,CAAC;YACnC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;SAC1B;QAED,MAAM,sBAAsB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,8BAAW,CAAC,MAAM,EAAE,8BAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACtH,MAAM,kBAAkB,GAAG,CAAC,8BAAW,CAAC,MAAM,EAAE,8BAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3F,MAAM,QAAQ,GAAG;YACb,OAAO,EAAE,EAAc;YACvB,GAAG,EAAE,EAAc;SACtB,CAAC;QAEF,IAAI,aAAa,GAAG,IAAI,CAAC;QACzB,IAAI,sBAAsB,EAAE;YACxB,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;YACjC,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC9C,mHAAmH;YACnH,yDAAyD;YACzD,sBAAsB;YACtB,+CAA+C;YAC/C,6BAA6B;YAC7B,QAAQ;YACR,2BAA2B;YAC3B,IAAI;YACJ,IAAI,kBAAkB,EAAE;gBACpB,QAAQ,CAAC,KAAK,GAAG,aAAa,CAAC;aAClC;SACJ;QACD,IAAI,kBAAkB,EAAE;YACpB,8EAA8E;YAC9E,gDAAgD;YAChD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;gBAChB,gFAAgF;gBAChF,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBACtC,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE;wBACjB,wFAAwF;wBACxF,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;qBACrB;gBACL,CAAC,CAAC,CAAC;aACN;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACvB,OAAQ,QAAQ,CAAC,KAA6B,CAAC,GAAG,CAAC,CAAC,CAAC,gJAAgJ;gBACrM,IAAI,GAAG,KAAK,IAAI,EAAE,EAAE,iCAAiC;oBACjD,4BAA4B;oBAC5B,OAAO;iBACV;qBACI,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;oBACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,oBAAoB,KAAK,IAAI,EAAE;wBAC7C,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,sGAAsG;wBACzH,OAAO;qBACV;yBACI;wBACD,MAAM,IAAI,KAAK,CAAC,aAAa,GAAG,0IAA0I,CAAC,CAAC;qBAC/K;iBACJ;gBACD,6BAA6B;gBAC7B,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE;oBAC3B,qBAAqB;oBACpB,QAAQ,CAAC,KAA6B,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;iBACtD;qBACI;oBACD,sBAAsB;oBACtB,eAAe,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;iBAC9B;YACL,CAAC,CAAC,CAAC;SACN;QAED,wBAAwB;QACxB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,KAAK,8BAAW,CAAC,KAAK,CAAC;QACpD,IAAI,UAAU,EAAE;YACZ,SAAS;YACT,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,IAAI,cAAc,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,yBAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAElH,qFAAqF;YACrF,IAAI,sBAAsB,IAAI,kBAAkB,EAAE;gBAE9C,qDAAqD;gBACrD,MAAM,QAAQ,GAAG,uBAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,IAAI,GAAG,EAAc,CAAC;gBAC5B,IAAI,aAAa,GAAG,KAAK,CAAC;gBAC1B,MAAM,iBAAiB,GAAG,CAAC,SAAiB,EAAE,EAAE;oBAC5C,aAAa,GAAG,IAAI,CAAC;oBACrB,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;wBAC5D,sBAAsB;wBACtB,IAAI,CAAC,wBAAwB,CAAC,IAAI,SAAS,wBAAwB,IAAI,mEAAmE,CAAC,CAAC;qBAC/I;oBACD,OAAO,IAAI,CAAC;gBAChB,CAAC,CAAC;gBACF,MAAM,YAAY,GAAG,CAAC,SAAiB,EAAE,EAAE;oBACvC,IAAI,CAAC,aAAa,EAAE;wBAChB,IAAI,CAAC,wBAAwB,CAAC,0DAA0D,CAAC,CAAC;qBAC7F;oBACD,MAAM,GAAG,GAAG,uBAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC;oBACxC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,0DAA0D;oBACrF,OAAO,IAAI,CAAC,CAAC,iBAAiB;gBAClC,CAAC,CAAC;gBACF,MAAM,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,YAAY,CAAC,CAAC;gBAEvG,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACjD,IAAI,kBAAkB,EAAE;oBACpB,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE;wBAC1B,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;qBAC3C;oBACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;wBAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;4BAC7B,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;yBAC1B;oBACL,CAAC,CAAC,CAAC;iBACN;gBAED,MAAM,OAAO,GAAG;oBACZ,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBACnE,MAAM,EAAE,EAAc;oBACtB,MAAM,EAAE,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;iBACzJ,CAAC;gBACF,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gBAE7G,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;oBACtF,+FAA+F;oBAC/F,2HAA2H;oBAC3H,wGAAwG;oBACxG,6CAA6C;oBAC7C,iGAAiG;oBACjG,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAC3D,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBAC3F,IAAI,CAAC,YAAY,EAAE;wBACf,MAAM,IAAI,KAAK,CAAC,+GAA+G,IAAI,6DAA6D,CAAC,CAAC;qBACrM;iBACJ;gBAED,sEAAsE;gBACtE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBACzD,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;oBACjD,MAAM,SAAS,GAAG,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBACnG,IAAI,SAAS,KAAK,WAAW,EAAE;wBAC3B,2EAA2E;wBAC3E,OAAO,CAAC,OAAO;qBAClB;oBACD,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,oCAAoC;oBACtF,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;oBAE/C,yCAAyC;oBACzC,MAAM,iBAAiB,GAAG,OAAO,OAAO,CAAC,YAAY,KAAK,WAAW,CAAE,mBAAmB;wBACtF,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,OAAO,CAAC,YAAY,KAAK,IAAI,IAAI,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,IAAI,UAAU,IAAI,OAAO,CAAC,YAAY;4BAC7G,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC;4BAClC,CAAC,CAAC,IAAI,CAAC;oBAEf,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC7I,CAAC,CAAC,CAAC;gBAEH,qFAAqF;gBACrF,2EAA2E;gBAC3E,MAAM,WAAW,GAAG,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAK,QAAQ,CAAC,KAA6B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,wCAAwC;gBAC1J,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBAC/D,MAAM,cAAc,GAAG,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBACjD,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;oBACjD,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;oBACjD,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;gBACxD,CAAC,CAAC,CAAC;gBAEH,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBACtD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;aAC/B;YAED,mBAAmB;YACnB,yCAAyC;YACzC,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;gBAC5B,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,WAAW,EAAE,UAAU,CAAC,WAAW,GAAG,CAAC;gBACvC,OAAO,EAAE,UAAU,CAAC,OAAO;gBAC3B,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;aACvB,EAAE;gBACC,WAAW;aACd,CAAC,CAAC;YACH,IAAI,CAAC,YAAY,OAAO,EAAE;gBACtB,OAAO,MAAM,CAAC,CAAC;aAClB;SACJ;aACI;YACD,6DAA6D;YAC7D,gEAAgE;YAChE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,IAAI,oBAAoB,CAAC,QAAQ,CAAC,yBAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAE7E,IAAI,OAAO,EAAE;gBACT,4FAA4F;gBAC5F,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;gBACnF,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBACxF,IAAI,CAAC,YAAY,EAAE;oBACf,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;iBAC/D;aACJ;YAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACpD,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBACjD,MAAM,SAAS,GAAG,uBAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAC1D,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;gBAC/C,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/G,CAAC,CAAC,CAAC;YAEH,sBAAsB;YACtB,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;gBAC5B,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,QAAQ;gBACR,WAAW,EAAE,CAAC;gBACd,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;gBACnB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;aACvB,EAAE;gBACC,WAAW;aACd,CAAC,CAAC;YACH,IAAI,CAAC,YAAY,OAAO,EAAE;gBACtB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACpB;YACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;SAC/B;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,OAAkD;QACtF,MAAM,QAAQ,GAAG,uBAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,IAAI,oBAAoB,CAAC,QAAQ,CAAC,yBAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAE7E,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,MAAM,sBAAsB,GAAG,CAAC,QAAgB,EAAE,EAAE;YAChD,aAAa,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;gBAC7D,sBAAsB;gBACtB,IAAI,CAAC,wBAAwB,CAAC,IAAI,QAAQ,6BAA6B,IAAI,yEAAyE,CAAC,CAAC;aACzJ;YACD,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC;QACF,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAE,EAAE;YACvC,IAAI,CAAC,aAAa,EAAE;gBAChB,IAAI,CAAC,wBAAwB,CAAC,6DAA6D,CAAC,CAAC;aAChG;YACD,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACxC,MAAM,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,sBAAsB,EAAE,aAAa,CAAC,CAAC;QAEhH,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,QAAQ,CAAC,yBAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACjH,OAAO,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,IAAY,EAAE,UAAuF,EAAE;QAG/G,IAAI,QAA0B,CAAC;QAC/B,MAAM,SAAS,GAAG;YACd;;;;eAIG;YACH,IAAI,CAAC,aAA+B;gBAChC,QAAQ,GAAG,aAAa,CAAC;gBACzB,OAAO,KAAK,EAAE,CAAC;YACnB,CAAC;SACJ,CAAC;QACF,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;YACrB,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,MAAM,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACnH,IAAI;gBACA,IAAI,QAAQ,GAAG,KAAK,CAAC;gBACrB,MAAM,CAAC,KAAK,IAAI,EAAE;oBACd,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;oBACzD,IAAI,CAAC,IAAI,EAAE;wBAAE,MAAM,IAAI,+BAAiB,CAAC,UAAU,IAAI,kBAAkB,CAAC,CAAC;qBAAE;oBAE7E,IAAI,CAAC,CAAC,8BAAW,CAAC,MAAM,EAAE,8BAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBAC9D,cAAc;wBACd,OAAO;qBACV;oBACD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,8BAAW,CAAC,KAAK,CAAC;oBAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;oBACzB,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACxE,IAAI,OAAO,CAAC,SAAS,EAAE;wBACnB,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAE,OAAO,CAAC,SAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;qBACzE;oBACD,MAAM,QAAQ,GAAG,uBAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACpC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;wBAChC,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;wBAEvD,MAAM,IAAI,GAAG,IAAI,qBAAqB,CAAC;4BACnC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC;4BAC7B,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAa;4BACnC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAa,CAAC,CAAC,CAAC,IAAI;4BACrC,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,OAAO,EAAE,IAAI;4BACb,MAAM,EAAE,IAAI;4BACZ,KAAK,EAAE,KAAK,CAAC,KAAK;4BAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ;4BACvB,WAAW,EAAE,IAAI,CAAC,WAAW;4BAC7B,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;4BAC/B,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;yBACpC,CAAC,CAAC;wBAEH,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC;wBACpC,OAAO,CAAC,QAAQ,CAAC,CAAC,+BAA+B;oBACrD,CAAC,CAAC,CAAC;oBACH,IAAI,QAAQ,EAAE;wBACV,OAAO;qBACV;oBAED,8BAA8B;oBAC9B,IAAI,aAAa,GAAG,KAAK,CAAC;oBAC1B,MAAM,iBAAiB,GAAG,CAAC,SAAiB,EAAE,EAAE;wBAC5C,aAAa,GAAG,IAAI,CAAC;wBACrB,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;4BAC5D,sBAAsB;4BACtB,IAAI,CAAC,wBAAwB,CAAC,IAAI,SAAS,wBAAwB,IAAI,mEAAmE,CAAC,CAAC;yBAC/I;wBACD,IAAI,OAAO,CAAC,SAAS,EAAE;4BACnB,MAAM,GAAG,GAAG,uBAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC;4BACxC,OAAQ,OAAO,CAAC,SAAoC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;yBACtE;wBACD,OAAO,IAAI,CAAC;oBAChB,CAAC,CAAC;oBAEF,MAAM,YAAY,GAAG,CAAC,SAAiB,EAAE,IAAgC,EAAE,EAAE;wBACzE,IAAI,CAAC,aAAa,EAAE;4BAChB,IAAI,CAAC,wBAAwB,CAAC,0DAA0D,CAAC,CAAC;yBAC7F;wBACD,MAAM,GAAG,GAAG,uBAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC;wBACxC,MAAM,IAAI,GAAG,IAAI,qBAAqB,CAAC;4BACnC,IAAI,EAAE,SAAS;4BACf,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAa;4BACnC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAa,CAAC,CAAC,CAAC,IAAI;4BACrC,OAAO,EAAE,IAAI,0BAAW,CAAC,SAAS,CAAC;4BACnC,MAAM,EAAE,IAAI;4BACZ,KAAK,EAAE,IAAI;4BACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;4BACvB,WAAW,EAAE,IAAI,CAAC,WAAW;4BAC7B,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;4BAC/B,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;yBACpC,CAAC,CAAC;wBAEH,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC;wBACpC,OAAO,CAAC,QAAQ,CAAC;oBACrB,CAAC,CAAC;oBACF,MAAM,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,YAAY,CAAC,CAAC;gBAC1G,CAAC,CAAC,EAAE,CAAC;gBACL,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;oBACtB,wCAAwC;oBACxC,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;iBAC9B;gBACD,OAAO,QAAQ,CAAC;aACnB;YACD,OAAO,GAAG,EAAE;gBACR,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;oBACtB,0CAA0C;oBAC1C,MAAM,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;iBACnC;gBACD,MAAM,GAAG,CAAC;aACb;QAEL,CAAC,CAAC,CAAC,UAAU;QACb,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,OAM3B;QACG,iFAAiF;QAEjF,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QACxB,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,MAAM,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACnH,IAAI;YACA,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE;gBAC3B,8BAA8B;gBAC9B,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,aAAa,KAAK,KAAK,CAAC;gBACvJ,MAAM,QAAQ,GAAG,uBAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;gBAC/D,IAAI,CAAC,UAAU,EAAE;oBACb,qBAAqB;oBACrB,IAAI,IAAI,KAAK,EAAE,EAAE;wBAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAwB,CAAC;qBAAE,CAAC,oCAAoC;oBACvG,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;oBACzE,OAAO,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,UAAU,EAAE,4EAA4E,IAAI,GAAG,CAAC,CAAC;oBACtI,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;oBAC9E,IAAI,UAAU,IAAI,CAAC,8BAAW,CAAC,MAAM,EAAE,8BAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE;wBACrH,MAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;wBACpF,OAAO;4BACH,QAAQ,EAAE,UAAU,CAAC,QAAQ;4BAC7B,WAAW,EAAE,UAAU,CAAC,WAAW;4BACnC,OAAO,EAAE,UAAU,CAAC,OAAO;4BAC3B,QAAQ,EAAE,UAAU,CAAC,QAAQ;4BAC7B,IAAI,EAAE,cAAc,CAAC,IAAI;4BACzB,KAAK,EAAE,cAAc,CAAC,KAAK;yBAC9B,CAAC;qBACL;oBACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAwB,CAAC;iBAChD;gBAED,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,KAAK,8BAAW,CAAC,KAAK,CAAC;gBACtD;;mBAEG;gBACH,MAAM,kBAAkB,GAAG,CAAC,GAAa,EAAc,EAAE;oBACrD,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACvD,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,uBAAQ,CAAC,GAAG,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACzF,CAAC,CAAC;gBACF,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjF,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAEjF;;;;;;;;;;;;;mBAaG;gBACH,MAAM,wBAAwB,GAAG,CAAC,QAAgB,EAAE,IAAwB,EAAE,EAAE;oBAC5E,IAAI,CAAC,8BAAW,CAAC,MAAM,EAAE,8BAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;wBACzF,MAAM,SAAS,GAAG,uBAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAC7E,MAAM,aAAa,GAAG,IAAI,uBAAQ,CAAC,SAAS,CAAC,CAAC;wBAC9C,MAAM,MAAM,GAAG,EAA4B,CAAC;wBAC5C,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;wBAClF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;4BACrB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,8BAAW,CAAC,KAAK,CAAC;4BAChD,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB;4BAC9F,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;gCACzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gCAC/C,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,UAAU,KAAK,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;oCACtF,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oCACjB,MAAM;iCACT;gCACD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gCACzC,KAAK,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;6BACzC;yBACJ;wBACD,MAAM,iBAAiB,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;wBACpF,MAAM,iBAAiB,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;wBACpF,IAAI,iBAAiB,IAAI,CAAC,iBAAiB,EAAE;4BACzC,4FAA4F;4BAC5F,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;4BAC7E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gCACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAW,CAAC,CAAC,EAAE;oCAC1D,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oCACpB,CAAC,EAAE,CAAC;iCACP;6BACJ;yBACJ;wBACD,qEAAqE;wBACrE,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;4BACtB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;yBAC1B;qBACJ;gBACL,CAAC,CAAC;gBAEF,wBAAwB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAE3C,IAAI,aAAa,GAAG,KAAK,CAAC;gBAC1B,MAAM,sBAAsB,GAAG,CAAC,QAAgB,EAAE,QAAoC,EAAE,EAAE;oBACtF,aAAa,GAAG,IAAI,CAAC;oBACrB,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;wBAC7D,sBAAsB;wBACtB,IAAI,CAAC,wBAAwB,CAAC,IAAI,QAAQ,6BAA6B,IAAI,yEAAyE,CAAC,CAAC;qBACzJ;oBACD,IAAI,CAAC,QAAQ,EAAE;wBAAE,OAAO,IAAI,CAAC;qBAAE;oBAE/B,kCAAkC;oBAClC,MAAM,YAAY,GAAG,uBAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;oBACpD,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC3D,MAAM,aAAa,GAAG,IAAI,uBAAQ,CAAC,SAAS,CAAC,CAAC;oBAC9C,IAAI,OAAO,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;wBACnC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;wBAC7D,CAAC,CAAC,IAAI,CAAC;2BACJ,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;4BACxB,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;4BAC7F,CAAC,CAAC,IAAI,CAAC,CAAC;oBAEhB,4KAA4K;oBAC5K,IAAI,OAAO;2BACJ,OAAO,CAAC,aAAa,KAAK,KAAK;2BAC/B,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,8BAAW,CAAC,MAAM,EAAE,8BAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;+BACjH,uBAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAC1E;wBACE,OAAO,GAAG,KAAK,CAAC;qBACnB;oBACD,OAAO,OAAO,CAAC;gBACnB,CAAC,CAAC;gBAEF,MAAM,QAAQ,GAAG,EAAqB,CAAC;gBACvC,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAE,IAAwB,EAAE,EAAE;oBACjE,mDAAmD;oBACnD,IAAI,CAAC,aAAa,EAAE;wBAChB,IAAI,CAAC,wBAAwB,CAAC,6DAA6D,CAAC,CAAC;qBAChG;oBACD,IAAI,OAAO,CAAC,aAAa,KAAK,KAAK,IAAI,CAAC,8BAAW,CAAC,MAAM,EAAE,8BAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBAChG,+HAA+H;wBAC/H,oGAAoG;wBACpG,OAAO,IAAI,CAAC;qBACf;oBAED,iFAAiF;oBACjF,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBAEzC,oBAAoB;oBACpB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;oBAEjC,WAAW;oBACX,MAAM,GAAG,GAAG,IAAqB,CAAC;oBAClC,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC;oBACpB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAEnB,OAAO,IAAI,CAAC,CAAC,iBAAiB;gBAClC,CAAC,CAAC;gBAEF,MAAM,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,sBAAsB,EAAE,aAAa,CAAC,CAAC;gBAE9G,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,IAAI,SAAS,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,oBAAoB,QAAQ,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,yBAAU,CAAC,OAAO,CAAC,CAAC,CAAC;gBAExJ,MAAM,MAAM,GAAG,UAAU,CAAC;gBAE1B,MAAM,aAAa,GAAG,CAAC,GAAwB,EAAE,EAAE;oBAC/C,gCAAgC;oBAChC,MAAM,GAAG,GAAG,EAAW,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;wBAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;wBAC5B,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;oBAC5B,CAAC,CAAC,CAAC;oBACH,OAAO,GAAG,CAAC;gBACf,CAAC,CAAC;gBAEF,IAAI,UAAU,CAAC,IAAI,KAAK,8BAAW,CAAC,KAAK,EAAE;oBACvC,MAAM,CAAC,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;iBAC9C;gBAED,IAAI,UAAU,CAAC,IAAI,KAAK,8BAAW,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,KAAK,8BAAW,CAAC,KAAK,EAAE;oBACjF,oCAAoC;oBACpC,uCAAuC;oBACvC,MAAM,cAAc,GAAG,uBAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBAClD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;oBAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACtC,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;wBAC9B,MAAM,QAAQ,GAAG,uBAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;wBACtD,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;wBACxD,IAAI,MAAM,GAAG,KAAK,CAAC;wBACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAG,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;4BACxC,OAAO,CAAC,MAAM,CAAC,OAAO,MAAM,KAAK,QAAQ,EAAE,mDAAmD,CAAC,CAAC;4BAChG,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;4BACzB,MAAM,MAAM,GAAG,CAAC,KAAK,SAAS,CAAC,MAAM,GAAC,CAAC,CAAC;4BACxC,MAAM,QAAQ,GAAG,MAAM;gCACnB,CAAC,CAAC,SAAS,CAAC,IAAI;gCAChB,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,GAAC,CAAC,CAAC,KAAK,QAAQ;oCAChC,CAAC,CAAC,8BAAW,CAAC,KAAK;oCACnB,CAAC,CAAC,8BAAW,CAAC,MAAM,CAAC;4BAC7B,IAAI,SAAc,CAAC;4BACnB,IAAI,CAAC,MAAM,EAAE;gCACT,SAAS,GAAG,QAAQ,KAAK,8BAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;6BACzD;iCACI;gCACD,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC;gCAC5B,IAAI,QAAQ,KAAK,8BAAW,CAAC,KAAK,EAAE;oCAChC,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;iCACxC;6BACJ;4BACD,IAAI,GAAG,IAAI,MAAM,EAAE;gCACf,oBAAoB;gCACpB,MAAM,aAAa,GAAG,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,OAAO,SAAS,IAAI,CAAC,8BAAW,CAAC,MAAM,EAAE,8BAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gCAC5H,IAAI,CAAC,aAAa,EAAE;oCAChB,4KAA4K;oCAC5K,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,SAAS,CAAC,IAAI,uKAAuK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;iCACpR;qCACI;oCACD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;wCACtC,IAAI,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE;4CACzB,IAAI,CAAC,wBAAwB,CAAE,0CAA0C,QAAQ,gMAAgM,CAAC,CAAC;yCACtR;wCACD,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;oCAChD,CAAC,CAAC,CAAC;iCACN;6BACJ;iCACI;gCACD,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;6BAC3B;4BACD,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;yBACxB;qBACJ;iBACJ;qBACI,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC1B,IAAI,CAAC,wBAAwB,CAAC,8CAA8C,CAAC,CAAC;iBACjF;gBAED,6EAA6E;gBAC7E,gFAAgF;gBAChF,+CAA+C;gBAC/C,MAAM;gBACN,4EAA4E;gBAC5E,mDAAmD;gBACnD,4EAA4E;gBAC5E,oCAAoC;gBAEpC,IAAI,OAAO,CAAC,aAAa,KAAK,KAAK,EAAE;oBACjC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;wBACpC,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,KAAK,MAAM,EAAE;4BACnF,+CAA+C;4BAC/C,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;4BAC5D,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;yBAC5B;oBACL,CAAC,CAAC,CAAC;iBACN;gBAED,IAAI,OAAO,CAAC,OAAO,EAAE;oBACjB,4DAA4D;iBAC/D;gBAED,IAAI,OAAO,CAAC,OAAO,EAAE;oBACjB,MAAM,OAAO,GAAG,CAAC,GAAQ,EAAE,IAAyB,EAAE,EAAE;wBACpD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;4BAAE,OAAO;yBAAE;wBACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;wBACpB,IAAI,GAAG,KAAK,GAAG,EAAE;4BACb,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gCACzB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;4BACnC,CAAC,CAAC,CAAC;yBACN;6BACI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;4BACtB,GAAG,IAAI,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;yBAClD;6BACI;4BACD,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;yBACnB;oBACL,CAAC,CAAC;oBACF,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;wBAC3B,MAAM,SAAS,GAAG,uBAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;wBAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;oBACrC,CAAC,CAAC,CAAC;iBACN;gBAED,OAAO,MAAM,CAAC;YAClB,CAAC,CAAC,EAAE,CAAC;YACL,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBACtB,wCAAwC;gBACxC,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;aAC9B;YACD,OAAO,IAAI,CAAC;SACf;QACD,OAAO,GAAG,EAAE;YACR,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBACtB,0CAA0C;gBAC1C,MAAM,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;aACnC;YACD,MAAM,GAAG,CAAC;SACb;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,UAI5B,EAAE;QACF,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,uBAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,MAAM,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACnH,IAAI;YACA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;YACzD,MAAM,IAAI,GAAG,IAAI,qBAAqB,CAAC;gBACnC,IAAI;gBACJ,GAAG,EAAE,OAAO,QAAQ,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;gBAC3D,KAAK,EAAE,OAAO,QAAQ,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;gBAC7D,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC1B,MAAM,EAAE,IAAI,KAAK,IAAI;gBACrB,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,0BAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;gBAC5C,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;gBAC7C,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;gBAC/C,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;gBACrC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI;aAC9C,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE;gBACtB,kBAAkB;gBAElB,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACzE,OAAO,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,UAAU,EAAE,4EAA4E,IAAI,GAAG,CAAC,CAAC;gBACtI,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;gBAC1E,IAAI,MAAM,IAAI,CAAC,8BAAW,CAAC,MAAM,EAAE,8BAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE;oBACzG,wBAAwB;oBACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;oBACnB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBACxC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;oBACpB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;oBACxB,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC1C,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;oBAChC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;iBACzC;qBACI;oBACD,0EAA0E;oBAC1E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;iBACvB;aACJ;YAED,IAAI,OAAO,CAAC,mBAAmB,EAAE;gBAC7B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;gBACpB,IAAI,CAAC,8BAAW,CAAC,KAAK,EAAE,8BAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;oBAClF,yBAAyB;oBACzB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClE,IAAI,CAAC,UAAU,IAAI,MAAM,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;iBAC5D;aACJ;YAED,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBACtB,wCAAwC;gBACxC,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;aAC9B;YACD,OAAO,IAAI,CAAC;SACf;QACD,OAAO,GAAG,EAAE;YACR,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBACtB,0CAA0C;gBAC1C,MAAM,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;aACnC;YACD,MAAM,GAAG,CAAC;SACb;IACL,CAAC;IAED,oCAAoC;IACpC,KAAK,CAAC,OAAO,CACT,IAAY,EACZ,KAAU,EACV,UAMI,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;QAE7C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;SAC3D;QACD,MAAM,QAAQ,GAAG,uBAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,MAAM,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClH,IAAI;YACA,IAAI,IAAI,KAAK,EAAE,EAAE;gBACb,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,YAAY,WAAW,IAAI,CAAC,QAAQ,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,YAAY,WAAW,CAAC,EAAE;oBACrK,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAC;iBAC5D;gBACD,MAAM,IAAI,CAAC,sBAAsB,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;aACnJ;iBACI,IAAI,OAAO,OAAO,CAAC,eAAe,KAAK,WAAW,EAAE;gBACrD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;gBAC3D,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,eAAe,EAAE;oBAC3C,MAAM,IAAI,+BAAiB,CAAC,aAAa,IAAI,CAAC,QAAQ,wCAAwC,OAAO,CAAC,eAAe,GAAG,CAAC,CAAC;iBAC7H;gBACD,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;oBAC9F,iBAAiB;oBACjB,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;iBACrJ;qBACI;oBACD,qBAAqB;oBACrB,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;oBACzE,OAAO,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,UAAU,EAAE,4EAA4E,IAAI,GAAG,CAAC,CAAC;oBACtI,MAAM,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;iBACvL;aACJ;iBACI;gBACD,8CAA8C;gBAC9C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACzE,OAAO,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,UAAU,EAAE,4EAA4E,IAAI,GAAG,CAAC,CAAC;gBACtI,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;aAC9J;YACD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBACtB,wCAAwC;gBACxC,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;aAC9B;SACJ;QACD,OAAO,GAAG,EAAE;YACR,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBACtB,0CAA0C;gBAC1C,MAAM,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;aACnC;YACD,MAAM,GAAG,CAAC;SACb;IACL,CAAC;IAED,oCAAoC;IACpC,KAAK,CAAC,UAAU,CACZ,IAAY,EACZ,OAAY,EACZ,UAKI,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;QAE7C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;SAC3D;QACD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC,uCAAuC;SACvF;aACI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YACxC,OAAO,CAAC,2BAA2B;SACtC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,MAAM,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAElH,IAAI;YACA,8BAA8B;YAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;YAC/D,MAAM,QAAQ,GAAG,uBAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE;gBACvE,+CAA+C;gBAC/C,YAAY;gBACZ,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;aACtJ;iBACI,IAAI,QAAQ,CAAC,MAAM,EAAE;gBACtB,iDAAiD;gBACjD,MAAM,QAAQ,GAAG,uBAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACzE,OAAO,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,UAAU,EAAE,4EAA4E,IAAI,GAAG,CAAC,CAAC;gBACtI,MAAM,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;aACzL;iBACI;gBACD,yFAAyF;gBACzF,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACzE,OAAO,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,UAAU,EAAE,4EAA4E,IAAI,GAAG,CAAC,CAAC;gBACtI,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;aAChK;YACD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBACtB,wCAAwC;gBACxC,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;aAC9B;SACJ;QACD,OAAO,GAAG,EAAE;YACR,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBACtB,0CAA0C;gBAC1C,MAAM,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;aACnC;YACD,MAAM,GAAG,CAAC;SACb;IACL,CAAC;CAEJ;AAnmCD,sCAmmCC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/storage/custom/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/storage/custom/indexed-db/index.js.map b/dist/cjs/storage/custom/indexed-db/index.js.map index 8584e2d..b5b9435 100644 --- a/dist/cjs/storage/custom/indexed-db/index.js.map +++ b/dist/cjs/storage/custom/indexed-db/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../ts/storage/custom/indexed-db/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/storage/custom/indexed-db/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/storage/custom/indexed-db/settings.js.map b/dist/cjs/storage/custom/indexed-db/settings.js.map index 40bcfc5..b794a03 100644 --- a/dist/cjs/storage/custom/indexed-db/settings.js.map +++ b/dist/cjs/storage/custom/indexed-db/settings.js.map @@ -1 +1 @@ -{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../ts/storage/custom/indexed-db/settings.ts"],"names":[],"mappings":";;;AACA,6BAAwC;AAExC,MAAa,wBAAyB,SAAQ,mBAAe;IAwBzD,YAAY,QAA2C;QACnD,KAAK,CAAC,QAAQ,CAAC,CAAC;QAnBpB;;;WAGG;QACH,iBAAY,GAAG,KAAK,CAAC;QAErB;;;WAGG;QACH,iBAAY,GAAG,EAAE,CAAC;QAElB;;;WAGG;QACH,YAAO,GAAG,KAAK,CAAC;QAIZ,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;SAAE;QACjF,IAAI,OAAO,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE;YAAE,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;SAAE;QAC9F,IAAI,OAAO,QAAQ,CAAC,YAAY,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;SAAE;QAC7F,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE;YAAE,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;SAAE;QAC/E,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrC,IAAI,IAAI,IAAI,QAAQ,EAAE;gBAClB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,wDAAwD,CAAC,CAAC;aACjF;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AApCD,4DAoCC"} \ No newline at end of file +{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../../../src/storage/custom/indexed-db/settings.ts"],"names":[],"mappings":";;;AACA,6BAAwC;AAExC,MAAa,wBAAyB,SAAQ,mBAAe;IAwBzD,YAAY,QAA2C;QACnD,KAAK,CAAC,QAAQ,CAAC,CAAC;QAnBpB;;;WAGG;QACH,iBAAY,GAAG,KAAK,CAAC;QAErB;;;WAGG;QACH,iBAAY,GAAG,EAAE,CAAC;QAElB;;;WAGG;QACH,YAAO,GAAG,KAAK,CAAC;QAIZ,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;SAAE;QACjF,IAAI,OAAO,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE;YAAE,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;SAAE;QAC9F,IAAI,OAAO,QAAQ,CAAC,YAAY,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;SAAE;QAC7F,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE;YAAE,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;SAAE;QAC/E,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrC,IAAI,IAAI,IAAI,QAAQ,EAAE;gBAClB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,wDAAwD,CAAC,CAAC;aACjF;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AApCD,4DAoCC"} \ No newline at end of file diff --git a/dist/cjs/storage/custom/indexed-db/transaction.js.map b/dist/cjs/storage/custom/indexed-db/transaction.js.map index 9bca536..5d68546 100644 --- a/dist/cjs/storage/custom/indexed-db/transaction.js.map +++ b/dist/cjs/storage/custom/indexed-db/transaction.js.map @@ -1 +1 @@ -{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../ts/storage/custom/indexed-db/transaction.ts"],"names":[],"mappings":";;;AACA,0BAAoH;AAQpH,SAAS,iBAAiB,CAAC,OAAmB;IAC1C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,EAAE;YACxB,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC;QACF,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC;IAC7B,CAAC,CAAC,CAAC;AACP,CAAC;AASD,MAAa,2BAA4B,SAAQ,4BAAwB;IAMrE;;;;;;OAMG;IACH,YAAmB,OAAoC,EAAE,MAAwC;QAC7F,KAAK,CAAC,MAAM,CAAC,CAAC;QADC,YAAO,GAAP,OAAO,CAA6B;QAXvD,eAAU,GAAG,IAAI,CAAC,CAAC,qDAAqD;QAapE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,kBAAkB,CAAC,KAAK,GAAG,KAAK;QAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAC/F,OAAO,EAAE,CAAC;IACd,CAAC;IAED,cAAc,CAAC,IAAwB;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,MAAM,IAAI,qBAA4B,IAAI,CAAE,CAAC;QAC7C,OAAO,IAAI,CAAC,KAAK,CAAC;QAClB,MAAM,QAAQ,GAAG,IAAkC,CAAC;QACpD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,MAAM;QACR,qEAAqE;QACrE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YAAE,OAAO;SAAE;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAEtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEnG,MAAM,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI;YACA,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACxC,IAAI,IAAI,GAAG,KAAK,EAAE,SAAS,GAAG,CAAC,CAAC;gBAChC,MAAM,WAAW,GAAG,CAAC,GAAQ,EAAE,EAAE;oBAC7B,IAAI,GAAG,IAAI,CAAC;oBACZ,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChB,CAAC,CAAC;gBACF,MAAM,aAAa,GAAG,GAAG,EAAE;oBACvB,IAAI,EAAE,SAAS,KAAK,KAAK,CAAC,MAAM,EAAE;wBAC9B,OAAO,EAAE,CAAC;qBACb;gBACL,CAAC,CAAC;gBACF,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;oBACpB,IAAI,IAAI,EAAE;wBAAE,OAAO;qBAAE;oBACrB,IAAI,EAAE,EAAE,EAAE,CAAC;oBACX,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;oBACrB,IAAI,EAAE,CAAC,MAAM,KAAK,KAAK,EAAE;wBACrB,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;wBACzD,MAAM,QAAQ,GAAuB,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;wBACxD,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,mCAAmC;wBAC/E,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,sCAAsC;wBACvF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;qBACzC;yBACI,IAAI,EAAE,CAAC,MAAM,KAAK,QAAQ,EAAE;wBAC7B,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,qCAAqC;wBAClF,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,iCAAiC;wBAC5E,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;qBACtC;yBACI;wBACD,WAAW,CAAC,IAAI,KAAK,CAAC,8BAA8B,EAAE,CAAC,MAAM,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC;qBACzF;oBACD,IAAI,SAAS,GAAG,CAAC,CAAC;oBAClB,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,GAAG,EAAE;wBAC/B,IAAI,EAAE,SAAS,KAAK,CAAC,EAAE;4BAAE,aAAa,EAAE,CAAC;yBAAE;oBAC/C,CAAC,CAAC;oBACF,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,GAAG,WAAW,CAAC;gBAC1C,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;SAC5B;QACD,OAAO,GAAG,EAAE;YACR,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnB,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YACvB,MAAM,GAAG,CAAC;SACb;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAQ;QACnB,yDAAyD;QACzD,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAY;QAClB,yCAAyC;QACzC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3C,gEAAgE;YAChE,OAAO,KAAK,CAAC;SAChB;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,iBAAiB,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,yCAAyC;QAC1G,MAAM,EAAE,GAAG,iBAAiB,CAAC,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,0CAA0C;QAC7G,IAAI;YACA,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAC5C,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAuB,CAAC;YAC9C,IAAI,CAAC,IAAI,EAAE;gBACP,qBAAqB;gBACrB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACnC,OAAO,IAAI,CAAC;aACf;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,QAA8B,CAAC;YACjD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC;SACf;QACD,OAAM,GAAG,EAAE;YACP,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;YAC1C,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YACvB,MAAM,GAAG,CAAC;SACb;IACL,CAAC;IAED,GAAG,CAAC,IAAY,EAAE,IAAwB;QACtC,mCAAmC;QACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,CAAC,IAAY;QACf,mCAAmC;QACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAAe;QAChC,sFAAsF;QACtF,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,UAAU,CACN,IAAY,EACZ,OAGC,EACD,aAA6C,EAC7C,WAAkG;QAElG,gDAAgD;QAChD,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,kCAAO,OAAO,KAAE,WAAW,EAAE,KAAK,KAAI,aAAa,EAAE,WAAW,CAAC,CAAC;IACrG,CAAC;IAED,aAAa,CACT,IAAY,EACZ,OAGC,EACD,aAAmF,EACnF,WAAiG;QAEjG,mDAAmD;QACnD,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,kCAAO,OAAO,KAAE,WAAW,EAAE,IAAI,KAAI,aAAa,EAAE,WAAW,CAAC,CAAC;IACpG,CAAC;IAED,cAAc,CACV,IAAY,EACZ,OAIC,EACD,aAA+E,EAC/E,WAA6F;QAE7F,kCAAkC;QAClC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzC,MAAM,QAAQ,GAAG,wBAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACzD,MAAM,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAA0B,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAmC,CAAC;YAClJ,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE;;gBACjB,MAAA,EAAE,CAAC,KAAK,kDAAI,CAAC;gBACb,MAAM,CAAC,CAAC,CAAC,CAAC;YACd,CAAC,CAAC;YACF,MAAM,CAAC,SAAS,GAAG,KAAK,EAAC,CAAC,EAAC,EAAE;;gBACzB,MAAM,SAAS,GAAG,MAAA,MAAA,MAAM,CAAC,MAAM,0CAAE,GAAa,mCAAI,IAAI,CAAC;gBACvD,IAAI,SAAS,GAAG,IAAI,CAAC;gBACrB,IAAI,SAAS,KAAK,IAAI,EAAE;oBACpB,kBAAkB;oBAClB,SAAS,GAAG,KAAK,CAAC;iBACrB;qBACI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE;oBACxC,kEAAkE;oBAClE,SAAS,GAAG,KAAK,CAAC;iBACrB;qBACI,IAAI,OAAO,CAAC,WAAW,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;oBAE5D,IAAI,IAAmD,CAAC;oBACxD,IAAI,OAAO,CAAC,QAAQ,EAAE;wBAClB,MAAM,WAAW,GAAG,MAAwC,CAAC;wBAC7D,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,KAA2B,CAAC;wBAC5D,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;qBACxB;oBACD,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;oBACjD,IAAI,SAAS,EAAE;wBACX,IAAI,OAAO,CAAC,KAAK,EAAE;4BACf,cAAc;4BACd,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;gCACnC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gCAC/C,IAA2B,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;6BACpD;iCACI;gCACD,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gCACpD,IAA2B,CAAC,KAAK,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oCACvE,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE;wCACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB;oCACpC,CAAC,CAAC;oCACF,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE;wCAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oCACxB,CAAC,CAAC;gCACN,CAAC,CAAC,CAAC;gCACH,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAG,IAA2B,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAA0B,CAAC,CAAC;6BACtH;yBACJ;wBACD,SAAS,GAAG,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;qBAC5C;iBACJ;gBACD,IAAI,SAAS,EAAE;oBACX,IAAI;wBAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;qBAAE;oBACjC,OAAM,GAAG,EAAE;wBACP,oCAAoC;wBACpC,SAAS,GAAG,KAAK,CAAC;qBACrB;iBACJ;gBACD,IAAI,CAAC,SAAS,EAAE;oBACZ,MAAA,EAAE,CAAC,MAAM,kDAAI,CAAC;oBACd,OAAO,EAAE,CAAC;iBACb;YACL,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;CAEJ;AApPD,kEAoPC"} \ No newline at end of file +{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../../../src/storage/custom/indexed-db/transaction.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/storage/custom/local-storage/index.js.map b/dist/cjs/storage/custom/local-storage/index.js.map index 40aff48..928fe87 100644 --- a/dist/cjs/storage/custom/local-storage/index.js.map +++ b/dist/cjs/storage/custom/local-storage/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../ts/storage/custom/local-storage/index.ts"],"names":[],"mappings":";;;AAAA,0BAA2C;AAC3C,gCAAmC;AACnC,yCAAkD;AAGzC,qGAHA,+BAAoB,OAGA;AAF7B,+CAAwD;AAEzB,wGAFtB,qCAAuB,OAEsB;AAEtD,SAAgB,0BAA0B,CAAC,MAAc,EAAE,OAAsC,EAAE;IAC/F,MAAM,QAAQ,GAAG,IAAI,+BAAoB,CAAC,IAAI,CAAC,CAAC;IAEhD,0DAA0D;IAC1D,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;IAEzH,kCAAkC;IAClC,MAAM,eAAe,GAAG,IAAI,yBAAqB,CAAC;QAC9C,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,IAAI;QACb,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;QACnD,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB;QAC/C,KAAK;YACD,+BAA+B;YAC/B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7B,CAAC;QACD,cAAc,CAAC,MAAwC;YACnD,8CAA8C;YAC9C,MAAM,OAAO,GAAG;gBACZ,KAAK,EAAE,IAAI;gBACX,MAAM;gBACN,YAAY;aACf,CAAC;YACF,MAAM,WAAW,GAAG,IAAI,qCAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACjE,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACxC,CAAC;KACJ,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,IAAI,WAAO,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACrH,EAAE,CAAC,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC;IAEvD,OAAO,EAAE,CAAC;AACd,CAAC;AA/BD,gEA+BC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/storage/custom/local-storage/index.ts"],"names":[],"mappings":";;;AAAA,0BAA2C;AAC3C,gCAAmC;AACnC,yCAAkD;AAGzC,qGAHA,+BAAoB,OAGA;AAF7B,+CAAwD;AAEzB,wGAFtB,qCAAuB,OAEsB;AAEtD,SAAgB,0BAA0B,CAAC,MAAc,EAAE,OAAsC,EAAE;IAC/F,MAAM,QAAQ,GAAG,IAAI,+BAAoB,CAAC,IAAI,CAAC,CAAC;IAEhD,0DAA0D;IAC1D,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;IAEzH,kCAAkC;IAClC,MAAM,eAAe,GAAG,IAAI,yBAAqB,CAAC;QAC9C,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,IAAI;QACb,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;QACnD,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB;QAC/C,KAAK;YACD,+BAA+B;YAC/B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7B,CAAC;QACD,cAAc,CAAC,MAAwC;YACnD,8CAA8C;YAC9C,MAAM,OAAO,GAAG;gBACZ,KAAK,EAAE,IAAI;gBACX,MAAM;gBACN,YAAY;aACf,CAAC;YACF,MAAM,WAAW,GAAG,IAAI,qCAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACjE,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACxC,CAAC;KACJ,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,IAAI,WAAO,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACrH,EAAE,CAAC,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC;IAEvD,OAAO,EAAE,CAAC;AACd,CAAC;AA/BD,gEA+BC"} \ No newline at end of file diff --git a/dist/cjs/storage/custom/local-storage/interface.js.map b/dist/cjs/storage/custom/local-storage/interface.js.map index 7b57a70..1807e85 100644 --- a/dist/cjs/storage/custom/local-storage/interface.js.map +++ b/dist/cjs/storage/custom/local-storage/interface.js.map @@ -1 +1 @@ -{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../../ts/storage/custom/local-storage/interface.ts"],"names":[],"mappings":""} \ No newline at end of file +{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../../../../src/storage/custom/local-storage/interface.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/cjs/storage/custom/local-storage/local-storage-like.js b/dist/cjs/storage/custom/local-storage/local-storage-like.js deleted file mode 100644 index 7009005..0000000 --- a/dist/cjs/storage/custom/local-storage/local-storage-like.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=local-storage-like.js.map \ No newline at end of file diff --git a/dist/cjs/storage/custom/local-storage/local-storage-like.js.map b/dist/cjs/storage/custom/local-storage/local-storage-like.js.map deleted file mode 100644 index 07fe81f..0000000 --- a/dist/cjs/storage/custom/local-storage/local-storage-like.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"local-storage-like.js","sourceRoot":"","sources":["../../../ts/storage/custom/local-storage/local-storage-like.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/cjs/storage/custom/local-storage/settings.js.map b/dist/cjs/storage/custom/local-storage/settings.js.map index 78f2736..4b01885 100644 --- a/dist/cjs/storage/custom/local-storage/settings.js.map +++ b/dist/cjs/storage/custom/local-storage/settings.js.map @@ -1 +1 @@ -{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../ts/storage/custom/local-storage/settings.ts"],"names":[],"mappings":";;;AACA,6BAAwC;AAGxC,MAAa,oBAAqB,SAAQ,mBAAe;IACrD,YAAY,QAAuC;QAC/C,KAAK,CAAC,QAAQ,CAAC,CAAC;QAapB;;;WAGG;QACH,SAAI,GAAG,KAAK,CAAC;QAOb;;;WAGG;QACH,iBAAY,GAAG,KAAK,CAAC;QA3BjB,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE;YAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;SAAE;QACtE,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;SAAE;QACjF,IAAI,OAAO,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE;YAAE,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;SAAE;QAC9F,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;SAAE;QACjF,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE;YAAE,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;SAAE;QAC/E,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrC,IAAI,IAAI,IAAI,QAAQ,EAAE;gBAClB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,oDAAoD,CAAC,CAAC;aAC7E;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CA4CJ;AAzDD,oDAyDC"} \ No newline at end of file +{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../../../src/storage/custom/local-storage/settings.ts"],"names":[],"mappings":";;;AACA,6BAAwC;AAGxC,MAAa,oBAAqB,SAAQ,mBAAe;IACrD,YAAY,QAAuC;QAC/C,KAAK,CAAC,QAAQ,CAAC,CAAC;QAapB;;;WAGG;QACH,SAAI,GAAG,KAAK,CAAC;QAOb;;;WAGG;QACH,iBAAY,GAAG,KAAK,CAAC;QA3BjB,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE;YAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;SAAE;QACtE,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;SAAE;QACjF,IAAI,OAAO,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE;YAAE,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;SAAE;QAC9F,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;SAAE;QACjF,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE;YAAE,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;SAAE;QAC/E,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrC,IAAI,IAAI,IAAI,QAAQ,EAAE;gBAClB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,oDAAoD,CAAC,CAAC;aAC7E;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CA4CJ;AAzDD,oDAyDC"} \ No newline at end of file diff --git a/dist/cjs/storage/custom/local-storage/transaction.js.map b/dist/cjs/storage/custom/local-storage/transaction.js.map index c60e325..05761ec 100644 --- a/dist/cjs/storage/custom/local-storage/transaction.js.map +++ b/dist/cjs/storage/custom/local-storage/transaction.js.map @@ -1 +1 @@ -{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../ts/storage/custom/local-storage/transaction.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../../../src/storage/custom/local-storage/transaction.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/storage/index.js.map b/dist/cjs/storage/index.js.map index 641da11..e2868fb 100644 --- a/dist/cjs/storage/index.js.map +++ b/dist/cjs/storage/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/storage/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":";;;AAAA,+CAAsL;AACtL,0DAAkD;AAClD,gDAAmD;AACnD,4CAAwC;AACxC,gCAAgD;AAChD,8CAAoC;AACpC,mEAAmE;AACnE,8CAA0C,CAAC,8IAA8I;AACzL,uCAA4D;AAG5D,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,oBAAK,CAAC;AAErE,MAAM,UAAU,GAAG,KAAK,CAAC;AACzB,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAC,aAAa,EAAC,eAAe,EAAC,eAAe,EAAC,SAAS,EAAC,WAAW,CAAC,CAAC;AACvG,kHAAkH;AAClH,gBAAgB,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC;AAE3E,gEAAgE;AAChE,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AACtB,MAAa,qBAAsB,SAAQ,KAAK;IAC5C,YAAmB,MAAc;QAC7B,KAAK,CAAC,6BAA6B,MAAM,EAAE,CAAC,CAAC;QAD9B,WAAM,GAAN,MAAM,CAAQ;IAEjC,CAAC;CACJ;AAJD,sDAIC;AA4CD;;GAEG;AACH,MAAa,eAAe;IAgDxB,YAAY,WAAqC,EAAE;QA9CnD;;;WAGG;QACH,uBAAkB,GAAG,EAAE,CAAC;QAExB;;;WAGG;QACH,yBAAoB,GAAG,KAAK,CAAC;QAE7B;;;WAGG;QACH,SAAI,GAAG,GAAG,CAAC;QAEX;;;WAGG;QACH,gBAAW,GAAG,GAAG,CAAC;QAElB;;;WAGG;QACH,SAAI,GAAG,MAAM,CAAC;QAEd;;;WAGG;QACH,aAAQ,GAAG,KAAK,CAAC;QAab,IAAI,OAAO,QAAQ,CAAC,kBAAkB,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,kBAAkB,GAAI,QAAQ,CAAC,kBAAkB,CAAC;SAAE;QAChH,IAAI,OAAO,QAAQ,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAAE,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC,oBAAoB,CAAC;SAAE;QACtH,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;SAAE;QACrE,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SAAE;QACpE,IAAI,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;SAAE;QAC1F,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;SAAE;QACrE,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE;YAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;SAAE;QAClF,IAAI,OAAO,QAAQ,CAAC,GAAG,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;SAAE;IACtE,CAAC;CACJ;AA1DD,0CA0DC;AAUD,MAAa,OAAQ,SAAQ,iCAAkB;IAkB3C;;;;;OAKG;IACH,YAAmB,IAAY,EAAS,QAAyB,EAAE,GAAe;QAC9E,KAAK,EAAE,CAAC;QADO,SAAI,GAAJ,IAAI,CAAQ;QAAS,aAAQ,GAAR,QAAQ,CAAiB;QATjE,2HAA2H;QACnH,aAAQ,GAAsD,EAAE,CAAC;QA+CjE,aAAQ,GAAgB,EAAE,CAAC;QAC5B,YAAO,GAAG;YACb;;;;eAIG;YACH,IAAI,SAAS;gBACT,OAAO,gBAAG,aAAH,gBAAG,uBAAH,gBAAG,CAAE,aAAa,CAAC;YAC9B,CAAC;YAED,MAAM,EAAE,CACJ,IAAY,EACZ,GAAW,EACX,UAA8B;gBAC1B,OAAO,EAAE,KAAK;aACjB,EACH,EAAE;gBACA,MAAM,OAAO,GAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC5G,OAAO,IAAA,qBAAW,EAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YACpD,CAAC;YAED;;eAEG;YACH,GAAG,EAAE,CAAC,IAAY,EAAE,MAAc,IAAI,EAAE,EAAE;gBACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;oBACpB,8CAA8C;oBAC9C,MAAM,QAAQ,GAAG,uBAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACnH,IAAI,GAAG,CAAC,IAAI,uBAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;iBACxC;gBACD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAChC,KAAK,CAAC,IAAI,KAAK,IAAI;oBACnB,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,CACtC,CAAC;YACN,CAAC;YAED;;eAEG;YACH,MAAM,EAAE,CAAC,UAAkB,EAAE,OAAO,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE;gBAC9E,MAAM,QAAQ,GAAG,uBAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBAClD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;oBAChC,MAAM,SAAS,GAAG,uBAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;oBAC1D,oDAAoD;oBACpD,IAAI,OAAO,CAAC,WAAW,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,OAAO,GAAG,KAAK,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAW,CAAC,EAAE;wBAC/L,yFAAyF;wBACzF,OAAO,IAAI,CAAC;qBACf;yBACI,IAAI,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE;wBACzC,4EAA4E;wBAC5E,OAAO,KAAK,CAAC;qBAChB;yBACI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE;wBAClE,wFAAwF;wBACxF,+FAA+F;wBAC/F,OAAO,KAAK,CAAC;qBAChB;oBACD,gDAAgD;oBAChD,wEAAwE;oBACxE,sHAAsH;oBACtH,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;wBAC7B,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,+CAA+C;oBAC7F,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;YACP,CAAC;YAED;;eAEG;YACH,IAAI,EAAE,GAAG,EAAE;gBACP,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,CAAC;YAED;;eAEG;YACH,IAAI,EAAE,KAAK,IAAI,EAAE;gBACb,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAI,CAAC,gBAAG,CAAC,aAAa,EAAE;oBACpB,mDAAmD;oBACnD,OAAO;iBACV;gBACD,IAAI,KAAK,GAAG,EAAc,CAAC;gBAC3B,IAAI;oBACA,KAAK,GAAG,CAAC,MAAM,gBAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,UAAU,CAAC,CAAa,CAAC;iBACzF;gBACD,OAAM,GAAG,EAAE;oBACP,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;wBACvB,2GAA2G;wBAC3G,2CAA2C;wBAC3C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;qBACzB;iBACJ;gBACD,MAAM,QAAQ,GAAG,EAAwB,CAAC;gBAC1C,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;oBACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;wBAAE,OAAO;qBAAE;oBAC3C,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,0FAA0F;oBACpJ,MAAM,gBAAgB,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACvD,IAAI,CAAC,CAAC,kBAAkB,IAAI,CAAC,gBAAgB,CAAC,IAAI,kBAAkB,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,EAAE;wBACrH,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;wBACrC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACpB;gBACL,CAAC,CAAC,CAAC;gBACH,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAChC,CAAC;YAED,GAAG,EAAE,KAAK,EAAE,QAAgB,EAAE,EAAE;gBAC5B,IAAI;oBACA,MAAM,KAAK,GAAG,MAAM,sBAAS,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAC3D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,OAAO,KAAK,CAAC;iBAChB;gBACD,OAAM,GAAG,EAAE;oBACP,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACtB,OAAO,IAAI,CAAC;iBACf;YACL,CAAC;YAED;;eAEG;YACH,MAAM,EAAE,KAAK,EAAE,QAAgB,EAAE,EAAE;gBAC/B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAClD,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;gBACrB,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;YACtH,CAAC;YAED;;;eAGG;YACH,MAAM,EAAE,KAAK,EAAE,QAAgB,EAAE,EAAE;gBAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;gBACvE,IAAI,CAAC,KAAK,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,SAAS,QAAQ,YAAY,CAAC,CAAC;iBAAE;gBAC/D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtD,OAAO,KAAK,CAAC;YACjB,CAAC;YAED,KAAK,EAAE,KAAK,IAAI,EAAE;gBACd,oBAAoB;gBACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACrG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAChC,CAAC;SAEJ,CAAC;QAGM,wBAAmB,GAAG,EAAkG,CAAC;QAC1H,kBAAa,GAAG;YACnB;;;;;eAKG;YACH,GAAG,EAAE,CAAC,IAAY,EAAE,IAAY,EAAE,QAA8B,EAAE,EAAE;gBAChE,IAAI,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;oBACpC,MAAM,IAAI,SAAS,CAAC,uBAAuB,IAAI,GAAG,CAAC,CAAC;iBACvD;gBACD,IAAI,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBAC9C,IAAI,CAAC,QAAQ,EAAE;oBAAE,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;iBAAE;gBAClE,gFAAgF;gBAChF,kGAAkG;gBAClG,IAAI;gBACJ,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACvD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,mCAAmC;YAChG,CAAC;YAED;;;;;eAKG;YACH,MAAM,EAAE,CAAC,IAAY,EAAE,IAAa,EAAE,QAA+B,EAAE,EAAE;gBACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBAChD,IAAI,CAAC,QAAQ,EAAE;oBAAE,OAAO;iBAAE;gBAC1B,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CACvC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CACnF,CAAC;gBACF,IAAI,CAAC,CAAC;gBACN,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE;oBACtB,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;iBACzB;gBACD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,mCAAmC;YAClG,CAAC;YAED;;;eAGG;YACH,0BAA0B,CAAC,IAAY;gBACnC,MAAM,WAAW,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;gBAC1D,OAAO,CAAC,CAAC,WAAW,CAAC;YACzB,CAAC;YAED;;;eAGG;YACH,0BAA0B,EAAE,CAAC,IAAY,EAAE,EAAE;gBACzC,kFAAkF;gBAClF,8DAA8D;gBAC9D,8DAA8D;gBAC9D,iEAAiE;gBACjE,0CAA0C;gBAC1C,MAAM,QAAQ,GAAG,IAAI,uBAAQ,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,gBAAgB,GAAG,EAA4F,CAAC;gBACtH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;oBAC7D,IAAI,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE;wBAChF,4EAA4E;wBAC5E,gCAAgC;wBAChC,wGAAwG;wBACxG,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;wBAC5D,MAAM,SAAS,GAAG,uBAAQ,CAAC,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;wBACjE,QAAQ;6BACH,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,oDAAoD;6BACnG,OAAO,CAAC,GAAG,CAAC,EAAE;4BACX,IAAI,QAAQ,GAAG,IAAI,CAAC;4BACpB,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,EAAE,+CAA+C;gCACvE,QAAQ,GAAG,SAAS,CAAC;6BACxB;iCACI,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,EAAE,kDAAkD;gCAC5I,QAAQ,GAAG,IAAI,CAAC,CAAC,wEAAwE;6BAC5F;iCACI,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,IAAI,IAAI,KAAK,SAAS,EAAE,EAAE,+DAA+D;gCAC1H,MAAM,QAAQ,GAAG,uBAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCAC1F,QAAQ,GAAG,uBAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;6BACzD;iCACI,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,gFAAgF;gCAC7K,MAAM,QAAQ,GAAG,uBAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCAC1F,QAAQ,GAAG,uBAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;6BACzD;4BAED,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,EAAE;gCACpG,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC;6BACpF;wBACL,CAAC,CAAC,CAAC;qBACV;gBACL,CAAC,CAAC,CAAC;gBACH,OAAO,gBAAgB,CAAC;YAC5B,CAAC;YAED;;eAEG;YACH,wBAAwB,EAAE,CAAC,IAAY,EAAE,EAAE;gBACvC,MAAM,QAAQ,GAAG,uBAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,WAAW,GAAG,EAA4F,CAAC;gBACjH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;oBAC7D,oEAAoE;oBACpE,mDAAmD;oBACnD,iDAAiD;oBACjD,MAAM;oBACN,IAAI,QAAQ,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE;wBACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;wBAC5D,MAAM,SAAS,GAAG,uBAAQ,CAAC,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;wBAEjE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;4BACnB,IAAI,QAAQ,GAAG,IAAI,CAAC;4BACpB,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE;gCACrD,QAAQ,GAAG,SAAS,CAAC;6BACxB;iCACI,IAAI,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gCACnE,MAAM,QAAQ,GAAG,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC;oCACnE,CAAC,CAAC,GAAG;oCACL,CAAC,CAAC,uBAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCAC/E,QAAQ,GAAG,uBAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;6BACzD;iCACI,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gCACxF,QAAQ,GAAG,IAAI,CAAC;6BACnB;iCACI,IACD,CAAC,aAAa,EAAE,eAAe,EAAE,oBAAoB,EAAE,sBAAsB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;mCAC9F,CACC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC;uCAC1B,IAAI,KAAK,SAAS;uCAClB,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CACtC,EACH;gCACE,MAAM,QAAQ,GAAG,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC;oCACnE,CAAC,CAAC,GAAG;oCACL,CAAC,CAAC,uBAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCAC/E,QAAQ,GAAG,uBAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,iDAAiD;6BAC3G;4BACD,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,gBAAgB,KAAK,gBAAgB,CAAC,EAAE,EAAE,oFAAoF;gCAChO,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC;6BAC/E;wBACL,CAAC,CAAC,CAAC;qBACN;gBACL,CAAC,CAAC,CAAC;gBACH,OAAO,WAAW,CAAC;YACvB,CAAC;YAED;;;;;;;;eAQG;YACH,OAAO,EAAE,CAAC,KAAa,EAAE,IAAY,EAAE,QAAgB,EAAE,QAAa,EAAE,QAAa,EAAE,OAAY,EAAE,EAAE;gBACnG,wGAAwG;gBACxG,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC/D,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC;qBAC9C,OAAO,CAAC,GAAG,CAAC,EAAE;oBACX,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;oBAC9D,qCAAqC;oBACrC,sDAAsD;oBACtD,oCAAoC;oBACpC,IAAI;oBACJ,SAAS;oBACT,gCAAgC;oBAChC,wDAAwD;oBACxD,IAAI;gBACJ,CAAC,CAAC,CAAC;YACX,CAAC;SACJ,CAAC;QApWE,IAAI,CAAC,KAAK,GAAG,IAAI,0BAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,IAAI,GAAG,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,iCAAiC;QAErL,gFAAgF;QAChF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtF,IAAI,QAAQ,CAAC,GAAG,EAAE;YACd,IAAI,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACvC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;aACvD;YACD,IAAI,CAAC,CAAC,QAAQ,EAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAClD,MAAM,IAAI,KAAK,CAAC,6DAA6D,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;aACtG;YACD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;YACrE,IAAI,CAAC,GAAG,GAAG,IAAI,mBAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;SACnD;aACI;YACD,IAAI,CAAC,GAAG,GAAG,IAAI,aAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SACzC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACnC,0CAA0C;YAC1C,6CAA6C;YAC7C,mDAAmD;YACnD,qCAAqC;YACrC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;gBACxB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;aACxB;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,GAAG;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBAChC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YACxD,CAAC;SACJ,CAAC;QACF,iEAAiE;QACjE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IAEtB,CAAC,CAAC,qBAAqB;IAlDvB,SAAS;QACL,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAE,CAAC,QAAQ,EAAE,CAAC;IACxD,CAAC;IA8XD,KAAK,CAAC,KAAK;QACP,iIAAiI;QACjI,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,UAAU,CAAC;IACxD,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,KAAU;QACtB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,YAAY,IAAI,EAAE;YAClF,OAAO,IAAI,CAAC;SACf;aACI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAChC,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE;gBAAE,OAAO,KAAK,CAAC;aAAE;YACtE,kFAAkF;YAClF,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YACpC,OAAO,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;SAC5D;aACI,IAAI,KAAK,YAAY,4BAAa,EAAE;YACrC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE;gBAAE,OAAO,KAAK,CAAC;aAAE;YAC3E,qFAAqF;YACrF,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzC,OAAO,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;SAC5D;aACI,IAAI,KAAK,YAAY,WAAW,EAAE;YACnC,OAAO,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;SAC9D;aACI,IAAI,KAAK,YAAY,KAAK,EAAE;YAC7B,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;SAC7B;aACI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAChC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;SAC1C;aACI;YACD,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;SAC9C;IACL,CAAC;IAED;;OAEG;IACH,6DAA6D;IACnD,UAAU,CAAC,IAAY,EAAE,KAAU,EAAE,OAA6B;QACxE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACnE,CAAC;IAED,eAAe,CAAC,IAAY,EAAE,cAAuB;QACjD,IAAI,YAAY,GAAG,IAAI,CAAC;QACxB,IAAI,mBAAmB,GAAG,KAAK,CAAC;QAEhC,iGAAiG;QACjG,MAAM,kBAAkB,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAEnG,2GAA2G;QAC3G,MAAM,gBAAgB,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;QACnG,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,mBAAmB,GAAG,IAAI,CAAC;YAC3B,MAAM,UAAU,GAAG,gBAAgB;iBAC9B,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,uBAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;iBACxF,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAE;gBACV,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,CAAC,CAAC;qBACxC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,CAAC;gBACjD,OAAO,CAAC,CAAC;YACb,CAAC,CAAC,CAAC;YACP,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC5B,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC;YAC1B,IAAI,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE;gBACtI,8EAA8E;gBAC9E,mBAAmB,GAAG,KAAK,CAAC;aAC/B;YACD,YAAY,GAAG,uBAAQ,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,iDAAiD;SAC/G;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;aAC7E,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,uBAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACjE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACX,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;gBAAE,OAAO,CAAC,CAAC,CAAC;aAAE;iBAC5C,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;gBAAE,OAAO,CAAC,CAAC;aAAE;YACrD,OAAO,CAAC,CAAC;QACb,CAAC,CAAC;aACD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAA6D,CAAC;QAEvF,MAAM,UAAU,GAAG,EAAc,CAAC;QAClC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAE;gBACjB,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,WAAW,EAAE;oBAAE,CAAC,CAAC,SAAS,GAAG,uBAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;iBAAE;gBACvF,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,WAAW,EAAE;oBAAE,CAAC,CAAC,SAAS,GAAG,uBAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;iBAAE;gBACvF,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM;oBAAE,OAAO,CAAC,CAAC,CAAC;qBAClD,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM;oBAAE,OAAO,CAAC,CAAC;gBAC3D,OAAO,CAAC,CAAC;YACb,CAAC,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,uBAAQ,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC;YACxG,IAAI,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE;gBAC3C,uDAAuD;gBACvD,MAAM;gBACN,qCAAqC;gBACrC,kGAAkG;gBAClG,iHAAiH;gBACjH,sDAAsD;gBACtD,+BAA+B;gBAC/B,mHAAmH;gBACnH,YAAY,GAAG,YAAY,CAAC;gBAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBAClE,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBACnD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3E,CAAC,CAAC,CAAC;aACN;SACJ;QACD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IAC5G,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,sBAAsB,CAAC,IAAY,EAAE,KAAU,EAAE,UAUlD;QACD,KAAK,EAAE,KAAK;QACZ,mBAAmB,EAAE,IAAI;QACzB,eAAe,EAAE,KAAK;QACtB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,IAAI;KACf;QACG,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;SAAE;QACpI,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC;QAEvC,2CAA2C;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAChF,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;YAChB,MAAM,IAAI,qBAAqB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;SACtD;QAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACxB,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QAExC,4DAA4D;QAC5D,IAAI,YAAY,GAAQ,IAAI,CAAC;QAC7B,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;QAC3G,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC;QACxF,IAAI,EAAE,UAAU,EAAE,GAAG,YAAY,CAAC;QAElC,MAAM,SAAS,GAAG,GAAG,EAAE;YACnB,IAAI,OAAO,OAAO,CAAC,oBAAoB,KAAK,UAAU,EAAE;gBACpD,OAAO,OAAO,CAAC,oBAAoB,EAAE,CAAC;aACzC;YACD,IAAI,YAAY,EAAE;gBACd,4DAA4D;gBAC5D,sEAAsE;gBACtE,MAAM,QAAQ,GAAG,uBAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,aAAa,GAAG,uBAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;gBACzD,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBACvD,IAAI,YAAY,GAAG,YAAY,CAAC;gBAChC,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,KAAK,IAAI,EAAE;oBAClD,+DAA+D;oBAC/D,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;oBACnC,YAAY,GAAG,OAAO,YAAY,KAAK,QAAQ,IAAI,QAAQ,IAAI,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;iBAC/G;gBACD,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC;aACvC;YACD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC,CAAC;QAEF,MAAM,yBAAyB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,KAAK,IAAI,CAAC;QACxG,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,yBAAyB,EAAE;YACvF,oEAAoE;YACpE,OAAO,SAAS,EAAE,CAAC;SACtB;QAED,IAAI,CAAC,mBAAmB,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3E,qCAAqC;YACrC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,YAAY,KAAK,IAAI,EAAE;gBACvB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAClD,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,IAAI,GAAG,EAAE,CAAC,CAAC;aAC7D;SACJ;QAED,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;QACjF,IAAI,YAAY,GAAG,IAAI,CAAC;QACxB,IAAI,aAAa,CAAC,MAAM,EAAE;YACtB,MAAM,YAAY,GAAsG,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;YAC7I,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvB,YAAY,CAAC,OAAO,GAAG,UAAU,CAAC;aACrC;YACD,IAAI,YAAY,KAAK,EAAE,IAAI,OAAO,YAAY,CAAC,OAAO,KAAK,WAAW,EAAE;gBACpE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,6VAA6V,CAAC,CAAC;aAClX;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YAC5D,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;SAC7B;QAED,YAAY,GAAG,YAAY,CAAC;QAE5B,iCAAiC;QACjC,MAAM,MAAM,GAAG,CAAC,MAAM,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC;QAEzC,oCAAoC;QACpC,IAAI,eAAoB,EAAE,YAAiB,CAAC;QAC5C,IAAI,IAAI,KAAK,YAAY,EAAE;YACvB,IAAI,OAAO,CAAC,KAAK,EAAE;gBACf,IAAI,YAAY,KAAK,IAAI,EAAE;oBACvB,eAAe,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACtD;qBACI;oBACD,+CAA+C;oBAC/C,eAAe,GAAG,YAAY,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1D,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;wBACpC,eAAe,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;oBAC7C,CAAC,CAAC,CAAC;iBACN;aACJ;iBACI;gBACD,eAAe,GAAG,KAAK,CAAC;aAC3B;YACD,YAAY,GAAG,eAAe,CAAC;SAClC;aACI;YACD,+EAA+E;YAC/E,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACrE,MAAM,SAAS,GAAG,uBAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAClD,mGAAmG;YACnG,IAAI,YAAY,KAAK,IAAI,EAAE;gBACvB,gEAAgE;gBAChE,eAAe,GAAG,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChE;iBACI;gBACD,eAAe,GAAG,YAAY,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1D,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBACpC,eAAe,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;gBAC7C,CAAC,CAAC,CAAC;aACN;YACD,YAAY,GAAG,eAAe,CAAC;YAC/B,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzB,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;gBACnC,0CAA0C;gBAC1C,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC1C,YAAY,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;iBAClC;qBACI;oBACD,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;oBACxC,MAAM,WAAW,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,mBAAM,QAAQ,CAAE,CAAC;oBACnF,YAAY,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC;iBACxC;gBACD,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;aACzC;SACJ;QAED,IAAI,OAAO,CAAC,KAAK,EAAE;YACf,mCAAmC;YACnC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAC7B,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;SACN;QAED,yFAAyF;QAEzF,MAAM,WAAW,GAAG,aAAa,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QACjE,IAAI,WAAW,KAAK,WAAW,EAAE;YAC7B,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC;YACtB,OAAO,MAAM,CAAC;SACjB;QAED,kFAAkF;QAClF,SAAS,WAAW,CAAC,GAAwB;YACzC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBAAE,OAAO,GAAG,CAAC;aAAE,CAAC,gBAAgB;YAC7E,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAC5B,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;gBACtB,IAAI,GAAG,KAAK,IAAI,EAAE;oBACd,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;oBACjB,IAAI,GAAG,YAAY,KAAK,EAAE;wBAAE,GAAG,CAAC,MAAM,EAAE,CAAC;qBAAE,CAAC,gDAAgD;iBAC/F;gBACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;oBAAE,WAAW,CAAC,GAAG,CAAC,CAAC;iBAAE;YACtD,CAAC,CAAC,CAAC;QACP,CAAC;QACD,WAAW,CAAC,eAAe,CAAC,CAAC;QAE7B,4BAA4B;QAC5B,iGAAiG;QACjG,oGAAoG;QACpG,MAAM,YAAY,GAAG,EAAwB,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,uBAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACpE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACX,2DAA2D;YAC3D,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;gBAAE,OAAO,CAAC,CAAC;aAAE;iBAC3C,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;gBAAE,OAAO,CAAC,CAAC,CAAC;aAAE;YACtD,OAAO,CAAC,CAAC;QACb,CAAC,CAAC;aACD,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;YACnB,4DAA4D;YAE5D,qBAAqB;YACrB,kDAAkD;YAClD,wEAAwE;YACxE,gCAAgC;YAChC,0DAA0D;YAE1D,MAAM,QAAQ,GAAG,uBAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YACpD,MAAM,aAAa,GAAG,uBAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;YAC9D,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACvD,4CAA4C;YAC5C,MAAM,QAAQ,GAAG,YAAY,CAAC;YAC9B,MAAM,QAAQ,GAAG,eAAe,CAAC;YACjC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;gBACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;gBACxE,2BAA2B;gBAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ;oBACvB,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC;oBAC5D,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC7F,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACrB,OAAO,CAAC,aAAa;aACxB;YACD,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,QAAa,EAAE,QAAa,EAAE,EAAE;gBACtE,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,EAAE;oBACxC,OAAO,EAAE,CAAC;iBACb;gBACD,MAAM,QAAQ,GAAG,uBAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,aAAa,GAAG,uBAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;gBAC9D,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACvD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;oBACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;oBACxE,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;iBACzC;gBAED,IAAI,OAAO,GAAG,EAAW,CAAC;gBAC1B,IAAI,SAAS,GAAG,EAAE,CAAC;gBACnB,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;oBACjC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;wBAC1E,mBAAmB;wBACnB,MAAM,OAAO,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAC/D,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;4BACrD,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gCAC1B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;6BACrB;wBACL,CAAC,CAAC,CAAC;wBACH,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;4BAClB,MAAM,SAAS,GAAG,uBAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;4BACxD,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;4BAC5D,MAAM,YAAY,GAAG,uBAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;4BAC5D,MAAM,YAAY,GAAG,kBAAkB,CAAC,YAAY,EAAE,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;4BAClG,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;wBAC3C,CAAC,CAAC,CAAC;wBACH,MAAM;qBACT;yBACI;wBACD,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;wBAC1D,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;wBAC3B,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;wBAC3B,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,EAAE;4BACxC,MAAM;yBACT;wBACD,SAAS,GAAG,uBAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;qBACxD;iBACJ;gBACD,OAAO,OAAO,CAAC;YACnB,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,kBAAkB,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACrE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACrB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ;oBACvB,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;oBACzE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC9H,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEP,MAAM,wBAAwB,GAAG,CAC7B,GAAwE,EACxE,QAAa,EACb,QAAa,EACb,YAA6D,EAAE,EACjE,EAAE;YACA,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;YACpB,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;gBAC5B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;aACvC;YACD,IAAI,IAAI,KAAK,SAAS,EAAE;gBACpB,OAAO,CAAC,wCAAwC;aACnD;iBACI,IAAI,IAAI,KAAK,eAAe,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,CAAC,EAAE;gBAC3E,OAAO,GAAG,KAAK,CAAC;aACnB;iBACI,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,eAAe,EAAE;gBACnD,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAClD,OAAO,GAAG,OAAO,KAAK,WAAW,CAAC;aACrC;iBACI,IAAI,IAAI,KAAK,aAAa,EAAE;gBAC7B,OAAO,GAAG,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,CAAC;aACpD;iBACI,IAAI,IAAI,KAAK,eAAe,EAAE;gBAC/B,OAAO,GAAG,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,CAAC;aACpD;YAED,MAAM,QAAQ,GAAG,uBAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACpD,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBACzB,4EAA4E;gBAC5E,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE,aAAa,QAAQ,CAAC,IAAI,yCAAyC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;gBAC/G,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;YACrC,CAAC,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAS,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,uBAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9F,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACzH,CAAC,CAAC;QAEF,MAAM,qBAAqB,GAAG,CAC1B,WAAmB,EACnB,QAAa,EACb,QAAa,EACb,aAAoC,EACtC,EAAE;YACA,MAAM,KAAK,GAAG,EAAmF,CAAC;YAClG,MAAM,MAAM,GAAG,aAAa,IAAI,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAClE,IAAI,MAAM,KAAK,WAAW,EAAE;gBACxB,OAAO,KAAK,CAAC,CAAC,gCAAgC;aACjD;iBACI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBACjC,6CAA6C;gBAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;aACzD;YACD,qEAAqE;YACrE,qFAAqF;YACrF,mEAAmE;YACnE,sCAAsC;YACtC,sCAAsC;YACtC,gCAAgC;YAChC,2CAA2C;YAC3C,UAAU;YACV,wCAAwC;YACxC,2CAA2C;YAC3C,gCAAgC;YAChC,UAAU;YACV,wCAAwC;YACxC,2CAA2C;YAC3C,2CAA2C;YAC3C,UAAU;YACV,6EAA6E;YAC7E,IAAI;iBACC;gBACD,iGAAiG;gBACjG,6DAA6D;gBAC7D,gEAAgE;gBAChE,qFAAqF;gBACrF,oDAAoD;gBACpD,IAAI;gBACJ,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBAC1B,MAAM,SAAS,GAAG,uBAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC/D,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;oBACjE,MAAM,UAAU,GAAG,qBAAqB,CAAC,SAAS,EAAE,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC7G,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;gBAC9B,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBACvB,MAAM,SAAS,GAAG,uBAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;oBAC1D,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC7E,CAAC,CAAC,CAAC;gBACH,IAAI,QAAQ,YAAY,KAAK,IAAI,QAAQ,YAAY,KAAK,EAAE;oBACxD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBACjD;gBACD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBACzB,MAAM,SAAS,GAAG,uBAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;oBAC1D,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7E,CAAC,CAAC,CAAC;aACN;YACD,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC;QAEF,mEAAmE;QACnE,IAAI,yBAAyB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,aAAa,EAAE;YACnE,MAAM,CAAC,SAAS,GAAG,CAAC,GAAG,EAAE;gBACrB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACrE,MAAM,SAAS,GAAG,uBAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBAClD,IAAI,QAAQ,GAAG,YAAY,EAAE,QAAQ,GAAG,eAAe,CAAC;gBACxD,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzB,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;oBAC9B,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;iBACtE;gBACD,MAAM,cAAc,GAAG,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBACzD,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;gBAC9E,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,uBAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,gCAAgC;gBACpK,OAAO,SAAS,CAAC;YACrB,CAAC,CAAC,EAAE,CAAC;SACR;QAED,MAAM,gBAAgB,GAAG,GAAG,EAAE;YAC1B,kEAAkE;YAClE,6HAA6H;YAC7H,kBAAkB;iBACb,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAC,WAAW,EAAC,gBAAgB,EAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;iBAC9F,GAAG,CAAC,GAAG,CAAC,EAAE;gBACP,MAAM,IAAI,GAAG,uBAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAChD,OAAO;oBACH,GAAG;oBACH,IAAI;iBACP,CAAC;YACN,CAAC,CAAC;iBACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACf,2DAA2D;gBACvD,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;oBAAE,OAAO,CAAC,CAAC;iBAAE;qBAC3C,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;oBAAE,OAAO,CAAC,CAAC,CAAC;iBAAE;gBACtD,OAAO,CAAC,CAAC;YACb,CAAC,CAAC;iBACD,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;gBACjB,MAAM,OAAO,GAAG,CAAC,WAAmB,EAAE,QAAa,EAAE,QAAa,EAAE,YAA6D,EAAE,EAAE,EAAE;oBACnI,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAC5E,MAAM,SAAS,GAAG,uBAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;oBAClD,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;wBACzB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;wBACjC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE;4BACzE,kCAAkC;4BAC9B,MAAM,OAAO,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CACrE,QAAQ,YAAY,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAClD,CAAC;4BACF,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gCACrD,MAAM,UAAU,GAAG,QAAQ,YAAY,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gCACnE,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BACvD,CAAC,CAAC,CAAC;4BACH,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gCAClB,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;gCAC5D,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;gCAC5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;oCACxB,wBAAwB,CAAC,GAAG,EAAE,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;iCACnF;qCACI;oCACD,OAAO,CAAC,uBAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;iCACzG;4BACL,CAAC,CAAC,CAAC;4BACH,OAAO,CAAC,yBAAyB;yBACpC;6BACI;4BACD,WAAW,GAAG,uBAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;4BACzD,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;4BAC/D,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;4BAChC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;yBACnC;qBACJ;oBACD,wBAAwB,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;gBACjE,CAAC,CAAC;gBAEF,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,uBAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE;oBAC9F,4DAA4D;oBAC5D,yDAAyD;oBACzD,MAAM;oBACN,qEAAqE;oBACrE,kEAAkE;oBAClE,4DAA4D;oBACxD,MAAM,cAAc,GAAG,uBAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;oBAC5E,MAAM,OAAO,GACb,CAAC,GAAG,CAAC,IAAI,KAAK,cAAc,CAAC;2BAC1B,CAAC,GAAG,CAAC,IAAI,KAAK,sBAAsB,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,OAAO,EAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,WAAqB,CAAC,CAAC,CAAC;2BAClH,CAAC,GAAG,CAAC,IAAI,KAAK,sBAAsB,IAAI,WAAW,KAAK,SAAS,IAAI,cAAc,CAAC;2BACpF,CAAC,GAAG,CAAC,IAAI,KAAK,oBAAoB,IAAI,WAAW,KAAK,OAAO,IAAI,cAAc,CAAC,CAAC;oBACpF,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;iBACpH;qBACI;oBACL,4CAA4C;oBACxC,OAAO,CAAC,YAAY,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;iBACxD;YACL,CAAC,CAAC,CAAC;YAEP,iEAAiE;YACjE,oGAAoG;YACpG,wEAAwE;YACxE,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3I,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACzB,yDAAyD;gBACzD,IAAI,WAAW,GAAG,YAAY,CAAC;gBAC/B,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC7E,MAAM,SAAS,GAAG,uBAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBAClD,IAAI,QAAQ,GAAG,YAAY,EAAE,QAAQ,GAAG,eAAe,CAAC;gBACxD,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;oBACjC,WAAW,GAAG,uBAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;oBACzD,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;oBAC/D,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;oBAChC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;iBACnC;gBAED,MAAM,KAAK,GAAG,qBAAqB,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBACrE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;oBACpB,OAAO;iBACV;gBACD,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBACrD,IAAI,CAAC,SAAS,EAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACjD,4BAA4B;oBAC5B,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;wBAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,gDAAgD;wBACjF,wHAAwH;wBACxH,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBACzD,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBACxD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;oBACxG,CAAC,CAAC,CAAC;iBACN;qBACI,IAAI,CAAC,WAAW,EAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBAC1D,kCAAkC;oBAClC,sTAAsT;oBACtT,oTAAoT;oBACpT,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,uBAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBACvK,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;iBACnH;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAEF,yCAAyC;QACzC,IAAI,OAAO,CAAC,mBAAmB,KAAK,KAAK,EAAE;YACvC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,yEAAyE;SACpG;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAChC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,oBAAoB;QAC7C,OAAO,MAAM,CAAC;IAClB,CAAC;IAGD;;;;;OAKG;IACH,6DAA6D;IAC7D,WAAW,CAAC,IAAY,EAAE,OAazB;QACG,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACnE,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,UAAwC,EAAE;QACvE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACH,6DAA6D;IAC7D,OAAO,CAAC,IAAY,EAAE,OAAsC;QACxD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACnE,CAAC;IAED;;;;OAIG;IACH,6DAA6D;IAC7D,WAAW,CAAC,IAAY,EAAE,OAcxB;QACE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACnE,CAAC;IAED;;;;;;;OAOG;IACH,6DAA6D;IAC7D,OAAO,CAAC,IAAY,EAAE,KAAU,EAAE,OAiBhC;QACE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACnE,CAAC;IAED;;;;;;OAMG;IACH,6DAA6D;IAC7D,UAAU,CAAC,IAAY,EAAE,OAAe,EAAE,OAiBxC;QACE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACnE,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,QAA6B,EAAE,UAe3D,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;QAC1D,MAAM,WAAW,GAAG,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAY,CAAC;QACvC,MAAM,IAAI,GAAG,WAAW;YACpB,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,4DAA4D;YACrF,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAElE,IAAI;YACA,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,cAAc,GAAG,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACjD,IAAI,WAAW,EAAE;gBACb,wBAAwB;gBACxB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;aAChE;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;YACpC,IAAI,QAAQ,CAAC;YACb,IAAI;gBACA,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAChC,IAAI,QAAQ,YAAY,OAAO,EAAE;oBAC7B,QAAQ,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;wBAClC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,kCAAkC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;oBACtE,CAAC,CAAC,CAAC;iBACN;aACJ;YACD,OAAO,GAAG,EAAE;gBACR,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,kCAAkC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;aACrE;YACD,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;gBACjC,oDAAoD;gBACpD,OAAO;aACV;YACD,sEAAsE;YACtE,IAAI,WAAW,EAAE;gBACb,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;aACnE;YACD,IAAI,OAAO,EAAE;gBACT,MAAM,IAAI,+BAAiB,CAAC,cAAc,CAAC,CAAC;aAC/C;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,eAAe,EAAE,aAAa,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YACzK,OAAO,MAAM,CAAC;SACjB;QACD,OAAO,GAAG,EAAE;YACR,IAAI,GAAG,YAAY,+BAAiB,EAAE;gBAClC,YAAY;gBACZ,OAAO,CAAC,IAAI,CAAC,6CAA6C,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACzE,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;aACrD;iBACI;gBACD,MAAM,GAAG,CAAC;aACb;SACJ;gBACO;YACJ,IAAI,CAAC,OAAO,EAAE,CAAC;SAClB;IACL,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,QAAmE,EAAE,OAKlG;;QAEG,MAAM,GAAG,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,mCAAI,iBAAE,CAAC,QAAQ,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,KAAK,EAAE,IAAY,EAAE,QAAoE,EAAE,EAAE;YAC3G,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;gBACvB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,qCAAqC;aACtE;YACD,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;gBAC9C,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;gBACjB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;oBAC9C,gFAAgF;oBAChF,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;iBACxC;gBACD,IAAK,IAAc,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBACjC,IAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBAC7B;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC,EAAE,EAAyB,CAAC,CAAC;YAC9B,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;YAExC,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,MAAM,oBAAoB,GAAG,EAAqC,CAAC;YACnE,IAAI;gBACA,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;;oBAC5E,MAAM,UAAU,GAAG,MAAA,SAAS,CAAC,GAAG,mCAAI,SAAS,CAAC,KAAK,CAAC;oBACnD,UAAoB,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,CAAE,UAAoB,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;oBAEjH,MAAM,WAAW,GAAG,QAAQ;yBACvB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,UAAU,CAAC;yBACnC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAErD,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAqC,EAAE,CAAC;oBACnJ,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;oBAC5B,IAAI,OAAO,EAAE;wBACT,oBAAoB,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;wBAEjD,MAAM,aAAa,GAAG,QAAQ;6BACzB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,QAAQ,IAAI,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;6BACpI,GAAG,CAAC,EAAE,CAAC,EAAE;4BACN,MAAM,GAAG,GAAI,EAAE,CAAC,GAAc,CAAC,KAAK,CAAE,EAAE,CAAC,GAAc,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;4BAC1E,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC;wBACnD,CAAC,CAAC,CAAC;wBAEP,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;4BAC1B,MAAM,SAAS,GAAG,uBAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;4BAC7D,MAAM,YAAY,GAClB,SAAS,CAAC,SAAS,EAAE,aAAa,CAAC;iCAC9B,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;4BACpC,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;yBAC3C;qBACJ;oBACD,IAAI,CAAC,OAAO,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;wBACrC,OAAO,KAAK,CAAC,CAAC,iBAAiB;qBAClC;gBACL,CAAC,CAAC,CAAC;gBAEH,IAAI,OAAO,EAAE;oBACT,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;oBACxD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;iBAC/C;gBACD,IAAI,CAAC,OAAO,EAAE;oBAAE,OAAO,KAAK,CAAC;iBAAE;gBAE/B,sFAAsF;gBACtF,OAAO,GAAI,UAAgC,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;oBAE3D,MAAM,SAAS,GAAG,IAAI,oBAAQ,+CACvB,CAAC,OAAO,UAAU,KAAK,QAAQ,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,GACzD,CAAC,OAAO,UAAU,KAAK,QAAQ,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,KAC1D,MAAM,EAAE,KAAK,IACf,CAAC;oBAEH,MAAM,aAAa,GAAG,QAAQ;yBACzB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,QAAQ,IAAI,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;yBACpI,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAErD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,OAAO,EAAE;wBAC3E,OAAO,KAAK,CAAC;qBAChB;oBAED,MAAM,WAAW,GAAG,QAAQ;yBACvB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,UAAU,CAAC;yBACnC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAErD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;wBAC1B,OAAO,IAAI,CAAC,CAAC,mFAAmF;qBACnG;oBAED,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;oBAClD,OAAO,MAAM,CAAC,OAAO,CAAC;gBAC1B,CAAC,CAAC,CAAC;gBACH,OAAO,OAAO,CAAC;aAClB;YACD,OAAO,GAAG,EAAE;gBACR,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,IAAI,KAAK,EAAE,GAAG,CAAC,CAAC;gBACvD,MAAM,GAAG,CAAC;aACb;QACL,CAAC,CAAC,CAAC,YAAY;QAEf;;;;WAIG;QACH,MAAM,UAAU,GAAG,CAAC,KAAe,EAAE,QAA4D,EAAE,EAAE;YACjG,MAAM,QAAQ,GAAG,EAAqC,CAAC;YACvD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBAC/B,IAAI,OAAO,GAAG,IAAI,CAAC;gBACnB,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,EAAE;oBACnG,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;iBAC3B;qBACI,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,EAAE;oBACvG,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;iBAC1B;qBACI,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,IAAI,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,YAAY,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC5G,mFAAmF;oBACnF,OAAO,GAAG,IAAI,CAAC;iBAClB;qBACI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;oBACpB,OAAO,GAAG,KAAK,CAAC;iBACnB;qBACI;oBACD,IAAI,KAAK,CAAC,OAAO,EAAE;wBACf,IAAI,KAAK,CAAC,SAAS,KAAK,8BAAW,CAAC,MAAM,IAAI,CAAC,KAAK,EAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;4BAC7E,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;4BACjD,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;iCACpD,IAAI,CAAC,OAAO,CAAC,EAAE;gCACZ,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC;4BACvC,CAAC,CAAC,CAAC;4BACP,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BACjB,OAAO,GAAG,IAAI,CAAC;yBAClB;6BACI,IAAI,KAAK,CAAC,SAAS,KAAK,8BAAW,CAAC,KAAK,IAAI,CAAC,UAAU,EAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;4BAC3F,qCAAqC;4BACrC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC;iCACtC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE;gCACzB,oCAAoC;gCACpC,0GAA0G;gCAEtG,MAAM,OAAO,GACb,CAAC,CAAC,EAAE,KAAK,UAAU;oCACf,aAAa;oCACb,CAAC,CAAC,CAAC,CAAC,OAAO,YAAY,KAAK;wCACxB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,qDAAqD;wCACjG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;oCAE7B,cAAc;oCACd,CAAC,CAAC,CAAC,CAAC,OAAO,YAAY,KAAK;wCACxB,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,0DAA0D;wCACtG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gCAEnC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC;4BACvC,CAAC,CAAC,CAAC;4BACP,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BACjB,OAAO,GAAG,IAAI,CAAC;yBAClB;6BACI,IAAI,KAAK,CAAC,SAAS,KAAK,8BAAW,CAAC,MAAM,EAAE;4BAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC;iCACtC,IAAI,CAAC,IAAI,CAAC,EAAE;gCACT,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;4BAC/E,CAAC,CAAC,CAAC;4BACP,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BACjB,OAAO,GAAG,IAAI,CAAC;yBAClB;6BACI;4BACD,OAAO,GAAG,KAAK,CAAC;yBACnB;qBACJ;yBACI,IAAI,KAAK,CAAC,IAAI,KAAK,8BAAW,CAAC,MAAM,IAAI,CAAC,KAAK,EAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;wBAC7E,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC;wBACrC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;qBAClE;yBACI,IAAI,KAAK,CAAC,IAAI,KAAK,8BAAW,CAAC,KAAK,IAAI,CAAC,UAAU,EAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;wBACtF,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBACrD,OAAO,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;qBACtF;yBACI;wBACD,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;wBAClD,IAAI,GAAG,YAAY,OAAO,EAAE;4BACxB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BACnB,GAAG,GAAG,IAAI,CAAC;yBACd;wBACD,OAAO,GAAG,GAAG,CAAC;qBACjB;iBACJ;gBACD,OAAO,OAAO,CAAC;YACnB,CAAC,CAAC,CAAC,CAAC,WAAW;YAEf,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC,aAAa;QAEhB,OAAO,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,CAAC,GAAQ,EAAE,EAAU,EAAE,OAAY;QACnC,IAAI,EAAE,KAAK,GAAG,EAAE;YAAE,OAAO,GAAG,GAAG,OAAO,CAAC;SAAE;QACzC,IAAI,EAAE,KAAK,IAAI,EAAE;YAAE,OAAO,GAAG,IAAI,OAAO,CAAC;SAAE;QAC3C,IAAI,EAAE,KAAK,IAAI,EAAE;YAAE,OAAO,GAAG,KAAK,OAAO,CAAC;SAAE;QAC5C,IAAI,EAAE,KAAK,IAAI,EAAE;YAAE,OAAO,GAAG,KAAK,OAAO,CAAC;SAAE;QAC5C,IAAI,EAAE,KAAK,GAAG,EAAE;YAAE,OAAO,GAAG,GAAG,OAAO,CAAC;SAAE;QACzC,IAAI,EAAE,KAAK,IAAI,EAAE;YAAE,OAAO,GAAG,IAAI,OAAO,CAAC;SAAE;QAC3C,IAAI,EAAE,KAAK,IAAI,EAAE;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAAE;QACtD,IAAI,EAAE,KAAK,KAAK,EAAE;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SAAE;QACtD,IAAI,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,OAAO,EAAE;YACjC,MAAM,OAAO,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC;YACxH,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACpC,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxC,OAAO,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;SAC7C;QACD,IAAI,EAAE,KAAK,SAAS,EAAE;YAClB,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;SACvC;QACD,IAAI,EAAE,KAAK,UAAU,EAAE;YACnB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;SACxC;QACD,IAAI,EAAE,KAAK,SAAS,EAAE;YAClB,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;SACjD;QACD,IAAI,EAAE,KAAK,UAAU,EAAE;YACnB,OAAO,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;SAC/C;QACD,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,MAAM,EAAE;YAC/B,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,IAAI,GAAG,CAAC;YACtD,OAAO,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;SACpC;QACD,IAAI,EAAE,KAAK,UAAU,IAAI,EAAE,KAAK,WAAW,EAAE;YACzC,8BAA8B;YAC9B,MAAM,QAAQ,GAAG,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC1F,OAAO,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;SACnD;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,OAA0F,EAAE,OAAO,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE;QACpK,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,MAAK,MAAM,EAAE;YAC5B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;SAC9D;QACD,MAAM,KAAK,GAA0C,OAAO,OAAO,KAAK,UAAU;YAC9E,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,mFAAmF;YACjH,CAAC,CAAC,OAAO,CAAC;QAEd,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,GAAQ,EAAE,EAAE;YAC9C,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;iBAC9B,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAS,kBAAkB;iBACjD,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAW,SAAS;iBACxC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAU,kBAAkB;iBACjD,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAU,YAAY;iBAC3C,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAU,OAAO;iBACtC,OAAO,CAAC,kBAAkB,EAAK,2BAA2B;YACvD,AAD4B,2BAA2B;YACvD,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAC/D,CAAC;YAEN,IAAI,IAAI,KAAK,8BAAW,CAAC,QAAQ,EAAE;gBAC/B,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC;gBAC/B,IAAI,OAAO,CAAC,SAAS,EAAE;oBACnB,GAAG,GAAG,0BAA0B,GAAG,GAAG,CAAC,CAAC,qBAAqB;iBAChE;aACJ;iBACI,IAAI,IAAI,KAAK,8BAAW,CAAC,MAAM,EAAE;gBAClC,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;aAC5B;iBACI,IAAI,IAAI,KAAK,8BAAW,CAAC,KAAK,EAAE;gBACjC,GAAG,GAAG,IAAI,CAAC;aACd;iBACI,IAAI,IAAI,KAAK,8BAAW,CAAC,MAAM,EAAE;gBAClC,GAAG,GAAG,IAAI,CAAC;aACd;iBACI,IAAI,IAAI,KAAK,8BAAW,CAAC,MAAM,EAAE;gBAClC,GAAG,GAAG,IAAI,MAAM,CAAC,sBAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,+CAA+C;gBACzF,IAAI,OAAO,CAAC,SAAS,EAAE;oBACnB,GAAG,GAAG,4BAA4B,GAAG,GAAG,CAAC,CAAC,uBAAuB;iBACpE;aACJ;iBACI,IAAI,IAAI,KAAK,8BAAW,CAAC,SAAS,EAAE;gBACrC,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC;gBACtB,IAAI,OAAO,CAAC,SAAS,EAAE;oBACnB,GAAG,GAAG,+BAA+B,GAAG,GAAG,CAAC,CAAC,8BAA8B;iBAC9E;aACJ;iBACI,IAAI,IAAI,KAAK,8BAAW,CAAC,MAAM,EAAE;gBAClC,oEAAoE;gBACpE,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC;gBACjB,IAAI,OAAO,CAAC,SAAS,EAAE;oBACnB,GAAG,GAAG,4BAA4B,GAAG,GAAG,CAAC;iBAC5C;aACJ;YACD,OAAO,GAAG,CAAC;QACf,CAAC,CAAC;QAEF,IAAI,QAAQ,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC;SACxB;aACI,IAAI,QAAQ,CAAC,IAAI,KAAK,8BAAW,CAAC,MAAM,EAAE;YAAE,QAAQ,GAAG,GAAG,CAAC;YAAC,MAAM,GAAG,GAAG,CAAC;SAAE;aAC3E,IAAI,QAAQ,CAAC,IAAI,KAAK,8BAAW,CAAC,KAAK,EAAE;YAAE,QAAQ,GAAG,GAAG,CAAC;YAAC,MAAM,GAAG,GAAG,CAAC;SAAE;aAC1E;YACD,iDAAiD;YACjD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACtD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;SACrB;QAED,IAAI,QAAQ,EAAE;YACV,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC1B,IAAI,CAAC,YAAY,OAAO,EAAE;gBAAE,MAAM,CAAC,CAAC;aAAE;SACzC;QAED,IAAI,MAAM,GAAG,EAAE,EAAE,WAAW,GAAG,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,EAAgB,CAAC;QACjC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;aACvB,IAAI,CAAC,SAAS,CAAC,EAAE;YACd,IAAI,SAAS,CAAC,OAAO,EAAE;gBACvB,2BAA2B;gBACvB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC3B;iBACI;gBACD,IAAI,WAAW,EAAE,GAAG,CAAC,EAAE;oBAAE,MAAM,IAAI,GAAG,CAAC;iBAAE;gBACzC,IAAI,OAAO,SAAS,CAAC,GAAG,KAAK,QAAQ,EAAE;oBAAE,MAAM,IAAI,IAAI,SAAS,CAAC,GAAG,IAAI,CAAC;iBAAE;gBAC3E,MAAM,IAAI,cAAc,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;aAC7D;QACL,CAAC,CAAC,CAAC;QACP,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YACxB,IAAI,CAAC,YAAY,OAAO,EAAE;gBAAE,MAAM,CAAC,CAAC;aAAE;SACzC;QAED,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACvB,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,MAAM,GAAG,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC;YAClF,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBAAE,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC;aAAE;YACvD,IAAI,MAAM,EAAE;gBACR,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;gBACxB,IAAI,CAAC,YAAY,OAAO,EAAE;oBAAE,MAAM,CAAC,CAAC;iBAAE;aACzC;YACD,MAAM,IAAI,CAAC,UAAU,CAAC,uBAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;SAC3E;QAED,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YACxB,IAAI,CAAC,YAAY,OAAO,EAAE;gBAAE,MAAM,CAAC,CAAC;aAAE;SACzC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CACZ,IAAY,EACZ,IAA+E,EAC/E,UAYK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;QAEtC,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,QAAQ;QACtC,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM;QACzC,MAAM,KAAK,GAAG;YACV,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,EAA6C;YACpD,cAAc,EAAE,CAAC;YACjB,YAAY,EAAE,CAAC;YACf,IAAI,cAAc;gBACd,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;YACpC,CAAC;SACJ,CAAC;QACF,MAAM,aAAa,GAAG,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,EAAE;YAC3C,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC;YACjC,IAAI,IAAI,KAAK,IAAI,EAAE;gBACf,IAAI,KAAK,CAAC,IAAI,EAAE;oBACZ,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;iBAClF;qBACI;oBACD,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;iBACtD;aACJ;iBACI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;gBAC/B,IAAI,GAAG,oBAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;aACnC;YACD,IAAI,MAAM,EAAE;gBACR,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC;aACtB;iBACI;gBACD,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;gBAClC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;gBAClB,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;aACnB;QACL,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;YACvC,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;gBAC3C,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACpC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC;gBACrB,MAAM,aAAa,EAAE,CAAC;aACzB;YACD,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;YAC3D,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC;YACtB,OAAO,GAAG,CAAC;QACf,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;YACzC,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;gBAC1C,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;aAC7B;YACD,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;gBAC1C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;aAC5D;QACL,CAAC,CAAC;QACF,MAAM,YAAY,GAAG,KAAK,EAAE,KAAa,EAAE,EAAE;YACzC,yEAAyE;YACzE,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,GAAG,KAAK,KAAK,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,eAAe,KAAK,GAAG,CAAC,CAAC;aAAE;QAC3I,CAAC,CAAC;QACF,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;YAC7B,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACvC,OAAO,IAAI,EAAE;gBACT,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;oBAClC,MAAM,aAAa,EAAE,CAAC;iBACzB;gBACD,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;oBAC1C,KAAK,CAAC,KAAK,EAAE,CAAC;iBACjB;qBACI;oBACD,MAAM;iBACT;aACJ;QACL,CAAC,CAAC;QACF;;WAEG;QACH,MAAM,SAAS,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;YACvC,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;YAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;QACnD,CAAC,CAAC;QACF;;;WAGG;QACH,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;YAC7B,MAAM,aAAa,EAAE,CAAC;YACtB,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC;YAC9B,QAAQ,EAAE,EAAE;gBACR,KAAK,GAAG,CAAC,CAAC,OAAO,QAAQ,CAAC;gBAC1B,KAAK,GAAG,CAAC,CAAC,OAAO,QAAQ,CAAC;gBAC1B,KAAK,GAAG,CAAC,CAAC,OAAO,OAAO,CAAC;gBACzB,KAAK,GAAG,CAAC,CAAC,OAAO,MAAM,CAAC;gBACxB,KAAK,GAAG,CAAC,CAAC,OAAO,WAAW,CAAC;gBAC7B,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG;oBACJ,OAAO,SAAS,CAAC;gBACrB,OAAO,CAAC,CAAC;oBACL,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE;wBACxC,OAAO,QAAQ,CAAC;qBACnB;oBACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;iBAC3E;aACJ;QACL,CAAC,CAAC;QAEF;;WAEG;QACH,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;YAC1B,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;YACxB,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;YACpB,oCAAoC;YACpC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,GAAC,CAAC,CAAC,KAAK,IAAI,EAAE;gBACtD,CAAC,EAAE,CAAC;gBACJ,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;oBACxB,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACrC,MAAM,aAAa,EAAE,CAAC;oBACtB,CAAC,GAAG,CAAC,CAAC;iBACT;aACJ;YACD,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACxC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YACpB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;YAC3B,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE;gBACjC,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;aAC9B;iBACI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE;gBACtC,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;aAC/B;YACD,MAAM,IAAI,KAAK,CAAC,mCAAmC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QACrF,CAAC,CAAC;QACF,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;YAC1B,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;YACpB,iDAAiD;YACjD,MAAM,OAAO,GAAG,CAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,CAAC,CAAC,CAAC,4DAA4D;YACvJ,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;gBACpC,CAAC,EAAE,CAAC;gBACJ,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;oBACxB,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACrC,MAAM,aAAa,EAAE,CAAC;oBACtB,CAAC,GAAG,CAAC,CAAC;iBACT;aACJ;YACD,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACxC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;YAChB,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC9G,OAAO,EAAE,CAAC;QACd,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;YACzB,MAAM,aAAa,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE;gBACtB,QAAQ,IAAI,EAAE;oBACV,KAAK,QAAQ,CAAC,CAAC,OAAO,UAAU,EAAE,CAAC;oBACnC,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;oBACzB,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;oBACxB,KAAK,QAAQ,CAAC,CAAC,OAAO,UAAU,EAAE,CAAC;oBACnC,KAAK,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC;oBACzB,KAAK,WAAW,CAAC,CAAC,OAAO,SAAS,CAAC;oBACnC,KAAK,SAAS,CAAC,CAAC,OAAO,WAAW,EAAE,CAAC;iBACxC;YACL,CAAC,CAAC,EAAE,CAAC;YACL,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC3B,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjF,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,GAAQ,EAAE,EAAE;YAChD,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;YAC1B,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;YACtB,QAAQ,IAAI,EAAE;gBACV,KAAK,MAAM,CAAC;gBACZ,KAAK,MAAM,CAAC,CAAC;oBACT,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;oBACpB,MAAM;iBACT;gBACD,KAAK,QAAQ,CAAC;gBACd,KAAK,QAAQ,CAAC,CAAC;oBACX,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;oBACpB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;wBACtB,kBAAkB;wBAClB,GAAG,GAAG,sBAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;qBAC7B;yBACI;wBACD,6BAA6B;wBAC7B,MAAM,IAAI,KAAK,CAAC,mEAAmE,IAAI,GAAG,CAAC,CAAC;qBAC/F;oBACD,MAAM;iBACT;gBACD,KAAK,eAAe,CAAC;gBACrB,KAAK,WAAW,CAAC,CAAC;oBACd,GAAG,GAAG,IAAI,4BAAa,CAAC,GAAG,CAAC,CAAC;oBAC7B,MAAM;iBACT;gBACD,KAAK,QAAQ,CAAC,CAAC;oBACX,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;oBAClB,MAAM;iBACT;gBACD;oBACI,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,yBAAyB,IAAI,GAAG,CAAC,CAAC;aAChG;YACD,OAAO,GAAG,CAAC;QACf,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,EAAE,iBAAiB,EAAE,iBAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;QACrD,MAAM,YAAY,GAAG,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC;QAE3E;;WAEG;QACH,MAAM,OAAO,GAAG,KAAK,EAAE,MAAgB,EAAE,KAAU,EAAE,EAAE;YACnD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YACpC,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,cAAc,GAAG,aAAa,EAAE;gBAC9D,8EAA8E;gBAC9E,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;oBACpD,gGAAgG;oBAChG,qCAAqC;oBACrC,uBAAuB;oBACvB,4CAA4C;oBAC5C,iCAAiC;oBACjC,0CAA0C;oBAC1C,wDAAwD;oBACxD,yGAAyG;oBACzG,qDAAqD;oBACrD,uEAAuE;oBACvE,GAAG;oBACH,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;wBAC3B,wGAAwG;wBACxG,kCAAkC;wBAClC,OAAO,CAAC,IAAI,iBAAG,EAAE,EAAE,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAAK,IAAI,EAAG,CAAC;qBAC1G;yBACI;wBACD,4BAA4B;wBAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;wBAC3E,IAAI,MAAM,EAAE;4BACR,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;yBAC9C;6BACI;4BACD,+EAA+E;4BAC/E,OAAO,CAAC,IAAI,iBAAG,EAAE,EAAE,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAK,IAAI,EAAG,CAAC;yBAChF;qBACJ;oBACD,OAAO,OAAO,CAAC;gBACnB,CAAC,EAAE,EAA2D,CAAC,CAAC;gBAEhE,cAAc;gBACd,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;gBAC5C,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;gBACjB,KAAK,CAAC,YAAY,EAAE,CAAC;gBAErB,qBAAqB;aAGxB;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;gBACtB,iDAAiD;aAEpD;QACL,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,KAAK,EAAE,MAAgB,EAAE,EAAE;YAC5C,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,aAAa,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,QAAQ,KAAK,GAAG,EAAE;gBAClB,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;aACtD;YACD,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,IAAI,GAAG,GAAG,EAAyB,CAAC;YACpC,IAAI,aAAa,GAAG,KAAK,CAAC;YAC1B,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;gBAC3B,IAAI,CAAC,CAAC;gBACN,IAAI,CAAC,aAAa,EAAE;oBAChB,aAAa,GAAG,IAAI,CAAC;oBACrB,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;iBACpD;qBACI,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;iBACvD;gBACD,GAAG,GAAG,EAAE,CAAC;gBACT,IAAI,CAAC,EAAE;oBAAE,MAAM,CAAC,CAAC;iBAAE;YACvB,CAAC,CAAC;YACF,MAAM,QAAQ,GAAG,EAAE,CAAC;YACpB,OAAO,IAAI,EAAE;gBACT,MAAM,aAAa,EAAE,CAAC;gBACtB,MAAM,QAAQ,GAAG,MAAM,UAAU,EAAE,CAAC,CAAC,sBAAsB;gBAC3D,MAAM,aAAa,EAAE,CAAC;gBACtB,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;gBACxB,MAAM,aAAa,EAAE,CAAC;gBACtB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;gBAC1C,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;gBACtB,UAAU,EAAE,CAAC;gBACb,IAAI,CAAC,QAAQ,EAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;oBACnC,yEAAyE;oBACzE,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;oBAE7B,IAAI,IAAI,KAAK,QAAQ,EAAE;wBACnB,4BAA4B;wBAC5B,MAAM,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;qBAC9C;yBACI;wBACD,MAAM,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;qBAC7C;iBACJ;gBAED,8DAA8D;gBAC9D,MAAM,aAAa,EAAE,CAAC;gBACtB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,QAAQ,KAAK,GAAG,EAAE;oBAClB,6BAA6B;oBAC7B,KAAK,CAAC,KAAK,EAAE,CAAC;oBACd,MAAM;iBACT;gBACD,mBAAmB;gBACnB,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;aAC3B;YACD,MAAM,YAAY,GAAG,UAAU,KAAK,CAAC,IAAI,OAAO,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC;YACzE,IAAI,YAAY,EAAE;gBACd,sDAAsD;gBACtD,wDAAwD;gBACxD,yDAAyD;gBACzD,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;aACvD;YACD,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7B,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,KAAK,EAAE,MAAgB,EAAE,EAAE;YAC3C,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,aAAa,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,QAAQ,KAAK,GAAG,EAAE;gBAClB,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;aACtD;YACD,IAAI,aAAa,GAAG,KAAK,CAAC;YAC1B,IAAI,GAAG,GAAG,EAAW,CAAC;YACtB,IAAI,OAAO,GAAG,EAAyB,CAAC;YACxC,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;gBAC1B,IAAI,CAAC,CAAC;gBACN,IAAI,CAAC,aAAa,EAAE;oBAChB,cAAc;oBACd,aAAa,GAAG,IAAI,CAAC;oBACrB,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;oBACjD,GAAG,GAAG,IAAI,CAAC,CAAC,KAAK;iBACpB;qBACI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;oBACtC,gBAAgB;oBAChB,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;oBACxD,OAAO,GAAG,EAAE,CAAC;iBAChB;gBACD,IAAI,CAAC,EAAE;oBAAE,MAAM,CAAC,CAAC;iBAAE;YACvB,CAAC,CAAC;YACF,MAAM,SAAS,GAAG,CAAC,KAAU,EAAE,KAAa,EAAE,EAAE;gBAC5C,IAAI,aAAa,EAAE;oBACf,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;iBAC1B;qBACI;oBACD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACnB;YACL,CAAC,CAAC;YAEF,MAAM,QAAQ,GAAG,EAAE,CAAC;YACpB,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,OAAO,IAAI,EAAE;gBACT,MAAM,aAAa,EAAE,CAAC;gBACtB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;gBAC1C,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACxB,IAAI,CAAC,QAAQ,EAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;oBACnC,yEAAyE;oBACzE,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,uBAAuB;oBAEpD,IAAI,IAAI,KAAK,QAAQ,EAAE;wBACnB,4BAA4B;wBAC5B,MAAM,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;qBAC3C;yBACI;wBACD,MAAM,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;qBAC1C;iBACJ;gBAED,6DAA6D;gBAC7D,MAAM,aAAa,EAAE,CAAC;gBACtB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,QAAQ,KAAK,GAAG,EAAE;oBAClB,4BAA4B;oBAC5B,KAAK,CAAC,KAAK,EAAE,CAAC;oBACd,MAAM;iBACT;gBACD,mBAAmB;gBACnB,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;gBACxB,KAAK,EAAE,CAAC;aACX;YAED,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YAC5B,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;YACrB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;YAC1C,IAAI,CAAC,QAAQ,EAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACnC,+CAA+C;gBAC/C,MAAM,MAAM,GAAG,uBAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClC,IAAI,IAAI,KAAK,QAAQ,EAAE;oBACnB,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;iBAC9B;qBACI;oBACD,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;iBAC7B;aACJ;iBACI;gBACD,eAAe;gBACf,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;aACjD;QACL,CAAC,CAAC;QACF,OAAO,KAAK,EAAE,CAAC;IACnB,CAAC;IAGD;;;;OAIG;IACH,SAAS,CAAC,IAAY,EAAE,MAAqB;QACzC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YAC/B,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;SACxD;QACD,IAAI,MAAM,KAAK,IAAI,EAAE;YACjB,uCAAuC;YACvC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YACxD,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,OAAO;SACV;QACD,iCAAiC;QACjC,MAAM,UAAU,GAAG,IAAI,+BAAgB,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACtD,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;SAC5B;aACI;YACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;YACjD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACxB,MAAM,EAAE,GAAG,uBAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,uBAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC3E,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,EAAE;oBAAE,OAAO,CAAC,CAAC;iBAAE;gBAC1C,OAAO,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,IAAY;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACtF,CAAC;IAED;;OAEG;IACH,UAAU;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAE,CAAC;IACjH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,cAAc,CAAC,IAAY,EAAE,KAAU,EAAE,UAKjC,EAAE,OAAO,EAAE,KAAK,EAAE;QAEtB,IAAI,MAAM,GAAuB,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,uBAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACrB,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAC/B,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACR,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;gBACrC,oEAAoE;gBAChE,MAAM,YAAY,GAAG,uBAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC1D,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC3E,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBACzE,OAAO,MAAM,CAAC,EAAE,CAAC;aACpB;YAED,sEAAsE;YACtE,MAAM,SAAS,GAAG,uBAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;YACnE,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,KAAU,EAAE,SAA+B,EAAsB,EAAE;gBAC5F,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;oBACxB,kBAAkB;oBAClB,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;iBAC/C;qBACI,IAAI,KAAK,KAAK,IAAI,EAAE;oBACrB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,qDAAqD;iBAC7E;gBACD,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE;oBAC5D,gDAAgD;oBAChD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;wBAC7C,wDAAwD;wBACxD,6DAA6D;wBAC7D,uCAAuC;wBACvC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;qBACvB;oBACD,IAAI,MAAM,CAAC;oBACX,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;wBAChC,MAAM,SAAS,GAAG,uBAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;wBACxD,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;wBACnC,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC1D,OAAO,MAAM,CAAC,EAAE,CAAC;oBACrB,CAAC,CAAC,CAAC;oBACH,OAAO,MAAM,CAAC;iBACjB;qBACI;oBACD,MAAM,SAAS,GAAG,uBAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBACnD,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC9B,OAAO,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3D;YACL,CAAC,CAAC;YACF,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YACvC,OAAO,MAAM,CAAC,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AAvoED,0BAuoEC"} \ No newline at end of file diff --git a/dist/cjs/storage/indexes.js.map b/dist/cjs/storage/indexes.js.map index dd5da85..61ab7b3 100644 --- a/dist/cjs/storage/indexes.js.map +++ b/dist/cjs/storage/indexes.js.map @@ -1 +1 @@ -{"version":3,"file":"indexes.js","sourceRoot":"","sources":["../ts/storage/indexes.ts"],"names":[],"mappings":";;;AAAA,+CAAiE;AAAxD,2GAAA,WAAW,OAAA"} \ No newline at end of file +{"version":3,"file":"indexes.js","sourceRoot":"","sources":["../../../src/storage/indexes.ts"],"names":[],"mappings":";;;AAAA,+CAAiE;AAAxD,2GAAA,WAAW,OAAA"} \ No newline at end of file diff --git a/dist/cjs/storage/mssql/index.js.map b/dist/cjs/storage/mssql/index.js.map index 9837d1b..e848b53 100644 --- a/dist/cjs/storage/mssql/index.js.map +++ b/dist/cjs/storage/mssql/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../ts/storage/mssql/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/storage/mssql/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/storage/sqlite/index.js.map b/dist/cjs/storage/sqlite/index.js.map index 4ad570b..596faca 100644 --- a/dist/cjs/storage/sqlite/index.js.map +++ b/dist/cjs/storage/sqlite/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../ts/storage/sqlite/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/storage/sqlite/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/storage/storage-custom.js b/dist/cjs/storage/storage-custom.js deleted file mode 100644 index f5324d3..0000000 --- a/dist/cjs/storage/storage-custom.js +++ /dev/null @@ -1,1217 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CustomStorage = exports.CustomStorageNodeInfo = exports.CustomStorageNodeAddress = exports.CustomStorageSettings = exports.CustomStorageTransaction = exports.ICustomStorageNode = exports.ICustomStorageNodeMetaData = exports.CustomStorageHelpers = void 0; -const acebase_core_1 = require("acebase-core"); -const { compareValues } = acebase_core_1.Utils; -const node_info_1 = require("../node-info"); -const node_lock_1 = require("../node-lock"); -const node_value_types_1 = require("../node-value-types"); -const node_errors_1 = require("../node-errors"); -const index_1 = require("./index"); -const helpers_1 = require("./custom/helpers"); -const node_address_1 = require("../node-address"); -var helpers_2 = require("./custom/helpers"); -Object.defineProperty(exports, "CustomStorageHelpers", { enumerable: true, get: function () { return helpers_2.CustomStorageHelpers; } }); -/** Interface for metadata being stored for nodes */ -class ICustomStorageNodeMetaData { - constructor() { - /** cuid (time sortable revision id). Nodes stored in the same operation share this id */ - this.revision = ''; - /** Number of revisions, starting with 1. Resets to 1 after deletion and recreation */ - this.revision_nr = 0; - /** Creation date/time in ms since epoch UTC */ - this.created = 0; - /** Last modification date/time in ms since epoch UTC */ - this.modified = 0; - /** Type of the node's value. 1=object, 2=array, 3=number, 4=boolean, 5=string, 6=date, 7=reserved, 8=binary, 9=reference */ - this.type = 0; - } -} -exports.ICustomStorageNodeMetaData = ICustomStorageNodeMetaData; -/** Interface for metadata combined with a stored value */ -class ICustomStorageNode extends ICustomStorageNodeMetaData { - constructor() { - super(); - /** only Object, Array, large string and binary values. */ - this.value = null; - } -} -exports.ICustomStorageNode = ICustomStorageNode; -/** Enables get/set/remove operations to be wrapped in transactions to improve performance and reliability. */ -class CustomStorageTransaction { - /** - * @param target Which path the transaction is taking place on, and whether it is a read or read/write lock. If your storage backend does not support transactions, is synchronous, or if you are able to lock resources based on path: use storage.nodeLocker to ensure threadsafe transactions - */ - constructor(target) { - this.production = false; // dev mode by default - this.target = { - get originalPath() { return target.path; }, - path: target.path, - get write() { return target.write; }, - }; - this.id = acebase_core_1.ID.generate(); - } - /** - * Returns the number of children stored in their own records. This implementation uses `childrenOf` to count, override if storage supports a quicker way. - * Eg: For SQL databases, you can implement this with a single query like `SELECT count(*) FROM nodes WHERE ${CustomStorageHelpers.ChildPathsSql(path)}` - * @param path - * @returns Returns a promise that resolves with the number of children - */ - async getChildCount(path) { - let childCount = 0; - await this.childrenOf(path, { metadata: false, value: false }, () => { childCount++; return false; }); - return childCount; - } - /** - * NOT USED YET - * Default implementation of getMultiple that executes .get for each given path. Override for custom logic - * @param paths - * @returns Returns promise with a Map of paths to nodes - */ - async getMultiple(paths) { - const map = new Map(); - await Promise.all(paths.map(path => this.get(path).then(val => map.set(path, val)))); - return map; - } - /** - * NOT USED YET - * Default implementation of setMultiple that executes .set for each given path. Override for custom logic - * @param nodes - */ - async setMultiple(nodes) { - await Promise.all(nodes.map(({ path, node }) => this.set(path, node))); - } - /** - * Default implementation of removeMultiple that executes .remove for each given path. Override for custom logic - * @param paths - */ - async removeMultiple(paths) { - await Promise.all(paths.map(path => this.remove(path))); - } - /** - * @returns {Promise} - */ - async commit() { throw new Error(`CustomStorageTransaction.rollback must be overridden by subclass`); } - /** - * Moves the transaction path to the parent node. If node locking is used, it will request a new lock - * Used internally, must not be overridden unless custom locking mechanism is required - * @param targetPath - */ - async moveToParentPath(targetPath) { - const currentPath = (this._lock && this._lock.path) || this.target.path; - if (currentPath === targetPath) { - return targetPath; // Already on the right path - } - const pathInfo = helpers_1.CustomStorageHelpers.PathInfo.get(targetPath); - if (pathInfo.isParentOf(currentPath)) { - if (this._lock) { - this._lock = await this._lock.moveToParent(); - } - } - else { - throw new Error(`Locking issue. Locked path "${this._lock.path}" is not a child/descendant of "${targetPath}"`); - } - this.target.path = targetPath; - return targetPath; - } -} -exports.CustomStorageTransaction = CustomStorageTransaction; -/** - * Allows data to be stored in a custom storage backend of your choice! Simply provide a couple of functions - * to get, set and remove data and you're done. - */ -class CustomStorageSettings extends index_1.StorageSettings { - constructor(settings) { - super(settings); - /** - * Whether default node locking should be used. Set to false if your storage backend disallows multiple simultanious write transactions (eg IndexedDB). Set to true if your storage backend does not support transactions (eg LocalStorage) or allows multiple simultanious write transactions (eg AceBase binary). - * @default true - */ - this.locking = true; - /** - * If default node locking is used, timeout setting for read and write locks in seconds. Operations taking longer than this will be aborted. Default is 120 seconds. - * @default 120 - */ - this.lockTimeout = 120; - if (typeof settings !== 'object') { - throw new Error('settings missing'); - } - if (typeof settings.ready !== 'function') { - throw new Error(`ready must be a function`); - } - if (typeof settings.getTransaction !== 'function') { - throw new Error(`getTransaction must be a function`); - } - this.name = settings.name; - // this.info = `${this.name || 'CustomStorage'} realtime database`; - this.locking = settings.locking !== false; - if (this.locking) { - this.lockTimeout = typeof settings.lockTimeout === 'number' ? settings.lockTimeout : 120; - } - this.ready = settings.ready; - // Hijack getTransaction to add locking - const useLocking = this.locking; - const nodeLocker = useLocking ? new node_lock_1.NodeLocker(console, this.lockTimeout) : null; - this.getTransaction = async ({ path, write }) => { - // console.log(`${write ? 'WRITE' : 'READ'} transaction requested for path "${path}"`) - const transaction = await settings.getTransaction({ path, write }); - console.assert(typeof transaction.id === 'string', `transaction id not set`); - // console.log(`Got transaction ${transaction.id} for ${write ? 'WRITE' : 'READ'} on path "${path}"`); - // Hijack rollback and commit - const rollback = transaction.rollback; - const commit = transaction.commit; - transaction.commit = async () => { - // console.log(`COMMIT ${transaction.id} for ${write ? 'WRITE' : 'READ'} on path "${path}"`); - const ret = await commit.call(transaction); - // console.log(`COMMIT DONE ${transaction.id} for ${write ? 'WRITE' : 'READ'} on path "${path}"`); - if (useLocking) { - await transaction._lock.release('commit'); - } - return ret; - }; - transaction.rollback = async (reason) => { - // const reasonText = reason instanceof Error ? reason.message : reason.toString(); - // console.error(`ROLLBACK ${transaction.id} for ${write ? 'WRITE' : 'READ'} on path "${path}":`, reason); - const ret = await rollback.call(transaction, reason); - // console.log(`ROLLBACK DONE ${transaction.id} for ${write ? 'WRITE' : 'READ'} on path "${path}"`); - if (useLocking) { - await transaction._lock.release('rollback'); - } - return ret; - }; - if (useLocking) { - // Lock the path before continuing - transaction._lock = await nodeLocker.lock(path, transaction.id, write, `${this.name}::getTransaction`); - } - return transaction; - }; - } -} -exports.CustomStorageSettings = CustomStorageSettings; -class CustomStorageNodeAddress { - constructor(containerPath) { - this.path = containerPath; - } -} -exports.CustomStorageNodeAddress = CustomStorageNodeAddress; -class CustomStorageNodeInfo extends node_info_1.NodeInfo { - constructor(info) { - super(info); - this.revision = info.revision; - this.revision_nr = info.revision_nr; - this.created = info.created; - this.modified = info.modified; - } -} -exports.CustomStorageNodeInfo = CustomStorageNodeInfo; -class CustomStorage extends index_1.Storage { - constructor(dbname, settings) { - super(dbname, settings); - this._customImplementation = settings; - this._init(); - } - async _init() { - this.debug.log(`Database "${this.name}" details:`.colorize(acebase_core_1.ColorStyle.dim)); - this.debug.log(`- Type: CustomStorage`.colorize(acebase_core_1.ColorStyle.dim)); - this.debug.log(`- Path: ${this.settings.path}`.colorize(acebase_core_1.ColorStyle.dim)); - this.debug.log(`- Max inline value size: ${this.settings.maxInlineValueSize}`.colorize(acebase_core_1.ColorStyle.dim)); - this.debug.log(`- Autoremove undefined props: ${this.settings.removeVoidProperties}`.colorize(acebase_core_1.ColorStyle.dim)); - // Create root node if it's not there yet - await this._customImplementation.ready(); - const transaction = await this._customImplementation.getTransaction({ path: '', write: true }); - const info = await this.getNodeInfo('', { transaction }); - if (!info.exists) { - await this._writeNode('', {}, { transaction }); - } - await transaction.commit(); - if (this.indexes.supported) { - await this.indexes.load(); - } - this.emit('ready'); - } - _storeNode(path, node, options) { - // serialize the value to store - const getTypedChildValue = (val) => { - if (val === null) { - throw new Error(`Not allowed to store null values. remove the property`); - } - else if (['string', 'number', 'boolean'].includes(typeof val)) { - return val; - } - else if (val instanceof Date) { - return { type: node_value_types_1.VALUE_TYPES.DATETIME, value: val.getTime() }; - } - else if (val instanceof acebase_core_1.PathReference) { - return { type: node_value_types_1.VALUE_TYPES.REFERENCE, value: val.path }; - } - else if (val instanceof ArrayBuffer) { - return { type: node_value_types_1.VALUE_TYPES.BINARY, value: acebase_core_1.ascii85.encode(val) }; - } - else if (typeof val === 'object') { - console.assert(Object.keys(val).length === 0, 'child object stored in parent can only be empty'); - return val; - } - }; - const unprocessed = `Caller should have pre-processed the value by converting it to a string`; - if (node.type === node_value_types_1.VALUE_TYPES.ARRAY && node.value instanceof Array) { - // Convert array to object with numeric properties - // NOTE: caller should have done this already - console.warn(`Unprocessed array. ${unprocessed}`); - const obj = {}; - for (let i = 0; i < node.value.length; i++) { - obj[i] = node.value[i]; - } - node.value = obj; - } - if (node.type === node_value_types_1.VALUE_TYPES.BINARY && typeof node.value !== 'string') { - console.warn(`Unprocessed binary value. ${unprocessed}`); - node.value = acebase_core_1.ascii85.encode(node.value); - } - if (node.type === node_value_types_1.VALUE_TYPES.REFERENCE && node.value instanceof acebase_core_1.PathReference) { - console.warn(`Unprocessed path reference. ${unprocessed}`); - node.value = node.value.path; - } - if ([node_value_types_1.VALUE_TYPES.OBJECT, node_value_types_1.VALUE_TYPES.ARRAY].includes(node.type)) { - const original = node.value; - node.value = {}; - // If original is an array, it'll automatically be converted to an object now - Object.keys(original).forEach(key => { - node.value[key] = getTypedChildValue(original[key]); - }); - } - return options.transaction.set(path, node); - } - _processReadNodeValue(node) { - const getTypedChildValue = (val) => { - // Typed value stored in parent record - if (val.type === node_value_types_1.VALUE_TYPES.BINARY) { - // binary stored in a parent record as a string - return acebase_core_1.ascii85.decode(val.value); - } - else if (val.type === node_value_types_1.VALUE_TYPES.DATETIME) { - // Date value stored as number - return new Date(val.value); - } - else if (val.type === node_value_types_1.VALUE_TYPES.REFERENCE) { - // Path reference stored as string - return new acebase_core_1.PathReference(val.value); - } - else { - throw new Error(`Unhandled child value type ${val.type}`); - } - }; - switch (node.type) { - case node_value_types_1.VALUE_TYPES.ARRAY: - case node_value_types_1.VALUE_TYPES.OBJECT: { - // check if any value needs to be converted - // NOTE: Arrays are stored with numeric properties - const obj = node.value; - Object.keys(obj).forEach(key => { - const item = obj[key]; - if (typeof item === 'object' && 'type' in item) { - obj[key] = getTypedChildValue(item); - } - }); - node.value = obj; - break; - } - case node_value_types_1.VALUE_TYPES.BINARY: { - node.value = acebase_core_1.ascii85.decode(node.value); - break; - } - case node_value_types_1.VALUE_TYPES.REFERENCE: { - node.value = new acebase_core_1.PathReference(node.value); - break; - } - case node_value_types_1.VALUE_TYPES.STRING: { - // No action needed - // node.value = node.value; - break; - } - default: - throw new Error(`Invalid standalone record value type`); // should never happen - } - } - async _readNode(path, options) { - // deserialize a stored value (always an object with "type", "value", "revision", "revision_nr", "created", "modified") - const node = await options.transaction.get(path); - if (node === null) { - return null; - } - if (typeof node !== 'object') { - throw new Error(`CustomStorageTransaction.get must return an ICustomStorageNode object. Use JSON.parse if your set function stored it as a string`); - } - this._processReadNodeValue(node); - return node; - } - _getTypeFromStoredValue(val) { - let type; - if (typeof val === 'string') { - type = node_value_types_1.VALUE_TYPES.STRING; - } - else if (typeof val === 'number') { - type = node_value_types_1.VALUE_TYPES.NUMBER; - } - else if (typeof val === 'boolean') { - type = node_value_types_1.VALUE_TYPES.BOOLEAN; - } - else if (val instanceof Array) { - type = node_value_types_1.VALUE_TYPES.ARRAY; - } - else if (typeof val === 'object') { - if ('type' in val) { - const serialized = val; - type = serialized.type; - val = serialized.value; - if (type === node_value_types_1.VALUE_TYPES.DATETIME) { - val = new Date(val); - } - else if (type === node_value_types_1.VALUE_TYPES.REFERENCE) { - val = new acebase_core_1.PathReference(val); - } - } - else { - type = node_value_types_1.VALUE_TYPES.OBJECT; - } - } - else { - throw new Error(`Unknown value type`); - } - return { type, value: val }; - } - /** - * Creates or updates a node in its own record. DOES NOT CHECK if path exists in parent node, or if parent paths exist! Calling code needs to do this - */ - async _writeNode(path, value, options) { - if (!options.merge && this.valueFitsInline(value) && path !== '') { - throw new Error(`invalid value to store in its own node`); - } - else if (path === '' && (typeof value !== 'object' || value instanceof Array)) { - throw new Error(`Invalid root node value. Must be an object`); - } - // Check if the value for this node changed, to prevent recursive calls to - // perform unnecessary writes that do not change any data - if (typeof options.diff === 'undefined' && typeof options.currentValue !== 'undefined') { - const diff = compareValues(options.currentValue, value); - if (options.merge && typeof diff === 'object') { - diff.removed = diff.removed.filter(key => value[key] === null); // Only keep "removed" items that are really being removed by setting to null - } - options.diff = diff; - } - if (options.diff === 'identical') { - return; // Done! - } - const transaction = options.transaction; - // Get info about current node at path - const currentRow = options.currentValue === null - ? null // No need to load info if currentValue is null (we already know it doesn't exist) - : await this._readNode(path, { transaction }); - if (options.merge && currentRow) { - if (currentRow.type === node_value_types_1.VALUE_TYPES.ARRAY && !(value instanceof Array) && typeof value === 'object' && Object.keys(value).some(key => isNaN(parseInt(key)))) { - throw new Error(`Cannot merge existing array of path "${path}" with an object`); - } - if (value instanceof Array && currentRow.type !== node_value_types_1.VALUE_TYPES.ARRAY) { - throw new Error(`Cannot merge existing object of path "${path}" with an array`); - } - } - const revision = options.revision || acebase_core_1.ID.generate(); - const mainNode = { - type: currentRow && currentRow.type === node_value_types_1.VALUE_TYPES.ARRAY ? node_value_types_1.VALUE_TYPES.ARRAY : node_value_types_1.VALUE_TYPES.OBJECT, - value: {}, - }; - const childNodeValues = {}; - if (value instanceof Array) { - mainNode.type = node_value_types_1.VALUE_TYPES.ARRAY; - // Convert array to object with numeric properties - const obj = {}; - for (let i = 0; i < value.length; i++) { - obj[i] = value[i]; - } - value = obj; - } - else if (value instanceof acebase_core_1.PathReference) { - mainNode.type = node_value_types_1.VALUE_TYPES.REFERENCE; - mainNode.value = value.path; - } - else if (value instanceof ArrayBuffer) { - mainNode.type = node_value_types_1.VALUE_TYPES.BINARY; - mainNode.value = acebase_core_1.ascii85.encode(value); - } - else if (typeof value === 'string') { - mainNode.type = node_value_types_1.VALUE_TYPES.STRING; - mainNode.value = value; - } - const currentIsObjectOrArray = currentRow ? [node_value_types_1.VALUE_TYPES.OBJECT, node_value_types_1.VALUE_TYPES.ARRAY].includes(currentRow.type) : false; - const newIsObjectOrArray = [node_value_types_1.VALUE_TYPES.OBJECT, node_value_types_1.VALUE_TYPES.ARRAY].includes(mainNode.type); - const children = { - current: [], - new: [], - }; - let currentObject = null; - if (currentIsObjectOrArray) { - currentObject = currentRow.value; - children.current = Object.keys(currentObject); - // if (currentObject instanceof Array) { // ALWAYS FALSE BECAUSE THEY ARE STORED AS OBJECTS WITH NUMERIC PROPERTIES - // // Convert array to object with numeric properties - // const obj = {}; - // for (let i = 0; i < value.length; i++) { - // obj[i] = value[i]; - // } - // currentObject = obj; - // } - if (newIsObjectOrArray) { - mainNode.value = currentObject; - } - } - if (newIsObjectOrArray) { - // Object or array. Determine which properties can be stored in the main node, - // and which should be stored in their own nodes - if (!options.merge) { - // Check which keys are present in the old object, but not in newly given object - Object.keys(mainNode.value).forEach(key => { - if (!(key in value)) { - // Property that was in old object, is not in new value -> set to null to mark deletion! - value[key] = null; - } - }); - } - Object.keys(value).forEach(key => { - const val = value[key]; - delete mainNode.value[key]; // key is being overwritten, moved from inline to dedicated, or deleted. TODO: check if this needs to be done SQLite & MSSQL implementations too - if (val === null) { // || typeof val === 'undefined' - // This key is being removed - return; - } - else if (typeof val === 'undefined') { - if (this.settings.removeVoidProperties === true) { - delete value[key]; // Kill the property in the passed object as well, to prevent differences in stored and working values - return; - } - else { - throw new Error(`Property "${key}" has invalid value. Cannot store undefined values. Set removeVoidProperties option to true to automatically remove undefined properties`); - } - } - // Where to store this value? - if (this.valueFitsInline(val)) { - // Store in main node - mainNode.value[key] = val; - } - else { - // Store in child node - childNodeValues[key] = val; - } - }); - } - // Insert or update node - const isArray = mainNode.type === node_value_types_1.VALUE_TYPES.ARRAY; - if (currentRow) { - // update - this.debug.log(`Node "/${path}" is being ${options.merge ? 'updated' : 'overwritten'}`.colorize(acebase_core_1.ColorStyle.cyan)); - // If existing is an array or object, we have to find out which children are affected - if (currentIsObjectOrArray || newIsObjectOrArray) { - // Get current child nodes in dedicated child records - const pathInfo = acebase_core_1.PathInfo.get(path); - const keys = []; - let checkExecuted = false; - const includeChildCheck = (childPath) => { - checkExecuted = true; - if (!transaction.production && !pathInfo.isParentOf(childPath)) { - // Double check failed - throw new Error(`"${childPath}" is not a child of "${path}" - childrenOf must only check and return paths that are children`); - } - return true; - }; - const addChildPath = (childPath) => { - if (!checkExecuted) { - throw new Error(`${this._customImplementation.info} childrenOf did not call checkCallback before addCallback`); - } - const key = acebase_core_1.PathInfo.get(childPath).key; - keys.push(key.toString()); // .toString to make sure all keys are compared as strings - return true; // Keep streaming - }; - await transaction.childrenOf(path, { metadata: false, value: false }, includeChildCheck, addChildPath); - children.current = children.current.concat(keys); - if (newIsObjectOrArray) { - if (options && options.merge) { - children.new = children.current.slice(); - } - Object.keys(value).forEach(key => { - if (!children.new.includes(key)) { - children.new.push(key); - } - }); - } - const changes = { - insert: children.new.filter(key => !children.current.includes(key)), - update: [], - delete: options && options.merge ? Object.keys(value).filter(key => value[key] === null) : children.current.filter(key => !children.new.includes(key)), - }; - changes.update = children.new.filter(key => children.current.includes(key) && !changes.delete.includes(key)); - if (isArray && options.merge && (changes.insert.length > 0 || changes.delete.length > 0)) { - // deletes or inserts of individual array entries are not allowed, unless it is the last entry: - // - deletes would cause the paths of following items to change, which is unwanted because the actual data does not change, - // eg: removing index 3 on array of size 10 causes entries with index 4 to 9 to 'move' to indexes 3 to 8 - // - inserts might introduce gaps in indexes, - // eg: adding to index 7 on an array of size 3 causes entries with indexes 3 to 6 to go 'missing' - const newArrayKeys = changes.update.concat(changes.insert); - const isExhaustive = newArrayKeys.every((k, index, arr) => arr.includes(index.toString())); - if (!isExhaustive) { - throw new Error(`Elements cannot be inserted beyond, or removed before the end of an array. Rewrite the whole array at path "${path}" or change your schema to use an object collection instead`); - } - } - // (over)write all child nodes that must be stored in their own record - const writePromises = Object.keys(childNodeValues).map(key => { - const keyOrIndex = isArray ? parseInt(key) : key; - const childDiff = typeof options.diff === 'object' ? options.diff.forChild(keyOrIndex) : undefined; - if (childDiff === 'identical') { - // console.warn(`Skipping _writeNode recursion for child "${keyOrIndex}"`); - return; // Skip - } - const childPath = pathInfo.childPath(keyOrIndex); // PathInfo.getChildPath(path, key); - const childValue = childNodeValues[keyOrIndex]; - // Pass current child value to _writeNode - const currentChildValue = typeof options.currentValue === 'undefined' // Fixing issue #20 - ? undefined - : options.currentValue !== null && typeof options.currentValue === 'object' && keyOrIndex in options.currentValue - ? options.currentValue[keyOrIndex] - : null; - return this._writeNode(childPath, childValue, { transaction, revision, merge: false, currentValue: currentChildValue, diff: childDiff }); - }); - // Delete all child nodes that were stored in their own record, but are being removed - // Also delete nodes that are being moved from a dedicated record to inline - const movingNodes = newIsObjectOrArray ? keys.filter(key => key in mainNode.value) : []; // moving from dedicated to inline value - const deleteDedicatedKeys = changes.delete.concat(movingNodes); - const deletePromises = deleteDedicatedKeys.map(key => { - const keyOrIndex = isArray ? parseInt(key) : key; - const childPath = pathInfo.childPath(keyOrIndex); - return this._deleteNode(childPath, { transaction }); - }); - const promises = writePromises.concat(deletePromises); - await Promise.all(promises); - } - // Update main node - // TODO: Check if revision should change? - const p = this._storeNode(path, { - type: mainNode.type, - value: mainNode.value, - revision: currentRow.revision, - revision_nr: currentRow.revision_nr + 1, - created: currentRow.created, - modified: Date.now(), - }, { - transaction, - }); - if (p instanceof Promise) { - return await p; - } - } - else { - // Current node does not exist, create it and any child nodes - // write all child nodes that must be stored in their own record - this.debug.log(`Node "/${path}" is being created`.colorize(acebase_core_1.ColorStyle.cyan)); - if (isArray) { - // Check if the array is "intact" (all entries have an index from 0 to the end with no gaps) - const arrayKeys = Object.keys(mainNode.value).concat(Object.keys(childNodeValues)); - const isExhaustive = arrayKeys.every((k, index, arr) => arr.includes(index.toString())); - if (!isExhaustive) { - throw new Error(`Cannot store arrays with missing entries`); - } - } - const promises = Object.keys(childNodeValues).map(key => { - const keyOrIndex = isArray ? parseInt(key) : key; - const childPath = acebase_core_1.PathInfo.getChildPath(path, keyOrIndex); - const childValue = childNodeValues[keyOrIndex]; - return this._writeNode(childPath, childValue, { transaction, revision, merge: false, currentValue: null }); - }); - // Create current node - const p = this._storeNode(path, { - type: mainNode.type, - value: mainNode.value, - revision, - revision_nr: 1, - created: Date.now(), - modified: Date.now(), - }, { - transaction, - }); - promises.push(p); - await Promise.all(promises); - } - } - /** - * Deletes (dedicated) node and all subnodes without checking for existence. Use with care - all removed nodes will lose their revision stats! DOES NOT REMOVE INLINE CHILD NODES! - */ - async _deleteNode(path, options) { - const pathInfo = acebase_core_1.PathInfo.get(path); - this.debug.log(`Node "/${path}" is being deleted`.colorize(acebase_core_1.ColorStyle.cyan)); - const deletePaths = [path]; - let checkExecuted = false; - const includeDescendantCheck = (descPath) => { - checkExecuted = true; - if (!transaction.production && !pathInfo.isAncestorOf(descPath)) { - // Double check failed - throw new Error(`"${descPath}" is not a descendant of "${path}" - descendantsOf must only check and return paths that are descendants`); - } - return true; - }; - const addDescendant = (descPath) => { - if (!checkExecuted) { - throw new Error(`${this._customImplementation.info} descendantsOf did not call checkCallback before addCallback`); - } - deletePaths.push(descPath); - return true; - }; - const transaction = options.transaction; - await transaction.descendantsOf(path, { metadata: false, value: false }, includeDescendantCheck, addDescendant); - this.debug.log(`Nodes ${deletePaths.map(p => `"/${p}"`).join(',')} are being deleted`.colorize(acebase_core_1.ColorStyle.cyan)); - return transaction.removeMultiple(deletePaths); - } - /** - * Enumerates all children of a given Node for reflection purposes - */ - getChildren(path, options = {}) { - let callback; - const generator = { - /** - * - * @param valueCallback callback function to run for each child. Return false to stop iterating - * @returns returns a promise that resolves with a boolean indicating if all children have been enumerated, or was canceled by the valueCallback function - */ - next(valueCallback) { - callback = valueCallback; - return start(); - }, - }; - const start = async () => { - const transaction = options.transaction || await this._customImplementation.getTransaction({ path, write: false }); - try { - let canceled = false; - await (async () => { - const node = await this._readNode(path, { transaction }); - if (!node) { - throw new node_errors_1.NodeNotFoundError(`Node "/${path}" does not exist`); - } - if (![node_value_types_1.VALUE_TYPES.OBJECT, node_value_types_1.VALUE_TYPES.ARRAY].includes(node.type)) { - // No children - return; - } - const isArray = node.type === node_value_types_1.VALUE_TYPES.ARRAY; - const value = node.value; - let keys = Object.keys(value).map(key => isArray ? parseInt(key) : key); - if (options.keyFilter) { - keys = keys.filter(key => options.keyFilter.includes(key)); - } - const pathInfo = acebase_core_1.PathInfo.get(path); - keys.length > 0 && keys.every(key => { - const child = this._getTypeFromStoredValue(value[key]); - const info = new CustomStorageNodeInfo({ - path: pathInfo.childPath(key), - key: isArray ? null : key, - index: isArray ? key : null, - type: child.type, - address: null, - exists: true, - value: child.value, - revision: node.revision, - revision_nr: node.revision_nr, - created: new Date(node.created), - modified: new Date(node.modified), - }); - canceled = callback(info) === false; - return !canceled; // stop .every loop if canceled - }); - if (canceled) { - return; - } - // Go on... get other children - let checkExecuted = false; - const includeChildCheck = (childPath) => { - checkExecuted = true; - if (!transaction.production && !pathInfo.isParentOf(childPath)) { - // Double check failed - throw new Error(`"${childPath}" is not a child of "${path}" - childrenOf must only check and return paths that are children`); - } - if (options.keyFilter) { - const key = acebase_core_1.PathInfo.get(childPath).key; - return options.keyFilter.includes(key); - } - return true; - }; - const addChildNode = (childPath, node) => { - if (!checkExecuted) { - throw new Error(`${this._customImplementation.info} childrenOf did not call checkCallback before addCallback`); - } - const key = acebase_core_1.PathInfo.get(childPath).key; - const info = new CustomStorageNodeInfo({ - path: childPath, - type: node.type, - key: isArray ? null : key, - index: isArray ? key : null, - address: new node_address_1.NodeAddress(childPath), - exists: true, - value: null, - revision: node.revision, - revision_nr: node.revision_nr, - created: new Date(node.created), - modified: new Date(node.modified), - }); - canceled = callback(info) === false; - return !canceled; - }; - await transaction.childrenOf(path, { metadata: true, value: false }, includeChildCheck, addChildNode); - })(); - if (!options.transaction) { - // transaction was created by us, commit - await transaction.commit(); - } - return canceled; - } - catch (err) { - if (!options.transaction) { - // transaction was created by us, rollback - await transaction.rollback(err); - } - throw err; - } - // }) - // .then(() => { - // lock.release(); - // return canceled; - // }) - // .catch(err => { - // lock.release(); - // throw err; - // }); - }; // start() - return generator; - } - async getNode(path, options) { - // path = path.replace(/'/g, ''); // prevent sql injection, remove single quotes - options = options || {}; - const transaction = options.transaction || await this._customImplementation.getTransaction({ path, write: false }); - // let lock; - // return this.nodeLocker.lock(path, tid, false, 'getNode') - // .then(async l => { - // lock = l; - try { - const node = await (async () => { - // Get path, path/* and path[* - const filtered = (options.include && options.include.length > 0) || (options.exclude && options.exclude.length > 0) || options.child_objects === false; - const pathInfo = acebase_core_1.PathInfo.get(path); - const targetNode = await this._readNode(path, { transaction }); - if (!targetNode) { - // Lookup parent node - if (path === '') { - return { value: null }; - } // path is root. There is no parent. - const lockPath = await transaction.moveToParentPath(pathInfo.parentPath); - console.assert(lockPath === pathInfo.parentPath, `transaction.moveToParentPath() did not move to the right parent path of "${path}"`); - const parentNode = await this._readNode(pathInfo.parentPath, { transaction }); - if (parentNode && [node_value_types_1.VALUE_TYPES.OBJECT, node_value_types_1.VALUE_TYPES.ARRAY].includes(parentNode.type) && pathInfo.key in parentNode.value) { - const childValueInfo = this._getTypeFromStoredValue(parentNode.value[pathInfo.key]); - return { - revision: parentNode.revision, - revision_nr: parentNode.revision_nr, - created: parentNode.created, - modified: parentNode.modified, - type: childValueInfo.type, - value: childValueInfo.value, - }; - } - return { value: null }; - } - const isArray = targetNode.type === node_value_types_1.VALUE_TYPES.ARRAY; - /** - * Convert include & exclude filters to PathInfo instances for easier handling - */ - const convertFilterArray = (arr) => { - const isNumber = (key) => /^[0-9]+$/.test(key); - return arr.map(path => acebase_core_1.PathInfo.get(isArray && isNumber(path) ? `[${path}]` : path)); - }; - const includeFilter = options.include ? convertFilterArray(options.include) : []; - const excludeFilter = options.exclude ? convertFilterArray(options.exclude) : []; - /** - * Apply include filters to prevent unwanted properties stored inline to be added. - * - * Removes properties that are not on the trail of any include filter, but were loaded because they are - * stored inline in the parent node. - * - * Example: - * data of `"users/someuser/posts/post1"`: `{ title: 'My first post', posted: (date), history: {} }` - * code: `db.ref('users/someuser').get({ include: ['posts/*\/title'] })` - * descPath: `"users/someuser/posts/post1"`, - * trailKeys: `["posts", "post1"]`, - * includeFilter[0]: `["posts", "*", "title"]` - * properties `posted` and `history` must be removed from the object - */ - const applyFiltersOnInlineData = (descPath, node) => { - if ([node_value_types_1.VALUE_TYPES.OBJECT, node_value_types_1.VALUE_TYPES.ARRAY].includes(node.type) && includeFilter.length > 0) { - const trailKeys = acebase_core_1.PathInfo.getPathKeys(descPath).slice(pathInfo.keys.length); - const checkPathInfo = new acebase_core_1.PathInfo(trailKeys); - const remove = []; - const includes = includeFilter.filter(info => info.isDescendantOf(checkPathInfo)); - if (includes.length > 0) { - const isArray = node.type === node_value_types_1.VALUE_TYPES.ARRAY; - remove.push(...Object.keys(node.value).map(key => isArray ? +key : key)); // Mark all at first - for (const info of includes) { - const targetProp = info.keys[trailKeys.length]; - if (typeof targetProp === 'string' && (targetProp === '*' || targetProp.startsWith('$'))) { - remove.splice(0); - break; - } - const index = remove.indexOf(targetProp); - index >= 0 && remove.splice(index, 1); - } - } - const hasIncludeOnChild = includeFilter.some(info => info.isChildOf(checkPathInfo)); - const hasExcludeOnChild = excludeFilter.some(info => info.isChildOf(checkPathInfo)); - if (hasExcludeOnChild && !hasIncludeOnChild) { - // do not remove children that are NOT in direct exclude filters (which includes them again) - const excludes = excludeFilter.filter(info => info.isChildOf(checkPathInfo)); - for (let i = 0; i < remove.length; i++) { - if (!excludes.find(info => info.equals(remove[i]))) { - remove.splice(i, 1); - i--; - } - } - } - // remove.length > 0 && this.debug.log(`Remove properties:`, remove); - for (const key of remove) { - delete node.value[key]; - } - } - }; - applyFiltersOnInlineData(path, targetNode); - let checkExecuted = false; - const includeDescendantCheck = (descPath, metadata) => { - checkExecuted = true; - if (!transaction.production && !pathInfo.isAncestorOf(descPath)) { - // Double check failed - throw new Error(`"${descPath}" is not a descendant of "${path}" - descendantsOf must only check and return paths that are descendants`); - } - if (!filtered) { - return true; - } - // Apply include & exclude filters - const descPathKeys = acebase_core_1.PathInfo.getPathKeys(descPath); - const trailKeys = descPathKeys.slice(pathInfo.keys.length); - const checkPathInfo = new acebase_core_1.PathInfo(trailKeys); - let include = (includeFilter.length > 0 - ? includeFilter.some(info => checkPathInfo.isOnTrailOf(info)) - : true) - && (excludeFilter.length > 0 - ? !excludeFilter.some(info => info.equals(checkPathInfo) || info.isAncestorOf(checkPathInfo)) - : true); - // Apply child_objects filter. If metadata is not loaded, we can only skip deeper descendants here - any child object that does get through will be ignored by addDescendant - if (include - && options.child_objects === false - && (pathInfo.isParentOf(descPath) && [node_value_types_1.VALUE_TYPES.OBJECT, node_value_types_1.VALUE_TYPES.ARRAY].includes(metadata ? metadata.type : -1) - || acebase_core_1.PathInfo.getPathKeys(descPath).length > pathInfo.pathKeys.length + 1)) { - include = false; - } - return include; - }; - const descRows = []; - const addDescendant = (descPath, node) => { - // console.warn(`Adding descendant "${descPath}"`); - if (!checkExecuted) { - throw new Error(`${this._customImplementation.info} descendantsOf did not call checkCallback before addCallback`); - } - if (options.child_objects === false && [node_value_types_1.VALUE_TYPES.OBJECT, node_value_types_1.VALUE_TYPES.ARRAY].includes(node.type)) { - // child objects are filtered out, but this one got through because includeDescendantCheck did not have access to its metadata, - // which is ok because doing that might drastically improve performance in client code. Skip it now. - return true; - } - // Apply include filters to prevent unwanted properties stored inline to be added - applyFiltersOnInlineData(descPath, node); - // Process the value - this._processReadNodeValue(node); - // Add node - const row = node; - row.path = descPath; - descRows.push(row); - return true; // Keep streaming - }; - await transaction.descendantsOf(path, { metadata: true, value: true }, includeDescendantCheck, addDescendant); - this.debug.log(`Read node "/${path}" and ${filtered ? '(filtered) ' : ''}descendants from ${descRows.length + 1} records`.colorize(acebase_core_1.ColorStyle.magenta)); - const result = targetNode; - const objectToArray = (obj) => { - // Convert object value to array - const arr = []; - Object.keys(obj).forEach(key => { - const index = parseInt(key); - arr[index] = obj[index]; - }); - return arr; - }; - if (targetNode.type === node_value_types_1.VALUE_TYPES.ARRAY) { - result.value = objectToArray(result.value); - } - if (targetNode.type === node_value_types_1.VALUE_TYPES.OBJECT || targetNode.type === node_value_types_1.VALUE_TYPES.ARRAY) { - // target node is an object or array - // merge with other found (child) nodes - const targetPathKeys = acebase_core_1.PathInfo.getPathKeys(path); - const value = targetNode.value; - for (let i = 0; i < descRows.length; i++) { - const otherNode = descRows[i]; - const pathKeys = acebase_core_1.PathInfo.getPathKeys(otherNode.path); - const trailKeys = pathKeys.slice(targetPathKeys.length); - let parent = value; - for (let j = 0; j < trailKeys.length; j++) { - console.assert(typeof parent === 'object', 'parent must be an object/array to have children!!'); - const key = trailKeys[j]; - const isLast = j === trailKeys.length - 1; - const nodeType = isLast - ? otherNode.type - : typeof trailKeys[j + 1] === 'number' - ? node_value_types_1.VALUE_TYPES.ARRAY - : node_value_types_1.VALUE_TYPES.OBJECT; - let nodeValue; - if (!isLast) { - nodeValue = nodeType === node_value_types_1.VALUE_TYPES.OBJECT ? {} : []; - } - else { - nodeValue = otherNode.value; - if (nodeType === node_value_types_1.VALUE_TYPES.ARRAY) { - nodeValue = objectToArray(nodeValue); - } - } - if (key in parent) { - // Merge with parent - const mergePossible = typeof parent[key] === typeof nodeValue && [node_value_types_1.VALUE_TYPES.OBJECT, node_value_types_1.VALUE_TYPES.ARRAY].includes(nodeType); - if (!mergePossible) { - // Ignore the value in the child record, see issue #20: "Assertion failed: Merging child values can only be done if existing and current values are both an array or object" - this.debug.error(`The value stored in node "${otherNode.path}" cannot be merged with the parent node, value will be ignored. This error should disappear once the target node value is updated. See issue #20 for more information`, { path, parent, key, nodeType, nodeValue }); - } - else { - Object.keys(nodeValue).forEach(childKey => { - if (childKey in parent[key]) { - throw new Error(`Custom storage merge error: child key "${childKey}" is in parent value already! Make sure the get/childrenOf/descendantsOf methods of the custom storage class return values that can be modified by AceBase without affecting the stored source`); - } - parent[key][childKey] = nodeValue[childKey]; - }); - } - } - else { - parent[key] = nodeValue; - } - parent = parent[key]; - } - } - } - else if (descRows.length > 0) { - throw new Error(`multiple records found for non-object value!`); - } - // Post process filters to remove any data that got through because they were - // not stored in dedicated records. This will happen with smaller values because - // they are stored inline in their parent node. - // eg: - // { number: 1, small_string: 'small string', bool: true, obj: {}, arr: [] } - // All properties of this object are stored inline, - // if exclude: ['obj'], or child_objects: false was passed, these will still - // have to be removed from the value - if (options.child_objects === false) { - Object.keys(result.value).forEach(key => { - if (typeof result.value[key] === 'object' && result.value[key].constructor === Object) { - // This can only happen if the object was empty - console.assert(Object.keys(result.value[key]).length === 0); - delete result.value[key]; - } - }); - } - if (options.include) { - // TODO: remove any unselected children that did get through - } - if (options.exclude) { - const process = (obj, keys) => { - if (typeof obj !== 'object') { - return; - } - const key = keys[0]; - if (key === '*') { - Object.keys(obj).forEach(k => { - process(obj[k], keys.slice(1)); - }); - } - else if (keys.length > 1) { - key in obj && process(obj[key], keys.slice(1)); - } - else { - delete obj[key]; - } - }; - options.exclude.forEach(path => { - const checkKeys = acebase_core_1.PathInfo.getPathKeys(path); - process(result.value, checkKeys); - }); - } - return result; - })(); - if (!options.transaction) { - // transaction was created by us, commit - await transaction.commit(); - } - return node; - } - catch (err) { - if (!options.transaction) { - // transaction was created by us, rollback - await transaction.rollback(err); - } - throw err; - } - } - async getNodeInfo(path, options = {}) { - options = options || {}; - const pathInfo = acebase_core_1.PathInfo.get(path); - const transaction = options.transaction || await this._customImplementation.getTransaction({ path, write: false }); - try { - const node = await this._readNode(path, { transaction }); - const info = new CustomStorageNodeInfo({ - path, - key: typeof pathInfo.key === 'string' ? pathInfo.key : null, - index: typeof pathInfo.key === 'number' ? pathInfo.key : null, - type: node ? node.type : 0, - exists: node !== null, - address: node ? new node_address_1.NodeAddress(path) : null, - created: node ? new Date(node.created) : null, - modified: node ? new Date(node.modified) : null, - revision: node ? node.revision : null, - revision_nr: node ? node.revision_nr : null, - }); - if (!node && path !== '') { - // Try parent node - const lockPath = await transaction.moveToParentPath(pathInfo.parentPath); - console.assert(lockPath === pathInfo.parentPath, `transaction.moveToParentPath() did not move to the right parent path of "${path}"`); - const parent = await this._readNode(pathInfo.parentPath, { transaction }); - if (parent && [node_value_types_1.VALUE_TYPES.OBJECT, node_value_types_1.VALUE_TYPES.ARRAY].includes(parent.type) && pathInfo.key in parent.value) { - // Stored in parent node - info.exists = true; - info.value = parent.value[pathInfo.key]; - info.address = null; - info.type = parent.type; - info.created = new Date(parent.created); - info.modified = new Date(parent.modified); - info.revision = parent.revision; - info.revision_nr = parent.revision_nr; - } - else { - // Parent doesn't exist, so the node we're looking for cannot exist either - info.address = null; - } - } - if (options.include_child_count) { - info.childCount = 0; - if ([node_value_types_1.VALUE_TYPES.ARRAY, node_value_types_1.VALUE_TYPES.OBJECT].includes(info.valueType) && info.address) { - // Get number of children - info.childCount = node.value ? Object.keys(node.value).length : 0; - info.childCount += await transaction.getChildCount(path); - } - } - if (!options.transaction) { - // transaction was created by us, commit - await transaction.commit(); - } - return info; - } - catch (err) { - if (!options.transaction) { - // transaction was created by us, rollback - await transaction.rollback(err); - } - throw err; - } - } - // TODO: Move to Storage base class? - async setNode(path, value, options = { suppress_events: false, context: null }) { - const pathInfo = acebase_core_1.PathInfo.get(path); - const transaction = options.transaction || await this._customImplementation.getTransaction({ path, write: true }); - try { - if (path === '') { - if (value === null || typeof value !== 'object' || value instanceof Array || value instanceof ArrayBuffer || ('buffer' in value && value.buffer instanceof ArrayBuffer)) { - throw new Error(`Invalid value for root node: ${value}`); - } - await this._writeNodeWithTracking('', value, { merge: false, transaction, suppress_events: options.suppress_events, context: options.context }); - } - else if (typeof options.assert_revision !== 'undefined') { - const info = await this.getNodeInfo(path, { transaction }); - if (info.revision !== options.assert_revision) { - throw new node_errors_1.NodeRevisionError(`revision '${info.revision}' does not match requested revision '${options.assert_revision}'`); - } - if (info.address && info.address.path === path && value !== null && !this.valueFitsInline(value)) { - // Overwrite node - await this._writeNodeWithTracking(path, value, { merge: false, transaction, suppress_events: options.suppress_events, context: options.context }); - } - else { - // Update parent node - const lockPath = await transaction.moveToParentPath(pathInfo.parentPath); - console.assert(lockPath === pathInfo.parentPath, `transaction.moveToParentPath() did not move to the right parent path of "${path}"`); - await this._writeNodeWithTracking(pathInfo.parentPath, { [pathInfo.key]: value }, { merge: true, transaction, suppress_events: options.suppress_events, context: options.context }); - } - } - else { - // Delegate operation to update on parent node - const lockPath = await transaction.moveToParentPath(pathInfo.parentPath); - console.assert(lockPath === pathInfo.parentPath, `transaction.moveToParentPath() did not move to the right parent path of "${path}"`); - await this.updateNode(pathInfo.parentPath, { [pathInfo.key]: value }, { transaction, suppress_events: options.suppress_events, context: options.context }); - } - if (!options.transaction) { - // transaction was created by us, commit - await transaction.commit(); - } - } - catch (err) { - if (!options.transaction) { - // transaction was created by us, rollback - await transaction.rollback(err); - } - throw err; - } - } - // TODO: Move to Storage base class? - async updateNode(path, updates, options = { suppress_events: false, context: null }) { - if (typeof updates !== 'object') { - throw new Error(`invalid updates argument`); //. Must be a non-empty object or array - } - else if (Object.keys(updates).length === 0) { - return; // Nothing to update. Done! - } - const transaction = options.transaction || await this._customImplementation.getTransaction({ path, write: true }); - try { - // Get info about current node - const nodeInfo = await this.getNodeInfo(path, { transaction }); - const pathInfo = acebase_core_1.PathInfo.get(path); - if (nodeInfo.exists && nodeInfo.address && nodeInfo.address.path === path) { - // Node exists and is stored in its own record. - // Update it - await this._writeNodeWithTracking(path, updates, { transaction, merge: true, suppress_events: options.suppress_events, context: options.context }); - } - else if (nodeInfo.exists) { - // Node exists, but is stored in its parent node. - const pathInfo = acebase_core_1.PathInfo.get(path); - const lockPath = await transaction.moveToParentPath(pathInfo.parentPath); - console.assert(lockPath === pathInfo.parentPath, `transaction.moveToParentPath() did not move to the right parent path of "${path}"`); - await this._writeNodeWithTracking(pathInfo.parentPath, { [pathInfo.key]: updates }, { transaction, merge: true, suppress_events: options.suppress_events, context: options.context }); - } - else { - // The node does not exist, it's parent doesn't have it either. Update the parent instead - const lockPath = await transaction.moveToParentPath(pathInfo.parentPath); - console.assert(lockPath === pathInfo.parentPath, `transaction.moveToParentPath() did not move to the right parent path of "${path}"`); - await this.updateNode(pathInfo.parentPath, { [pathInfo.key]: updates }, { transaction, suppress_events: options.suppress_events, context: options.context }); - } - if (!options.transaction) { - // transaction was created by us, commit - await transaction.commit(); - } - } - catch (err) { - if (!options.transaction) { - // transaction was created by us, rollback - await transaction.rollback(err); - } - throw err; - } - } -} -exports.CustomStorage = CustomStorage; -//# sourceMappingURL=storage-custom.js.map \ No newline at end of file diff --git a/dist/cjs/storage/storage-custom.js.map b/dist/cjs/storage/storage-custom.js.map deleted file mode 100644 index c270d51..0000000 --- a/dist/cjs/storage/storage-custom.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"storage-custom.js","sourceRoot":"","sources":["../ts/storage/storage-custom.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/thread-safe.js.map b/dist/cjs/thread-safe.js.map index 7b60fbb..f438255 100644 --- a/dist/cjs/thread-safe.js.map +++ b/dist/cjs/thread-safe.js.map @@ -1 +1 @@ -{"version":3,"file":"thread-safe.js","sourceRoot":"","sources":["ts/thread-safe.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"thread-safe.js","sourceRoot":"","sources":["../../src/thread-safe.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/unidecode-module.js.map b/dist/cjs/unidecode-module.js.map index db0b145..3e9789e 100644 --- a/dist/cjs/unidecode-module.js.map +++ b/dist/cjs/unidecode-module.js.map @@ -1 +1 @@ -{"version":3,"file":"unidecode-module.js","sourceRoot":"","sources":["ts/unidecode-module.ts"],"names":[],"mappings":""} \ No newline at end of file +{"version":3,"file":"unidecode-module.js","sourceRoot":"","sources":["../../src/unidecode-module.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/cjs/unidecode.js.map b/dist/cjs/unidecode.js.map index a5381e4..e992901 100644 --- a/dist/cjs/unidecode.js.map +++ b/dist/cjs/unidecode.js.map @@ -1 +1 @@ -{"version":3,"file":"unidecode.js","sourceRoot":"","sources":["ts/unidecode.ts"],"names":[],"mappings":";;AAAA,+EAA+E;AAC/E,uCAAuC,CAAC,kCAAkC;AAC1E,kBAAe,SAAiD,CAAC"} \ No newline at end of file +{"version":3,"file":"unidecode.js","sourceRoot":"","sources":["../../src/unidecode.ts"],"names":[],"mappings":";;AAAA,+EAA+E;AAC/E,uCAAuC,CAAC,kCAAkC;AAC1E,kBAAe,SAAiD,CAAC"} \ No newline at end of file diff --git a/dist/types/acebase-browser.d.ts.map b/dist/types/acebase-browser.d.ts.map index 771c025..daa19a5 100644 --- a/dist/types/acebase-browser.d.ts.map +++ b/dist/types/acebase-browser.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"acebase-browser.d.ts","sourceRoot":"","sources":["ts/acebase-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEhE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAYhF,qBAAa,cAAe,SAAQ,OAAO;IACvC;;;;OAIG;gBACS,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG;QAAE,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE;IAiB9F;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,OAAO,CAAC,wBAAwB,CAAM;CAGpF"} \ No newline at end of file +{"version":3,"file":"acebase-browser.d.ts","sourceRoot":"","sources":["../../src/acebase-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEhE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAYhF,qBAAa,cAAe,SAAQ,OAAO;IACvC;;;;OAIG;gBACS,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG;QAAE,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE;IAiB9F;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,OAAO,CAAC,wBAAwB,CAAM;CAGpF"} \ No newline at end of file diff --git a/dist/types/acebase-local.d.ts.map b/dist/types/acebase-local.d.ts.map index c52ea7b..e5f8059 100644 --- a/dist/types/acebase-local.d.ts.map +++ b/dist/types/acebase-local.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"acebase-local.d.ts","sourceRoot":"","sources":["ts/acebase-local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACvF,OAAO,EAA8B,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAClG,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAEhF,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,CAAC;AAE1D,qBAAa,oBAAqB,SAAQ,mBAAmB;IAEzD;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAEnC;;;OAGG;IACH,GAAG,CAAC,EAAE,iBAAiB,CAAC;IAExB;;;OAGG;IACH,YAAY,CAAC,EAAE,sBAAsB,CAAC;gBAE1B,OAAO,GAAE,OAAO,CAAC,oBAAoB,CAAM;CAU1D;AAGD,qBAAa,OAAQ,SAAQ,WAAW;IAEpC;;OAEG;IACI,GAAG,EAAE,QAAQ,CAAC;IAErB;;OAEG;gBACS,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,OAAO,CAAC,oBAAoB,CAAM;IAsB7D,QAAQ,EAAE;QACb,UAAU,CACN,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;YACN;;;eAGG;YACH,YAAY,CAAC,EAAE,OAAO,CAAC;YACvB;;;eAGG;YACH,aAAa,CAAC,EAAE,OAAO,CAAC;SAC3B,GACF,OAAO,CAAC,IAAI,CAAC,CAAC;KACpB,CAAC;IAEI,KAAK;IAKX,IAAI,QAAQ;;;MAQX;IAED;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAO,CAAC,oBAAoB,CAAM;IAKpF;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,OAAO,CAAC,wBAAwB,CAAM,GAAG,OAAO;CAG9F"} \ No newline at end of file +{"version":3,"file":"acebase-local.d.ts","sourceRoot":"","sources":["../../src/acebase-local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACvF,OAAO,EAA8B,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAClG,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAEhF,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,CAAC;AAE1D,qBAAa,oBAAqB,SAAQ,mBAAmB;IAEzD;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAEnC;;;OAGG;IACH,GAAG,CAAC,EAAE,iBAAiB,CAAC;IAExB;;;OAGG;IACH,YAAY,CAAC,EAAE,sBAAsB,CAAC;gBAE1B,OAAO,GAAE,OAAO,CAAC,oBAAoB,CAAM;CAU1D;AAGD,qBAAa,OAAQ,SAAQ,WAAW;IAEpC;;OAEG;IACI,GAAG,EAAE,QAAQ,CAAC;IAErB;;OAEG;gBACS,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,OAAO,CAAC,oBAAoB,CAAM;IAsB7D,QAAQ,EAAE;QACb,UAAU,CACN,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;YACN;;;eAGG;YACH,YAAY,CAAC,EAAE,OAAO,CAAC;YACvB;;;eAGG;YACH,aAAa,CAAC,EAAE,OAAO,CAAC;SAC3B,GACF,OAAO,CAAC,IAAI,CAAC,CAAC;KACpB,CAAC;IAEI,KAAK;IAKX,IAAI,QAAQ;;;MAQX;IAED;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAO,CAAC,oBAAoB,CAAM;IAKpF;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,OAAO,CAAC,wBAAwB,CAAM,GAAG,OAAO;CAG9F"} \ No newline at end of file diff --git a/dist/types/api-local.d.ts.map b/dist/types/api-local.d.ts.map index 68588fc..7b9a71e 100644 --- a/dist/types/api-local.d.ts.map +++ b/dist/types/api-local.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"api-local.d.ts","sourceRoot":"","sources":["ts/api-local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE,yBAAyB,EAAE,cAAc,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAO1M,OAAO,EAAE,OAAO,EAAc,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,GAAG,CAAC;AAEzC,qBAAa,QAAS,SAAQ,GAAG;IAEtB,EAAE,EAAE,WAAW,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;gBAElB,MAAM,QAAY,EAAE,IAAI,EAAE;QAAE,EAAE,EAAE,WAAW,CAAC;QAAC,QAAQ,EAAE,oBAAoB,CAAA;KAAE,EAAE,aAAa,EAAE,MAAM,GAAG;IA6B7G,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG;IAIzB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,yBAAyB;IAI1E,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,yBAAyB;IAI9E;;;;;OAKG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,GAAE;QACzC;;;WAGG;QACH,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B;;;WAGG;QACH,OAAO,CAAC,EAAE,GAAG,CAAC;KAIjB;;;IAKD;;;OAGG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAE;QAC9C;;;WAGG;QACH,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B;;;WAGG;QACH,OAAO,CAAC,EAAE,GAAG,CAAC;KAIjB;;;IAKD,IAAI,yBAAyB,YAE5B;IAED;;;;OAIG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAC9B;;WAEG;QACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB;;WAEG;QACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB;;WAEG;QACH,aAAa,CAAC,EAAE,OAAO,CAAC;KAC3B;;;;;;;IAeD;;;;;OAKG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,YAAY,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,GAAE;QACpF;;;WAGG;QACH,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B;;;WAGG;QACH,OAAO,CAAC,EAAE,GAAG,CAAC;KAIjB;;;IAKK,MAAM,CAAC,IAAI,EAAE,MAAM;IA4BzB;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,GAAE,YAAmC,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAK/G;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB;IAIlE;;OAEG;IACG,UAAU;IAIhB;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM;IAI5B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG;;;iBAMf,MAAM,GAAG,MAAM;kBAAQ,MAAM;mBAAS,GAAG;sBAAY,GAAG;;;;;;;;;;;qBAAxD,MAAM,GAAG,MAAM;sBAAQ,MAAM;uBAAS,GAAG;0BAAY,GAAG;;;mBAkD5B,MAAM;;;IA4B9E,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,WAAW,EAAE,OAAO,GAAE;QACrE,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,OAAO,CAAC;KAItB;IAID,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,GAAE;QACpD,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,EAAE,OAAO,CAAC;QACzB,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;KAKtC;IAIK,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;IAI5D,SAAS,CAAC,IAAI,EAAE,MAAM;;;;;IAItB,UAAU;;;;;IAIV,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO;IAIhE;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,oBAAoB;;;;;;;;;;;;;IAO/C;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,oBAAoB;;;;;;;;;;;CAMhD"} \ No newline at end of file +{"version":3,"file":"api-local.d.ts","sourceRoot":"","sources":["../../src/api-local.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/types/async-task-batch.d.ts.map b/dist/types/async-task-batch.d.ts.map index 6b478ee..f08182f 100644 --- a/dist/types/async-task-batch.d.ts.map +++ b/dist/types/async-task-batch.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"async-task-batch.d.ts","sourceRoot":"","sources":["ts/async-task-batch.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAc;IAiBJ,KAAK;IAAgB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE;IAhBnF,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,SAAS,CAA4D;IAC7E,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,IAAI,CAAS;IAErB;;;;;;;OAOG;gBACgB,KAAK,SAAO,EAAS,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE;YAErE,OAAO;IAwBrB,GAAG,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC;IAa5B;;OAEG;IACH,KAAK;IAOC,MAAM;CAUf"} \ No newline at end of file +{"version":3,"file":"async-task-batch.d.ts","sourceRoot":"","sources":["../../src/async-task-batch.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAc;IAiBJ,KAAK;IAAgB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE;IAhBnF,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,SAAS,CAA4D;IAC7E,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,IAAI,CAAS;IAErB;;;;;;;OAOG;gBACgB,KAAK,SAAO,EAAS,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE;YAErE,OAAO;IAwBrB,GAAG,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC;IAa5B;;OAEG;IACH,KAAK;IAOC,MAAM;CAUf"} \ No newline at end of file diff --git a/dist/types/binary.d.ts.map b/dist/types/binary.d.ts.map index 41169c0..046a153 100644 --- a/dist/types/binary.d.ts.map +++ b/dist/types/binary.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["ts/binary.ts"],"names":[],"mappings":";AAAA,oBAAY,UAAU,GAAG,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,CAAC;AAExD,wBAAgB,eAAe,CAAC,CAAC,SAAS,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAMhG;AACD,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,UAM9D;AAGD,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAWlG;AAED,wBAAgB,gBAAgB,CAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,UAKjE;AAKD,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,CAAC,CAsBjH;AAED,wBAAgB,gBAAgB,CAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,UAAQ,UAchF;AAED,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAS;gBAKhB,KAAK,GAAC,MAAM,EAAE,GAAC,UAAiB,EAAE,UAAU,SAAO;IAkB/D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,iBAAiB;IASvD,IAAI,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE;IAMvB,MAAM,CAAC,WAAW,CAAC,cAAc,EAAC,MAAM,EAAE,MAAM,CAAC,EAAC,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM;IAW5E,OAAO,CAAC,MAAM,EAAE,MAAM;IAatB,IAAI,QAAQ,aAEX;IACD,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM;IASrC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAStC,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IASlD,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IASlD,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAQtD,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IA2B/C,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAQnD,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IA8B/C,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAQnD,IAAI,IAAI,eAEP;IACD,IAAI,MAAM,WAET;IACD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM;IAQjC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAcxC"} \ No newline at end of file +{"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../../src/binary.ts"],"names":[],"mappings":";AAAA,oBAAY,UAAU,GAAG,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,CAAC;AAExD,wBAAgB,eAAe,CAAC,CAAC,SAAS,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAMhG;AACD,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,UAM9D;AAGD,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAWlG;AAED,wBAAgB,gBAAgB,CAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,UAKjE;AAKD,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,CAAC,CAsBjH;AAED,wBAAgB,gBAAgB,CAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,UAAQ,UAchF;AAED,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAS;gBAKhB,KAAK,GAAC,MAAM,EAAE,GAAC,UAAiB,EAAE,UAAU,SAAO;IAkB/D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,iBAAiB;IASvD,IAAI,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE;IAMvB,MAAM,CAAC,WAAW,CAAC,cAAc,EAAC,MAAM,EAAE,MAAM,CAAC,EAAC,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM;IAW5E,OAAO,CAAC,MAAM,EAAE,MAAM;IAatB,IAAI,QAAQ,aAEX;IACD,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM;IASrC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAStC,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IASlD,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IASlD,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAQtD,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IA2B/C,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAQnD,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IA8B/C,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAQnD,IAAI,IAAI,eAEP;IACD,IAAI,MAAM,WAET;IACD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM;IAQjC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAcxC"} \ No newline at end of file diff --git a/dist/types/browser.d.ts.map b/dist/types/browser.d.ts.map index 7156e4e..1ee2fe5 100644 --- a/dist/types/browser.d.ts.map +++ b/dist/types/browser.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["ts/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;EAiBE;AAEF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EACjG,kBAAkB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,WAAW,EAAE,kBAAkB,EAC1F,mBAAmB,EAAE,uBAAuB,EAAE,WAAW,EAAE,cAAc,EAAE,mBAAmB,EAC9F,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAEzG,QAAA,MAAM,OAAO;;;;;;;;;;;;;;CAcZ,CAAC;AAQF,eAAe,OAAO,CAAC;AAGvB,OAAO,EACH,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,EAAE,EACF,WAAW,EACX,YAAY,GACf,CAAC;AAGF,OAAO,EACH,cAAc,IAAI,OAAO,GAC5B,CAAC;AAEF,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,GAC3B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EACH,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,GAC7B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACH,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,GACxB,MAAM,WAAW,CAAC"} \ No newline at end of file +{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;EAiBE;AAEF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EACjG,kBAAkB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,WAAW,EAAE,kBAAkB,EAC1F,mBAAmB,EAAE,uBAAuB,EAAE,WAAW,EAAE,cAAc,EAAE,mBAAmB,EAC9F,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAEzG,QAAA,MAAM,OAAO;;;;;;;;;;;;;;CAcZ,CAAC;AAQF,eAAe,OAAO,CAAC;AAGvB,OAAO,EACH,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,EAAE,EACF,WAAW,EACX,YAAY,GACf,CAAC;AAGF,OAAO,EACH,cAAc,IAAI,OAAO,GAC5B,CAAC;AAEF,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,GAC3B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EACH,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,GAC7B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACH,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,GACxB,MAAM,WAAW,CAAC"} \ No newline at end of file diff --git a/dist/types/btree/binary-reader.d.ts.map b/dist/types/btree/binary-reader.d.ts.map index adacd28..7bdf4c7 100644 --- a/dist/types/btree/binary-reader.d.ts.map +++ b/dist/types/btree/binary-reader.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"binary-reader.d.ts","sourceRoot":"","sources":["../ts/btree/binary-reader.ts"],"names":[],"mappings":";AAOA,oBAAY,YAAY,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAE9E,qBAAa,YAAY;IAqBoC,SAAS;IApB3D,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3B,IAAI,EAAE,MAAM,CAAQ;IAE3B;;OAEG;IACI,MAAM,SAAK;IAElB;;OAEG;IACI,KAAK,SAAK;IAEjB;;;;OAIG;gBACS,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,YAAY,EAAS,SAAS,SAAO;IAsCnE,IAAI;IAQV,KAAK;IAQC,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IASvC,QAAQ;IAKR,SAAS;IAKT,QAAQ;IAeR,IAAI,CAAC,MAAM,SAAI;IAiBf,IAAI,CAAC,MAAM,EAAE,MAAM;IAanB,MAAM,CAAC,SAAS,EAAE,MAAM;IAU9B,IAAI,CAAC,SAAS,EAAE,MAAM;IAItB,MAAM,CAAC,SAAS,EAAE,MAAM;IAIlB,EAAE,CAAC,KAAK,EAAE,MAAM;IAYtB,YAAY,CAAC,gBAAgB,SAAI;;;;IAYjC,IAAI,WAAW,WAEd;IAED,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;;;;IAM9C,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM;IAKnC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAI/C,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CAGjD"} \ No newline at end of file +{"version":3,"file":"binary-reader.d.ts","sourceRoot":"","sources":["../../../src/btree/binary-reader.ts"],"names":[],"mappings":";AAOA,oBAAY,YAAY,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAE9E,qBAAa,YAAY;IAqBoC,SAAS;IApB3D,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3B,IAAI,EAAE,MAAM,CAAQ;IAE3B;;OAEG;IACI,MAAM,SAAK;IAElB;;OAEG;IACI,KAAK,SAAK;IAEjB;;;;OAIG;gBACS,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,YAAY,EAAS,SAAS,SAAO;IAsCnE,IAAI;IAQV,KAAK;IAQC,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IASvC,QAAQ;IAKR,SAAS;IAKT,QAAQ;IAeR,IAAI,CAAC,MAAM,SAAI;IAiBf,IAAI,CAAC,MAAM,EAAE,MAAM;IAanB,MAAM,CAAC,SAAS,EAAE,MAAM;IAU9B,IAAI,CAAC,SAAS,EAAE,MAAM;IAItB,MAAM,CAAC,SAAS,EAAE,MAAM;IAIlB,EAAE,CAAC,KAAK,EAAE,MAAM;IAYtB,YAAY,CAAC,gBAAgB,SAAI;;;;IAYjC,IAAI,WAAW,WAEd;IAED,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;;;;IAM9C,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM;IAKnC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAI/C,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CAGjD"} \ No newline at end of file diff --git a/dist/types/btree/binary-tree-builder.d.ts.map b/dist/types/btree/binary-tree-builder.d.ts.map index 99b9593..8c11fc1 100644 --- a/dist/types/btree/binary-tree-builder.d.ts.map +++ b/dist/types/btree/binary-tree-builder.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"binary-tree-builder.d.ts","sourceRoot":"","sources":["../ts/btree/binary-tree-builder.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAGpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAIpD,eAAO,MAAM,QAAQ;;;;;;;CAOpB,CAAC;AAEF,eAAO,MAAM,KAAK;;;;;;;;;;CAUjB,CAAC;AAEF,aAAK,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE;QAAE,GAAG,EAAE,GAAG,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAC,CAAC;AAClG,aAAK,iBAAiB,GAAG;IAAE,YAAY,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,wBAAwB,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAC3G,aAAK,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAC,UAAU,CAAC;IAAC,OAAO,EAAE,wBAAwB,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,CAAC;AACnM,aAAK,iBAAiB,GAAG;IAAE,YAAY,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,KAAK;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAEtJ,qBAAa,sBAAsB;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;gBAEP,OAAO,GAAE,OAAO,CAAC,sBAAsB,CAA4I;IAU/L,SAAS;IAsDT,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,GAAE,iBAAwD;IAkElG;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,GAAE,iBAA0C;IAmYpF,sBAAsB,CAAC,aAAa,EAAE,sBAAsB,EAAE,QAAQ,EAAE,iBAAiB;IAmBzF,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB;CA8D3C"} \ No newline at end of file +{"version":3,"file":"binary-tree-builder.d.ts","sourceRoot":"","sources":["../../../src/btree/binary-tree-builder.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAGpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAIpD,eAAO,MAAM,QAAQ;;;;;;;CAOpB,CAAC;AAEF,eAAO,MAAM,KAAK;;;;;;;;;;CAUjB,CAAC;AAEF,aAAK,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE;QAAE,GAAG,EAAE,GAAG,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAC,CAAC;AAClG,aAAK,iBAAiB,GAAG;IAAE,YAAY,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,wBAAwB,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAC3G,aAAK,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAC,UAAU,CAAC;IAAC,OAAO,EAAE,wBAAwB,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,CAAC;AACnM,aAAK,iBAAiB,GAAG;IAAE,YAAY,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,KAAK;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAEtJ,qBAAa,sBAAsB;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;gBAEP,OAAO,GAAE,OAAO,CAAC,sBAAsB,CAA4I;IAU/L,SAAS;IAsDT,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,GAAE,iBAAwD;IAkElG;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,GAAE,iBAA0C;IAmYpF,sBAAsB,CAAC,aAAa,EAAE,sBAAsB,EAAE,QAAQ,EAAE,iBAAiB;IAmBzF,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB;CA8D3C"} \ No newline at end of file diff --git a/dist/types/btree/binary-tree-leaf-entry-extdata.d.ts.map b/dist/types/btree/binary-tree-leaf-entry-extdata.d.ts.map index 2f6459c..7ea16e9 100644 --- a/dist/types/btree/binary-tree-leaf-entry-extdata.d.ts.map +++ b/dist/types/btree/binary-tree-leaf-entry-extdata.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"binary-tree-leaf-entry-extdata.d.ts","sourceRoot":"","sources":["../ts/btree/binary-tree-leaf-entry-extdata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,MAAM,WAAW,gCAAgC;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,GAAG,EAAE,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,6BAA6B,EAAE,CAAC;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,CAAC,YAAY,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,6BAA6B,EAAE,CAAC,CAAC;IACxF,UAAU,EAAE,CAAC,QAAQ,EAAE,OAAO,GAAG,cAAc,KAAK,OAAO,CAAC,IAAI,GAAG,cAAc,CAAC,CAAC;IACnF,eAAe,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,IAAI,CAAC;IAC3C,QAAQ,EAAE,CAAC,aAAa,EAAE,sBAAsB,EAAE,QAAQ,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChG,WAAW,EAAE,CAAC,aAAa,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzE"} \ No newline at end of file +{"version":3,"file":"binary-tree-leaf-entry-extdata.d.ts","sourceRoot":"","sources":["../../../src/btree/binary-tree-leaf-entry-extdata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,MAAM,WAAW,gCAAgC;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,GAAG,EAAE,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,6BAA6B,EAAE,CAAC;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,CAAC,YAAY,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,6BAA6B,EAAE,CAAC,CAAC;IACxF,UAAU,EAAE,CAAC,QAAQ,EAAE,OAAO,GAAG,cAAc,KAAK,OAAO,CAAC,IAAI,GAAG,cAAc,CAAC,CAAC;IACnF,eAAe,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,IAAI,CAAC;IAC3C,QAAQ,EAAE,CAAC,aAAa,EAAE,sBAAsB,EAAE,QAAQ,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChG,WAAW,EAAE,CAAC,aAAa,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzE"} \ No newline at end of file diff --git a/dist/types/btree/binary-tree-leaf-entry-value.d.ts.map b/dist/types/btree/binary-tree-leaf-entry-value.d.ts.map index 45116cb..6fe06e8 100644 --- a/dist/types/btree/binary-tree-leaf-entry-value.d.ts.map +++ b/dist/types/btree/binary-tree-leaf-entry-value.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"binary-tree-leaf-entry-value.d.ts","sourceRoot":"","sources":["../ts/btree/binary-tree-leaf-entry-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,qBAAa,6BAA6B;IAMnB,aAAa,EAAE,sBAAsB;IAAS,QAAQ,CAAC,EAAE,iBAAiB;IAL7F;;;;OAIG;gBACgB,aAAa,EAAE,sBAAsB,EAAS,QAAQ,CAAC,EAAE,iBAAiB;IAG7F,6CAA6C;IAC7C,IAAI,KAAK,2BAER;CACJ"} \ No newline at end of file +{"version":3,"file":"binary-tree-leaf-entry-value.d.ts","sourceRoot":"","sources":["../../../src/btree/binary-tree-leaf-entry-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,qBAAa,6BAA6B;IAMnB,aAAa,EAAE,sBAAsB;IAAS,QAAQ,CAAC,EAAE,iBAAiB;IAL7F;;;;OAIG;gBACgB,aAAa,EAAE,sBAAsB,EAAS,QAAQ,CAAC,EAAE,iBAAiB;IAG7F,6CAA6C;IAC7C,IAAI,KAAK,2BAER;CACJ"} \ No newline at end of file diff --git a/dist/types/btree/binary-tree-leaf-entry.d.ts.map b/dist/types/btree/binary-tree-leaf-entry.d.ts.map index ca10180..049edd3 100644 --- a/dist/types/btree/binary-tree-leaf-entry.d.ts.map +++ b/dist/types/btree/binary-tree-leaf-entry.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"binary-tree-leaf-entry.d.ts","sourceRoot":"","sources":["../ts/btree/binary-tree-leaf-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AACpF,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,qBAAa,wBAAwB;IAUd,GAAG,EAAE,gBAAgB;IAAS,MAAM,EAAE,6BAA6B,EAAE;IARxF,OAAO,CAAC,EAAE,gCAAgC,CAAC;IAE3C,OAAO,CAAC,YAAY,CAAS;IAE7B;;;OAGG;gBACgB,GAAG,EAAE,gBAAgB,EAAS,MAAM,EAAE,6BAA6B,EAAE;IAKxF;;OAEG;IACH,IAAI,KAAK,kCAER;IAED,IAAI,WAAW,WAId;IAED,IAAI,WAAW,CAAC,EAAE,QAAA,EAEjB;IAED;;OAEG;IACI,OAAO,EAAE,6BAA6B,EAAE,CAAC;IAEhD,6CAA6C;IACvC,UAAU,IAAI,OAAO,CAAC,6BAA6B,EAAE,CAAC;CAI/D"} \ No newline at end of file +{"version":3,"file":"binary-tree-leaf-entry.d.ts","sourceRoot":"","sources":["../../../src/btree/binary-tree-leaf-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AACpF,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,qBAAa,wBAAwB;IAUd,GAAG,EAAE,gBAAgB;IAAS,MAAM,EAAE,6BAA6B,EAAE;IARxF,OAAO,CAAC,EAAE,gCAAgC,CAAC;IAE3C,OAAO,CAAC,YAAY,CAAS;IAE7B;;;OAGG;gBACgB,GAAG,EAAE,gBAAgB,EAAS,MAAM,EAAE,6BAA6B,EAAE;IAKxF;;OAEG;IACH,IAAI,KAAK,kCAER;IAED,IAAI,WAAW,WAId;IAED,IAAI,WAAW,CAAC,EAAE,QAAA,EAEjB;IAED;;OAEG;IACI,OAAO,EAAE,6BAA6B,EAAE,CAAC;IAEhD,6CAA6C;IACvC,UAAU,IAAI,OAAO,CAAC,6BAA6B,EAAE,CAAC;CAI/D"} \ No newline at end of file diff --git a/dist/types/btree/binary-tree-leaf.d.ts.map b/dist/types/btree/binary-tree-leaf.d.ts.map index 481a5e5..0dcd8a8 100644 --- a/dist/types/btree/binary-tree-leaf.d.ts.map +++ b/dist/types/btree/binary-tree-leaf.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"binary-tree-leaf.d.ts","sourceRoot":"","sources":["../ts/btree/binary-tree-leaf.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,qBAAa,mBAAoB,SAAQ,uBAAuB;IAE5D,MAAM,KAAK,gBAAgB,WAAgB;IAC3C,MAAM,KAAK,gBAAgB,WAAiB;IAE5C,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;IAMjE,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;IAM1D,cAAc,SAAK;IACnB,cAAc,SAAK;IAEnB,OAAO;;;;gBAII,QAAQ,IAAI,CAAC;MAI7B;IAEK,OAAO,EAAE,wBAAwB,EAAE,CAAM;gBAEpC,QAAQ,EAAE,OAAO,CAAC,uBAAuB,CAAC;IAKtD;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAGjD;;QAEI;IACJ,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAE7C,IAAI,WAAW,YAAqD;IACpE,IAAI,OAAO,YAAiD;IAE5D,IAAI,aAAa,WAIhB;IACD,IAAI,aAAa,CAAC,QAAQ,QAAA,EAIzB;IAED,IAAI,aAAa,WAIhB;IACD,IAAI,aAAa,CAAC,QAAQ,QAAA,EAIzB;IAED,cAAc,CAAC,GAAG,EAAE,gBAAgB;IAIpC,SAAS,CAAC,GAAG,EAAE,gBAAgB;CAGlC"} \ No newline at end of file +{"version":3,"file":"binary-tree-leaf.d.ts","sourceRoot":"","sources":["../../../src/btree/binary-tree-leaf.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,qBAAa,mBAAoB,SAAQ,uBAAuB;IAE5D,MAAM,KAAK,gBAAgB,WAAgB;IAC3C,MAAM,KAAK,gBAAgB,WAAiB;IAE5C,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;IAMjE,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;IAM1D,cAAc,SAAK;IACnB,cAAc,SAAK;IAEnB,OAAO;;;;gBAII,QAAQ,IAAI,CAAC;MAI7B;IAEK,OAAO,EAAE,wBAAwB,EAAE,CAAM;gBAEpC,QAAQ,EAAE,OAAO,CAAC,uBAAuB,CAAC;IAKtD;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAGjD;;QAEI;IACJ,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAE7C,IAAI,WAAW,YAAqD;IACpE,IAAI,OAAO,YAAiD;IAE5D,IAAI,aAAa,WAIhB;IACD,IAAI,aAAa,CAAC,QAAQ,QAAA,EAIzB;IAED,IAAI,aAAa,WAIhB;IACD,IAAI,aAAa,CAAC,QAAQ,QAAA,EAIzB;IAED,cAAc,CAAC,GAAG,EAAE,gBAAgB;IAIpC,SAAS,CAAC,GAAG,EAAE,gBAAgB;CAGlC"} \ No newline at end of file diff --git a/dist/types/btree/binary-tree-node-entry.d.ts.map b/dist/types/btree/binary-tree-node-entry.d.ts.map index f86364a..8280a5e 100644 --- a/dist/types/btree/binary-tree-node-entry.d.ts.map +++ b/dist/types/btree/binary-tree-node-entry.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"binary-tree-node-entry.d.ts","sourceRoot":"","sources":["../ts/btree/binary-tree-node-entry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,qBAAa,wBAAwB;IAQd,GAAG,EAAE,gBAAgB;IAPxC,aAAa,EAAE,MAAM,CAAQ;IAE7B;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;gBAEF,GAAG,EAAE,gBAAgB;IAGlC,UAAU,IAAI,OAAO,CAAC,uBAAuB,CAAC;CAGvD"} \ No newline at end of file +{"version":3,"file":"binary-tree-node-entry.d.ts","sourceRoot":"","sources":["../../../src/btree/binary-tree-node-entry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,qBAAa,wBAAwB;IAQd,GAAG,EAAE,gBAAgB;IAPxC,aAAa,EAAE,MAAM,CAAQ;IAE7B;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;gBAEF,GAAG,EAAE,gBAAgB;IAGlC,UAAU,IAAI,OAAO,CAAC,uBAAuB,CAAC;CAGvD"} \ No newline at end of file diff --git a/dist/types/btree/binary-tree-node-info.d.ts.map b/dist/types/btree/binary-tree-node-info.d.ts.map index 9063ec9..3da9964 100644 --- a/dist/types/btree/binary-tree-node-info.d.ts.map +++ b/dist/types/btree/binary-tree-node-info.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"binary-tree-node-info.d.ts","sourceRoot":"","sources":["../ts/btree/binary-tree-node-info.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,qBAAa,uBAAuB;IAChC,IAAI,CAAC,EAAE,eAAe,CAAC;IAEvB,UAAU,CAAC,EAAE,mBAAmB,CAAC;IAEjC,WAAW,CAAC,EAAE,wBAAwB,CAAC;IAEvC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAOzB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;gBAED,IAAI,EAAE,OAAO,CAAC,uBAAuB,CAAC;IAmBlD,IAAI,KAAK,WAER;IAED,IAAI,KAAK,CAAC,KAAK,QAAA,EAEd;CACJ"} \ No newline at end of file +{"version":3,"file":"binary-tree-node-info.d.ts","sourceRoot":"","sources":["../../../src/btree/binary-tree-node-info.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,qBAAa,uBAAuB;IAChC,IAAI,CAAC,EAAE,eAAe,CAAC;IAEvB,UAAU,CAAC,EAAE,mBAAmB,CAAC;IAEjC,WAAW,CAAC,EAAE,wBAAwB,CAAC;IAEvC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAOzB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;gBAED,IAAI,EAAE,OAAO,CAAC,uBAAuB,CAAC;IAmBlD,IAAI,KAAK,WAER;IAED,IAAI,KAAK,CAAC,KAAK,QAAA,EAEd;CACJ"} \ No newline at end of file diff --git a/dist/types/btree/binary-tree-node.d.ts.map b/dist/types/btree/binary-tree-node.d.ts.map index f6a78b4..9dee82b 100644 --- a/dist/types/btree/binary-tree-node.d.ts.map +++ b/dist/types/btree/binary-tree-node.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"binary-tree-node.d.ts","sourceRoot":"","sources":["../ts/btree/binary-tree-node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,qBAAa,mBAAoB,SAAQ,uBAAuB;IAE5D,OAAO,EAAE,wBAAwB,EAAE,CAAM;IAEzC,aAAa,EAAE,MAAM,CAAQ;IAE7B;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;gBAET,QAAQ,EAAE,OAAO,CAAC,uBAAuB,CAAC;IAIhD,UAAU,IAAI,OAAO,CAAC,uBAAuB,CAAC;CAGvD"} \ No newline at end of file +{"version":3,"file":"binary-tree-node.d.ts","sourceRoot":"","sources":["../../../src/btree/binary-tree-node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,qBAAa,mBAAoB,SAAQ,uBAAuB;IAE5D,OAAO,EAAE,wBAAwB,EAAE,CAAM;IAEzC,aAAa,EAAE,MAAM,CAAQ;IAE7B;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;gBAET,QAAQ,EAAE,OAAO,CAAC,uBAAuB,CAAC;IAIhD,UAAU,IAAI,OAAO,CAAC,uBAAuB,CAAC;CAGvD"} \ No newline at end of file diff --git a/dist/types/btree/binary-tree-transaction-operation.d.ts.map b/dist/types/btree/binary-tree-transaction-operation.d.ts.map index 9ffe046..917fe59 100644 --- a/dist/types/btree/binary-tree-transaction-operation.d.ts.map +++ b/dist/types/btree/binary-tree-transaction-operation.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"binary-tree-transaction-operation.d.ts","sourceRoot":"","sources":["../ts/btree/binary-tree-transaction-operation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,qBAAa,mCAAmC;IAC5C,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,aAAa,EAAE,sBAAsB,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IAIrG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,EAAE,6BAA6B,EAAE,YAAY,EAAE,6BAA6B,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IAIvJ,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,gBAAgB,EAAE,aAAa,EAAE,sBAAsB;IAI1E,IAAI,EAAE,KAAK,GAAC,QAAQ,GAAC,QAAQ,CAAC;IAC9B,GAAG,EAAE,gBAAgB,CAAC;IACtB,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,CAAC,EAAE,6BAA6B,CAAC;IACzC,YAAY,CAAC,EAAE,6BAA6B,CAAC;gBAEjC,SAAS,EAAE,mCAAmC;CAe7D"} \ No newline at end of file +{"version":3,"file":"binary-tree-transaction-operation.d.ts","sourceRoot":"","sources":["../../../src/btree/binary-tree-transaction-operation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,qBAAa,mCAAmC;IAC5C,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,aAAa,EAAE,sBAAsB,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IAIrG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,EAAE,6BAA6B,EAAE,YAAY,EAAE,6BAA6B,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IAIvJ,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,gBAAgB,EAAE,aAAa,EAAE,sBAAsB;IAI1E,IAAI,EAAE,KAAK,GAAC,QAAQ,GAAC,QAAQ,CAAC;IAC9B,GAAG,EAAE,gBAAgB,CAAC;IACtB,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,CAAC,EAAE,6BAA6B,CAAC;IACzC,YAAY,CAAC,EAAE,6BAA6B,CAAC;gBAEjC,SAAS,EAAE,mCAAmC;CAe7D"} \ No newline at end of file diff --git a/dist/types/btree/binary-tree.d.ts.map b/dist/types/btree/binary-tree.d.ts.map index 2db3da4..3e0bf13 100644 --- a/dist/types/btree/binary-tree.d.ts.map +++ b/dist/types/btree/binary-tree.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"binary-tree.d.ts","sourceRoot":"","sources":["../ts/btree/binary-tree.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"binary-tree.d.ts","sourceRoot":"","sources":["../../../src/btree/binary-tree.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/types/btree/binary-writer.d.ts.map b/dist/types/btree/binary-writer.d.ts.map index e899514..03a8aa2 100644 --- a/dist/types/btree/binary-writer.d.ts.map +++ b/dist/types/btree/binary-writer.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"binary-writer.d.ts","sourceRoot":"","sources":["../ts/btree/binary-writer.ts"],"names":[],"mappings":";;AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAsC,UAAU,EAAE,MAAM,WAAW,CAAC;AAG9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,aAAK,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,cAAc,CAAC,CAAC;AACpF,aAAK,aAAa,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3E,qBAAa,YAAY;IAErB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,aAAa;IAM3D,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE;IAkC/B,MAAM,CAAC,oBAAoB,CAAC,OAAO,EAAE,iBAAiB;IA2BtD,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,aAAa;IA+DzC,IAAI,MAAM,WAA4B;IACtC,IAAI,MAAM,WAAwD;IAElE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM;IAgB3C,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM;IAO5D,GAAG;IAOH,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB;IAGvC,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM;IAGnC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE;IAGpC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC;IAGpF,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC;CAG5F"} \ No newline at end of file +{"version":3,"file":"binary-writer.d.ts","sourceRoot":"","sources":["../../../src/btree/binary-writer.ts"],"names":[],"mappings":";;AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAsC,UAAU,EAAE,MAAM,WAAW,CAAC;AAG9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,aAAK,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,cAAc,CAAC,CAAC;AACpF,aAAK,aAAa,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3E,qBAAa,YAAY;IAErB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,aAAa;IAM3D,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE;IAkC/B,MAAM,CAAC,oBAAoB,CAAC,OAAO,EAAE,iBAAiB;IA2BtD,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,aAAa;IA+DzC,IAAI,MAAM,WAA4B;IACtC,IAAI,MAAM,WAAwD;IAElE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM;IAgB3C,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM;IAO5D,GAAG;IAOH,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB;IAGvC,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM;IAGnC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE;IAGpC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC;IAGpF,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC;CAG5F"} \ No newline at end of file diff --git a/dist/types/btree/config.d.ts.map b/dist/types/btree/config.d.ts.map index 1d70d8e..12957e8 100644 --- a/dist/types/btree/config.d.ts.map +++ b/dist/types/btree/config.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../ts/btree/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,2BAA2B,QAAU,CAAC;AACnD,eAAO,MAAM,qBAAqB,QAAsB,CAAC"} \ No newline at end of file +{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/btree/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,2BAA2B,QAAU,CAAC;AACnD,eAAO,MAAM,qBAAqB,QAAsB,CAAC"} \ No newline at end of file diff --git a/dist/types/btree/entry-key-type.d.ts.map b/dist/types/btree/entry-key-type.d.ts.map index a312564..046880d 100644 --- a/dist/types/btree/entry-key-type.d.ts.map +++ b/dist/types/btree/entry-key-type.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"entry-key-type.d.ts","sourceRoot":"","sources":["../ts/btree/entry-key-type.ts"],"names":[],"mappings":"AAAA,oBAAY,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;AACrF,oBAAY,kBAAkB,GAAG,gBAAgB,CAAC"} \ No newline at end of file +{"version":3,"file":"entry-key-type.d.ts","sourceRoot":"","sources":["../../../src/btree/entry-key-type.ts"],"names":[],"mappings":"AAAA,oBAAY,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;AACrF,oBAAY,kBAAkB,GAAG,gBAAgB,CAAC"} \ No newline at end of file diff --git a/dist/types/btree/index.d.ts.map b/dist/types/btree/index.d.ts.map index aa064dc..f58e4c3 100644 --- a/dist/types/btree/index.d.ts.map +++ b/dist/types/btree/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../ts/btree/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EACH,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,wBAAwB,EACxB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,0BAA0B,GAC7B,CAAC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/btree/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EACH,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,wBAAwB,EACxB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,0BAA0B,GAC7B,CAAC"} \ No newline at end of file diff --git a/dist/types/btree/leaf-entry-metadata.d.ts.map b/dist/types/btree/leaf-entry-metadata.d.ts.map index 442899f..888ef4f 100644 --- a/dist/types/btree/leaf-entry-metadata.d.ts.map +++ b/dist/types/btree/leaf-entry-metadata.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"leaf-entry-metadata.d.ts","sourceRoot":"","sources":["../ts/btree/leaf-entry-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,oBAAY,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"leaf-entry-metadata.d.ts","sourceRoot":"","sources":["../../../src/btree/leaf-entry-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,oBAAY,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC"} \ No newline at end of file diff --git a/dist/types/btree/leaf-entry-recordpointer.d.ts.map b/dist/types/btree/leaf-entry-recordpointer.d.ts.map index 17d0db3..0eec365 100644 --- a/dist/types/btree/leaf-entry-recordpointer.d.ts.map +++ b/dist/types/btree/leaf-entry-recordpointer.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"leaf-entry-recordpointer.d.ts","sourceRoot":"","sources":["../ts/btree/leaf-entry-recordpointer.ts"],"names":[],"mappings":"AAAA,oBAAY,sBAAsB,GAAG,MAAM,EAAE,GAAG,UAAU,CAAC"} \ No newline at end of file +{"version":3,"file":"leaf-entry-recordpointer.d.ts","sourceRoot":"","sources":["../../../src/btree/leaf-entry-recordpointer.ts"],"names":[],"mappings":"AAAA,oBAAY,sBAAsB,GAAG,MAAM,EAAE,GAAG,UAAU,CAAC"} \ No newline at end of file diff --git a/dist/types/btree/tree-builder.d.ts.map b/dist/types/btree/tree-builder.d.ts.map index 33d0586..ee0817b 100644 --- a/dist/types/btree/tree-builder.d.ts.map +++ b/dist/types/btree/tree-builder.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"tree-builder.d.ts","sourceRoot":"","sources":["../ts/btree/tree-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAMlE,qBAAa,gBAAgB;IASN,UAAU,EAAE,OAAO;IAAS,UAAU;IAAe,YAAY,EAAE,MAAM,EAAE;IAR9F,IAAI,6EAAsF;IAC1F,aAAa,SAAK;IAElB;;;;OAIG;gBACgB,UAAU,EAAE,OAAO,EAAS,UAAU,SAAM,EAAS,YAAY,GAAE,MAAM,EAAO;IAGnG,GAAG,CAAC,GAAG,EAAE,kBAAkB,EAAE,aAAa,EAAE,sBAAsB,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IAsBhG;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,kBAAkB,EAAE,aAAa,CAAC,EAAE,sBAAsB;IAyBtE,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM;IA6N1B,UAAU,CAAC,QAAQ,EAAE,MAAM;IAW3B,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM;CAqBnC"} \ No newline at end of file +{"version":3,"file":"tree-builder.d.ts","sourceRoot":"","sources":["../../../src/btree/tree-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAMlE,qBAAa,gBAAgB;IASN,UAAU,EAAE,OAAO;IAAS,UAAU;IAAe,YAAY,EAAE,MAAM,EAAE;IAR9F,IAAI,6EAAsF;IAC1F,aAAa,SAAK;IAElB;;;;OAIG;gBACgB,UAAU,EAAE,OAAO,EAAS,UAAU,SAAM,EAAS,YAAY,GAAE,MAAM,EAAO;IAGnG,GAAG,CAAC,GAAG,EAAE,kBAAkB,EAAE,aAAa,EAAE,sBAAsB,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IAsBhG;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,kBAAkB,EAAE,aAAa,CAAC,EAAE,sBAAsB;IAyBtE,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM;IA6N1B,UAAU,CAAC,QAAQ,EAAE,MAAM;IAW3B,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM;CAqBnC"} \ No newline at end of file diff --git a/dist/types/btree/tree-leaf-entry-value.d.ts.map b/dist/types/btree/tree-leaf-entry-value.d.ts.map index 75058ed..7fdf97e 100644 --- a/dist/types/btree/tree-leaf-entry-value.d.ts.map +++ b/dist/types/btree/tree-leaf-entry-value.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"tree-leaf-entry-value.d.ts","sourceRoot":"","sources":["../ts/btree/tree-leaf-entry-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,qBAAa,uBAAuB;IAKb,aAAa,EAAE,sBAAsB;IAAS,QAAQ,CAAC,EAAE,iBAAiB;IAJ7F;;;OAGG;gBACgB,aAAa,EAAE,sBAAsB,EAAS,QAAQ,CAAC,EAAE,iBAAiB;IAG7F,6CAA6C;IAC7C,IAAI,KAAK,2BAER;CACJ"} \ No newline at end of file +{"version":3,"file":"tree-leaf-entry-value.d.ts","sourceRoot":"","sources":["../../../src/btree/tree-leaf-entry-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,qBAAa,uBAAuB;IAKb,aAAa,EAAE,sBAAsB;IAAS,QAAQ,CAAC,EAAE,iBAAiB;IAJ7F;;;OAGG;gBACgB,aAAa,EAAE,sBAAsB,EAAS,QAAQ,CAAC,EAAE,iBAAiB;IAG7F,6CAA6C;IAC7C,IAAI,KAAK,2BAER;CACJ"} \ No newline at end of file diff --git a/dist/types/btree/tree-leaf-entry.d.ts.map b/dist/types/btree/tree-leaf-entry.d.ts.map index 40b786d..24ec0f6 100644 --- a/dist/types/btree/tree-leaf-entry.d.ts.map +++ b/dist/types/btree/tree-leaf-entry.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"tree-leaf-entry.d.ts","sourceRoot":"","sources":["../ts/btree/tree-leaf-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,qBAAa,kBAAkB;IAGR,IAAI,EAAE,aAAa;IAAS,GAAG,EAAE,gBAAgB;IAFpE,MAAM,EAAE,uBAAuB,EAAE,CAAC;gBAEf,IAAI,EAAE,aAAa,EAAS,GAAG,EAAE,gBAAgB,EAAE,KAAK,CAAC,EAAE,uBAAuB;CAMxG"} \ No newline at end of file +{"version":3,"file":"tree-leaf-entry.d.ts","sourceRoot":"","sources":["../../../src/btree/tree-leaf-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,qBAAa,kBAAkB;IAGR,IAAI,EAAE,aAAa;IAAS,GAAG,EAAE,gBAAgB;IAFpE,MAAM,EAAE,uBAAuB,EAAE,CAAC;gBAEf,IAAI,EAAE,aAAa,EAAS,GAAG,EAAE,gBAAgB,EAAE,KAAK,CAAC,EAAE,uBAAuB;CAMxG"} \ No newline at end of file diff --git a/dist/types/btree/tree-leaf.d.ts.map b/dist/types/btree/tree-leaf.d.ts.map index 7348a13..51fceb1 100644 --- a/dist/types/btree/tree-leaf.d.ts.map +++ b/dist/types/btree/tree-leaf.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"tree-leaf.d.ts","sourceRoot":"","sources":["../ts/btree/tree-leaf.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAK5C,qBAAa,aAAa;IAMH,MAAM,EAAE,SAAS,GAAG,aAAa;IAJpD,OAAO,EAAE,kBAAkB,EAAE,CAAM;IACnC,QAAQ,EAAE,aAAa,CAAQ;IAC/B,QAAQ,EAAE,aAAa,CAAQ;gBAEZ,MAAM,EAAE,SAAS,GAAG,aAAa;IAGpD;;OAEG;IACH,IAAI,IAAI,IAAI,SAAS,CAEpB;IAED;;;;;;OAMG;IACH,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IAyFtG,QAAQ;IAKF,QAAQ,CAAC,aAAa,SAAQ,EAAE,MAAM,EAAE,YAAY;;;;;;;CAyM7D"} \ No newline at end of file +{"version":3,"file":"tree-leaf.d.ts","sourceRoot":"","sources":["../../../src/btree/tree-leaf.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAK5C,qBAAa,aAAa;IAMH,MAAM,EAAE,SAAS,GAAG,aAAa;IAJpD,OAAO,EAAE,kBAAkB,EAAE,CAAM;IACnC,QAAQ,EAAE,aAAa,CAAQ;IAC/B,QAAQ,EAAE,aAAa,CAAQ;gBAEZ,MAAM,EAAE,SAAS,GAAG,aAAa;IAGpD;;OAEG;IACH,IAAI,IAAI,IAAI,SAAS,CAEpB;IAED;;;;;;OAMG;IACH,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IAyFtG,QAAQ;IAKF,QAAQ,CAAC,aAAa,SAAQ,EAAE,MAAM,EAAE,YAAY;;;;;;;CAyM7D"} \ No newline at end of file diff --git a/dist/types/btree/tree-node-entry.d.ts.map b/dist/types/btree/tree-node-entry.d.ts.map index 52a998e..3751d37 100644 --- a/dist/types/btree/tree-node-entry.d.ts.map +++ b/dist/types/btree/tree-node-entry.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"tree-node-entry.d.ts","sourceRoot":"","sources":["../ts/btree/tree-node-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,qBAAa,kBAAkB;IAGR,IAAI,EAAE,aAAa;IAAS,GAAG,EAAE,gBAAgB;IAFpE,OAAO,EAAE,aAAa,GAAG,aAAa,CAAQ;gBAE3B,IAAI,EAAE,aAAa,EAAS,GAAG,EAAE,gBAAgB;CAEvE"} \ No newline at end of file +{"version":3,"file":"tree-node-entry.d.ts","sourceRoot":"","sources":["../../../src/btree/tree-node-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,qBAAa,kBAAkB;IAGR,IAAI,EAAE,aAAa;IAAS,GAAG,EAAE,gBAAgB;IAFpE,OAAO,EAAE,aAAa,GAAG,aAAa,CAAQ;gBAE3B,IAAI,EAAE,aAAa,EAAS,GAAG,EAAE,gBAAgB;CAEvE"} \ No newline at end of file diff --git a/dist/types/btree/tree-node.d.ts.map b/dist/types/btree/tree-node.d.ts.map index fcba10f..062246a 100644 --- a/dist/types/btree/tree-node.d.ts.map +++ b/dist/types/btree/tree-node.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"tree-node.d.ts","sourceRoot":"","sources":["../ts/btree/tree-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,aAAK,aAAa,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,aAAK,eAAe,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,GAAG,aAAa,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;CACjB,CAAA;AAED,qBAAa,aAAa;IAIH,IAAI,EAAE,SAAS;IAAS,MAAM,EAAE,aAAa;IAHhE,OAAO,EAAE,kBAAkB,EAAE,CAAM;IACnC,OAAO,EAAE,aAAa,GAAG,aAAa,CAAQ;gBAE3B,IAAI,EAAE,SAAS,EAAS,MAAM,EAAE,aAAa;IAGhE,QAAQ;IAQR,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa;IAuBnF,OAAO,CAAC,UAAU;IAyDZ,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY;;;;WA+K9C,uBAAuB,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE;CAYtH"} \ No newline at end of file +{"version":3,"file":"tree-node.d.ts","sourceRoot":"","sources":["../../../src/btree/tree-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,aAAK,aAAa,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,aAAK,eAAe,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,GAAG,aAAa,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;CACjB,CAAA;AAED,qBAAa,aAAa;IAIH,IAAI,EAAE,SAAS;IAAS,MAAM,EAAE,aAAa;IAHhE,OAAO,EAAE,kBAAkB,EAAE,CAAM;IACnC,OAAO,EAAE,aAAa,GAAG,aAAa,CAAQ;gBAE3B,IAAI,EAAE,SAAS,EAAS,MAAM,EAAE,aAAa;IAGhE,QAAQ;IAQR,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa;IAuBnF,OAAO,CAAC,UAAU;IAyDZ,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY;;;;WA+K9C,uBAAuB,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE;CAYtH"} \ No newline at end of file diff --git a/dist/types/btree/tree.d.ts.map b/dist/types/btree/tree.d.ts.map index 8e59245..a74e6d4 100644 --- a/dist/types/btree/tree.d.ts.map +++ b/dist/types/btree/tree.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../ts/btree/tree.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAK5C,qBAAa,SAAS;IAqBC,iBAAiB,EAAE,MAAM;IAAS,UAAU,EAAE,OAAO;IAAS,YAAY,EAAE,MAAM,EAAE;IApBvG;;OAEG;IACI,IAAI,EAAE,aAAa,GAAG,aAAa,CAAC;IAE3C;;OAEG;IACI,KAAK,EAAE,MAAM,CAAC;IAErB;;OAEG;IACI,UAAU,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;gBACgB,iBAAiB,EAAE,MAAM,EAAS,UAAU,EAAE,OAAO,EAAS,YAAY,GAAE,MAAM,EAAO;IAM5G;;;;;;OAMG;IACH,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IAyBnF;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,gBAAgB,GAAG,aAAa;IA4B9C,IAAI,CAAC,GAAG,EAAE,gBAAgB;IAY1B,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,kBAAkB,GAAG,kBAAkB,EAAE;aAoBpD,gBAAgB;gBACb,uBAAuB;iBACtB,uBAAuB,EAAE;;IAyI1C;;OAEG;IACH,SAAS;IAST;;OAEG;IACH,QAAQ;IASR,GAAG;IAYH,UAAU;IAYV,MAAM,KAAK,WAAW,YAAoB;IAC1C,MAAM,CAAC,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAQrD,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM;;;;;IA4D/D,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,gBAAgB;IA4DvC,QAAQ,CAAC,aAAa,SAAQ,EAAE,MAAM,EAAE,YAAY;IAkF1D,MAAM,KAAK,kBAAkB;qBAER,OAAO,QAAQ,OAAO;4BACf,OAAO,QAAQ,OAAO;qBAC7B,OAAO,QAAQ,OAAO;4BACf,OAAO,QAAQ,OAAO;sBAC5B,OAAO,QAAQ,OAAO;yBACnB,OAAO,QAAQ,OAAO;MAE9C;CACJ"} \ No newline at end of file +{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../src/btree/tree.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAK5C,qBAAa,SAAS;IAqBC,iBAAiB,EAAE,MAAM;IAAS,UAAU,EAAE,OAAO;IAAS,YAAY,EAAE,MAAM,EAAE;IApBvG;;OAEG;IACI,IAAI,EAAE,aAAa,GAAG,aAAa,CAAC;IAE3C;;OAEG;IACI,KAAK,EAAE,MAAM,CAAC;IAErB;;OAEG;IACI,UAAU,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;gBACgB,iBAAiB,EAAE,MAAM,EAAS,UAAU,EAAE,OAAO,EAAS,YAAY,GAAE,MAAM,EAAO;IAM5G;;;;;;OAMG;IACH,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IAyBnF;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,gBAAgB,GAAG,aAAa;IA4B9C,IAAI,CAAC,GAAG,EAAE,gBAAgB;IAY1B,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,kBAAkB,GAAG,kBAAkB,EAAE;aAoBpD,gBAAgB;gBACb,uBAAuB;iBACtB,uBAAuB,EAAE;;IAyI1C;;OAEG;IACH,SAAS;IAST;;OAEG;IACH,QAAQ;IASR,GAAG;IAYH,UAAU;IAYV,MAAM,KAAK,WAAW,YAAoB;IAC1C,MAAM,CAAC,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAQrD,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM;;;;;IA4D/D,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,gBAAgB;IA4DvC,QAAQ,CAAC,aAAa,SAAQ,EAAE,MAAM,EAAE,YAAY;IAkF1D,MAAM,KAAK,kBAAkB;qBAER,OAAO,QAAQ,OAAO;4BACf,OAAO,QAAQ,OAAO;qBAC7B,OAAO,QAAQ,OAAO;4BACf,OAAO,QAAQ,OAAO;sBAC5B,OAAO,QAAQ,OAAO;yBACnB,OAAO,QAAQ,OAAO;MAE9C;CACJ"} \ No newline at end of file diff --git a/dist/types/btree/tx.d.ts.map b/dist/types/btree/tx.d.ts.map index c47dacb..eee55f0 100644 --- a/dist/types/btree/tx.d.ts.map +++ b/dist/types/btree/tx.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../ts/btree/tx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,qBAAa,eAAgB,SAAQ,aAAa;IAC9C,iBAAiB,EAAE,KAAK,CAAC,aAAa,GAAC,KAAK,CAAC,CAAQ;IACrD,cAAc,EAAE,KAAK,CAAC,aAAa,GAAC,KAAK,CAAC,CAAQ;gBAEtC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,KAAK;CAG/D;AAED,qBAAa,EAAE;IAEX,OAAO,CAAC,MAAM,CAAiJ;IAC/J,OAAO,CAAC,cAAc,CAAoB;;IAQ1C,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG;IAsB1C;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,CAAA;KAAE;IAU/E,OAAO,CAAC,QAAQ,UAAO;CA6EhC"} \ No newline at end of file +{"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../../../src/btree/tx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,qBAAa,eAAgB,SAAQ,aAAa;IAC9C,iBAAiB,EAAE,KAAK,CAAC,aAAa,GAAC,KAAK,CAAC,CAAQ;IACrD,cAAc,EAAE,KAAK,CAAC,aAAa,GAAC,KAAK,CAAC,CAAQ;gBAEtC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,KAAK;CAG/D;AAED,qBAAa,EAAE;IAEX,OAAO,CAAC,MAAM,CAAiJ;IAC/J,OAAO,CAAC,cAAc,CAAoB;;IAQ1C,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG;IAsB1C;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,CAAA;KAAE;IAU/E,OAAO,CAAC,QAAQ,UAAO;CA6EhC"} \ No newline at end of file diff --git a/dist/types/btree/typesafe-compare.d.ts.map b/dist/types/btree/typesafe-compare.d.ts.map index 4007f10..78aca0d 100644 --- a/dist/types/btree/typesafe-compare.d.ts.map +++ b/dist/types/btree/typesafe-compare.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"typesafe-compare.d.ts","sourceRoot":"","sources":["../ts/btree/typesafe-compare.ts"],"names":[],"mappings":";AAAA,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,WAI/C;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,WAKpD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,WAKvD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,WAOnD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,WAO1D;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,WAOnD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,WAO1D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,cAaxD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,EAAE,WAExG"} \ No newline at end of file +{"version":3,"file":"typesafe-compare.d.ts","sourceRoot":"","sources":["../../../src/btree/typesafe-compare.ts"],"names":[],"mappings":";AAAA,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,WAI/C;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,WAKpD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,WAKvD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,WAOnD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,WAO1D;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,WAOnD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,WAO1D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,cAaxD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,EAAE,WAExG"} \ No newline at end of file diff --git a/dist/types/btree/utils.d.ts.map b/dist/types/btree/utils.d.ts.map index 5e256a3..279ba19 100644 --- a/dist/types/btree/utils.d.ts.map +++ b/dist/types/btree/utils.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../ts/btree/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,EAAE,aAAa,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,iBAAiB,OA4BnJ;AAED,eAAO,MAAM,cAAc,gBAAiB,OAAO,EAAE,QAAQ,OAAO,EAAE,SAOrE,CAAC"} \ No newline at end of file +{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/btree/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,EAAE,aAAa,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,iBAAiB,OA4BnJ;AAED,eAAO,MAAM,cAAc,gBAAiB,OAAO,EAAE,QAAQ,OAAO,EAAE,SAOrE,CAAC"} \ No newline at end of file diff --git a/dist/types/data-index/array-index-query-hint.d.ts.map b/dist/types/data-index/array-index-query-hint.d.ts.map index a0961ac..800db03 100644 --- a/dist/types/data-index/array-index-query-hint.d.ts.map +++ b/dist/types/data-index/array-index-query-hint.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"array-index-query-hint.d.ts","sourceRoot":"","sources":["../ts/data-index/array-index-query-hint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,qBAAa,mBAAoB,SAAQ,cAAc;IACnD,MAAM,KAAK,KAAK;;OAIf;gBAEW,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO;IAI3C,IAAI,WAAW,WAUd;CACJ"} \ No newline at end of file +{"version":3,"file":"array-index-query-hint.d.ts","sourceRoot":"","sources":["../../../src/data-index/array-index-query-hint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,qBAAa,mBAAoB,SAAQ,cAAc;IACnD,MAAM,KAAK,KAAK;;OAIf;gBAEW,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO;IAI3C,IAAI,WAAW,WAUd;CACJ"} \ No newline at end of file diff --git a/dist/types/data-index/array-index.d.ts.map b/dist/types/data-index/array-index.d.ts.map index 0f02574..b98dc27 100644 --- a/dist/types/data-index/array-index.d.ts.map +++ b/dist/types/data-index/array-index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"array-index.d.ts","sourceRoot":"","sources":["../ts/data-index/array-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAkB,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAIpD;;GAEG;AACH,qBAAa,UAAW,SAAQ,SAAS;gBACzB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB;IASlF,IAAI,IAAI,WAEP;IAEK,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO;IAsD3E,KAAK;IAsBL,MAAM,KAAK,cAAc,aAIxB;IACD,IAAI,cAAc,aAEjB;IAEK,KAAK,CAAC,EAAE,EAAE,0BAA0B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IACjE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,qBAAqB,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,iBAAiB,CAAC;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;CA+J7H"} \ No newline at end of file +{"version":3,"file":"array-index.d.ts","sourceRoot":"","sources":["../../../src/data-index/array-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAkB,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAIpD;;GAEG;AACH,qBAAa,UAAW,SAAQ,SAAS;gBACzB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB;IASlF,IAAI,IAAI,WAEP;IAEK,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO;IAsD3E,KAAK;IAsBL,MAAM,KAAK,cAAc,aAIxB;IACD,IAAI,cAAc,aAEjB;IAEK,KAAK,CAAC,EAAE,EAAE,0BAA0B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IACjE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,qBAAqB,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,iBAAiB,CAAC;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;CA+J7H"} \ No newline at end of file diff --git a/dist/types/data-index/data-index.d.ts.map b/dist/types/data-index/data-index.d.ts.map index ce076b1..21217bf 100644 --- a/dist/types/data-index/data-index.d.ts.map +++ b/dist/types/data-index/data-index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"data-index.d.ts","sourceRoot":"","sources":["../ts/data-index/data-index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,gBAAgB,EAAa,eAAe,EAAwD,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAC1J,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAmB,cAAc,EAAE,qBAAqB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGrH,OAAO,EAAE,mCAAmC,EAAE,MAAM,4CAA4C,CAAC;AAEjG,OAAO,EAAoB,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AA+HtE,qBAAa,SAAS;IAgEN,SAAS,CAAC,OAAO,EAAE,OAAO;IA/DtC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,SAAS,CAAC,CAAC;IAEzD,MAAM,KAAK,KAAK;;;;;;;;MAUf;IAEM,KAAK,SAAwB;IAEpC;;OAEG;IACI,IAAI,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACI,GAAG,EAAE,MAAM,CAAC;IAEZ,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IACnC,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,YAAY,CAQjB;IACH,OAAO,CAAC,MAAM,CAMR;IACN,OAAO,CAAC,qBAAqB,CAI3B;IACF,OAAO,CAAC,KAAK,CAEX;IACF,OAAO,CAAC,IAAI,CAAC,CAAwC;IAErD,OAAO,CAAC,SAAS,CAAC,CAAS;IAE3B;;OAEG;gBACmB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB;IAgCjG,IAAI,eAAe,aAElB;IAED,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,UAAQ;IAOhD,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG;IAiDzC,MAAM;IASN,KAAK;IAOX;;;;OAIG;WACU,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA2IjF,IAAI,IAAI,WAEP;IAED,IAAI,QAAQ,WAeX;IAED,IAAI,WAAW,WAQd;IAED,gBAAgB,CAAC,IAAI,EAAE,MAAM;IA8B7B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa;IAe3K,QAAQ,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,eAAe,CAAC;QAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,OAAO,IAAI,IAAI,CAAC;KAAE;IAqEjF,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,mCAAmC,EAAE;IA6CtF,mBAAmB;IAmBnB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA2EpH,KAAK,CAAC,IAAI,SAAc,EAAE,OAAO,SAAQ;IAIzC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,qBAAqB;IA0B5C,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,OAAO,CAAC;SAAE,CAAC,CAAA;KAAE,CAAM;IA6E/I,MAAM,KAAK,cAAc,aAExB;IACD,IAAI,cAAc,aAEjB;IAEK,KAAK,CAAC,EAAE,EAAE,0BAA0B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IACjE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,qBAAqB,EAAE,OAAO,CAAC,EAAE;QAC1D,sCAAsC;QACtC,MAAM,CAAC,EAAE,iBAAiB,CAAA;KAC7B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAsJxB,KAAK,CAAC,OAAO,CAAC,EAAE;QAElB,WAAW,CAAC,EAAE,CACV,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,KAAK,IAAI,EACrG,KAAK,EAAE,OAAO,EAAE,qBAAqB;QACrC,aAAa,EAAE,kBAAkB,EACjC,QAAQ,CAAC,EAAE,aAAa,EACxB,GAAG,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,KAChF,IAAI,CAAC;QACV,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;KACxB;IAozBD,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO;IAE3C,OAAO,CAAC,oBAAoB;YAmLd,iBAAiB;IAkBzB,WAAW,CAAC,OAAO,EAAE,gBAAgB;IAkFrC,QAAQ,CAAE,QAAQ,GAAE,QAAQ,GAAC,WAAyB;;QAkCpD,wDAAwD;;QASxD,sCAAsC;;;CAMjD"} \ No newline at end of file +{"version":3,"file":"data-index.d.ts","sourceRoot":"","sources":["../../../src/data-index/data-index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/types/data-index/fulltext-index-query-hint.d.ts.map b/dist/types/data-index/fulltext-index-query-hint.d.ts.map index 40e26a8..04250b5 100644 --- a/dist/types/data-index/fulltext-index-query-hint.d.ts.map +++ b/dist/types/data-index/fulltext-index-query-hint.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"fulltext-index-query-hint.d.ts","sourceRoot":"","sources":["../ts/data-index/fulltext-index-query-hint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,qBAAa,sBAAuB,SAAQ,cAAc;IACtD,MAAM,KAAK,KAAK;;;;OAMf;gBAEW,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO;IAInE,IAAI,WAAW,WAed;CACJ"} \ No newline at end of file +{"version":3,"file":"fulltext-index-query-hint.d.ts","sourceRoot":"","sources":["../../../src/data-index/fulltext-index-query-hint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,qBAAa,sBAAuB,SAAQ,cAAc;IACtD,MAAM,KAAK,KAAK;;;;OAMf;gBAEW,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO;IAInE,IAAI,WAAW,WAed;CACJ"} \ No newline at end of file diff --git a/dist/types/data-index/fulltext-index.d.ts.map b/dist/types/data-index/fulltext-index.d.ts.map index 2cedd5d..71c1077 100644 --- a/dist/types/data-index/fulltext-index.d.ts.map +++ b/dist/types/data-index/fulltext-index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"fulltext-index.d.ts","sourceRoot":"","sources":["../ts/data-index/fulltext-index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"fulltext-index.d.ts","sourceRoot":"","sources":["../../../src/data-index/fulltext-index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/types/data-index/geo-index.d.ts.map b/dist/types/data-index/geo-index.d.ts.map index c4c6c92..22c51b9 100644 --- a/dist/types/data-index/geo-index.d.ts.map +++ b/dist/types/data-index/geo-index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"geo-index.d.ts","sourceRoot":"","sources":["../ts/data-index/geo-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAwHjD,qBAAa,QAAS,SAAQ,SAAS;gBACvB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB;IASlF,IAAI,IAAI,WAEP;IAEK,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO;IAa3E,KAAK;IAmBL,MAAM,KAAK,cAAc,aAExB;IAED,IAAI,cAAc,aAEjB;IAED,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IA0B7E,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,0BAA0B,EAAE,GAAG,CAAC,EAAE,qBAAqB,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,iBAAiB,CAAC;KAAE;IAiB3H;;OAEG;IACG,MAAM,CACR,GAAG,EAAE;QACD;;WAEG;QACH,GAAG,EAAE,MAAM,CAAC;QAEZ;;WAEG;QACH,IAAI,EAAE,MAAM,CAAC;QAEb;;WAEG;QACH,MAAM,EAAE,MAAM,CAAC;KAClB,GACF,OAAO,CAAC,iBAAiB,CAAC;CAuChC"} \ No newline at end of file +{"version":3,"file":"geo-index.d.ts","sourceRoot":"","sources":["../../../src/data-index/geo-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAwHjD,qBAAa,QAAS,SAAQ,SAAS;gBACvB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB;IASlF,IAAI,IAAI,WAEP;IAEK,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO;IAa3E,KAAK;IAmBL,MAAM,KAAK,cAAc,aAExB;IAED,IAAI,cAAc,aAEjB;IAED,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IA0B7E,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,0BAA0B,EAAE,GAAG,CAAC,EAAE,qBAAqB,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,iBAAiB,CAAC;KAAE;IAiB3H;;OAEG;IACG,MAAM,CACR,GAAG,EAAE;QACD;;WAEG;QACH,GAAG,EAAE,MAAM,CAAC;QAEZ;;WAEG;QACH,IAAI,EAAE,MAAM,CAAC;QAEb;;WAEG;QACH,MAAM,EAAE,MAAM,CAAC;KAClB,GACF,OAAO,CAAC,iBAAiB,CAAC;CAuChC"} \ No newline at end of file diff --git a/dist/types/data-index/index.d.ts.map b/dist/types/data-index/index.d.ts.map index fe75d0b..8dfae8d 100644 --- a/dist/types/data-index/index.d.ts.map +++ b/dist/types/data-index/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../ts/data-index/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data-index/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"} \ No newline at end of file diff --git a/dist/types/data-index/options.d.ts.map b/dist/types/data-index/options.d.ts.map index dd2992f..f4d903a 100644 --- a/dist/types/data-index/options.d.ts.map +++ b/dist/types/data-index/options.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../ts/data-index/options.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC7B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB"} \ No newline at end of file +{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/data-index/options.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC7B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB"} \ No newline at end of file diff --git a/dist/types/data-index/query-hint.d.ts.map b/dist/types/data-index/query-hint.d.ts.map index 33b8164..ee10c50 100644 --- a/dist/types/data-index/query-hint.d.ts.map +++ b/dist/types/data-index/query-hint.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"query-hint.d.ts","sourceRoot":"","sources":["../ts/data-index/query-hint.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAc;IACJ,IAAI,EAAE,MAAM;IAAS,KAAK,EAAE,OAAO;gBAAnC,IAAI,EAAE,MAAM,EAAS,KAAK,EAAE,OAAO;CACzD"} \ No newline at end of file +{"version":3,"file":"query-hint.d.ts","sourceRoot":"","sources":["../../../src/data-index/query-hint.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAc;IACJ,IAAI,EAAE,MAAM;IAAS,KAAK,EAAE,OAAO;gBAAnC,IAAI,EAAE,MAAM,EAAS,KAAK,EAAE,OAAO;CACzD"} \ No newline at end of file diff --git a/dist/types/data-index/query-results.d.ts.map b/dist/types/data-index/query-results.d.ts.map index f59822b..ff15ca6 100644 --- a/dist/types/data-index/query-results.d.ts.map +++ b/dist/types/data-index/query-results.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"query-results.d.ts","sourceRoot":"","sources":["../ts/data-index/query-results.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEhF,qBAAa,gBAAgB;IAEN,GAAG,EAAE,MAAM,GAAG,MAAM;IAAS,IAAI,EAAE,MAAM;IAAS,KAAK,EAAE,cAAc;IAAS,QAAQ,EAAE,aAAa;IADnH,MAAM,EAAE,uBAAuB,EAAE,CAAC;gBACtB,GAAG,EAAE,MAAM,GAAG,MAAM,EAAS,IAAI,EAAE,MAAM,EAAS,KAAK,EAAE,cAAc,EAAS,QAAQ,EAAE,aAAa;CAC7H;AAED,qBAAa,iBAAkB,SAAQ,KAAK,CAAC,gBAAgB,CAAC;IAE1D,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,EAAE,EAAE,SAAS,EAAE,MAAM;IAO9E,WAAW,EAAE,uBAAuB,EAAE,CAAC;IACvC,KAAK,mBAA0B;IAC/B,KAAK,kBAA2B;IAEhC,SAAS,EAAE,MAAM,CAAC;IAgBzB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB;gBAyDnE,MAAM,EAAE,MAAM;gBACd,GAAG,OAAO,EAAE,gBAAgB,EAAE;CAK7C"} \ No newline at end of file +{"version":3,"file":"query-results.d.ts","sourceRoot":"","sources":["../../../src/data-index/query-results.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEhF,qBAAa,gBAAgB;IAEN,GAAG,EAAE,MAAM,GAAG,MAAM;IAAS,IAAI,EAAE,MAAM;IAAS,KAAK,EAAE,cAAc;IAAS,QAAQ,EAAE,aAAa;IADnH,MAAM,EAAE,uBAAuB,EAAE,CAAC;gBACtB,GAAG,EAAE,MAAM,GAAG,MAAM,EAAS,IAAI,EAAE,MAAM,EAAS,KAAK,EAAE,cAAc,EAAS,QAAQ,EAAE,aAAa;CAC7H;AAED,qBAAa,iBAAkB,SAAQ,KAAK,CAAC,gBAAgB,CAAC;IAE1D,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,EAAE,EAAE,SAAS,EAAE,MAAM;IAO9E,WAAW,EAAE,uBAAuB,EAAE,CAAC;IACvC,KAAK,mBAA0B;IAC/B,KAAK,kBAA2B;IAEhC,SAAS,EAAE,MAAM,CAAC;IAgBzB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB;gBAyDnE,MAAM,EAAE,MAAM;gBACd,GAAG,OAAO,EAAE,gBAAgB,EAAE;CAK7C"} \ No newline at end of file diff --git a/dist/types/data-index/query-stats.d.ts.map b/dist/types/data-index/query-stats.d.ts.map index d06b9f5..8e185c4 100644 --- a/dist/types/data-index/query-stats.d.ts.map +++ b/dist/types/data-index/query-stats.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"query-stats.d.ts","sourceRoot":"","sources":["../ts/data-index/query-stats.ts"],"names":[],"mappings":"AACA,qBAAa,eAAe;IAWL,IAAI,EAAE,MAAM;IAAS,IAAI,EAAE,OAAO;IAV9C,OAAO,SAAK;IACZ,OAAO,SAAK;IACZ,KAAK,oBAA2B;IAChC,MAAM,MAAe;IAE5B;;OAEG;IACI,OAAO,SAAK;gBAEA,IAAI,EAAE,MAAM,EAAS,IAAI,EAAE,OAAO,EAAE,KAAK,UAAQ;IAMpE,KAAK;IAIL,IAAI,CAAC,MAAM,GAAE,GAAU;IAKvB,IAAI,QAAQ,WAA0C;CACzD"} \ No newline at end of file +{"version":3,"file":"query-stats.d.ts","sourceRoot":"","sources":["../../../src/data-index/query-stats.ts"],"names":[],"mappings":"AACA,qBAAa,eAAe;IAWL,IAAI,EAAE,MAAM;IAAS,IAAI,EAAE,OAAO;IAV9C,OAAO,SAAK;IACZ,OAAO,SAAK;IACZ,KAAK,oBAA2B;IAChC,MAAM,MAAe;IAE5B;;OAEG;IACI,OAAO,SAAK;gBAEA,IAAI,EAAE,MAAM,EAAS,IAAI,EAAE,OAAO,EAAE,KAAK,UAAQ;IAMpE,KAAK;IAIL,IAAI,CAAC,MAAM,GAAE,GAAU;IAKvB,IAAI,QAAQ,WAA0C;CACzD"} \ No newline at end of file diff --git a/dist/types/data-index/shared.d.ts.map b/dist/types/data-index/shared.d.ts.map index c08cae5..a8f9e56 100644 --- a/dist/types/data-index/shared.d.ts.map +++ b/dist/types/data-index/shared.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../ts/data-index/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,oBAAY,eAAe,GAAG,KAAK,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,oBAAY,cAAc,GAAG,gBAAgB,CAAC;AAC9C,oBAAY,qBAAqB,GAAG,cAAc,GAAG,cAAc,EAAE,CAAC;AACtE,oBAAY,kBAAkB,GAAG,sBAAsB,CAAC;AACxD,oBAAY,aAAa,GAAG,iBAAiB,CAAC"} \ No newline at end of file +{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/data-index/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,oBAAY,eAAe,GAAG,KAAK,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,oBAAY,cAAc,GAAG,gBAAgB,CAAC;AAC9C,oBAAY,qBAAqB,GAAG,cAAc,GAAG,cAAc,EAAE,CAAC;AACtE,oBAAY,kBAAkB,GAAG,sBAAsB,CAAC;AACxD,oBAAY,aAAa,GAAG,iBAAiB,CAAC"} \ No newline at end of file diff --git a/dist/types/detailed-error.d.ts.map b/dist/types/detailed-error.d.ts.map index effa3e4..59dd68f 100644 --- a/dist/types/detailed-error.d.ts.map +++ b/dist/types/detailed-error.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"detailed-error.d.ts","sourceRoot":"","sources":["ts/detailed-error.ts"],"names":[],"mappings":"AACA,qBAAa,aAAc,SAAQ,KAAK;IAEpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,aAAa,EAAE,aAAa,GAAC,KAAK,CAAC;IAE5C;;;;;OAKG;gBACS,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,GAAE,aAAa,GAAG,KAAY;IAMtF,IAAI,KAAK,aAQR;IAED,IAAI,MAAM,WAQT;IAED,YAAY,CAAC,IAAI,EAAE,MAAM;IAUzB,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM;CAI/C"} \ No newline at end of file +{"version":3,"file":"detailed-error.d.ts","sourceRoot":"","sources":["../../src/detailed-error.ts"],"names":[],"mappings":"AACA,qBAAa,aAAc,SAAQ,KAAK;IAEpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,aAAa,EAAE,aAAa,GAAC,KAAK,CAAC;IAE5C;;;;;OAKG;gBACS,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,GAAE,aAAa,GAAG,KAAY;IAMtF,IAAI,KAAK,aAQR;IAED,IAAI,MAAM,WAQT;IAED,YAAY,CAAC,IAAI,EAAE,MAAM;IAUzB,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM;CAI/C"} \ No newline at end of file diff --git a/dist/types/geohash.d.ts.map b/dist/types/geohash.d.ts.map index 3b41da2..54f206a 100644 --- a/dist/types/geohash.d.ts.map +++ b/dist/types/geohash.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"geohash.d.ts","sourceRoot":"","sources":["ts/geohash.ts"],"names":[],"mappings":"AAWA;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,QAAkB,MAAM,OAAO,MAAM,cAAc,MAAM,KAAG,MA2D9E,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,YAAsB,MAAM;SAAU,MAAM;SAAO,MAAM;CAiB3E,CAAC;AAGF;;;GAGG;AACH,eAAO,MAAM,MAAM,YAAsB,MAAM,KAAG;IAAE,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CA2CrH,CAAC;AAGF;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,YAAsB,MAAM,aAAa,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,WAkC1G,CAAC;AAGF;;;GAGG;AACH,eAAO,MAAM,UAAU,YAAsB,MAAM;;;;;;;;;CAWlD,CAAC"} \ No newline at end of file +{"version":3,"file":"geohash.d.ts","sourceRoot":"","sources":["../../src/geohash.ts"],"names":[],"mappings":"AAWA;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,QAAkB,MAAM,OAAO,MAAM,cAAc,MAAM,KAAG,MA2D9E,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,YAAsB,MAAM;SAAU,MAAM;SAAO,MAAM;CAiB3E,CAAC;AAGF;;;GAGG;AACH,eAAO,MAAM,MAAM,YAAsB,MAAM,KAAG;IAAE,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CA2CrH,CAAC;AAGF;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,YAAsB,MAAM,aAAa,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,WAkC1G,CAAC;AAGF;;;GAGG;AACH,eAAO,MAAM,UAAU,YAAsB,MAAM;;;;;;;;;CAWlD,CAAC"} \ No newline at end of file diff --git a/dist/types/index.d.ts.map b/dist/types/index.d.ts.map index 19f9bce..18a4c01 100644 --- a/dist/types/index.d.ts.map +++ b/dist/types/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["ts/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;EAiBE;AACF,OAAO,EACH,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,EAAE,EACF,WAAW,EACX,YAAY,GACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EACH,OAAO,EACP,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,GAC3B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EACH,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,GAC7B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACH,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,GACxB,MAAM,WAAW,CAAC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;EAiBE;AACF,OAAO,EACH,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,EAAE,EACF,WAAW,EACX,YAAY,GACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EACH,OAAO,EACP,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,GAC3B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EACH,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,GAC7B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACH,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,GACxB,MAAM,WAAW,CAAC"} \ No newline at end of file diff --git a/dist/types/ipc/browser.d.ts.map b/dist/types/ipc/browser.d.ts.map index ded96fb..1e72b8f 100644 --- a/dist/types/ipc/browser.d.ts.map +++ b/dist/types/ipc/browser.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../ts/ipc/browser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAkC,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIrC;;;;GAIG;AACH,qBAAa,OAAQ,SAAQ,cAAc;IAEvC,OAAO,CAAC,OAAO,CAAmB;gBAEtB,OAAO,EAAE,OAAO;IAyI5B,WAAW,CAAC,OAAO,EAAE,QAAQ;CAKhC"} \ No newline at end of file +{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/ipc/browser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAkC,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIrC;;;;GAIG;AACH,qBAAa,OAAQ,SAAQ,cAAc;IAEvC,OAAO,CAAC,OAAO,CAAmB;gBAEtB,OAAO,EAAE,OAAO;IAyI5B,WAAW,CAAC,OAAO,EAAE,QAAQ;CAKhC"} \ No newline at end of file diff --git a/dist/types/ipc/index.d.ts.map b/dist/types/ipc/index.d.ts.map index 26b7d38..19f081f 100644 --- a/dist/types/ipc/index.d.ts.map +++ b/dist/types/ipc/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../ts/ipc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAiB,QAAQ,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAgBhE;;;;GAIG;AACH,qBAAa,OAAQ,SAAQ,cAAc;gBAE3B,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IAqFrC,WAAW,CAAC,GAAG,EAAE,QAAQ;IAmBnB,IAAI,CAAC,IAAI,SAAI;CAI7B"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ipc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAiB,QAAQ,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAgBhE;;;;GAIG;AACH,qBAAa,OAAQ,SAAQ,cAAc;gBAE3B,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IAqFrC,WAAW,CAAC,GAAG,EAAE,QAAQ;IAmBnB,IAAI,CAAC,IAAI,SAAI;CAI7B"} \ No newline at end of file diff --git a/dist/types/ipc/ipc.d.ts.map b/dist/types/ipc/ipc.d.ts.map index 8be60f2..738c762 100644 --- a/dist/types/ipc/ipc.d.ts.map +++ b/dist/types/ipc/ipc.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ipc.d.ts","sourceRoot":"","sources":["../ts/ipc/ipc.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ipc.d.ts","sourceRoot":"","sources":["../../../src/ipc/ipc.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/types/ipc/remote.d.ts.map b/dist/types/ipc/remote.d.ts.map index fb3192a..008bb1e 100644 --- a/dist/types/ipc/remote.d.ts.map +++ b/dist/types/ipc/remote.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../ts/ipc/remote.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAerC,MAAM,WAAW,qBAAqB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,GAAC,QAAQ,CAAC;CAC3B;AASD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0EG;AACH,qBAAa,aAAc,SAAQ,cAAc;IAWf,OAAO,CAAC,MAAM;IAT5C,OAAO,KAAK,OAAO,GAAsB;IACzC,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,OAAO,CAGS;IACxB,OAAO,CAAC,UAAU,CAAO;gBAEb,OAAO,EAAE,OAAO,EAAU,MAAM,EAAE,qBAAqB;IAcnE,OAAO,CAAC,OAAO;IA+If,WAAW,CAAC,OAAO,EAAE,QAAQ;IAkBvB,KAAK,CAAC,MAAM,EAAE,KAAK,GAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;CAmCpE"} \ No newline at end of file +{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../../src/ipc/remote.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAerC,MAAM,WAAW,qBAAqB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,GAAC,QAAQ,CAAC;CAC3B;AASD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0EG;AACH,qBAAa,aAAc,SAAQ,cAAc;IAWf,OAAO,CAAC,MAAM;IAT5C,OAAO,KAAK,OAAO,GAAsB;IACzC,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,OAAO,CAGS;IACxB,OAAO,CAAC,UAAU,CAAO;gBAEb,OAAO,EAAE,OAAO,EAAU,MAAM,EAAE,qBAAqB;IAcnE,OAAO,CAAC,OAAO;IA+If,WAAW,CAAC,OAAO,EAAE,QAAQ;IAkBvB,KAAK,CAAC,MAAM,EAAE,KAAK,GAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;CAmCpE"} \ No newline at end of file diff --git a/dist/types/node-address.d.ts.map b/dist/types/node-address.d.ts.map index 25639af..4225966 100644 --- a/dist/types/node-address.d.ts.map +++ b/dist/types/node-address.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"node-address.d.ts","sourceRoot":"","sources":["ts/node-address.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAW;aACQ,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM;IAExC,QAAQ;IAIR;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,WAAW;CAG9B;AAED,qBAAa,kBAAmB,SAAQ,WAAW;gBACnC,IAAI,EAAE,MAAM;IAIxB,QAAQ;IAIR;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO;CAGxC"} \ No newline at end of file +{"version":3,"file":"node-address.d.ts","sourceRoot":"","sources":["../../src/node-address.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAW;aACQ,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM;IAExC,QAAQ;IAIR;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,WAAW;CAG9B;AAED,qBAAa,kBAAmB,SAAQ,WAAW;gBACnC,IAAI,EAAE,MAAM;IAIxB,QAAQ;IAIR;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO;CAGxC"} \ No newline at end of file diff --git a/dist/types/node-cache.d.ts.map b/dist/types/node-cache.d.ts.map index 4e0ad57..1f19986 100644 --- a/dist/types/node-cache.d.ts.map +++ b/dist/types/node-cache.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"node-cache.d.ts","sourceRoot":"","sources":["ts/node-cache.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAQxC,qBAAa,cAAc;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;gBAEJ,QAAQ,EAAE,QAAQ;IAO9B,SAAS;IAIT,MAAM,CAAC,QAAQ,EAAE,QAAQ;CAK5B;AAED;;GAEG;AACH,qBAAa,SAAS;IAClB,MAAM,KAAK,cAAc,WAA4B;IAErD,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,MAAM,CAAqC;IAE5C,GAAG,CAAC,GAAG,EAAE,MAAM;IAItB;;OAEG;IACH,OAAO,CAAC,cAAc,CAA2H;IAEjJ,OAAO,CAAC,qBAAqB;IAiB7B,QAAQ,CAAC,IAAI,EAAE,MAAM;IAgBrB;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,QAAQ;IA4BzB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAC,YAAY,CAAA;KAAE,EAAE,MAAM,EAAE,MAAM;IA6BtG;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM;IAkBnB,OAAO;IAaP,KAAK;IAIL;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,UAAQ,GAAG,QAAQ,GAAC,OAAO,CAAC,QAAQ,CAAC;CA4CzE"} \ No newline at end of file +{"version":3,"file":"node-cache.d.ts","sourceRoot":"","sources":["../../src/node-cache.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAQxC,qBAAa,cAAc;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;gBAEJ,QAAQ,EAAE,QAAQ;IAO9B,SAAS;IAIT,MAAM,CAAC,QAAQ,EAAE,QAAQ;CAK5B;AAED;;GAEG;AACH,qBAAa,SAAS;IAClB,MAAM,KAAK,cAAc,WAA4B;IAErD,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,MAAM,CAAqC;IAE5C,GAAG,CAAC,GAAG,EAAE,MAAM;IAItB;;OAEG;IACH,OAAO,CAAC,cAAc,CAA2H;IAEjJ,OAAO,CAAC,qBAAqB;IAiB7B,QAAQ,CAAC,IAAI,EAAE,MAAM;IAgBrB;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,QAAQ;IA4BzB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAC,YAAY,CAAA;KAAE,EAAE,MAAM,EAAE,MAAM;IA6BtG;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM;IAkBnB,OAAO;IAaP,KAAK;IAIL;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,UAAQ,GAAG,QAAQ,GAAC,OAAO,CAAC,QAAQ,CAAC;CA4CzE"} \ No newline at end of file diff --git a/dist/types/node-changes.d.ts.map b/dist/types/node-changes.d.ts.map index 07a2e2c..02d3c95 100644 --- a/dist/types/node-changes.d.ts.map +++ b/dist/types/node-changes.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"node-changes.d.ts","sourceRoot":"","sources":["ts/node-changes.ts"],"names":[],"mappings":"AAAA,aAAK,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAQlC,qBAAa,UAAU;IAKA,UAAU,EAAE,MAAM,GAAG,MAAM;IAAS,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ;IAAS,QAAQ,EAAE,OAAO;IAAS,QAAQ,EAAE,OAAO;IAJrJ,MAAM,KAAK,WAAW;;;;OAErB;gBAEkB,UAAU,EAAE,MAAM,GAAG,MAAM,EAAS,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EAAS,QAAQ,EAAE,OAAO,EAAS,QAAQ,EAAE,OAAO;CAExJ;AAED,qBAAa,iBAAiB;IAKP,IAAI,EAAE,MAAM;IAJ/B,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,SAAS,CAA0B;gBAExB,IAAI,EAAE,MAAM;IAG/B,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO;IAKnD,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO;IAKtE,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO;IAKnD,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO;IAepE,IAAI,OAAO,iBAEV;IACD,IAAI,OAAO,iBAEV;IACD,IAAI,OAAO,iBAEV;IACD,IAAI,GAAG,iBAEN;IACD,IAAI,YAAY,WAEf;IACD,GAAG,CAAC,UAAU,EAAE,UAAU;IAG1B,UAAU,CAAC,UAAU,EAAE,UAAU;IAIjC,IAAI,QAAQ,4BASX;IACD,IAAI,QAAQ,CAAC,KAAK,yBAAA,EAEjB;IAED,IAAI,QAAQ,4BASX;IACD,IAAI,QAAQ,CAAC,KAAK,yBAAA,EAEjB;IAED,IAAI,WAAW,YAId;IAED,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAoBnG"} \ No newline at end of file +{"version":3,"file":"node-changes.d.ts","sourceRoot":"","sources":["../../src/node-changes.ts"],"names":[],"mappings":"AAAA,aAAK,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAQlC,qBAAa,UAAU;IAKA,UAAU,EAAE,MAAM,GAAG,MAAM;IAAS,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ;IAAS,QAAQ,EAAE,OAAO;IAAS,QAAQ,EAAE,OAAO;IAJrJ,MAAM,KAAK,WAAW;;;;OAErB;gBAEkB,UAAU,EAAE,MAAM,GAAG,MAAM,EAAS,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EAAS,QAAQ,EAAE,OAAO,EAAS,QAAQ,EAAE,OAAO;CAExJ;AAED,qBAAa,iBAAiB;IAKP,IAAI,EAAE,MAAM;IAJ/B,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,SAAS,CAA0B;gBAExB,IAAI,EAAE,MAAM;IAG/B,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO;IAKnD,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO;IAKtE,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO;IAKnD,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO;IAepE,IAAI,OAAO,iBAEV;IACD,IAAI,OAAO,iBAEV;IACD,IAAI,OAAO,iBAEV;IACD,IAAI,GAAG,iBAEN;IACD,IAAI,YAAY,WAEf;IACD,GAAG,CAAC,UAAU,EAAE,UAAU;IAG1B,UAAU,CAAC,UAAU,EAAE,UAAU;IAIjC,IAAI,QAAQ,4BASX;IACD,IAAI,QAAQ,CAAC,KAAK,yBAAA,EAEjB;IAED,IAAI,QAAQ,4BASX;IACD,IAAI,QAAQ,CAAC,KAAK,yBAAA,EAEjB;IAED,IAAI,WAAW,YAId;IAED,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAoBnG"} \ No newline at end of file diff --git a/dist/types/node-errors.d.ts.map b/dist/types/node-errors.d.ts.map index 4c86d2a..c13dcbd 100644 --- a/dist/types/node-errors.d.ts.map +++ b/dist/types/node-errors.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"node-errors.d.ts","sourceRoot":"","sources":["ts/node-errors.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAkB,SAAQ,KAAK;CAAG;AAC/C,qBAAa,iBAAkB,SAAQ,KAAK;CAAG"} \ No newline at end of file +{"version":3,"file":"node-errors.d.ts","sourceRoot":"","sources":["../../src/node-errors.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAkB,SAAQ,KAAK;CAAG;AAC/C,qBAAa,iBAAkB,SAAQ,KAAK;CAAG"} \ No newline at end of file diff --git a/dist/types/node-info.d.ts.map b/dist/types/node-info.d.ts.map index 2b10adf..dd5b673 100644 --- a/dist/types/node-info.d.ts.map +++ b/dist/types/node-info.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"node-info.d.ts","sourceRoot":"","sources":["ts/node-info.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,qBAAa,QAAQ;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wCAAwC;IACxC,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;gBAER,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;IAwBnC,IAAI,SAAS,WAEZ;IAED,IAAI,aAAa,sGAEhB;IAED,QAAQ;CAWX"} \ No newline at end of file +{"version":3,"file":"node-info.d.ts","sourceRoot":"","sources":["../../src/node-info.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,qBAAa,QAAQ;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wCAAwC;IACxC,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;gBAER,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;IAwBnC,IAAI,SAAS,WAEZ;IAED,IAAI,aAAa,sGAEhB;IAED,QAAQ;CAWX"} \ No newline at end of file diff --git a/dist/types/node-lock.d.ts.map b/dist/types/node-lock.d.ts.map index 13f1708..2055fd3 100644 --- a/dist/types/node-lock.d.ts.map +++ b/dist/types/node-lock.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"node-lock.d.ts","sourceRoot":"","sources":["ts/node-lock.ts"],"names":[],"mappings":";AAAA,OAAO,EAAgB,WAAW,EAAE,MAAM,cAAc,CAAC;AAKzD,eAAO,MAAM,UAAU;;;;;CAKtB,CAAC;AAEF,qBAAa,UAAU;IAEnB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,QAAQ,CAAK;IAErB;;OAEG;IACH,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,KAAK,CAAc;IACpB,OAAO,EAAE,MAAM,CAAC;IAEvB;;OAEG;gBACS,KAAK,EAAE,WAAW,EAAE,WAAW,SAAuB;IAKlE,UAAU,CAAC,OAAO,EAAE,MAAM;IAI1B,SAAS;IAIT,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAC,MAAM,EAAE,UAAU,EAAE,OAAO;;;;IA2BhE,IAAI;IAOJ;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK;IAWtC,iBAAiB;IAwCjB;;;;;;OAMG;IACG,IAAI,CACN,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,UAAU,CAAC,EAAE,OAAO,EACpB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAC1D,OAAO,CAAC,QAAQ,CAAC;IACd,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IA8F7C,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,UAAO;IA0BhF,IAAI;IAIJ,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,OAAO;CAGpE;AAGD,qBAAa,QAAQ;IA0Bb,OAAO,CAAC,MAAM;IACP,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,MAAM;IACX,UAAU,EAAE,OAAO;IACnB,QAAQ;IA5BnB,MAAM,KAAK,UAAU;;;;;MAAyB;IAE9C,KAAK,SAAsB;IAC3B,SAAS,EAAE,MAAM,CAAc;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,SAAM;IACb,UAAU,EAAE,QAAQ,CAAQ;IAC5B,EAAE,EAAE,MAAM,CAAY;IACtB,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAM;IACxF,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;IAExB,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAClC,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAE7B;;;;;;;OAOG;gBAES,MAAM,EAAE,UAAU,EACnB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,OAAO,EACnB,QAAQ,UAAQ;IAGrB,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM;IAMxB,YAAY;CAoDrB"} \ No newline at end of file +{"version":3,"file":"node-lock.d.ts","sourceRoot":"","sources":["../../src/node-lock.ts"],"names":[],"mappings":";AAAA,OAAO,EAAgB,WAAW,EAAE,MAAM,cAAc,CAAC;AAKzD,eAAO,MAAM,UAAU;;;;;CAKtB,CAAC;AAEF,qBAAa,UAAU;IAEnB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,QAAQ,CAAK;IAErB;;OAEG;IACH,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,KAAK,CAAc;IACpB,OAAO,EAAE,MAAM,CAAC;IAEvB;;OAEG;gBACS,KAAK,EAAE,WAAW,EAAE,WAAW,SAAuB;IAKlE,UAAU,CAAC,OAAO,EAAE,MAAM;IAI1B,SAAS;IAIT,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAC,MAAM,EAAE,UAAU,EAAE,OAAO;;;;IA2BhE,IAAI;IAOJ;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK;IAWtC,iBAAiB;IAwCjB;;;;;;OAMG;IACG,IAAI,CACN,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,UAAU,CAAC,EAAE,OAAO,EACpB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAC1D,OAAO,CAAC,QAAQ,CAAC;IACd,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IA8F7C,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,UAAO;IA0BhF,IAAI;IAIJ,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,OAAO;CAGpE;AAGD,qBAAa,QAAQ;IA0Bb,OAAO,CAAC,MAAM;IACP,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,MAAM;IACX,UAAU,EAAE,OAAO;IACnB,QAAQ;IA5BnB,MAAM,KAAK,UAAU;;;;;MAAyB;IAE9C,KAAK,SAAsB;IAC3B,SAAS,EAAE,MAAM,CAAc;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,SAAM;IACb,UAAU,EAAE,QAAQ,CAAQ;IAC5B,EAAE,EAAE,MAAM,CAAY;IACtB,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAM;IACxF,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;IAExB,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAClC,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAE7B;;;;;;;OAOG;gBAES,MAAM,EAAE,UAAU,EACnB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,OAAO,EACnB,QAAQ,UAAQ;IAGrB,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM;IAMxB,YAAY;CAoDrB"} \ No newline at end of file diff --git a/dist/types/node-transaction.d.ts.map b/dist/types/node-transaction.d.ts.map index 85c45b2..0da029f 100644 --- a/dist/types/node-transaction.d.ts.map +++ b/dist/types/node-transaction.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"node-transaction.d.ts","sourceRoot":"","sources":["ts/node-transaction.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"node-transaction.d.ts","sourceRoot":"","sources":["../../src/node-transaction.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/types/node-value-types.d.ts.map b/dist/types/node-value-types.d.ts.map index c5b2718..06e2adf 100644 --- a/dist/types/node-value-types.d.ts.map +++ b/dist/types/node-value-types.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"node-value-types.d.ts","sourceRoot":"","sources":["ts/node-value-types.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW;;;;;;;;;;EActB,CAAC;AAEH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,qGAcjD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,yBAS9C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,qCAY1C"} \ No newline at end of file +{"version":3,"file":"node-value-types.d.ts","sourceRoot":"","sources":["../../src/node-value-types.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW;;;;;;;;;;EActB,CAAC;AAEH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,qGAcjD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,yBAS9C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,qCAY1C"} \ No newline at end of file diff --git a/dist/types/node.d.ts.map b/dist/types/node.d.ts.map index b5d68fa..d864f94 100644 --- a/dist/types/node.d.ts.map +++ b/dist/types/node.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["ts/node.ts"],"names":[],"mappings":"AAEA,qBAAa,IAAI;IACb,MAAM,KAAK,WAAW;;;;;;;;;;OAErB;CACJ"} \ No newline at end of file +{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/node.ts"],"names":[],"mappings":"AAEA,qBAAa,IAAI;IACb,MAAM,KAAK,WAAW;;;;;;;;;;OAErB;CACJ"} \ No newline at end of file diff --git a/dist/types/not-supported.d.ts b/dist/types/not-supported.d.ts new file mode 100644 index 0000000..4ef8dba --- /dev/null +++ b/dist/types/not-supported.d.ts @@ -0,0 +1 @@ +//# sourceMappingURL=not-supported.d.ts.map \ No newline at end of file diff --git a/dist/types/not-supported.d.ts.map b/dist/types/not-supported.d.ts.map new file mode 100644 index 0000000..740bbcf --- /dev/null +++ b/dist/types/not-supported.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"not-supported.d.ts","sourceRoot":"","sources":["../../src/not-supported.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/types/promise-fs/browser.d.ts.map b/dist/types/promise-fs/browser.d.ts.map index 3ed2026..69a0720 100644 --- a/dist/types/promise-fs/browser.d.ts.map +++ b/dist/types/promise-fs/browser.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../ts/promise-fs/browser.ts"],"names":[],"mappings":"AAAA,8BAAsB,GAAG;IACrB,MAAM,KAAK,aAAa,YAAoB;IAC5C,MAAM,KAAK,EAAE,IAAI,IAAI,CAAiB;CACzC"} \ No newline at end of file +{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/promise-fs/browser.ts"],"names":[],"mappings":"AAAA,8BAAsB,GAAG;IACrB,MAAM,KAAK,aAAa,YAAoB;IAC5C,MAAM,KAAK,EAAE,IAAI,IAAI,CAAiB;CACzC"} \ No newline at end of file diff --git a/dist/types/promise-fs/index.d.ts.map b/dist/types/promise-fs/index.d.ts.map index 8a47307..4ac9303 100644 --- a/dist/types/promise-fs/index.d.ts.map +++ b/dist/types/promise-fs/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../ts/promise-fs/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/promise-fs/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/types/query.d.ts.map b/dist/types/query.d.ts.map index 58dc21d..c19cf17 100644 --- a/dist/types/query.d.ts.map +++ b/dist/types/query.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["ts/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAgB,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,GAAG,EAA6B,KAAK,EAAE,YAAY,EAA2B,MAAM,cAAc,CAAC;AAGjH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC;;GAEG;AACH,aAAK,QAAQ,GAAG,GAAG,GAAG;IAClB,EAAE,EAAE,WAAW,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CACpB,CAAA;AAKD;;;;;;;GAOG;AACH,wBAAgB,KAAK,CACjB,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,YAAyH,GACnI,OAAO,CAAC;IACP,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,GAAG,CAAA;KAAE,CAAC,GAAG,MAAM,EAAE,CAAC;IACtD,OAAO,EAAE,GAAG,CAAC;IACb,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACxB,CAAC,CAwtBD"} \ No newline at end of file +{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAgB,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,GAAG,EAA6B,KAAK,EAAE,YAAY,EAA2B,MAAM,cAAc,CAAC;AAGjH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC;;GAEG;AACH,aAAK,QAAQ,GAAG,GAAG,GAAG;IAClB,EAAE,EAAE,WAAW,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CACpB,CAAA;AAKD;;;;;;;GAOG;AACH,wBAAgB,KAAK,CACjB,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,YAAyH,GACnI,OAAO,CAAC;IACP,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,GAAG,CAAA;KAAE,CAAC,GAAG,MAAM,EAAE,CAAC;IACtD,OAAO,EAAE,GAAG,CAAC;IACb,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACxB,CAAC,CAwtBD"} \ No newline at end of file diff --git a/dist/types/quicksort.d.ts.map b/dist/types/quicksort.d.ts.map index 3877555..b2f8688 100644 --- a/dist/types/quicksort.d.ts.map +++ b/dist/types/quicksort.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"quicksort.d.ts","sourceRoot":"","sources":["ts/quicksort.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,SAAS,GAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAsE,OAoCzJ"} \ No newline at end of file +{"version":3,"file":"quicksort.d.ts","sourceRoot":"","sources":["../../src/quicksort.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,SAAS,GAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAsE,OAoCzJ"} \ No newline at end of file diff --git a/dist/types/storage/binary/index.d.ts.map b/dist/types/storage/binary/index.d.ts.map index da8815a..fc7d05c 100644 --- a/dist/types/storage/binary/index.d.ts.map +++ b/dist/types/storage/binary/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/storage/binary/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/storage/binary/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/types/storage/binary/node-address.d.ts.map b/dist/types/storage/binary/node-address.d.ts.map index 6f85b25..11ea9f5 100644 --- a/dist/types/storage/binary/node-address.d.ts.map +++ b/dist/types/storage/binary/node-address.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"node-address.d.ts","sourceRoot":"","sources":["../../ts/storage/binary/node-address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,qBAAa,iBAAkB,SAAQ,WAAW;aAG1B,MAAM,EAAE,MAAM;aACd,QAAQ,EAAE,MAAM;gBAFhC,IAAI,EAAE,MAAM,EACI,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM;IAKpC,QAAQ;IAIR;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,iBAAiB;CAIpC"} \ No newline at end of file +{"version":3,"file":"node-address.d.ts","sourceRoot":"","sources":["../../../../src/storage/binary/node-address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,qBAAa,iBAAkB,SAAQ,WAAW;aAG1B,MAAM,EAAE,MAAM;aACd,QAAQ,EAAE,MAAM;gBAFhC,IAAI,EAAE,MAAM,EACI,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM;IAKpC,QAAQ;IAIR;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,iBAAiB;CAIpC"} \ No newline at end of file diff --git a/dist/types/storage/binary/node-info.d.ts.map b/dist/types/storage/binary/node-info.d.ts.map index c8320bb..69d682f 100644 --- a/dist/types/storage/binary/node-info.d.ts.map +++ b/dist/types/storage/binary/node-info.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"node-info.d.ts","sourceRoot":"","sources":["../../ts/storage/binary/node-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,qBAAa,cAAe,SAAQ,QAAQ;IACxC,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC/B"} \ No newline at end of file +{"version":3,"file":"node-info.d.ts","sourceRoot":"","sources":["../../../../src/storage/binary/node-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,qBAAa,cAAe,SAAQ,QAAQ;IACxC,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC/B"} \ No newline at end of file diff --git a/dist/types/storage/context.d.ts.map b/dist/types/storage/context.d.ts.map index a7dc622..71dd722 100644 --- a/dist/types/storage/context.d.ts.map +++ b/dist/types/storage/context.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../ts/storage/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,cAAc,CAAC;IACpB,OAAO,EAAE,SAAS,EAAE,CAAC;CACxB"} \ No newline at end of file +{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/storage/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,cAAc,CAAC;IACpB,OAAO,EAAE,SAAS,EAAE,CAAC;CACxB"} \ No newline at end of file diff --git a/dist/types/storage/create-index.d.ts.map b/dist/types/storage/create-index.d.ts.map index 4d9952d..adfef8e 100644 --- a/dist/types/storage/create-index.d.ts.map +++ b/dist/types/storage/create-index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"create-index.d.ts","sourceRoot":"","sources":["../ts/storage/create-index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAuC,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,WAAW,kBAAkB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,CAAC;IAE/C;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,MAAM,CAAC,EAAE,GAAG,CAAA;CACf;AAED;;;;EAIE;AACF,wBAAsB,WAAW,CAC7B,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,kBAAkB,GAC5B,OAAO,CAAC,SAAS,CAAC,CAoEpB"} \ No newline at end of file +{"version":3,"file":"create-index.d.ts","sourceRoot":"","sources":["../../../src/storage/create-index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAuC,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,WAAW,kBAAkB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,CAAC;IAE/C;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,MAAM,CAAC,EAAE,GAAG,CAAA;CACf;AAED;;;;EAIE;AACF,wBAAsB,WAAW,CAC7B,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,kBAAkB,GAC5B,OAAO,CAAC,SAAS,CAAC,CAoEpB"} \ No newline at end of file diff --git a/dist/types/storage/custom/helpers.d.ts.map b/dist/types/storage/custom/helpers.d.ts.map index 5b4de01..2bb1c6a 100644 --- a/dist/types/storage/custom/helpers.d.ts.map +++ b/dist/types/storage/custom/helpers.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../ts/storage/custom/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC;;GAEG;AACH,qBAAa,oBAAoB;IAC7B;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,SAAS;IAOtD;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM;IAInC;;;;;OAKG;IACH,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,SAAS;IAM3D;;;;OAIG;IACH,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM;IAIxC;;;;;;;;;;;;;OAaG;IACH,MAAM,KAAK,QAAQ,oBAElB;CACJ"} \ No newline at end of file +{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/storage/custom/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC;;GAEG;AACH,qBAAa,oBAAoB;IAC7B;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,SAAS;IAOtD;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM;IAInC;;;;;OAKG;IACH,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,SAAS;IAM3D;;;;OAIG;IACH,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM;IAIxC;;;;;;;;;;;;;OAaG;IACH,MAAM,KAAK,QAAQ,oBAElB;CACJ"} \ No newline at end of file diff --git a/dist/types/storage/custom/index.d.ts.map b/dist/types/storage/custom/index.d.ts.map index fbf12f2..f3c82c6 100644 --- a/dist/types/storage/custom/index.d.ts.map +++ b/dist/types/storage/custom/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/storage/custom/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/storage/custom/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/types/storage/custom/indexed-db/index.d.ts.map b/dist/types/storage/custom/indexed-db/index.d.ts.map index 3f835a7..aa893cd 100644 --- a/dist/types/storage/custom/indexed-db/index.d.ts.map +++ b/dist/types/storage/custom/indexed-db/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../ts/storage/custom/indexed-db/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAGtD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,OAAO,CAAC,wBAAwB,CAAM,WAuEnG"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/storage/custom/indexed-db/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAGtD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,OAAO,CAAC,wBAAwB,CAAM,WAuEnG"} \ No newline at end of file diff --git a/dist/types/storage/custom/indexed-db/settings.d.ts.map b/dist/types/storage/custom/indexed-db/settings.d.ts.map index c8bb9a0..ccf4533 100644 --- a/dist/types/storage/custom/indexed-db/settings.d.ts.map +++ b/dist/types/storage/custom/indexed-db/settings.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../ts/storage/custom/indexed-db/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAExC,qBAAa,wBAAyB,SAAQ,eAAe;IACzD;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;IAEvB;;;OAGG;IACH,YAAY,UAAS;IAErB;;;OAGG;IACH,YAAY,SAAM;IAElB;;;OAGG;IACH,OAAO,UAAS;gBAEJ,QAAQ,EAAE,OAAO,CAAC,wBAAwB,CAAC;CAY1D"} \ No newline at end of file +{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../../../src/storage/custom/indexed-db/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAExC,qBAAa,wBAAyB,SAAQ,eAAe;IACzD;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;IAEvB;;;OAGG;IACH,YAAY,UAAS;IAErB;;;OAGG;IACH,YAAY,SAAM;IAElB;;;OAGG;IACH,OAAO,UAAS;gBAEJ,QAAQ,EAAE,OAAO,CAAC,wBAAwB,CAAC;CAY1D"} \ No newline at end of file diff --git a/dist/types/storage/custom/indexed-db/transaction.d.ts.map b/dist/types/storage/custom/indexed-db/transaction.d.ts.map index 02837c4..1fc68ee 100644 --- a/dist/types/storage/custom/indexed-db/transaction.d.ts.map +++ b/dist/types/storage/custom/indexed-db/transaction.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../ts/storage/custom/indexed-db/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAwB,wBAAwB,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,IAAI,CAAC;AACpH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAgBvC,MAAM,WAAW,2BAA2B;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,EAAE,EAAE,WAAW,CAAC;IAChB,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC/C,GAAG,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,2BAA4B,SAAQ,wBAAwB;IAalD,OAAO,EAAE,2BAA2B;IAXvD,UAAU,UAAQ;IAElB,OAAO,CAAC,QAAQ,CAA0F;IAE1G;;;;;;OAMG;gBACgB,OAAO,EAAE,2BAA2B,EAAE,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE;IAKjG,kBAAkB,CAAC,KAAK,UAAQ;IAKhC,cAAc,CAAC,IAAI,EAAE,kBAAkB;;;;IAQjC,MAAM;IAuDN,QAAQ,CAAC,GAAG,EAAE,GAAG;IAKjB,GAAG,CAAC,IAAI,EAAE,MAAM;IA+BtB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB;IAK1C,MAAM,CAAC,IAAI,EAAE,MAAM;IAKb,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE;IAOpC,UAAU,CACN,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QACL,QAAQ,EAAE,OAAO,CAAC;QAClB,KAAK,EAAE,OAAO,CAAC;KAClB,EACD,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,EAC7C,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,0BAA0B,GAAC,kBAAkB,KAAK,OAAO;IAMtG,aAAa,CACT,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QACL,QAAQ,EAAE,OAAO,CAAC;QAClB,KAAK,EAAE,OAAO,CAAC;KAClB,EACD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,0BAA0B,KAAK,OAAO,EACnF,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,0BAA0B,GAAC,kBAAkB,KAAK,OAAO;IAMrG,cAAc,CACV,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QACL,QAAQ,EAAE,OAAO,CAAC;QAClB,KAAK,EAAE,OAAO,CAAC;QACf,WAAW,EAAE,OAAO,CAAC;KACxB,EACD,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,0BAA0B,KAAK,OAAO,EAC/E,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,0BAA0B,GAAC,kBAAkB,KAAK,OAAO;CAuEpG"} \ No newline at end of file +{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../../../src/storage/custom/indexed-db/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAwB,wBAAwB,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,IAAI,CAAC;AACpH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAgBvC,MAAM,WAAW,2BAA2B;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,EAAE,EAAE,WAAW,CAAC;IAChB,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC/C,GAAG,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,2BAA4B,SAAQ,wBAAwB;IAalD,OAAO,EAAE,2BAA2B;IAXvD,UAAU,UAAQ;IAElB,OAAO,CAAC,QAAQ,CAA0F;IAE1G;;;;;;OAMG;gBACgB,OAAO,EAAE,2BAA2B,EAAE,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE;IAKjG,kBAAkB,CAAC,KAAK,UAAQ;IAKhC,cAAc,CAAC,IAAI,EAAE,kBAAkB;;;;IAQjC,MAAM;IAuDN,QAAQ,CAAC,GAAG,EAAE,GAAG;IAKjB,GAAG,CAAC,IAAI,EAAE,MAAM;IA+BtB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB;IAK1C,MAAM,CAAC,IAAI,EAAE,MAAM;IAKb,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE;IAOpC,UAAU,CACN,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QACL,QAAQ,EAAE,OAAO,CAAC;QAClB,KAAK,EAAE,OAAO,CAAC;KAClB,EACD,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,EAC7C,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,0BAA0B,GAAC,kBAAkB,KAAK,OAAO;IAMtG,aAAa,CACT,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QACL,QAAQ,EAAE,OAAO,CAAC;QAClB,KAAK,EAAE,OAAO,CAAC;KAClB,EACD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,0BAA0B,KAAK,OAAO,EACnF,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,0BAA0B,GAAC,kBAAkB,KAAK,OAAO;IAMrG,cAAc,CACV,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QACL,QAAQ,EAAE,OAAO,CAAC;QAClB,KAAK,EAAE,OAAO,CAAC;QACf,WAAW,EAAE,OAAO,CAAC;KACxB,EACD,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,0BAA0B,KAAK,OAAO,EAC/E,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,0BAA0B,GAAC,kBAAkB,KAAK,OAAO;CAuEpG"} \ No newline at end of file diff --git a/dist/types/storage/custom/local-storage/index.d.ts.map b/dist/types/storage/custom/local-storage/index.d.ts.map index 7866aa4..331bc8b 100644 --- a/dist/types/storage/custom/local-storage/index.d.ts.map +++ b/dist/types/storage/custom/local-storage/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../ts/storage/custom/local-storage/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,CAAC;AAEzD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,OAAO,CAAC,oBAAoB,CAAM,WA+BlG"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/storage/custom/local-storage/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,CAAC;AAEzD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,OAAO,CAAC,oBAAoB,CAAM,WA+BlG"} \ No newline at end of file diff --git a/dist/types/storage/custom/local-storage/interface.d.ts.map b/dist/types/storage/custom/local-storage/interface.d.ts.map index bd5f57c..799f8ea 100644 --- a/dist/types/storage/custom/local-storage/interface.d.ts.map +++ b/dist/types/storage/custom/local-storage/interface.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../ts/storage/custom/local-storage/interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC7B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;CAClB"} \ No newline at end of file +{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../../../src/storage/custom/local-storage/interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC7B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;CAClB"} \ No newline at end of file diff --git a/dist/types/storage/custom/local-storage/settings.d.ts.map b/dist/types/storage/custom/local-storage/settings.d.ts.map index bb7ed8a..7092a7d 100644 --- a/dist/types/storage/custom/local-storage/settings.d.ts.map +++ b/dist/types/storage/custom/local-storage/settings.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../ts/storage/custom/local-storage/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,qBAAa,oBAAqB,SAAQ,eAAe;gBACzC,QAAQ,EAAE,OAAO,CAAC,oBAAoB,CAAC;IAcnD;;;OAGG;IACH,IAAI,UAAS;IAEb;;OAEG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAE5B;;;OAGG;IACH,YAAY,UAAS;IAErB;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;IAEvB;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,GAAG,EAAE,GAAG,CAAC;IAET;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CAChB"} \ No newline at end of file +{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../../../src/storage/custom/local-storage/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,qBAAa,oBAAqB,SAAQ,eAAe;gBACzC,QAAQ,EAAE,OAAO,CAAC,oBAAoB,CAAC;IAcnD;;;OAGG;IACH,IAAI,UAAS;IAEb;;OAEG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAE5B;;;OAGG;IACH,YAAY,UAAS;IAErB;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;IAEvB;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,GAAG,EAAE,GAAG,CAAC;IAET;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CAChB"} \ No newline at end of file diff --git a/dist/types/storage/custom/local-storage/transaction.d.ts.map b/dist/types/storage/custom/local-storage/transaction.d.ts.map index 89ee0fc..48625ec 100644 --- a/dist/types/storage/custom/local-storage/transaction.d.ts.map +++ b/dist/types/storage/custom/local-storage/transaction.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../ts/storage/custom/local-storage/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,wBAAwB,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,IAAI,CAAC;AACpH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,qBAAa,uBAAwB,SAAQ,wBAAwB;IAI9C,OAAO,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,gBAAgB,CAAA;KAAE;IAF9F,OAAO,CAAC,kBAAkB,CAAS;gBAEhB,OAAO,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,gBAAgB,CAAA;KAAE,EAAE,MAAM,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAC;IAKhI,MAAM;IAIN,QAAQ,CAAC,GAAG,EAAE,GAAG;IAIjB,GAAG,CAAC,IAAI,EAAE,MAAM;IAOhB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG;IAM1B,MAAM,CAAC,IAAI,EAAE,MAAM;IAKnB,UAAU,CAAC,IAAI,EAAE,MAAM,EACzB,OAAO,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAChD,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,EACxC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,GAAG,kBAAkB,KAAK,OAAO;IAqB3F,aAAa,CAAC,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAChD,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,EACxC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,GAAG,kBAAkB,KAAK,OAAO;IAqBjG;;OAEG;IACH,qBAAqB,CAAC,GAAG,EAAE,MAAM;IAIjC;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM;CAGpC"} \ No newline at end of file +{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../../../src/storage/custom/local-storage/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,wBAAwB,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,IAAI,CAAC;AACpH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,qBAAa,uBAAwB,SAAQ,wBAAwB;IAI9C,OAAO,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,gBAAgB,CAAA;KAAE;IAF9F,OAAO,CAAC,kBAAkB,CAAS;gBAEhB,OAAO,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,gBAAgB,CAAA;KAAE,EAAE,MAAM,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAC;IAKhI,MAAM;IAIN,QAAQ,CAAC,GAAG,EAAE,GAAG;IAIjB,GAAG,CAAC,IAAI,EAAE,MAAM;IAOhB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG;IAM1B,MAAM,CAAC,IAAI,EAAE,MAAM;IAKnB,UAAU,CAAC,IAAI,EAAE,MAAM,EACzB,OAAO,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAChD,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,EACxC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,GAAG,kBAAkB,KAAK,OAAO;IAqB3F,aAAa,CAAC,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAChD,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,EACxC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,GAAG,kBAAkB,KAAK,OAAO;IAqBjG;;OAEG;IACH,qBAAqB,CAAC,GAAG,EAAE,MAAM;IAIjC;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM;CAGpC"} \ No newline at end of file diff --git a/dist/types/storage/index.d.ts.map b/dist/types/storage/index.d.ts.map index 11e06d9..7f3aa62 100644 --- a/dist/types/storage/index.d.ts.map +++ b/dist/types/storage/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../ts/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,WAAW,EAAwC,kBAAkB,EAAoB,oBAAoB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGtL,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAGhD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAe,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAY5D,qBAAa,qBAAsB,SAAQ,KAAK;IACzB,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;CAGpC;AAED,MAAM,WAAW,gBAAgB;IAC7B,SAAS,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;QAAC,IAAI,EAAE,GAAG,CAAC;QAAC,GAAG,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;CAC1E;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IAEd;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACnC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,eAAe;IAExB;;;OAGG;IACH,kBAAkB,SAAM;IAExB;;;OAGG;IACH,oBAAoB,UAAS;IAE7B;;;OAGG;IACH,IAAI,SAAO;IAEX;;;OAGG;IACH,WAAW,SAAO;IAElB;;;OAGG;IACH,IAAI,SAAU;IAEd;;;OAGG;IACH,QAAQ,UAAS;IAEjB;;OAEG;IACH,GAAG,CAAC,EAAE,iBAAiB,CAAC;IAExB;;OAEG;IACH,YAAY,CAAC,EAAE,sBAAsB,CAAC;gBAE1B,QAAQ,GAAE,OAAO,CAAC,eAAe,CAAM;CAUtD;AAED,MAAM,WAAW,UAAU;IACvB,QAAQ,EAAE,YAAY,CAAC;CAC1B;AAED,oBAAY,oBAAoB,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;AAElH,oBAAY,4BAA4B,GAAG,oBAAoB,GAAI;IAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AAE7F,qBAAa,OAAQ,SAAQ,kBAAkB;IAwBxB,IAAI,EAAE,MAAM;IAAS,QAAQ,EAAE,eAAe;IAtB1D,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,GAAG,CAAC;IAEX,GAAG,EAAE,OAAO,GAAG,aAAa,CAAC;IAC7B,UAAU,EAAE;QACf,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;KAClG,CAAC;IAEF,OAAO,CAAC,QAAQ,CAAS;IACzB,SAAS;IAKT,OAAO,CAAC,QAAQ,CAAyD;IAEzE;;;;;OAKG;gBACgB,IAAI,EAAE,MAAM,EAAS,QAAQ,EAAE,eAAe,EAAE,GAAG,EAAE,UAAU;IAuClF,OAAO,CAAC,QAAQ,CAAmB;IAC5B,OAAO;QACV;;;;WAIG;;uBAMO,MAAM,OACP,MAAM,YACF,kBAAkB;QAQ/B;;WAEG;oBACS,MAAM,QAAO,MAAM;QAY/B;;WAEG;6BACkB,MAAM;;;;QA2B3B;;WAEG;;QAKH;;WAEG;;wBA+BmB,MAAM;QAY5B;;WAEG;2BACsB,MAAM;QAM/B;;;WAGG;2BACsB,MAAM;;MAajC;IAGF,OAAO,CAAC,mBAAmB,CAAsG;IAC1H,aAAa;QAChB;;;;;WAKG;oBACS,MAAM,QAAQ,MAAM,YAAY,oBAAoB;QAahE;;;;;WAKG;uBACY,MAAM,SAAS,MAAM,aAAa,oBAAoB;QAarE;;;WAGG;yCAC8B,MAAM;QAKvC;;;WAGG;2CACgC,MAAM;kBAOQ,MAAM;uBAAa,MAAM;sBAAY,MAAM;8BAAoB,MAAM;;QAoCtH;;WAEG;yCAC8B,MAAM;kBAEK,MAAM;uBAAa,MAAM;sBAAY,MAAM;8BAAoB,MAAM;;QA8CjH;;;;;;;;WAQG;yBACc,MAAM,QAAQ,MAAM,YAAY,MAAM,YAAY,GAAG,YAAY,GAAG,WAAW,GAAG;MAgBrG;IAGF;;;;;;OAMG;IACH,eAAe,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG;IAEnF,KAAK;IAKX,IAAI,IAAI,WAEP;IAED;;;;OAIG;IACH,eAAe,CAAC,KAAK,EAAE,GAAG;IA8B1B;;OAEG;IAEH,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5F,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO;;;;;;;;;;;;;;;;uBAkCY,MAAM,MAAM,GAAG,MAAM,CAAC;;;;IAgCvF;;;;OAIG;IACG,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,GAAE,OAAO,CAAC;QACpE,KAAK,EAAE,OAAO,CAAC;QACf,WAAW,EAAE,OAAO,CAAC;QACrB,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;QACrB,oBAAoB,EAAE,MAAM,GAAG,CAAC;QAChC,mBAAmB,EAAE,OAAO,CAAC;QAC7B,eAAe,EAAE,OAAO,CAAC;QACzB,OAAO,EAAE,GAAG,CAAC;QACb,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC/C,YAAY,EAAE,GAAG,CAAA;KACpB,CAMA,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA0e7B;;;;;OAKG;IAEH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAChC;;WAEG;QACH,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QAChC;;WAEG;QACH,GAAG,CAAC,EAAE,MAAM,GAAC,MAAM,CAAC;QACpB;;WAEG;QACH,KAAK,CAAC,EAAE,OAAO,CAAC;KACnB,GAAG;QAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,GAAC,IAAI,GAAC,OAAO,CAAC,OAAO,GAAC,IAAI,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;KAAC;IAIpG;;;;;OAKG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,4BAAiC,GAAG,OAAO,CAAC,GAAG,CAAC;IAK1F;;;;OAIG;IAEH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,4BAA4B,GAAG,OAAO,CAAC;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAI1H;;;;OAIG;IAEH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QACxC;;WAEG;QACH,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;QACrB;;WAEG;QACH,WAAW,EAAE,OAAO,CAAC;QACrB;;;WAGG;QACH,mBAAmB,EAAE,OAAO,CAAC;KAChC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAItB;;;;;;;OAOG;IAEH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC;QAC/C;;WAEG;QACH,GAAG,EAAE,MAAM,CAAC;QACZ;;WAEG;QACH,OAAO,EAAE,MAAM,CAAC;QAChB;;WAEG;QACH,eAAe,EAAE,MAAM,CAAC;QACxB;;WAEG;QACH,eAAe,EAAE,OAAO,CAAC;KAC5B,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAI3B;;;;;;OAMG;IAEH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;QACvD;;WAEG;QACF,GAAG,EAAE,MAAM,CAAC;QACZ;;WAEG;QACH,OAAO,EAAE,MAAM,CAAC;QACjB;;WAEG;QACF,eAAe,EAAE,MAAM,CAAC;QACzB;;WAEG;QACF,eAAe,EAAE,OAAO,CAAC;KAC7B,CAAC,GAAG,OAAO,CAAC,MAAM,GAAC,IAAI,CAAC;IAIzB;;;;;;;;OAQG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,EAAE,OAAO,GAAE,OAAO,CAAC;QAC7E;;WAEG;QACF,GAAG,EAAE,MAAM,CAAC;QACZ;;;WAGG;QACJ,eAAe,EAAE,OAAO,CAAC;QACxB;;WAEG;QACH,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC;KACrB,CAA6D,GAAG,OAAO,CAAC,MAAM,GAAC,IAAI,CAAC;IAyDrF;;;;;;OAMG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,GAAG,CAAA;KAAE,CAAC,EAAE,OAAO,CAAC,EAAE;QACzG;;WAEG;QACH,GAAG,CAAC,EAAE,MAAM,CAAA;KACf,GAAG,OAAO,CAAC,OAAO,CAAC;IAiMpB,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG;IAuCvC;;;;;OAKG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG;QAAE,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC,CAAA;KAAC,EAAE,OAAO;;;KAAsC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgHxL;;;;;OAKG;IACG,UAAU,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAC,eAAe,GAAC,OAAO,CAAC,MAAM,GAAC,eAAe,CAAC,EAC/E,OAAO,GAAE,OAAO,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf;;;;;;;UAOE;QACF,MAAM,EAAE,KAAK,GAAC,QAAQ,GAAC,OAAO,CAAC;QAC/B,eAAe,EAAE,OAAO,CAAC;KAC5B,CAAqC,GACvC,OAAO,CAAC,IAAI,CAAC;IA0ahB;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAC,MAAM;IA0B7C;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAKvF;;OAEG;IACH,UAAU;;;;;IAIV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,GAAE;QAC9C;;WAEG;QACH,OAAO,EAAE,OAAO,CAAC;KACK,GACvB,kBAAkB;CAwDxB"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/types/storage/indexes.d.ts.map b/dist/types/storage/indexes.d.ts.map index 453964a..f6b26a4 100644 --- a/dist/types/storage/indexes.d.ts.map +++ b/dist/types/storage/indexes.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"indexes.d.ts","sourceRoot":"","sources":["../ts/storage/indexes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"} \ No newline at end of file +{"version":3,"file":"indexes.d.ts","sourceRoot":"","sources":["../../../src/storage/indexes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"} \ No newline at end of file diff --git a/dist/types/storage/mssql/index.d.ts.map b/dist/types/storage/mssql/index.d.ts.map index 3b723c7..afd1fbf 100644 --- a/dist/types/storage/mssql/index.d.ts.map +++ b/dist/types/storage/mssql/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/storage/mssql/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,qBAAa,gBAAiB,SAAQ,WAAW;gBACjC,aAAa,EAAE,MAAM;CAGpC;AAED,qBAAa,aAAc,SAAQ,QAAQ;IACvC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;gBAEL,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC;CAO3C;AAED,qBAAa,oBAAqB,SAAQ,eAAe;IAErD;;;OAGG;IACH,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAa;IAEzC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,MAAM,SAAe;IAErB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,IAAI,SAAQ;IAEZ;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,OAAO,UAAQ;IAEf;;OAEG;IACH,OAAO,SAAa;IAEpB;;OAEG;IACH,iBAAiB,SAAS;IAE1B;;OAEG;IACH,cAAc,SAAU;IAExB;;OAEG;IACH,cAAc,SAAM;IAEpB;;OAEG;IACH,cAAc,SAAK;IAEnB;;OAEG;IACH,WAAW,SAAU;IAErB;;;OAGG;IACH,iBAAiB,UAAS;gBAEd,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC;CAuBrD;AAED,qBAAa,YAAa,SAAQ,OAAO;IAErC,QAAQ,EAAE,oBAAoB,CAAC;IAE/B,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,UAAU,CAAgB;IAElC;;;OAGG;gBACS,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,oBAAoB,CAAC,EAAE,GAAG,EAAE,UAAU;IA0B5E,IAAI;IAwIV,OAAO,CAAC,eAAe;YA8BT,IAAI;YAMJ,OAAO;YAKP,KAAK;IAMnB;;;;;OAKG;IACH,OAAO,CAAC,KAAK;IAqCb,OAAO,CAAC,kBAAkB;IAwC1B,uBAAuB,CAAC,GAAG,EAAE,OAAO;;;;IAmCpC,WAAW,CAAC,GAAG,EAAE,GAAG;IAoBpB,gBAAgB,CAAC,IAAI,EAAE,OAAO,WAAW,CAAC,MAAM,OAAO,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM;IAsCjF;;OAEG;cACa,UAAU,CACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,GAAG,EACV,OAAO,GAAE;QACL,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAAC;KAKhE,GACF,OAAO,CAAC,IAAI,CAAC;IA4MhB;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO;;;;;KAA0E;IAW3G;;OAEG;IACH,WAAW,CACP,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QACL,SAAS,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;QAChC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;KACpB;QAMF;;;WAGG;oCANyB,aAAa,KAAK,OAAO,GAOd,QAAQ,OAAO,CAAC;;IAiFzD,OAAO,CACT,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QACL,OAAO,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;QAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;KACC,GAC5B,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC;KAAE,CAAC;IAyMvC,WAAW,CACb,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAO,GACxC,OAAO,CAAC,aAAa,CAAC;IAqGnB,OAAO,CACT,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,GAAG,EACV,OAAO,GAAE;QACL,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,OAAO,CAAC,EAAE,GAAG,CAAC;KAIjB,GACF,OAAO,CAAC,IAAI,CAAC;IAyCV,UAAU,CACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,GAAG,EACZ,OAAO,GAAE;QACL,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,OAAO,CAAC,EAAE,GAAG,CAAC;KAIjB,GACF,OAAO,CAAC,IAAI,CAAC;CAoCnB"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/storage/mssql/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/types/storage/sqlite/index.d.ts.map b/dist/types/storage/sqlite/index.d.ts.map index dcbcbb4..c3a9e7a 100644 --- a/dist/types/storage/sqlite/index.d.ts.map +++ b/dist/types/storage/sqlite/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/storage/sqlite/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/storage/sqlite/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/types/thread-safe.d.ts.map b/dist/types/thread-safe.d.ts.map index 6318f4b..94b2058 100644 --- a/dist/types/thread-safe.d.ts.map +++ b/dist/types/thread-safe.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"thread-safe.d.ts","sourceRoot":"","sources":["ts/thread-safe.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAQlD,MAAM,WAAW,qBAAqB;IAClC,mHAAmH;IACnH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oIAAoI;IACpI,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4IAA4I;IAC5I,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gLAAgL;IAChL,MAAM,CAAC,EAAE,GAAG,CAAA;CACf;AAED,UAAU,uBAAuB;IAC7B,OAAO,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACxC,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC;IAC5B,OAAO,EAAE,qBAAqB,CAAA;CACjC;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,IAAI,CAAC;IACf,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,GAAG,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC;IACzB,MAAM,EAAE,uBAAuB,EAAE,CAAC;IAClC,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAA;CAChB;AAID,8BAAsB,UAAU;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,GAAE,qBAAoG,GAAG,OAAO,CAAC,cAAc,CAAC;CAwFnK;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,kBAAkB;aAMvB,MAAM,EAAE,GAAG;IALvC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,KAAK,CAAiD;IAC9D,OAAO,CAAC,OAAO,CAAU;IACzB,IAAW,MAAM,YAA2B;gBAChB,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO;IAKxD,OAAO;IAoBD,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAahD;AAID,8BAAsB,WAAW;IAC7B;;;;;OAKG;WACU,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;CAkB3E"} \ No newline at end of file +{"version":3,"file":"thread-safe.d.ts","sourceRoot":"","sources":["../../src/thread-safe.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAQlD,MAAM,WAAW,qBAAqB;IAClC,mHAAmH;IACnH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oIAAoI;IACpI,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4IAA4I;IAC5I,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gLAAgL;IAChL,MAAM,CAAC,EAAE,GAAG,CAAA;CACf;AAED,UAAU,uBAAuB;IAC7B,OAAO,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACxC,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC;IAC5B,OAAO,EAAE,qBAAqB,CAAA;CACjC;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,IAAI,CAAC;IACf,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,GAAG,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC;IACzB,MAAM,EAAE,uBAAuB,EAAE,CAAC;IAClC,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAA;CAChB;AAID,8BAAsB,UAAU;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,GAAE,qBAAoG,GAAG,OAAO,CAAC,cAAc,CAAC;CAwFnK;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,kBAAkB;aAMvB,MAAM,EAAE,GAAG;IALvC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,KAAK,CAAiD;IAC9D,OAAO,CAAC,OAAO,CAAU;IACzB,IAAW,MAAM,YAA2B;gBAChB,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO;IAKxD,OAAO;IAoBD,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAahD;AAID,8BAAsB,WAAW;IAC7B;;;;;OAKG;WACU,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;CAkB3E"} \ No newline at end of file diff --git a/dist/types/unidecode-module.d.ts.map b/dist/types/unidecode-module.d.ts.map index 23226f7..456f293 100644 --- a/dist/types/unidecode-module.d.ts.map +++ b/dist/types/unidecode-module.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"unidecode-module.d.ts","sourceRoot":"","sources":["ts/unidecode-module.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,WAAW,CAAC;CAE1B"} \ No newline at end of file +{"version":3,"file":"unidecode-module.d.ts","sourceRoot":"","sources":["../../src/unidecode-module.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,WAAW,CAAC;CAE1B"} \ No newline at end of file diff --git a/dist/types/unidecode.d.ts.map b/dist/types/unidecode.d.ts.map index a6de784..6874ec7 100644 --- a/dist/types/unidecode.d.ts.map +++ b/dist/types/unidecode.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"unidecode.d.ts","sourceRoot":"","sources":["ts/unidecode.ts"],"names":[],"mappings":"gCAE+C,MAAM,KAAK,MAAM;AAAhE,wBAAiE"} \ No newline at end of file +{"version":3,"file":"unidecode.d.ts","sourceRoot":"","sources":["../../src/unidecode.ts"],"names":[],"mappings":"gCAE+C,MAAM,KAAK,MAAM;AAAhE,wBAAiE"} \ No newline at end of file From 898ff05d6439281c6990620799054939775a668a Mon Sep 17 00:00:00 2001 From: Ewout Stortenbeker Date: Mon, 31 Oct 2022 22:47:34 +0100 Subject: [PATCH 05/14] type improvements --- src/api-local.ts | 20 +++++++++++++------- src/btree/binary-pointer.ts | 7 +++++++ src/btree/binary-reference.ts | 8 ++++++++ src/btree/tree-leaf.ts | 3 ++- src/btree/tree-node.ts | 18 ++++-------------- src/storage/index.ts | 2 +- 6 files changed, 35 insertions(+), 23 deletions(-) create mode 100644 src/btree/binary-pointer.ts create mode 100644 src/btree/binary-reference.ts diff --git a/src/api-local.ts b/src/api-local.ts index b54dabb..911903a 100644 --- a/src/api-local.ts +++ b/src/api-local.ts @@ -1,4 +1,7 @@ -import { AceBaseBase, IStreamLike, Api, EventSubscriptionCallback, ReflectionType, StreamReadFunction, StreamWriteFunction, TransactionLogFilter, LoggingLevel, Query, QueryOptions } from 'acebase-core'; +import { AceBaseBase, IStreamLike, Api, EventSubscriptionCallback, + ReflectionType, IReflectionNodeInfo, IReflectionChildrenInfo, + StreamReadFunction, StreamWriteFunction, TransactionLogFilter, + LoggingLevel, Query, QueryOptions } from 'acebase-core'; import { AceBaseStorage, AceBaseStorageSettings } from './storage/binary'; import { SQLiteStorage, SQLiteStorageSettings } from './storage/sqlite'; import { MSSQLStorage, MSSQLStorageSettings } from './storage/mssql'; @@ -224,13 +227,15 @@ export class LocalApi extends Api { return this.storage.indexes.delete(filePath); } - async reflect(path: string, type: ReflectionType, args: any) { + reflect(path: string, type: 'children', args: any): Promise; + reflect(path: string, type: 'info', args: any): Promise; + async reflect(path: string, type: ReflectionType, args: any): Promise { args = args || {}; const getChildren = async (path: string, limit = 50, skip = 0, from: string = null) => { if (typeof limit === 'string') { limit = parseInt(limit); } if (typeof skip === 'string') { skip = parseInt(skip); } if (['null','undefined'].includes(from)) { from = null; } - const children = [] as Array<{ key: string | number; type: string; value: any; address?: any }>; + const children = [] as IReflectionChildrenInfo['list']; // Array<{ key: string | number; type: string; value: any; address?: any }>; let n = 0, stop = false, more = false; //stop = skip + limit, await this.storage.getChildren(path) .next(childInfo => { @@ -263,14 +268,15 @@ export class LocalApi extends Api { return { more, list: children, - }; + } as IReflectionChildrenInfo; }; switch(type) { case 'children': { - return getChildren(path, args.limit, args.skip, args.from); + const result: IReflectionChildrenInfo = await getChildren(path, args.limit, args.skip, args.from); + return result; } case 'info': { - const info = { + const info: IReflectionNodeInfo = { key: '' as string | number, exists: false, type: 'unknown', @@ -280,7 +286,7 @@ export class LocalApi extends Api { count: 0, more: false, list: [], - } as Awaited> | { count: number }, + }, }; const nodeInfo = await this.storage.getNodeInfo(path, { include_child_count: args.child_count === true }); info.key = typeof nodeInfo.key !== 'undefined' ? nodeInfo.key : nodeInfo.index; diff --git a/src/btree/binary-pointer.ts b/src/btree/binary-pointer.ts new file mode 100644 index 0000000..89e0f31 --- /dev/null +++ b/src/btree/binary-pointer.ts @@ -0,0 +1,7 @@ +import { BPlusTreeLeaf } from './tree-leaf'; + +export type BinaryPointer = { + name: string; + leaf: BPlusTreeLeaf, + index: number +} diff --git a/src/btree/binary-reference.ts b/src/btree/binary-reference.ts new file mode 100644 index 0000000..acc4e4a --- /dev/null +++ b/src/btree/binary-reference.ts @@ -0,0 +1,8 @@ +import { BPlusTreeLeaf } from './tree-leaf'; +import { BPlusTreeNode } from './tree-node'; + +export type BinaryReference = { + name: string; + target: BPlusTreeNode | BPlusTreeLeaf; + index: number; +} diff --git a/src/btree/tree-leaf.ts b/src/btree/tree-leaf.ts index 0b12f35..b3b7e0c 100644 --- a/src/btree/tree-leaf.ts +++ b/src/btree/tree-leaf.ts @@ -1,5 +1,6 @@ import { writeByteLength } from '../binary'; import { DetailedError } from '../detailed-error'; +import { BinaryReference } from './binary-reference'; import { FLAGS } from './binary-tree-builder'; import { BinaryWriter } from './binary-writer'; import { MAX_LEAF_ENTRY_VALUES, MAX_SMALL_LEAF_VALUE_LENGTH, WRITE_SMALL_LEAFS } from './config'; @@ -148,7 +149,7 @@ export class BPlusTreeLeaf { // free_byte_length: bytes.push(0, 0, 0, 0); - const references = []; + const references = [] as BinaryReference[]; // prev_leaf_ptr: this.prevLeaf && references.push({ name: `<${this.entries[0].key}`, target: this.prevLeaf, index: startIndex + bytes.length }); diff --git a/src/btree/tree-node.ts b/src/btree/tree-node.ts index 125b7e4..a722a13 100644 --- a/src/btree/tree-node.ts +++ b/src/btree/tree-node.ts @@ -6,18 +6,8 @@ import { _isEqual, _isMore } from './typesafe-compare'; import { DetailedError } from '../detailed-error'; import { BinaryWriter } from './binary-writer'; import { writeByteLength, writeSignedOffset } from '../binary'; - -type BinaryPointer = { - name: string; - leaf: BPlusTreeLeaf, - index: number -} - -type BinaryReference = { - name: string; - target: BPlusTreeNode | BPlusTreeLeaf; - index: number; -} +import { BinaryPointer } from './binary-pointer'; +import { BinaryReference } from './binary-reference'; export class BPlusTreeNode { entries: BPlusTreeNodeEntry[] = []; @@ -261,7 +251,7 @@ export class BPlusTreeNode { const child_ptr = writeSignedOffset([], 0, offset, true); await writer.write(child_ptr, ref.index); // Update pointer - const child = await childNode.toBinary(keepFreeSpace, writer); // Write child + const child = await childNode.toBinary(keepFreeSpace, writer) as { pointers?: BinaryPointer[]; references: BinaryReference[] }; // Write child if (childNode instanceof BPlusTreeLeaf) { // Remember location we stored this leaf, we need it later @@ -272,7 +262,7 @@ export class BPlusTreeNode { }); } // Add node pointers added by the child - 'pointers' in child && child.pointers.forEach(pointer => { + child.pointers?.forEach(pointer => { // pointer.index += index; // DISABLED: indexes must already be ok now we're using 1 bytes array pointers.push(pointer); }); diff --git a/src/storage/index.ts b/src/storage/index.ts index 89d4bde..8c6ae32 100644 --- a/src/storage/index.ts +++ b/src/storage/index.ts @@ -1740,7 +1740,7 @@ export class Storage extends SimpleEventEmitter { */ async importNode( path: string, - read: (bytes: number) => string|ArrayBufferView|Promise, + read: (bytes: number) => string | Utils.TypedArrayLike | Promise, options: Partial<{ format: 'json'; /** From 07cb6cded5266a7ba33052891554352c5eb82d6f Mon Sep 17 00:00:00 2001 From: Ewout Stortenbeker Date: Mon, 31 Oct 2022 22:52:30 +0100 Subject: [PATCH 06/14] commonjs and esm distributions --- README.md | 14 ++++++++++++- create-package-files | 47 ++++++++++++++++++++++++++++++++++++++++++++ package.json | 36 +++++++++++++++++++++++++++++++-- tsconfig-cjs.json | 11 +++++++++++ tsconfig.json | 15 +++++++------- 5 files changed, 113 insertions(+), 10 deletions(-) create mode 100644 create-package-files create mode 100644 tsconfig-cjs.json diff --git a/README.md b/README.md index eef596f..08fe237 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ # AceBase realtime database -A fast, low memory, transactional, index & query enabled NoSQL database engine and server for node.js and browser with realtime data change notifications. Supports storing of JSON objects, arrays, numbers, strings, booleans, dates and binary (ArrayBuffer) data. +A fast, low memory, transactional, index & query enabled NoSQL database engine and server for node.js and browser with realtime data change notifications. Supports storing of JSON objects, arrays, numbers, strings, booleans, dates, bigints and binary (ArrayBuffer) data. Inspired by (and largely compatible with) the Firebase realtime database, with additional functionality and less data sharding/duplication. Capable of storing up to 2^48 (281 trillion) object nodes in a binary database file that can theoretically grow to a max filesize of 8 petabytes. @@ -79,11 +79,13 @@ AceBase is easy to set up and runs anywhere: in the cloud, NAS, local server, yo * [Info](#transaction-logging) * Multi-process support * [Info](#multi-process-support) +* [CommonJS and ESM packages](#commonjs-and-esm-packages) * [Upgrade notices](#upgrade-notices) * [Known issues](#known-issues) * [Authors](#authors) * [Contributing](#contributing) * [Sponsoring](#sponsoring) + ## Getting Started AceBase is split up into multiple packages: @@ -2201,6 +2203,16 @@ AceBase supports running in multiple processes by using interprocess communicati If you are using pm2 to run your app in a cluster, or run your app in a cloud-based cluster (eg Kubernetes, Docker Swarm), AceBase instances will need some other way to communicate with eachother. This is now possible using an AceBase IPC Server, which allows fast communication using websockets. See [AceBase IPC Server](https://github.com/appy-one/acebase-ipc-server) for more info! +## CommonJS and ESM packages +The TypeScript sources are compiled to both CommonJS and ESM module systems. The sources loaded depend on whether you `import` or `require` acebase: +| Statement | Module system | Target | +|--------------------------------------------|---------------|--------| +| import { AceBase } from 'acebase' | ESM | ES2020 | +| import { AceBase } from 'acebase/commonjs' | CommonJS | ES2017 | +| const { AceBase } = require('acebase') | CommonJS | ES2017 | + +See https://github.com/appy-one/acebase/discussions/98 for more info. + ## Upgrade notices * v0.9.68 - To get the used updating context in data event handlers, read from `snap.context()` instead of `snap.ref.context()`. This is to prevent further updates on `snap.ref` to use the same context. If you need to reuse the event context for new updates, you will have to manually set it: `snap.ref.context(snap.context()).update(...)` diff --git a/create-package-files b/create-package-files new file mode 100644 index 0000000..51aaec5 --- /dev/null +++ b/create-package-files @@ -0,0 +1,47 @@ +#!/bin/bash + +# Create CommonJS package.json +cat >dist/cjs/package.json <dist/cjs/index.d.ts <dist/esm/package.json <dist/esm/index.d.ts < Date: Mon, 31 Oct 2022 22:52:50 +0100 Subject: [PATCH 07/14] remove old types --- index.d.ts | 311 ----------------------------------------------------- 1 file changed, 311 deletions(-) delete mode 100644 index.d.ts diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index 015cf69..0000000 --- a/index.d.ts +++ /dev/null @@ -1,311 +0,0 @@ -import { AceBaseBase, PathInfo, LoggingLevel } from 'acebase-core'; - -export class AceBase extends AceBaseBase { - /** - * - * @param dbname Name of the database to open or create - * @param options - */ - constructor(dbname: string, options?: AceBaseLocalSettings); - - /** - * Closes the database - */ - close(): Promise; - - /** - * Only available in browser context - Creates an AceBase database instance using IndexedDB as storage engine. Creates a dedicated IndexedDB instance. - * @param dbname Name of the database - * @param settings optional settings - * @param settings.logLevel what level to use for logging to the console. Default is 'error' - * @param settings.removeVoidProperties Whether to remove undefined property values of objects being stored, instead of throwing an error. - * @param settings.maxInlineValueSize Maximum size of binary data/strings to store in parent object records. Larger values are stored in their own records. Default is 50. - * @param settings.multipleTabs Whether to enable cross-tab synchronization - * @param settings.cacheSeconds How many seconds to keep node info in memory, to speed up IndexedDB performance. - * @param settings.lockTimeout timeout setting for read and write locks in seconds. Operations taking longer than this will be aborted. Default is 120 seconds. - * @param settings.sponsor You can turn this on if you are a sponsor. See https://github.com/appy-one/acebase/discussions/100 for more info - */ - static WithIndexedDB(name: string, settings?: { logLevel?: LoggingLevel; removeVoidProperties?: boolean; maxInlineValueSize?: number; multipleTabs?: boolean; cacheSeconds?: number; lockTimeout?: number, sponsor?: boolean }): AceBase; - - /** - * Creates an AceBase database instance using LocalStorage or SessionStorage as storage engine. When running in non-browser environments, set - * settings.provider to a custom LocalStorage provider, eg 'node-localstorage' - * @param dbname Name of the database - * @param settings optional settings - * @param settings.logLevel what level to use for logging to the console - * @param settings.temp whether to use sessionStorage instead of localStorage - * @param settings.provider Alternate localStorage provider for running in non-browser environments. Eg using 'node-localstorage' - * @param settings.removeVoidProperties Whether to remove undefined property values of objects being stored, instead of throwing an error. - * @param settings.maxInlineValueSize Maximum size of binary data/strings to store in parent object records. Larger values are stored in their own records. Default is 50. - * @param settings.multipleTabs Whether to enable cross-tab synchronization - * @param settings.lockTimeout timeout setting for read and write locks in seconds. Operations taking longer than this will be aborted. Default is 120 seconds. - * @param settings.sponsor You can turn this on if you are a sponsor. See https://github.com/appy-one/acebase/discussions/100 for more info - */ - static WithLocalStorage(dbname: string, settings: { logLevel?: LoggingLevel, temp?: boolean, provider?: any, removeVoidProperties?: boolean, maxInlineValueSize?: number, multipleTabs?: boolean, lockTimeout?: number, sponsor?: boolean }): AceBase -} - -export interface AceBaseLocalSettings { - /** - * What level to use for console logging. - * @default 'log' - */ - logLevel?: LoggingLevel; - /** Whether to use colors in the console logs output */ - logColors?: boolean; - /** Optional storage settings */ - storage?: StorageSettings; - /** Settings for optional transaction logging */ - transactions?: TransactionLogSettings; - /** IPC settings if you are using AceBase in pm2 or cloud-based clusters */ - ipc?: IPCClientSettings; - /** You can turn this on if you are a sponsor. See https://github.com/appy-one/acebase/discussions/100 for more info */ - sponsor?: boolean; -} - -export abstract class StorageSettings { - maxInlineValueSize?: number; - removeVoidProperties?: boolean; - path?: string; - /**@deprecated Moved to main settings */ - ipc?: IPCClientSettings; - lockTimeout?: number; -} - -export interface IPCClientSettings { - /** IPC Server hostname. Default is "localhost" */ - host?: string - /** IPC Server port */ - port: number - /** IPC Server token needed to access the server. Only needed if the server does not use a token */ - token?: string - /** Whether to use a secure connection to the IPC server, default is `false` */ - ssl?: boolean - /** Role of the IPC Client. There can only be 1 `master`, all other need to be a `worker`. */ - role: 'master'|'worker' -} - -/** - * BETA functionality - logs mutations made to a separate database file so they can be retrieved later - * for database syncing / replication. Implementing this into acebase itself will allow the current - * sync implementation in acebase-client to become better: it can simply request a mutations stream from - * the server after disconnects by passing a cursor or timestamp, instead of downloading whole nodes before - * applying local changes. This will also enable horizontal scaling: replication with remote db instances - * becomes possible. - * - * Still under development, disabled by default. See transaction-logs.spec.js for tests - */ -export abstract class TransactionLogSettings { - /** Whether to log transactions or not */ - log?: boolean; - /** Max age of transactions to keep in logfile. Set to 0 to disable cleaning up and keep all transactions */ - maxAge?: number; - /** Whether `update` or `set` operations should not wait until the log item is written. Default is false (do wait) */ - noWait?: boolean; -} - -export class AceBaseStorageSettings extends StorageSettings { - constructor(settings: AceBaseStorageSettings); - /** record size in bytes, defaults to 128 (recommended) */ - recordSize?: number; - /** page size in records, defaults to 1024 (recommended) */ - pageSize?: number; - /** Whether to open the database file in readonly mode */ - readOnly?: boolean; -} - -export class SQLiteStorageSettings extends StorageSettings { - constructor(settings: SQLiteStorageSettings); -} - -export class MSSQLStorageSettings extends StorageSettings { - constructor(settings: MSSQLStorageSettings); - driver?: 'tedious'|'native'; - domain?: string; - user?: string; - password?: string; - server?: string; - port?: number; - database?: string; - encrypt?: boolean; - appName?: string; - connectionTimeout?: number; - requestTimeout?: number; - maxConnections?: number; - minConnections?: number; - idleTimeout?: number; -} - -export class LocalStorageSettings extends StorageSettings { - constructor(settings: LocalStorageSettings); - session?: boolean; - provider?: object; -} - -export interface ICustomStorageNodeMetaData { - /** cuid (time sortable revision id). Nodes stored in the same operation share this id */ - revision: string; - /** Number of revisions, starting with 1. Resets to 1 after deletion and recreation */ - revision_nr: number; - /** Creation date/time in ms since epoch UTC */ - created: number; - /** Last modification date/time in ms since epoch UTC */ - modified: number; - /** Type of the node's value. 1=object, 2=array, 3=number, 4=boolean, 5=string, 6=date, 7=reserved, 8=binary, 9=reference */ - type: number; -} -export interface ICustomStorageNode extends ICustomStorageNodeMetaData { - /** only Object, Array, large string and binary values */ - value: any -} - -export abstract class CustomStorageTransaction { - /** - * @param target Which path the transaction is taking place on, and whether it is a read or read/write lock. If your storage backend does not support transactions, is synchronous, or if you are able to lock resources based on path: use storage.nodeLocker to ensure threadsafe transactions - */ - constructor(target: { path: string, write: boolean }); - - readonly target: { path: string, readonly originalPath: string, readonly write: boolean }; - - /** Function that gets the node with given path from your custom data store, must return null if it doesn't exist */ - abstract get(path: string): Promise; - /** Function that inserts or updates a node with given path in your custom data store */ - abstract set(path: string, value: ICustomStorageNode): Promise; - /** Function that removes the node with given path from your custom data store */ - abstract remove(path: string): Promise; - - /** - * Function that streams all stored nodes that are direct children of the given path. For path "parent/path", results must include paths such as "parent/path/key" AND "parent/path[0]". 👉🏻 You can use CustomStorageHelpers for logic. Keep calling the add callback for each node until it returns false. - * @param path Parent path to load children of - * @param include - * @param include.metadata Whether metadata needs to be loaded - * @param include.value Whether value needs to be loaded - * @param checkCallback callback method to precheck if child needs to be added, perform before loading metadata/value if possible - * @param addCallback callback method that adds the child node. Returns whether or not to keep calling with more children - * @returns Returns a promise that resolves when there are no more children to be streamed - */ - abstract childrenOf(path: string, include: { value: boolean, metadata: boolean }, checkCallback: (childPath: string) => boolean, addCallback: (childPath: string, node?: ICustomStorageNodeMetaData|ICustomStorageNode) => boolean): Promise; - - /** - * Function that streams all stored nodes that are descendants of the given path. For path "parent/path", results must include paths such as "parent/path/key", "parent/path/key/subkey", "parent/path[0]", "parent/path[12]/key" etc. 👉🏻 You can use CustomStorageHelpers for logic. Keep calling the add callback for each node until it returns false. - * @param path Parent path to load descendants of - * @param include - * @param include.metadata Whether metadata needs to be loaded - * @param include.value Whether value needs to be loaded - * @param checkCallback callback method to precheck if descendant needs to be added, perform before loading metadata/value if possible. NOTE: if include.metadata === true, you should load and pass the metadata to the checkCallback if doing so has no or small performance impact - * @param addCallback callback method that adds the descendant node. Returns whether or not to keep calling with more children - * @returns Returns a promise that resolves when there are no more descendants to be streamed - */ - abstract descendantsOf(path: string, include: { value: boolean, metadata: boolean }, checkCallback: (descPath: string, metadata?: ICustomStorageNodeMetaData) => boolean, addCallback: (descPath: string, node?: ICustomStorageNodeMetaData|ICustomStorageNode) => boolean): Promise; - - /** - * (optional) Returns the number of children stored in their own records. Default implementation uses `childrenOf` to count, override if storage supports a quicker way. - * Eg: For SQL databases, you can implement this with a single query like `SELECT count(*) FROM nodes WHERE ${CustomStorageHelpers.ChildPathsSql(path)}` - * @returns Returns a promise that resolves with the number of children - */ - getChildCount(path: string): Promise - - /** (optional, not used yet) Function that gets multiple nodes (metadata AND value) from your custom data store at once. Must return a Promise that resolves with Map */ - getMultiple?(paths: string[]): Promise>; - /** (optional, not used yet) Function that sets multiple nodes at once */ - setMultiple?(nodes: Array<{ path: string, node: ICustomStorageNode }>): Promise; - /** (optional) Function that removes multiple nodes from your custom data store at once */ - removeMultiple?(paths: string[]): Promise; - - abstract commit(): Promise; - abstract rollback(reason: Error): Promise; -} - -/** - * Allows data to be stored in a custom storage backend of your choice! Simply provide a couple of functions - * to get, set and remove data and you're done. - */ -export class CustomStorageSettings extends StorageSettings { - constructor(settings: CustomStorageSettings); - /** Name of the custom storage adapter */ - name?: string; - /** Whether default node locking should be used (default). Set to false if your storage backend disallows multiple simultanious write transactions (eg IndexedDB). Set to true if your storage backend does not support transactions (eg LocalStorage) or allows multiple simultanious write transactions (eg AceBase binary). */ - locking?: boolean; - /** Function that returns a Promise that resolves once your data store backend is ready for use */ - ready(): Promise; - /** - * Function that starts a transaction for read/write operations on a specific path and/or child paths - * @param target target path and mode to start transaction on - */ - getTransaction(target: { path: string, write: boolean }): Promise -} - -export class CustomStorageHelpers { - /** - * Helper function that returns a SQL where clause for all children of given path - * @param path Path to get children of - * @param columnName Name of the Path column in your SQL db, default is 'path' - * @returns Returns the SQL where clause - */ - static ChildPathsSql(path:string, columnName?:string): string; - /** - * Helper function that returns a regular expression to test if paths are children of the given path - * @param path Path to test children of - * @returns Returns regular expression to test paths with - */ - static ChildPathsRegex(path: string): RegExp; - /** - * Helper function that returns a SQL where clause for all descendants of given path - * @param path Path to get descendants of - * @param columnName Name of the Path column in your SQL db, default is 'path' - * @returns Returns the SQL where clause - */ - static DescendantPathsSql(path:string, columnName?:string): string; - /** - * Helper function that returns a regular expression to test if paths are descendants of the given path - * @param path Path to test descendants of - * @returns Returns regular expression to test paths with - */ - static DescendantPathsRegex(path: string): RegExp; - - /** - * PathInfo helper class. Can be used to extract keys from a given path, get parent paths, check if a path is a child or descendant of other path etc - * @example - * var pathInfo = CustomStorage.PathInfo.get('my/path/to/data'); - * pathInfo.key === 'data'; - * pathInfo.parentPath === 'my/path/to'; - * pathInfo.pathKeys; // ['my','path','to','data']; - * pathInfo.isChildOf('my/path/to') === true; - * pathInfo.isDescendantOf('my/path') === true; - * pathInfo.isParentOf('my/path/to/data/child') === true; - * pathInfo.isAncestorOf('my/path/to/data/child/grandchild') === true; - * pathInfo.childPath('child') === 'my/path/to/data/child'; - * pathInfo.childPath(0) === 'my/path/to/data[0]'; - */ - static readonly PathInfo: typeof PathInfo; -} - -export class SchemaValidationError extends Error { - reason: string; -} - -export { - DataSnapshot, - DataReference, - DataSnapshotsArray, - DataReferencesArray, - EventStream, - EventSubscription, - PathReference, - TypeMappings, - TypeMappingOptions, - IReflectionNodeInfo, - IReflectionChildrenInfo, - IStreamLike, - ILiveDataProxy, - ILiveDataProxyValue, - ObjectCollection, - ID, - proxyAccess, - PartialArray, -} from 'acebase-core'; - -import { ObjectCollection } from 'acebase-core'; -/** - * @deprecated Use `ObjectCollection` instead - */ -export type IObjectCollection = ObjectCollection; From 0796ecf2cc34d0d95f3743c994b62a66821f32c8 Mon Sep 17 00:00:00 2001 From: Ewout Stortenbeker Date: Mon, 31 Oct 2022 22:53:17 +0100 Subject: [PATCH 08/14] change import paths to dist --- spec/async-task-batch.spec.js | 2 +- spec/binary-bplus-tree.spec.js | 2 +- spec/binary.spec.js | 2 +- spec/bplus-tree.spec.js | 2 +- spec/constructor.spec.js | 2 +- spec/geohash.spec.js | 2 +- spec/node-transaction.spec.js | 2 +- spec/quicksort.spec.js | 2 +- spec/tempdb.js | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/spec/async-task-batch.spec.js b/spec/async-task-batch.spec.js index 81dd670..278051f 100644 --- a/spec/async-task-batch.spec.js +++ b/spec/async-task-batch.spec.js @@ -1,4 +1,4 @@ -const { AsyncTaskBatch } = require('../src/async-task-batch'); +const { AsyncTaskBatch } = require('../dist/cjs/async-task-batch'); describe('Async task batches', () => { it('works', async () => { diff --git a/spec/binary-bplus-tree.spec.js b/spec/binary-bplus-tree.spec.js index 831ec0a..4cff433 100644 --- a/spec/binary-bplus-tree.spec.js +++ b/spec/binary-bplus-tree.spec.js @@ -1,5 +1,5 @@ /// -const { BPlusTree, BinaryWriter, BinaryBPlusTree, BlacklistingSearchOperator } = require('../src/btree'); +const { BPlusTree, BinaryWriter, BinaryBPlusTree, BlacklistingSearchOperator } = require('../dist/cjs/btree'); const { ID } = require('acebase-core'); // require('jasmine'); diff --git a/spec/binary.spec.js b/spec/binary.spec.js index 7c8bb2f..aa1f3fa 100644 --- a/spec/binary.spec.js +++ b/spec/binary.spec.js @@ -1,5 +1,5 @@ /// -const { Uint8ArrayBuilder } = require('../src/binary'); +const { Uint8ArrayBuilder } = require('../dist/cjs/binary'); describe('Uint8ArrayBuilder', () => { it('write grows the buffer', () => { diff --git a/spec/bplus-tree.spec.js b/spec/bplus-tree.spec.js index dd81d35..5fa5abe 100644 --- a/spec/bplus-tree.spec.js +++ b/spec/bplus-tree.spec.js @@ -1,5 +1,5 @@ /// -const { BPlusTree } = require('../src/btree'); +const { BPlusTree } = require('../dist/cjs/btree'); const { ID } = require('acebase-core'); // require('jasmine'); diff --git a/spec/constructor.spec.js b/spec/constructor.spec.js index 05eff62..2384962 100644 --- a/spec/constructor.spec.js +++ b/spec/constructor.spec.js @@ -1,5 +1,5 @@ const { AceBase, ID } = require('..'); -const { pfs } = require('../src/promise-fs'); +const { pfs } = require('../dist/cjs/promise-fs'); /** * diff --git a/spec/geohash.spec.js b/spec/geohash.spec.js index 4b0d28e..f7e975e 100644 --- a/spec/geohash.spec.js +++ b/spec/geohash.spec.js @@ -1,4 +1,4 @@ -const { encode, decode, neighbours, adjacent, bounds } = require('../src/geohash'); +const { encode, decode, neighbours, adjacent, bounds } = require('../dist/cjs/geohash'); describe('Geohash', () => { it('encode', () => { diff --git a/spec/node-transaction.spec.js b/spec/node-transaction.spec.js index e346d36..0917950 100644 --- a/spec/node-transaction.spec.js +++ b/spec/node-transaction.spec.js @@ -1,6 +1,6 @@ // Test the new NodeTransaction class being developed /// -const { TransactionManager, NodeLockIntention } = require('../src/node-transaction'); +const { TransactionManager, NodeLockIntention } = require('../dist/cjs/node-transaction'); describe('NodeTransaction (beta)', () => { diff --git a/spec/quicksort.spec.js b/spec/quicksort.spec.js index 000e280..4b0c45f 100644 --- a/spec/quicksort.spec.js +++ b/spec/quicksort.spec.js @@ -1,4 +1,4 @@ -const quickSort = require('../src/quicksort').default; +const quickSort = require('../dist/cjs/quicksort').default; const { performance } = require('perf_hooks'); describe('quicksort', () => { diff --git a/spec/tempdb.js b/spec/tempdb.js index 0478f1f..8443436 100644 --- a/spec/tempdb.js +++ b/spec/tempdb.js @@ -1,5 +1,5 @@ const { AceBase, ID } = require('..'); -const { pfs } = require('../src/promise-fs'); +const { pfs } = require('../dist/cjs/promise-fs'); module.exports = { /** From 8b884eb7c067fc1542ebcfe1112c3991f3c010d1 Mon Sep 17 00:00:00 2001 From: Ewout Stortenbeker Date: Mon, 31 Oct 2022 22:53:29 +0100 Subject: [PATCH 09/14] chore: build --- dist/browser.js | 10772 ++++++++-------- dist/browser.min.js | 2 +- dist/cjs/api-local.js | 5 +- dist/cjs/api-local.js.map | 2 +- dist/cjs/btree/binary-pointer.js | 3 + dist/cjs/btree/binary-pointer.js.map | 1 + dist/cjs/btree/binary-reference.js | 3 + dist/cjs/btree/binary-reference.js.map | 1 + dist/cjs/btree/tree-leaf.js.map | 2 +- dist/cjs/btree/tree-node.js | 3 +- dist/cjs/btree/tree-node.js.map | 2 +- dist/cjs/index.d.ts | 1 + dist/cjs/package.json | 14 + dist/cjs/storage/index.js.map | 2 +- dist/esm/acebase-browser.js | 42 + dist/esm/acebase-browser.js.map | 1 + dist/esm/acebase-local.js | 79 + dist/esm/acebase-local.js.map | 1 + dist/esm/api-local.js | 298 + dist/esm/api-local.js.map | 1 + dist/esm/async-task-batch.js | 73 + dist/esm/async-task-batch.js.map | 1 + dist/esm/binary.js | 297 + dist/esm/binary.js.map | 1 + dist/esm/browser.js | 54 + dist/esm/browser.js.map | 1 + dist/esm/btree/binary-pointer.js | 2 + dist/esm/btree/binary-pointer.js.map | 1 + dist/esm/btree/binary-reader.js | 189 + dist/esm/btree/binary-reader.js.map | 1 + dist/esm/btree/binary-reference.js | 2 + dist/esm/btree/binary-reference.js.map | 1 + dist/esm/btree/binary-tree-builder.js | 535 + dist/esm/btree/binary-tree-builder.js.map | 1 + .../btree/binary-tree-leaf-entry-extdata.js | 28 + .../binary-tree-leaf-entry-extdata.js.map | 1 + .../esm/btree/binary-tree-leaf-entry-value.js | 16 + .../btree/binary-tree-leaf-entry-value.js.map | 1 + dist/esm/btree/binary-tree-leaf-entry.js | 35 + dist/esm/btree/binary-tree-leaf-entry.js.map | 1 + dist/esm/btree/binary-tree-leaf.js | 62 + dist/esm/btree/binary-tree-leaf.js.map | 1 + dist/esm/btree/binary-tree-node-entry.js | 11 + dist/esm/btree/binary-tree-node-entry.js.map | 1 + dist/esm/btree/binary-tree-node-info.js | 27 + dist/esm/btree/binary-tree-node-info.js.map | 1 + dist/esm/btree/binary-tree-node.js | 13 + dist/esm/btree/binary-tree-node.js.map | 1 + .../binary-tree-transaction-operation.js | 27 + .../binary-tree-transaction-operation.js.map | 1 + dist/esm/btree/binary-tree.js | 3492 +++++ dist/esm/btree/binary-tree.js.map | 1 + dist/esm/btree/binary-writer.js | 180 + dist/esm/btree/binary-writer.js.map | 1 + dist/esm/btree/config.js | 4 + dist/esm/btree/config.js.map | 1 + dist/esm/btree/entry-key-type.js | 2 + dist/esm/btree/entry-key-type.js.map | 1 + dist/esm/btree/index.js | 9 + dist/esm/btree/index.js.map | 1 + dist/esm/btree/leaf-entry-metadata.js | 2 + dist/esm/btree/leaf-entry-metadata.js.map | 1 + dist/esm/btree/leaf-entry-recordpointer.js | 2 + .../esm/btree/leaf-entry-recordpointer.js.map | 1 + dist/esm/btree/tree-builder.js | 307 + dist/esm/btree/tree-builder.js.map | 1 + dist/esm/btree/tree-leaf-entry-value.js | 15 + dist/esm/btree/tree-leaf-entry-value.js.map | 1 + dist/esm/btree/tree-leaf-entry.js | 12 + dist/esm/btree/tree-leaf-entry.js.map | 1 + dist/esm/btree/tree-leaf.js | 279 + dist/esm/btree/tree-leaf.js.map | 1 + dist/esm/btree/tree-node-entry.js | 8 + dist/esm/btree/tree-node-entry.js.map | 1 + dist/esm/btree/tree-node.js | 262 + dist/esm/btree/tree-node.js.map | 1 + dist/esm/btree/tree.js | 523 + dist/esm/btree/tree.js.map | 1 + dist/esm/btree/tx.js | 120 + dist/esm/btree/tx.js.map | 1 + dist/esm/btree/typesafe-compare.js | 111 + dist/esm/btree/typesafe-compare.js.map | 1 + dist/esm/btree/utils.js | 38 + dist/esm/btree/utils.js.map | 1 + dist/esm/data-index/array-index-query-hint.js | 23 + .../data-index/array-index-query-hint.js.map | 1 + dist/esm/data-index/array-index.js | 252 + dist/esm/data-index/array-index.js.map | 1 + dist/esm/data-index/data-index.js | 1917 +++ dist/esm/data-index/data-index.js.map | 1 + .../data-index/fulltext-index-query-hint.js | 30 + .../fulltext-index-query-hint.js.map | 1 + dist/esm/data-index/fulltext-index.js | 842 ++ dist/esm/data-index/fulltext-index.js.map | 1 + dist/esm/data-index/geo-index.js | 254 + dist/esm/data-index/geo-index.js.map | 1 + dist/esm/data-index/index.js | 13 + dist/esm/data-index/index.js.map | 1 + dist/esm/data-index/options.js | 2 + dist/esm/data-index/options.js.map | 1 + dist/esm/data-index/query-hint.js | 7 + dist/esm/data-index/query-hint.js.map | 1 + dist/esm/data-index/query-results.js | 101 + dist/esm/data-index/query-results.js.map | 1 + dist/esm/data-index/query-stats.js | 26 + dist/esm/data-index/query-stats.js.map | 1 + dist/esm/data-index/shared.js | 2 + dist/esm/data-index/shared.js.map | 1 + dist/esm/detailed-error.js | 48 + dist/esm/detailed-error.js.map | 1 + dist/esm/geohash.js | 199 + dist/esm/geohash.js.map | 1 + dist/esm/index.d.ts | 1 + dist/esm/index.js | 26 + dist/esm/index.js.map | 1 + dist/esm/ipc/browser.js | 131 + dist/esm/ipc/browser.js.map | 1 + dist/esm/ipc/index.js | 103 + dist/esm/ipc/index.js.map | 1 + dist/esm/ipc/ipc.js | 493 + dist/esm/ipc/ipc.js.map | 1 + dist/esm/ipc/remote.js | 300 + dist/esm/ipc/remote.js.map | 1 + dist/esm/node-address.js | 29 + dist/esm/node-address.js.map | 1 + dist/esm/node-cache.js | 218 + dist/esm/node-cache.js.map | 1 + dist/esm/node-changes.js | 131 + dist/esm/node-changes.js.map | 1 + dist/esm/node-errors.js | 5 + dist/esm/node-errors.js.map | 1 + dist/esm/node-info.js | 44 + dist/esm/node-info.js.map | 1 + dist/esm/node-lock.js | 278 + dist/esm/node-lock.js.map | 1 + dist/esm/node-transaction.js | 440 + dist/esm/node-transaction.js.map | 1 + dist/esm/node-value-types.js | 85 + dist/esm/node-value-types.js.map | 1 + dist/esm/node.js | 7 + dist/esm/node.js.map | 1 + dist/esm/not-supported.js | 2 + dist/esm/not-supported.js.map | 1 + dist/esm/package.json | 14 + dist/esm/promise-fs/browser.js | 5 + dist/esm/promise-fs/browser.js.map | 1 + dist/esm/promise-fs/index.js | 397 + dist/esm/promise-fs/index.js.map | 1 + dist/esm/query.js | 723 ++ dist/esm/query.js.map | 1 + dist/esm/quicksort.js | 106 + dist/esm/quicksort.js.map | 1 + dist/esm/storage/binary/index.js | 3971 ++++++ dist/esm/storage/binary/index.js.map | 1 + dist/esm/storage/binary/node-address.js | 18 + dist/esm/storage/binary/node-address.js.map | 1 + dist/esm/storage/binary/node-info.js | 4 + dist/esm/storage/binary/node-info.js.map | 1 + dist/esm/storage/context.js | 2 + dist/esm/storage/context.js.map | 1 + dist/esm/storage/create-index.js | 72 + dist/esm/storage/create-index.js.map | 1 + dist/esm/storage/custom/helpers.js | 64 + dist/esm/storage/custom/helpers.js.map | 1 + dist/esm/storage/custom/index.js | 1202 ++ dist/esm/storage/custom/index.js.map | 1 + dist/esm/storage/custom/indexed-db/index.js | 73 + .../storage/custom/indexed-db/index.js.map | 1 + .../esm/storage/custom/indexed-db/settings.js | 39 + .../storage/custom/indexed-db/settings.js.map | 1 + .../storage/custom/indexed-db/transaction.js | 220 + .../custom/indexed-db/transaction.js.map | 1 + .../esm/storage/custom/local-storage/index.js | 35 + .../storage/custom/local-storage/index.js.map | 1 + .../storage/custom/local-storage/interface.js | 2 + .../custom/local-storage/interface.js.map | 1 + .../storage/custom/local-storage/settings.js | 37 + .../custom/local-storage/settings.js.map | 1 + .../custom/local-storage/transaction.js | 89 + .../custom/local-storage/transaction.js.map | 1 + dist/esm/storage/index.js | 2066 +++ dist/esm/storage/index.js.map | 1 + dist/esm/storage/indexes.js | 2 + dist/esm/storage/indexes.js.map | 1 + dist/esm/storage/mssql/index.js | 1128 ++ dist/esm/storage/mssql/index.js.map | 1 + dist/esm/storage/sqlite/index.js | 1114 ++ dist/esm/storage/sqlite/index.js.map | 1 + dist/esm/thread-safe.js | 176 + dist/esm/thread-safe.js.map | 1 + dist/esm/unidecode-module.js | 1 + dist/esm/unidecode-module.js.map | 1 + dist/esm/unidecode.js | 4 + dist/esm/unidecode.js.map | 1 + dist/types/api-local.d.ts | 30 +- dist/types/api-local.d.ts.map | 2 +- dist/types/btree/binary-pointer.d.ts | 7 + dist/types/btree/binary-pointer.d.ts.map | 1 + dist/types/btree/binary-reference.d.ts | 8 + dist/types/btree/binary-reference.d.ts.map | 1 + dist/types/btree/tree-leaf.d.ts | 7 +- dist/types/btree/tree-leaf.d.ts.map | 2 +- dist/types/btree/tree-node.d.ts | 13 +- dist/types/btree/tree-node.d.ts.map | 2 +- dist/types/btree/typesafe-compare.d.ts | 2 +- dist/types/storage/index.d.ts | 4 +- dist/types/storage/index.d.ts.map | 2 +- 207 files changed, 30271 insertions(+), 5441 deletions(-) create mode 100644 dist/cjs/btree/binary-pointer.js create mode 100644 dist/cjs/btree/binary-pointer.js.map create mode 100644 dist/cjs/btree/binary-reference.js create mode 100644 dist/cjs/btree/binary-reference.js.map create mode 100644 dist/cjs/index.d.ts create mode 100644 dist/cjs/package.json create mode 100644 dist/esm/acebase-browser.js create mode 100644 dist/esm/acebase-browser.js.map create mode 100644 dist/esm/acebase-local.js create mode 100644 dist/esm/acebase-local.js.map create mode 100644 dist/esm/api-local.js create mode 100644 dist/esm/api-local.js.map create mode 100644 dist/esm/async-task-batch.js create mode 100644 dist/esm/async-task-batch.js.map create mode 100644 dist/esm/binary.js create mode 100644 dist/esm/binary.js.map create mode 100644 dist/esm/browser.js create mode 100644 dist/esm/browser.js.map create mode 100644 dist/esm/btree/binary-pointer.js create mode 100644 dist/esm/btree/binary-pointer.js.map create mode 100644 dist/esm/btree/binary-reader.js create mode 100644 dist/esm/btree/binary-reader.js.map create mode 100644 dist/esm/btree/binary-reference.js create mode 100644 dist/esm/btree/binary-reference.js.map create mode 100644 dist/esm/btree/binary-tree-builder.js create mode 100644 dist/esm/btree/binary-tree-builder.js.map create mode 100644 dist/esm/btree/binary-tree-leaf-entry-extdata.js create mode 100644 dist/esm/btree/binary-tree-leaf-entry-extdata.js.map create mode 100644 dist/esm/btree/binary-tree-leaf-entry-value.js create mode 100644 dist/esm/btree/binary-tree-leaf-entry-value.js.map create mode 100644 dist/esm/btree/binary-tree-leaf-entry.js create mode 100644 dist/esm/btree/binary-tree-leaf-entry.js.map create mode 100644 dist/esm/btree/binary-tree-leaf.js create mode 100644 dist/esm/btree/binary-tree-leaf.js.map create mode 100644 dist/esm/btree/binary-tree-node-entry.js create mode 100644 dist/esm/btree/binary-tree-node-entry.js.map create mode 100644 dist/esm/btree/binary-tree-node-info.js create mode 100644 dist/esm/btree/binary-tree-node-info.js.map create mode 100644 dist/esm/btree/binary-tree-node.js create mode 100644 dist/esm/btree/binary-tree-node.js.map create mode 100644 dist/esm/btree/binary-tree-transaction-operation.js create mode 100644 dist/esm/btree/binary-tree-transaction-operation.js.map create mode 100644 dist/esm/btree/binary-tree.js create mode 100644 dist/esm/btree/binary-tree.js.map create mode 100644 dist/esm/btree/binary-writer.js create mode 100644 dist/esm/btree/binary-writer.js.map create mode 100644 dist/esm/btree/config.js create mode 100644 dist/esm/btree/config.js.map create mode 100644 dist/esm/btree/entry-key-type.js create mode 100644 dist/esm/btree/entry-key-type.js.map create mode 100644 dist/esm/btree/index.js create mode 100644 dist/esm/btree/index.js.map create mode 100644 dist/esm/btree/leaf-entry-metadata.js create mode 100644 dist/esm/btree/leaf-entry-metadata.js.map create mode 100644 dist/esm/btree/leaf-entry-recordpointer.js create mode 100644 dist/esm/btree/leaf-entry-recordpointer.js.map create mode 100644 dist/esm/btree/tree-builder.js create mode 100644 dist/esm/btree/tree-builder.js.map create mode 100644 dist/esm/btree/tree-leaf-entry-value.js create mode 100644 dist/esm/btree/tree-leaf-entry-value.js.map create mode 100644 dist/esm/btree/tree-leaf-entry.js create mode 100644 dist/esm/btree/tree-leaf-entry.js.map create mode 100644 dist/esm/btree/tree-leaf.js create mode 100644 dist/esm/btree/tree-leaf.js.map create mode 100644 dist/esm/btree/tree-node-entry.js create mode 100644 dist/esm/btree/tree-node-entry.js.map create mode 100644 dist/esm/btree/tree-node.js create mode 100644 dist/esm/btree/tree-node.js.map create mode 100644 dist/esm/btree/tree.js create mode 100644 dist/esm/btree/tree.js.map create mode 100644 dist/esm/btree/tx.js create mode 100644 dist/esm/btree/tx.js.map create mode 100644 dist/esm/btree/typesafe-compare.js create mode 100644 dist/esm/btree/typesafe-compare.js.map create mode 100644 dist/esm/btree/utils.js create mode 100644 dist/esm/btree/utils.js.map create mode 100644 dist/esm/data-index/array-index-query-hint.js create mode 100644 dist/esm/data-index/array-index-query-hint.js.map create mode 100644 dist/esm/data-index/array-index.js create mode 100644 dist/esm/data-index/array-index.js.map create mode 100644 dist/esm/data-index/data-index.js create mode 100644 dist/esm/data-index/data-index.js.map create mode 100644 dist/esm/data-index/fulltext-index-query-hint.js create mode 100644 dist/esm/data-index/fulltext-index-query-hint.js.map create mode 100644 dist/esm/data-index/fulltext-index.js create mode 100644 dist/esm/data-index/fulltext-index.js.map create mode 100644 dist/esm/data-index/geo-index.js create mode 100644 dist/esm/data-index/geo-index.js.map create mode 100644 dist/esm/data-index/index.js create mode 100644 dist/esm/data-index/index.js.map create mode 100644 dist/esm/data-index/options.js create mode 100644 dist/esm/data-index/options.js.map create mode 100644 dist/esm/data-index/query-hint.js create mode 100644 dist/esm/data-index/query-hint.js.map create mode 100644 dist/esm/data-index/query-results.js create mode 100644 dist/esm/data-index/query-results.js.map create mode 100644 dist/esm/data-index/query-stats.js create mode 100644 dist/esm/data-index/query-stats.js.map create mode 100644 dist/esm/data-index/shared.js create mode 100644 dist/esm/data-index/shared.js.map create mode 100644 dist/esm/detailed-error.js create mode 100644 dist/esm/detailed-error.js.map create mode 100644 dist/esm/geohash.js create mode 100644 dist/esm/geohash.js.map create mode 100644 dist/esm/index.d.ts create mode 100644 dist/esm/index.js create mode 100644 dist/esm/index.js.map create mode 100644 dist/esm/ipc/browser.js create mode 100644 dist/esm/ipc/browser.js.map create mode 100644 dist/esm/ipc/index.js create mode 100644 dist/esm/ipc/index.js.map create mode 100644 dist/esm/ipc/ipc.js create mode 100644 dist/esm/ipc/ipc.js.map create mode 100644 dist/esm/ipc/remote.js create mode 100644 dist/esm/ipc/remote.js.map create mode 100644 dist/esm/node-address.js create mode 100644 dist/esm/node-address.js.map create mode 100644 dist/esm/node-cache.js create mode 100644 dist/esm/node-cache.js.map create mode 100644 dist/esm/node-changes.js create mode 100644 dist/esm/node-changes.js.map create mode 100644 dist/esm/node-errors.js create mode 100644 dist/esm/node-errors.js.map create mode 100644 dist/esm/node-info.js create mode 100644 dist/esm/node-info.js.map create mode 100644 dist/esm/node-lock.js create mode 100644 dist/esm/node-lock.js.map create mode 100644 dist/esm/node-transaction.js create mode 100644 dist/esm/node-transaction.js.map create mode 100644 dist/esm/node-value-types.js create mode 100644 dist/esm/node-value-types.js.map create mode 100644 dist/esm/node.js create mode 100644 dist/esm/node.js.map create mode 100644 dist/esm/not-supported.js create mode 100644 dist/esm/not-supported.js.map create mode 100644 dist/esm/package.json create mode 100644 dist/esm/promise-fs/browser.js create mode 100644 dist/esm/promise-fs/browser.js.map create mode 100644 dist/esm/promise-fs/index.js create mode 100644 dist/esm/promise-fs/index.js.map create mode 100644 dist/esm/query.js create mode 100644 dist/esm/query.js.map create mode 100644 dist/esm/quicksort.js create mode 100644 dist/esm/quicksort.js.map create mode 100644 dist/esm/storage/binary/index.js create mode 100644 dist/esm/storage/binary/index.js.map create mode 100644 dist/esm/storage/binary/node-address.js create mode 100644 dist/esm/storage/binary/node-address.js.map create mode 100644 dist/esm/storage/binary/node-info.js create mode 100644 dist/esm/storage/binary/node-info.js.map create mode 100644 dist/esm/storage/context.js create mode 100644 dist/esm/storage/context.js.map create mode 100644 dist/esm/storage/create-index.js create mode 100644 dist/esm/storage/create-index.js.map create mode 100644 dist/esm/storage/custom/helpers.js create mode 100644 dist/esm/storage/custom/helpers.js.map create mode 100644 dist/esm/storage/custom/index.js create mode 100644 dist/esm/storage/custom/index.js.map create mode 100644 dist/esm/storage/custom/indexed-db/index.js create mode 100644 dist/esm/storage/custom/indexed-db/index.js.map create mode 100644 dist/esm/storage/custom/indexed-db/settings.js create mode 100644 dist/esm/storage/custom/indexed-db/settings.js.map create mode 100644 dist/esm/storage/custom/indexed-db/transaction.js create mode 100644 dist/esm/storage/custom/indexed-db/transaction.js.map create mode 100644 dist/esm/storage/custom/local-storage/index.js create mode 100644 dist/esm/storage/custom/local-storage/index.js.map create mode 100644 dist/esm/storage/custom/local-storage/interface.js create mode 100644 dist/esm/storage/custom/local-storage/interface.js.map create mode 100644 dist/esm/storage/custom/local-storage/settings.js create mode 100644 dist/esm/storage/custom/local-storage/settings.js.map create mode 100644 dist/esm/storage/custom/local-storage/transaction.js create mode 100644 dist/esm/storage/custom/local-storage/transaction.js.map create mode 100644 dist/esm/storage/index.js create mode 100644 dist/esm/storage/index.js.map create mode 100644 dist/esm/storage/indexes.js create mode 100644 dist/esm/storage/indexes.js.map create mode 100644 dist/esm/storage/mssql/index.js create mode 100644 dist/esm/storage/mssql/index.js.map create mode 100644 dist/esm/storage/sqlite/index.js create mode 100644 dist/esm/storage/sqlite/index.js.map create mode 100644 dist/esm/thread-safe.js create mode 100644 dist/esm/thread-safe.js.map create mode 100644 dist/esm/unidecode-module.js create mode 100644 dist/esm/unidecode-module.js.map create mode 100644 dist/esm/unidecode.js create mode 100644 dist/esm/unidecode.js.map create mode 100644 dist/types/btree/binary-pointer.d.ts create mode 100644 dist/types/btree/binary-pointer.d.ts.map create mode 100644 dist/types/btree/binary-reference.d.ts create mode 100644 dist/types/btree/binary-reference.d.ts.map diff --git a/dist/browser.js b/dist/browser.js index d8e407d..4314294 100644 --- a/dist/browser.js +++ b/dist/browser.js @@ -1,6 +1,5365 @@ (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.acebase = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i { + // console.log(`database "${dbname}" (${this.constructor.name}) is ready to use`); + this._ready = true; + }); + } + /** + * Waits for the database to be ready before running your callback. + * @param callback (optional) callback function that is called when the database is ready to be used. You can also use the returned promise. + * @returns returns a promise that resolves when ready + */ + async ready(callback) { + if (!this._ready) { + // Wait for ready event + await new Promise(resolve => this.on('ready', resolve)); + } + callback === null || callback === void 0 ? void 0 : callback(); + } + get isReady() { + return this._ready; + } + /** + * Allow specific observable implementation to be used + * @param ObservableImpl Implementation to use + */ + setObservable(ObservableImpl) { + (0, optional_observable_1.setObservable)(ObservableImpl); + } + /** + * Creates a reference to a node + * @param path + * @returns reference to the requested node + */ + ref(path) { + return new data_reference_1.DataReference(this, path); + } + /** + * Get a reference to the root database node + * @returns reference to root node + */ + get root() { + return this.ref(''); + } + /** + * Creates a query on the requested node + * @param path + * @returns query for the requested node + */ + query(path) { + const ref = new data_reference_1.DataReference(this, path); + return new data_reference_1.DataReferenceQuery(ref); + } + get indexes() { + return { + /** + * Gets all indexes + */ + get: () => { + return this.api.getIndexes(); + }, + /** + * Creates an index on "key" for all child nodes at "path". If the index already exists, nothing happens. + * Example: creating an index on all "name" keys of child objects of path "system/users", + * will index "system/users/user1/name", "system/users/user2/name" etc. + * You can also use wildcard paths to enable indexing and quering of fragmented data. + * Example: path "users/*\/posts", key "title": will index all "title" keys in all posts of all users. + * @param path path to the container node + * @param key name of the key to index every container child node + * @param options any additional options + */ + create: (path, key, options) => { + return this.api.createIndex(path, key, options); + }, + /** + * Deletes an existing index from the database + */ + delete: async (filePath) => { + return this.api.deleteIndex(filePath); + }, + }; + } + get schema() { + return { + get: (path) => { + return this.api.getSchema(path); + }, + set: (path, schema) => { + return this.api.setSchema(path, schema); + }, + all: () => { + return this.api.getSchemas(); + }, + check: (path, value, isUpdate) => { + return this.api.validateSchema(path, value, isUpdate); + }, + }; + } +} +exports.AceBaseBase = AceBaseBase; + +},{"./data-reference":8,"./debug":10,"./optional-observable":14,"./simple-colors":21,"./simple-event-emitter":22,"./type-mappings":25}],2:[function(require,module,exports){ +"use strict"; +/* eslint-disable @typescript-eslint/no-unused-vars */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Api = void 0; +class NotImplementedError extends Error { + constructor(name) { super(`${name} is not implemented`); } +} +/** + * Refactor to type/interface once acebase and acebase-client have been ported to TS + */ +class Api { + // eslint-disable-next-line @typescript-eslint/no-empty-function + constructor() { } + /** + * Provides statistics + * @param options + */ + stats(options) { throw new NotImplementedError('stats'); } + /** + * @param path + * @param event event to subscribe to ("value", "child_added" etc) + * @param callback callback function + */ + subscribe(path, event, callback, settings) { throw new NotImplementedError('subscribe'); } + unsubscribe(path, event, callback) { throw new NotImplementedError('unsubscribe'); } + update(path, updates, options) { throw new NotImplementedError('update'); } + set(path, value, options) { throw new NotImplementedError('set'); } + get(path, options) { throw new NotImplementedError('get'); } + transaction(path, callback, options) { throw new NotImplementedError('transaction'); } + exists(path) { throw new NotImplementedError('exists'); } + query(path, query, options) { throw new NotImplementedError('query'); } + reflect(path, type, args) { throw new NotImplementedError('reflect'); } + export(path, write, options) { throw new NotImplementedError('export'); } + import(path, read, options) { throw new NotImplementedError('import'); } + /** Creates an index on key for all child nodes at path */ + createIndex(path, key, options) { throw new NotImplementedError('createIndex'); } + getIndexes() { throw new NotImplementedError('getIndexes'); } + deleteIndex(filePath) { throw new NotImplementedError('deleteIndex'); } + setSchema(path, schema) { throw new NotImplementedError('setSchema'); } + getSchema(path) { throw new NotImplementedError('getSchema'); } + getSchemas() { throw new NotImplementedError('getSchemas'); } + validateSchema(path, value, isUpdate) { throw new NotImplementedError('validateSchema'); } + getMutations(filter) { throw new NotImplementedError('getMutations'); } + getChanges(filter) { throw new NotImplementedError('getChanges'); } +} +exports.Api = Api; + +},{}],3:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ascii85 = void 0; +function c(input, length, result) { + const b = [0, 0, 0, 0, 0]; + for (let i = 0; i < length; i += 4) { + let n = ((input[i] * 256 + input[i + 1]) * 256 + input[i + 2]) * 256 + input[i + 3]; + if (!n) { + result.push('z'); + } + else { + for (let j = 0; j < 5; b[j++] = n % 85 + 33, n = Math.floor(n / 85)) + ; + result.push(String.fromCharCode(b[4], b[3], b[2], b[1], b[0])); + } + } +} +function encode(arr) { + // summary: encodes input data in ascii85 string + // input: ArrayLike + const input = arr, result = [], remainder = input.length % 4, length = input.length - remainder; + c(input, length, result); + if (remainder) { + const t = new Uint8Array(4); + t.set(input.slice(length), 0); + c(t, 4, result); + let x = result.pop(); + if (x == 'z') { + x = '!!!!!'; + } + result.push(x.substr(0, remainder + 1)); + } + let ret = result.join(''); // String + ret = '<~' + ret + '~>'; + return ret; +} +exports.ascii85 = { + encode: function (arr) { + if (arr instanceof ArrayBuffer) { + arr = new Uint8Array(arr, 0, arr.byteLength); + } + return encode(arr); + }, + decode: function (input) { + // summary: decodes the input string back to an ArrayBuffer + // input: String: the input string to decode + if (!input.startsWith('<~') || !input.endsWith('~>')) { + throw new Error('Invalid input string'); + } + input = input.substr(2, input.length - 4); + const n = input.length, r = [], b = [0, 0, 0, 0, 0]; + let t, x, y, d; + for (let i = 0; i < n; ++i) { + if (input.charAt(i) == 'z') { + r.push(0, 0, 0, 0); + continue; + } + for (let j = 0; j < 5; ++j) { + b[j] = input.charCodeAt(i + j) - 33; + } + d = n - i; + if (d < 5) { + for (let j = d; j < 4; b[++j] = 0) + ; + b[d] = 85; + } + t = (((b[0] * 85 + b[1]) * 85 + b[2]) * 85 + b[3]) * 85 + b[4]; + x = t & 255; + t >>>= 8; + y = t & 255; + t >>>= 8; + r.push(t >>> 8, t & 255, y, x); + for (let j = d; j < 5; ++j, r.pop()) + ; + i += 4; + } + const data = new Uint8Array(r); + return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength); + }, +}; + +},{}],4:[function(require,module,exports){ +"use strict"; +var _a, _b; +Object.defineProperty(exports, "__esModule", { value: true }); +const pad_1 = require("../pad"); +const env = typeof window === 'object' ? window : self, globalCount = Object.keys(env).length, mimeTypesLength = (_b = (_a = navigator.mimeTypes) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0, clientId = (0, pad_1.default)((mimeTypesLength + + navigator.userAgent.length).toString(36) + + globalCount.toString(36), 4); +function fingerprint() { + return clientId; +} +exports.default = fingerprint; + +},{"../pad":6}],5:[function(require,module,exports){ +"use strict"; +/** + * cuid.js + * Collision-resistant UID generator for browsers and node. + * Sequential for fast db lookups and recency sorting. + * Safe for element IDs and server-side lookups. + * + * Extracted from CLCTR + * + * Copyright (c) Eric Elliott 2012 + * MIT License + * + * time biasing added by Ewout Stortenbeker for AceBase + */ +Object.defineProperty(exports, "__esModule", { value: true }); +const fingerprint_1 = require("./fingerprint"); +const pad_1 = require("./pad"); +let c = 0; +const blockSize = 4, base = 36, discreteValues = Math.pow(base, blockSize); +function randomBlock() { + return (0, pad_1.default)((Math.random() * discreteValues << 0).toString(base), blockSize); +} +function safeCounter() { + c = c < discreteValues ? c : 0; + c++; // this is not subliminal + return c - 1; +} +function cuid(timebias = 0) { + // Starting with a lowercase letter makes + // it HTML element ID friendly. + const letter = 'c', // hard-coded allows for sequential access + // timestamp + // warning: this exposes the exact date and time + // that the uid was created. + // NOTES Ewout: + // - added timebias + // - at '2059/05/25 19:38:27.456', timestamp will become 1 character larger! + timestamp = (new Date().getTime() + timebias).toString(base), + // Prevent same-machine collisions. + counter = (0, pad_1.default)(safeCounter().toString(base), blockSize), + // A few chars to generate distinct ids for different + // clients (so different computers are far less + // likely to generate the same id) + print = (0, fingerprint_1.default)(), + // Grab some more chars from Math.random() + random = randomBlock() + randomBlock(); + return letter + timestamp + counter + print + random; +} +exports.default = cuid; +// Not using slugs, removed code + +},{"./fingerprint":4,"./pad":6}],6:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +function pad(num, size) { + const s = '000000000' + num; + return s.substr(s.length - size); +} +exports.default = pad; + +},{}],7:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OrderedCollectionProxy = exports.proxyAccess = exports.LiveDataProxy = void 0; +const utils_1 = require("./utils"); +const data_reference_1 = require("./data-reference"); +const data_snapshot_1 = require("./data-snapshot"); +const path_reference_1 = require("./path-reference"); +const id_1 = require("./id"); +const optional_observable_1 = require("./optional-observable"); +const process_1 = require("./process"); +const path_info_1 = require("./path-info"); +const simple_event_emitter_1 = require("./simple-event-emitter"); +class RelativeNodeTarget extends Array { + static areEqual(t1, t2) { + return t1.length === t2.length && t1.every((key, i) => t2[i] === key); + } + static isAncestor(ancestor, other) { + return ancestor.length < other.length && ancestor.every((key, i) => other[i] === key); + } + static isDescendant(descendant, other) { + return descendant.length > other.length && other.every((key, i) => descendant[i] === key); + } +} +const isProxy = Symbol('isProxy'); +class LiveDataProxy { + /** + * Creates a live data proxy for the given reference. The data of the reference's path will be loaded, and kept in-sync + * with live data by listening for 'mutations' events. Any changes made to the value by the client will be synced back + * to the database. + * @param ref DataReference to create proxy for. + * @param options proxy initialization options + * be written to the database. + */ + static async create(ref, options) { + var _a; + ref = new data_reference_1.DataReference(ref.db, ref.path); // Use copy to prevent context pollution on original reference + let cache, loaded = false; + let latestCursor = options === null || options === void 0 ? void 0 : options.cursor; + let proxy; + const proxyId = id_1.ID.generate(); //ref.push().key; + // let onMutationCallback: ProxyObserveMutationsCallback; + // let onErrorCallback: ProxyObserveErrorCallback = err => { + // console.error(err.message, err.details); + // }; + const clientSubscriptions = []; + const clientEventEmitter = new simple_event_emitter_1.SimpleEventEmitter(); + clientEventEmitter.on('cursor', (cursor) => latestCursor = cursor); + clientEventEmitter.on('error', (err) => { + console.error(err.message, err.details); + }); + const applyChange = (keys, newValue) => { + // Make changes to cache + if (keys.length === 0) { + cache = newValue; + return true; + } + const allowCreation = false; //cache === null; // If the proxy'd target did not exist upon load, we must allow it to be created now. + if (allowCreation) { + cache = typeof keys[0] === 'number' ? [] : {}; + } + let target = cache; + const trailKeys = keys.slice(); + while (trailKeys.length > 1) { + const key = trailKeys.shift(); + if (!(key in target)) { + if (allowCreation) { + target[key] = typeof key === 'number' ? [] : {}; + } + else { + // Have we missed an event, or are local pending mutations creating this conflict? + return false; // Do not proceed + } + } + target = target[key]; + } + const prop = trailKeys.shift(); + if (newValue === null) { + // Remove it + target instanceof Array ? target.splice(prop, 1) : delete target[prop]; + } + else { + // Set or update it + target[prop] = newValue; + } + return true; + }; + // Subscribe to mutations events on the target path + const syncFallback = async () => { + if (!loaded) { + return; + } + await reload(); + }; + const subscription = ref.on('mutations', { syncFallback }).subscribe(async (snap) => { + var _a; + if (!loaded) { + return; + } + const context = snap.context(); + const isRemote = ((_a = context.acebase_proxy) === null || _a === void 0 ? void 0 : _a.id) !== proxyId; + if (!isRemote) { + return; // Update was done through this proxy, no need to update cache or trigger local value subscriptions + } + const mutations = snap.val(false); + const proceed = mutations.every(mutation => { + if (!applyChange(mutation.target, mutation.val)) { + return false; + } + // if (onMutationCallback) { + const changeRef = mutation.target.reduce((ref, key) => ref.child(key), ref); + const changeSnap = new data_snapshot_1.DataSnapshot(changeRef, mutation.val, false, mutation.prev, snap.context()); + // onMutationCallback(changeSnap, isRemote); // onMutationCallback uses try/catch for client callback + clientEventEmitter.emit('mutation', { snapshot: changeSnap, isRemote }); + // } + return true; + }); + if (proceed) { + clientEventEmitter.emit('cursor', context.acebase_cursor); // // NOTE: cursor is only present in mutations done remotely. For our own updates, server cursors are returned by ref.set and ref.update + localMutationsEmitter.emit('mutations', { origin: 'remote', snap }); + } + else { + console.warn(`Cached value of live data proxy on "${ref.path}" appears outdated, will be reloaded`); + await reload(); + } + }); + // Setup updating functionality: enqueue all updates, process them at next tick in the order they were issued + let processPromise = Promise.resolve(); + const mutationQueue = []; + const transactions = []; + const pushLocalMutations = async () => { + // Sync all local mutations that are not in a transaction + const mutations = []; + for (let i = 0, m = mutationQueue[0]; i < mutationQueue.length; i++, m = mutationQueue[i]) { + if (!transactions.find(t => RelativeNodeTarget.areEqual(t.target, m.target) || RelativeNodeTarget.isAncestor(t.target, m.target))) { + mutationQueue.splice(i, 1); + i--; + mutations.push(m); + } + } + if (mutations.length === 0) { + return; + } + // Add current (new) values to mutations + mutations.forEach(mutation => { + mutation.value = (0, utils_1.cloneObject)(getTargetValue(cache, mutation.target)); + }); + // Run local onMutation & onChange callbacks in the next tick + process_1.default.nextTick(() => { + // Run onMutation callback for each changed node + const context = { acebase_proxy: { id: proxyId, source: 'update' } }; + // if (onMutationCallback) { + mutations.forEach(mutation => { + const mutationRef = mutation.target.reduce((ref, key) => ref.child(key), ref); + const mutationSnap = new data_snapshot_1.DataSnapshot(mutationRef, mutation.value, false, mutation.previous, context); + // onMutationCallback(mutationSnap, false); + clientEventEmitter.emit('mutation', { snapshot: mutationSnap, isRemote: false }); + }); + // } + // Notify local subscribers + const snap = new data_snapshot_1.MutationsDataSnapshot(ref, mutations.map(m => ({ target: m.target, val: m.value, prev: m.previous })), context); + localMutationsEmitter.emit('mutations', { origin: 'local', snap }); + }); + // Update database async + // const batchId = ID.generate(); + processPromise = mutations + .reduce((mutations, m, i, arr) => { + // Only keep top path mutations to prevent unneccessary child path updates + if (!arr.some(other => RelativeNodeTarget.isAncestor(other.target, m.target))) { + mutations.push(m); + } + return mutations; + }, []) + .reduce((updates, m) => { + // Prepare db updates + const target = m.target; + if (target.length === 0) { + // Overwrite this proxy's root value + updates.push({ ref, target, value: cache, type: 'set', previous: m.previous }); + } + else { + const parentTarget = target.slice(0, -1); + const key = target.slice(-1)[0]; + const parentRef = parentTarget.reduce((ref, key) => ref.child(key), ref); + const parentUpdate = updates.find(update => update.ref.path === parentRef.path); + const cacheValue = getTargetValue(cache, target); // m.value? + const prevValue = m.previous; + if (parentUpdate) { + parentUpdate.value[key] = cacheValue; + parentUpdate.previous[key] = prevValue; + } + else { + updates.push({ ref: parentRef, target: parentTarget, value: { [key]: cacheValue }, type: 'update', previous: { [key]: prevValue } }); + } + } + return updates; + }, []) + .reduce(async (promise, update /*, i, updates */) => { + // Execute db update + // i === 0 && console.log(`Proxy: processing ${updates.length} db updates to paths:`, updates.map(update => update.ref.path)); + const context = { + acebase_proxy: { + id: proxyId, + source: update.type, + // update_id: ID.generate(), + // batch_id: batchId, + // batch_updates: updates.length + }, + }; + await promise; + await update.ref + .context(context)[update.type](update.value) // .set or .update + .catch(err => { + clientEventEmitter.emit('error', { source: 'update', message: `Error processing update of "/${ref.path}"`, details: err }); + // console.warn(`Proxy could not update DB, should rollback (${update.type}) the proxy value of "${update.ref.path}" to: `, update.previous); + const context = { acebase_proxy: { id: proxyId, source: 'update-rollback' } }; + const mutations = []; + if (update.type === 'set') { + setTargetValue(cache, update.target, update.previous); + const mutationSnap = new data_snapshot_1.DataSnapshot(update.ref, update.previous, false, update.value, context); + clientEventEmitter.emit('mutation', { snapshot: mutationSnap, isRemote: false }); + mutations.push({ target: update.target, val: update.previous, prev: update.value }); + } + else { + // update + Object.keys(update.previous).forEach(key => { + setTargetValue(cache, update.target.concat(key), update.previous[key]); + const mutationSnap = new data_snapshot_1.DataSnapshot(update.ref.child(key), update.previous[key], false, update.value[key], context); + clientEventEmitter.emit('mutation', { snapshot: mutationSnap, isRemote: false }); + mutations.push({ target: update.target.concat(key), val: update.previous[key], prev: update.value[key] }); + }); + } + // Run onMutation callback for each node being rolled back + mutations.forEach(m => { + const mutationRef = m.target.reduce((ref, key) => ref.child(key), ref); + const mutationSnap = new data_snapshot_1.DataSnapshot(mutationRef, m.val, false, m.prev, context); + clientEventEmitter.emit('mutation', { snapshot: mutationSnap, isRemote: false }); + }); + // Notify local subscribers: + const snap = new data_snapshot_1.MutationsDataSnapshot(update.ref, mutations, context); + localMutationsEmitter.emit('mutations', { origin: 'local', snap }); + }); + if (update.ref.cursor) { + // Should also be available in context.acebase_cursor now + clientEventEmitter.emit('cursor', update.ref.cursor); + } + }, processPromise); + await processPromise; + }; + let syncInProgress = false; + const syncPromises = []; + const syncCompleted = () => { + let resolve; + const promise = new Promise(rs => resolve = rs); + syncPromises.push({ resolve }); + return promise; + }; + let processQueueTimeout = null; + const scheduleSync = () => { + if (!processQueueTimeout) { + processQueueTimeout = setTimeout(async () => { + syncInProgress = true; + processQueueTimeout = null; + await pushLocalMutations(); + syncInProgress = false; + syncPromises.splice(0).forEach(p => p.resolve()); + }, 0); + } + }; + const flagOverwritten = (target) => { + if (!mutationQueue.find(m => RelativeNodeTarget.areEqual(m.target, target))) { + mutationQueue.push({ target, previous: (0, utils_1.cloneObject)(getTargetValue(cache, target)) }); + } + // schedule database updates + scheduleSync(); + }; + const localMutationsEmitter = new simple_event_emitter_1.SimpleEventEmitter(); + const addOnChangeHandler = (target, callback) => { + const isObject = (val) => val !== null && typeof val === 'object'; + const mutationsHandler = async (details) => { + var _a; + const { snap, origin } = details; + const context = snap.context(); + const causedByOurProxy = ((_a = context.acebase_proxy) === null || _a === void 0 ? void 0 : _a.id) === proxyId; + if (details.origin === 'remote' && causedByOurProxy) { + // Any local changes already triggered subscription callbacks + console.error('DEV ISSUE: mutationsHandler was called from remote event originating from our own proxy'); + return; + } + const mutations = snap.val(false).filter(mutation => { + // Keep mutations impacting the subscribed target: mutations on target, or descendant or ancestor of target + return mutation.target.slice(0, target.length).every((key, i) => target[i] === key); + }); + if (mutations.length === 0) { + return; + } + let newValue, previousValue; + // If there is a mutation on the target itself, or parent/ancestor path, there can only be one. We can take a shortcut + const singleMutation = mutations.find(m => m.target.length <= target.length); + if (singleMutation) { + const trailKeys = target.slice(singleMutation.target.length); + newValue = trailKeys.reduce((val, key) => !isObject(val) || !(key in val) ? null : val[key], singleMutation.val); + previousValue = trailKeys.reduce((val, key) => !isObject(val) || !(key in val) ? null : val[key], singleMutation.prev); + } + else { + // All mutations are on children/descendants of our target + // Construct new & previous values by combining cache and snapshot + const currentValue = getTargetValue(cache, target); + newValue = (0, utils_1.cloneObject)(currentValue); + previousValue = (0, utils_1.cloneObject)(newValue); + mutations.forEach(mutation => { + // mutation.target is relative to proxy root + const trailKeys = mutation.target.slice(target.length); + for (let i = 0, val = newValue, prev = previousValue; i < trailKeys.length; i++) { // arr = PathInfo.getPathKeys(mutationPath).slice(PathInfo.getPathKeys(targetRef.path).length) + const last = i + 1 === trailKeys.length, key = trailKeys[i]; + if (last) { + val[key] = mutation.val; + if (val[key] === null) { + delete val[key]; + } + prev[key] = mutation.prev; + if (prev[key] === null) { + delete prev[key]; + } + } + else { + val = val[key] = key in val ? val[key] : {}; + prev = prev[key] = key in prev ? prev[key] : {}; + } + } + }); + } + process_1.default.nextTick(() => { + // Run callback with read-only (frozen) values in next tick + let keepSubscription = true; + try { + keepSubscription = false !== callback(Object.freeze(newValue), Object.freeze(previousValue), !causedByOurProxy, context); + } + catch (err) { + clientEventEmitter.emit('error', { source: origin === 'remote' ? 'remote_update' : 'local_update', message: 'Error running subscription callback', details: err }); + } + if (keepSubscription === false) { + stop(); + } + }); + }; + localMutationsEmitter.on('mutations', mutationsHandler); + const stop = () => { + localMutationsEmitter.off('mutations').off('mutations', mutationsHandler); + clientSubscriptions.splice(clientSubscriptions.findIndex(cs => cs.stop === stop), 1); + }; + clientSubscriptions.push({ target, stop }); + return { stop }; + }; + const handleFlag = (flag, target, args) => { + if (flag === 'write') { + return flagOverwritten(target); + } + else if (flag === 'onChange') { + return addOnChangeHandler(target, args.callback); + } + else if (flag === 'subscribe' || flag === 'observe') { + const subscribe = (subscriber) => { + const currentValue = getTargetValue(cache, target); + subscriber.next(currentValue); + const subscription = addOnChangeHandler(target, (value /*, previous, isRemote, context */) => { + subscriber.next(value); + }); + return function unsubscribe() { + subscription.stop(); + }; + }; + if (flag === 'subscribe') { + return subscribe; + } + // Try to load Observable + const Observable = (0, optional_observable_1.getObservable)(); + return new Observable(subscribe); + } + else if (flag === 'transaction') { + const hasConflictingTransaction = transactions.some(t => RelativeNodeTarget.areEqual(target, t.target) || RelativeNodeTarget.isAncestor(target, t.target) || RelativeNodeTarget.isDescendant(target, t.target)); + if (hasConflictingTransaction) { + // TODO: Wait for this transaction to finish, then try again + return Promise.reject(new Error('Cannot start transaction because it conflicts with another transaction')); + } + return new Promise(async (resolve) => { + // If there are pending mutations on target (or deeper), wait until they have been synchronized + const hasPendingMutations = mutationQueue.some(m => RelativeNodeTarget.areEqual(target, m.target) || RelativeNodeTarget.isAncestor(target, m.target)); + if (hasPendingMutations) { + if (!syncInProgress) { + scheduleSync(); + } + await syncCompleted(); + } + const tx = { target, status: 'started', transaction: null }; + transactions.push(tx); + tx.transaction = { + get status() { return tx.status; }, + get completed() { return tx.status !== 'started'; }, + get mutations() { + return mutationQueue.filter(m => RelativeNodeTarget.areEqual(tx.target, m.target) || RelativeNodeTarget.isAncestor(tx.target, m.target)); + }, + get hasMutations() { + return this.mutations.length > 0; + }, + async commit() { + if (this.completed) { + throw new Error(`Transaction has completed already (status '${tx.status}')`); + } + tx.status = 'finished'; + transactions.splice(transactions.indexOf(tx), 1); + if (syncInProgress) { + // Currently syncing without our mutations + await syncCompleted(); + } + scheduleSync(); + await syncCompleted(); + }, + rollback() { + // Remove mutations from queue + if (this.completed) { + throw new Error(`Transaction has completed already (status '${tx.status}')`); + } + tx.status = 'canceled'; + const mutations = []; + for (let i = 0; i < mutationQueue.length; i++) { + const m = mutationQueue[i]; + if (RelativeNodeTarget.areEqual(tx.target, m.target) || RelativeNodeTarget.isAncestor(tx.target, m.target)) { + mutationQueue.splice(i, 1); + i--; + mutations.push(m); + } + } + // Replay mutations in reverse order + mutations.reverse() + .forEach(m => { + if (m.target.length === 0) { + cache = m.previous; + } + else { + setTargetValue(cache, m.target, m.previous); + } + }); + // Remove transaction + transactions.splice(transactions.indexOf(tx), 1); + }, + }; + resolve(tx.transaction); + }); + } + }; + const snap = await ref.get({ cache_mode: 'allow', cache_cursor: options === null || options === void 0 ? void 0 : options.cursor }); + // const gotOfflineStartValue = snap.context().acebase_origin === 'cache'; + // if (gotOfflineStartValue) { + // console.warn(`Started data proxy with cached value of "${ref.path}", check if its value is reloaded on next connection!`); + // } + if (snap.context().acebase_origin !== 'cache') { + clientEventEmitter.emit('cursor', (_a = ref.cursor) !== null && _a !== void 0 ? _a : null); // latestCursor = snap.context().acebase_cursor ?? null; + } + loaded = true; + cache = snap.val(); + if (cache === null && typeof (options === null || options === void 0 ? void 0 : options.defaultValue) !== 'undefined') { + cache = options.defaultValue; + const context = { + acebase_proxy: { + id: proxyId, + source: 'default', + // update_id: ID.generate() + }, + }; + await ref.context(context).set(cache); + } + proxy = createProxy({ root: { ref, get cache() { return cache; } }, target: [], id: proxyId, flag: handleFlag }); + const assertProxyAvailable = () => { + if (proxy === null) { + throw new Error('Proxy was destroyed'); + } + }; + const reload = async () => { + // Manually reloads current value when cache is out of sync, which should only + // be able to happen if an AceBaseClient is used without cache database, + // and the connection to the server was lost for a while. In all other cases, + // there should be no need to call this method. + assertProxyAvailable(); + mutationQueue.splice(0); // Remove pending mutations. Will be empty in production, but might not be while debugging, leading to weird behaviour. + const snap = await ref.get({ allow_cache: false }); + const oldVal = cache, newVal = snap.val(); + cache = newVal; + // Compare old and new values + const mutations = (0, utils_1.getMutations)(oldVal, newVal); + if (mutations.length === 0) { + return; // Nothing changed + } + // Run onMutation callback for each changed node + const context = snap.context(); // context might contain acebase_cursor if server support that + context.acebase_proxy = { id: proxyId, source: 'reload' }; + // if (onMutationCallback) { + mutations.forEach(m => { + const targetRef = getTargetRef(ref, m.target); + const newSnap = new data_snapshot_1.DataSnapshot(targetRef, m.val, m.val === null, m.prev, context); + clientEventEmitter.emit('mutation', { snapshot: newSnap, isRemote: true }); + }); + // } + // Notify local subscribers + const mutationsSnap = new data_snapshot_1.MutationsDataSnapshot(ref, mutations, context); + localMutationsEmitter.emit('mutations', { origin: 'local', snap: mutationsSnap }); + }; + return { + async destroy() { + await processPromise; + const promises = [ + subscription.stop(), + ...clientSubscriptions.map(cs => cs.stop()), + ]; + await Promise.all(promises); + ['cursor', 'mutation', 'error'].forEach(event => clientEventEmitter.off(event)); + cache = null; // Remove cache + proxy = null; + }, + stop() { + this.destroy(); + }, + get value() { + assertProxyAvailable(); + return proxy; + }, + get hasValue() { + assertProxyAvailable(); + return cache !== null; + }, + set value(val) { + // Overwrite the value of the proxied path itself! + assertProxyAvailable(); + if (val !== null && typeof val === 'object' && val[isProxy]) { + // Assigning one proxied value to another + val = val.valueOf(); + } + flagOverwritten([]); + cache = val; + }, + get ref() { + return ref; + }, + get cursor() { + return latestCursor; + }, + reload, + onMutation(callback) { + // Fires callback each time anything changes + assertProxyAvailable(); + clientEventEmitter.off('mutation'); // Mimic legacy behaviour that overwrites handler + clientEventEmitter.on('mutation', ({ snapshot, isRemote }) => { + try { + callback(snapshot, isRemote); + } + catch (err) { + clientEventEmitter.emit('error', { source: 'mutation_callback', message: 'Error in dataproxy onMutation callback', details: err }); + } + }); + }, + onError(callback) { + // Fires callback each time anything goes wrong + assertProxyAvailable(); + clientEventEmitter.off('error'); // Mimic legacy behaviour that overwrites handler + clientEventEmitter.on('error', (err) => { + try { + callback(err); + } + catch (err) { + console.error(`Error in dataproxy onError callback: ${err.message}`); + } + }); + }, + on(event, callback) { + clientEventEmitter.on(event, callback); + }, + off(event, callback) { + clientEventEmitter.off(event, callback); + }, + }; + } +} +exports.LiveDataProxy = LiveDataProxy; +function getTargetValue(obj, target) { + let val = obj; + for (const key of target) { + val = typeof val === 'object' && val !== null && key in val ? val[key] : null; + } + return val; +} +function setTargetValue(obj, target, value) { + if (target.length === 0) { + throw new Error('Cannot update root target, caller must do that itself!'); + } + const targetObject = target.slice(0, -1).reduce((obj, key) => obj[key], obj); + const prop = target.slice(-1)[0]; + if (value === null || typeof value === 'undefined') { + // Remove it + targetObject instanceof Array ? targetObject.splice(prop, 1) : delete targetObject[prop]; + } + else { + // Set or update it + targetObject[prop] = value; + } +} +function getTargetRef(ref, target) { + // Create new DataReference to prevent context reuse + const path = path_info_1.PathInfo.get(ref.path).childPath(target); + return new data_reference_1.DataReference(ref.db, path); +} +function createProxy(context) { + const targetRef = getTargetRef(context.root.ref, context.target); + const childProxies = []; + const handler = { + get(target, prop, receiver) { + target = getTargetValue(context.root.cache, context.target); + if (typeof prop === 'symbol') { + if (prop.toString() === Symbol.iterator.toString()) { + // Use .values for @@iterator symbol + prop = 'values'; + } + else if (prop.toString() === isProxy.toString()) { + return true; + } + else { + return Reflect.get(target, prop, receiver); + } + } + if (prop === 'valueOf') { + return function valueOf() { return target; }; + } + if (target === null || typeof target !== 'object') { + throw new Error(`Cannot read property "${prop}" of ${target}. Value of path "/${targetRef.path}" is not an object (anymore)`); + } + if (target instanceof Array && typeof prop === 'string' && /^[0-9]+$/.test(prop)) { + // Proxy type definitions say prop can be a number, but this is never the case. + prop = parseInt(prop); + } + const value = target[prop]; + if (value === null) { + // Removed property. Should never happen, but if it does: + delete target[prop]; + return; // undefined + } + // Check if we have a child proxy for this property already. + // If so, and the properties' typeof value did not change, return that + const childProxy = childProxies.find(proxy => proxy.prop === prop); + if (childProxy) { + if (childProxy.typeof === typeof value) { + return childProxy.value; + } + childProxies.splice(childProxies.indexOf(childProxy), 1); + } + const proxifyChildValue = (prop) => { + const value = target[prop]; // + const childProxy = childProxies.find(child => child.prop === prop); + if (childProxy) { + if (childProxy.typeof === typeof value) { + return childProxy.value; + } + childProxies.splice(childProxies.indexOf(childProxy), 1); + } + if (typeof value !== 'object') { + // Can't proxify non-object values + return value; + } + const newChildProxy = createProxy({ root: context.root, target: context.target.concat(prop), id: context.id, flag: context.flag }); + childProxies.push({ typeof: typeof value, prop, value: newChildProxy }); + return newChildProxy; + }; + const unproxyValue = (value) => { + return value !== null && typeof value === 'object' && value[isProxy] + ? value.getTarget() + : value; + }; + // If the property contains a simple value, return it. + if (['string', 'number', 'boolean'].includes(typeof value) + || value instanceof Date + || value instanceof path_reference_1.PathReference + || value instanceof ArrayBuffer + || (typeof value === 'object' && 'buffer' in value) // Typed Arrays + ) { + return value; + } + const isArray = target instanceof Array; + if (prop === 'toString') { + return function toString() { + return `[LiveDataProxy for "${targetRef.path}"]`; + }; + } + if (typeof value === 'undefined') { + if (prop === 'push') { + // Push item to an object collection + return function push(item) { + const childRef = targetRef.push(); + context.flag('write', context.target.concat(childRef.key)); //, { previous: null } + target[childRef.key] = item; + return childRef.key; + }; + } + if (prop === 'getTarget') { + // Get unproxied readonly (but still live) version of data. + return function (warn = true) { + warn && console.warn('Use getTarget with caution - any changes will not be synchronized!'); + return target; + }; + } + if (prop === 'getRef') { + // Gets the DataReference to this data target + return function getRef() { + const ref = getTargetRef(context.root.ref, context.target); + return ref; + }; + } + if (prop === 'forEach') { + return function forEach(callback) { + const keys = Object.keys(target); + // Fix: callback with unproxied value + let stop = false; + for (let i = 0; !stop && i < keys.length; i++) { + const key = keys[i]; + const value = proxifyChildValue(key); //, target[key] + stop = callback(value, key, i) === false; + } + }; + } + if (['values', 'entries', 'keys'].includes(prop)) { + return function* generator() { + const keys = Object.keys(target); + for (const key of keys) { + if (prop === 'keys') { + yield key; + } + else { + const value = proxifyChildValue(key); //, target[key] + if (prop === 'entries') { + yield [key, value]; + } + else { + yield value; + } + } + } + }; + } + if (prop === 'toArray') { + return function toArray(sortFn) { + const arr = Object.keys(target).map(key => proxifyChildValue(key)); //, target[key] + if (sortFn) { + arr.sort(sortFn); + } + return arr; + }; + } + if (prop === 'onChanged') { + // Starts monitoring the value + return function onChanged(callback) { + return context.flag('onChange', context.target, { callback }); + }; + } + if (prop === 'subscribe') { + // Gets subscriber function to use with Observables, or custom handling + return function subscribe() { + return context.flag('subscribe', context.target); + }; + } + if (prop === 'getObservable') { + // Creates an observable for monitoring the value + return function getObservable() { + return context.flag('observe', context.target); + }; + } + if (prop === 'getOrderedCollection') { + return function getOrderedCollection(orderProperty, orderIncrement) { + return new OrderedCollectionProxy(this, orderProperty, orderIncrement); + }; + } + if (prop === 'startTransaction') { + return function startTransaction() { + return context.flag('transaction', context.target); + }; + } + if (prop === 'remove' && !isArray) { + // Removes target from object collection + return function remove() { + if (context.target.length === 0) { + throw new Error('Can\'t remove proxy root value'); + } + const parent = getTargetValue(context.root.cache, context.target.slice(0, -1)); + const key = context.target.slice(-1)[0]; + context.flag('write', context.target); + delete parent[key]; + }; + } + return; // undefined + } + else if (typeof value === 'function') { + if (isArray) { + // Handle array methods + const writeArray = (action) => { + context.flag('write', context.target); + return action(); + }; + const cleanArrayValues = (values) => values.map((value) => { + value = unproxyValue(value); + removeVoidProperties(value); + return value; + }); + // Methods that directly change the array: + if (prop === 'push') { + return function push(...items) { + items = cleanArrayValues(items); + return writeArray(() => target.push(...items)); // push the items to the cache array + }; + } + if (prop === 'pop') { + return function pop() { + return writeArray(() => target.pop()); + }; + } + if (prop === 'splice') { + return function splice(start, deleteCount, ...items) { + items = cleanArrayValues(items); + return writeArray(() => target.splice(start, deleteCount, ...items)); + }; + } + if (prop === 'shift') { + return function shift() { + return writeArray(() => target.shift()); + }; + } + if (prop === 'unshift') { + return function unshift(...items) { + items = cleanArrayValues(items); + return writeArray(() => target.unshift(...items)); + }; + } + if (prop === 'sort') { + return function sort(compareFn) { + return writeArray(() => target.sort(compareFn)); + }; + } + if (prop === 'reverse') { + return function reverse() { + return writeArray(() => target.reverse()); + }; + } + // Methods that do not change the array themselves, but + // have callbacks that might, or return child values: + if (['indexOf', 'lastIndexOf'].includes(prop)) { + return function indexOf(item, start) { + if (item !== null && typeof item === 'object' && item[isProxy]) { + // Use unproxied value, or array.indexOf will return -1 (fixes issue #1) + item = item.getTarget(false); + } + return target[prop](item, start); + }; + } + if (['forEach', 'every', 'some', 'filter', 'map'].includes(prop)) { + return function iterate(callback) { + return target[prop]((value, i) => { + return callback(proxifyChildValue(i), i, proxy); //, value + }); + }; + } + if (['reduce', 'reduceRight'].includes(prop)) { + return function reduce(callback, initialValue) { + return target[prop]((prev, value, i) => { + return callback(prev, proxifyChildValue(i), i, proxy); //, value + }, initialValue); + }; + } + if (['find', 'findIndex'].includes(prop)) { + return function find(callback) { + let value = target[prop]((value, i) => { + return callback(proxifyChildValue(i), i, proxy); // , value + }); + if (prop === 'find' && value) { + const index = target.indexOf(value); + value = proxifyChildValue(index); //, value + } + return value; + }; + } + if (['values', 'entries', 'keys'].includes(prop)) { + return function* generator() { + for (let i = 0; i < target.length; i++) { + if (prop === 'keys') { + yield i; + } + else { + const value = proxifyChildValue(i); //, target[i] + if (prop === 'entries') { + yield [i, value]; + } + else { + yield value; + } + } + } + }; + } + } + // Other function (or not an array), should not alter its value + // return function fn(...args) { + // return target[prop](...args); + // } + return value; + } + // Proxify any other value + return proxifyChildValue(prop); //, value + }, + set(target, prop, value, receiver) { + // Eg: chats.chat1.title = 'New chat title'; + // target === chats.chat1, prop === 'title' + target = getTargetValue(context.root.cache, context.target); + if (typeof prop === 'symbol') { + return Reflect.set(target, prop, value, receiver); + } + if (target === null || typeof target !== 'object') { + throw new Error(`Cannot set property "${prop}" of ${target}. Value of path "/${targetRef.path}" is not an object`); + } + if (target instanceof Array && typeof prop === 'string') { + if (!/^[0-9]+$/.test(prop)) { + throw new Error(`Cannot set property "${prop}" on array value of path "/${targetRef.path}"`); + } + prop = parseInt(prop); + } + if (value !== null) { + if (typeof value === 'object') { + if (value[isProxy]) { + // Assigning one proxied value to another + value = value.valueOf(); + } + // else if (Object.isFrozen(value)) { + // // Create a copy to unfreeze it + // value = cloneObject(value); + // } + value = (0, utils_1.cloneObject)(value); // Fix #10, always clone objects so changes made through the proxy won't change the original object (and vice versa) + } + if ((0, utils_1.valuesAreEqual)(value, target[prop])) { //if (compareValues(value, target[prop]) === 'identical') { // (typeof value !== 'object' && target[prop] === value) { + // not changing the actual value, ignore + return true; + } + } + if (context.target.some(key => typeof key === 'number')) { + // Updating an object property inside an array. Flag the first array in target to be written. + // Eg: when chat.members === [{ name: 'Ewout', id: 'someid' }] + // --> chat.members[0].name = 'Ewout' --> Rewrite members array instead of chat/members[0]/name + context.flag('write', context.target.slice(0, context.target.findIndex(key => typeof key === 'number'))); + } + else if (target instanceof Array) { + // Flag the entire array to be overwritten + context.flag('write', context.target); + } + else { + // Flag child property + context.flag('write', context.target.concat(prop)); + } + // Set cached value: + if (value === null) { + delete target[prop]; + } + else { + removeVoidProperties(value); + target[prop] = value; + } + return true; + }, + deleteProperty(target, prop) { + target = getTargetValue(context.root.cache, context.target); + if (target === null) { + throw new Error(`Cannot delete property ${prop.toString()} of null`); + } + if (typeof prop === 'symbol') { + return Reflect.deleteProperty(target, prop); + } + if (!(prop in target)) { + return true; // Nothing to delete + } + context.flag('write', context.target.concat(prop)); + delete target[prop]; + return true; + }, + ownKeys(target) { + target = getTargetValue(context.root.cache, context.target); + return Reflect.ownKeys(target); + }, + has(target, prop) { + target = getTargetValue(context.root.cache, context.target); + return Reflect.has(target, prop); + }, + getOwnPropertyDescriptor(target, prop) { + target = getTargetValue(context.root.cache, context.target); + const descriptor = Reflect.getOwnPropertyDescriptor(target, prop); + if (descriptor) { + descriptor.configurable = true; // prevent "TypeError: 'getOwnPropertyDescriptor' on proxy: trap reported non-configurability for property '...' which is either non-existant or configurable in the proxy target" + } + return descriptor; + }, + getPrototypeOf(target) { + target = getTargetValue(context.root.cache, context.target); + return Reflect.getPrototypeOf(target); + }, + }; + const proxy = new Proxy({}, handler); + return proxy; +} +function removeVoidProperties(obj) { + if (typeof obj !== 'object') { + return; + } + Object.keys(obj).forEach(key => { + const val = obj[key]; + if (val === null || typeof val === 'undefined') { + delete obj[key]; + } + else if (typeof val === 'object') { + removeVoidProperties(val); + } + }); +} +/** + * Convenience function to access ILiveDataProxyValue methods on a proxied value + * @param proxiedValue The proxied value to get access to + * @returns Returns the same object typecasted to an ILiveDataProxyValue + * @example + * // IChatMessages is an ObjectCollection + * let observable: Observable; + * + * // Allows you to do this: + * observable = proxyAccess(chat.messages).getObservable(); + * + * // Instead of: + * observable = (chat.messages.msg1 as any as ILiveDataProxyValue).getObservable(); + * + * // Both do the exact same, but the first is less obscure + */ +function proxyAccess(proxiedValue) { + if (typeof proxiedValue !== 'object' || !proxiedValue[isProxy]) { + throw new Error('Given value is not proxied. Make sure you are referencing the value through the live data proxy.'); + } + return proxiedValue; +} +exports.proxyAccess = proxyAccess; +/** + * Provides functionality to work with ordered collections through a live data proxy. Eliminates + * the need for arrays to handle ordered data by adding a 'sort' properties to child objects in a + * collection, and provides functionality to sort and reorder items with a minimal amount of database + * updates. + */ +class OrderedCollectionProxy { + constructor(collection, orderProperty = 'order', orderIncrement = 10) { + this.collection = collection; + this.orderProperty = orderProperty; + this.orderIncrement = orderIncrement; + if (typeof collection !== 'object' || !collection[isProxy]) { + throw new Error('Collection is not proxied'); + } + if (collection.valueOf() instanceof Array) { + throw new Error('Collection is an array, not an object collection'); + } + if (!Object.keys(collection).every(key => typeof collection[key] === 'object')) { + throw new Error('Collection has non-object children'); + } + // Check if the collection has order properties. If not, assign them now + const ok = Object.keys(collection).every(key => typeof collection[key][orderProperty] === 'number'); + if (!ok) { + // Assign order properties now. Database will be updated automatically + const keys = Object.keys(collection); + for (let i = 0; i < keys.length; i++) { + const item = collection[keys[i]]; + item[orderProperty] = i * orderIncrement; // 0, 10, 20, 30 etc + } + } + } + /** + * Gets an observable for the target object collection. Same as calling `collection.getObservable()` + * @returns + */ + getObservable() { + return proxyAccess(this.collection).getObservable(); + } + /** + * Gets an observable that emits a new ordered array representation of the object collection each time + * the unlaying data is changed. Same as calling `getArray()` in a `getObservable().subscribe` callback + * @returns + */ + getArrayObservable() { + const Observable = (0, optional_observable_1.getObservable)(); + return new Observable((subscriber => { + const subscription = this.getObservable().subscribe(( /*value*/) => { + const newArray = this.getArray(); + subscriber.next(newArray); + }); + return function unsubscribe() { + subscription.unsubscribe(); + }; + })); + } + /** + * Gets an ordered array representation of the items in your object collection. The items in the array + * are proxied values, changes will be in sync with the database. Note that the array itself + * is not mutable: adding or removing items to it will NOT update the collection in the + * the database and vice versa. Use `add`, `delete`, `sort` and `move` methods to make changes + * that impact the collection's sorting order + * @returns order array + */ + getArray() { + const arr = proxyAccess(this.collection).toArray((a, b) => a[this.orderProperty] - b[this.orderProperty]); + // arr.push = (...items: T[]) => { + // items.forEach(item => this.add(item)); + // return arr.length; + // }; + return arr; + } + add(newItem, index, from) { + const item = newItem; + const arr = this.getArray(); + let minOrder = Number.POSITIVE_INFINITY, maxOrder = Number.NEGATIVE_INFINITY; + for (let i = 0; i < arr.length; i++) { + const order = arr[i][this.orderProperty]; + minOrder = Math.min(order, minOrder); + maxOrder = Math.max(order, maxOrder); + } + let fromKey; + if (typeof from === 'number') { + // Moving existing item + fromKey = Object.keys(this.collection).find(key => this.collection[key] === item); + if (!fromKey) { + throw new Error('item not found in collection'); + } + if (from === index) { + return { key: fromKey, index }; + } + if (Math.abs(from - index) === 1) { + // Position being swapped, swap their order property values + const otherItem = arr[index]; + const otherOrder = otherItem[this.orderProperty]; + otherItem[this.orderProperty] = item[this.orderProperty]; + item[this.orderProperty] = otherOrder; + return { key: fromKey, index }; + } + else { + // Remove from array, code below will add again + arr.splice(from, 1); + } + } + if (typeof index !== 'number' || index >= arr.length) { + // append at the end + index = arr.length; + item[this.orderProperty] = arr.length == 0 ? 0 : maxOrder + this.orderIncrement; + } + else if (index === 0) { + // insert before all others + item[this.orderProperty] = arr.length == 0 ? 0 : minOrder - this.orderIncrement; + } + else { + // insert between 2 others + const orders = arr.map(item => item[this.orderProperty]); + const gap = orders[index] - orders[index - 1]; + if (gap > 1) { + item[this.orderProperty] = orders[index] - Math.floor(gap / 2); + } + else { + // TODO: Can this gap be enlarged by moving one of both orders? + // For now, change all other orders + arr.splice(index, 0, item); + for (let i = 0; i < arr.length; i++) { + arr[i][this.orderProperty] = i * this.orderIncrement; + } + } + } + const key = typeof fromKey === 'string' + ? fromKey // Moved item, don't add it + : proxyAccess(this.collection).push(item); + return { key, index }; + } + /** + * Deletes an item from the object collection using the their index in the sorted array representation + * @param index + * @returns the key of the collection's child that was deleted + */ + delete(index) { + const arr = this.getArray(); + const item = arr[index]; + if (!item) { + throw new Error(`Item at index ${index} not found`); + } + const key = Object.keys(this.collection).find(key => this.collection[key] === item); + if (!key) { + throw new Error('Cannot find target object to delete'); + } + this.collection[key] = null; // Deletes it from db + return { key, index }; + } + /** + * Moves an item in the object collection by reordering it + * @param fromIndex Current index in the array (the ordered representation of the object collection) + * @param toIndex Target index in the array + * @returns + */ + move(fromIndex, toIndex) { + const arr = this.getArray(); + return this.add(arr[fromIndex], toIndex, fromIndex); + } + /** + * Reorders the object collection using given sort function. Allows quick reordering of the collection which is persisted in the database + * @param sortFn + */ + sort(sortFn) { + const arr = this.getArray(); + arr.sort(sortFn); + for (let i = 0; i < arr.length; i++) { + arr[i][this.orderProperty] = i * this.orderIncrement; + } + } +} +exports.OrderedCollectionProxy = OrderedCollectionProxy; + +},{"./data-reference":8,"./data-snapshot":9,"./id":11,"./optional-observable":14,"./path-info":16,"./path-reference":17,"./process":18,"./simple-event-emitter":22,"./utils":26}],8:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DataReferencesArray = exports.DataSnapshotsArray = exports.DataReferenceQuery = exports.DataReference = exports.QueryDataRetrievalOptions = exports.DataRetrievalOptions = void 0; +const data_snapshot_1 = require("./data-snapshot"); +const subscription_1 = require("./subscription"); +const id_1 = require("./id"); +const path_info_1 = require("./path-info"); +const data_proxy_1 = require("./data-proxy"); +const optional_observable_1 = require("./optional-observable"); +class DataRetrievalOptions { + /** + * Options for data retrieval, allows selective loading of object properties + */ + constructor(options) { + if (!options) { + options = {}; + } + if (typeof options.include !== 'undefined' && !(options.include instanceof Array)) { + throw new TypeError('options.include must be an array'); + } + if (typeof options.exclude !== 'undefined' && !(options.exclude instanceof Array)) { + throw new TypeError('options.exclude must be an array'); + } + if (typeof options.child_objects !== 'undefined' && typeof options.child_objects !== 'boolean') { + throw new TypeError('options.child_objects must be a boolean'); + } + if (typeof options.cache_mode === 'string' && !['allow', 'bypass', 'force'].includes(options.cache_mode)) { + throw new TypeError('invalid value for options.cache_mode'); + } + this.include = options.include || undefined; + this.exclude = options.exclude || undefined; + this.child_objects = typeof options.child_objects === 'boolean' ? options.child_objects : undefined; + this.cache_mode = typeof options.cache_mode === 'string' + ? options.cache_mode + : typeof options.allow_cache === 'boolean' + ? options.allow_cache ? 'allow' : 'bypass' + : 'allow'; + this.cache_cursor = typeof options.cache_cursor === 'string' ? options.cache_cursor : undefined; + } +} +exports.DataRetrievalOptions = DataRetrievalOptions; +class QueryDataRetrievalOptions extends DataRetrievalOptions { + /** + * @param options Options for data retrieval, allows selective loading of object properties + */ + constructor(options) { + super(options); + if (!['undefined', 'boolean'].includes(typeof options.snapshots)) { + throw new TypeError('options.snapshots must be a boolean'); + } + this.snapshots = typeof options.snapshots === 'boolean' ? options.snapshots : true; + } +} +exports.QueryDataRetrievalOptions = QueryDataRetrievalOptions; +const _private = Symbol('private'); +class DataReference { + /** + * Creates a reference to a node + */ + constructor(db, path, vars) { + this.db = db; + if (!path) { + path = ''; + } + path = path.replace(/^\/|\/$/g, ''); // Trim slashes + const pathInfo = path_info_1.PathInfo.get(path); + const key = pathInfo.key; + const callbacks = []; + this[_private] = { + get path() { return path; }, + get key() { return key; }, + get callbacks() { return callbacks; }, + vars: vars || {}, + context: {}, + pushed: false, + cursor: null, + }; + } + context(context, merge = false) { + const currentContext = this[_private].context; + if (typeof context === 'object') { + const newContext = context ? merge ? currentContext || {} : context : {}; + if (context) { + // Merge new with current context + Object.keys(context).forEach(key => { + newContext[key] = context[key]; + }); + } + this[_private].context = newContext; + return this; + } + else if (typeof context === 'undefined') { + console.warn('Use snap.context() instead of snap.ref.context() to get updating context in event callbacks'); + return currentContext; + } + else { + throw new Error('Invalid context argument'); + } + } + /** + * Contains the last received cursor for this referenced path (if the connected database has transaction logging enabled). + * If you want to be notified if this value changes, add a handler with `ref.onCursor(callback)` + */ + get cursor() { + return this[_private].cursor; + } + set cursor(value) { + var _a; + this[_private].cursor = value; + (_a = this.onCursor) === null || _a === void 0 ? void 0 : _a.call(this, value); + } + /** + * The path this instance was created with + */ + get path() { return this[_private].path; } + /** + * The key or index of this node + */ + get key() { + const key = this[_private].key; + return typeof key === 'number' ? `[${key}]` : key; + } + /** + * If the "key" is a number, it is an index! + */ + get index() { + const key = this[_private].key; + if (typeof key !== 'number') { + throw new Error(`"${key}" is not a number`); + } + return key; + } + /** + * Returns a new reference to this node's parent + */ + get parent() { + const currentPath = path_info_1.PathInfo.fillVariables2(this.path, this.vars); + const info = path_info_1.PathInfo.get(currentPath); + if (info.parentPath === null) { + return null; + } + return new DataReference(this.db, info.parentPath).context(this[_private].context); + } + /** + * Contains values of the variables/wildcards used in a subscription path if this reference was + * created by an event ("value", "child_added" etc), or in a type mapping path when serializing / instantiating typed objects + */ + get vars() { + return this[_private].vars; + } + /** + * Returns a new reference to a child node + * @param childPath Child key, index or path + * @returns reference to the child + */ + child(childPath) { + childPath = typeof childPath === 'number' ? childPath : childPath.replace(/^\/|\/$/g, ''); + const currentPath = path_info_1.PathInfo.fillVariables2(this.path, this.vars); + const targetPath = path_info_1.PathInfo.getChildPath(currentPath, childPath); + return new DataReference(this.db, targetPath).context(this[_private].context); // `${this.path}/${childPath}` + } + /** + * Sets or overwrites the stored value + * @param value value to store in database + * @param onComplete optional completion callback to use instead of returning promise + * @returns promise that resolves with this reference when completed + */ + async set(value, onComplete) { + try { + if (this.isWildcardPath) { + throw new Error(`Cannot set the value of wildcard path "/${this.path}"`); + } + if (this.parent === null) { + throw new Error('Cannot set the root object. Use update, or set individual child properties'); + } + if (typeof value === 'undefined') { + throw new TypeError(`Cannot store undefined value in "/${this.path}"`); + } + if (!this.db.isReady) { + await this.db.ready(); + } + value = this.db.types.serialize(this.path, value); + const { cursor } = await this.db.api.set(this.path, value, { context: this[_private].context }); + this.cursor = cursor; + if (typeof onComplete === 'function') { + try { + onComplete(null, this); + } + catch (err) { + console.error('Error in onComplete callback:', err); + } + } + } + catch (err) { + if (typeof onComplete === 'function') { + try { + onComplete(err, this); + } + catch (err) { + console.error('Error in onComplete callback:', err); + } + } + else { + // throw again + throw err; + } + } + return this; + } + /** + * Updates properties of the referenced node + * @param updates object containing the properties to update + * @param onComplete optional completion callback to use instead of returning promise + * @return returns promise that resolves with this reference once completed + */ + async update(updates, onComplete) { + try { + if (this.isWildcardPath) { + throw new Error(`Cannot update the value of wildcard path "/${this.path}"`); + } + if (!this.db.isReady) { + await this.db.ready(); + } + if (typeof updates !== 'object' || updates instanceof Array || updates instanceof ArrayBuffer || updates instanceof Date) { + await this.set(updates); + } + else if (Object.keys(updates).length === 0) { + console.warn(`update called on path "/${this.path}", but there is nothing to update`); + } + else { + updates = this.db.types.serialize(this.path, updates); + const { cursor } = await this.db.api.update(this.path, updates, { context: this[_private].context }); + this.cursor = cursor; + } + if (typeof onComplete === 'function') { + try { + onComplete(null, this); + } + catch (err) { + console.error('Error in onComplete callback:', err); + } + } + } + catch (err) { + if (typeof onComplete === 'function') { + try { + onComplete(err, this); + } + catch (err) { + console.error('Error in onComplete callback:', err); + } + } + else { + // throw again + throw err; + } + } + return this; + } + /** + * Sets the value a node using a transaction: it runs your callback function with the current value, uses its return value as the new value to store. + * The transaction is canceled if your callback returns undefined, or throws an error. If your callback returns null, the target node will be removed. + * @param callback - callback function that performs the transaction on the node's current value. It must return the new value to store (or promise with new value), undefined to cancel the transaction, or null to remove the node. + * @returns returns a promise that resolves with the DataReference once the transaction has been processed + */ + async transaction(callback) { + if (this.isWildcardPath) { + throw new Error(`Cannot start a transaction on wildcard path "/${this.path}"`); + } + if (!this.db.isReady) { + await this.db.ready(); + } + let throwError; + const cb = (currentValue) => { + currentValue = this.db.types.deserialize(this.path, currentValue); + const snap = new data_snapshot_1.DataSnapshot(this, currentValue); + let newValue; + try { + newValue = callback(snap); + } + catch (err) { + // callback code threw an error + throwError = err; // Remember error + return; // cancel transaction by returning undefined + } + if (newValue instanceof Promise) { + return newValue + .then((val) => { + return this.db.types.serialize(this.path, val); + }) + .catch(err => { + throwError = err; // Remember error + return; // cancel transaction by returning undefined + }); + } + else { + return this.db.types.serialize(this.path, newValue); + } + }; + const { cursor } = await this.db.api.transaction(this.path, cb, { context: this[_private].context }); + this.cursor = cursor; + if (throwError) { + // Rethrow error from callback code + throw throwError; + } + return this; + } + on(event, callback, cancelCallback) { + if (this.path === '' && ['value', 'child_changed'].includes(event)) { + // Removed 'notify_value' and 'notify_child_changed' events from the list, they do not require additional data loading anymore. + console.warn('WARNING: Listening for value and child_changed events on the root node is a bad practice. These events require loading of all data (value event), or potentially lots of data (child_changed event) each time they are fired'); + } + let eventPublisher = null; + const eventStream = new subscription_1.EventStream(publisher => { eventPublisher = publisher; }); + // Map OUR callback to original callback, so .off can remove the right callback(s) + const cb = { + event, + stream: eventStream, + userCallback: typeof callback === 'function' && callback, + ourCallback: (err, path, newValue, oldValue, eventContext) => { + if (err) { + // TODO: Investigate if this ever happens? + this.db.debug.error(`Error getting data for event ${event} on path "${path}"`, err); + return; + } + const ref = this.db.ref(path); + ref[_private].vars = path_info_1.PathInfo.extractVariables(this.path, path); + let callbackObject; + if (event.startsWith('notify_')) { + // No data event, callback with reference + callbackObject = ref.context(eventContext || {}); + } + else { + const values = { + previous: this.db.types.deserialize(path, oldValue), + current: this.db.types.deserialize(path, newValue), + }; + if (event === 'child_removed') { + callbackObject = new data_snapshot_1.DataSnapshot(ref, values.previous, true, values.previous, eventContext); + } + else if (event === 'mutations') { + callbackObject = new data_snapshot_1.MutationsDataSnapshot(ref, values.current, eventContext); + } + else { + const isRemoved = event === 'mutated' && values.current === null; + callbackObject = new data_snapshot_1.DataSnapshot(ref, values.current, isRemoved, values.previous, eventContext); + } + } + eventPublisher.publish(callbackObject); + if (eventContext === null || eventContext === void 0 ? void 0 : eventContext.acebase_cursor) { + this.cursor = eventContext.acebase_cursor; + } + }, + }; + this[_private].callbacks.push(cb); + const subscribe = () => { + // (NEW) Add callback to event stream + // ref.on('value', callback) is now exactly the same as ref.on('value').subscribe(callback) + if (typeof callback === 'function') { + eventStream.subscribe(callback, (activated, cancelReason) => { + if (!activated) { + cancelCallback && cancelCallback(cancelReason); + } + }); + } + const advancedOptions = typeof callback === 'object' + ? callback + : { newOnly: !callback }; // newOnly: if callback is not 'truthy', could change this to (typeof callback !== 'function' && callback !== true) but that would break client code that uses a truthy argument. + if (typeof advancedOptions.newOnly !== 'boolean') { + advancedOptions.newOnly = false; + } + if (this.isWildcardPath) { + advancedOptions.newOnly = true; + } + const cancelSubscription = (err) => { + // Access denied? + // Cancel subscription + const callbacks = this[_private].callbacks; + callbacks.splice(callbacks.indexOf(cb), 1); + this.db.api.unsubscribe(this.path, event, cb.ourCallback); + // Call cancelCallbacks + this.db.debug.error(`Subscription "${event}" on path "/${this.path}" canceled because of an error: ${err.message}`); + eventPublisher.cancel(err.message); + }; + const authorized = this.db.api.subscribe(this.path, event, cb.ourCallback, { newOnly: advancedOptions.newOnly, cancelCallback: cancelSubscription, syncFallback: advancedOptions.syncFallback }); + const allSubscriptionsStoppedCallback = () => { + const callbacks = this[_private].callbacks; + callbacks.splice(callbacks.indexOf(cb), 1); + return this.db.api.unsubscribe(this.path, event, cb.ourCallback); + }; + if (authorized instanceof Promise) { + // Web API now returns a promise that resolves if the request is allowed + // and rejects when access is denied by the set security rules + authorized.then(() => { + // Access granted + eventPublisher.start(allSubscriptionsStoppedCallback); + }).catch(cancelSubscription); + } + else { + // Local API, always authorized + eventPublisher.start(allSubscriptionsStoppedCallback); + } + if (!advancedOptions.newOnly) { + // If callback param is supplied (either a callback function or true or something else truthy), + // it will fire events for current values right now. + // Otherwise, it expects the .subscribe methode to be used, which will then + // only be called for future events + if (event === 'value') { + this.get(snap => { + eventPublisher.publish(snap); + }); + } + else if (event === 'child_added') { + this.get(snap => { + const val = snap.val(); + if (val === null || typeof val !== 'object') { + return; + } + Object.keys(val).forEach(key => { + const childSnap = new data_snapshot_1.DataSnapshot(this.child(key), val[key]); + eventPublisher.publish(childSnap); + }); + }); + } + else if (event === 'notify_child_added') { + // Use the reflect API to get current children. + // NOTE: This does not work with AceBaseServer <= v0.9.7, only when signed in as admin + const step = 100, limit = step; + let skip = 0; + const more = async () => { + const children = await this.db.api.reflect(this.path, 'children', { limit, skip }); + children.list.forEach(child => { + const childRef = this.child(child.key); + eventPublisher.publish(childRef); + // typeof callback === 'function' && callback(childRef); + }); + if (children.more) { + skip += step; + more(); + } + }; + more(); + } + } + }; + if (this.db.isReady) { + subscribe(); + } + else { + this.db.ready(subscribe); + } + return eventStream; + } + off(event, callback) { + const subscriptions = this[_private].callbacks; + const stopSubs = subscriptions.filter(sub => (!event || sub.event === event) && (!callback || sub.userCallback === callback)); + if (stopSubs.length === 0) { + this.db.debug.warn(`Can't find event subscriptions to stop (path: "${this.path}", event: ${event || '(any)'}, callback: ${callback})`); + } + stopSubs.forEach(sub => { + sub.stream.stop(); + }); + return this; + } + get(optionsOrCallback, callback) { + if (!this.db.isReady) { + const promise = this.db.ready().then(() => this.get(optionsOrCallback, callback)); + return typeof optionsOrCallback !== 'function' && typeof callback !== 'function' ? promise : undefined; // only return promise if no callback is used + } + callback = + typeof optionsOrCallback === 'function' + ? optionsOrCallback + : typeof callback === 'function' + ? callback + : undefined; + if (this.isWildcardPath) { + const error = new Error(`Cannot get value of wildcard path "/${this.path}". Use .query() instead`); + if (typeof callback === 'function') { + throw error; + } + return Promise.reject(error); + } + const options = new DataRetrievalOptions(typeof optionsOrCallback === 'object' ? optionsOrCallback : { cache_mode: 'allow' }); + const promise = this.db.api.get(this.path, options).then(result => { + var _a; + const isNewApiResult = ('context' in result && 'value' in result); + if (!isNewApiResult) { + // acebase-core version package was updated but acebase or acebase-client package was not? Warn, but don't throw an error. + console.warn('AceBase api.get method returned an old response value. Update your acebase or acebase-client package'); + result = { value: result, context: {} }; + } + const value = this.db.types.deserialize(this.path, result.value); + const snapshot = new data_snapshot_1.DataSnapshot(this, value, undefined, undefined, result.context); + if ((_a = result.context) === null || _a === void 0 ? void 0 : _a.acebase_cursor) { + this.cursor = result.context.acebase_cursor; + } + return snapshot; + }); + if (callback) { + promise.then(callback).catch(err => { + console.error('Uncaught error:', err); + }); + return; + } + else { + return promise; + } + } + /** + * Waits for an event to occur + * @param event Name of the event, eg "value", "child_added", "child_changed", "child_removed" + * @param options data retrieval options, to include or exclude specific child keys + * @returns returns promise that resolves with a snapshot of the data + */ + once(event, options) { + if (event === 'value' && !this.isWildcardPath) { + // Shortcut, do not start listening for future events + return this.get(options); + } + return new Promise((resolve) => { + const callback = (snap) => { + this.off(event, callback); // unsubscribe directly + resolve(snap); + }; + this.on(event, callback); + }); + } + /** + * @param value optional value to store into the database right away + * @param onComplete optional callback function to run once value has been stored + * @returns returns promise that resolves with the reference after the passed value has been stored + */ + push(value, onComplete) { + if (this.isWildcardPath) { + const error = new Error(`Cannot push to wildcard path "/${this.path}"`); + if (typeof value === 'undefined' || typeof onComplete === 'function') { + throw error; + } + return Promise.reject(error); + } + const id = id_1.ID.generate(); + const ref = this.child(id); + ref[_private].pushed = true; + if (typeof value !== 'undefined') { + return ref.set(value, onComplete).then(() => ref); + } + else { + return ref; + } + } + /** + * Removes this node and all children + */ + async remove() { + if (this.isWildcardPath) { + throw new Error(`Cannot remove wildcard path "/${this.path}". Use query().remove instead`); + } + if (this.parent === null) { + throw new Error('Cannot remove the root node'); + } + return this.set(null); + } + /** + * Quickly checks if this reference has a value in the database, without returning its data + * @returns returns a promise that resolves with a boolean value + */ + async exists() { + if (this.isWildcardPath) { + throw new Error(`Cannot check wildcard path "/${this.path}" existence`); + } + if (!this.db.isReady) { + await this.db.ready(); + } + return this.db.api.exists(this.path); + } + get isWildcardPath() { + return this.path.indexOf('*') >= 0 || this.path.indexOf('$') >= 0; + } + /** + * Creates a query object for current node + */ + query() { + return new DataReferenceQuery(this); + } + /** + * Gets the number of children this node has, uses reflection + */ + async count() { + const info = await this.reflect('info', { child_count: true }); + return info.children.count; + } + async reflect(type, args) { + if (this.isWildcardPath) { + throw new Error(`Cannot reflect on wildcard path "/${this.path}"`); + } + if (!this.db.isReady) { + await this.db.ready(); + } + return this.db.api.reflect(this.path, type, args); + } + async export(write, options = { format: 'json', type_safe: true }) { + if (this.isWildcardPath) { + throw new Error(`Cannot export wildcard path "/${this.path}"`); + } + if (!this.db.isReady) { + await this.db.ready(); + } + const writeFn = typeof write === 'function' ? write : write.write.bind(write); + return this.db.api.export(this.path, writeFn, options); + } + /** + * Imports the value of this node and all children + * @param read Function that reads data from your stream + * @param options Only supported format currently is json + * @returns returns a promise that resolves once all data is imported + */ + async import(read, options = { format: 'json', suppress_events: false }) { + if (this.isWildcardPath) { + throw new Error(`Cannot import to wildcard path "/${this.path}"`); + } + if (!this.db.isReady) { + await this.db.ready(); + } + return this.db.api.import(this.path, read, options); + } + proxy(options) { + const isOptionsArg = typeof options === 'object' && (typeof options.cursor !== 'undefined' || typeof options.defaultValue !== 'undefined'); + if (typeof options !== 'undefined' && !isOptionsArg) { + this.db.debug.warn('Warning: live data proxy is being initialized with a deprecated method signature. Use ref.proxy(options) instead of ref.proxy(defaultValue)'); + options = { defaultValue: options }; + } + return data_proxy_1.LiveDataProxy.create(this, options); + } + /** + * @param options optional initial data retrieval options. + * Not recommended to use yet - given includes/excludes are not applied to received mutations, + * or sync actions when using an AceBaseClient with cache db. + */ + observe(options) { + // options should not be used yet - we can't prevent/filter mutation events on excluded paths atm + if (options) { + throw new Error('observe does not support data retrieval options yet'); + } + if (this.isWildcardPath) { + throw new Error(`Cannot observe wildcard path "/${this.path}"`); + } + const Observable = (0, optional_observable_1.getObservable)(); + return new Observable((observer => { + let cache, resolved = false; + let promise = this.get(options).then(snap => { + resolved = true; + cache = snap.val(); + observer.next(cache); + }); + const updateCache = (snap) => { + if (!resolved) { + promise = promise.then(() => updateCache(snap)); + return; + } + const mutatedPath = snap.ref.path; + if (mutatedPath === this.path) { + cache = snap.val(); + return observer.next(cache); + } + const trailKeys = path_info_1.PathInfo.getPathKeys(mutatedPath).slice(path_info_1.PathInfo.getPathKeys(this.path).length); + let target = cache; + while (trailKeys.length > 1) { + const key = trailKeys.shift(); + if (!(key in target)) { + // Happens if initial loaded data did not include / excluded this data, + // or we missed out on an event + target[key] = typeof trailKeys[0] === 'number' ? [] : {}; + } + target = target[key]; + } + const prop = trailKeys.shift(); + const newValue = snap.val(); + if (newValue === null) { + // Remove it + target instanceof Array && typeof prop === 'number' ? target.splice(prop, 1) : delete target[prop]; + } + else { + // Set or update it + target[prop] = newValue; + } + observer.next(cache); + }; + this.on('mutated', updateCache); // TODO: Refactor to 'mutations' event instead + // Return unsubscribe function + return () => { + this.off('mutated', updateCache); + }; + })); + } + async forEach(callbackOrOptions, callback) { + let options; + if (typeof callbackOrOptions === 'function') { + callback = callbackOrOptions; + } + else { + options = callbackOrOptions; + } + if (typeof callback !== 'function') { + throw new TypeError('No callback function given'); + } + // Get all children through reflection. This could be tweaked further using paging + const info = await this.reflect('children', { limit: 0, skip: 0 }); // Gets ALL child keys + const summary = { + canceled: false, + total: info.list.length, + processed: 0, + }; + // Iterate through all children until callback returns false + for (let i = 0; i < info.list.length; i++) { + const key = info.list[i].key; + // Get child data + const snapshot = await this.child(key).get(options); + summary.processed++; + if (!snapshot.exists()) { + // Was removed in the meantime, skip + continue; + } + // Run callback + const result = await callback(snapshot); + if (result === false) { + summary.canceled = true; + break; // Stop looping + } + } + return summary; + } + async getMutations(cursorOrDate) { + const cursor = typeof cursorOrDate === 'string' ? cursorOrDate : undefined; + const timestamp = cursorOrDate === null || typeof cursorOrDate === 'undefined' ? 0 : cursorOrDate instanceof Date ? cursorOrDate.getTime() : undefined; + return this.db.api.getMutations({ path: this.path, cursor, timestamp }); + } + async getChanges(cursorOrDate) { + const cursor = typeof cursorOrDate === 'string' ? cursorOrDate : undefined; + const timestamp = cursorOrDate === null || typeof cursorOrDate === 'undefined' ? 0 : cursorOrDate instanceof Date ? cursorOrDate.getTime() : undefined; + return this.db.api.getChanges({ path: this.path, cursor, timestamp }); + } +} +exports.DataReference = DataReference; +class DataReferenceQuery { + /** + * Creates a query on a reference + */ + constructor(ref) { + this.ref = ref; + this[_private] = { + filters: [], + skip: 0, + take: 0, + order: [], + events: {}, + }; + } + /** + * Applies a filter to the children of the refence being queried. + * If there is an index on the property key being queried, it will be used + * to speed up the query + * @param key property to test value of + * @param op operator to use + * @param compare value to compare with + */ + filter(key, op, compare) { + if ((op === 'in' || op === '!in') && (!(compare instanceof Array) || compare.length === 0)) { + throw new Error(`${op} filter for ${key} must supply an Array compare argument containing at least 1 value`); + } + if ((op === 'between' || op === '!between') && (!(compare instanceof Array) || compare.length !== 2)) { + throw new Error(`${op} filter for ${key} must supply an Array compare argument containing 2 values`); + } + if ((op === 'matches' || op === '!matches') && !(compare instanceof RegExp)) { + throw new Error(`${op} filter for ${key} must supply a RegExp compare argument`); + } + // DISABLED 2019/10/23 because it is not fully implemented only works locally + // if (op === "custom" && typeof compare !== "function") { + // throw `${op} filter for ${key} must supply a Function compare argument`; + // } + // DISABLED 2022/08/15, implemented by query.ts in acebase + // if ((op === 'contains' || op === '!contains') && ((typeof compare === 'object' && !(compare instanceof Array) && !(compare instanceof Date)) || (compare instanceof Array && compare.length === 0))) { + // throw new Error(`${op} filter for ${key} must supply a simple value or (non-zero length) array compare argument`); + // } + this[_private].filters.push({ key, op, compare }); + return this; + } + /** + * @deprecated use `.filter` instead + */ + where(key, op, compare) { + return this.filter(key, op, compare); + } + /** + * Limits the number of query results + */ + take(n) { + this[_private].take = n; + return this; + } + /** + * Skips the first n query results + */ + skip(n) { + this[_private].skip = n; + return this; + } + sort(key, ascending = true) { + if (!['string', 'number'].includes(typeof key)) { + throw 'key must be a string or number'; + } + this[_private].order.push({ key, ascending }); + return this; + } + /** + * @deprecated use `.sort` instead + */ + order(key, ascending = true) { + return this.sort(key, ascending); + } + get(optionsOrCallback, callback) { + if (!this.ref.db.isReady) { + const promise = this.ref.db.ready().then(() => this.get(optionsOrCallback, callback)); + return typeof optionsOrCallback !== 'function' && typeof callback !== 'function' ? promise : undefined; // only return promise if no callback is used + } + callback = + typeof optionsOrCallback === 'function' + ? optionsOrCallback + : typeof callback === 'function' + ? callback + : undefined; + const options = new QueryDataRetrievalOptions(typeof optionsOrCallback === 'object' ? optionsOrCallback : { snapshots: true, cache_mode: 'allow' }); + options.allow_cache = options.cache_mode !== 'bypass'; // Backward compatibility when using older acebase-client + options.eventHandler = ev => { + // TODO: implement context for query events + if (!this[_private].events[ev.name]) { + return false; + } + const listeners = this[_private].events[ev.name]; + if (typeof listeners !== 'object' || listeners.length === 0) { + return false; + } + if (['add', 'change', 'remove'].includes(ev.name)) { + const ref = new DataReference(this.ref.db, ev.path); + const eventData = { name: ev.name }; + if (options.snapshots && ev.name !== 'remove') { + const val = db.types.deserialize(ev.path, ev.value); + eventData.snapshot = new data_snapshot_1.DataSnapshot(ref, val, false); + } + else { + eventData.ref = ref; + } + ev = eventData; + } + listeners.forEach(callback => { try { + callback(ev); + } + catch (e) { } }); + }; + // Check if there are event listeners set for realtime changes + options.monitor = { add: false, change: false, remove: false }; + if (this[_private].events) { + if (this[_private].events['add'] && this[_private].events['add'].length > 0) { + options.monitor.add = true; + } + if (this[_private].events['change'] && this[_private].events['change'].length > 0) { + options.monitor.change = true; + } + if (this[_private].events['remove'] && this[_private].events['remove'].length > 0) { + options.monitor.remove = true; + } + } + // Stop realtime results if they are still enabled on a previous .get on this instance + this.stop(); + // NOTE: returning promise here, regardless of callback argument. Good argument to refactor method to async/await soon + const db = this.ref.db; + return db.api.query(this.ref.path, this[_private], options) + .catch(err => { + throw new Error(err); + }) + .then(res => { + const { stop } = res; + let { results, context } = res; + this.stop = async () => { + await stop(); + }; + if (!('results' in res && 'context' in res)) { + console.warn('Query results missing context. Update your acebase and/or acebase-client packages'); + results = res, context = {}; + } + if (options.snapshots) { + const snaps = results.map(result => { + const val = db.types.deserialize(result.path, result.val); + return new data_snapshot_1.DataSnapshot(db.ref(result.path), val, false, undefined, context); + }); + return DataSnapshotsArray.from(snaps); + } + else { + const refs = results.map(path => db.ref(path)); + return DataReferencesArray.from(refs); + } + }) + .then(results => { + callback && callback(results); + return results; + }); + } + /** + * Stops a realtime query, no more notifications will be received. + */ + async stop() { + // Overridden by .get + } + /** + * Executes the query and returns references. Short for `.get({ snapshots: false })` + * @param callback callback to use instead of returning a promise + * @returns returns an Promise that resolves with an array of DataReferences, or void when using a callback + * @deprecated Use `find` instead + */ + getRefs(callback) { + return this.get({ snapshots: false }, callback); + } + /** + * Executes the query and returns an array of references. Short for `.get({ snapshots: false })` + */ + find() { + return this.get({ snapshots: false }); + } + /** + * Executes the query and returns the number of results + */ + async count() { + const refs = await this.find(); + return refs.length; + } + /** + * Executes the query and returns if there are any results + */ + async exists() { + const originalTake = this[_private].take; + const p = this.take(1).find(); + this.take(originalTake); + const refs = await p; + return refs.length !== 0; + } + /** + * Executes the query, removes all matches from the database + * @returns returns a Promise that resolves once all matches have been removed + */ + async remove(callback) { + const refs = await this.find(); + // Perform updates on each distinct parent collection (only 1 parent if this is not a wildcard path) + const parentUpdates = refs.reduce((parents, ref) => { + const parent = parents[ref.parent.path]; + if (!parent) { + parents[ref.parent.path] = [ref]; + } + else { + parent.push(ref); + } + return parents; + }, {}); + const db = this.ref.db; + const promises = Object.keys(parentUpdates).map(async (parentPath) => { + const updates = refs.reduce((updates, ref) => { + updates[ref.key] = null; + return updates; + }, {}); + const ref = db.ref(parentPath); + try { + await ref.update(updates); + return { ref, success: true }; + } + catch (error) { + return { ref, success: false, error }; + } + }); + const results = await Promise.all(promises); + callback && callback(results); + return results; + } + on(event, callback) { + if (!this[_private].events[event]) { + this[_private].events[event] = []; + } + this[_private].events[event].push(callback); + return this; + } + /** + * Unsubscribes from (a) previously added event(s) + * @param event Name of the event + * @param callback callback function to remove + * @returns returns reference to this query + */ + off(event, callback) { + if (typeof event === 'undefined') { + this[_private].events = {}; + return this; + } + if (!this[_private].events[event]) { + return this; + } + if (typeof callback === 'undefined') { + delete this[_private].events[event]; + return this; + } + const index = this[_private].events[event].indexOf(callback); + if (!~index) { + return this; + } + this[_private].events[event].splice(index, 1); + return this; + } + async forEach(callbackOrOptions, callback) { + let options; + if (typeof callbackOrOptions === 'function') { + callback = callbackOrOptions; + } + else { + options = callbackOrOptions; + } + if (typeof callback !== 'function') { + throw new TypeError('No callback function given'); + } + // Get all query results. This could be tweaked further using paging + const refs = await this.find(); + const summary = { + canceled: false, + total: refs.length, + processed: 0, + }; + // Iterate through all children until callback returns false + for (let i = 0; i < refs.length; i++) { + const ref = refs[i]; + // Get child data + const snapshot = await ref.get(options); + summary.processed++; + if (!snapshot.exists()) { + // Was removed in the meantime, skip + continue; + } + // Run callback + const result = await callback(snapshot); + if (result === false) { + summary.canceled = true; + break; // Stop looping + } + } + return summary; + } +} +exports.DataReferenceQuery = DataReferenceQuery; +class DataSnapshotsArray extends Array { + static from(snaps) { + const arr = new DataSnapshotsArray(snaps.length); + snaps.forEach((snap, i) => arr[i] = snap); + return arr; + } + getValues() { + return this.map(snap => snap.val()); + } +} +exports.DataSnapshotsArray = DataSnapshotsArray; +class DataReferencesArray extends Array { + static from(refs) { + const arr = new DataReferencesArray(refs.length); + refs.forEach((ref, i) => arr[i] = ref); + return arr; + } + getPaths() { + return this.map(ref => ref.path); + } +} +exports.DataReferencesArray = DataReferencesArray; + +},{"./data-proxy":7,"./data-snapshot":9,"./id":11,"./optional-observable":14,"./path-info":16,"./subscription":23}],9:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MutationsDataSnapshot = exports.DataSnapshot = void 0; +const path_info_1 = require("./path-info"); +function getChild(snapshot, path, previous = false) { + if (!snapshot.exists()) { + return null; + } + let child = previous ? snapshot.previous() : snapshot.val(); + if (typeof path === 'number') { + return child[path]; + } + path_info_1.PathInfo.getPathKeys(path).every(key => { + child = child[key]; + return typeof child !== 'undefined'; + }); + return child || null; +} +function getChildren(snapshot) { + if (!snapshot.exists()) { + return []; + } + const value = snapshot.val(); + if (value instanceof Array) { + return new Array(value.length).map((v, i) => i); + } + if (typeof value === 'object') { + return Object.keys(value); + } + return []; +} +class DataSnapshot { + /** + * Creates a new DataSnapshot instance + */ + constructor(ref, value, isRemoved = false, prevValue, context) { + this.ref = ref; + this.val = () => { return value; }; + this.previous = () => { return prevValue; }; + this.exists = () => { + if (isRemoved) { + return false; + } + return value !== null && typeof value !== 'undefined'; + }; + this.context = () => { return context || {}; }; + } + /** + * Indicates whether the node exists in the database + */ + exists() { return false; } + /** + * Creates a `DataSnapshot` instance + * @internal (for internal use) + */ + static for(ref, value) { + return new DataSnapshot(ref, value); + } + /** + * Gets a new snapshot for a child node + * @param path child key or path + * @returns Returns a `DataSnapshot` of the child + */ + child(path) { + // Create new snapshot for child data + const val = getChild(this, path, false); + const prev = getChild(this, path, true); + return new DataSnapshot(this.ref.child(path), val, false, prev); + } + /** + * Checks if the snapshot's value has a child with the given key or path + * @param path child key or path + */ + hasChild(path) { + return getChild(this, path) !== null; + } + /** + * Indicates whether the the snapshot's value has any child nodes + */ + hasChildren() { + return getChildren(this).length > 0; + } + /** + * The number of child nodes in this snapshot + */ + numChildren() { + return getChildren(this).length; + } + /** + * Runs a callback function for each child node in this snapshot until the callback returns false + * @param callback function that is called with a snapshot of each child node in this snapshot. + * Must return a boolean value that indicates whether to continue iterating or not. + */ + forEach(callback) { + const value = this.val(); + const prev = this.previous(); + return getChildren(this).every((key) => { + const snap = new DataSnapshot(this.ref.child(key), value[key], false, prev[key]); + return callback(snap); + }); + } + /** + * The key of the node's path + */ + get key() { return this.ref.key; } +} +exports.DataSnapshot = DataSnapshot; +class MutationsDataSnapshot extends DataSnapshot { + constructor(ref, mutations, context) { + super(ref, mutations, false, undefined, context); + /** + * Don't use this to get previous values of mutated nodes. + * Use `.previous` properties on the individual child snapshots instead. + * @throws Throws an error if you do use it. + */ + this.previous = () => { throw new Error('Iterate values to get previous values for each mutation'); }; + this.val = (warn = true) => { + if (warn) { + console.warn('Unless you know what you are doing, it is best not to use the value of a mutations snapshot directly. Use child methods and forEach to iterate the mutations instead'); + } + return mutations; + }; + } + /** + * Runs a callback function for each mutation in this snapshot until the callback returns false + * @param callback function that is called with a snapshot of each mutation in this snapshot. Must return a boolean value that indicates whether to continue iterating or not. + * @returns Returns whether every child was interated + */ + forEach(callback) { + const mutations = this.val(); + return mutations.every(mutation => { + const ref = mutation.target.reduce((ref, key) => ref.child(key), this.ref); + const snap = new DataSnapshot(ref, mutation.val, false, mutation.prev); + return callback(snap); + }); + } + /** + * Gets a snapshot of a mutated node + * @param index index of the mutation + * @returns Returns a DataSnapshot of the mutated node + */ + child(index) { + if (typeof index !== 'number') { + throw new Error('child index must be a number'); + } + const mutation = this.val()[index]; + const ref = mutation.target.reduce((ref, key) => ref.child(key), this.ref); + return new DataSnapshot(ref, mutation.val, false, mutation.prev); + } +} +exports.MutationsDataSnapshot = MutationsDataSnapshot; + +},{"./path-info":16}],10:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DebugLogger = void 0; +const process_1 = require("./process"); +// eslint-disable-next-line @typescript-eslint/no-empty-function +const noop = () => { }; +class DebugLogger { + constructor(level = 'log', prefix = '') { + this.level = level; + this.prefix = prefix; + this.setLevel(level); + } + setLevel(level) { + const prefix = this.prefix ? this.prefix + ' %s' : ''; + this.verbose = ['verbose'].includes(level) ? prefix ? console.log.bind(console, prefix) : console.log.bind(console) : noop; + this.log = ['verbose', 'log'].includes(level) ? prefix ? console.log.bind(console, prefix) : console.log.bind(console) : noop; + this.warn = ['verbose', 'log', 'warn'].includes(level) ? prefix ? console.warn.bind(console, prefix) : console.warn.bind(console) : noop; + this.error = ['verbose', 'log', 'warn', 'error'].includes(level) ? prefix ? console.error.bind(console, prefix) : console.error.bind(console) : noop; + this.write = (text) => { + const isRunKit = typeof process_1.default !== 'undefined' && process_1.default.env && typeof process_1.default.env.RUNKIT_ENDPOINT_PATH === 'string'; + if (text && isRunKit) { + text.split('\n').forEach(line => console.log(line)); // Logs each line separately + } + else { + console.log(text); + } + }; + } +} +exports.DebugLogger = DebugLogger; + +},{"./process":18}],11:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ID = void 0; +const cuid_1 = require("./cuid"); +// const uuid62 = require('uuid62'); +let timeBias = 0; +class ID { + /** + * (for internal use) + * bias in milliseconds to adjust generated cuid timestamps with + */ + static set timeBias(bias) { + if (typeof bias !== 'number') { + return; + } + timeBias = bias; + } + static generate() { + // Could also use https://www.npmjs.com/package/pushid for Firebase style 20 char id's + return (0, cuid_1.default)(timeBias).slice(1); // Cuts off the always leading 'c' + // return uuid62.v1(); + } +} +exports.ID = ID; + +},{"./cuid":5}],12:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ObjectCollection = exports.PartialArray = exports.SchemaDefinition = exports.Colorize = exports.ColorStyle = exports.SimpleEventEmitter = exports.SimpleCache = exports.ascii85 = exports.PathInfo = exports.Utils = exports.TypeMappings = exports.Transport = exports.EventSubscription = exports.EventPublisher = exports.EventStream = exports.PathReference = exports.ID = exports.DebugLogger = exports.OrderedCollectionProxy = exports.proxyAccess = exports.MutationsDataSnapshot = exports.DataSnapshot = exports.DataReferencesArray = exports.DataSnapshotsArray = exports.QueryDataRetrievalOptions = exports.DataRetrievalOptions = exports.DataReferenceQuery = exports.DataReference = exports.Api = exports.AceBaseBaseSettings = exports.AceBaseBase = void 0; +var acebase_base_1 = require("./acebase-base"); +Object.defineProperty(exports, "AceBaseBase", { enumerable: true, get: function () { return acebase_base_1.AceBaseBase; } }); +Object.defineProperty(exports, "AceBaseBaseSettings", { enumerable: true, get: function () { return acebase_base_1.AceBaseBaseSettings; } }); +var api_1 = require("./api"); +Object.defineProperty(exports, "Api", { enumerable: true, get: function () { return api_1.Api; } }); +var data_reference_1 = require("./data-reference"); +Object.defineProperty(exports, "DataReference", { enumerable: true, get: function () { return data_reference_1.DataReference; } }); +Object.defineProperty(exports, "DataReferenceQuery", { enumerable: true, get: function () { return data_reference_1.DataReferenceQuery; } }); +Object.defineProperty(exports, "DataRetrievalOptions", { enumerable: true, get: function () { return data_reference_1.DataRetrievalOptions; } }); +Object.defineProperty(exports, "QueryDataRetrievalOptions", { enumerable: true, get: function () { return data_reference_1.QueryDataRetrievalOptions; } }); +Object.defineProperty(exports, "DataSnapshotsArray", { enumerable: true, get: function () { return data_reference_1.DataSnapshotsArray; } }); +Object.defineProperty(exports, "DataReferencesArray", { enumerable: true, get: function () { return data_reference_1.DataReferencesArray; } }); +var data_snapshot_1 = require("./data-snapshot"); +Object.defineProperty(exports, "DataSnapshot", { enumerable: true, get: function () { return data_snapshot_1.DataSnapshot; } }); +Object.defineProperty(exports, "MutationsDataSnapshot", { enumerable: true, get: function () { return data_snapshot_1.MutationsDataSnapshot; } }); +var data_proxy_1 = require("./data-proxy"); +Object.defineProperty(exports, "proxyAccess", { enumerable: true, get: function () { return data_proxy_1.proxyAccess; } }); +Object.defineProperty(exports, "OrderedCollectionProxy", { enumerable: true, get: function () { return data_proxy_1.OrderedCollectionProxy; } }); +var debug_1 = require("./debug"); +Object.defineProperty(exports, "DebugLogger", { enumerable: true, get: function () { return debug_1.DebugLogger; } }); +var id_1 = require("./id"); +Object.defineProperty(exports, "ID", { enumerable: true, get: function () { return id_1.ID; } }); +var path_reference_1 = require("./path-reference"); +Object.defineProperty(exports, "PathReference", { enumerable: true, get: function () { return path_reference_1.PathReference; } }); +var subscription_1 = require("./subscription"); +Object.defineProperty(exports, "EventStream", { enumerable: true, get: function () { return subscription_1.EventStream; } }); +Object.defineProperty(exports, "EventPublisher", { enumerable: true, get: function () { return subscription_1.EventPublisher; } }); +Object.defineProperty(exports, "EventSubscription", { enumerable: true, get: function () { return subscription_1.EventSubscription; } }); +exports.Transport = require("./transport"); +var type_mappings_1 = require("./type-mappings"); +Object.defineProperty(exports, "TypeMappings", { enumerable: true, get: function () { return type_mappings_1.TypeMappings; } }); +exports.Utils = require("./utils"); +var path_info_1 = require("./path-info"); +Object.defineProperty(exports, "PathInfo", { enumerable: true, get: function () { return path_info_1.PathInfo; } }); +var ascii85_1 = require("./ascii85"); +Object.defineProperty(exports, "ascii85", { enumerable: true, get: function () { return ascii85_1.ascii85; } }); +var simple_cache_1 = require("./simple-cache"); +Object.defineProperty(exports, "SimpleCache", { enumerable: true, get: function () { return simple_cache_1.SimpleCache; } }); +var simple_event_emitter_1 = require("./simple-event-emitter"); +Object.defineProperty(exports, "SimpleEventEmitter", { enumerable: true, get: function () { return simple_event_emitter_1.SimpleEventEmitter; } }); +var simple_colors_1 = require("./simple-colors"); +Object.defineProperty(exports, "ColorStyle", { enumerable: true, get: function () { return simple_colors_1.ColorStyle; } }); +Object.defineProperty(exports, "Colorize", { enumerable: true, get: function () { return simple_colors_1.Colorize; } }); +var schema_1 = require("./schema"); +Object.defineProperty(exports, "SchemaDefinition", { enumerable: true, get: function () { return schema_1.SchemaDefinition; } }); +var partial_array_1 = require("./partial-array"); +Object.defineProperty(exports, "PartialArray", { enumerable: true, get: function () { return partial_array_1.PartialArray; } }); +const object_collection_1 = require("./object-collection"); +Object.defineProperty(exports, "ObjectCollection", { enumerable: true, get: function () { return object_collection_1.ObjectCollection; } }); + +},{"./acebase-base":1,"./api":2,"./ascii85":3,"./data-proxy":7,"./data-reference":8,"./data-snapshot":9,"./debug":10,"./id":11,"./object-collection":13,"./partial-array":15,"./path-info":16,"./path-reference":17,"./schema":19,"./simple-cache":20,"./simple-colors":21,"./simple-event-emitter":22,"./subscription":23,"./transport":24,"./type-mappings":25,"./utils":26}],13:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ObjectCollection = void 0; +const id_1 = require("./id"); +/** + * Convenience interface for defining an object collection + * @example + * type ChatMessage = { + * text: string, uid: string, sent: Date + * } + * type Chat = { + * title: text + * messages: ObjectCollection + * } + */ +class ObjectCollection { + /** + * Converts and array of values into an object collection, generating a unique key for each item in the array + * @param array + * @example + * const array = [ + * { title: "Don't make me think!", author: "Steve Krug" }, + * { title: "The tipping point", author: "Malcolm Gladwell" } + * ]; + * + * // Convert: + * const collection = ObjectCollection.from(array); + * // --> { + * // kh1x3ygb000120r7ipw6biln: { + * // title: "Don't make me think!", + * // author: "Steve Krug" + * // }, + * // kh1x3ygb000220r757ybpyec: { + * // title: "The tipping point", + * // author: "Malcolm Gladwell" + * // } + * // } + * + * // Now it's easy to add them to the db: + * db.ref('books').update(collection); + */ + static from(array) { + const collection = {}; + array.forEach(child => { + collection[id_1.ID.generate()] = child; + }); + return collection; + } +} +exports.ObjectCollection = ObjectCollection; + +},{"./id":11}],14:[function(require,module,exports){ +"use strict"; +// Optional dependency on rxjs package. If rxjs is installed into your project, you'll get the correct +// typings for AceBase methods that use Observables, and you'll be able to use them. If you don't use +// those methods, there is no need to install rxjs. +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ObservableShim = exports.setObservable = exports.getObservable = void 0; +let _observable; +function getObservable() { + if (_observable) { + return _observable; + } + if (typeof window !== 'undefined' && window.Observable) { + _observable = window.Observable; + return _observable; + } + try { + // eslint-disable-next-line @typescript-eslint/no-var-requires + const { Observable } = require('rxjs'); // fails in ESM module, need an elegant way to handle this. Can't use dynamic import() because it 1) requires Node 12+ and 2) causes Webpack build to fail if rxjs is not installed + if (!Observable) { + throw new Error('not loaded'); + } + _observable = Observable; + return Observable; + } + catch (err) { + throw new Error('RxJS Observable could not be loaded. If you are using a browser build, add it to AceBase using db.setObservable. For node.js builds, add it to your project with: npm i rxjs'); + } +} +exports.getObservable = getObservable; +function setObservable(Observable) { + if (Observable === 'shim') { + console.warn('Using AceBase\'s simple Observable shim. Only use this if you know what you\'re doing.'); + Observable = ObservableShim; + } + _observable = Observable; +} +exports.setObservable = setObservable; +/** + * rxjs is an optional dependency that only needs installing when any of AceBase's observe methods are used. + * If for some reason rxjs is not available (eg in test suite), we can provide a shim. This class is used when + * `db.setObservable("shim")` is called + */ +class ObservableShim { + constructor(create) { + this._active = false; + this._subscribers = []; + this._create = create; + } + subscribe(subscriber) { + if (!this._active) { + const next = (value) => { + // emit value to all subscribers + this._subscribers.forEach(s => { + try { + s(value); + } + catch (err) { + console.error('Error in subscriber callback:', err); + } + }); + }; + const observer = { next }; + this._cleanup = this._create(observer); + this._active = true; + } + this._subscribers.push(subscriber); + const unsubscribe = () => { + this._subscribers.splice(this._subscribers.indexOf(subscriber), 1); + if (this._subscribers.length === 0) { + this._active = false; + this._cleanup(); + } + }; + const subscription = { + unsubscribe, + }; + return subscription; + } +} +exports.ObservableShim = ObservableShim; + +},{"rxjs":53}],15:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PartialArray = void 0; +/** + * Sparse/partial array converted to a serializable object. Use `Object.keys(sparseArray)` and `Object.values(sparseArray)` to iterate its indice and/or values + */ +class PartialArray { + constructor(sparseArray) { + if (sparseArray instanceof Array) { + for (let i = 0; i < sparseArray.length; i++) { + if (typeof sparseArray[i] !== 'undefined') { + this[i] = sparseArray[i]; + } + } + } + else if (sparseArray) { + Object.assign(this, sparseArray); + } + } +} +exports.PartialArray = PartialArray; + +},{}],16:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PathInfo = void 0; +function getPathKeys(path) { + path = path.replace(/\[/g, '/[').replace(/^\/+/, '').replace(/\/+$/, ''); // Replace [ with /[, remove leading slashes, remove trailing slashes + if (path.length === 0) { + return []; + } + const keys = path.split('/'); + return keys.map(key => { + return key.startsWith('[') ? parseInt(key.slice(1, -1)) : key; + }); +} +class PathInfo { + constructor(path) { + if (typeof path === 'string') { + this.keys = getPathKeys(path); + } + else if (path instanceof Array) { + this.keys = path; + } + this.path = this.keys.reduce((path, key, i) => i === 0 ? `${key}` : typeof key === 'string' ? `${path}/${key}` : `${path}[${key}]`, ''); + } + static get(path) { + return new PathInfo(path); + } + static getChildPath(path, childKey) { + // return getChildPath(path, childKey); + return PathInfo.get(path).child(childKey).path; + } + static getPathKeys(path) { + return getPathKeys(path); + } + get key() { + return this.keys.length === 0 ? null : this.keys.slice(-1)[0]; + } + get parent() { + if (this.keys.length == 0) { + return null; + } + const parentKeys = this.keys.slice(0, -1); + return new PathInfo(parentKeys); + } + get parentPath() { + return this.keys.length === 0 ? null : this.parent.path; + } + child(childKey) { + if (typeof childKey === 'string') { + childKey = getPathKeys(childKey); + } + return new PathInfo(this.keys.concat(childKey)); + } + childPath(childKey) { + return this.child(childKey).path; + } + get pathKeys() { + return this.keys; + } + /** + * If varPath contains variables or wildcards, it will return them with the values found in fullPath + * @param {string} varPath path containing variables such as * and $name + * @param {string} fullPath real path to a node + * @returns {{ [index: number]: string|number, [variable: string]: string|number }} returns an array-like object with all variable values. All named variables are also set on the array by their name (eg vars.uid and vars.$uid) + * @example + * PathInfo.extractVariables('users/$uid/posts/$postid', 'users/ewout/posts/post1/title') === { + * 0: 'ewout', + * 1: 'post1', + * uid: 'ewout', // or $uid + * postid: 'post1' // or $postid + * }; + * + * PathInfo.extractVariables('users/*\/posts/*\/$property', 'users/ewout/posts/post1/title') === { + * 0: 'ewout', + * 1: 'post1', + * 2: 'title', + * property: 'title' // or $property + * }; + * + * PathInfo.extractVariables('users/$user/friends[*]/$friend', 'users/dora/friends[4]/diego') === { + * 0: 'dora', + * 1: 4, + * 2: 'diego', + * user: 'dora', // or $user + * friend: 'diego' // or $friend + * }; + */ + static extractVariables(varPath, fullPath) { + if (!varPath.includes('*') && !varPath.includes('$')) { + return []; + } + // if (!this.equals(fullPath)) { + // throw new Error(`path does not match with the path of this PathInfo instance: info.equals(path) === false!`) + // } + const keys = getPathKeys(varPath); + const pathKeys = getPathKeys(fullPath); + let count = 0; + const variables = { + get length() { return count; }, + }; + keys.forEach((key, index) => { + const pathKey = pathKeys[index]; + if (key === '*') { + variables[count++] = pathKey; + } + else if (typeof key === 'string' && key[0] === '$') { + variables[count++] = pathKey; + // Set the $variable property + variables[key] = pathKey; + // Set friendly property name (without $) + const varName = key.slice(1); + if (typeof variables[varName] === 'undefined') { + variables[varName] = pathKey; + } + } + }); + return variables; + } + /** + * If varPath contains variables or wildcards, it will return a path with the variables replaced by the keys found in fullPath. + * @example + * PathInfo.fillVariables('users/$uid/posts/$postid', 'users/ewout/posts/post1/title') === 'users/ewout/posts/post1' + */ + static fillVariables(varPath, fullPath) { + if (varPath.indexOf('*') < 0 && varPath.indexOf('$') < 0) { + return varPath; + } + const keys = getPathKeys(varPath); + const pathKeys = getPathKeys(fullPath); + const merged = keys.map((key, index) => { + if (key === pathKeys[index] || index >= pathKeys.length) { + return key; + } + else if (typeof key === 'string' && (key === '*' || key[0] === '$')) { + return pathKeys[index]; + } + else { + throw new Error(`Path "${fullPath}" cannot be used to fill variables of path "${varPath}" because they do not match`); + } + }); + let mergedPath = ''; + merged.forEach(key => { + if (typeof key === 'number') { + mergedPath += `[${key}]`; + } + else { + if (mergedPath.length > 0) { + mergedPath += '/'; + } + mergedPath += key; + } + }); + return mergedPath; + } + /** + * Replaces all variables in a path with the values in the vars argument + * @param varPath path containing variables + * @param vars variables object such as one gotten from PathInfo.extractVariables + */ + static fillVariables2(varPath, vars) { + if (typeof vars !== 'object' || Object.keys(vars).length === 0) { + return varPath; // Nothing to fill + } + const pathKeys = getPathKeys(varPath); + let n = 0; + const targetPath = pathKeys.reduce((path, key) => { + if (typeof key === 'string' && (key === '*' || key.startsWith('$'))) { + return PathInfo.getChildPath(path, vars[n++]); + } + else { + return PathInfo.getChildPath(path, key); + } + }, ''); + return targetPath; + } + /** + * Checks if a given path matches this path, eg "posts/*\/title" matches "posts/12344/title" and "users/123/name" matches "users/$uid/name" + */ + equals(otherPath) { + const other = otherPath instanceof PathInfo ? otherPath : new PathInfo(otherPath); + if (this.path === other.path) { + return true; + } // they are identical + if (this.keys.length !== other.keys.length) { + return false; + } + return this.keys.every((key, index) => { + const otherKey = other.keys[index]; + return otherKey === key + || (typeof otherKey === 'string' && (otherKey === '*' || otherKey[0] === '$')) + || (typeof key === 'string' && (key === '*' || key[0] === '$')); + }); + } + /** + * Checks if a given path is an ancestor, eg "posts" is an ancestor of "posts/12344/title" + */ + isAncestorOf(descendantPath) { + const descendant = descendantPath instanceof PathInfo ? descendantPath : new PathInfo(descendantPath); + if (descendant.path === '' || this.path === descendant.path) { + return false; + } + if (this.path === '') { + return true; + } + if (this.keys.length >= descendant.keys.length) { + return false; + } + return this.keys.every((key, index) => { + const otherKey = descendant.keys[index]; + return otherKey === key + || (typeof otherKey === 'string' && (otherKey === '*' || otherKey[0] === '$')) + || (typeof key === 'string' && (key === '*' || key[0] === '$')); + }); + } + /** + * Checks if a given path is a descendant, eg "posts/1234/title" is a descendant of "posts" + */ + isDescendantOf(ancestorPath) { + const ancestor = ancestorPath instanceof PathInfo ? ancestorPath : new PathInfo(ancestorPath); + if (this.path === '' || this.path === ancestor.path) { + return false; + } + if (ancestorPath === '') { + return true; + } + if (ancestor.keys.length >= this.keys.length) { + return false; + } + return ancestor.keys.every((key, index) => { + const otherKey = this.keys[index]; + return otherKey === key + || (typeof otherKey === 'string' && (otherKey === '*' || otherKey[0] === '$')) + || (typeof key === 'string' && (key === '*' || key[0] === '$')); + }); + } + /** + * Checks if the other path is on the same trail as this path. Paths on the same trail if they share a + * common ancestor. Eg: "posts" is on the trail of "posts/1234/title" and vice versa. + */ + isOnTrailOf(otherPath) { + const other = otherPath instanceof PathInfo ? otherPath : new PathInfo(otherPath); + if (this.path.length === 0 || other.path.length === 0) { + return true; + } + if (this.path === other.path) { + return true; + } + return this.pathKeys.every((key, index) => { + if (index >= other.keys.length) { + return true; + } + const otherKey = other.keys[index]; + return otherKey === key + || (typeof otherKey === 'string' && (otherKey === '*' || otherKey[0] === '$')) + || (typeof key === 'string' && (key === '*' || key[0] === '$')); + }); + } + /** + * Checks if a given path is a direct child, eg "posts/1234/title" is a child of "posts/1234" + */ + isChildOf(otherPath) { + const other = otherPath instanceof PathInfo ? otherPath : new PathInfo(otherPath); + if (this.path === '') { + return false; + } // If our path is the root, it's nobody's child... + return this.parent.equals(other); + } + /** + * Checks if a given path is its parent, eg "posts/1234" is the parent of "posts/1234/title" + */ + isParentOf(otherPath) { + const other = otherPath instanceof PathInfo ? otherPath : new PathInfo(otherPath); + if (other.path === '') { + return false; + } // If the other path is the root, this path cannot be its parent + return this.equals(other.parent); + } +} +exports.PathInfo = PathInfo; + +},{}],17:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PathReference = void 0; +class PathReference { + /** + * Creates a reference to a path that can be stored in the database. Use this to create cross-references to other data in your database + * @param path + */ + constructor(path) { + this.path = path; + } +} +exports.PathReference = PathReference; + +},{}],18:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = { + // eslint-disable-next-line @typescript-eslint/ban-types + nextTick(fn) { + setTimeout(fn, 0); + }, +}; + +},{}],19:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SchemaDefinition = void 0; +// parses a typestring, creates checker functions +function parse(definition) { + // tokenize + let pos = 0; + function consumeSpaces() { + let c; + while (c = definition[pos], [' ', '\r', '\n', '\t'].includes(c)) { + pos++; + } + } + function consumeCharacter(c) { + if (definition[pos] !== c) { + throw new Error(`Unexpected character at position ${pos}. Expected: '${c}', found '${definition[pos]}'`); + } + pos++; + } + function readProperty() { + consumeSpaces(); + const prop = { name: '', optional: false, wildcard: false }; + let c; + while (c = definition[pos], c === '_' || c === '$' || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (prop.name.length > 0 && c >= '0' && c <= '9') || (prop.name.length === 0 && c === '*')) { + prop.name += c; + pos++; + } + if (prop.name.length === 0) { + throw new Error(`Property name expected at position ${pos}, found: ${definition.slice(pos, pos + 10)}..`); + } + if (definition[pos] === '?') { + prop.optional = true; + pos++; + } + if (prop.name === '*' || prop.name[0] === '$') { + prop.optional = true; + prop.wildcard = true; + } + consumeSpaces(); + consumeCharacter(':'); + return prop; + } + function readType() { + consumeSpaces(); + let type = { typeOf: 'any' }, c; + // try reading simple type first: (string,number,boolean,Date etc) + let name = ''; + while (c = definition[pos], (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { + name += c; + pos++; + } + if (name.length === 0) { + if (definition[pos] === '*') { + // any value + consumeCharacter('*'); + type.typeOf = 'any'; + } + else if (['\'', '"', '`'].includes(definition[pos])) { + // Read string value + type.typeOf = 'string'; + type.value = ''; + const quote = definition[pos]; + consumeCharacter(quote); + while (c = definition[pos], c && c !== quote) { + type.value += c; + pos++; + } + consumeCharacter(quote); + } + else if (definition[pos] >= '0' && definition[pos] <= '9') { + // read numeric value + type.typeOf = 'number'; + let nr = ''; + while (c = definition[pos], c === '.' || c === 'n' || (c >= '0' && c <= '9')) { + nr += c; + pos++; + } + if (nr.endsWith('n')) { + type.value = BigInt(nr); + } + else if (nr.includes('.')) { + type.value = parseFloat(nr); + } + else { + type.value = parseInt(nr); + } + } + else if (definition[pos] === '{') { + // Read object (interface) definition + consumeCharacter('{'); + type.typeOf = 'object'; + type.instanceOf = Object; + // Read children: + type.children = []; + while (true) { + const prop = readProperty(); + const types = readTypes(); + type.children.push({ name: prop.name, optional: prop.optional, wildcard: prop.wildcard, types }); + consumeSpaces(); + if (definition[pos] === '}') { + break; + } + consumeCharacter(','); + } + consumeCharacter('}'); + } + else if (definition[pos] === '/') { + // Read regular expression definition + consumeCharacter('/'); + let pattern = '', flags = ''; + while (c = definition[pos], c !== '/' || pattern.endsWith('\\')) { + pattern += c; + pos++; + } + consumeCharacter('/'); + while (c = definition[pos], ['g', 'i', 'm', 's', 'u', 'y', 'd'].includes(c)) { + flags += c; + pos++; + } + type.typeOf = 'string'; + type.matches = new RegExp(pattern, flags); + } + else { + throw new Error(`Expected a type definition at position ${pos}, found character '${definition[pos]}'`); + } + } + else if (['string', 'number', 'boolean', 'bigint', 'undefined', 'String', 'Number', 'Boolean', 'BigInt'].includes(name)) { + type.typeOf = name.toLowerCase(); + } + else if (name === 'Object' || name === 'object') { + type.typeOf = 'object'; + type.instanceOf = Object; + } + else if (name === 'Date') { + type.typeOf = 'object'; + type.instanceOf = Date; + } + else if (name === 'Binary' || name === 'binary') { + type.typeOf = 'object'; + type.instanceOf = ArrayBuffer; + } + else if (name === 'any') { + type.typeOf = 'any'; + } + else if (name === 'null') { + // This is ignored, null values are not stored in the db (null indicates deletion) + type.typeOf = 'object'; + type.value = null; + } + else if (name === 'Array') { + // Read generic Array defintion + consumeCharacter('<'); + type.typeOf = 'object'; + type.instanceOf = Array; //name; + type.genericTypes = readTypes(); + consumeCharacter('>'); + } + else if (['true', 'false'].includes(name)) { + type.typeOf = 'boolean'; + type.value = name === 'true'; + } + else { + throw new Error(`Unknown type at position ${pos}: "${type}"`); + } + // Check if it's an Array of given type (eg: string[] or string[][]) + // Also converts to generics, string[] becomes Array, string[][] becomes Array> + consumeSpaces(); + while (definition[pos] === '[') { + consumeCharacter('['); + consumeCharacter(']'); + type = { typeOf: 'object', instanceOf: Array, genericTypes: [type] }; + } + return type; + } + function readTypes() { + consumeSpaces(); + const types = [readType()]; + while (definition[pos] === '|') { + consumeCharacter('|'); + types.push(readType()); + consumeSpaces(); + } + return types; + } + return readType(); +} +function checkObject(path, properties, obj, partial) { + // Are there any properties that should not be in there? + const invalidProperties = properties.find(prop => prop.name === '*' || prop.name[0] === '$') // Only if no wildcard properties are allowed + ? [] + : Object.keys(obj).filter(key => ![null, undefined].includes(obj[key]) // Ignore null or undefined values + && !properties.find(prop => prop.name === key)); + if (invalidProperties.length > 0) { + return { ok: false, reason: `Object at path "${path}" cannot have propert${invalidProperties.length === 1 ? 'y' : 'ies'} ${invalidProperties.map(p => `"${p}"`).join(', ')}` }; + } + // Loop through properties that should be present + function checkProperty(property) { + const hasValue = ![null, undefined].includes(obj[property.name]); + if (!property.optional && (partial ? obj[property.name] === null : !hasValue)) { + return { ok: false, reason: `Property at path "${path}/${property.name}" is not optional` }; + } + if (hasValue && property.types.length === 1) { + return checkType(`${path}/${property.name}`, property.types[0], obj[property.name], false); + } + if (hasValue && !property.types.some(type => checkType(`${path}/${property.name}`, type, obj[property.name], false).ok)) { + return { ok: false, reason: `Property at path "${path}/${property.name}" does not match any of ${property.types.length} allowed types` }; + } + return { ok: true }; + } + const namedProperties = properties.filter(prop => !prop.wildcard); + const failedProperty = namedProperties.find(prop => !checkProperty(prop).ok); + if (failedProperty) { + const reason = checkProperty(failedProperty).reason; + return { ok: false, reason }; + } + const wildcardProperty = properties.find(prop => prop.wildcard); + if (!wildcardProperty) { + return { ok: true }; + } + const wildcardChildKeys = Object.keys(obj).filter(key => !namedProperties.find(prop => prop.name === key)); + let result = { ok: true }; + for (let i = 0; i < wildcardChildKeys.length && result.ok; i++) { + const childKey = wildcardChildKeys[i]; + result = checkProperty({ name: childKey, types: wildcardProperty.types, optional: true, wildcard: true }); + } + return result; +} +function checkType(path, type, value, partial, trailKeys) { + const ok = { ok: true }; + if (type.typeOf === 'any') { + return ok; + } + if (trailKeys instanceof Array && trailKeys.length > 0) { + // The value to check resides in a descendant path of given type definition. + // Recursivly check child type definitions to find a match + if (type.typeOf !== 'object') { + return { ok: false, reason: `path "${path}" must be typeof ${type.typeOf}` }; // given value resides in a child path, but parent is not allowed be an object. + } + if (!type.children) { + return ok; + } + const childKey = trailKeys[0]; + let property = type.children.find(prop => prop.name === childKey); + if (!property) { + property = type.children.find(prop => prop.name === '*' || prop.name[0] === '$'); + } + if (!property) { + return { ok: false, reason: `Object at path "${path}" cannot have property "${childKey}"` }; + } + if (property.optional && value === null && trailKeys.length === 1) { + return ok; + } + let result; + property.types.some(type => { + const childPath = typeof childKey === 'number' ? `${path}[${childKey}]` : `${path}/${childKey}`; + result = checkType(childPath, type, value, partial, trailKeys.slice(1)); + return result.ok; + }); + return result; + } + if (value === null) { + return ok; + } + if (type.instanceOf === Object && (typeof value !== 'object' || value instanceof Array || value instanceof Date)) { + return { ok: false, reason: `path "${path}" must be an object collection` }; + } + if (type.instanceOf && (typeof value !== 'object' || value.constructor !== type.instanceOf)) { // !(value instanceof type.instanceOf) // value.constructor.name !== type.instanceOf + return { ok: false, reason: `path "${path}" must be an instance of ${type.instanceOf.name}` }; + } + if ('value' in type && value !== type.value) { + return { ok: false, reason: `path "${path}" must be value: ${type.value}` }; + } + if (typeof value !== type.typeOf) { + return { ok: false, reason: `path "${path}" must be typeof ${type.typeOf}` }; + } + if (type.instanceOf === Array && type.genericTypes && !value.every(v => type.genericTypes.some(t => checkType(path, t, v, false).ok))) { + return { ok: false, reason: `every array value of path "${path}" must match one of the specified types` }; + } + if (type.typeOf === 'object' && type.children) { + return checkObject(path, type.children, value, partial); + } + if (type.matches && !type.matches.test(value)) { + return { ok: false, reason: `path "${path}" must match regular expression /${type.matches.source}/${type.matches.flags}` }; + } + return ok; +} +// eslint-disable-next-line @typescript-eslint/ban-types +function getConstructorType(val) { + switch (val) { + case String: return 'string'; + case Number: return 'number'; + case Boolean: return 'boolean'; + case Date: return 'Date'; + case BigInt: return 'bigint'; + case Array: throw new Error('Schema error: Array cannot be used without a type. Use string[] or Array instead'); + default: throw new Error(`Schema error: unknown type used: ${val.name}`); + } +} +class SchemaDefinition { + constructor(definition) { + this.source = definition; + if (typeof definition === 'object') { + // Turn object into typescript definitions + // eg: + // const example = { + // name: String, + // born: Date, + // instrument: "'guitar'|'piano'", + // "address?": { + // street: String + // } + // }; + // Resulting ts: "{name:string,born:Date,instrument:'guitar'|'piano',address?:{street:string}}" + const toTS = (obj) => { + return '{' + Object.keys(obj) + .map(key => { + let val = obj[key]; + if (val === undefined) { + val = 'undefined'; + } + else if (val instanceof RegExp) { + val = `/${val.source}/${val.flags}`; + } + else if (typeof val === 'object') { + val = toTS(val); + } + else if (typeof val === 'function') { + val = getConstructorType(val); + } + else if (!['string', 'number', 'boolean', 'bigint'].includes(typeof val)) { + throw new Error(`Type definition for key "${key}" must be a string, number, boolean, bigint, object, regular expression, or one of these classes: String, Number, Boolean, Date, BigInt`); + } + return `${key}:${val}`; + }) + .join(',') + '}'; + }; + this.text = toTS(definition); + } + else if (typeof definition === 'string') { + this.text = definition; + } + else { + throw new Error('Type definiton must be a string or an object'); + } + this.type = parse(this.text); + } + check(path, value, partial, trailKeys) { + return checkType(path, this.type, value, partial, trailKeys); + } +} +exports.SchemaDefinition = SchemaDefinition; + +},{}],20:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SimpleCache = void 0; +const utils_1 = require("./utils"); +const calculateExpiryTime = (expirySeconds) => expirySeconds > 0 ? Date.now() + (expirySeconds * 1000) : Infinity; +/** + * Simple cache implementation that retains immutable values in memory for a limited time. + * Immutability is enforced by cloning the stored and retrieved values. To change a cached value, it will have to be `set` again with the new value. + */ +class SimpleCache { + constructor(options) { + var _a; + this.enabled = true; + if (typeof options === 'number') { + // Old signature: only expirySeconds given + options = { expirySeconds: options }; + } + options.cloneValues = options.cloneValues !== false; + if (typeof options.expirySeconds !== 'number' && typeof options.maxEntries !== 'number') { + throw new Error('Either expirySeconds or maxEntries must be specified'); + } + this.options = options; + this.cache = new Map(); + // Cleanup every minute + const interval = setInterval(() => { this.cleanUp(); }, 60 * 1000); + (_a = interval.unref) === null || _a === void 0 ? void 0 : _a.call(interval); + } + get size() { return this.cache.size; } + has(key) { + if (!this.enabled) { + return false; + } + return this.cache.has(key); + } + get(key) { + if (!this.enabled) { + return null; + } + const entry = this.cache.get(key); + if (!entry) { + return null; + } // if (!entry || entry.expires <= Date.now()) { return null; } + entry.expires = calculateExpiryTime(this.options.expirySeconds); + entry.accessed = Date.now(); + return this.options.cloneValues ? (0, utils_1.cloneObject)(entry.value) : entry.value; + } + set(key, value) { + if (this.options.maxEntries > 0 && this.cache.size >= this.options.maxEntries && !this.cache.has(key)) { + // console.warn(`* cache limit ${this.options.maxEntries} reached: ${this.cache.size}`); + // Remove an expired item or the one that was accessed longest ago + let oldest = null; + const now = Date.now(); + for (const [key, entry] of this.cache.entries()) { + if (entry.expires <= now) { + // Found an expired item. Remove it now and stop + this.cache.delete(key); + oldest = null; + break; + } + if (!oldest || entry.accessed < oldest.accessed) { + oldest = { key, accessed: entry.accessed }; + } + } + if (oldest !== null) { + this.cache.delete(oldest.key); + } + } + this.cache.set(key, { value: this.options.cloneValues ? (0, utils_1.cloneObject)(value) : value, added: Date.now(), accessed: Date.now(), expires: calculateExpiryTime(this.options.expirySeconds) }); + } + remove(key) { + this.cache.delete(key); + } + cleanUp() { + const now = Date.now(); + this.cache.forEach((entry, key) => { + if (entry.expires <= now) { + this.cache.delete(key); + } + }); + } +} +exports.SimpleCache = SimpleCache; + +},{"./utils":26}],21:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Colorize = exports.SetColorsEnabled = exports.ColorsSupported = exports.ColorStyle = void 0; +const process_1 = require("./process"); +// See from https://en.wikipedia.org/wiki/ANSI_escape_code +const FontCode = { + bold: 1, + dim: 2, + italic: 3, + underline: 4, + inverse: 7, + hidden: 8, + strikethrough: 94, +}; +const ColorCode = { + black: 30, + red: 31, + green: 32, + yellow: 33, + blue: 34, + magenta: 35, + cyan: 36, + white: 37, + grey: 90, + // Bright colors: + brightRed: 91, + // TODO, other bright colors +}; +const BgColorCode = { + bgBlack: 40, + bgRed: 41, + bgGreen: 42, + bgYellow: 43, + bgBlue: 44, + bgMagenta: 45, + bgCyan: 46, + bgWhite: 47, + bgGrey: 100, + bgBrightRed: 101, + // TODO, other bright colors +}; +const ResetCode = { + all: 0, + color: 39, + background: 49, + bold: 22, + dim: 22, + italic: 23, + underline: 24, + inverse: 27, + hidden: 28, + strikethrough: 29, +}; +var ColorStyle; +(function (ColorStyle) { + ColorStyle["reset"] = "reset"; + ColorStyle["bold"] = "bold"; + ColorStyle["dim"] = "dim"; + ColorStyle["italic"] = "italic"; + ColorStyle["underline"] = "underline"; + ColorStyle["inverse"] = "inverse"; + ColorStyle["hidden"] = "hidden"; + ColorStyle["strikethrough"] = "strikethrough"; + ColorStyle["black"] = "black"; + ColorStyle["red"] = "red"; + ColorStyle["green"] = "green"; + ColorStyle["yellow"] = "yellow"; + ColorStyle["blue"] = "blue"; + ColorStyle["magenta"] = "magenta"; + ColorStyle["cyan"] = "cyan"; + ColorStyle["grey"] = "grey"; + ColorStyle["bgBlack"] = "bgBlack"; + ColorStyle["bgRed"] = "bgRed"; + ColorStyle["bgGreen"] = "bgGreen"; + ColorStyle["bgYellow"] = "bgYellow"; + ColorStyle["bgBlue"] = "bgBlue"; + ColorStyle["bgMagenta"] = "bgMagenta"; + ColorStyle["bgCyan"] = "bgCyan"; + ColorStyle["bgWhite"] = "bgWhite"; + ColorStyle["bgGrey"] = "bgGrey"; +})(ColorStyle = exports.ColorStyle || (exports.ColorStyle = {})); +function ColorsSupported() { + // Checks for basic color support + if (typeof process_1.default === 'undefined' || !process_1.default.stdout || !process_1.default.env || !process_1.default.platform || process_1.default.platform === 'browser') { + return false; + } + if (process_1.default.platform === 'win32') { + return true; + } + const env = process_1.default.env; + if (env.COLORTERM) { + return true; + } + if (env.TERM === 'dumb') { + return false; + } + if (env.CI || env.TEAMCITY_VERSION) { + return !!env.TRAVIS; + } + if (['iTerm.app', 'HyperTerm', 'Hyper', 'MacTerm', 'Apple_Terminal', 'vscode'].includes(env.TERM_PROGRAM)) { + return true; + } + if (/^xterm-256|^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(env.TERM)) { + return true; + } + return false; +} +exports.ColorsSupported = ColorsSupported; +let _enabled = ColorsSupported(); +function SetColorsEnabled(enabled) { + _enabled = ColorsSupported() && enabled; +} +exports.SetColorsEnabled = SetColorsEnabled; +function Colorize(str, style) { + if (!_enabled) { + return str; + } + const openCodes = [], closeCodes = []; + const addStyle = (style) => { + if (style === ColorStyle.reset) { + openCodes.push(ResetCode.all); + } + else if (style in FontCode) { + openCodes.push(FontCode[style]); + closeCodes.push(ResetCode[style]); + } + else if (style in ColorCode) { + openCodes.push(ColorCode[style]); + closeCodes.push(ResetCode.color); + } + else if (style in BgColorCode) { + openCodes.push(BgColorCode[style]); + closeCodes.push(ResetCode.background); + } + }; + if (style instanceof Array) { + style.forEach(addStyle); + } + else { + addStyle(style); + } + // const open = '\u001b[' + openCodes.join(';') + 'm'; + // const close = '\u001b[' + closeCodes.join(';') + 'm'; + const open = openCodes.map(code => '\u001b[' + code + 'm').join(''); + const close = closeCodes.map(code => '\u001b[' + code + 'm').join(''); + // return open + str + close; + return str.split('\n').map(line => open + line + close).join('\n'); +} +exports.Colorize = Colorize; +String.prototype.colorize = function (style) { + return Colorize(this, style); +}; + +},{"./process":18}],22:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SimpleEventEmitter = void 0; +function runCallback(callback, data) { + try { + callback(data); + } + catch (err) { + console.error('Error in subscription callback', err); + } +} +class SimpleEventEmitter { + constructor() { + this._subscriptions = []; + this._oneTimeEvents = new Map(); + } + on(event, callback) { + if (this._oneTimeEvents.has(event)) { + return runCallback(callback, this._oneTimeEvents.get(event)); + } + this._subscriptions.push({ event, callback, once: false }); + return this; + } + off(event, callback) { + this._subscriptions = this._subscriptions.filter(s => s.event !== event || (callback && s.callback !== callback)); + return this; + } + once(event, callback) { + return new Promise(resolve => { + const ourCallback = (data) => { + resolve(data); + callback === null || callback === void 0 ? void 0 : callback(data); + }; + if (this._oneTimeEvents.has(event)) { + runCallback(ourCallback, this._oneTimeEvents.get(event)); + } + else { + this._subscriptions.push({ event, callback: ourCallback, once: true }); + } + }); + } + emit(event, data) { + if (this._oneTimeEvents.has(event)) { + throw new Error(`Event "${event}" was supposed to be emitted only once`); + } + for (let i = 0; i < this._subscriptions.length; i++) { + const s = this._subscriptions[i]; + if (s.event !== event) { + continue; + } + runCallback(s.callback, data); + if (s.once) { + this._subscriptions.splice(i, 1); + i--; + } + } + return this; + } + emitOnce(event, data) { + if (this._oneTimeEvents.has(event)) { + throw new Error(`Event "${event}" was supposed to be emitted only once`); + } + this.emit(event, data); + this._oneTimeEvents.set(event, data); // Mark event as being emitted once for future subscribers + this.off(event); // Remove all listeners for this event, they won't fire again + return this; + } +} +exports.SimpleEventEmitter = SimpleEventEmitter; + +},{}],23:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.EventStream = exports.EventPublisher = exports.EventSubscription = void 0; +class EventSubscription { + /** + * @param stop function that stops the subscription from receiving future events + */ + constructor(stop) { + this.stop = stop; + this._internal = { + state: 'init', + activatePromises: [], + }; + } + /** + * Notifies when subscription is activated or canceled + * @param callback optional callback to run each time activation state changes + * @returns returns a promise that resolves once activated, or rejects when it is denied (and no callback was supplied) + */ + activated(callback) { + if (callback) { + this._internal.activatePromises.push({ callback }); + if (this._internal.state === 'active') { + callback(true); + } + else if (this._internal.state === 'canceled') { + callback(false, this._internal.cancelReason); + } + } + // Changed behaviour: now also returns a Promise when the callback is used. + // This allows for 1 activated call to both handle: first activation result, + // and any future events using the callback + return new Promise((resolve, reject) => { + if (this._internal.state === 'active') { + return resolve(); + } + else if (this._internal.state === 'canceled' && !callback) { + return reject(new Error(this._internal.cancelReason)); + } + // eslint-disable-next-line @typescript-eslint/no-empty-function + const noop = () => { }; + this._internal.activatePromises.push({ + resolve, + reject: callback ? noop : reject, // Don't reject when callback is used: let callback handle this (prevents UnhandledPromiseRejection if only callback is used) + }); + }); + } + /** (for internal use) */ + _setActivationState(activated, cancelReason) { + this._internal.cancelReason = cancelReason; + this._internal.state = activated ? 'active' : 'canceled'; + while (this._internal.activatePromises.length > 0) { + const p = this._internal.activatePromises.shift(); + if (activated) { + p.callback && p.callback(true); + p.resolve && p.resolve(); + } + else { + p.callback && p.callback(false, cancelReason); + p.reject && p.reject(cancelReason); + } + } + } +} +exports.EventSubscription = EventSubscription; +class EventPublisher { + /** + * + * @param publish function that publishes a new value to subscribers, return if there are any active subscribers + * @param start function that notifies subscribers their subscription is activated + * @param cancel function that notifies subscribers their subscription has been canceled, removes all subscriptions + */ + constructor(publish, start, cancel) { + this.publish = publish; + this.start = start; + this.cancel = cancel; + } +} +exports.EventPublisher = EventPublisher; +class EventStream { + constructor(eventPublisherCallback) { + const subscribers = []; + let noMoreSubscribersCallback; + let activationState; + const _stoppedState = 'stopped (no more subscribers)'; + this.subscribe = (callback, activationCallback) => { + if (typeof callback !== 'function') { + throw new TypeError('callback must be a function'); + } + else if (activationState === _stoppedState) { + throw new Error('stream can\'t be used anymore because all subscribers were stopped'); + } + const sub = { + callback, + activationCallback: function (activated, cancelReason) { + activationCallback === null || activationCallback === void 0 ? void 0 : activationCallback(activated, cancelReason); + this.subscription._setActivationState(activated, cancelReason); + }, + subscription: new EventSubscription(function stop() { + subscribers.splice(subscribers.indexOf(this), 1); + return checkActiveSubscribers(); + }), + }; + subscribers.push(sub); + if (typeof activationState !== 'undefined') { + if (activationState === true) { + activationCallback === null || activationCallback === void 0 ? void 0 : activationCallback(true); + sub.subscription._setActivationState(true); + } + else if (typeof activationState === 'string') { + activationCallback === null || activationCallback === void 0 ? void 0 : activationCallback(false, activationState); + sub.subscription._setActivationState(false, activationState); + } + } + return sub.subscription; + }; + const checkActiveSubscribers = () => { + let ret; + if (subscribers.length === 0) { + ret = noMoreSubscribersCallback === null || noMoreSubscribersCallback === void 0 ? void 0 : noMoreSubscribersCallback(); + activationState = _stoppedState; + } + return Promise.resolve(ret); + }; + this.unsubscribe = (callback) => { + const remove = callback + ? subscribers.filter(sub => sub.callback === callback) + : subscribers; + remove.forEach(sub => { + const i = subscribers.indexOf(sub); + subscribers.splice(i, 1); + }); + checkActiveSubscribers(); + }; + this.stop = () => { + // Stop (remove) all subscriptions + subscribers.splice(0); + checkActiveSubscribers(); + }; + /** + * For publishing side: adds a value that will trigger callbacks to all subscribers + * @param val + * @returns returns whether there are subscribers left + */ + const publish = (val) => { + subscribers.forEach(sub => { + try { + sub.callback(val); + } + catch (err) { + console.error(`Error running subscriber callback: ${err.message}`); + } + }); + if (subscribers.length === 0) { + checkActiveSubscribers(); + } + return subscribers.length > 0; + }; + /** + * For publishing side: let subscribers know their subscription is activated. Should be called only once + */ + const start = (allSubscriptionsStoppedCallback) => { + activationState = true; + noMoreSubscribersCallback = allSubscriptionsStoppedCallback; + subscribers.forEach(sub => { + var _a; + (_a = sub.activationCallback) === null || _a === void 0 ? void 0 : _a.call(sub, true); + }); + }; + /** + * For publishing side: let subscribers know their subscription has been canceled. Should be called only once + */ + const cancel = (reason) => { + activationState = reason; + subscribers.forEach(sub => { + var _a; + (_a = sub.activationCallback) === null || _a === void 0 ? void 0 : _a.call(sub, false, reason || new Error('unknown reason')); + }); + subscribers.splice(0); // Clear all + }; + const publisher = new EventPublisher(publish, start, cancel); + eventPublisherCallback(publisher); + } +} +exports.EventStream = EventStream; + +},{}],24:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.deserialize2 = exports.serialize2 = exports.serialize = exports.detectSerializeVersion = exports.deserialize = void 0; +const path_reference_1 = require("./path-reference"); +const utils_1 = require("./utils"); +const ascii85_1 = require("./ascii85"); +const path_info_1 = require("./path-info"); +const partial_array_1 = require("./partial-array"); +/* + There are now 2 different serialization methods for transporting values. + + v1: + The original version (v1) created an object with "map" and "val" properties. + The "map" property was made optional in v1.14.1 so they won't be present for values needing no serializing + + v2: + The new version replaces serialized values inline by objects containing ".type" and ".val" properties. + This serializing method was introduced by `export` and `import` methods because they use streaming and + are unable to prepare type mappings up-front. This format is smaller in transmission (in many cases), + and easier to read and process. + + original: { "date": (some date) } + v1 serialized: { "map": { "date": "date" }, "val": { date: "2022-04-22T07:49:23Z" } } + v2 serialized: { "date": { ".type": "date", ".val": "2022-04-22T07:49:23Z" } } + + original: (some date) + v1 serialized: { "map": "date", "val": "2022-04-22T07:49:23Z" } + v2 serialized: { ".type": "date", ".val": "2022-04-22T07:49:23Z" } + comment: top level value that need serializing is wrapped in an object with ".type" and ".val". v1 is smaller in this case + + original: 'some string' + v1 serialized: { "map": {}, "val": "some string" } + v2 serialized: "some string" + comment: primitive types such as strings don't need serializing and are returned as is in v2 + + original: { "date": (some date), "text": "Some string" } + v1 serialized: { "map": { "date": "date" }, "val": { date: "2022-04-22T07:49:23Z", "text": "Some string" } } + v2 serialized: { "date": { ".type": "date", ".val": "2022-04-22T07:49:23Z" }, "text": "Some string" } +*/ +/** + * Original deserialization method using global `map` and `val` properties + * @param data + * @returns + */ +const deserialize = (data) => { + if (data.map === null || typeof data.map === 'undefined') { + if (typeof data.val === 'undefined') { + throw new Error('serialized value must have a val property'); + } + return data.val; + } + const deserializeValue = (type, val) => { + if (type === 'date') { + // Date was serialized as a string (UTC) + return new Date(val); + } + else if (type === 'binary') { + // ascii85 encoded binary data + return ascii85_1.ascii85.decode(val); + } + else if (type === 'reference') { + return new path_reference_1.PathReference(val); + } + else if (type === 'regexp') { + return new RegExp(val.pattern, val.flags); + } + else if (type === 'array') { + return new partial_array_1.PartialArray(val); + } + else if (type === 'bigint') { + return BigInt(val); + } + return val; + }; + if (typeof data.map === 'string') { + // Single value + return deserializeValue(data.map, data.val); + } + Object.keys(data.map).forEach(path => { + const type = data.map[path]; + const keys = path_info_1.PathInfo.getPathKeys(path); + let parent = data; + let key = 'val'; + let val = data.val; + keys.forEach(k => { + key = k; + parent = val; + val = val[key]; // If an error occurs here, there's something wrong with the calling code... + }); + parent[key] = deserializeValue(type, val); + }); + return data.val; +}; +exports.deserialize = deserialize; +/** + * Function to detect the used serialization method with for the given object + * @param data + * @returns + */ +const detectSerializeVersion = (data) => { + if (typeof data !== 'object' || data === null) { + // This can only be v2, which allows primitive types to bypass serializing + return 2; + } + if ('map' in data && 'val' in data) { + return 1; + } + else if ('val' in data) { + // If it's v1, 'val' will be the only key in the object because serialize2 adds ".version": 2 to the object to prevent confusion. + if (Object.keys(data).length > 1) { + return 2; + } + return 1; + } + return 2; +}; +exports.detectSerializeVersion = detectSerializeVersion; +/** + * Original serialization method using global `map` and `val` properties + * @param data + * @returns + */ +const serialize = (obj) => { + var _a; + // Recursively find dates and binary data + if (obj === null || typeof obj !== 'object' || obj instanceof Date || obj instanceof ArrayBuffer || obj instanceof path_reference_1.PathReference || obj instanceof RegExp) { + // Single value + const ser = (0, exports.serialize)({ value: obj }); + return { + map: (_a = ser.map) === null || _a === void 0 ? void 0 : _a.value, + val: ser.val.value, + }; + } + obj = (0, utils_1.cloneObject)(obj); // Make sure we don't alter the original object + const process = (obj, mappings, prefix) => { + if (obj instanceof partial_array_1.PartialArray) { + mappings[prefix] = 'array'; + } + Object.keys(obj).forEach(key => { + const val = obj[key]; + const path = prefix.length === 0 ? key : `${prefix}/${key}`; + if (typeof val === 'bigint') { + obj[key] = val.toString(); + mappings[path] = 'bigint'; + } + else if (val instanceof Date) { + // serialize date to UTC string + obj[key] = val.toISOString(); + mappings[path] = 'date'; + } + else if (val instanceof ArrayBuffer) { + // Serialize binary data with ascii85 + obj[key] = ascii85_1.ascii85.encode(val); //ascii85.encode(Buffer.from(val)).toString(); + mappings[path] = 'binary'; + } + else if (val instanceof path_reference_1.PathReference) { + obj[key] = val.path; + mappings[path] = 'reference'; + } + else if (val instanceof RegExp) { + // Queries using the 'matches' filter with a regular expression can now also be used on remote db's + obj[key] = { pattern: val.source, flags: val.flags }; + mappings[path] = 'regexp'; + } + else if (typeof val === 'object' && val !== null) { + process(val, mappings, path); + } + }); + }; + const mappings = {}; + process(obj, mappings, ''); + const serialized = { val: obj }; + if (Object.keys(mappings).length > 0) { + serialized.map = mappings; + } + return serialized; +}; +exports.serialize = serialize; +/** + * New serialization method using inline `.type` and `.val` properties + * @param obj + * @returns + */ +const serialize2 = (obj) => { + // Recursively find data that needs serializing + const getSerializedValue = (val) => { + if (typeof val === 'bigint') { + // serialize bigint to string + return { + '.type': 'bigint', + '.val': val.toString(), + }; + } + else if (val instanceof Date) { + // serialize date to UTC string + return { + '.type': 'date', + '.val': val.toISOString(), + }; + } + else if (val instanceof ArrayBuffer) { + // Serialize binary data with ascii85 + return { + '.type': 'binary', + '.val': ascii85_1.ascii85.encode(val), + }; + } + else if (val instanceof path_reference_1.PathReference) { + return { + '.type': 'reference', + '.val': val.path, + }; + } + else if (val instanceof RegExp) { + // Queries using the 'matches' filter with a regular expression can now also be used on remote db's + return { + '.type': 'regexp', + '.val': `/${val.source}/${val.flags}`, // new: shorter + // '.val': { + // pattern: val.source, + // flags: val.flags + // } + }; + } + else if (typeof val === 'object' && val !== null) { + if (val instanceof Array) { + const copy = []; + for (let i = 0; i < val.length; i++) { + copy[i] = getSerializedValue(val[i]); + } + return copy; + } + else { + const copy = {}; //val instanceof Array ? [] : {} as SerializedValueV2; + if (val instanceof partial_array_1.PartialArray) { + // Mark the object as partial ("sparse") array + copy['.type'] = 'array'; + } + for (const prop in val) { + copy[prop] = getSerializedValue(val[prop]); + } + return copy; + } + } + else { + // Primitive value. Don't serialize + return val; + } + }; + const serialized = getSerializedValue(obj); + if (serialized !== null && typeof serialized === 'object' && 'val' in serialized && Object.keys(serialized).length === 1) { + // acebase-core v1.14.1 made the 'map' property optional. + // This v2 serialized object might be confused with a v1 without mappings, because it only has a "val" property + // To prevent this, mark the serialized object with version 2 + serialized['.version'] = 2; + } + return serialized; +}; +exports.serialize2 = serialize2; +/** + * New deserialization method using inline `.type` and `.val` properties + * @param obj + * @returns + */ +const deserialize2 = (data) => { + if (typeof data !== 'object' || data === null) { + // primitive value, not serialized + return data; + } + if (typeof data['.type'] === 'undefined') { + // No type given: this is a plain object or array + if (data instanceof Array) { + // Plain array, deserialize items into a copy + const copy = []; + const arr = data; + for (let i = 0; i < arr.length; i++) { + copy.push((0, exports.deserialize2)(arr[i])); + } + return copy; + } + else { + // Plain object, deserialize properties into a copy + const copy = {}; + const obj = data; + for (const prop in obj) { + copy[prop] = (0, exports.deserialize2)(obj[prop]); + } + return copy; + } + } + else if (typeof data['.type'] === 'string') { + const dataType = data['.type'].toLowerCase(); + if (dataType === 'bigint') { + const val = data['.val']; + return BigInt(val); + } + else if (dataType === 'array') { + // partial ("sparse") array, deserialize children into a copy + const arr = data; + const copy = {}; + for (const index in arr) { + copy[index] = (0, exports.deserialize2)(arr[index]); + } + delete copy['.type']; + return new partial_array_1.PartialArray(copy); + } + else if (dataType === 'date') { + // Date was serialized as a string (UTC) + const val = data['.val']; + return new Date(val); + } + else if (dataType === 'binary') { + // ascii85 encoded binary data + const val = data['.val']; + return ascii85_1.ascii85.decode(val); + } + else if (dataType === 'reference') { + const val = data['.val']; + return new path_reference_1.PathReference(val); + } + else if (dataType === 'regexp') { + const val = data['.val']; + if (typeof val === 'string') { + // serialized as '/(pattern)/flags' + const match = /^\/(.*)\/([a-z]+)$/.exec(val); + return new RegExp(match[1], match[2]); + } + // serialized as object with pattern & flags properties + return new RegExp(val.pattern, val.flags); + } + } + throw new Error(`Unknown data type "${data['.type']}" in serialized value`); +}; +exports.deserialize2 = deserialize2; + +},{"./ascii85":3,"./partial-array":15,"./path-info":16,"./path-reference":17,"./utils":26}],25:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TypeMappings = void 0; +const utils_1 = require("./utils"); +const path_info_1 = require("./path-info"); +const data_reference_1 = require("./data-reference"); +const data_snapshot_1 = require("./data-snapshot"); +/** + * (for internal use) - gets the mapping set for a specific path + */ +function get(mappings, path) { + // path points to the mapped (object container) location + path = path.replace(/^\/|\/$/g, ''); // trim slashes + const keys = path_info_1.PathInfo.getPathKeys(path); + const mappedPath = Object.keys(mappings).find(mpath => { + const mkeys = path_info_1.PathInfo.getPathKeys(mpath); + if (mkeys.length !== keys.length) { + return false; // Can't be a match + } + return mkeys.every((mkey, index) => { + if (mkey === '*' || (typeof mkey === 'string' && mkey[0] === '$')) { + return true; // wildcard + } + return mkey === keys[index]; + }); + }); + const mapping = mappings[mappedPath]; + return mapping; +} +/** + * (for internal use) - gets the mapping set for a specific path's parent + */ +function map(mappings, path) { + // path points to the object location, its parent should have the mapping + const targetPath = path_info_1.PathInfo.get(path).parentPath; + if (targetPath === null) { + return; + } + return get(mappings, targetPath); +} +/** + * (for internal use) - gets all mappings set for a specific path and all subnodes + * @returns returns array of all matched mappings in path + */ +function mapDeep(mappings, entryPath) { + // returns mapping for this node, and all mappings for nested nodes + // entryPath: "users/ewout" + // mappingPath: "users" + // mappingPath: "users/*/posts" + entryPath = entryPath.replace(/^\/|\/$/g, ''); // trim slashes + // Start with current path's parent node + const pathInfo = path_info_1.PathInfo.get(entryPath); + const startPath = pathInfo.parentPath; + const keys = startPath ? path_info_1.PathInfo.getPathKeys(startPath) : []; + // Every path that starts with startPath, is a match + // TODO: refactor to return Object.keys(mappings),filter(...) + const matches = Object.keys(mappings).reduce((m, mpath) => { + //const mkeys = mpath.length > 0 ? mpath.split("/") : []; + const mkeys = path_info_1.PathInfo.getPathKeys(mpath); + if (mkeys.length < keys.length) { + return m; // Can't be a match + } + let isMatch = true; + if (keys.length === 0 && startPath !== null) { + // Only match first node's children if mapping pattern is "*" or "$variable" + isMatch = mkeys.length === 1 && (mkeys[0] === '*' || (typeof mkeys[0] === 'string' && mkeys[0][0] === '$')); + } + else { + mkeys.every((mkey, index) => { + if (index >= keys.length) { + return false; // stop .every loop + } + else if ((mkey === '*' || (typeof mkey === 'string' && mkey[0] === '$')) || mkey === keys[index]) { + return true; // continue .every loop + } + else { + isMatch = false; + return false; // stop .every loop + } + }); + } + if (isMatch) { + const mapping = mappings[mpath]; + m.push({ path: mpath, type: mapping }); + } + return m; + }, []); + return matches; +} +/** + * (for internal use) - serializes or deserializes an object using type mappings + * @returns returns the (de)serialized value + */ +function process(db, mappings, path, obj, action) { + if (obj === null || typeof obj !== 'object') { + return obj; + } + const keys = path_info_1.PathInfo.getPathKeys(path); // path.length > 0 ? path.split("/") : []; + const m = mapDeep(mappings, path); + const changes = []; + m.sort((a, b) => path_info_1.PathInfo.getPathKeys(a.path).length > path_info_1.PathInfo.getPathKeys(b.path).length ? -1 : 1); // Deepest paths first + m.forEach(mapping => { + const mkeys = path_info_1.PathInfo.getPathKeys(mapping.path); //mapping.path.length > 0 ? mapping.path.split("/") : []; + mkeys.push('*'); + const mTrailKeys = mkeys.slice(keys.length); + if (mTrailKeys.length === 0) { + const vars = path_info_1.PathInfo.extractVariables(mapping.path, path); + const ref = new data_reference_1.DataReference(db, path, vars); + if (action === 'serialize') { + // serialize this object + obj = mapping.type.serialize(obj, ref); + } + else if (action === 'deserialize') { + // deserialize this object + const snap = new data_snapshot_1.DataSnapshot(ref, obj); + obj = mapping.type.deserialize(snap); + } + return; + } + // Find all nested objects at this trail path + const process = (parentPath, parent, keys) => { + if (obj === null || typeof obj !== 'object') { + return obj; + } + const key = keys[0]; + let children = []; + if (key === '*' || (typeof key === 'string' && key[0] === '$')) { + // Include all children + if (parent instanceof Array) { + children = parent.map((val, index) => ({ key: index, val })); + } + else { + children = Object.keys(parent).map(k => ({ key: k, val: parent[k] })); + } + } + else { + // Get the 1 child + const child = parent[key]; + if (typeof child === 'object') { + children.push({ key, val: child }); + } + } + children.forEach(child => { + const childPath = path_info_1.PathInfo.getChildPath(parentPath, child.key); + const vars = path_info_1.PathInfo.extractVariables(mapping.path, childPath); + const ref = new data_reference_1.DataReference(db, childPath, vars); + if (keys.length === 1) { + // TODO: this alters the existing object, we must build our own copy! + if (action === 'serialize') { + // serialize this object + changes.push({ parent, key: child.key, original: parent[child.key] }); + parent[child.key] = mapping.type.serialize(child.val, ref); + } + else if (action === 'deserialize') { + // deserialize this object + const snap = new data_snapshot_1.DataSnapshot(ref, child.val); + parent[child.key] = mapping.type.deserialize(snap); + } + } + else { + // Dig deeper + process(childPath, child.val, keys.slice(1)); + } + }); + }; + process(path, obj, mTrailKeys); + }); + if (action === 'serialize') { + // Clone this serialized object so any types that remained + // will become plain objects without functions, and we can restore + // the original object's values if any mappings were processed. + // This will also prevent circular references + obj = (0, utils_1.cloneObject)(obj); + if (changes.length > 0) { + // Restore the changes made to the original object + changes.forEach(change => { + change.parent[change.key] = change.original; + }); + } + } + return obj; +} +const _mappings = Symbol('mappings'); +class TypeMappings { + constructor(db) { + this.db = db; + this[_mappings] = {}; + } + /** (for internal use) */ + get mappings() { return this[_mappings]; } + /** (for internal use) */ + map(path) { + return map(this[_mappings], path); + } + /** + * Maps objects that are stored in a specific path to a class, so they can automatically be + * serialized when stored to, and deserialized (instantiated) when loaded from the database. + * @param path path to an object container, eg "users" or "users/*\/posts" + * @param type class to bind all child objects of path to + * Best practice is to implement 2 methods for instantiation and serializing of your objects: + * 1) `static create(snap: DataSnapshot)` and 2) `serialize(ref: DataReference)`. See example + * @param options (optional) You can specify the functions to use to + * serialize and/or instantiate your class. If you do not specificy a creator (constructor) method, + * AceBase will call `YourClass.create(snapshot)` method if it exists, or create an instance of + * YourClass with `new YourClass(snapshot)`. + * If you do not specifiy a serializer method, AceBase will call `YourClass.prototype.serialize(ref)` + * if it exists, or tries storing your object's fields unaltered. NOTE: `this` in your creator + * function will point to `YourClass`, and `this` in your serializer function will point to the + * `instance` of `YourClass`. + * @example + * class User { + * static create(snap: DataSnapshot): User { + * // Deserialize (instantiate) User from plain database object + * let user = new User(); + * Object.assign(user, snap.val()); // Copy all properties to user + * user.id = snap.ref.key; // Add the key as id + * return user; + * } + * serialize(ref: DataReference) { + * // Serialize user for database storage + * return { + * name: this.name + * email: this.email + * }; + * } + * } + * db.types.bind('users', User); // Automatically uses serialize and static create methods + */ + bind(path, type, options = {}) { + // Maps objects that are stored in a specific path to a constructor method, + // so they are automatically deserialized + if (typeof path !== 'string') { + throw new TypeError('path must be a string'); + } + if (typeof type !== 'function') { + throw new TypeError('constructor must be a function'); + } + if (typeof options.serializer === 'undefined') { + // if (typeof type.prototype.serialize === 'function') { + // // Use .serialize instance method + // options.serializer = type.prototype.serialize; + // } + // Use object's serialize method upon serialization (if available) + } + else if (typeof options.serializer === 'string') { + if (typeof type.prototype[options.serializer] === 'function') { + options.serializer = type.prototype[options.serializer]; + } + else { + throw new TypeError(`${type.name}.prototype.${options.serializer} is not a function, cannot use it as serializer`); + } + } + else if (typeof options.serializer !== 'function') { + throw new TypeError(`serializer for class ${type.name} must be a function, or the name of a prototype method`); + } + if (typeof options.creator === 'undefined') { + if (typeof type.create === 'function') { + // Use static .create as creator method + options.creator = type.create; + } + } + else if (typeof options.creator === 'string') { + if (typeof type[options.creator] === 'function') { + options.creator = type[options.creator]; + } + else { + throw new TypeError(`${type.name}.${options.creator} is not a function, cannot use it as creator`); + } + } + else if (typeof options.creator !== 'function') { + throw new TypeError(`creator for class ${type.name} must be a function, or the name of a static method`); + } + path = path.replace(/^\/|\/$/g, ''); // trim slashes + this[_mappings][path] = { + db: this.db, + type, + creator: options.creator, + serializer: options.serializer, + deserialize(snap) { + // run constructor method + let obj; + if (this.creator) { + obj = this.creator.call(this.type, snap); + } + else { + obj = new this.type(snap); + } + return obj; + }, + serialize(obj, ref) { + if (this.serializer) { + obj = this.serializer.call(obj, ref, obj); + } + else if (obj && typeof obj.serialize === 'function') { + obj = obj.serialize(ref, obj); + } + return obj; + }, + }; + } + /** + * @internal (for internal use) + * Serializes any child in given object that has a type mapping + * @param path | path to the object's location + * @param obj object to serialize + */ + serialize(path, obj) { + return process(this.db, this[_mappings], path, obj, 'serialize'); + } + /** + * @internal (for internal use) + * Deserialzes any child in given object that has a type mapping + * @param path path to the object's location + * @param obj object to deserialize + */ + deserialize(path, obj) { + return process(this.db, this[_mappings], path, obj, 'deserialize'); + } +} +exports.TypeMappings = TypeMappings; + +},{"./data-reference":8,"./data-snapshot":9,"./path-info":16,"./utils":26}],26:[function(require,module,exports){ +(function (Buffer){(function (){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.defer = exports.getChildValues = exports.getMutations = exports.compareValues = exports.ObjectDifferences = exports.valuesAreEqual = exports.cloneObject = exports.concatTypedArrays = exports.decodeString = exports.encodeString = exports.bytesToBigint = exports.bigintToBytes = exports.bytesToNumber = exports.numberToBytes = void 0; +const path_reference_1 = require("./path-reference"); +const process_1 = require("./process"); +const partial_array_1 = require("./partial-array"); +function numberToBytes(number) { + const bytes = new Uint8Array(8); + const view = new DataView(bytes.buffer); + view.setFloat64(0, number); + return new Array(...bytes); +} +exports.numberToBytes = numberToBytes; +function bytesToNumber(bytes) { + const length = Array.isArray(bytes) ? bytes.length : bytes.byteLength; + if (length !== 8) { + throw new TypeError('must be 8 bytes'); + } + const bin = new Uint8Array(bytes); + const view = new DataView(bin.buffer); + const nr = view.getFloat64(0); + return nr; +} +exports.bytesToNumber = bytesToNumber; +const big = { + zero: BigInt(0), + one: BigInt(1), + two: BigInt(2), + eight: BigInt(8), + ff: BigInt(0xff), +}; +function bigintToBytes(number) { + if (typeof number !== 'bigint') { + throw new Error('number must be a bigint'); + } + const bytes = []; + const negative = number < big.zero; + do { + const byte = Number(number & big.ff); // NOTE: bits are inverted on negative numbers + bytes.push(byte); + number = number >> big.eight; + } while (number !== (negative ? -big.one : big.zero)); + bytes.reverse(); // little-endian + if (negative ? bytes[0] < 128 : bytes[0] >= 128) { + bytes.unshift(negative ? 255 : 0); // extra sign byte needed + } + return bytes; +} +exports.bigintToBytes = bigintToBytes; +function bytesToBigint(bytes) { + const negative = bytes[0] >= 128; + let number = big.zero; + for (let b of bytes) { + if (negative) { + b = ~b & 0xff; + } // Invert the bits + number = (number << big.eight) + BigInt(b); + } + if (negative) { + number = -(number + big.one); + } + return number; +} +exports.bytesToBigint = bytesToBigint; +/** + * Converts a string to a utf-8 encoded Uint8Array + */ +function encodeString(str) { + if (typeof TextEncoder !== 'undefined') { + // Modern browsers, Node.js v11.0.0+ (or v8.3.0+ with util.TextEncoder) + const encoder = new TextEncoder(); + return encoder.encode(str); + } + else if (typeof Buffer === 'function') { + // Node.js + const buf = Buffer.from(str, 'utf-8'); + return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength); + } + else { + // Older browsers. Manually encode + const arr = []; + for (let i = 0; i < str.length; i++) { + let code = str.charCodeAt(i); + if (code > 128) { + // Attempt simple UTF-8 conversion. See https://en.wikipedia.org/wiki/UTF-8 + if ((code & 0xd800) === 0xd800) { + // code starts with 1101 10...: this is a 2-part utf-16 char code + const nextCode = str.charCodeAt(i + 1); + if ((nextCode & 0xdc00) !== 0xdc00) { + // next code must start with 1101 11... + throw new Error('follow-up utf-16 character does not start with 0xDC00'); + } + i++; + const p1 = code & 0x3ff; // Only use last 10 bits + const p2 = nextCode & 0x3ff; + // Create code point from these 2: (see https://en.wikipedia.org/wiki/UTF-16) + code = 0x10000 | (p1 << 10) | p2; + } + if (code < 2048) { + // Use 2 bytes for 11 bit value, first byte starts with 110xxxxx (0xc0), 2nd byte with 10xxxxxx (0x80) + const b1 = 0xc0 | ((code >> 6) & 0x1f); // 0xc0 = 11000000, 0x1f = 11111 + const b2 = 0x80 | (code & 0x3f); // 0x80 = 10000000, 0x3f = 111111 + arr.push(b1, b2); + } + else if (code < 65536) { + // Use 3 bytes for 16-bit value, bits per byte: 4, 6, 6 + const b1 = 0xe0 | ((code >> 12) & 0xf); // 0xe0 = 11100000, 0xf = 1111 + const b2 = 0x80 | ((code >> 6) & 0x3f); // 0x80 = 10000000, 0x3f = 111111 + const b3 = 0x80 | (code & 0x3f); + arr.push(b1, b2, b3); + } + else if (code < 2097152) { + // Use 4 bytes for 21-bit value, bits per byte: 3, 6, 6, 6 + const b1 = 0xf0 | ((code >> 18) & 0x7); // 0xf0 = 11110000, 0x7 = 111 + const b2 = 0x80 | ((code >> 12) & 0x3f); // 0x80 = 10000000, 0x3f = 111111 + const b3 = 0x80 | ((code >> 6) & 0x3f); // 0x80 = 10000000, 0x3f = 111111 + const b4 = 0x80 | (code & 0x3f); + arr.push(b1, b2, b3, b4); + } + else { + throw new Error(`Cannot convert character ${str.charAt(i)} (code ${code}) to utf-8`); + } + } + else { + arr.push(code < 128 ? code : 63); // 63 = ? + } + } + return new Uint8Array(arr); + } +} +exports.encodeString = encodeString; +/** + * Converts a utf-8 encoded buffer to string + */ +function decodeString(buffer) { + if (typeof TextDecoder !== 'undefined') { + // Modern browsers, Node.js v11.0.0+ (or v8.3.0+ with util.TextDecoder) + const decoder = new TextDecoder(); + if (buffer instanceof Uint8Array) { + return decoder.decode(buffer); + } + const buf = Uint8Array.from(buffer); + return decoder.decode(buf); + } + else if (typeof Buffer === 'function') { + // Node.js (v10 and below) + if (buffer instanceof Array) { + buffer = Uint8Array.from(buffer); // convert to typed array + } + if (!(buffer instanceof Buffer) && 'buffer' in buffer && buffer.buffer instanceof ArrayBuffer) { + const typedArray = buffer; + buffer = Buffer.from(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); // Convert typed array to node.js Buffer + } + if (!(buffer instanceof Buffer)) { + throw new Error('Unsupported buffer argument'); + } + return buffer.toString('utf-8'); + } + else { + // Older browsers. Manually decode! + if (!(buffer instanceof Uint8Array) && 'buffer' in buffer && buffer['buffer'] instanceof ArrayBuffer) { + // Convert TypedArray to Uint8Array + const typedArray = buffer; + buffer = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); + } + if (buffer instanceof Buffer || buffer instanceof Array || buffer instanceof Uint8Array) { + let str = ''; + for (let i = 0; i < buffer.length; i++) { + let code = buffer[i]; + if (code > 128) { + // Decode Unicode character + if ((code & 0xf0) === 0xf0) { + // 4 byte char + const b1 = code, b2 = buffer[i + 1], b3 = buffer[i + 2], b4 = buffer[i + 3]; + code = ((b1 & 0x7) << 18) | ((b2 & 0x3f) << 12) | ((b3 & 0x3f) << 6) | (b4 & 0x3f); + i += 3; + } + else if ((code & 0xe0) === 0xe0) { + // 3 byte char + const b1 = code, b2 = buffer[i + 1], b3 = buffer[i + 2]; + code = ((b1 & 0xf) << 12) | ((b2 & 0x3f) << 6) | (b3 & 0x3f); + i += 2; + } + else if ((code & 0xc0) === 0xc0) { + // 2 byte char + const b1 = code, b2 = buffer[i + 1]; + code = ((b1 & 0x1f) << 6) | (b2 & 0x3f); + i++; + } + else { + throw new Error('invalid utf-8 data'); + } + } + if (code >= 65536) { + // Split into 2-part utf-16 char codes + code ^= 0x10000; + const p1 = 0xd800 | (code >> 10); + const p2 = 0xdc00 | (code & 0x3ff); + str += String.fromCharCode(p1); + str += String.fromCharCode(p2); + } + else { + str += String.fromCharCode(code); + } + } + return str; + } + else { + throw new Error('Unsupported buffer argument'); + } + } +} +exports.decodeString = decodeString; +function concatTypedArrays(a, b) { + const c = new a.constructor(a.length + b.length); + c.set(a); + c.set(b, a.length); + return c; +} +exports.concatTypedArrays = concatTypedArrays; +function cloneObject(original, stack) { + var _a; + if (((_a = original === null || original === void 0 ? void 0 : original.constructor) === null || _a === void 0 ? void 0 : _a.name) === 'DataSnapshot') { + throw new TypeError(`Object to clone is a DataSnapshot (path "${original.ref.path}")`); + } + const checkAndFixTypedArray = (obj) => { + if (obj !== null && typeof obj === 'object' + && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' + && ['Buffer', 'Uint8Array', 'Int8Array', 'Uint16Array', 'Int16Array', 'Uint32Array', 'Int32Array', 'BigUint64Array', 'BigInt64Array'].includes(obj.constructor.name)) { + // FIX for typed array being converted to objects with numeric properties: + // Convert Buffer or TypedArray to ArrayBuffer + obj = obj.buffer.slice(obj.byteOffset, obj.byteOffset + obj.byteLength); + } + return obj; + }; + original = checkAndFixTypedArray(original); + if (typeof original !== 'object' || original === null || original instanceof Date || original instanceof ArrayBuffer || original instanceof path_reference_1.PathReference || original instanceof RegExp) { + return original; + } + const cloneValue = (val) => { + if (stack.indexOf(val) >= 0) { + throw new ReferenceError('object contains a circular reference'); + } + val = checkAndFixTypedArray(val); + if (val === null || val instanceof Date || val instanceof ArrayBuffer || val instanceof path_reference_1.PathReference || val instanceof RegExp) { // || val instanceof ID + return val; + } + else if (typeof val === 'object') { + stack.push(val); + val = cloneObject(val, stack); + stack.pop(); + return val; + } + else { + return val; // Anything other can just be copied + } + }; + if (typeof stack === 'undefined') { + stack = [original]; + } + const clone = original instanceof Array ? [] : original instanceof partial_array_1.PartialArray ? new partial_array_1.PartialArray() : {}; + Object.keys(original).forEach(key => { + const val = original[key]; + if (typeof val === 'function') { + return; // skip functions + } + clone[key] = cloneValue(val); + }); + return clone; +} +exports.cloneObject = cloneObject; +const isTypedArray = (val) => typeof val === 'object' && ['ArrayBuffer', 'Buffer', 'Uint8Array', 'Uint16Array', 'Uint32Array', 'Int8Array', 'Int16Array', 'Int32Array'].includes(val.constructor.name); +// CONSIDER: updating isTypedArray to: const isTypedArray = val => typeof val === 'object' && 'buffer' in val && 'byteOffset' in val && 'byteLength' in val; +function valuesAreEqual(val1, val2) { + if (val1 === val2) { + return true; + } + if (typeof val1 !== typeof val2) { + return false; + } + if (typeof val1 === 'object' || typeof val2 === 'object') { + if (val1 === null || val2 === null) { + return false; + } + if (val1 instanceof path_reference_1.PathReference || val2 instanceof path_reference_1.PathReference) { + return val1 instanceof path_reference_1.PathReference && val2 instanceof path_reference_1.PathReference && val1.path === val2.path; + } + if (val1 instanceof Date || val2 instanceof Date) { + return val1 instanceof Date && val2 instanceof Date && val1.getTime() === val2.getTime(); + } + if (val1 instanceof Array || val2 instanceof Array) { + return val1 instanceof Array && val2 instanceof Array && val1.length === val2.length && val1.every((item, i) => valuesAreEqual(val1[i], val2[i])); + } + if (isTypedArray(val1) || isTypedArray(val2)) { + if (!isTypedArray(val1) || !isTypedArray(val2) || val1.byteLength === val2.byteLength) { + return false; + } + const typed1 = val1 instanceof ArrayBuffer ? new Uint8Array(val1) : new Uint8Array(val1.buffer, val1.byteOffset, val1.byteLength), typed2 = val2 instanceof ArrayBuffer ? new Uint8Array(val2) : new Uint8Array(val2.buffer, val2.byteOffset, val2.byteLength); + return typed1.every((val, i) => typed2[i] === val); + } + const keys1 = Object.keys(val1), keys2 = Object.keys(val2); + return keys1.length === keys2.length && keys1.every(key => keys2.includes(key)) && keys1.every(key => valuesAreEqual(val1[key], val2[key])); + } + return false; +} +exports.valuesAreEqual = valuesAreEqual; +class ObjectDifferences { + constructor(added, removed, changed) { + this.added = added; + this.removed = removed; + this.changed = changed; + } + forChild(key) { + if (this.added.includes(key)) { + return 'added'; + } + if (this.removed.includes(key)) { + return 'removed'; + } + const changed = this.changed.find(ch => ch.key === key); + return changed ? changed.change : 'identical'; + } +} +exports.ObjectDifferences = ObjectDifferences; +function compareValues(oldVal, newVal, sortedResults = false) { + const voids = [undefined, null]; + if (oldVal === newVal) { + return 'identical'; + } + else if (voids.indexOf(oldVal) >= 0 && voids.indexOf(newVal) < 0) { + return 'added'; + } + else if (voids.indexOf(oldVal) < 0 && voids.indexOf(newVal) >= 0) { + return 'removed'; + } + else if (typeof oldVal !== typeof newVal) { + return 'changed'; + } + else if (isTypedArray(oldVal) || isTypedArray(newVal)) { + // One or both values are typed arrays. + if (!isTypedArray(oldVal) || !isTypedArray(newVal)) { + return 'changed'; + } + // Both are typed. Compare lengths and byte content of typed arrays + const typed1 = oldVal instanceof Uint8Array ? oldVal : oldVal instanceof ArrayBuffer ? new Uint8Array(oldVal) : new Uint8Array(oldVal.buffer, oldVal.byteOffset, oldVal.byteLength); + const typed2 = newVal instanceof Uint8Array ? newVal : newVal instanceof ArrayBuffer ? new Uint8Array(newVal) : new Uint8Array(newVal.buffer, newVal.byteOffset, newVal.byteLength); + return typed1.byteLength === typed2.byteLength && typed1.every((val, i) => typed2[i] === val) ? 'identical' : 'changed'; + } + else if (oldVal instanceof Date || newVal instanceof Date) { + return oldVal instanceof Date && newVal instanceof Date && oldVal.getTime() === newVal.getTime() ? 'identical' : 'changed'; + } + else if (oldVal instanceof path_reference_1.PathReference || newVal instanceof path_reference_1.PathReference) { + return oldVal instanceof path_reference_1.PathReference && newVal instanceof path_reference_1.PathReference && oldVal.path === newVal.path ? 'identical' : 'changed'; + } + else if (typeof oldVal === 'object') { + // Do key-by-key comparison of objects + const isArray = oldVal instanceof Array; + const getKeys = (obj) => { + let keys = Object.keys(obj).filter(key => !voids.includes(obj[key])); + if (isArray) { + keys = keys.map((v) => parseInt(v)); + } + return keys; + }; + const oldKeys = getKeys(oldVal); + const newKeys = getKeys(newVal); + const removedKeys = oldKeys.filter(key => !newKeys.includes(key)); + const addedKeys = newKeys.filter(key => !oldKeys.includes(key)); + const changedKeys = newKeys.reduce((changed, key) => { + if (oldKeys.includes(key)) { + const val1 = oldVal[key]; + const val2 = newVal[key]; + const c = compareValues(val1, val2); + if (c !== 'identical') { + changed.push({ key, change: c }); + } + } + return changed; + }, []); + if (addedKeys.length === 0 && removedKeys.length === 0 && changedKeys.length === 0) { + return 'identical'; + } + else { + return new ObjectDifferences(addedKeys, removedKeys, sortedResults ? changedKeys.sort((a, b) => a.key < b.key ? -1 : 1) : changedKeys); + } + } + return 'changed'; +} +exports.compareValues = compareValues; +function getMutations(oldVal, newVal, sortedResults = false) { + const process = (target, compareResult, prev, val) => { + switch (compareResult) { + case 'identical': return []; + case 'changed': return [{ target, prev, val }]; + case 'added': return [{ target, prev: null, val }]; + case 'removed': return [{ target, prev, val: null }]; + default: { + let changes = []; + compareResult.added.forEach(key => changes.push({ target: target.concat(key), prev: null, val: val[key] })); + compareResult.removed.forEach(key => changes.push({ target: target.concat(key), prev: prev[key], val: null })); + compareResult.changed.forEach(item => { + const childChanges = process(target.concat(item.key), item.change, prev[item.key], val[item.key]); + changes = changes.concat(childChanges); + }); + return changes; + } + } + }; + const compareResult = compareValues(oldVal, newVal, sortedResults); + return process([], compareResult, oldVal, newVal); +} +exports.getMutations = getMutations; +function getChildValues(childKey, oldValue, newValue) { + oldValue = oldValue === null ? null : oldValue[childKey]; + if (typeof oldValue === 'undefined') { + oldValue = null; + } + newValue = newValue === null ? null : newValue[childKey]; + if (typeof newValue === 'undefined') { + newValue = null; + } + return { oldValue, newValue }; +} +exports.getChildValues = getChildValues; +function defer(fn) { + process_1.default.nextTick(fn); +} +exports.defer = defer; + +}).call(this)}).call(this,require("buffer").Buffer) +},{"./partial-array":15,"./path-reference":17,"./process":18,"buffer":53}],27:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); exports.BrowserAceBase = void 0; const acebase_local_1 = require("./acebase-local"); const indexed_db_1 = require("./storage/custom/indexed-db"); @@ -45,7 +5404,7 @@ class BrowserAceBase extends acebase_local_1.AceBase { } exports.BrowserAceBase = BrowserAceBase; -},{"./acebase-local":2,"./storage/custom/indexed-db":19}],2:[function(require,module,exports){ +},{"./acebase-local":28,"./storage/custom/indexed-db":45}],28:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AceBase = exports.AceBaseLocalSettings = exports.IndexedDBStorageSettings = exports.LocalStorageSettings = void 0; @@ -131,7 +5490,7 @@ class AceBase extends acebase_core_1.AceBaseBase { } exports.AceBase = AceBase; -},{"./api-local":3,"./storage/binary":13,"./storage/custom/indexed-db/settings":20,"./storage/custom/local-storage":22,"acebase-core":38}],3:[function(require,module,exports){ +},{"./api-local":29,"./storage/binary":39,"./storage/custom/indexed-db/settings":46,"./storage/custom/local-storage":48,"acebase-core":12}],29:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LocalApi = void 0; @@ -298,7 +5657,7 @@ class LocalApi extends acebase_core_1.Api { if (['null', 'undefined'].includes(from)) { from = null; } - const children = []; + const children = []; // Array<{ key: string | number; type: string; value: any; address?: any }>; let n = 0, stop = false, more = false; //stop = skip + limit, await this.storage.getChildren(path) .next(childInfo => { @@ -329,7 +5688,8 @@ class LocalApi extends acebase_core_1.Api { }; switch (type) { case 'children': { - return getChildren(path, args.limit, args.skip, args.from); + const result = await getChildren(path, args.limit, args.skip, args.from); + return result; } case 'info': { const info = { @@ -427,7 +5787,7 @@ class LocalApi extends acebase_core_1.Api { } exports.LocalApi = LocalApi; -},{"./node-value-types":12,"./query":15,"./storage/binary":13,"./storage/custom":18,"./storage/mssql":13,"./storage/sqlite":13,"acebase-core":38}],4:[function(require,module,exports){ +},{"./node-value-types":38,"./query":41,"./storage/binary":39,"./storage/custom":44,"./storage/mssql":39,"./storage/sqlite":39,"acebase-core":12}],30:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AsyncTaskBatch = void 0; @@ -507,7 +5867,7 @@ class AsyncTaskBatch { } exports.AsyncTaskBatch = AsyncTaskBatch; -},{}],5:[function(require,module,exports){ +},{}],31:[function(require,module,exports){ "use strict"; /** ________________________________________________________________________________ @@ -587,7 +5947,7 @@ var storage_1 = require("./storage"); Object.defineProperty(exports, "StorageSettings", { enumerable: true, get: function () { return storage_1.StorageSettings; } }); Object.defineProperty(exports, "SchemaValidationError", { enumerable: true, get: function () { return storage_1.SchemaValidationError; } }); -},{"./acebase-browser":1,"./acebase-local":2,"./storage":25,"./storage/binary":13,"./storage/custom":18,"./storage/mssql":13,"./storage/sqlite":13,"acebase-core":38}],6:[function(require,module,exports){ +},{"./acebase-browser":27,"./acebase-local":28,"./storage":51,"./storage/binary":39,"./storage/custom":44,"./storage/mssql":39,"./storage/sqlite":39,"acebase-core":12}],32:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IPCPeer = void 0; @@ -723,7 +6083,7 @@ class IPCPeer extends ipc_1.AceBaseIPCPeer { } exports.IPCPeer = IPCPeer; -},{"./ipc":7,"acebase-core":38}],7:[function(require,module,exports){ +},{"./ipc":33,"acebase-core":12}],33:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AceBaseIPCPeer = exports.AceBaseIPCPeerExitingError = void 0; @@ -1222,7 +6582,7 @@ class AceBaseIPCPeer extends acebase_core_1.SimpleEventEmitter { } exports.AceBaseIPCPeer = AceBaseIPCPeer; -},{"../node-lock":11,"acebase-core":38}],8:[function(require,module,exports){ +},{"../node-lock":37,"acebase-core":12}],34:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RemovedNodeAddress = exports.NodeAddress = void 0; @@ -1257,7 +6617,7 @@ class RemovedNodeAddress extends NodeAddress { } exports.RemovedNodeAddress = RemovedNodeAddress; -},{}],9:[function(require,module,exports){ +},{}],35:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NodeRevisionError = exports.NodeNotFoundError = void 0; @@ -1268,7 +6628,7 @@ class NodeRevisionError extends Error { } exports.NodeRevisionError = NodeRevisionError; -},{}],10:[function(require,module,exports){ +},{}],36:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NodeInfo = void 0; @@ -1317,7 +6677,7 @@ class NodeInfo { } exports.NodeInfo = NodeInfo; -},{"./node-value-types":12,"acebase-core":38}],11:[function(require,module,exports){ +},{"./node-value-types":38,"acebase-core":12}],37:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NodeLock = exports.NodeLocker = exports.LOCK_STATE = void 0; @@ -1601,7 +6961,7 @@ class NodeLock { } exports.NodeLock = NodeLock; -},{"acebase-core":38}],12:[function(require,module,exports){ +},{"acebase-core":12}],38:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getValueType = exports.getNodeValueType = exports.getValueTypeName = exports.VALUE_TYPES = void 0; @@ -1693,10 +7053,10 @@ function getValueType(value) { } exports.getValueType = getValueType; -},{"acebase-core":38}],13:[function(require,module,exports){ +},{"acebase-core":12}],39:[function(require,module,exports){ // Not supported in current environment -},{}],14:[function(require,module,exports){ +},{}],40:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.pfs = void 0; @@ -1706,7 +7066,7 @@ class pfs { } exports.pfs = pfs; -},{}],15:[function(require,module,exports){ +},{}],41:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.query = void 0; @@ -2436,7 +7796,7 @@ function query(api, path, query, options = { snapshots: false, include: undefine } exports.query = query; -},{"./async-task-batch":4,"./data-index":13,"./node-errors":9,"./node-value-types":12,"acebase-core":38}],16:[function(require,module,exports){ +},{"./async-task-batch":30,"./data-index":39,"./node-errors":35,"./node-value-types":38,"acebase-core":12}],42:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createIndex = void 0; @@ -2513,7 +7873,7 @@ async function createIndex(context, path, key, options) { } exports.createIndex = createIndex; -},{"../data-index":13,"../promise-fs":14,"acebase-core":38}],17:[function(require,module,exports){ +},{"../data-index":39,"../promise-fs":40,"acebase-core":12}],43:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CustomStorageHelpers = void 0; @@ -2582,7 +7942,7 @@ class CustomStorageHelpers { } exports.CustomStorageHelpers = CustomStorageHelpers; -},{"acebase-core":38}],18:[function(require,module,exports){ +},{"acebase-core":12}],44:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CustomStorage = exports.CustomStorageNodeInfo = exports.CustomStorageNodeAddress = exports.CustomStorageSettings = exports.CustomStorageTransaction = exports.ICustomStorageNode = exports.ICustomStorageNodeMetaData = exports.CustomStorageHelpers = void 0; @@ -3796,7 +9156,7 @@ class CustomStorage extends index_1.Storage { } exports.CustomStorage = CustomStorage; -},{"../../node-address":8,"../../node-errors":9,"../../node-info":10,"../../node-lock":11,"../../node-value-types":12,"../index":25,"./helpers":17,"acebase-core":38}],19:[function(require,module,exports){ +},{"../../node-address":34,"../../node-errors":35,"../../node-info":36,"../../node-lock":37,"../../node-value-types":38,"../index":51,"./helpers":43,"acebase-core":12}],45:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createIndexedDBInstance = void 0; @@ -3874,7 +9234,7 @@ function createIndexedDBInstance(dbname, init = {}) { } exports.createIndexedDBInstance = createIndexedDBInstance; -},{"..":18,"../../..":5,"./settings":20,"./transaction":21,"acebase-core":38}],20:[function(require,module,exports){ +},{"..":44,"../../..":31,"./settings":46,"./transaction":47,"acebase-core":12}],46:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IndexedDBStorageSettings = void 0; @@ -3918,7 +9278,7 @@ class IndexedDBStorageSettings extends __1.StorageSettings { } exports.IndexedDBStorageSettings = IndexedDBStorageSettings; -},{"../..":25}],21:[function(require,module,exports){ +},{"../..":51}],47:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IndexedDBStorageTransaction = void 0; @@ -4145,7 +9505,7 @@ class IndexedDBStorageTransaction extends __1.CustomStorageTransaction { } exports.IndexedDBStorageTransaction = IndexedDBStorageTransaction; -},{"..":18}],22:[function(require,module,exports){ +},{"..":44}],48:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createLocalStorageInstance = exports.LocalStorageTransaction = exports.LocalStorageSettings = void 0; @@ -4186,7 +9546,7 @@ function createLocalStorageInstance(dbname, init = {}) { } exports.createLocalStorageInstance = createLocalStorageInstance; -},{"..":18,"../../..":5,"./settings":23,"./transaction":24}],23:[function(require,module,exports){ +},{"..":44,"../../..":31,"./settings":49,"./transaction":50}],49:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LocalStorageSettings = void 0; @@ -4228,7 +9588,7 @@ class LocalStorageSettings extends __1.StorageSettings { } exports.LocalStorageSettings = LocalStorageSettings; -},{"../..":25}],24:[function(require,module,exports){ +},{"../..":51}],50:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LocalStorageTransaction = void 0; @@ -4322,7 +9682,7 @@ class LocalStorageTransaction extends __1.CustomStorageTransaction { } exports.LocalStorageTransaction = LocalStorageTransaction; -},{"..":18}],25:[function(require,module,exports){ +},{"..":44}],51:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Storage = exports.StorageSettings = exports.SchemaValidationError = void 0; @@ -6393,5368 +11753,14 @@ class Storage extends acebase_core_1.SimpleEventEmitter { } exports.Storage = Storage; -},{"../data-index":13,"../ipc":6,"../node-errors":9,"../node-info":10,"../node-value-types":12,"../promise-fs":14,"./indexes":26,"acebase-core":38}],26:[function(require,module,exports){ +},{"../data-index":39,"../ipc":32,"../node-errors":35,"../node-info":36,"../node-value-types":38,"../promise-fs":40,"./indexes":52,"acebase-core":12}],52:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createIndex = void 0; var create_index_1 = require("./create-index"); Object.defineProperty(exports, "createIndex", { enumerable: true, get: function () { return create_index_1.createIndex; } }); -},{"./create-index":16}],27:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AceBaseBase = exports.AceBaseBaseSettings = void 0; -/** - ________________________________________________________________________________ +},{"./create-index":42}],53:[function(require,module,exports){ - ___ ______ - / _ \ | ___ \ - / /_\ \ ___ ___| |_/ / __ _ ___ ___ - | _ |/ __/ _ \ ___ \/ _` / __|/ _ \ - | | | | (_| __/ |_/ / (_| \__ \ __/ - \_| |_/\___\___\____/ \__,_|___/\___| - realtime database - - Copyright 2018-2022 by Ewout Stortenbeker (me@appy.one) - Published under MIT license - - See docs at https://github.com/appy-one/acebase - ________________________________________________________________________________ - -*/ -const simple_event_emitter_1 = require("./simple-event-emitter"); -const data_reference_1 = require("./data-reference"); -const type_mappings_1 = require("./type-mappings"); -const optional_observable_1 = require("./optional-observable"); -const debug_1 = require("./debug"); -const simple_colors_1 = require("./simple-colors"); -class AceBaseBaseSettings { - constructor(options) { - /** - * What level to use for console logging. - * @default 'log' - */ - this.logLevel = 'log'; - /** - * Whether to use colors in the console logs output - * @default true - */ - this.logColors = true; - /** - * @internal (for internal use) - */ - this.info = 'realtime database'; - /** - * You can turn this on if you are a sponsor. See https://github.com/appy-one/acebase/discussions/100 for more info - */ - this.sponsor = false; - if (typeof options !== 'object') { - options = {}; - } - if (typeof options.logLevel === 'string') { - this.logLevel = options.logLevel; - } - if (typeof options.logColors === 'boolean') { - this.logColors = options.logColors; - } - if (typeof options.info === 'string') { - this.info = options.info; - } - if (typeof options.sponsor === 'boolean') { - this.sponsor = options.sponsor; - } - } -} -exports.AceBaseBaseSettings = AceBaseBaseSettings; -class AceBaseBase extends simple_event_emitter_1.SimpleEventEmitter { - /** - * @param dbname Name of the database to open or create - */ - constructor(dbname, options = {}) { - super(); - this._ready = false; - options = new AceBaseBaseSettings(options); - this.name = dbname; - // Setup console logging - this.debug = new debug_1.DebugLogger(options.logLevel, `[${dbname}]`); - // Enable/disable logging with colors - (0, simple_colors_1.SetColorsEnabled)(options.logColors); - // ASCI art: http://patorjk.com/software/taag/#p=display&f=Doom&t=AceBase - const logoStyle = [simple_colors_1.ColorStyle.magenta, simple_colors_1.ColorStyle.bold]; - const logo = ' ___ ______ ' + '\n' + - ' / _ \\ | ___ \\ ' + '\n' + - ' / /_\\ \\ ___ ___| |_/ / __ _ ___ ___ ' + '\n' + - ' | _ |/ __/ _ \\ ___ \\/ _` / __|/ _ \\' + '\n' + - ' | | | | (_| __/ |_/ / (_| \\__ \\ __/' + '\n' + - ' \\_| |_/\\___\\___\\____/ \\__,_|___/\\___|'; - const info = (options.info ? ''.padStart(40 - options.info.length, ' ') + options.info + '\n' : ''); - if (!options.sponsor) { - // if you are a sponsor, you can switch off the "AceBase banner ad" - this.debug.write(logo.colorize(logoStyle)); - info && this.debug.write(info.colorize(simple_colors_1.ColorStyle.magenta)); - } - // Setup type mapping functionality - this.types = new type_mappings_1.TypeMappings(this); - this.once('ready', () => { - // console.log(`database "${dbname}" (${this.constructor.name}) is ready to use`); - this._ready = true; - }); - } - /** - * Waits for the database to be ready before running your callback. - * @param callback (optional) callback function that is called when the database is ready to be used. You can also use the returned promise. - * @returns returns a promise that resolves when ready - */ - async ready(callback) { - if (!this._ready) { - // Wait for ready event - await new Promise(resolve => this.on('ready', resolve)); - } - callback === null || callback === void 0 ? void 0 : callback(); - } - get isReady() { - return this._ready; - } - /** - * Allow specific observable implementation to be used - * @param ObservableImpl Implementation to use - */ - setObservable(ObservableImpl) { - (0, optional_observable_1.setObservable)(ObservableImpl); - } - /** - * Creates a reference to a node - * @param path - * @returns reference to the requested node - */ - ref(path) { - return new data_reference_1.DataReference(this, path); - } - /** - * Get a reference to the root database node - * @returns reference to root node - */ - get root() { - return this.ref(''); - } - /** - * Creates a query on the requested node - * @param path - * @returns query for the requested node - */ - query(path) { - const ref = new data_reference_1.DataReference(this, path); - return new data_reference_1.DataReferenceQuery(ref); - } - get indexes() { - return { - /** - * Gets all indexes - */ - get: () => { - return this.api.getIndexes(); - }, - /** - * Creates an index on "key" for all child nodes at "path". If the index already exists, nothing happens. - * Example: creating an index on all "name" keys of child objects of path "system/users", - * will index "system/users/user1/name", "system/users/user2/name" etc. - * You can also use wildcard paths to enable indexing and quering of fragmented data. - * Example: path "users/*\/posts", key "title": will index all "title" keys in all posts of all users. - * @param path path to the container node - * @param key name of the key to index every container child node - * @param options any additional options - */ - create: (path, key, options) => { - return this.api.createIndex(path, key, options); - }, - /** - * Deletes an existing index from the database - */ - delete: async (filePath) => { - return this.api.deleteIndex(filePath); - }, - }; - } - get schema() { - return { - get: (path) => { - return this.api.getSchema(path); - }, - set: (path, schema) => { - return this.api.setSchema(path, schema); - }, - all: () => { - return this.api.getSchemas(); - }, - check: (path, value, isUpdate) => { - return this.api.validateSchema(path, value, isUpdate); - }, - }; - } -} -exports.AceBaseBase = AceBaseBase; - -},{"./data-reference":34,"./debug":36,"./optional-observable":40,"./simple-colors":47,"./simple-event-emitter":48,"./type-mappings":51}],28:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Api = void 0; -class NotImplementedError extends Error { - constructor(name) { super(`${name} is not implemented`); } -} -/** - * Refactor to type/interface once acebase and acebase-client have been ported to TS - */ -class Api { - // eslint-disable-next-line @typescript-eslint/no-empty-function - constructor() { } - /** - * Provides statistics - * @param options - */ - stats(options) { throw new NotImplementedError('stats'); } - /** - * @param path - * @param event event to subscribe to ("value", "child_added" etc) - * @param callback callback function - */ - subscribe(path, event, callback, settings) { throw new NotImplementedError('subscribe'); } - unsubscribe(path, event, callback) { throw new NotImplementedError('unsubscribe'); } - update(path, updates, options) { throw new NotImplementedError('update'); } - set(path, value, options) { throw new NotImplementedError('set'); } - get(path, options) { throw new NotImplementedError('get'); } - transaction(path, callback, options) { throw new NotImplementedError('transaction'); } - exists(path) { throw new NotImplementedError('exists'); } - query(path, query, options) { throw new NotImplementedError('query'); } - reflect(path, type, args) { throw new NotImplementedError('reflect'); } - export(path, write, options) { throw new NotImplementedError('export'); } - import(path, read, options) { throw new NotImplementedError('import'); } - /** Creates an index on key for all child nodes at path */ - createIndex(path, key, options) { throw new NotImplementedError('createIndex'); } - getIndexes() { throw new NotImplementedError('getIndexes'); } - deleteIndex(filePath) { throw new NotImplementedError('deleteIndex'); } - setSchema(path, schema) { throw new NotImplementedError('setSchema'); } - getSchema(path) { throw new NotImplementedError('getSchema'); } - getSchemas() { throw new NotImplementedError('getSchemas'); } - validateSchema(path, value, isUpdate) { throw new NotImplementedError('validateSchema'); } - getMutations(filter) { throw new NotImplementedError('getMutations'); } - getChanges(filter) { throw new NotImplementedError('getChanges'); } -} -exports.Api = Api; - -},{}],29:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ascii85 = void 0; -function c(input, length, result) { - const b = [0, 0, 0, 0, 0]; - for (let i = 0; i < length; i += 4) { - let n = ((input[i] * 256 + input[i + 1]) * 256 + input[i + 2]) * 256 + input[i + 3]; - if (!n) { - result.push('z'); - } - else { - for (let j = 0; j < 5; b[j++] = n % 85 + 33, n = Math.floor(n / 85)) - ; - result.push(String.fromCharCode(b[4], b[3], b[2], b[1], b[0])); - } - } -} -function encode(arr) { - // summary: encodes input data in ascii85 string - // input: ArrayLike - const input = arr, result = [], remainder = input.length % 4, length = input.length - remainder; - c(input, length, result); - if (remainder) { - const t = new Uint8Array(4); - t.set(input.slice(length), 0); - c(t, 4, result); - let x = result.pop(); - if (x == 'z') { - x = '!!!!!'; - } - result.push(x.substr(0, remainder + 1)); - } - let ret = result.join(''); // String - ret = '<~' + ret + '~>'; - return ret; -} -exports.ascii85 = { - encode: function (arr) { - if (arr instanceof ArrayBuffer) { - arr = new Uint8Array(arr, 0, arr.byteLength); - } - return encode(arr); - }, - decode: function (input) { - // summary: decodes the input string back to an ArrayBuffer - // input: String: the input string to decode - if (!input.startsWith('<~') || !input.endsWith('~>')) { - throw new Error('Invalid input string'); - } - input = input.substr(2, input.length - 4); - const n = input.length, r = [], b = [0, 0, 0, 0, 0]; - let t, x, y, d; - for (let i = 0; i < n; ++i) { - if (input.charAt(i) == 'z') { - r.push(0, 0, 0, 0); - continue; - } - for (let j = 0; j < 5; ++j) { - b[j] = input.charCodeAt(i + j) - 33; - } - d = n - i; - if (d < 5) { - for (let j = d; j < 4; b[++j] = 0) - ; - b[d] = 85; - } - t = (((b[0] * 85 + b[1]) * 85 + b[2]) * 85 + b[3]) * 85 + b[4]; - x = t & 255; - t >>>= 8; - y = t & 255; - t >>>= 8; - r.push(t >>> 8, t & 255, y, x); - for (let j = d; j < 5; ++j, r.pop()) - ; - i += 4; - } - const data = new Uint8Array(r); - return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength); - }, -}; - -},{}],30:[function(require,module,exports){ -"use strict"; -var _a, _b; -Object.defineProperty(exports, "__esModule", { value: true }); -const pad_1 = require("../pad"); -const env = typeof window === 'object' ? window : self, globalCount = Object.keys(env).length, mimeTypesLength = (_b = (_a = navigator.mimeTypes) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0, clientId = (0, pad_1.default)((mimeTypesLength - + navigator.userAgent.length).toString(36) - + globalCount.toString(36), 4); -function fingerprint() { - return clientId; -} -exports.default = fingerprint; - -},{"../pad":32}],31:[function(require,module,exports){ -"use strict"; -/** - * cuid.js - * Collision-resistant UID generator for browsers and node. - * Sequential for fast db lookups and recency sorting. - * Safe for element IDs and server-side lookups. - * - * Extracted from CLCTR - * - * Copyright (c) Eric Elliott 2012 - * MIT License - * - * time biasing added by Ewout Stortenbeker for AceBase - */ -Object.defineProperty(exports, "__esModule", { value: true }); -const fingerprint_1 = require("./fingerprint"); -const pad_1 = require("./pad"); -let c = 0; -const blockSize = 4, base = 36, discreteValues = Math.pow(base, blockSize); -function randomBlock() { - return (0, pad_1.default)((Math.random() * discreteValues << 0).toString(base), blockSize); -} -function safeCounter() { - c = c < discreteValues ? c : 0; - c++; // this is not subliminal - return c - 1; -} -function cuid(timebias = 0) { - // Starting with a lowercase letter makes - // it HTML element ID friendly. - const letter = 'c', // hard-coded allows for sequential access - // timestamp - // warning: this exposes the exact date and time - // that the uid was created. - // NOTES Ewout: - // - added timebias - // - at '2059/05/25 19:38:27.456', timestamp will become 1 character larger! - timestamp = (new Date().getTime() + timebias).toString(base), - // Prevent same-machine collisions. - counter = (0, pad_1.default)(safeCounter().toString(base), blockSize), - // A few chars to generate distinct ids for different - // clients (so different computers are far less - // likely to generate the same id) - print = (0, fingerprint_1.default)(), - // Grab some more chars from Math.random() - random = randomBlock() + randomBlock(); - return letter + timestamp + counter + print + random; -} -exports.default = cuid; -// Not using slugs, removed code - -},{"./fingerprint":30,"./pad":32}],32:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function pad(num, size) { - const s = '000000000' + num; - return s.substr(s.length - size); -} -exports.default = pad; - -},{}],33:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OrderedCollectionProxy = exports.proxyAccess = exports.LiveDataProxy = void 0; -const utils_1 = require("./utils"); -const data_reference_1 = require("./data-reference"); -const data_snapshot_1 = require("./data-snapshot"); -const path_reference_1 = require("./path-reference"); -const id_1 = require("./id"); -const optional_observable_1 = require("./optional-observable"); -const process_1 = require("./process"); -const path_info_1 = require("./path-info"); -const simple_event_emitter_1 = require("./simple-event-emitter"); -class RelativeNodeTarget extends Array { - static areEqual(t1, t2) { - return t1.length === t2.length && t1.every((key, i) => t2[i] === key); - } - static isAncestor(ancestor, other) { - return ancestor.length < other.length && ancestor.every((key, i) => other[i] === key); - } - static isDescendant(descendant, other) { - return descendant.length > other.length && other.every((key, i) => descendant[i] === key); - } -} -const isProxy = Symbol('isProxy'); -class LiveDataProxy { - /** - * Creates a live data proxy for the given reference. The data of the reference's path will be loaded, and kept in-sync - * with live data by listening for 'mutations' events. Any changes made to the value by the client will be synced back - * to the database. - * @param ref DataReference to create proxy for. - * @param options proxy initialization options - * be written to the database. - */ - static async create(ref, options) { - var _a; - ref = new data_reference_1.DataReference(ref.db, ref.path); // Use copy to prevent context pollution on original reference - let cache, loaded = false; - let latestCursor = options === null || options === void 0 ? void 0 : options.cursor; - let proxy; - const proxyId = id_1.ID.generate(); //ref.push().key; - // let onMutationCallback: ProxyObserveMutationsCallback; - // let onErrorCallback: ProxyObserveErrorCallback = err => { - // console.error(err.message, err.details); - // }; - const clientSubscriptions = []; - const clientEventEmitter = new simple_event_emitter_1.SimpleEventEmitter(); - clientEventEmitter.on('cursor', (cursor) => latestCursor = cursor); - clientEventEmitter.on('error', (err) => { - console.error(err.message, err.details); - }); - const applyChange = (keys, newValue) => { - // Make changes to cache - if (keys.length === 0) { - cache = newValue; - return true; - } - const allowCreation = false; //cache === null; // If the proxy'd target did not exist upon load, we must allow it to be created now. - if (allowCreation) { - cache = typeof keys[0] === 'number' ? [] : {}; - } - let target = cache; - const trailKeys = keys.slice(); - while (trailKeys.length > 1) { - const key = trailKeys.shift(); - if (!(key in target)) { - if (allowCreation) { - target[key] = typeof key === 'number' ? [] : {}; - } - else { - // Have we missed an event, or are local pending mutations creating this conflict? - return false; // Do not proceed - } - } - target = target[key]; - } - const prop = trailKeys.shift(); - if (newValue === null) { - // Remove it - target instanceof Array ? target.splice(prop, 1) : delete target[prop]; - } - else { - // Set or update it - target[prop] = newValue; - } - return true; - }; - // Subscribe to mutations events on the target path - const syncFallback = async () => { - if (!loaded) { - return; - } - await reload(); - }; - const subscription = ref.on('mutations', { syncFallback }).subscribe(async (snap) => { - var _a; - if (!loaded) { - return; - } - const context = snap.context(); - const isRemote = ((_a = context.acebase_proxy) === null || _a === void 0 ? void 0 : _a.id) !== proxyId; - if (!isRemote) { - return; // Update was done through this proxy, no need to update cache or trigger local value subscriptions - } - const mutations = snap.val(false); - const proceed = mutations.every(mutation => { - if (!applyChange(mutation.target, mutation.val)) { - return false; - } - // if (onMutationCallback) { - const changeRef = mutation.target.reduce((ref, key) => ref.child(key), ref); - const changeSnap = new data_snapshot_1.DataSnapshot(changeRef, mutation.val, false, mutation.prev, snap.context()); - // onMutationCallback(changeSnap, isRemote); // onMutationCallback uses try/catch for client callback - clientEventEmitter.emit('mutation', { snapshot: changeSnap, isRemote }); - // } - return true; - }); - if (proceed) { - clientEventEmitter.emit('cursor', context.acebase_cursor); // // NOTE: cursor is only present in mutations done remotely. For our own updates, server cursors are returned by ref.set and ref.update - localMutationsEmitter.emit('mutations', { origin: 'remote', snap }); - } - else { - console.warn(`Cached value of live data proxy on "${ref.path}" appears outdated, will be reloaded`); - await reload(); - } - }); - // Setup updating functionality: enqueue all updates, process them at next tick in the order they were issued - let processPromise = Promise.resolve(); - const mutationQueue = []; - const transactions = []; - const pushLocalMutations = async () => { - // Sync all local mutations that are not in a transaction - const mutations = []; - for (let i = 0, m = mutationQueue[0]; i < mutationQueue.length; i++, m = mutationQueue[i]) { - if (!transactions.find(t => RelativeNodeTarget.areEqual(t.target, m.target) || RelativeNodeTarget.isAncestor(t.target, m.target))) { - mutationQueue.splice(i, 1); - i--; - mutations.push(m); - } - } - if (mutations.length === 0) { - return; - } - // Add current (new) values to mutations - mutations.forEach(mutation => { - mutation.value = (0, utils_1.cloneObject)(getTargetValue(cache, mutation.target)); - }); - // Run local onMutation & onChange callbacks in the next tick - process_1.default.nextTick(() => { - // Run onMutation callback for each changed node - const context = { acebase_proxy: { id: proxyId, source: 'update' } }; - // if (onMutationCallback) { - mutations.forEach(mutation => { - const mutationRef = mutation.target.reduce((ref, key) => ref.child(key), ref); - const mutationSnap = new data_snapshot_1.DataSnapshot(mutationRef, mutation.value, false, mutation.previous, context); - // onMutationCallback(mutationSnap, false); - clientEventEmitter.emit('mutation', { snapshot: mutationSnap, isRemote: false }); - }); - // } - // Notify local subscribers - const snap = new data_snapshot_1.MutationsDataSnapshot(ref, mutations.map(m => ({ target: m.target, val: m.value, prev: m.previous })), context); - localMutationsEmitter.emit('mutations', { origin: 'local', snap }); - }); - // Update database async - // const batchId = ID.generate(); - processPromise = mutations - .reduce((mutations, m, i, arr) => { - // Only keep top path mutations to prevent unneccessary child path updates - if (!arr.some(other => RelativeNodeTarget.isAncestor(other.target, m.target))) { - mutations.push(m); - } - return mutations; - }, []) - .reduce((updates, m) => { - // Prepare db updates - const target = m.target; - if (target.length === 0) { - // Overwrite this proxy's root value - updates.push({ ref, target, value: cache, type: 'set', previous: m.previous }); - } - else { - const parentTarget = target.slice(0, -1); - const key = target.slice(-1)[0]; - const parentRef = parentTarget.reduce((ref, key) => ref.child(key), ref); - const parentUpdate = updates.find(update => update.ref.path === parentRef.path); - const cacheValue = getTargetValue(cache, target); // m.value? - const prevValue = m.previous; - if (parentUpdate) { - parentUpdate.value[key] = cacheValue; - parentUpdate.previous[key] = prevValue; - } - else { - updates.push({ ref: parentRef, target: parentTarget, value: { [key]: cacheValue }, type: 'update', previous: { [key]: prevValue } }); - } - } - return updates; - }, []) - .reduce(async (promise, update /*, i, updates */) => { - // Execute db update - // i === 0 && console.log(`Proxy: processing ${updates.length} db updates to paths:`, updates.map(update => update.ref.path)); - const context = { - acebase_proxy: { - id: proxyId, - source: update.type, - // update_id: ID.generate(), - // batch_id: batchId, - // batch_updates: updates.length - }, - }; - await promise; - await update.ref - .context(context)[update.type](update.value) // .set or .update - .catch(err => { - clientEventEmitter.emit('error', { source: 'update', message: `Error processing update of "/${ref.path}"`, details: err }); - // console.warn(`Proxy could not update DB, should rollback (${update.type}) the proxy value of "${update.ref.path}" to: `, update.previous); - const context = { acebase_proxy: { id: proxyId, source: 'update-rollback' } }; - const mutations = []; - if (update.type === 'set') { - setTargetValue(cache, update.target, update.previous); - const mutationSnap = new data_snapshot_1.DataSnapshot(update.ref, update.previous, false, update.value, context); - clientEventEmitter.emit('mutation', { snapshot: mutationSnap, isRemote: false }); - mutations.push({ target: update.target, val: update.previous, prev: update.value }); - } - else { - // update - Object.keys(update.previous).forEach(key => { - setTargetValue(cache, update.target.concat(key), update.previous[key]); - const mutationSnap = new data_snapshot_1.DataSnapshot(update.ref.child(key), update.previous[key], false, update.value[key], context); - clientEventEmitter.emit('mutation', { snapshot: mutationSnap, isRemote: false }); - mutations.push({ target: update.target.concat(key), val: update.previous[key], prev: update.value[key] }); - }); - } - // Run onMutation callback for each node being rolled back - mutations.forEach(m => { - const mutationRef = m.target.reduce((ref, key) => ref.child(key), ref); - const mutationSnap = new data_snapshot_1.DataSnapshot(mutationRef, m.val, false, m.prev, context); - clientEventEmitter.emit('mutation', { snapshot: mutationSnap, isRemote: false }); - }); - // Notify local subscribers: - const snap = new data_snapshot_1.MutationsDataSnapshot(update.ref, mutations, context); - localMutationsEmitter.emit('mutations', { origin: 'local', snap }); - }); - if (update.ref.cursor) { - // Should also be available in context.acebase_cursor now - clientEventEmitter.emit('cursor', update.ref.cursor); - } - }, processPromise); - await processPromise; - }; - let syncInProgress = false; - const syncPromises = []; - const syncCompleted = () => { - let resolve; - const promise = new Promise(rs => resolve = rs); - syncPromises.push({ resolve }); - return promise; - }; - let processQueueTimeout = null; - const scheduleSync = () => { - if (!processQueueTimeout) { - processQueueTimeout = setTimeout(async () => { - syncInProgress = true; - processQueueTimeout = null; - await pushLocalMutations(); - syncInProgress = false; - syncPromises.splice(0).forEach(p => p.resolve()); - }, 0); - } - }; - const flagOverwritten = (target) => { - if (!mutationQueue.find(m => RelativeNodeTarget.areEqual(m.target, target))) { - mutationQueue.push({ target, previous: (0, utils_1.cloneObject)(getTargetValue(cache, target)) }); - } - // schedule database updates - scheduleSync(); - }; - const localMutationsEmitter = new simple_event_emitter_1.SimpleEventEmitter(); - const addOnChangeHandler = (target, callback) => { - const isObject = val => val !== null && typeof val === 'object'; - const mutationsHandler = async (details) => { - var _a; - const { snap, origin } = details; - const context = snap.context(); - const causedByOurProxy = ((_a = context.acebase_proxy) === null || _a === void 0 ? void 0 : _a.id) === proxyId; - if (details.origin === 'remote' && causedByOurProxy) { - // Any local changes already triggered subscription callbacks - console.error('DEV ISSUE: mutationsHandler was called from remote event originating from our own proxy'); - return; - } - const mutations = snap.val(false).filter(mutation => { - // Keep mutations impacting the subscribed target: mutations on target, or descendant or ancestor of target - return mutation.target.slice(0, target.length).every((key, i) => target[i] === key); - }); - if (mutations.length === 0) { - return; - } - let newValue, previousValue; - // If there is a mutation on the target itself, or parent/ancestor path, there can only be one. We can take a shortcut - const singleMutation = mutations.find(m => m.target.length <= target.length); - if (singleMutation) { - const trailKeys = target.slice(singleMutation.target.length); - newValue = trailKeys.reduce((val, key) => !isObject(val) || !(key in val) ? null : val[key], singleMutation.val); - previousValue = trailKeys.reduce((val, key) => !isObject(val) || !(key in val) ? null : val[key], singleMutation.prev); - } - else { - // All mutations are on children/descendants of our target - // Construct new & previous values by combining cache and snapshot - const currentValue = getTargetValue(cache, target); - newValue = (0, utils_1.cloneObject)(currentValue); - previousValue = (0, utils_1.cloneObject)(newValue); - mutations.forEach(mutation => { - // mutation.target is relative to proxy root - const trailKeys = mutation.target.slice(target.length); - for (let i = 0, val = newValue, prev = previousValue; i < trailKeys.length; i++) { // arr = PathInfo.getPathKeys(mutationPath).slice(PathInfo.getPathKeys(targetRef.path).length) - const last = i + 1 === trailKeys.length, key = trailKeys[i]; - if (last) { - val[key] = mutation.val; - if (val[key] === null) { - delete val[key]; - } - prev[key] = mutation.prev; - if (prev[key] === null) { - delete prev[key]; - } - } - else { - val = val[key] = key in val ? val[key] : {}; - prev = prev[key] = key in prev ? prev[key] : {}; - } - } - }); - } - process_1.default.nextTick(() => { - // Run callback with read-only (frozen) values in next tick - let keepSubscription = true; - try { - keepSubscription = false !== callback(Object.freeze(newValue), Object.freeze(previousValue), !causedByOurProxy, context); - } - catch (err) { - clientEventEmitter.emit('error', { source: origin === 'remote' ? 'remote_update' : 'local_update', message: 'Error running subscription callback', details: err }); - } - if (keepSubscription === false) { - stop(); - } - }); - }; - localMutationsEmitter.on('mutations', mutationsHandler); - const stop = () => { - localMutationsEmitter.off('mutations').off('mutations', mutationsHandler); - clientSubscriptions.splice(clientSubscriptions.findIndex(cs => cs.stop === stop), 1); - }; - clientSubscriptions.push({ target, stop }); - return { stop }; - }; - const handleFlag = (flag, target, args) => { - if (flag === 'write') { - return flagOverwritten(target); - } - else if (flag === 'onChange') { - return addOnChangeHandler(target, args.callback); - } - else if (flag === 'subscribe' || flag === 'observe') { - const subscribe = subscriber => { - const currentValue = getTargetValue(cache, target); - subscriber.next(currentValue); - const subscription = addOnChangeHandler(target, (value /*, previous, isRemote, context */) => { - subscriber.next(value); - }); - return function unsubscribe() { - subscription.stop(); - }; - }; - if (flag === 'subscribe') { - return subscribe; - } - // Try to load Observable - const Observable = (0, optional_observable_1.getObservable)(); - return new Observable(subscribe); - } - else if (flag === 'transaction') { - const hasConflictingTransaction = transactions.some(t => RelativeNodeTarget.areEqual(target, t.target) || RelativeNodeTarget.isAncestor(target, t.target) || RelativeNodeTarget.isDescendant(target, t.target)); - if (hasConflictingTransaction) { - // TODO: Wait for this transaction to finish, then try again - return Promise.reject(new Error('Cannot start transaction because it conflicts with another transaction')); - } - return new Promise(async (resolve) => { - // If there are pending mutations on target (or deeper), wait until they have been synchronized - const hasPendingMutations = mutationQueue.some(m => RelativeNodeTarget.areEqual(target, m.target) || RelativeNodeTarget.isAncestor(target, m.target)); - if (hasPendingMutations) { - if (!syncInProgress) { - scheduleSync(); - } - await syncCompleted(); - } - const tx = { target, status: 'started', transaction: null }; - transactions.push(tx); - tx.transaction = { - get status() { return tx.status; }, - get completed() { return tx.status !== 'started'; }, - get mutations() { - return mutationQueue.filter(m => RelativeNodeTarget.areEqual(tx.target, m.target) || RelativeNodeTarget.isAncestor(tx.target, m.target)); - }, - get hasMutations() { - return this.mutations.length > 0; - }, - async commit() { - if (this.completed) { - throw new Error(`Transaction has completed already (status '${tx.status}')`); - } - tx.status = 'finished'; - transactions.splice(transactions.indexOf(tx), 1); - if (syncInProgress) { - // Currently syncing without our mutations - await syncCompleted(); - } - scheduleSync(); - await syncCompleted(); - }, - rollback() { - // Remove mutations from queue - if (this.completed) { - throw new Error(`Transaction has completed already (status '${tx.status}')`); - } - tx.status = 'canceled'; - const mutations = []; - for (let i = 0; i < mutationQueue.length; i++) { - const m = mutationQueue[i]; - if (RelativeNodeTarget.areEqual(tx.target, m.target) || RelativeNodeTarget.isAncestor(tx.target, m.target)) { - mutationQueue.splice(i, 1); - i--; - mutations.push(m); - } - } - // Replay mutations in reverse order - mutations.reverse() - .forEach(m => { - if (m.target.length === 0) { - cache = m.previous; - } - else { - setTargetValue(cache, m.target, m.previous); - } - }); - // Remove transaction - transactions.splice(transactions.indexOf(tx), 1); - }, - }; - resolve(tx.transaction); - }); - } - }; - const snap = await ref.get({ cache_mode: 'allow', cache_cursor: options === null || options === void 0 ? void 0 : options.cursor }); - // const gotOfflineStartValue = snap.context().acebase_origin === 'cache'; - // if (gotOfflineStartValue) { - // console.warn(`Started data proxy with cached value of "${ref.path}", check if its value is reloaded on next connection!`); - // } - if (snap.context().acebase_origin !== 'cache') { - clientEventEmitter.emit('cursor', (_a = ref.cursor) !== null && _a !== void 0 ? _a : null); // latestCursor = snap.context().acebase_cursor ?? null; - } - loaded = true; - cache = snap.val(); - if (cache === null && typeof (options === null || options === void 0 ? void 0 : options.defaultValue) !== 'undefined') { - cache = options.defaultValue; - const context = { - acebase_proxy: { - id: proxyId, - source: 'default', - // update_id: ID.generate() - }, - }; - await ref.context(context).set(cache); - } - proxy = createProxy({ root: { ref, get cache() { return cache; } }, target: [], id: proxyId, flag: handleFlag }); - const assertProxyAvailable = () => { - if (proxy === null) { - throw new Error('Proxy was destroyed'); - } - }; - const reload = async () => { - // Manually reloads current value when cache is out of sync, which should only - // be able to happen if an AceBaseClient is used without cache database, - // and the connection to the server was lost for a while. In all other cases, - // there should be no need to call this method. - assertProxyAvailable(); - mutationQueue.splice(0); // Remove pending mutations. Will be empty in production, but might not be while debugging, leading to weird behaviour. - const snap = await ref.get({ allow_cache: false }); - const oldVal = cache, newVal = snap.val(); - cache = newVal; - // Compare old and new values - const mutations = (0, utils_1.getMutations)(oldVal, newVal); - if (mutations.length === 0) { - return; // Nothing changed - } - // Run onMutation callback for each changed node - const context = snap.context(); // context might contain acebase_cursor if server support that - context.acebase_proxy = { id: proxyId, source: 'reload' }; - // if (onMutationCallback) { - mutations.forEach(m => { - const targetRef = getTargetRef(ref, m.target); - const newSnap = new data_snapshot_1.DataSnapshot(targetRef, m.val, m.val === null, m.prev, context); - clientEventEmitter.emit('mutation', { snapshot: newSnap, isRemote: true }); - }); - // } - // Notify local subscribers - const mutationsSnap = new data_snapshot_1.MutationsDataSnapshot(ref, mutations, context); - localMutationsEmitter.emit('mutations', { origin: 'local', snap: mutationsSnap }); - }; - return { - async destroy() { - await processPromise; - const promises = [ - subscription.stop(), - ...clientSubscriptions.map(cs => cs.stop()), - ]; - await Promise.all(promises); - ['cursor', 'mutation', 'error'].forEach(event => clientEventEmitter.off(event)); - cache = null; // Remove cache - proxy = null; - }, - stop() { - this.destroy(); - }, - get value() { - assertProxyAvailable(); - return proxy; - }, - get hasValue() { - assertProxyAvailable(); - return cache !== null; - }, - set value(val) { - // Overwrite the value of the proxied path itself! - assertProxyAvailable(); - if (val !== null && typeof val === 'object' && val[isProxy]) { - // Assigning one proxied value to another - val = val.valueOf(); - } - flagOverwritten([]); - cache = val; - }, - get ref() { - return ref; - }, - get cursor() { - return latestCursor; - }, - reload, - onMutation(callback) { - // Fires callback each time anything changes - assertProxyAvailable(); - clientEventEmitter.off('mutation'); // Mimic legacy behaviour that overwrites handler - clientEventEmitter.on('mutation', ({ snapshot, isRemote }) => { - try { - callback(snapshot, isRemote); - } - catch (err) { - clientEventEmitter.emit('error', { source: 'mutation_callback', message: 'Error in dataproxy onMutation callback', details: err }); - } - }); - }, - onError(callback) { - // Fires callback each time anything goes wrong - assertProxyAvailable(); - clientEventEmitter.off('error'); // Mimic legacy behaviour that overwrites handler - clientEventEmitter.on('error', (err) => { - try { - callback(err); - } - catch (err) { - console.error(`Error in dataproxy onError callback: ${err.message}`); - } - }); - }, - on(event, callback) { - clientEventEmitter.on(event, callback); - }, - off(event, callback) { - clientEventEmitter.off(event, callback); - }, - }; - } -} -exports.LiveDataProxy = LiveDataProxy; -function getTargetValue(obj, target) { - let val = obj; - for (const key of target) { - val = typeof val === 'object' && val !== null && key in val ? val[key] : null; - } - return val; -} -function setTargetValue(obj, target, value) { - if (target.length === 0) { - throw new Error('Cannot update root target, caller must do that itself!'); - } - const targetObject = target.slice(0, -1).reduce((obj, key) => obj[key], obj); - const prop = target.slice(-1)[0]; - if (value === null || typeof value === 'undefined') { - // Remove it - targetObject instanceof Array ? targetObject.splice(prop, 1) : delete targetObject[prop]; - } - else { - // Set or update it - targetObject[prop] = value; - } -} -function getTargetRef(ref, target) { - // Create new DataReference to prevent context reuse - const path = path_info_1.PathInfo.get(ref.path).childPath(target); - return new data_reference_1.DataReference(ref.db, path); -} -function createProxy(context) { - const targetRef = getTargetRef(context.root.ref, context.target); - const childProxies = []; - const handler = { - get(target, prop, receiver) { - target = getTargetValue(context.root.cache, context.target); - if (typeof prop === 'symbol') { - if (prop.toString() === Symbol.iterator.toString()) { - // Use .values for @@iterator symbol - prop = 'values'; - } - else if (prop.toString() === isProxy.toString()) { - return true; - } - else { - return Reflect.get(target, prop, receiver); - } - } - if (prop === 'valueOf') { - return function valueOf() { return target; }; - } - if (target === null || typeof target !== 'object') { - throw new Error(`Cannot read property "${prop}" of ${target}. Value of path "/${targetRef.path}" is not an object (anymore)`); - } - if (target instanceof Array && typeof prop === 'string' && /^[0-9]+$/.test(prop)) { - // Proxy type definitions say prop can be a number, but this is never the case. - prop = parseInt(prop); - } - const value = target[prop]; - if (value === null) { - // Removed property. Should never happen, but if it does: - delete target[prop]; - return; // undefined - } - // Check if we have a child proxy for this property already. - // If so, and the properties' typeof value did not change, return that - const childProxy = childProxies.find(proxy => proxy.prop === prop); - if (childProxy) { - if (childProxy.typeof === typeof value) { - return childProxy.value; - } - childProxies.splice(childProxies.indexOf(childProxy), 1); - } - const proxifyChildValue = (prop) => { - const value = target[prop]; // - const childProxy = childProxies.find(child => child.prop === prop); - if (childProxy) { - if (childProxy.typeof === typeof value) { - return childProxy.value; - } - childProxies.splice(childProxies.indexOf(childProxy), 1); - } - if (typeof value !== 'object') { - // Can't proxify non-object values - return value; - } - const newChildProxy = createProxy({ root: context.root, target: context.target.concat(prop), id: context.id, flag: context.flag }); - childProxies.push({ typeof: typeof value, prop, value: newChildProxy }); - return newChildProxy; - }; - const unproxyValue = (value) => { - return value !== null && typeof value === 'object' && value[isProxy] - ? value.getTarget() - : value; - }; - // If the property contains a simple value, return it. - if (['string', 'number', 'boolean'].includes(typeof value) - || value instanceof Date - || value instanceof path_reference_1.PathReference - || value instanceof ArrayBuffer - || (typeof value === 'object' && 'buffer' in value) // Typed Arrays - ) { - return value; - } - const isArray = target instanceof Array; - if (prop === 'toString') { - return function toString() { - return `[LiveDataProxy for "${targetRef.path}"]`; - }; - } - if (typeof value === 'undefined') { - if (prop === 'push') { - // Push item to an object collection - return function push(item) { - const childRef = targetRef.push(); - context.flag('write', context.target.concat(childRef.key)); //, { previous: null } - target[childRef.key] = item; - return childRef.key; - }; - } - if (prop === 'getTarget') { - // Get unproxied readonly (but still live) version of data. - return function (warn = true) { - warn && console.warn('Use getTarget with caution - any changes will not be synchronized!'); - return target; - }; - } - if (prop === 'getRef') { - // Gets the DataReference to this data target - return function getRef() { - const ref = getTargetRef(context.root.ref, context.target); - return ref; - }; - } - if (prop === 'forEach') { - return function forEach(callback) { - const keys = Object.keys(target); - // Fix: callback with unproxied value - let stop = false; - for (let i = 0; !stop && i < keys.length; i++) { - const key = keys[i]; - const value = proxifyChildValue(key); //, target[key] - stop = callback(value, key, i) === false; - } - }; - } - if (['values', 'entries', 'keys'].includes(prop)) { - return function* generator() { - const keys = Object.keys(target); - for (const key of keys) { - if (prop === 'keys') { - yield key; - } - else { - const value = proxifyChildValue(key); //, target[key] - if (prop === 'entries') { - yield [key, value]; - } - else { - yield value; - } - } - } - }; - } - if (prop === 'toArray') { - return function toArray(sortFn) { - const arr = Object.keys(target).map(key => proxifyChildValue(key)); //, target[key] - if (sortFn) { - arr.sort(sortFn); - } - return arr; - }; - } - if (prop === 'onChanged') { - // Starts monitoring the value - return function onChanged(callback) { - return context.flag('onChange', context.target, { callback }); - }; - } - if (prop === 'subscribe') { - // Gets subscriber function to use with Observables, or custom handling - return function subscribe() { - return context.flag('subscribe', context.target); - }; - } - if (prop === 'getObservable') { - // Creates an observable for monitoring the value - return function getObservable() { - return context.flag('observe', context.target); - }; - } - if (prop === 'getOrderedCollection') { - return function getOrderedCollection(orderProperty, orderIncrement) { - return new OrderedCollectionProxy(this, orderProperty, orderIncrement); - }; - } - if (prop === 'startTransaction') { - return function startTransaction() { - return context.flag('transaction', context.target); - }; - } - if (prop === 'remove' && !isArray) { - // Removes target from object collection - return function remove() { - if (context.target.length === 0) { - throw new Error('Can\'t remove proxy root value'); - } - const parent = getTargetValue(context.root.cache, context.target.slice(0, -1)); - const key = context.target.slice(-1)[0]; - context.flag('write', context.target); - delete parent[key]; - }; - } - return; // undefined - } - else if (typeof value === 'function') { - if (isArray) { - // Handle array methods - const writeArray = (action) => { - context.flag('write', context.target); - return action(); - }; - const cleanArrayValues = values => values.map(value => { - value = unproxyValue(value); - removeVoidProperties(value); - return value; - }); - // Methods that directly change the array: - if (prop === 'push') { - return function push(...items) { - items = cleanArrayValues(items); - return writeArray(() => target.push(...items)); // push the items to the cache array - }; - } - if (prop === 'pop') { - return function pop() { - return writeArray(() => target.pop()); - }; - } - if (prop === 'splice') { - return function splice(start, deleteCount, ...items) { - items = cleanArrayValues(items); - return writeArray(() => target.splice(start, deleteCount, ...items)); - }; - } - if (prop === 'shift') { - return function shift() { - return writeArray(() => target.shift()); - }; - } - if (prop === 'unshift') { - return function unshift(...items) { - items = cleanArrayValues(items); - return writeArray(() => target.unshift(...items)); - }; - } - if (prop === 'sort') { - return function sort(compareFn) { - return writeArray(() => target.sort(compareFn)); - }; - } - if (prop === 'reverse') { - return function reverse() { - return writeArray(() => target.reverse()); - }; - } - // Methods that do not change the array themselves, but - // have callbacks that might, or return child values: - if (['indexOf', 'lastIndexOf'].includes(prop)) { - return function indexOf(item, start) { - if (item !== null && typeof item === 'object' && item[isProxy]) { - // Use unproxied value, or array.indexOf will return -1 (fixes issue #1) - item = item.getTarget(false); - } - return target[prop](item, start); - }; - } - if (['forEach', 'every', 'some', 'filter', 'map'].includes(prop)) { - return function iterate(callback) { - return target[prop]((value, i) => { - return callback(proxifyChildValue(i), i, proxy); //, value - }); - }; - } - if (['reduce', 'reduceRight'].includes(prop)) { - return function reduce(callback, initialValue) { - return target[prop]((prev, value, i) => { - return callback(prev, proxifyChildValue(i), i, proxy); //, value - }, initialValue); - }; - } - if (['find', 'findIndex'].includes(prop)) { - return function find(callback) { - let value = target[prop]((value, i) => { - return callback(proxifyChildValue(i), i, proxy); // , value - }); - if (prop === 'find' && value) { - const index = target.indexOf(value); - value = proxifyChildValue(index); //, value - } - return value; - }; - } - if (['values', 'entries', 'keys'].includes(prop)) { - return function* generator() { - for (let i = 0; i < target.length; i++) { - if (prop === 'keys') { - yield i; - } - else { - const value = proxifyChildValue(i); //, target[i] - if (prop === 'entries') { - yield [i, value]; - } - else { - yield value; - } - } - } - }; - } - } - // Other function (or not an array), should not alter its value - // return function fn(...args) { - // return target[prop](...args); - // } - return value; - } - // Proxify any other value - return proxifyChildValue(prop); //, value - }, - set(target, prop, value, receiver) { - // Eg: chats.chat1.title = 'New chat title'; - // target === chats.chat1, prop === 'title' - target = getTargetValue(context.root.cache, context.target); - if (typeof prop === 'symbol') { - return Reflect.set(target, prop, value, receiver); - } - if (target === null || typeof target !== 'object') { - throw new Error(`Cannot set property "${prop}" of ${target}. Value of path "/${targetRef.path}" is not an object`); - } - if (target instanceof Array && typeof prop === 'string') { - if (!/^[0-9]+$/.test(prop)) { - throw new Error(`Cannot set property "${prop}" on array value of path "/${targetRef.path}"`); - } - prop = parseInt(prop); - } - if (value !== null) { - if (typeof value === 'object') { - if (value[isProxy]) { - // Assigning one proxied value to another - value = value.valueOf(); - } - // else if (Object.isFrozen(value)) { - // // Create a copy to unfreeze it - // value = cloneObject(value); - // } - value = (0, utils_1.cloneObject)(value); // Fix #10, always clone objects so changes made through the proxy won't change the original object (and vice versa) - } - if ((0, utils_1.valuesAreEqual)(value, target[prop])) { //if (compareValues(value, target[prop]) === 'identical') { // (typeof value !== 'object' && target[prop] === value) { - // not changing the actual value, ignore - return true; - } - } - if (context.target.some(key => typeof key === 'number')) { - // Updating an object property inside an array. Flag the first array in target to be written. - // Eg: when chat.members === [{ name: 'Ewout', id: 'someid' }] - // --> chat.members[0].name = 'Ewout' --> Rewrite members array instead of chat/members[0]/name - context.flag('write', context.target.slice(0, context.target.findIndex(key => typeof key === 'number'))); - } - else if (target instanceof Array) { - // Flag the entire array to be overwritten - context.flag('write', context.target); - } - else { - // Flag child property - context.flag('write', context.target.concat(prop)); - } - // Set cached value: - if (value === null) { - delete target[prop]; - } - else { - removeVoidProperties(value); - target[prop] = value; - } - return true; - }, - deleteProperty(target, prop) { - target = getTargetValue(context.root.cache, context.target); - if (target === null) { - throw new Error(`Cannot delete property ${prop.toString()} of null`); - } - if (typeof prop === 'symbol') { - return Reflect.deleteProperty(target, prop); - } - if (!(prop in target)) { - return true; // Nothing to delete - } - context.flag('write', context.target.concat(prop)); - delete target[prop]; - return true; - }, - ownKeys(target) { - target = getTargetValue(context.root.cache, context.target); - return Reflect.ownKeys(target); - }, - has(target, prop) { - target = getTargetValue(context.root.cache, context.target); - return Reflect.has(target, prop); - }, - getOwnPropertyDescriptor(target, prop) { - target = getTargetValue(context.root.cache, context.target); - const descriptor = Reflect.getOwnPropertyDescriptor(target, prop); - if (descriptor) { - descriptor.configurable = true; // prevent "TypeError: 'getOwnPropertyDescriptor' on proxy: trap reported non-configurability for property '...' which is either non-existant or configurable in the proxy target" - } - return descriptor; - }, - getPrototypeOf(target) { - target = getTargetValue(context.root.cache, context.target); - return Reflect.getPrototypeOf(target); - }, - }; - const proxy = new Proxy({}, handler); - return proxy; -} -function removeVoidProperties(obj) { - if (typeof obj !== 'object') { - return; - } - Object.keys(obj).forEach(key => { - const val = obj[key]; - if (val === null || typeof val === 'undefined') { - delete obj[key]; - } - else if (typeof val === 'object') { - removeVoidProperties(val); - } - }); -} -/** - * Convenience function to access ILiveDataProxyValue methods on a proxied value - * @param proxiedValue The proxied value to get access to - * @returns Returns the same object typecasted to an ILiveDataProxyValue - * @example - * // IChatMessages is an ObjectCollection - * let observable: Observable; - * - * // Allows you to do this: - * observable = proxyAccess(chat.messages).getObservable(); - * - * // Instead of: - * observable = (chat.messages.msg1 as any as ILiveDataProxyValue).getObservable(); - * - * // Both do the exact same, but the first is less obscure - */ -function proxyAccess(proxiedValue) { - if (typeof proxiedValue !== 'object' || !proxiedValue[isProxy]) { - throw new Error('Given value is not proxied. Make sure you are referencing the value through the live data proxy.'); - } - return proxiedValue; -} -exports.proxyAccess = proxyAccess; -/** - * Provides functionality to work with ordered collections through a live data proxy. Eliminates - * the need for arrays to handle ordered data by adding a 'sort' properties to child objects in a - * collection, and provides functionality to sort and reorder items with a minimal amount of database - * updates. - */ -class OrderedCollectionProxy { - constructor(collection, orderProperty = 'order', orderIncrement = 10) { - this.collection = collection; - this.orderProperty = orderProperty; - this.orderIncrement = orderIncrement; - if (typeof collection !== 'object' || !collection[isProxy]) { - throw new Error('Collection is not proxied'); - } - if (collection.valueOf() instanceof Array) { - throw new Error('Collection is an array, not an object collection'); - } - if (!Object.keys(collection).every(key => typeof collection[key] === 'object')) { - throw new Error('Collection has non-object children'); - } - // Check if the collection has order properties. If not, assign them now - const ok = Object.keys(collection).every(key => typeof collection[key][orderProperty] === 'number'); - if (!ok) { - // Assign order properties now. Database will be updated automatically - const keys = Object.keys(collection); - for (let i = 0; i < keys.length; i++) { - const item = collection[keys[i]]; - item[orderProperty] = i * orderIncrement; // 0, 10, 20, 30 etc - } - } - } - /** - * Gets an observable for the target object collection. Same as calling `collection.getObservable()` - * @returns - */ - getObservable() { - return proxyAccess(this.collection).getObservable(); - } - /** - * Gets an observable that emits a new ordered array representation of the object collection each time - * the unlaying data is changed. Same as calling `getArray()` in a `getObservable().subscribe` callback - * @returns - */ - getArrayObservable() { - const Observable = (0, optional_observable_1.getObservable)(); - return new Observable(subscriber => { - const subscription = this.getObservable().subscribe(( /*value*/) => { - const newArray = this.getArray(); - subscriber.next(newArray); - }); - return function unsubscribe() { - subscription.unsubscribe(); - }; - }); - } - /** - * Gets an ordered array representation of the items in your object collection. The items in the array - * are proxied values, changes will be in sync with the database. Note that the array itself - * is not mutable: adding or removing items to it will NOT update the collection in the - * the database and vice versa. Use `add`, `delete`, `sort` and `move` methods to make changes - * that impact the collection's sorting order - * @returns order array - */ - getArray() { - const arr = proxyAccess(this.collection).toArray((a, b) => a[this.orderProperty] - b[this.orderProperty]); - // arr.push = (...items: T[]) => { - // items.forEach(item => this.add(item)); - // return arr.length; - // }; - return arr; - } - add(item, index, from) { - const arr = this.getArray(); - let minOrder = Number.POSITIVE_INFINITY, maxOrder = Number.NEGATIVE_INFINITY; - for (let i = 0; i < arr.length; i++) { - const order = arr[i][this.orderProperty]; - minOrder = Math.min(order, minOrder); - maxOrder = Math.max(order, maxOrder); - } - let fromKey; - if (typeof from === 'number') { - // Moving existing item - fromKey = Object.keys(this.collection).find(key => this.collection[key] === item); - if (!fromKey) { - throw new Error('item not found in collection'); - } - if (from === index) { - return { key: fromKey, index }; - } - if (Math.abs(from - index) === 1) { - // Position being swapped, swap their order property values - const otherItem = arr[index]; - const otherOrder = otherItem[this.orderProperty]; - otherItem[this.orderProperty] = item[this.orderProperty]; - item[this.orderProperty] = otherOrder; - return { key: fromKey, index }; - } - else { - // Remove from array, code below will add again - arr.splice(from, 1); - } - } - if (typeof index !== 'number' || index >= arr.length) { - // append at the end - index = arr.length; - item[this.orderProperty] = arr.length == 0 ? 0 : maxOrder + this.orderIncrement; - } - else if (index === 0) { - // insert before all others - item[this.orderProperty] = arr.length == 0 ? 0 : minOrder - this.orderIncrement; - } - else { - // insert between 2 others - const orders = arr.map(item => item[this.orderProperty]); - const gap = orders[index] - orders[index - 1]; - if (gap > 1) { - item[this.orderProperty] = orders[index] - Math.floor(gap / 2); - } - else { - // TODO: Can this gap be enlarged by moving one of both orders? - // For now, change all other orders - arr.splice(index, 0, item); - for (let i = 0; i < arr.length; i++) { - arr[i][this.orderProperty] = i * this.orderIncrement; - } - } - } - const key = typeof fromKey === 'string' - ? fromKey // Moved item, don't add it - : proxyAccess(this.collection).push(item); - return { key, index }; - } - /** - * Deletes an item from the object collection using the their index in the sorted array representation - * @param index - * @returns the key of the collection's child that was deleted - */ - delete(index) { - const arr = this.getArray(); - const item = arr[index]; - if (!item) { - throw new Error(`Item at index ${index} not found`); - } - const key = Object.keys(this.collection).find(key => this.collection[key] === item); - if (!key) { - throw new Error('Cannot find target object to delete'); - } - this.collection[key] = null; // Deletes it from db - return { key, index }; - } - /** - * Moves an item in the object collection by reordering it - * @param fromIndex Current index in the array (the ordered representation of the object collection) - * @param toIndex Target index in the array - * @returns - */ - move(fromIndex, toIndex) { - const arr = this.getArray(); - return this.add(arr[fromIndex], toIndex, fromIndex); - } - /** - * Reorders the object collection using given sort function. Allows quick reordering of the collection which is persisted in the database - * @param sortFn - */ - sort(sortFn) { - const arr = this.getArray(); - arr.sort(sortFn); - for (let i = 0; i < arr.length; i++) { - arr[i][this.orderProperty] = i * this.orderIncrement; - } - } -} -exports.OrderedCollectionProxy = OrderedCollectionProxy; - -},{"./data-reference":34,"./data-snapshot":35,"./id":37,"./optional-observable":40,"./path-info":42,"./path-reference":43,"./process":44,"./simple-event-emitter":48,"./utils":52}],34:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DataReferencesArray = exports.DataSnapshotsArray = exports.DataReferenceQuery = exports.DataReference = exports.QueryDataRetrievalOptions = exports.DataRetrievalOptions = void 0; -const data_snapshot_1 = require("./data-snapshot"); -const subscription_1 = require("./subscription"); -const id_1 = require("./id"); -const path_info_1 = require("./path-info"); -const data_proxy_1 = require("./data-proxy"); -const optional_observable_1 = require("./optional-observable"); -class DataRetrievalOptions { - /** - * Options for data retrieval, allows selective loading of object properties - */ - constructor(options) { - if (!options) { - options = {}; - } - if (typeof options.include !== 'undefined' && !(options.include instanceof Array)) { - throw new TypeError('options.include must be an array'); - } - if (typeof options.exclude !== 'undefined' && !(options.exclude instanceof Array)) { - throw new TypeError('options.exclude must be an array'); - } - if (typeof options.child_objects !== 'undefined' && typeof options.child_objects !== 'boolean') { - throw new TypeError('options.child_objects must be a boolean'); - } - if (typeof options.cache_mode === 'string' && !['allow', 'bypass', 'force'].includes(options.cache_mode)) { - throw new TypeError('invalid value for options.cache_mode'); - } - this.include = options.include || undefined; - this.exclude = options.exclude || undefined; - this.child_objects = typeof options.child_objects === 'boolean' ? options.child_objects : undefined; - this.cache_mode = typeof options.cache_mode === 'string' - ? options.cache_mode - : typeof options.allow_cache === 'boolean' - ? options.allow_cache ? 'allow' : 'bypass' - : 'allow'; - this.cache_cursor = typeof options.cache_cursor === 'string' ? options.cache_cursor : undefined; - } -} -exports.DataRetrievalOptions = DataRetrievalOptions; -class QueryDataRetrievalOptions extends DataRetrievalOptions { - /** - * @param options Options for data retrieval, allows selective loading of object properties - */ - constructor(options) { - super(options); - if (!['undefined', 'boolean'].includes(typeof options.snapshots)) { - throw new TypeError('options.snapshots must be a boolean'); - } - this.snapshots = typeof options.snapshots === 'boolean' ? options.snapshots : true; - } -} -exports.QueryDataRetrievalOptions = QueryDataRetrievalOptions; -const _private = Symbol('private'); -class DataReference { - /** - * Creates a reference to a node - */ - constructor(db, path, vars) { - this.db = db; - if (!path) { - path = ''; - } - path = path.replace(/^\/|\/$/g, ''); // Trim slashes - const pathInfo = path_info_1.PathInfo.get(path); - const key = pathInfo.key; - const callbacks = []; - this[_private] = { - get path() { return path; }, - get key() { return key; }, - get callbacks() { return callbacks; }, - vars: vars || {}, - context: {}, - pushed: false, - cursor: null, - }; - } - context(context, merge = false) { - const currentContext = this[_private].context; - if (typeof context === 'object') { - const newContext = context ? merge ? currentContext || {} : context : {}; - if (context) { - // Merge new with current context - Object.keys(context).forEach(key => { - newContext[key] = context[key]; - }); - } - this[_private].context = newContext; - return this; - } - else if (typeof context === 'undefined') { - console.warn('Use snap.context() instead of snap.ref.context() to get updating context in event callbacks'); - return currentContext; - } - else { - throw new Error('Invalid context argument'); - } - } - /** - * Contains the last received cursor for this referenced path (if the connected database has transaction logging enabled). - * If you want to be notified if this value changes, add a handler with `ref.onCursor(callback)` - */ - get cursor() { - return this[_private].cursor; - } - set cursor(value) { - var _a; - this[_private].cursor = value; - (_a = this.onCursor) === null || _a === void 0 ? void 0 : _a.call(this, value); - } - /** - * The path this instance was created with - */ - get path() { return this[_private].path; } - /** - * The key or index of this node - */ - get key() { - const key = this[_private].key; - return typeof key === 'number' ? `[${key}]` : key; - } - /** - * If the "key" is a number, it is an index! - */ - get index() { - const key = this[_private].key; - if (typeof key !== 'number') { - throw new Error(`"${key}" is not a number`); - } - return key; - } - /** - * Returns a new reference to this node's parent - */ - get parent() { - const currentPath = path_info_1.PathInfo.fillVariables2(this.path, this.vars); - const info = path_info_1.PathInfo.get(currentPath); - if (info.parentPath === null) { - return null; - } - return new DataReference(this.db, info.parentPath).context(this[_private].context); - } - /** - * Contains values of the variables/wildcards used in a subscription path if this reference was - * created by an event ("value", "child_added" etc), or in a type mapping path when serializing / instantiating typed objects - */ - get vars() { - return this[_private].vars; - } - /** - * Returns a new reference to a child node - * @param childPath Child key, index or path - * @returns reference to the child - */ - child(childPath) { - childPath = typeof childPath === 'number' ? childPath : childPath.replace(/^\/|\/$/g, ''); - const currentPath = path_info_1.PathInfo.fillVariables2(this.path, this.vars); - const targetPath = path_info_1.PathInfo.getChildPath(currentPath, childPath); - return new DataReference(this.db, targetPath).context(this[_private].context); // `${this.path}/${childPath}` - } - /** - * Sets or overwrites the stored value - * @param value value to store in database - * @param onComplete optional completion callback to use instead of returning promise - * @returns promise that resolves with this reference when completed - */ - async set(value, onComplete) { - try { - if (this.isWildcardPath) { - throw new Error(`Cannot set the value of wildcard path "/${this.path}"`); - } - if (this.parent === null) { - throw new Error('Cannot set the root object. Use update, or set individual child properties'); - } - if (typeof value === 'undefined') { - throw new TypeError(`Cannot store undefined value in "/${this.path}"`); - } - if (!this.db.isReady) { - await this.db.ready(); - } - value = this.db.types.serialize(this.path, value); - const { cursor } = await this.db.api.set(this.path, value, { context: this[_private].context }); - this.cursor = cursor; - if (typeof onComplete === 'function') { - try { - onComplete(null, this); - } - catch (err) { - console.error('Error in onComplete callback:', err); - } - } - } - catch (err) { - if (typeof onComplete === 'function') { - try { - onComplete(err, this); - } - catch (err) { - console.error('Error in onComplete callback:', err); - } - } - else { - // throw again - throw err; - } - } - return this; - } - /** - * Updates properties of the referenced node - * @param updates object containing the properties to update - * @param onComplete optional completion callback to use instead of returning promise - * @return returns promise that resolves with this reference once completed - */ - async update(updates, onComplete) { - try { - if (this.isWildcardPath) { - throw new Error(`Cannot update the value of wildcard path "/${this.path}"`); - } - if (!this.db.isReady) { - await this.db.ready(); - } - if (typeof updates !== 'object' || updates instanceof Array || updates instanceof ArrayBuffer || updates instanceof Date) { - await this.set(updates); - } - else if (Object.keys(updates).length === 0) { - console.warn(`update called on path "/${this.path}", but there is nothing to update`); - } - else { - updates = this.db.types.serialize(this.path, updates); - const { cursor } = await this.db.api.update(this.path, updates, { context: this[_private].context }); - this.cursor = cursor; - } - if (typeof onComplete === 'function') { - try { - onComplete(null, this); - } - catch (err) { - console.error('Error in onComplete callback:', err); - } - } - } - catch (err) { - if (typeof onComplete === 'function') { - try { - onComplete(err, this); - } - catch (err) { - console.error('Error in onComplete callback:', err); - } - } - else { - // throw again - throw err; - } - } - return this; - } - /** - * Sets the value a node using a transaction: it runs your callback function with the current value, uses its return value as the new value to store. - * The transaction is canceled if your callback returns undefined, or throws an error. If your callback returns null, the target node will be removed. - * @param callback - callback function that performs the transaction on the node's current value. It must return the new value to store (or promise with new value), undefined to cancel the transaction, or null to remove the node. - * @returns returns a promise that resolves with the DataReference once the transaction has been processed - */ - async transaction(callback) { - if (this.isWildcardPath) { - throw new Error(`Cannot start a transaction on wildcard path "/${this.path}"`); - } - if (!this.db.isReady) { - await this.db.ready(); - } - let throwError; - const cb = (currentValue) => { - currentValue = this.db.types.deserialize(this.path, currentValue); - const snap = new data_snapshot_1.DataSnapshot(this, currentValue); - let newValue; - try { - newValue = callback(snap); - } - catch (err) { - // callback code threw an error - throwError = err; // Remember error - return; // cancel transaction by returning undefined - } - if (newValue instanceof Promise) { - return newValue - .then((val) => { - return this.db.types.serialize(this.path, val); - }) - .catch(err => { - throwError = err; // Remember error - return; // cancel transaction by returning undefined - }); - } - else { - return this.db.types.serialize(this.path, newValue); - } - }; - const { cursor } = await this.db.api.transaction(this.path, cb, { context: this[_private].context }); - this.cursor = cursor; - if (throwError) { - // Rethrow error from callback code - throw throwError; - } - return this; - } - on(event, callback, cancelCallback) { - if (this.path === '' && ['value', 'child_changed'].includes(event)) { - // Removed 'notify_value' and 'notify_child_changed' events from the list, they do not require additional data loading anymore. - console.warn('WARNING: Listening for value and child_changed events on the root node is a bad practice. These events require loading of all data (value event), or potentially lots of data (child_changed event) each time they are fired'); - } - let eventPublisher = null; - const eventStream = new subscription_1.EventStream(publisher => { eventPublisher = publisher; }); - // Map OUR callback to original callback, so .off can remove the right callback(s) - const cb = { - event, - stream: eventStream, - userCallback: typeof callback === 'function' && callback, - ourCallback: (err, path, newValue, oldValue, eventContext) => { - if (err) { - // TODO: Investigate if this ever happens? - this.db.debug.error(`Error getting data for event ${event} on path "${path}"`, err); - return; - } - const ref = this.db.ref(path); - ref[_private].vars = path_info_1.PathInfo.extractVariables(this.path, path); - let callbackObject; - if (event.startsWith('notify_')) { - // No data event, callback with reference - callbackObject = ref.context(eventContext || {}); - } - else { - const values = { - previous: this.db.types.deserialize(path, oldValue), - current: this.db.types.deserialize(path, newValue), - }; - if (event === 'child_removed') { - callbackObject = new data_snapshot_1.DataSnapshot(ref, values.previous, true, values.previous, eventContext); - } - else if (event === 'mutations') { - callbackObject = new data_snapshot_1.MutationsDataSnapshot(ref, values.current, eventContext); - } - else { - const isRemoved = event === 'mutated' && values.current === null; - callbackObject = new data_snapshot_1.DataSnapshot(ref, values.current, isRemoved, values.previous, eventContext); - } - } - eventPublisher.publish(callbackObject); - if (eventContext === null || eventContext === void 0 ? void 0 : eventContext.acebase_cursor) { - this.cursor = eventContext.acebase_cursor; - } - }, - }; - this[_private].callbacks.push(cb); - const subscribe = () => { - // (NEW) Add callback to event stream - // ref.on('value', callback) is now exactly the same as ref.on('value').subscribe(callback) - if (typeof callback === 'function') { - eventStream.subscribe(callback, (activated, cancelReason) => { - if (!activated) { - cancelCallback && cancelCallback(cancelReason); - } - }); - } - const advancedOptions = typeof callback === 'object' - ? callback - : { newOnly: !callback }; // newOnly: if callback is not 'truthy', could change this to (typeof callback !== 'function' && callback !== true) but that would break client code that uses a truthy argument. - if (typeof advancedOptions.newOnly !== 'boolean') { - advancedOptions.newOnly = false; - } - if (this.isWildcardPath) { - advancedOptions.newOnly = true; - } - const cancelSubscription = (err) => { - // Access denied? - // Cancel subscription - const callbacks = this[_private].callbacks; - callbacks.splice(callbacks.indexOf(cb), 1); - this.db.api.unsubscribe(this.path, event, cb.ourCallback); - // Call cancelCallbacks - this.db.debug.error(`Subscription "${event}" on path "/${this.path}" canceled because of an error: ${err.message}`); - eventPublisher.cancel(err.message); - }; - const authorized = this.db.api.subscribe(this.path, event, cb.ourCallback, { newOnly: advancedOptions.newOnly, cancelCallback: cancelSubscription, syncFallback: advancedOptions.syncFallback }); - const allSubscriptionsStoppedCallback = () => { - const callbacks = this[_private].callbacks; - callbacks.splice(callbacks.indexOf(cb), 1); - return this.db.api.unsubscribe(this.path, event, cb.ourCallback); - }; - if (authorized instanceof Promise) { - // Web API now returns a promise that resolves if the request is allowed - // and rejects when access is denied by the set security rules - authorized.then(() => { - // Access granted - eventPublisher.start(allSubscriptionsStoppedCallback); - }).catch(cancelSubscription); - } - else { - // Local API, always authorized - eventPublisher.start(allSubscriptionsStoppedCallback); - } - if (!advancedOptions.newOnly) { - // If callback param is supplied (either a callback function or true or something else truthy), - // it will fire events for current values right now. - // Otherwise, it expects the .subscribe methode to be used, which will then - // only be called for future events - if (event === 'value') { - this.get(snap => { - eventPublisher.publish(snap); - }); - } - else if (event === 'child_added') { - this.get(snap => { - const val = snap.val(); - if (val === null || typeof val !== 'object') { - return; - } - Object.keys(val).forEach(key => { - const childSnap = new data_snapshot_1.DataSnapshot(this.child(key), val[key]); - eventPublisher.publish(childSnap); - }); - }); - } - else if (event === 'notify_child_added') { - // Use the reflect API to get current children. - // NOTE: This does not work with AceBaseServer <= v0.9.7, only when signed in as admin - const step = 100, limit = step; - let skip = 0; - const more = async () => { - const children = await this.db.api.reflect(this.path, 'children', { limit, skip }); - children.list.forEach(child => { - const childRef = this.child(child.key); - eventPublisher.publish(childRef); - // typeof callback === 'function' && callback(childRef); - }); - if (children.more) { - skip += step; - more(); - } - }; - more(); - } - } - }; - if (this.db.isReady) { - subscribe(); - } - else { - this.db.ready(subscribe); - } - return eventStream; - } - off(event, callback) { - const subscriptions = this[_private].callbacks; - const stopSubs = subscriptions.filter(sub => (!event || sub.event === event) && (!callback || sub.userCallback === callback)); - if (stopSubs.length === 0) { - this.db.debug.warn(`Can't find event subscriptions to stop (path: "${this.path}", event: ${event || '(any)'}, callback: ${callback})`); - } - stopSubs.forEach(sub => { - sub.stream.stop(); - }); - return this; - } - get(optionsOrCallback, callback) { - if (!this.db.isReady) { - const promise = this.db.ready().then(() => this.get(optionsOrCallback, callback)); - return typeof optionsOrCallback !== 'function' && typeof callback !== 'function' ? promise : undefined; // only return promise if no callback is used - } - callback = - typeof optionsOrCallback === 'function' - ? optionsOrCallback - : typeof callback === 'function' - ? callback - : undefined; - if (this.isWildcardPath) { - const error = new Error(`Cannot get value of wildcard path "/${this.path}". Use .query() instead`); - if (typeof callback === 'function') { - throw error; - } - return Promise.reject(error); - } - const options = new DataRetrievalOptions(typeof optionsOrCallback === 'object' ? optionsOrCallback : { cache_mode: 'allow' }); - const promise = this.db.api.get(this.path, options).then(result => { - var _a; - const isNewApiResult = ('context' in result && 'value' in result); - if (!isNewApiResult) { - // acebase-core version package was updated but acebase or acebase-client package was not? Warn, but don't throw an error. - console.warn('AceBase api.get method returned an old response value. Update your acebase or acebase-client package'); - result = { value: result, context: {} }; - } - const value = this.db.types.deserialize(this.path, result.value); - const snapshot = new data_snapshot_1.DataSnapshot(this, value, undefined, undefined, result.context); - if ((_a = result.context) === null || _a === void 0 ? void 0 : _a.acebase_cursor) { - this.cursor = result.context.acebase_cursor; - } - return snapshot; - }); - if (callback) { - promise.then(callback).catch(err => { - console.error('Uncaught error:', err); - }); - return; - } - else { - return promise; - } - } - /** - * Waits for an event to occur - * @param event Name of the event, eg "value", "child_added", "child_changed", "child_removed" - * @param options data retrieval options, to include or exclude specific child keys - * @returns returns promise that resolves with a snapshot of the data - */ - once(event, options) { - if (event === 'value' && !this.isWildcardPath) { - // Shortcut, do not start listening for future events - return this.get(options); - } - return new Promise((resolve) => { - const callback = (snap) => { - this.off(event, callback); // unsubscribe directly - resolve(snap); - }; - this.on(event, callback); - }); - } - /** - * @param value optional value to store into the database right away - * @param onComplete optional callback function to run once value has been stored - * @returns returns promise that resolves with the reference after the passed value has been stored - */ - push(value, onComplete) { - if (this.isWildcardPath) { - const error = new Error(`Cannot push to wildcard path "/${this.path}"`); - if (typeof value === 'undefined' || typeof onComplete === 'function') { - throw error; - } - return Promise.reject(error); - } - const id = id_1.ID.generate(); - const ref = this.child(id); - ref[_private].pushed = true; - if (typeof value !== 'undefined') { - return ref.set(value, onComplete).then(() => ref); - } - else { - return ref; - } - } - /** - * Removes this node and all children - */ - async remove() { - if (this.isWildcardPath) { - throw new Error(`Cannot remove wildcard path "/${this.path}". Use query().remove instead`); - } - if (this.parent === null) { - throw new Error('Cannot remove the root node'); - } - return this.set(null); - } - /** - * Quickly checks if this reference has a value in the database, without returning its data - * @returns returns a promise that resolves with a boolean value - */ - async exists() { - if (this.isWildcardPath) { - throw new Error(`Cannot check wildcard path "/${this.path}" existence`); - } - if (!this.db.isReady) { - await this.db.ready(); - } - return this.db.api.exists(this.path); - } - get isWildcardPath() { - return this.path.indexOf('*') >= 0 || this.path.indexOf('$') >= 0; - } - /** - * Creates a query object for current node - */ - query() { - return new DataReferenceQuery(this); - } - /** - * Gets the number of children this node has, uses reflection - */ - async count() { - const info = await this.reflect('info', { child_count: true }); - return info.children.count; - } - async reflect(type, args) { - if (this.isWildcardPath) { - throw new Error(`Cannot reflect on wildcard path "/${this.path}"`); - } - if (!this.db.isReady) { - await this.db.ready(); - } - return this.db.api.reflect(this.path, type, args); - } - async export(write, options = { format: 'json', type_safe: true }) { - if (this.isWildcardPath) { - throw new Error(`Cannot export wildcard path "/${this.path}"`); - } - if (!this.db.isReady) { - await this.db.ready(); - } - const writeFn = typeof write === 'function' ? write : write.write.bind(write); - return this.db.api.export(this.path, writeFn, options); - } - /** - * Imports the value of this node and all children - * @param read Function that reads data from your stream - * @param options Only supported format currently is json - * @returns returns a promise that resolves once all data is imported - */ - async import(read, options = { format: 'json', suppress_events: false }) { - if (this.isWildcardPath) { - throw new Error(`Cannot import to wildcard path "/${this.path}"`); - } - if (!this.db.isReady) { - await this.db.ready(); - } - return this.db.api.import(this.path, read, options); - } - proxy(options) { - const isOptionsArg = typeof options === 'object' && (typeof options.cursor !== 'undefined' || typeof options.defaultValue !== 'undefined'); - if (typeof options !== 'undefined' && !isOptionsArg) { - this.db.debug.warn('Warning: live data proxy is being initialized with a deprecated method signature. Use ref.proxy(options) instead of ref.proxy(defaultValue)'); - options = { defaultValue: options }; - } - return data_proxy_1.LiveDataProxy.create(this, options); - } - /** - * @param options optional initial data retrieval options. - * Not recommended to use yet - given includes/excludes are not applied to received mutations, - * or sync actions when using an AceBaseClient with cache db. - */ - observe(options) { - // options should not be used yet - we can't prevent/filter mutation events on excluded paths atm - if (options) { - throw new Error('observe does not support data retrieval options yet'); - } - if (this.isWildcardPath) { - throw new Error(`Cannot observe wildcard path "/${this.path}"`); - } - const Observable = (0, optional_observable_1.getObservable)(); - return new Observable(observer => { - let cache, resolved = false; - let promise = this.get(options).then(snap => { - resolved = true; - cache = snap.val(); - observer.next(cache); - }); - const updateCache = (snap) => { - if (!resolved) { - promise = promise.then(() => updateCache(snap)); - return; - } - const mutatedPath = snap.ref.path; - if (mutatedPath === this.path) { - cache = snap.val(); - return observer.next(cache); - } - const trailKeys = path_info_1.PathInfo.getPathKeys(mutatedPath).slice(path_info_1.PathInfo.getPathKeys(this.path).length); - let target = cache; - while (trailKeys.length > 1) { - const key = trailKeys.shift(); - if (!(key in target)) { - // Happens if initial loaded data did not include / excluded this data, - // or we missed out on an event - target[key] = typeof trailKeys[0] === 'number' ? [] : {}; - } - target = target[key]; - } - const prop = trailKeys.shift(); - const newValue = snap.val(); - if (newValue === null) { - // Remove it - target instanceof Array && typeof prop === 'number' ? target.splice(prop, 1) : delete target[prop]; - } - else { - // Set or update it - target[prop] = newValue; - } - observer.next(cache); - }; - this.on('mutated', updateCache); // TODO: Refactor to 'mutations' event instead - // Return unsubscribe function - return () => { - this.off('mutated', updateCache); - }; - }); - } - async forEach(callbackOrOptions, callback) { - let options; - if (typeof callbackOrOptions === 'function') { - callback = callbackOrOptions; - } - else { - options = callbackOrOptions; - } - if (typeof callback !== 'function') { - throw new TypeError('No callback function given'); - } - // Get all children through reflection. This could be tweaked further using paging - const info = await this.reflect('children', { limit: 0, skip: 0 }); // Gets ALL child keys - const summary = { - canceled: false, - total: info.list.length, - processed: 0, - }; - // Iterate through all children until callback returns false - for (let i = 0; i < info.list.length; i++) { - const key = info.list[i].key; - // Get child data - const snapshot = await this.child(key).get(options); - summary.processed++; - if (!snapshot.exists()) { - // Was removed in the meantime, skip - continue; - } - // Run callback - const result = await callback(snapshot); - if (result === false) { - summary.canceled = true; - break; // Stop looping - } - } - return summary; - } - async getMutations(cursorOrDate) { - const cursor = typeof cursorOrDate === 'string' ? cursorOrDate : undefined; - const timestamp = cursorOrDate === null || typeof cursorOrDate === 'undefined' ? 0 : cursorOrDate instanceof Date ? cursorOrDate.getTime() : undefined; - return this.db.api.getMutations({ path: this.path, cursor, timestamp }); - } - async getChanges(cursorOrDate) { - const cursor = typeof cursorOrDate === 'string' ? cursorOrDate : undefined; - const timestamp = cursorOrDate === null || typeof cursorOrDate === 'undefined' ? 0 : cursorOrDate instanceof Date ? cursorOrDate.getTime() : undefined; - return this.db.api.getChanges({ path: this.path, cursor, timestamp }); - } -} -exports.DataReference = DataReference; -class DataReferenceQuery { - /** - * Creates a query on a reference - */ - constructor(ref) { - this.ref = ref; - this[_private] = { - filters: [], - skip: 0, - take: 0, - order: [], - events: {}, - }; - } - /** - * Applies a filter to the children of the refence being queried. - * If there is an index on the property key being queried, it will be used - * to speed up the query - * @param key property to test value of - * @param op operator to use - * @param compare value to compare with - */ - filter(key, op, compare) { - if ((op === 'in' || op === '!in') && (!(compare instanceof Array) || compare.length === 0)) { - throw new Error(`${op} filter for ${key} must supply an Array compare argument containing at least 1 value`); - } - if ((op === 'between' || op === '!between') && (!(compare instanceof Array) || compare.length !== 2)) { - throw new Error(`${op} filter for ${key} must supply an Array compare argument containing 2 values`); - } - if ((op === 'matches' || op === '!matches') && !(compare instanceof RegExp)) { - throw new Error(`${op} filter for ${key} must supply a RegExp compare argument`); - } - // DISABLED 2019/10/23 because it is not fully implemented only works locally - // if (op === "custom" && typeof compare !== "function") { - // throw `${op} filter for ${key} must supply a Function compare argument`; - // } - // DISABLED 2022/08/15, implemented by query.ts in acebase - // if ((op === 'contains' || op === '!contains') && ((typeof compare === 'object' && !(compare instanceof Array) && !(compare instanceof Date)) || (compare instanceof Array && compare.length === 0))) { - // throw new Error(`${op} filter for ${key} must supply a simple value or (non-zero length) array compare argument`); - // } - this[_private].filters.push({ key, op, compare }); - return this; - } - /** - * @deprecated use `.filter` instead - */ - where(key, op, compare) { - return this.filter(key, op, compare); - } - /** - * Limits the number of query results - */ - take(n) { - this[_private].take = n; - return this; - } - /** - * Skips the first n query results - */ - skip(n) { - this[_private].skip = n; - return this; - } - sort(key, ascending = true) { - if (!['string', 'number'].includes(typeof key)) { - throw 'key must be a string or number'; - } - this[_private].order.push({ key, ascending }); - return this; - } - /** - * @deprecated use `.sort` instead - */ - order(key, ascending = true) { - return this.sort(key, ascending); - } - get(optionsOrCallback, callback) { - if (!this.ref.db.isReady) { - const promise = this.ref.db.ready().then(() => this.get(optionsOrCallback, callback)); - return typeof optionsOrCallback !== 'function' && typeof callback !== 'function' ? promise : undefined; // only return promise if no callback is used - } - callback = - typeof optionsOrCallback === 'function' - ? optionsOrCallback - : typeof callback === 'function' - ? callback - : undefined; - const options = new QueryDataRetrievalOptions(typeof optionsOrCallback === 'object' ? optionsOrCallback : { snapshots: true, cache_mode: 'allow' }); - options.allow_cache = options.cache_mode !== 'bypass'; // Backward compatibility when using older acebase-client - options.eventHandler = ev => { - // TODO: implement context for query events - if (!this[_private].events[ev.name]) { - return false; - } - const listeners = this[_private].events[ev.name]; - if (typeof listeners !== 'object' || listeners.length === 0) { - return false; - } - if (['add', 'change', 'remove'].includes(ev.name)) { - const ref = new DataReference(this.ref.db, ev.path); - const eventData = { name: ev.name }; - if (options.snapshots && ev.name !== 'remove') { - const val = db.types.deserialize(ev.path, ev.value); - eventData.snapshot = new data_snapshot_1.DataSnapshot(ref, val, false); - } - else { - eventData.ref = ref; - } - ev = eventData; - } - listeners.forEach(callback => { try { - callback(ev); - } - catch (e) { } }); - }; - // Check if there are event listeners set for realtime changes - options.monitor = { add: false, change: false, remove: false }; - if (this[_private].events) { - if (this[_private].events['add'] && this[_private].events['add'].length > 0) { - options.monitor.add = true; - } - if (this[_private].events['change'] && this[_private].events['change'].length > 0) { - options.monitor.change = true; - } - if (this[_private].events['remove'] && this[_private].events['remove'].length > 0) { - options.monitor.remove = true; - } - } - // Stop realtime results if they are still enabled on a previous .get on this instance - this.stop(); - // NOTE: returning promise here, regardless of callback argument. Good argument to refactor method to async/await soon - const db = this.ref.db; - return db.api.query(this.ref.path, this[_private], options) - .catch(err => { - throw new Error(err); - }) - .then(res => { - const { stop } = res; - let { results, context } = res; - this.stop = async () => { - await stop(); - }; - if (!('results' in res && 'context' in res)) { - console.warn('Query results missing context. Update your acebase and/or acebase-client packages'); - results = res, context = {}; - } - if (options.snapshots) { - const snaps = results.map(result => { - const val = db.types.deserialize(result.path, result.val); - return new data_snapshot_1.DataSnapshot(db.ref(result.path), val, false, undefined, context); - }); - return DataSnapshotsArray.from(snaps); - } - else { - const refs = results.map(path => db.ref(path)); - return DataReferencesArray.from(refs); - } - }) - .then(results => { - callback && callback(results); - return results; - }); - } - /** - * Stops a realtime query, no more notifications will be received. - */ - async stop() { - // Overridden by .get - } - /** - * Executes the query and returns references. Short for `.get({ snapshots: false })` - * @param callback callback to use instead of returning a promise - * @returns returns an Promise that resolves with an array of DataReferences, or void when using a callback - * @deprecated Use `find` instead - */ - getRefs(callback) { - return this.get({ snapshots: false }, callback); - } - /** - * Executes the query and returns an array of references. Short for `.get({ snapshots: false })` - */ - find() { - return this.get({ snapshots: false }); - } - /** - * Executes the query and returns the number of results - */ - async count() { - const refs = await this.find(); - return refs.length; - } - /** - * Executes the query and returns if there are any results - */ - async exists() { - const originalTake = this[_private].take; - const p = this.take(1).find(); - this.take(originalTake); - const refs = await p; - return refs.length !== 0; - } - /** - * Executes the query, removes all matches from the database - * @returns returns a Promise that resolves once all matches have been removed - */ - async remove(callback) { - const refs = await this.find(); - // Perform updates on each distinct parent collection (only 1 parent if this is not a wildcard path) - const parentUpdates = refs.reduce((parents, ref) => { - const parent = parents[ref.parent.path]; - if (!parent) { - parents[ref.parent.path] = [ref]; - } - else { - parent.push(ref); - } - return parents; - }, {}); - const db = this.ref.db; - const promises = Object.keys(parentUpdates).map(async (parentPath) => { - const updates = refs.reduce((updates, ref) => { - updates[ref.key] = null; - return updates; - }, {}); - const ref = db.ref(parentPath); - try { - await ref.update(updates); - return { ref, success: true }; - } - catch (error) { - return { ref, success: false, error }; - } - }); - const results = await Promise.all(promises); - callback && callback(results); - return results; - } - on(event, callback) { - if (!this[_private].events[event]) { - this[_private].events[event] = []; - } - this[_private].events[event].push(callback); - return this; - } - /** - * Unsubscribes from (a) previously added event(s) - * @param event Name of the event - * @param callback callback function to remove - * @returns returns reference to this query - */ - off(event, callback) { - if (typeof event === 'undefined') { - this[_private].events = {}; - return this; - } - if (!this[_private].events[event]) { - return this; - } - if (typeof callback === 'undefined') { - delete this[_private].events[event]; - return this; - } - const index = this[_private].events[event].indexOf(callback); - if (!~index) { - return this; - } - this[_private].events[event].splice(index, 1); - return this; - } - async forEach(callbackOrOptions, callback) { - let options; - if (typeof callbackOrOptions === 'function') { - callback = callbackOrOptions; - } - else { - options = callbackOrOptions; - } - if (typeof callback !== 'function') { - throw new TypeError('No callback function given'); - } - // Get all query results. This could be tweaked further using paging - const refs = await this.find(); - const summary = { - canceled: false, - total: refs.length, - processed: 0, - }; - // Iterate through all children until callback returns false - for (let i = 0; i < refs.length; i++) { - const ref = refs[i]; - // Get child data - const snapshot = await ref.get(options); - summary.processed++; - if (!snapshot.exists()) { - // Was removed in the meantime, skip - continue; - } - // Run callback - const result = await callback(snapshot); - if (result === false) { - summary.canceled = true; - break; // Stop looping - } - } - return summary; - } -} -exports.DataReferenceQuery = DataReferenceQuery; -class DataSnapshotsArray extends Array { - static from(snaps) { - const arr = new DataSnapshotsArray(snaps.length); - snaps.forEach((snap, i) => arr[i] = snap); - return arr; - } - getValues() { - return this.map(snap => snap.val()); - } -} -exports.DataSnapshotsArray = DataSnapshotsArray; -class DataReferencesArray extends Array { - static from(refs) { - const arr = new DataReferencesArray(refs.length); - refs.forEach((ref, i) => arr[i] = ref); - return arr; - } - getPaths() { - return this.map(ref => ref.path); - } -} -exports.DataReferencesArray = DataReferencesArray; - -},{"./data-proxy":33,"./data-snapshot":35,"./id":37,"./optional-observable":40,"./path-info":42,"./subscription":49}],35:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MutationsDataSnapshot = exports.DataSnapshot = void 0; -const path_info_1 = require("./path-info"); -function getChild(snapshot, path, previous = false) { - if (!snapshot.exists()) { - return null; - } - let child = previous ? snapshot.previous() : snapshot.val(); - if (typeof path === 'number') { - return child[path]; - } - path_info_1.PathInfo.getPathKeys(path).every(key => { - child = child[key]; - return typeof child !== 'undefined'; - }); - return child || null; -} -function getChildren(snapshot) { - if (!snapshot.exists()) { - return []; - } - const value = snapshot.val(); - if (value instanceof Array) { - return new Array(value.length).map((v, i) => i); - } - if (typeof value === 'object') { - return Object.keys(value); - } - return []; -} -class DataSnapshot { - /** - * Creates a new DataSnapshot instance - */ - constructor(ref, value, isRemoved = false, prevValue, context) { - this.ref = ref; - this.val = () => { return value; }; - this.previous = () => { return prevValue; }; - this.exists = () => { - if (isRemoved) { - return false; - } - return value !== null && typeof value !== 'undefined'; - }; - this.context = () => { return context || {}; }; - } - /** - * Indicates whether the node exists in the database - */ - exists() { return false; } - /** - * Creates a `DataSnapshot` instance - * @internal (for internal use) - */ - static for(ref, value) { - return new DataSnapshot(ref, value); - } - /** - * Gets a new snapshot for a child node - * @param path child key or path - * @returns Returns a `DataSnapshot` of the child - */ - child(path) { - // Create new snapshot for child data - const val = getChild(this, path, false); - const prev = getChild(this, path, true); - return new DataSnapshot(this.ref.child(path), val, false, prev); - } - /** - * Checks if the snapshot's value has a child with the given key or path - * @param path child key or path - */ - hasChild(path) { - return getChild(this, path) !== null; - } - /** - * Indicates whether the the snapshot's value has any child nodes - */ - hasChildren() { - return getChildren(this).length > 0; - } - /** - * The number of child nodes in this snapshot - */ - numChildren() { - return getChildren(this).length; - } - /** - * Runs a callback function for each child node in this snapshot until the callback returns false - * @param callback function that is called with a snapshot of each child node in this snapshot. - * Must return a boolean value that indicates whether to continue iterating or not. - */ - forEach(callback) { - const value = this.val(); - const prev = this.previous(); - return getChildren(this).every((key) => { - const snap = new DataSnapshot(this.ref.child(key), value[key], false, prev[key]); - return callback(snap); - }); - } - /** - * The key of the node's path - */ - get key() { return this.ref.key; } -} -exports.DataSnapshot = DataSnapshot; -class MutationsDataSnapshot extends DataSnapshot { - constructor(ref, mutations, context) { - super(ref, mutations, false, undefined, context); - /** - * Don't use this to get previous values of mutated nodes. - * Use `.previous` properties on the individual child snapshots instead. - * @throws Throws an error if you do use it. - */ - this.previous = () => { throw new Error('Iterate values to get previous values for each mutation'); }; - this.val = (warn = true) => { - if (warn) { - console.warn('Unless you know what you are doing, it is best not to use the value of a mutations snapshot directly. Use child methods and forEach to iterate the mutations instead'); - } - return mutations; - }; - } - /** - * Runs a callback function for each mutation in this snapshot until the callback returns false - * @param callback function that is called with a snapshot of each mutation in this snapshot. Must return a boolean value that indicates whether to continue iterating or not. - * @returns Returns whether every child was interated - */ - forEach(callback) { - const mutations = this.val(); - return mutations.every(mutation => { - const ref = mutation.target.reduce((ref, key) => ref.child(key), this.ref); - const snap = new DataSnapshot(ref, mutation.val, false, mutation.prev); - return callback(snap); - }); - } - /** - * Gets a snapshot of a mutated node - * @param index index of the mutation - * @returns Returns a DataSnapshot of the mutated node - */ - child(index) { - if (typeof index !== 'number') { - throw new Error('child index must be a number'); - } - const mutation = this.val()[index]; - const ref = mutation.target.reduce((ref, key) => ref.child(key), this.ref); - return new DataSnapshot(ref, mutation.val, false, mutation.prev); - } -} -exports.MutationsDataSnapshot = MutationsDataSnapshot; - -},{"./path-info":42}],36:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DebugLogger = void 0; -const process_1 = require("./process"); -// eslint-disable-next-line @typescript-eslint/no-empty-function -const noop = () => { }; -class DebugLogger { - constructor(level = 'log', prefix = '') { - this.level = level; - this.prefix = prefix; - this.setLevel(level); - } - setLevel(level) { - const prefix = this.prefix ? this.prefix + ' %s' : ''; - this.verbose = ['verbose'].includes(level) ? prefix ? console.log.bind(console, prefix) : console.log.bind(console) : noop; - this.log = ['verbose', 'log'].includes(level) ? prefix ? console.log.bind(console, prefix) : console.log.bind(console) : noop; - this.warn = ['verbose', 'log', 'warn'].includes(level) ? prefix ? console.warn.bind(console, prefix) : console.warn.bind(console) : noop; - this.error = ['verbose', 'log', 'warn', 'error'].includes(level) ? prefix ? console.error.bind(console, prefix) : console.error.bind(console) : noop; - this.write = (text) => { - const isRunKit = typeof process_1.default !== 'undefined' && process_1.default.env && typeof process_1.default.env.RUNKIT_ENDPOINT_PATH === 'string'; - if (text && isRunKit) { - text.split('\n').forEach(line => console.log(line)); // Logs each line separately - } - else { - console.log(text); - } - }; - } -} -exports.DebugLogger = DebugLogger; - -},{"./process":44}],37:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ID = void 0; -const cuid_1 = require("./cuid"); -// const uuid62 = require('uuid62'); -let timeBias = 0; -class ID { - /** - * (for internal use) - * bias in milliseconds to adjust generated cuid timestamps with - */ - static set timeBias(bias) { - if (typeof bias !== 'number') { - return; - } - timeBias = bias; - } - static generate() { - // Could also use https://www.npmjs.com/package/pushid for Firebase style 20 char id's - return (0, cuid_1.default)(timeBias).slice(1); // Cuts off the always leading 'c' - // return uuid62.v1(); - } -} -exports.ID = ID; - -},{"./cuid":31}],38:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ObjectCollection = exports.PartialArray = exports.SchemaDefinition = exports.Colorize = exports.ColorStyle = exports.SimpleEventEmitter = exports.SimpleCache = exports.ascii85 = exports.PathInfo = exports.Utils = exports.TypeMappings = exports.Transport = exports.EventSubscription = exports.EventPublisher = exports.EventStream = exports.PathReference = exports.ID = exports.DebugLogger = exports.OrderedCollectionProxy = exports.proxyAccess = exports.MutationsDataSnapshot = exports.DataSnapshot = exports.DataReferencesArray = exports.DataSnapshotsArray = exports.QueryDataRetrievalOptions = exports.DataRetrievalOptions = exports.DataReferenceQuery = exports.DataReference = exports.Api = exports.AceBaseBaseSettings = exports.AceBaseBase = void 0; -var acebase_base_1 = require("./acebase-base"); -Object.defineProperty(exports, "AceBaseBase", { enumerable: true, get: function () { return acebase_base_1.AceBaseBase; } }); -Object.defineProperty(exports, "AceBaseBaseSettings", { enumerable: true, get: function () { return acebase_base_1.AceBaseBaseSettings; } }); -var api_1 = require("./api"); -Object.defineProperty(exports, "Api", { enumerable: true, get: function () { return api_1.Api; } }); -var data_reference_1 = require("./data-reference"); -Object.defineProperty(exports, "DataReference", { enumerable: true, get: function () { return data_reference_1.DataReference; } }); -Object.defineProperty(exports, "DataReferenceQuery", { enumerable: true, get: function () { return data_reference_1.DataReferenceQuery; } }); -Object.defineProperty(exports, "DataRetrievalOptions", { enumerable: true, get: function () { return data_reference_1.DataRetrievalOptions; } }); -Object.defineProperty(exports, "QueryDataRetrievalOptions", { enumerable: true, get: function () { return data_reference_1.QueryDataRetrievalOptions; } }); -Object.defineProperty(exports, "DataSnapshotsArray", { enumerable: true, get: function () { return data_reference_1.DataSnapshotsArray; } }); -Object.defineProperty(exports, "DataReferencesArray", { enumerable: true, get: function () { return data_reference_1.DataReferencesArray; } }); -var data_snapshot_1 = require("./data-snapshot"); -Object.defineProperty(exports, "DataSnapshot", { enumerable: true, get: function () { return data_snapshot_1.DataSnapshot; } }); -Object.defineProperty(exports, "MutationsDataSnapshot", { enumerable: true, get: function () { return data_snapshot_1.MutationsDataSnapshot; } }); -var data_proxy_1 = require("./data-proxy"); -Object.defineProperty(exports, "proxyAccess", { enumerable: true, get: function () { return data_proxy_1.proxyAccess; } }); -Object.defineProperty(exports, "OrderedCollectionProxy", { enumerable: true, get: function () { return data_proxy_1.OrderedCollectionProxy; } }); -var debug_1 = require("./debug"); -Object.defineProperty(exports, "DebugLogger", { enumerable: true, get: function () { return debug_1.DebugLogger; } }); -var id_1 = require("./id"); -Object.defineProperty(exports, "ID", { enumerable: true, get: function () { return id_1.ID; } }); -var path_reference_1 = require("./path-reference"); -Object.defineProperty(exports, "PathReference", { enumerable: true, get: function () { return path_reference_1.PathReference; } }); -var subscription_1 = require("./subscription"); -Object.defineProperty(exports, "EventStream", { enumerable: true, get: function () { return subscription_1.EventStream; } }); -Object.defineProperty(exports, "EventPublisher", { enumerable: true, get: function () { return subscription_1.EventPublisher; } }); -Object.defineProperty(exports, "EventSubscription", { enumerable: true, get: function () { return subscription_1.EventSubscription; } }); -exports.Transport = require("./transport"); -var type_mappings_1 = require("./type-mappings"); -Object.defineProperty(exports, "TypeMappings", { enumerable: true, get: function () { return type_mappings_1.TypeMappings; } }); -exports.Utils = require("./utils"); -var path_info_1 = require("./path-info"); -Object.defineProperty(exports, "PathInfo", { enumerable: true, get: function () { return path_info_1.PathInfo; } }); -var ascii85_1 = require("./ascii85"); -Object.defineProperty(exports, "ascii85", { enumerable: true, get: function () { return ascii85_1.ascii85; } }); -var simple_cache_1 = require("./simple-cache"); -Object.defineProperty(exports, "SimpleCache", { enumerable: true, get: function () { return simple_cache_1.SimpleCache; } }); -var simple_event_emitter_1 = require("./simple-event-emitter"); -Object.defineProperty(exports, "SimpleEventEmitter", { enumerable: true, get: function () { return simple_event_emitter_1.SimpleEventEmitter; } }); -var simple_colors_1 = require("./simple-colors"); -Object.defineProperty(exports, "ColorStyle", { enumerable: true, get: function () { return simple_colors_1.ColorStyle; } }); -Object.defineProperty(exports, "Colorize", { enumerable: true, get: function () { return simple_colors_1.Colorize; } }); -var schema_1 = require("./schema"); -Object.defineProperty(exports, "SchemaDefinition", { enumerable: true, get: function () { return schema_1.SchemaDefinition; } }); -var partial_array_1 = require("./partial-array"); -Object.defineProperty(exports, "PartialArray", { enumerable: true, get: function () { return partial_array_1.PartialArray; } }); -const object_collection_1 = require("./object-collection"); -Object.defineProperty(exports, "ObjectCollection", { enumerable: true, get: function () { return object_collection_1.ObjectCollection; } }); - -},{"./acebase-base":27,"./api":28,"./ascii85":29,"./data-proxy":33,"./data-reference":34,"./data-snapshot":35,"./debug":36,"./id":37,"./object-collection":39,"./partial-array":41,"./path-info":42,"./path-reference":43,"./schema":45,"./simple-cache":46,"./simple-colors":47,"./simple-event-emitter":48,"./subscription":49,"./transport":50,"./type-mappings":51,"./utils":52}],39:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ObjectCollection = void 0; -const id_1 = require("./id"); -/** - * Convenience interface for defining an object collection - * @example - * type ChatMessage = { - * text: string, uid: string, sent: Date - * } - * type Chat = { - * title: text - * messages: ObjectCollection - * } - */ -class ObjectCollection { - /** - * Converts and array of values into an object collection, generating a unique key for each item in the array - * @param array - * @example - * const array = [ - * { title: "Don't make me think!", author: "Steve Krug" }, - * { title: "The tipping point", author: "Malcolm Gladwell" } - * ]; - * - * // Convert: - * const collection = ObjectCollection.from(array); - * // --> { - * // kh1x3ygb000120r7ipw6biln: { - * // title: "Don't make me think!", - * // author: "Steve Krug" - * // }, - * // kh1x3ygb000220r757ybpyec: { - * // title: "The tipping point", - * // author: "Malcolm Gladwell" - * // } - * // } - * - * // Now it's easy to add them to the db: - * db.ref('books').update(collection); - */ - static from(array) { - const collection = {}; - array.forEach(child => { - collection[id_1.ID.generate()] = child; - }); - return collection; - } -} -exports.ObjectCollection = ObjectCollection; - -},{"./id":37}],40:[function(require,module,exports){ -"use strict"; -// Optional dependency on rxjs package. If rxjs is installed into your project, you'll get the correct -// typings for AceBase methods that use Observables, and you'll be able to use them. If you don't use -// those methods, there is no need to install rxjs. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ObservableShim = exports.setObservable = exports.getObservable = void 0; -let _observable; -function getObservable() { - if (_observable) { - return _observable; - } - if (typeof window !== 'undefined' && window.Observable) { - _observable = window.Observable; - return _observable; - } - try { - // eslint-disable-next-line @typescript-eslint/no-var-requires - const { Observable } = require('rxjs'); // fails in ESM module, need an elegant way to handle this. Can't use dynamic import() because it 1) requires Node 12+ and 2) causes Webpack build to fail if rxjs is not installed - if (!Observable) { - throw new Error('not loaded'); - } - _observable = Observable; - return Observable; - } - catch (err) { - throw new Error('RxJS Observable could not be loaded. If you are using a browser build, add it to AceBase using db.setObservable. For node.js builds, add it to your project with: npm i rxjs'); - } -} -exports.getObservable = getObservable; -function setObservable(Observable) { - if (Observable === 'shim') { - console.warn('Using AceBase\'s simple Observable shim. Only use this if you know what you\'re doing.'); - Observable = ObservableShim; - } - _observable = Observable; -} -exports.setObservable = setObservable; -/** - * rxjs is an optional dependency that only needs installing when any of AceBase's observe methods are used. - * If for some reason rxjs is not available (eg in test suite), we can provide a shim. This class is used when - * `db.setObservable("shim")` is called - */ -class ObservableShim { - constructor(create) { - this._active = false; - this._subscribers = []; - this._create = create; - } - subscribe(subscriber) { - if (!this._active) { - const next = (value) => { - // emit value to all subscribers - this._subscribers.forEach(s => { - try { - s(value); - } - catch (err) { - console.error('Error in subscriber callback:', err); - } - }); - }; - const observer = { next }; - this._cleanup = this._create(observer); - this._active = true; - } - this._subscribers.push(subscriber); - const unsubscribe = () => { - this._subscribers.splice(this._subscribers.indexOf(subscriber), 1); - if (this._subscribers.length === 0) { - this._active = false; - this._cleanup(); - } - }; - const subscription = { - unsubscribe, - }; - return subscription; - } -} -exports.ObservableShim = ObservableShim; - -},{"rxjs":53}],41:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PartialArray = void 0; -/** - * Sparse/partial array converted to a serializable object. Use `Object.keys(sparseArray)` and `Object.values(sparseArray)` to iterate its indice and/or values - */ -class PartialArray { - constructor(sparseArray) { - if (sparseArray instanceof Array) { - for (let i = 0; i < sparseArray.length; i++) { - if (typeof sparseArray[i] !== 'undefined') { - this[i] = sparseArray[i]; - } - } - } - else if (sparseArray) { - Object.assign(this, sparseArray); - } - } -} -exports.PartialArray = PartialArray; - -},{}],42:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PathInfo = void 0; -function getPathKeys(path) { - path = path.replace(/\[/g, '/[').replace(/^\/+/, '').replace(/\/+$/, ''); // Replace [ with /[, remove leading slashes, remove trailing slashes - if (path.length === 0) { - return []; - } - const keys = path.split('/'); - return keys.map(key => { - return key.startsWith('[') ? parseInt(key.slice(1, -1)) : key; - }); -} -class PathInfo { - constructor(path) { - if (typeof path === 'string') { - this.keys = getPathKeys(path); - } - else if (path instanceof Array) { - this.keys = path; - } - this.path = this.keys.reduce((path, key, i) => i === 0 ? `${key}` : typeof key === 'string' ? `${path}/${key}` : `${path}[${key}]`, ''); - } - static get(path) { - return new PathInfo(path); - } - static getChildPath(path, childKey) { - // return getChildPath(path, childKey); - return PathInfo.get(path).child(childKey).path; - } - static getPathKeys(path) { - return getPathKeys(path); - } - get key() { - return this.keys.length === 0 ? null : this.keys.slice(-1)[0]; - } - get parent() { - if (this.keys.length == 0) { - return null; - } - const parentKeys = this.keys.slice(0, -1); - return new PathInfo(parentKeys); - } - get parentPath() { - return this.keys.length === 0 ? null : this.parent.path; - } - child(childKey) { - if (typeof childKey === 'string') { - childKey = getPathKeys(childKey); - } - return new PathInfo(this.keys.concat(childKey)); - } - childPath(childKey) { - return this.child(childKey).path; - } - get pathKeys() { - return this.keys; - } - /** - * If varPath contains variables or wildcards, it will return them with the values found in fullPath - * @param {string} varPath path containing variables such as * and $name - * @param {string} fullPath real path to a node - * @returns {{ [index: number]: string|number, [variable: string]: string|number }} returns an array-like object with all variable values. All named variables are also set on the array by their name (eg vars.uid and vars.$uid) - * @example - * PathInfo.extractVariables('users/$uid/posts/$postid', 'users/ewout/posts/post1/title') === { - * 0: 'ewout', - * 1: 'post1', - * uid: 'ewout', // or $uid - * postid: 'post1' // or $postid - * }; - * - * PathInfo.extractVariables('users/*\/posts/*\/$property', 'users/ewout/posts/post1/title') === { - * 0: 'ewout', - * 1: 'post1', - * 2: 'title', - * property: 'title' // or $property - * }; - * - * PathInfo.extractVariables('users/$user/friends[*]/$friend', 'users/dora/friends[4]/diego') === { - * 0: 'dora', - * 1: 4, - * 2: 'diego', - * user: 'dora', // or $user - * friend: 'diego' // or $friend - * }; - */ - static extractVariables(varPath, fullPath) { - if (!varPath.includes('*') && !varPath.includes('$')) { - return []; - } - // if (!this.equals(fullPath)) { - // throw new Error(`path does not match with the path of this PathInfo instance: info.equals(path) === false!`) - // } - const keys = getPathKeys(varPath); - const pathKeys = getPathKeys(fullPath); - let count = 0; - const variables = { - get length() { return count; }, - }; - keys.forEach((key, index) => { - const pathKey = pathKeys[index]; - if (key === '*') { - variables[count++] = pathKey; - } - else if (typeof key === 'string' && key[0] === '$') { - variables[count++] = pathKey; - // Set the $variable property - variables[key] = pathKey; - // Set friendly property name (without $) - const varName = key.slice(1); - if (typeof variables[varName] === 'undefined') { - variables[varName] = pathKey; - } - } - }); - return variables; - } - /** - * If varPath contains variables or wildcards, it will return a path with the variables replaced by the keys found in fullPath. - * @example - * PathInfo.fillVariables('users/$uid/posts/$postid', 'users/ewout/posts/post1/title') === 'users/ewout/posts/post1' - */ - static fillVariables(varPath, fullPath) { - if (varPath.indexOf('*') < 0 && varPath.indexOf('$') < 0) { - return varPath; - } - const keys = getPathKeys(varPath); - const pathKeys = getPathKeys(fullPath); - const merged = keys.map((key, index) => { - if (key === pathKeys[index] || index >= pathKeys.length) { - return key; - } - else if (typeof key === 'string' && (key === '*' || key[0] === '$')) { - return pathKeys[index]; - } - else { - throw new Error(`Path "${fullPath}" cannot be used to fill variables of path "${varPath}" because they do not match`); - } - }); - let mergedPath = ''; - merged.forEach(key => { - if (typeof key === 'number') { - mergedPath += `[${key}]`; - } - else { - if (mergedPath.length > 0) { - mergedPath += '/'; - } - mergedPath += key; - } - }); - return mergedPath; - } - /** - * Replaces all variables in a path with the values in the vars argument - * @param varPath path containing variables - * @param vars variables object such as one gotten from PathInfo.extractVariables - */ - static fillVariables2(varPath, vars) { - if (typeof vars !== 'object' || Object.keys(vars).length === 0) { - return varPath; // Nothing to fill - } - const pathKeys = getPathKeys(varPath); - let n = 0; - const targetPath = pathKeys.reduce((path, key) => { - if (typeof key === 'string' && (key === '*' || key.startsWith('$'))) { - return PathInfo.getChildPath(path, vars[n++]); - } - else { - return PathInfo.getChildPath(path, key); - } - }, ''); - return targetPath; - } - /** - * Checks if a given path matches this path, eg "posts/*\/title" matches "posts/12344/title" and "users/123/name" matches "users/$uid/name" - */ - equals(otherPath) { - const other = otherPath instanceof PathInfo ? otherPath : new PathInfo(otherPath); - if (this.path === other.path) { - return true; - } // they are identical - if (this.keys.length !== other.keys.length) { - return false; - } - return this.keys.every((key, index) => { - const otherKey = other.keys[index]; - return otherKey === key - || (typeof otherKey === 'string' && (otherKey === '*' || otherKey[0] === '$')) - || (typeof key === 'string' && (key === '*' || key[0] === '$')); - }); - } - /** - * Checks if a given path is an ancestor, eg "posts" is an ancestor of "posts/12344/title" - */ - isAncestorOf(descendantPath) { - const descendant = descendantPath instanceof PathInfo ? descendantPath : new PathInfo(descendantPath); - if (descendant.path === '' || this.path === descendant.path) { - return false; - } - if (this.path === '') { - return true; - } - if (this.keys.length >= descendant.keys.length) { - return false; - } - return this.keys.every((key, index) => { - const otherKey = descendant.keys[index]; - return otherKey === key - || (typeof otherKey === 'string' && (otherKey === '*' || otherKey[0] === '$')) - || (typeof key === 'string' && (key === '*' || key[0] === '$')); - }); - } - /** - * Checks if a given path is a descendant, eg "posts/1234/title" is a descendant of "posts" - */ - isDescendantOf(ancestorPath) { - const ancestor = ancestorPath instanceof PathInfo ? ancestorPath : new PathInfo(ancestorPath); - if (this.path === '' || this.path === ancestor.path) { - return false; - } - if (ancestorPath === '') { - return true; - } - if (ancestor.keys.length >= this.keys.length) { - return false; - } - return ancestor.keys.every((key, index) => { - const otherKey = this.keys[index]; - return otherKey === key - || (typeof otherKey === 'string' && (otherKey === '*' || otherKey[0] === '$')) - || (typeof key === 'string' && (key === '*' || key[0] === '$')); - }); - } - /** - * Checks if the other path is on the same trail as this path. Paths on the same trail if they share a - * common ancestor. Eg: "posts" is on the trail of "posts/1234/title" and vice versa. - */ - isOnTrailOf(otherPath) { - const other = otherPath instanceof PathInfo ? otherPath : new PathInfo(otherPath); - if (this.path.length === 0 || other.path.length === 0) { - return true; - } - if (this.path === other.path) { - return true; - } - return this.pathKeys.every((key, index) => { - if (index >= other.keys.length) { - return true; - } - const otherKey = other.keys[index]; - return otherKey === key - || (typeof otherKey === 'string' && (otherKey === '*' || otherKey[0] === '$')) - || (typeof key === 'string' && (key === '*' || key[0] === '$')); - }); - } - /** - * Checks if a given path is a direct child, eg "posts/1234/title" is a child of "posts/1234" - */ - isChildOf(otherPath) { - const other = otherPath instanceof PathInfo ? otherPath : new PathInfo(otherPath); - if (this.path === '') { - return false; - } // If our path is the root, it's nobody's child... - return this.parent.equals(other); - } - /** - * Checks if a given path is its parent, eg "posts/1234" is the parent of "posts/1234/title" - */ - isParentOf(otherPath) { - const other = otherPath instanceof PathInfo ? otherPath : new PathInfo(otherPath); - if (other.path === '') { - return false; - } // If the other path is the root, this path cannot be its parent - return this.equals(other.parent); - } -} -exports.PathInfo = PathInfo; - -},{}],43:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PathReference = void 0; -class PathReference { - /** - * Creates a reference to a path that can be stored in the database. Use this to create cross-references to other data in your database - * @param path - */ - constructor(path) { - this.path = path; - } -} -exports.PathReference = PathReference; - -},{}],44:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = { - // eslint-disable-next-line @typescript-eslint/ban-types - nextTick(fn) { - setTimeout(fn, 0); - }, -}; - -},{}],45:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SchemaDefinition = void 0; -// parses a typestring, creates checker functions -function parse(definition) { - // tokenize - let pos = 0; - function consumeSpaces() { - let c; - while (c = definition[pos], [' ', '\r', '\n', '\t'].includes(c)) { - pos++; - } - } - function consumeCharacter(c) { - if (definition[pos] !== c) { - throw new Error(`Unexpected character at position ${pos}. Expected: '${c}', found '${definition[pos]}'`); - } - pos++; - } - function readProperty() { - consumeSpaces(); - const prop = { name: '', optional: false, wildcard: false }; - let c; - while (c = definition[pos], c === '_' || c === '$' || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (prop.name.length > 0 && c >= '0' && c <= '9') || (prop.name.length === 0 && c === '*')) { - prop.name += c; - pos++; - } - if (prop.name.length === 0) { - throw new Error(`Property name expected at position ${pos}, found: ${definition.slice(pos, pos + 10)}..`); - } - if (definition[pos] === '?') { - prop.optional = true; - pos++; - } - if (prop.name === '*' || prop.name[0] === '$') { - prop.optional = true; - prop.wildcard = true; - } - consumeSpaces(); - consumeCharacter(':'); - return prop; - } - function readType() { - consumeSpaces(); - let type = { typeOf: 'any' }, c; - // try reading simple type first: (string,number,boolean,Date etc) - let name = ''; - while (c = definition[pos], (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { - name += c; - pos++; - } - if (name.length === 0) { - if (definition[pos] === '*') { - // any value - consumeCharacter('*'); - type.typeOf = 'any'; - } - else if (['\'', '"', '`'].includes(definition[pos])) { - // Read string value - type.typeOf = 'string'; - type.value = ''; - const quote = definition[pos]; - consumeCharacter(quote); - while (c = definition[pos], c && c !== quote) { - type.value += c; - pos++; - } - consumeCharacter(quote); - } - else if (definition[pos] >= '0' && definition[pos] <= '9') { - // read numeric value - type.typeOf = 'number'; - let nr = ''; - while (c = definition[pos], c === '.' || c === 'n' || (c >= '0' && c <= '9')) { - nr += c; - pos++; - } - if (nr.endsWith('n')) { - type.value = BigInt(nr); - } - else if (nr.includes('.')) { - type.value = parseFloat(nr); - } - else { - type.value = parseInt(nr); - } - } - else if (definition[pos] === '{') { - // Read object (interface) definition - consumeCharacter('{'); - type.typeOf = 'object'; - type.instanceOf = Object; - // Read children: - type.children = []; - while (true) { - const prop = readProperty(); - const types = readTypes(); - type.children.push({ name: prop.name, optional: prop.optional, wildcard: prop.wildcard, types }); - consumeSpaces(); - if (definition[pos] === '}') { - break; - } - consumeCharacter(','); - } - consumeCharacter('}'); - } - else if (definition[pos] === '/') { - // Read regular expression definition - consumeCharacter('/'); - let pattern = '', flags = ''; - while (c = definition[pos], c !== '/' || pattern.endsWith('\\')) { - pattern += c; - pos++; - } - consumeCharacter('/'); - while (c = definition[pos], ['g', 'i', 'm', 's', 'u', 'y', 'd'].includes(c)) { - flags += c; - pos++; - } - type.typeOf = 'string'; - type.matches = new RegExp(pattern, flags); - } - else { - throw new Error(`Expected a type definition at position ${pos}, found character '${definition[pos]}'`); - } - } - else if (['string', 'number', 'boolean', 'bigint', 'undefined', 'String', 'Number', 'Boolean', 'BigInt'].includes(name)) { - type.typeOf = name.toLowerCase(); - } - else if (name === 'Object' || name === 'object') { - type.typeOf = 'object'; - type.instanceOf = Object; - } - else if (name === 'Date') { - type.typeOf = 'object'; - type.instanceOf = Date; - } - else if (name === 'Binary' || name === 'binary') { - type.typeOf = 'object'; - type.instanceOf = ArrayBuffer; - } - else if (name === 'any') { - type.typeOf = 'any'; - } - else if (name === 'null') { - // This is ignored, null values are not stored in the db (null indicates deletion) - type.typeOf = 'object'; - type.value = null; - } - else if (name === 'Array') { - // Read generic Array defintion - consumeCharacter('<'); - type.typeOf = 'object'; - type.instanceOf = Array; //name; - type.genericTypes = readTypes(); - consumeCharacter('>'); - } - else if (['true', 'false'].includes(name)) { - type.typeOf = 'boolean'; - type.value = name === 'true'; - } - else { - throw new Error(`Unknown type at position ${pos}: "${type}"`); - } - // Check if it's an Array of given type (eg: string[] or string[][]) - // Also converts to generics, string[] becomes Array, string[][] becomes Array> - consumeSpaces(); - while (definition[pos] === '[') { - consumeCharacter('['); - consumeCharacter(']'); - type = { typeOf: 'object', instanceOf: Array, genericTypes: [type] }; - } - return type; - } - function readTypes() { - consumeSpaces(); - const types = [readType()]; - while (definition[pos] === '|') { - consumeCharacter('|'); - types.push(readType()); - consumeSpaces(); - } - return types; - } - return readType(); -} -function checkObject(path, properties, obj, partial) { - // Are there any properties that should not be in there? - const invalidProperties = properties.find(prop => prop.name === '*' || prop.name[0] === '$') // Only if no wildcard properties are allowed - ? [] - : Object.keys(obj).filter(key => ![null, undefined].includes(obj[key]) // Ignore null or undefined values - && !properties.find(prop => prop.name === key)); - if (invalidProperties.length > 0) { - return { ok: false, reason: `Object at path "${path}" cannot have propert${invalidProperties.length === 1 ? 'y' : 'ies'} ${invalidProperties.map(p => `"${p}"`).join(', ')}` }; - } - // Loop through properties that should be present - function checkProperty(property) { - const hasValue = ![null, undefined].includes(obj[property.name]); - if (!property.optional && (partial ? obj[property.name] === null : !hasValue)) { - return { ok: false, reason: `Property at path "${path}/${property.name}" is not optional` }; - } - if (hasValue && property.types.length === 1) { - return checkType(`${path}/${property.name}`, property.types[0], obj[property.name], false); - } - if (hasValue && !property.types.some(type => checkType(`${path}/${property.name}`, type, obj[property.name], false).ok)) { - return { ok: false, reason: `Property at path "${path}/${property.name}" does not match any of ${property.types.length} allowed types` }; - } - return { ok: true }; - } - const namedProperties = properties.filter(prop => !prop.wildcard); - const failedProperty = namedProperties.find(prop => !checkProperty(prop).ok); - if (failedProperty) { - const reason = checkProperty(failedProperty).reason; - return { ok: false, reason }; - } - const wildcardProperty = properties.find(prop => prop.wildcard); - if (!wildcardProperty) { - return { ok: true }; - } - const wildcardChildKeys = Object.keys(obj).filter(key => !namedProperties.find(prop => prop.name === key)); - let result = { ok: true }; - for (let i = 0; i < wildcardChildKeys.length && result.ok; i++) { - const childKey = wildcardChildKeys[i]; - result = checkProperty({ name: childKey, types: wildcardProperty.types, optional: true, wildcard: true }); - } - return result; -} -function checkType(path, type, value, partial, trailKeys) { - const ok = { ok: true }; - if (type.typeOf === 'any') { - return ok; - } - if (trailKeys instanceof Array && trailKeys.length > 0) { - // The value to check resides in a descendant path of given type definition. - // Recursivly check child type definitions to find a match - if (type.typeOf !== 'object') { - return { ok: false, reason: `path "${path}" must be typeof ${type.typeOf}` }; // given value resides in a child path, but parent is not allowed be an object. - } - if (!type.children) { - return ok; - } - const childKey = trailKeys[0]; - let property = type.children.find(prop => prop.name === childKey); - if (!property) { - property = type.children.find(prop => prop.name === '*' || prop.name[0] === '$'); - } - if (!property) { - return { ok: false, reason: `Object at path "${path}" cannot have property "${childKey}"` }; - } - if (property.optional && value === null && trailKeys.length === 1) { - return ok; - } - let result; - property.types.some(type => { - const childPath = typeof childKey === 'number' ? `${path}[${childKey}]` : `${path}/${childKey}`; - result = checkType(childPath, type, value, partial, trailKeys.slice(1)); - return result.ok; - }); - return result; - } - if (value === null) { - return ok; - } - if (type.instanceOf === Object && (typeof value !== 'object' || value instanceof Array || value instanceof Date)) { - return { ok: false, reason: `path "${path}" must be an object collection` }; - } - if (type.instanceOf && (typeof value !== 'object' || value.constructor !== type.instanceOf)) { // !(value instanceof type.instanceOf) // value.constructor.name !== type.instanceOf - return { ok: false, reason: `path "${path}" must be an instance of ${type.instanceOf.name}` }; - } - if ('value' in type && value !== type.value) { - return { ok: false, reason: `path "${path}" must be value: ${type.value}` }; - } - if (typeof value !== type.typeOf) { - return { ok: false, reason: `path "${path}" must be typeof ${type.typeOf}` }; - } - if (type.instanceOf === Array && type.genericTypes && !value.every(v => type.genericTypes.some(t => checkType(path, t, v, false).ok))) { - return { ok: false, reason: `every array value of path "${path}" must match one of the specified types` }; - } - if (type.typeOf === 'object' && type.children) { - return checkObject(path, type.children, value, partial); - } - if (type.matches && !type.matches.test(value)) { - return { ok: false, reason: `path "${path}" must match regular expression /${type.matches.source}/${type.matches.flags}` }; - } - return ok; -} -// eslint-disable-next-line @typescript-eslint/ban-types -function getConstructorType(val) { - switch (val) { - case String: return 'string'; - case Number: return 'number'; - case Boolean: return 'boolean'; - case Date: return 'Date'; - case BigInt: return 'bigint'; - case Array: throw new Error('Schema error: Array cannot be used without a type. Use string[] or Array instead'); - default: throw new Error(`Schema error: unknown type used: ${val.name}`); - } -} -class SchemaDefinition { - constructor(definition) { - this.source = definition; - if (typeof definition === 'object') { - // Turn object into typescript definitions - // eg: - // const example = { - // name: String, - // born: Date, - // instrument: "'guitar'|'piano'", - // "address?": { - // street: String - // } - // }; - // Resulting ts: "{name:string,born:Date,instrument:'guitar'|'piano',address?:{street:string}}" - const toTS = obj => { - return '{' + Object.keys(obj) - .map(key => { - let val = obj[key]; - if (val === undefined) { - val = 'undefined'; - } - else if (val instanceof RegExp) { - val = `/${val.source}/${val.flags}`; - } - else if (typeof val === 'object') { - val = toTS(val); - } - else if (typeof val === 'function') { - val = getConstructorType(val); - } - else if (!['string', 'number', 'boolean', 'bigint'].includes(typeof val)) { - throw new Error(`Type definition for key "${key}" must be a string, number, boolean, bigint, object, regular expression, or one of these classes: String, Number, Boolean, Date, BigInt`); - } - return `${key}:${val}`; - }) - .join(',') + '}'; - }; - this.text = toTS(definition); - } - else if (typeof definition === 'string') { - this.text = definition; - } - else { - throw new Error('Type definiton must be a string or an object'); - } - this.type = parse(this.text); - } - check(path, value, partial, trailKeys) { - return checkType(path, this.type, value, partial, trailKeys); - } -} -exports.SchemaDefinition = SchemaDefinition; - -},{}],46:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SimpleCache = void 0; -const utils_1 = require("./utils"); -const calculateExpiryTime = (expirySeconds) => expirySeconds > 0 ? Date.now() + (expirySeconds * 1000) : Infinity; -/** - * Simple cache implementation that retains immutable values in memory for a limited time. - * Immutability is enforced by cloning the stored and retrieved values. To change a cached value, it will have to be `set` again with the new value. - */ -class SimpleCache { - constructor(options) { - var _a; - this.enabled = true; - if (typeof options === 'number') { - // Old signature: only expirySeconds given - options = { expirySeconds: options }; - } - options.cloneValues = options.cloneValues !== false; - if (typeof options.expirySeconds !== 'number' && typeof options.maxEntries !== 'number') { - throw new Error('Either expirySeconds or maxEntries must be specified'); - } - this.options = options; - this.cache = new Map(); - // Cleanup every minute - const interval = setInterval(() => { this.cleanUp(); }, 60 * 1000); - (_a = interval.unref) === null || _a === void 0 ? void 0 : _a.call(interval); - } - get size() { return this.cache.size; } - has(key) { - if (!this.enabled) { - return false; - } - return this.cache.has(key); - } - get(key) { - if (!this.enabled) { - return null; - } - const entry = this.cache.get(key); - if (!entry) { - return null; - } // if (!entry || entry.expires <= Date.now()) { return null; } - entry.expires = calculateExpiryTime(this.options.expirySeconds); - entry.accessed = Date.now(); - return this.options.cloneValues ? (0, utils_1.cloneObject)(entry.value) : entry.value; - } - set(key, value) { - if (this.options.maxEntries > 0 && this.cache.size >= this.options.maxEntries && !this.cache.has(key)) { - // console.warn(`* cache limit ${this.options.maxEntries} reached: ${this.cache.size}`); - // Remove an expired item or the one that was accessed longest ago - let oldest = null; - const now = Date.now(); - for (const [key, entry] of this.cache.entries()) { - if (entry.expires <= now) { - // Found an expired item. Remove it now and stop - this.cache.delete(key); - oldest = null; - break; - } - if (!oldest || entry.accessed < oldest.accessed) { - oldest = { key, accessed: entry.accessed }; - } - } - if (oldest !== null) { - this.cache.delete(oldest.key); - } - } - this.cache.set(key, { value: this.options.cloneValues ? (0, utils_1.cloneObject)(value) : value, added: Date.now(), accessed: Date.now(), expires: calculateExpiryTime(this.options.expirySeconds) }); - } - remove(key) { - this.cache.delete(key); - } - cleanUp() { - const now = Date.now(); - this.cache.forEach((entry, key) => { - if (entry.expires <= now) { - this.cache.delete(key); - } - }); - } -} -exports.SimpleCache = SimpleCache; - -},{"./utils":52}],47:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Colorize = exports.SetColorsEnabled = exports.ColorsSupported = exports.ColorStyle = void 0; -const process_1 = require("./process"); -// See from https://en.wikipedia.org/wiki/ANSI_escape_code -const FontCode = { - bold: 1, - dim: 2, - italic: 3, - underline: 4, - inverse: 7, - hidden: 8, - strikethrough: 94, -}; -const ColorCode = { - black: 30, - red: 31, - green: 32, - yellow: 33, - blue: 34, - magenta: 35, - cyan: 36, - white: 37, - grey: 90, - // Bright colors: - brightRed: 91, - // TODO, other bright colors -}; -const BgColorCode = { - bgBlack: 40, - bgRed: 41, - bgGreen: 42, - bgYellow: 43, - bgBlue: 44, - bgMagenta: 45, - bgCyan: 46, - bgWhite: 47, - bgGrey: 100, - bgBrightRed: 101, - // TODO, other bright colors -}; -const ResetCode = { - all: 0, - color: 39, - background: 49, - bold: 22, - dim: 22, - italic: 23, - underline: 24, - inverse: 27, - hidden: 28, - strikethrough: 29, -}; -var ColorStyle; -(function (ColorStyle) { - ColorStyle["reset"] = "reset"; - ColorStyle["bold"] = "bold"; - ColorStyle["dim"] = "dim"; - ColorStyle["italic"] = "italic"; - ColorStyle["underline"] = "underline"; - ColorStyle["inverse"] = "inverse"; - ColorStyle["hidden"] = "hidden"; - ColorStyle["strikethrough"] = "strikethrough"; - ColorStyle["black"] = "black"; - ColorStyle["red"] = "red"; - ColorStyle["green"] = "green"; - ColorStyle["yellow"] = "yellow"; - ColorStyle["blue"] = "blue"; - ColorStyle["magenta"] = "magenta"; - ColorStyle["cyan"] = "cyan"; - ColorStyle["grey"] = "grey"; - ColorStyle["bgBlack"] = "bgBlack"; - ColorStyle["bgRed"] = "bgRed"; - ColorStyle["bgGreen"] = "bgGreen"; - ColorStyle["bgYellow"] = "bgYellow"; - ColorStyle["bgBlue"] = "bgBlue"; - ColorStyle["bgMagenta"] = "bgMagenta"; - ColorStyle["bgCyan"] = "bgCyan"; - ColorStyle["bgWhite"] = "bgWhite"; - ColorStyle["bgGrey"] = "bgGrey"; -})(ColorStyle = exports.ColorStyle || (exports.ColorStyle = {})); -function ColorsSupported() { - // Checks for basic color support - if (typeof process_1.default === 'undefined' || !process_1.default.stdout || !process_1.default.env || !process_1.default.platform || process_1.default.platform === 'browser') { - return false; - } - if (process_1.default.platform === 'win32') { - return true; - } - const env = process_1.default.env; - if (env.COLORTERM) { - return true; - } - if (env.TERM === 'dumb') { - return false; - } - if (env.CI || env.TEAMCITY_VERSION) { - return !!env.TRAVIS; - } - if (['iTerm.app', 'HyperTerm', 'Hyper', 'MacTerm', 'Apple_Terminal', 'vscode'].includes(env.TERM_PROGRAM)) { - return true; - } - if (/^xterm-256|^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(env.TERM)) { - return true; - } - return false; -} -exports.ColorsSupported = ColorsSupported; -let _enabled = ColorsSupported(); -function SetColorsEnabled(enabled) { - _enabled = ColorsSupported() && enabled; -} -exports.SetColorsEnabled = SetColorsEnabled; -function Colorize(str, style) { - if (!_enabled) { - return str; - } - const openCodes = [], closeCodes = []; - const addStyle = style => { - if (style === ColorStyle.reset) { - openCodes.push(ResetCode.all); - } - else if (style in FontCode) { - openCodes.push(FontCode[style]); - closeCodes.push(ResetCode[style]); - } - else if (style in ColorCode) { - openCodes.push(ColorCode[style]); - closeCodes.push(ResetCode.color); - } - else if (style in BgColorCode) { - openCodes.push(BgColorCode[style]); - closeCodes.push(ResetCode.background); - } - }; - if (style instanceof Array) { - style.forEach(addStyle); - } - else { - addStyle(style); - } - // const open = '\u001b[' + openCodes.join(';') + 'm'; - // const close = '\u001b[' + closeCodes.join(';') + 'm'; - const open = openCodes.map(code => '\u001b[' + code + 'm').join(''); - const close = closeCodes.map(code => '\u001b[' + code + 'm').join(''); - // return open + str + close; - return str.split('\n').map(line => open + line + close).join('\n'); -} -exports.Colorize = Colorize; -String.prototype.colorize = function (style) { - return Colorize(this, style); -}; - -},{"./process":44}],48:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SimpleEventEmitter = void 0; -function runCallback(callback, data) { - try { - callback(data); - } - catch (err) { - console.error('Error in subscription callback', err); - } -} -class SimpleEventEmitter { - constructor() { - this._subscriptions = []; - this._oneTimeEvents = new Map(); - } - on(event, callback) { - if (this._oneTimeEvents.has(event)) { - return runCallback(callback, this._oneTimeEvents.get(event)); - } - this._subscriptions.push({ event, callback, once: false }); - return this; - } - off(event, callback) { - this._subscriptions = this._subscriptions.filter(s => s.event !== event || (callback && s.callback !== callback)); - return this; - } - once(event, callback) { - return new Promise(resolve => { - const ourCallback = (data) => { - resolve(data); - callback === null || callback === void 0 ? void 0 : callback(data); - }; - if (this._oneTimeEvents.has(event)) { - runCallback(ourCallback, this._oneTimeEvents.get(event)); - } - else { - this._subscriptions.push({ event, callback: ourCallback, once: true }); - } - }); - } - emit(event, data) { - if (this._oneTimeEvents.has(event)) { - throw new Error(`Event "${event}" was supposed to be emitted only once`); - } - for (let i = 0; i < this._subscriptions.length; i++) { - const s = this._subscriptions[i]; - if (s.event !== event) { - continue; - } - runCallback(s.callback, data); - if (s.once) { - this._subscriptions.splice(i, 1); - i--; - } - } - return this; - } - emitOnce(event, data) { - if (this._oneTimeEvents.has(event)) { - throw new Error(`Event "${event}" was supposed to be emitted only once`); - } - this.emit(event, data); - this._oneTimeEvents.set(event, data); // Mark event as being emitted once for future subscribers - this.off(event); // Remove all listeners for this event, they won't fire again - return this; - } -} -exports.SimpleEventEmitter = SimpleEventEmitter; - -},{}],49:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.EventStream = exports.EventPublisher = exports.EventSubscription = void 0; -class EventSubscription { - /** - * @param stop function that stops the subscription from receiving future events - */ - constructor(stop) { - this.stop = stop; - this._internal = { - state: 'init', - activatePromises: [], - }; - } - /** - * Notifies when subscription is activated or canceled - * @param callback optional callback to run each time activation state changes - * @returns returns a promise that resolves once activated, or rejects when it is denied (and no callback was supplied) - */ - activated(callback) { - if (callback) { - this._internal.activatePromises.push({ callback }); - if (this._internal.state === 'active') { - callback(true); - } - else if (this._internal.state === 'canceled') { - callback(false, this._internal.cancelReason); - } - } - // Changed behaviour: now also returns a Promise when the callback is used. - // This allows for 1 activated call to both handle: first activation result, - // and any future events using the callback - return new Promise((resolve, reject) => { - if (this._internal.state === 'active') { - return resolve(); - } - else if (this._internal.state === 'canceled' && !callback) { - return reject(new Error(this._internal.cancelReason)); - } - // eslint-disable-next-line @typescript-eslint/no-empty-function - const noop = () => { }; - this._internal.activatePromises.push({ - resolve, - reject: callback ? noop : reject, // Don't reject when callback is used: let callback handle this (prevents UnhandledPromiseRejection if only callback is used) - }); - }); - } - /** (for internal use) */ - _setActivationState(activated, cancelReason) { - this._internal.cancelReason = cancelReason; - this._internal.state = activated ? 'active' : 'canceled'; - while (this._internal.activatePromises.length > 0) { - const p = this._internal.activatePromises.shift(); - if (activated) { - p.callback && p.callback(true); - p.resolve && p.resolve(); - } - else { - p.callback && p.callback(false, cancelReason); - p.reject && p.reject(cancelReason); - } - } - } -} -exports.EventSubscription = EventSubscription; -class EventPublisher { - /** - * - * @param publish function that publishes a new value to subscribers, return if there are any active subscribers - * @param start function that notifies subscribers their subscription is activated - * @param cancel function that notifies subscribers their subscription has been canceled, removes all subscriptions - */ - constructor(publish, start, cancel) { - this.publish = publish; - this.start = start; - this.cancel = cancel; - } -} -exports.EventPublisher = EventPublisher; -class EventStream { - constructor(eventPublisherCallback) { - const subscribers = []; - let noMoreSubscribersCallback; - let activationState; - const _stoppedState = 'stopped (no more subscribers)'; - this.subscribe = (callback, activationCallback) => { - if (typeof callback !== 'function') { - throw new TypeError('callback must be a function'); - } - else if (activationState === _stoppedState) { - throw new Error('stream can\'t be used anymore because all subscribers were stopped'); - } - const sub = { - callback, - activationCallback: function (activated, cancelReason) { - activationCallback && activationCallback(activated, cancelReason); - this.subscription._setActivationState(activated, cancelReason); - }, - subscription: new EventSubscription(function stop() { - subscribers.splice(subscribers.indexOf(this), 1); - return checkActiveSubscribers(); - }), - }; - subscribers.push(sub); - if (typeof activationState !== 'undefined') { - if (activationState === true) { - activationCallback && activationCallback(true); - sub.subscription._setActivationState(true); - } - else if (typeof activationState === 'string') { - activationCallback && activationCallback(false, activationState); - sub.subscription._setActivationState(false, activationState); - } - } - return sub.subscription; - }; - const checkActiveSubscribers = () => { - let ret; - if (subscribers.length === 0) { - ret = noMoreSubscribersCallback && noMoreSubscribersCallback(); - activationState = _stoppedState; - } - return Promise.resolve(ret); - }; - this.unsubscribe = (callback) => { - const remove = callback - ? subscribers.filter(sub => sub.callback === callback) - : subscribers; - remove.forEach(sub => { - const i = subscribers.indexOf(sub); - subscribers.splice(i, 1); - }); - checkActiveSubscribers(); - }; - this.stop = () => { - // Stop (remove) all subscriptions - subscribers.splice(0); - checkActiveSubscribers(); - }; - /** - * For publishing side: adds a value that will trigger callbacks to all subscribers - * @param {any} val - * @returns {boolean} returns whether there are subscribers left - */ - const publish = (val) => { - subscribers.forEach(sub => { - try { - sub.callback(val); - } - catch (err) { - console.error(`Error running subscriber callback: ${err.message}`); - } - }); - if (subscribers.length === 0) { - checkActiveSubscribers(); - } - return subscribers.length > 0; - }; - /** - * For publishing side: let subscribers know their subscription is activated. Should be called only once - */ - const start = (allSubscriptionsStoppedCallback) => { - activationState = true; - noMoreSubscribersCallback = allSubscriptionsStoppedCallback; - subscribers.forEach(sub => { - sub.activationCallback && sub.activationCallback(true); - }); - }; - /** - * For publishing side: let subscribers know their subscription has been canceled. Should be called only once - */ - const cancel = (reason) => { - activationState = reason; - subscribers.forEach(sub => { - sub.activationCallback && sub.activationCallback(false, reason || new Error('unknown reason')); - }); - subscribers.splice(0); // Clear all - }; - const publisher = new EventPublisher(publish, start, cancel); - eventPublisherCallback(publisher); - } -} -exports.EventStream = EventStream; - -},{}],50:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.deserialize2 = exports.serialize2 = exports.serialize = exports.detectSerializeVersion = exports.deserialize = void 0; -const path_reference_1 = require("./path-reference"); -const utils_1 = require("./utils"); -const ascii85_1 = require("./ascii85"); -const path_info_1 = require("./path-info"); -const partial_array_1 = require("./partial-array"); -/* - There are now 2 different serialization methods for transporting values. - - v1: - The original version (v1) created an object with "map" and "val" properties. - The "map" property was made optional in v1.14.1 so they won't be present for values needing no serializing - - v2: - The new version replaces serialized values inline by objects containing ".type" and ".val" properties. - This serializing method was introduced by `export` and `import` methods because they use streaming and - are unable to prepare type mappings up-front. This format is smaller in transmission (in many cases), - and easier to read and process. - - original: { "date": (some date) } - v1 serialized: { "map": { "date": "date" }, "val": { date: "2022-04-22T07:49:23Z" } } - v2 serialized: { "date": { ".type": "date", ".val": "2022-04-22T07:49:23Z" } } - - original: (some date) - v1 serialized: { "map": "date", "val": "2022-04-22T07:49:23Z" } - v2 serialized: { ".type": "date", ".val": "2022-04-22T07:49:23Z" } - comment: top level value that need serializing is wrapped in an object with ".type" and ".val". v1 is smaller in this case - - original: 'some string' - v1 serialized: { "map": {}, "val": "some string" } - v2 serialized: "some string" - comment: primitive types such as strings don't need serializing and are returned as is in v2 - - original: { "date": (some date), "text": "Some string" } - v1 serialized: { "map": { "date": "date" }, "val": { date: "2022-04-22T07:49:23Z", "text": "Some string" } } - v2 serialized: { "date": { ".type": "date", ".val": "2022-04-22T07:49:23Z" }, "text": "Some string" } -*/ -/** - * Original deserialization method using global `map` and `val` properties - * @param data - * @returns - */ -const deserialize = (data) => { - if (data.map === null || typeof data.map === 'undefined') { - if (typeof data.val === 'undefined') { - throw new Error('serialized value must have a val property'); - } - return data.val; - } - const deserializeValue = (type, val) => { - if (type === 'date') { - // Date was serialized as a string (UTC) - return new Date(val); - } - else if (type === 'binary') { - // ascii85 encoded binary data - return ascii85_1.ascii85.decode(val); - } - else if (type === 'reference') { - return new path_reference_1.PathReference(val); - } - else if (type === 'regexp') { - return new RegExp(val.pattern, val.flags); - } - else if (type === 'array') { - return new partial_array_1.PartialArray(val); - } - else if (type === 'bigint') { - return BigInt(val); - } - return val; - }; - if (typeof data.map === 'string') { - // Single value - return deserializeValue(data.map, data.val); - } - Object.keys(data.map).forEach(path => { - const type = data.map[path]; - const keys = path_info_1.PathInfo.getPathKeys(path); - let parent = data; - let key = 'val'; - let val = data.val; - keys.forEach(k => { - key = k; - parent = val; - val = val[key]; // If an error occurs here, there's something wrong with the calling code... - }); - parent[key] = deserializeValue(type, val); - }); - return data.val; -}; -exports.deserialize = deserialize; -/** - * Function to detect the used serialization method with for the given object - * @param data - * @returns - */ -const detectSerializeVersion = (data) => { - if (typeof data !== 'object' || data === null) { - // This can only be v2, which allows primitive types to bypass serializing - return 2; - } - if ('map' in data && 'val' in data) { - return 1; - } - else if ('val' in data) { - // If it's v1, 'val' will be the only key in the object because serialize2 adds ".version": 2 to the object to prevent confusion. - if (Object.keys(data).length > 1) { - return 2; - } - return 1; - } - return 2; -}; -exports.detectSerializeVersion = detectSerializeVersion; -/** - * Original serialization method using global `map` and `val` properties - * @param data - * @returns - */ -const serialize = (obj) => { - var _a; - // Recursively find dates and binary data - if (obj === null || typeof obj !== 'object' || obj instanceof Date || obj instanceof ArrayBuffer || obj instanceof path_reference_1.PathReference || obj instanceof RegExp) { - // Single value - const ser = (0, exports.serialize)({ value: obj }); - return { - map: (_a = ser.map) === null || _a === void 0 ? void 0 : _a.value, - val: ser.val.value, - }; - } - obj = (0, utils_1.cloneObject)(obj); // Make sure we don't alter the original object - const process = (obj, mappings, prefix) => { - if (obj instanceof partial_array_1.PartialArray) { - mappings[prefix] = 'array'; - } - Object.keys(obj).forEach(key => { - const val = obj[key]; - const path = prefix.length === 0 ? key : `${prefix}/${key}`; - if (typeof val === 'bigint') { - obj[key] = val.toString(); - mappings[path] = 'bigint'; - } - else if (val instanceof Date) { - // serialize date to UTC string - obj[key] = val.toISOString(); - mappings[path] = 'date'; - } - else if (val instanceof ArrayBuffer) { - // Serialize binary data with ascii85 - obj[key] = ascii85_1.ascii85.encode(val); //ascii85.encode(Buffer.from(val)).toString(); - mappings[path] = 'binary'; - } - else if (val instanceof path_reference_1.PathReference) { - obj[key] = val.path; - mappings[path] = 'reference'; - } - else if (val instanceof RegExp) { - // Queries using the 'matches' filter with a regular expression can now also be used on remote db's - obj[key] = { pattern: val.source, flags: val.flags }; - mappings[path] = 'regexp'; - } - else if (typeof val === 'object' && val !== null) { - process(val, mappings, path); - } - }); - }; - const mappings = {}; - process(obj, mappings, ''); - const serialized = { val: obj }; - if (Object.keys(mappings).length > 0) { - serialized.map = mappings; - } - return serialized; -}; -exports.serialize = serialize; -/** - * New serialization method using inline `.type` and `.val` properties - * @param obj - * @returns - */ -const serialize2 = (obj) => { - // Recursively find data that needs serializing - const getSerializedValue = (val) => { - if (typeof val === 'bigint') { - // serialize bigint to string - return { - '.type': 'bigint', - '.val': val.toString(), - }; - } - else if (val instanceof Date) { - // serialize date to UTC string - return { - '.type': 'date', - '.val': val.toISOString(), - }; - } - else if (val instanceof ArrayBuffer) { - // Serialize binary data with ascii85 - return { - '.type': 'binary', - '.val': ascii85_1.ascii85.encode(val), - }; - } - else if (val instanceof path_reference_1.PathReference) { - return { - '.type': 'reference', - '.val': val.path, - }; - } - else if (val instanceof RegExp) { - // Queries using the 'matches' filter with a regular expression can now also be used on remote db's - return { - '.type': 'regexp', - '.val': `/${val.source}/${val.flags}`, // new: shorter - // '.val': { - // pattern: val.source, - // flags: val.flags - // } - }; - } - else if (typeof val === 'object' && val !== null) { - if (val instanceof Array) { - const copy = []; - for (let i = 0; i < val.length; i++) { - copy[i] = getSerializedValue(val[i]); - } - return copy; - } - else { - const copy = {}; //val instanceof Array ? [] : {} as SerializedValueV2; - if (val instanceof partial_array_1.PartialArray) { - // Mark the object as partial ("sparse") array - copy['.type'] = 'array'; - } - for (const prop in val) { - copy[prop] = getSerializedValue(val[prop]); - } - return copy; - } - } - else { - // Primitive value. Don't serialize - return val; - } - }; - const serialized = getSerializedValue(obj); - if (serialized !== null && typeof serialized === 'object' && 'val' in serialized && Object.keys(serialized).length === 1) { - // acebase-core v1.14.1 made the 'map' property optional. - // This v2 serialized object might be confused with a v1 without mappings, because it only has a "val" property - // To prevent this, mark the serialized object with version 2 - serialized['.version'] = 2; - } - return serialized; -}; -exports.serialize2 = serialize2; -/** - * New deserialization method using inline `.type` and `.val` properties - * @param obj - * @returns - */ -const deserialize2 = (data) => { - if (typeof data !== 'object' || data === null) { - // primitive value, not serialized - return data; - } - if (typeof data['.type'] === 'undefined') { - // No type given: this is a plain object or array - if (data instanceof Array) { - // Plain array, deserialize items into a copy - const copy = []; - const arr = data; - for (let i = 0; i < arr.length; i++) { - copy.push((0, exports.deserialize2)(arr[i])); - } - return copy; - } - else { - // Plain object, deserialize properties into a copy - const copy = {}; - const obj = data; - for (const prop in obj) { - copy[prop] = (0, exports.deserialize2)(obj[prop]); - } - return copy; - } - } - else if (typeof data['.type'] === 'string') { - const dataType = data['.type'].toLowerCase(); - if (dataType === 'bigint') { - const val = data['.val']; - return BigInt(val); - } - else if (dataType === 'array') { - // partial ("sparse") array, deserialize children into a copy - const copy = {}; - for (const index in data) { - copy[index] = (0, exports.deserialize2)(data[index]); - } - delete copy['.type']; - return new partial_array_1.PartialArray(copy); - } - else if (dataType === 'date') { - // Date was serialized as a string (UTC) - const val = data['.val']; - return new Date(val); - } - else if (dataType === 'binary') { - // ascii85 encoded binary data - const val = data['.val']; - return ascii85_1.ascii85.decode(val); - } - else if (dataType === 'reference') { - const val = data['.val']; - return new path_reference_1.PathReference(val); - } - else if (dataType === 'regexp') { - const val = data['.val']; - if (typeof val === 'string') { - // serialized as '/(pattern)/flags' - const match = /^\/(.*)\/([a-z]+)$/.exec(val); - return new RegExp(match[1], match[2]); - } - // serialized as object with pattern & flags properties - return new RegExp(val.pattern, val.flags); - } - } - throw new Error(`Unknown data type "${data['.type']}" in serialized value`); -}; -exports.deserialize2 = deserialize2; - -},{"./ascii85":29,"./partial-array":41,"./path-info":42,"./path-reference":43,"./utils":52}],51:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TypeMappings = void 0; -const utils_1 = require("./utils"); -const path_info_1 = require("./path-info"); -const data_reference_1 = require("./data-reference"); -const data_snapshot_1 = require("./data-snapshot"); -/** - * (for internal use) - gets the mapping set for a specific path - */ -function get(mappings, path) { - // path points to the mapped (object container) location - path = path.replace(/^\/|\/$/g, ''); // trim slashes - const keys = path_info_1.PathInfo.getPathKeys(path); - const mappedPath = Object.keys(mappings).find(mpath => { - const mkeys = path_info_1.PathInfo.getPathKeys(mpath); - if (mkeys.length !== keys.length) { - return false; // Can't be a match - } - return mkeys.every((mkey, index) => { - if (mkey === '*' || mkey[0] === '$') { - return true; // wildcard - } - return mkey === keys[index]; - }); - }); - const mapping = mappings[mappedPath]; - return mapping; -} -/** - * (for internal use) - gets the mapping set for a specific path's parent - */ -function map(mappings, path) { - // path points to the object location, its parent should have the mapping - const targetPath = path_info_1.PathInfo.get(path).parentPath; - if (targetPath === null) { - return; - } - return get(mappings, targetPath); -} -/** - * (for internal use) - gets all mappings set for a specific path and all subnodes - * @returns returns array of all matched mappings in path - */ -function mapDeep(mappings, entryPath) { - // returns mapping for this node, and all mappings for nested nodes - // entryPath: "users/ewout" - // mappingPath: "users" - // mappingPath: "users/*/posts" - entryPath = entryPath.replace(/^\/|\/$/g, ''); // trim slashes - // Start with current path's parent node - const pathInfo = path_info_1.PathInfo.get(entryPath); - const startPath = pathInfo.parentPath; - const keys = startPath ? path_info_1.PathInfo.getPathKeys(startPath) : []; - // Every path that starts with startPath, is a match - // TODO: refactor to return Object.keys(mappings),filter(...) - const matches = Object.keys(mappings).reduce((m, mpath) => { - //const mkeys = mpath.length > 0 ? mpath.split("/") : []; - const mkeys = path_info_1.PathInfo.getPathKeys(mpath); - if (mkeys.length < keys.length) { - return m; // Can't be a match - } - let isMatch = true; - if (keys.length === 0 && startPath !== null) { - // Only match first node's children if mapping pattern is "*" or "$variable" - isMatch = mkeys.length === 1 && (mkeys[0] === '*' || mkeys[0][0] === '$'); - } - else { - mkeys.every((mkey, index) => { - if (index >= keys.length) { - return false; // stop .every loop - } - else if (mkey === '*' || mkey[0] === '$' || mkey === keys[index]) { - return true; // continue .every loop - } - else { - isMatch = false; - return false; // stop .every loop - } - }); - } - if (isMatch) { - const mapping = mappings[mpath]; - m.push({ path: mpath, type: mapping }); - } - return m; - }, []); - return matches; -} -/** - * (for internal use) - serializes or deserializes an object using type mappings - * @returns returns the (de)serialized value - */ -function process(db, mappings, path, obj, action) { - if (obj === null || typeof obj !== 'object') { - return obj; - } - const keys = path_info_1.PathInfo.getPathKeys(path); // path.length > 0 ? path.split("/") : []; - const m = mapDeep(mappings, path); - const changes = []; - m.sort((a, b) => path_info_1.PathInfo.getPathKeys(a.path).length > path_info_1.PathInfo.getPathKeys(b.path).length ? -1 : 1); // Deepest paths first - m.forEach(mapping => { - const mkeys = path_info_1.PathInfo.getPathKeys(mapping.path); //mapping.path.length > 0 ? mapping.path.split("/") : []; - mkeys.push('*'); - const mTrailKeys = mkeys.slice(keys.length); - if (mTrailKeys.length === 0) { - const vars = path_info_1.PathInfo.extractVariables(mapping.path, path); - const ref = new data_reference_1.DataReference(db, path, vars); - if (action === 'serialize') { - // serialize this object - obj = mapping.type.serialize(obj, ref); - } - else if (action === 'deserialize') { - // deserialize this object - const snap = new data_snapshot_1.DataSnapshot(ref, obj); - obj = mapping.type.deserialize(snap); - } - return; - } - // Find all nested objects at this trail path - const process = (parentPath, parent, keys) => { - if (obj === null || typeof obj !== 'object') { - return obj; - } - const key = keys[0]; - let children = []; - if (key === '*' || key[0] === '$') { - // Include all children - if (parent instanceof Array) { - children = parent.map((val, index) => ({ key: index, val })); - } - else { - children = Object.keys(parent).map(k => ({ key: k, val: parent[k] })); - } - } - else { - // Get the 1 child - const child = parent[key]; - if (typeof child === 'object') { - children.push({ key, val: child }); - } - } - children.forEach(child => { - const childPath = path_info_1.PathInfo.getChildPath(parentPath, child.key); - const vars = path_info_1.PathInfo.extractVariables(mapping.path, childPath); - const ref = new data_reference_1.DataReference(db, childPath, vars); - if (keys.length === 1) { - // TODO: this alters the existing object, we must build our own copy! - if (action === 'serialize') { - // serialize this object - changes.push({ parent, key: child.key, original: parent[child.key] }); - parent[child.key] = mapping.type.serialize(child.val, ref); - } - else if (action === 'deserialize') { - // deserialize this object - const snap = new data_snapshot_1.DataSnapshot(ref, child.val); - parent[child.key] = mapping.type.deserialize(snap); - } - } - else { - // Dig deeper - process(childPath, child.val, keys.slice(1)); - } - }); - }; - process(path, obj, mTrailKeys); - }); - if (action === 'serialize') { - // Clone this serialized object so any types that remained - // will become plain objects without functions, and we can restore - // the original object's values if any mappings were processed. - // This will also prevent circular references - obj = (0, utils_1.cloneObject)(obj); - if (changes.length > 0) { - // Restore the changes made to the original object - changes.forEach(change => { - change.parent[change.key] = change.original; - }); - } - } - return obj; -} -const _mappings = Symbol('mappings'); -class TypeMappings { - constructor(db) { - this.db = db; - this[_mappings] = {}; - } - /** (for internal use) */ - get mappings() { return this[_mappings]; } - /** (for internal use) */ - map(path) { - return map(this[_mappings], path); - } - /** - * Maps objects that are stored in a specific path to a class, so they can automatically be - * serialized when stored to, and deserialized (instantiated) when loaded from the database. - * @param path path to an object container, eg "users" or "users/*\/posts" - * @param type class to bind all child objects of path to - * Best practice is to implement 2 methods for instantiation and serializing of your objects: - * 1) `static create(snap: DataSnapshot)` and 2) `serialize(ref: DataReference)`. See example - * @param options (optional) You can specify the functions to use to - * serialize and/or instantiate your class. If you do not specificy a creator (constructor) method, - * AceBase will call `YourClass.create(snapshot)` method if it exists, or create an instance of - * YourClass with `new YourClass(snapshot)`. - * If you do not specifiy a serializer method, AceBase will call `YourClass.prototype.serialize(ref)` - * if it exists, or tries storing your object's fields unaltered. NOTE: `this` in your creator - * function will point to `YourClass`, and `this` in your serializer function will point to the - * `instance` of `YourClass`. - * @example - * class User { - * static create(snap: DataSnapshot): User { - * // Deserialize (instantiate) User from plain database object - * let user = new User(); - * Object.assign(user, snap.val()); // Copy all properties to user - * user.id = snap.ref.key; // Add the key as id - * return user; - * } - * serialize(ref: DataReference) { - * // Serialize user for database storage - * return { - * name: this.name - * email: this.email - * }; - * } - * } - * db.types.bind('users', User); // Automatically uses serialize and static create methods - */ - bind(path, type, options = {}) { - // Maps objects that are stored in a specific path to a constructor method, - // so they are automatically deserialized - if (typeof path !== 'string') { - throw new TypeError('path must be a string'); - } - if (typeof type !== 'function') { - throw new TypeError('constructor must be a function'); - } - if (typeof options.serializer === 'undefined') { - // if (typeof type.prototype.serialize === 'function') { - // // Use .serialize instance method - // options.serializer = type.prototype.serialize; - // } - // Use object's serialize method upon serialization (if available) - } - else if (typeof options.serializer === 'string') { - if (typeof type.prototype[options.serializer] === 'function') { - options.serializer = type.prototype[options.serializer]; - } - else { - throw new TypeError(`${type.name}.prototype.${options.serializer} is not a function, cannot use it as serializer`); - } - } - else if (typeof options.serializer !== 'function') { - throw new TypeError(`serializer for class ${type.name} must be a function, or the name of a prototype method`); - } - if (typeof options.creator === 'undefined') { - if (typeof type.create === 'function') { - // Use static .create as creator method - options.creator = type.create; - } - } - else if (typeof options.creator === 'string') { - if (typeof type[options.creator] === 'function') { - options.creator = type[options.creator]; - } - else { - throw new TypeError(`${type.name}.${options.creator} is not a function, cannot use it as creator`); - } - } - else if (typeof options.creator !== 'function') { - throw new TypeError(`creator for class ${type.name} must be a function, or the name of a static method`); - } - path = path.replace(/^\/|\/$/g, ''); // trim slashes - this[_mappings][path] = { - db: this.db, - type, - creator: options.creator, - serializer: options.serializer, - deserialize(snap) { - // run constructor method - let obj; - if (this.creator) { - obj = this.creator.call(this.type, snap); - } - else { - obj = new this.type(snap); - } - return obj; - }, - serialize(obj, ref) { - if (this.serializer) { - obj = this.serializer.call(obj, ref, obj); - } - else if (obj && typeof obj.serialize === 'function') { - obj = obj.serialize(ref, obj); - } - return obj; - }, - }; - } - /** - * (for internal use) - * Serializes any child in given object that has a type mapping - * @param {string} path | path to the object's location - * @param {object} obj | object to serialize - */ - serialize(path, obj) { - return process(this.db, this[_mappings], path, obj, 'serialize'); - } - /** - * (for internal use) - * Deserialzes any child in given object that has a type mapping - * @param {string} path | path to the object's location - * @param {object} obj | object to deserialize - */ - deserialize(path, obj) { - return process(this.db, this[_mappings], path, obj, 'deserialize'); - } -} -exports.TypeMappings = TypeMappings; - -},{"./data-reference":34,"./data-snapshot":35,"./path-info":42,"./utils":52}],52:[function(require,module,exports){ -(function (Buffer){(function (){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.defer = exports.getChildValues = exports.getMutations = exports.compareValues = exports.ObjectDifferences = exports.valuesAreEqual = exports.cloneObject = exports.concatTypedArrays = exports.decodeString = exports.encodeString = exports.bytesToBigint = exports.bigintToBytes = exports.bytesToNumber = exports.numberToBytes = void 0; -const path_reference_1 = require("./path-reference"); -const process_1 = require("./process"); -const partial_array_1 = require("./partial-array"); -function numberToBytes(number) { - const bytes = new Uint8Array(8); - const view = new DataView(bytes.buffer); - view.setFloat64(0, number); - return new Array(...bytes); -} -exports.numberToBytes = numberToBytes; -function bytesToNumber(bytes) { - const length = Array.isArray(bytes) ? bytes.length : bytes.byteLength; - if (length !== 8) { - throw new TypeError('must be 8 bytes'); - } - const bin = new Uint8Array(bytes); - const view = new DataView(bin.buffer); - const nr = view.getFloat64(0); - return nr; -} -exports.bytesToNumber = bytesToNumber; -const big = { - zero: BigInt(0), - one: BigInt(1), - two: BigInt(2), - eight: BigInt(8), - ff: BigInt(0xff), -}; -function bigintToBytes(number) { - if (typeof number !== 'bigint') { - throw new Error('number must be a bigint'); - } - const bytes = []; - const negative = number < big.zero; - do { - const byte = Number(number & big.ff); // NOTE: bits are inverted on negative numbers - bytes.push(byte); - number = number >> big.eight; - } while (number !== (negative ? -big.one : big.zero)); - bytes.reverse(); // little-endian - if (negative ? bytes[0] < 128 : bytes[0] >= 128) { - bytes.unshift(negative ? 255 : 0); // extra sign byte needed - } - return bytes; -} -exports.bigintToBytes = bigintToBytes; -function bytesToBigint(bytes) { - const negative = bytes[0] >= 128; - let number = big.zero; - for (let b of bytes) { - if (negative) { - b = ~b & 0xff; - } // Invert the bits - number = (number << big.eight) + BigInt(b); - } - if (negative) { - number = -(number + big.one); - } - return number; -} -exports.bytesToBigint = bytesToBigint; -/** - * Converts a string to a utf-8 encoded Uint8Array - */ -function encodeString(str) { - if (typeof TextEncoder !== 'undefined') { - // Modern browsers, Node.js v11.0.0+ (or v8.3.0+ with util.TextEncoder) - const encoder = new TextEncoder(); - return encoder.encode(str); - } - else if (typeof Buffer === 'function') { - // Node.js - const buf = Buffer.from(str, 'utf-8'); - return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength); - } - else { - // Older browsers. Manually encode - const arr = []; - for (let i = 0; i < str.length; i++) { - let code = str.charCodeAt(i); - if (code > 128) { - // Attempt simple UTF-8 conversion. See https://en.wikipedia.org/wiki/UTF-8 - if ((code & 0xd800) === 0xd800) { - // code starts with 1101 10...: this is a 2-part utf-16 char code - const nextCode = str.charCodeAt(i + 1); - if ((nextCode & 0xdc00) !== 0xdc00) { - // next code must start with 1101 11... - throw new Error('follow-up utf-16 character does not start with 0xDC00'); - } - i++; - const p1 = code & 0x3ff; // Only use last 10 bits - const p2 = nextCode & 0x3ff; - // Create code point from these 2: (see https://en.wikipedia.org/wiki/UTF-16) - code = 0x10000 | (p1 << 10) | p2; - } - if (code < 2048) { - // Use 2 bytes for 11 bit value, first byte starts with 110xxxxx (0xc0), 2nd byte with 10xxxxxx (0x80) - const b1 = 0xc0 | ((code >> 6) & 0x1f); // 0xc0 = 11000000, 0x1f = 11111 - const b2 = 0x80 | (code & 0x3f); // 0x80 = 10000000, 0x3f = 111111 - arr.push(b1, b2); - } - else if (code < 65536) { - // Use 3 bytes for 16-bit value, bits per byte: 4, 6, 6 - const b1 = 0xe0 | ((code >> 12) & 0xf); // 0xe0 = 11100000, 0xf = 1111 - const b2 = 0x80 | ((code >> 6) & 0x3f); // 0x80 = 10000000, 0x3f = 111111 - const b3 = 0x80 | (code & 0x3f); - arr.push(b1, b2, b3); - } - else if (code < 2097152) { - // Use 4 bytes for 21-bit value, bits per byte: 3, 6, 6, 6 - const b1 = 0xf0 | ((code >> 18) & 0x7); // 0xf0 = 11110000, 0x7 = 111 - const b2 = 0x80 | ((code >> 12) & 0x3f); // 0x80 = 10000000, 0x3f = 111111 - const b3 = 0x80 | ((code >> 6) & 0x3f); // 0x80 = 10000000, 0x3f = 111111 - const b4 = 0x80 | (code & 0x3f); - arr.push(b1, b2, b3, b4); - } - else { - throw new Error(`Cannot convert character ${str.charAt(i)} (code ${code}) to utf-8`); - } - } - else { - arr.push(code < 128 ? code : 63); // 63 = ? - } - } - return new Uint8Array(arr); - } -} -exports.encodeString = encodeString; -/** - * Converts a utf-8 encoded buffer to string - */ -function decodeString(buffer) { - if (typeof TextDecoder !== 'undefined') { - // Modern browsers, Node.js v11.0.0+ (or v8.3.0+ with util.TextDecoder) - const decoder = new TextDecoder(); - if (buffer instanceof Uint8Array) { - return decoder.decode(buffer); - } - const buf = Uint8Array.from(buffer); - return decoder.decode(buf); - } - else if (typeof Buffer === 'function') { - // Node.js (v10 and below) - if (buffer instanceof Array) { - buffer = Uint8Array.from(buffer); // convert to typed array - } - if (!(buffer instanceof Buffer) && 'buffer' in buffer && buffer.buffer instanceof ArrayBuffer) { - const typedArray = buffer; - buffer = Buffer.from(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); // Convert typed array to node.js Buffer - } - if (!(buffer instanceof Buffer)) { - throw new Error('Unsupported buffer argument'); - } - return buffer.toString('utf-8'); - } - else { - // Older browsers. Manually decode! - if (!(buffer instanceof Uint8Array) && 'buffer' in buffer && buffer['buffer'] instanceof ArrayBuffer) { - // Convert TypedArray to Uint8Array - const typedArray = buffer; - buffer = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); - } - if (buffer instanceof Buffer || buffer instanceof Array || buffer instanceof Uint8Array) { - let str = ''; - for (let i = 0; i < buffer.length; i++) { - let code = buffer[i]; - if (code > 128) { - // Decode Unicode character - if ((code & 0xf0) === 0xf0) { - // 4 byte char - const b1 = code, b2 = buffer[i + 1], b3 = buffer[i + 2], b4 = buffer[i + 3]; - code = ((b1 & 0x7) << 18) | ((b2 & 0x3f) << 12) | ((b3 & 0x3f) << 6) | (b4 & 0x3f); - i += 3; - } - else if ((code & 0xe0) === 0xe0) { - // 3 byte char - const b1 = code, b2 = buffer[i + 1], b3 = buffer[i + 2]; - code = ((b1 & 0xf) << 12) | ((b2 & 0x3f) << 6) | (b3 & 0x3f); - i += 2; - } - else if ((code & 0xc0) === 0xc0) { - // 2 byte char - const b1 = code, b2 = buffer[i + 1]; - code = ((b1 & 0x1f) << 6) | (b2 & 0x3f); - i++; - } - else { - throw new Error('invalid utf-8 data'); - } - } - if (code >= 65536) { - // Split into 2-part utf-16 char codes - code ^= 0x10000; - const p1 = 0xd800 | (code >> 10); - const p2 = 0xdc00 | (code & 0x3ff); - str += String.fromCharCode(p1); - str += String.fromCharCode(p2); - } - else { - str += String.fromCharCode(code); - } - } - return str; - } - else { - throw new Error('Unsupported buffer argument'); - } - } -} -exports.decodeString = decodeString; -function concatTypedArrays(a, b) { - const c = new a.constructor(a.length + b.length); - c.set(a); - c.set(b, a.length); - return c; -} -exports.concatTypedArrays = concatTypedArrays; -function cloneObject(original, stack) { - var _a; - if (((_a = original === null || original === void 0 ? void 0 : original.constructor) === null || _a === void 0 ? void 0 : _a.name) === 'DataSnapshot') { - throw new TypeError(`Object to clone is a DataSnapshot (path "${original.ref.path}")`); - } - const checkAndFixTypedArray = obj => { - if (obj !== null && typeof obj === 'object' - && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' - && ['Buffer', 'Uint8Array', 'Int8Array', 'Uint16Array', 'Int16Array', 'Uint32Array', 'Int32Array', 'BigUint64Array', 'BigInt64Array'].includes(obj.constructor.name)) { - // FIX for typed array being converted to objects with numeric properties: - // Convert Buffer or TypedArray to ArrayBuffer - obj = obj.buffer.slice(obj.byteOffset, obj.byteOffset + obj.byteLength); - } - return obj; - }; - original = checkAndFixTypedArray(original); - if (typeof original !== 'object' || original === null || original instanceof Date || original instanceof ArrayBuffer || original instanceof path_reference_1.PathReference || original instanceof RegExp) { - return original; - } - const cloneValue = (val) => { - if (stack.indexOf(val) >= 0) { - throw new ReferenceError('object contains a circular reference'); - } - val = checkAndFixTypedArray(val); - if (val === null || val instanceof Date || val instanceof ArrayBuffer || val instanceof path_reference_1.PathReference || val instanceof RegExp) { // || val instanceof ID - return val; - } - else if (typeof val === 'object') { - stack.push(val); - val = cloneObject(val, stack); - stack.pop(); - return val; - } - else { - return val; // Anything other can just be copied - } - }; - if (typeof stack === 'undefined') { - stack = [original]; - } - const clone = original instanceof Array ? [] : original instanceof partial_array_1.PartialArray ? new partial_array_1.PartialArray() : {}; - Object.keys(original).forEach(key => { - const val = original[key]; - if (typeof val === 'function') { - return; // skip functions - } - clone[key] = cloneValue(val); - }); - return clone; -} -exports.cloneObject = cloneObject; -const isTypedArray = val => typeof val === 'object' && ['ArrayBuffer', 'Buffer', 'Uint8Array', 'Uint16Array', 'Uint32Array', 'Int8Array', 'Int16Array', 'Int32Array'].includes(val.constructor.name); -// CONSIDER: updating isTypedArray to: const isTypedArray = val => typeof val === 'object' && 'buffer' in val && 'byteOffset' in val && 'byteLength' in val; -function valuesAreEqual(val1, val2) { - if (val1 === val2) { - return true; - } - if (typeof val1 !== typeof val2) { - return false; - } - if (typeof val1 === 'object' || typeof val2 === 'object') { - if (val1 === null || val2 === null) { - return false; - } - if (val1 instanceof path_reference_1.PathReference || val2 instanceof path_reference_1.PathReference) { - return val1 instanceof path_reference_1.PathReference && val2 instanceof path_reference_1.PathReference && val1.path === val2.path; - } - if (val1 instanceof Date || val2 instanceof Date) { - return val1 instanceof Date && val2 instanceof Date && val1.getTime() === val2.getTime(); - } - if (val1 instanceof Array || val2 instanceof Array) { - return val1 instanceof Array && val2 instanceof Array && val1.length === val2.length && val1.every((item, i) => valuesAreEqual(val1[i], val2[i])); - } - if (isTypedArray(val1) || isTypedArray(val2)) { - if (!isTypedArray(val1) || !isTypedArray(val2) || val1.byteLength === val2.byteLength) { - return false; - } - const typed1 = val1 instanceof ArrayBuffer ? new Uint8Array(val1) : new Uint8Array(val1.buffer, val1.byteOffset, val1.byteLength), typed2 = val2 instanceof ArrayBuffer ? new Uint8Array(val2) : new Uint8Array(val2.buffer, val2.byteOffset, val2.byteLength); - return typed1.every((val, i) => typed2[i] === val); - } - const keys1 = Object.keys(val1), keys2 = Object.keys(val2); - return keys1.length === keys2.length && keys1.every(key => keys2.includes(key)) && keys1.every(key => valuesAreEqual(val1[key], val2[key])); - } - return false; -} -exports.valuesAreEqual = valuesAreEqual; -class ObjectDifferences { - constructor(added, removed, changed) { - this.added = added; - this.removed = removed; - this.changed = changed; - } - forChild(key) { - if (this.added.includes(key)) { - return 'added'; - } - if (this.removed.includes(key)) { - return 'removed'; - } - const changed = this.changed.find(ch => ch.key === key); - return changed ? changed.change : 'identical'; - } -} -exports.ObjectDifferences = ObjectDifferences; -function compareValues(oldVal, newVal, sortedResults = false) { - const voids = [undefined, null]; - if (oldVal === newVal) { - return 'identical'; - } - else if (voids.indexOf(oldVal) >= 0 && voids.indexOf(newVal) < 0) { - return 'added'; - } - else if (voids.indexOf(oldVal) < 0 && voids.indexOf(newVal) >= 0) { - return 'removed'; - } - else if (typeof oldVal !== typeof newVal) { - return 'changed'; - } - else if (isTypedArray(oldVal) || isTypedArray(newVal)) { - // One or both values are typed arrays. - if (!isTypedArray(oldVal) || !isTypedArray(newVal)) { - return 'changed'; - } - // Both are typed. Compare lengths and byte content of typed arrays - const typed1 = oldVal instanceof Uint8Array ? oldVal : oldVal instanceof ArrayBuffer ? new Uint8Array(oldVal) : new Uint8Array(oldVal.buffer, oldVal.byteOffset, oldVal.byteLength); - const typed2 = newVal instanceof Uint8Array ? newVal : newVal instanceof ArrayBuffer ? new Uint8Array(newVal) : new Uint8Array(newVal.buffer, newVal.byteOffset, newVal.byteLength); - return typed1.byteLength === typed2.byteLength && typed1.every((val, i) => typed2[i] === val) ? 'identical' : 'changed'; - } - else if (oldVal instanceof Date || newVal instanceof Date) { - return oldVal instanceof Date && newVal instanceof Date && oldVal.getTime() === newVal.getTime() ? 'identical' : 'changed'; - } - else if (oldVal instanceof path_reference_1.PathReference || newVal instanceof path_reference_1.PathReference) { - return oldVal instanceof path_reference_1.PathReference && newVal instanceof path_reference_1.PathReference && oldVal.path === newVal.path ? 'identical' : 'changed'; - } - else if (typeof oldVal === 'object') { - // Do key-by-key comparison of objects - const isArray = oldVal instanceof Array; - const getKeys = obj => { - let keys = Object.keys(obj).filter(key => !voids.includes(obj[key])); - if (isArray) { - keys = keys.map((v) => parseInt(v)); - } - return keys; - }; - const oldKeys = getKeys(oldVal); - const newKeys = getKeys(newVal); - const removedKeys = oldKeys.filter(key => !newKeys.includes(key)); - const addedKeys = newKeys.filter(key => !oldKeys.includes(key)); - const changedKeys = newKeys.reduce((changed, key) => { - if (oldKeys.includes(key)) { - const val1 = oldVal[key]; - const val2 = newVal[key]; - const c = compareValues(val1, val2); - if (c !== 'identical') { - changed.push({ key, change: c }); - } - } - return changed; - }, []); - if (addedKeys.length === 0 && removedKeys.length === 0 && changedKeys.length === 0) { - return 'identical'; - } - else { - return new ObjectDifferences(addedKeys, removedKeys, sortedResults ? changedKeys.sort((a, b) => a.key < b.key ? -1 : 1) : changedKeys); - } - } - return 'changed'; -} -exports.compareValues = compareValues; -function getMutations(oldVal, newVal, sortedResults = false) { - const process = (target, compareResult, prev, val) => { - switch (compareResult) { - case 'identical': return []; - case 'changed': return [{ target, prev, val }]; - case 'added': return [{ target, prev: null, val }]; - case 'removed': return [{ target, prev, val: null }]; - default: { - let changes = []; - compareResult.added.forEach(key => changes.push({ target: target.concat(key), prev: null, val: val[key] })); - compareResult.removed.forEach(key => changes.push({ target: target.concat(key), prev: prev[key], val: null })); - compareResult.changed.forEach(item => { - const childChanges = process(target.concat(item.key), item.change, prev[item.key], val[item.key]); - changes = changes.concat(childChanges); - }); - return changes; - } - } - }; - const compareResult = compareValues(oldVal, newVal, sortedResults); - return process([], compareResult, oldVal, newVal); -} -exports.getMutations = getMutations; -function getChildValues(childKey, oldValue, newValue) { - oldValue = oldValue === null ? null : oldValue[childKey]; - if (typeof oldValue === 'undefined') { - oldValue = null; - } - newValue = newValue === null ? null : newValue[childKey]; - if (typeof newValue === 'undefined') { - newValue = null; - } - return { oldValue, newValue }; -} -exports.getChildValues = getChildValues; -function defer(fn) { - process_1.default.nextTick(fn); -} -exports.defer = defer; - -}).call(this)}).call(this,require("buffer").Buffer) -},{"./partial-array":41,"./path-reference":43,"./process":44,"buffer":53}],53:[function(require,module,exports){ - -},{}]},{},[5])(5) +},{}]},{},[31])(31) }); diff --git a/dist/browser.min.js b/dist/browser.min.js index 833e479..ee1c4cb 100644 --- a/dist/browser.min.js +++ b/dist/browser.min.js @@ -1 +1 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.acebase=f()}})((function(){var define,module,exports;return function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,(function(r){var n=e[i][1][r];return o(n||r)}),p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i{this.emit("ready")}));this.recovery={repairNode:async(path,options)=>{if(this.api.storage instanceof binary_1.AceBaseStorage){await this.api.storage.repairNode(path,options)}else if(!this.api.storage.repairNode){throw new Error(`repairNode is not supported with chosen storage engine`)}}}}async close(){await this.api.storage.close()}get settings(){const ipc=this.api.storage.ipc,debug=this.debug;return{get logLevel(){return debug.level},set logLevel(level){debug.setLevel(level)},get ipcEvents(){return ipc.eventsEnabled},set ipcEvents(enabled){ipc.eventsEnabled=enabled}}}static WithLocalStorage(dbname,settings={}){const db=(0,local_storage_1.createLocalStorageInstance)(dbname,settings);return db}static WithIndexedDB(dbname,init={}){throw new Error(`IndexedDB storage can only be used in browser contexts`)}}exports.AceBase=AceBase},{"./api-local":3,"./storage/binary":13,"./storage/custom/indexed-db/settings":20,"./storage/custom/local-storage":22,"acebase-core":38}],3:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.LocalApi=void 0;const acebase_core_1=require("acebase-core");const binary_1=require("./storage/binary");const sqlite_1=require("./storage/sqlite");const mssql_1=require("./storage/mssql");const custom_1=require("./storage/custom");const node_value_types_1=require("./node-value-types");const query_1=require("./query");class LocalApi extends acebase_core_1.Api{constructor(dbname="default",init,readyCallback){super();this.db=init.db;const storageEnv={logLevel:init.settings.logLevel};if(typeof init.settings.storage==="object"){if(sqlite_1.SQLiteStorageSettings&&init.settings.storage instanceof sqlite_1.SQLiteStorageSettings){this.storage=new sqlite_1.SQLiteStorage(dbname,init.settings.storage,storageEnv)}else if(mssql_1.MSSQLStorageSettings&&init.settings.storage instanceof mssql_1.MSSQLStorageSettings){this.storage=new mssql_1.MSSQLStorage(dbname,init.settings.storage,storageEnv)}else if(custom_1.CustomStorageSettings&&init.settings.storage instanceof custom_1.CustomStorageSettings){this.storage=new custom_1.CustomStorage(dbname,init.settings.storage,storageEnv)}else{const storageSettings=init.settings.storage instanceof binary_1.AceBaseStorageSettings?init.settings.storage:new binary_1.AceBaseStorageSettings(init.settings.storage);this.storage=new binary_1.AceBaseStorage(dbname,storageSettings,storageEnv)}}else{this.storage=new binary_1.AceBaseStorage(dbname,new binary_1.AceBaseStorageSettings,storageEnv)}this.storage.on("ready",readyCallback)}async stats(options){return this.storage.stats}subscribe(path,event,callback){this.storage.subscriptions.add(path,event,callback)}unsubscribe(path,event,callback){this.storage.subscriptions.remove(path,event,callback)}async set(path,value,options={suppress_events:false,context:null}){const cursor=await this.storage.setNode(path,value,{suppress_events:options.suppress_events,context:options.context});return Object.assign({},cursor&&{cursor:cursor})}async update(path,updates,options={suppress_events:false,context:null}){const cursor=await this.storage.updateNode(path,updates,{suppress_events:options.suppress_events,context:options.context});return Object.assign({},cursor&&{cursor:cursor})}get transactionLoggingEnabled(){return this.storage.settings.transactions&&this.storage.settings.transactions.log===true}async get(path,options){if(!options){options={}}if(typeof options.include!=="undefined"&&!(options.include instanceof Array)){throw new TypeError(`options.include must be an array of key names`)}if(typeof options.exclude!=="undefined"&&!(options.exclude instanceof Array)){throw new TypeError(`options.exclude must be an array of key names`)}if(["undefined","boolean"].indexOf(typeof options.child_objects)<0){throw new TypeError(`options.child_objects must be a boolean`)}const node=await this.storage.getNode(path,options);return{value:node.value,context:{acebase_cursor:node.cursor},cursor:node.cursor}}async transaction(path,callback,options={suppress_events:false,context:null}){const cursor=await this.storage.transactNode(path,callback,{suppress_events:options.suppress_events,context:options.context});return Object.assign({},cursor&&{cursor:cursor})}async exists(path){const nodeInfo=await this.storage.getNodeInfo(path);return nodeInfo.exists}async query(path,query,options={snapshots:false}){const results=await(0,query_1.query)(this,path,query,options);return results}createIndex(path,key,options){return this.storage.indexes.create(path,key,options)}async getIndexes(){return this.storage.indexes.list()}async deleteIndex(filePath){return this.storage.indexes.delete(filePath)}async reflect(path,type,args){args=args||{};const getChildren=async(path,limit=50,skip=0,from=null)=>{if(typeof limit==="string"){limit=parseInt(limit)}if(typeof skip==="string"){skip=parseInt(skip)}if(["null","undefined"].includes(from)){from=null}const children=[];let n=0,stop=false,more=false;await this.storage.getChildren(path).next((childInfo=>{if(stop){more=true;return false}n++;const include=from!==null?childInfo.key>from:skip===0||n>skip;if(include){children.push(Object.assign({key:typeof childInfo.key==="string"?childInfo.key:childInfo.index,type:childInfo.valueTypeName,value:childInfo.value},typeof childInfo.address==="object"&&"pageNr"in childInfo.address&&{address:{pageNr:childInfo.address.pageNr,recordNr:childInfo.address.recordNr}}))}stop=limit>0&&children.length===limit})).catch((err=>{}));return{more:more,list:children}};switch(type){case"children":{return getChildren(path,args.limit,args.skip,args.from)}case"info":{const info={key:"",exists:false,type:"unknown",value:undefined,address:undefined,children:{count:0,more:false,list:[]}};const nodeInfo=await this.storage.getNodeInfo(path,{include_child_count:args.child_count===true});info.key=typeof nodeInfo.key!=="undefined"?nodeInfo.key:nodeInfo.index;info.exists=nodeInfo.exists;info.type=nodeInfo.exists?nodeInfo.valueTypeName:undefined;info.value=nodeInfo.value;info.address=typeof nodeInfo.address==="object"&&"pageNr"in nodeInfo.address?{pageNr:nodeInfo.address.pageNr,recordNr:nodeInfo.address.recordNr}:undefined;const isObjectOrArray=nodeInfo.exists&&nodeInfo.address&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(nodeInfo.type);if(args.child_count===true){info.children={count:isObjectOrArray?nodeInfo.childCount:0}}else if(typeof args.child_limit==="number"&&args.child_limit>0){if(isObjectOrArray){info.children=await getChildren(path,args.child_limit,args.child_skip,args.child_from)}}return info}}}export(path,stream,options={format:"json",type_safe:true}){return this.storage.exportNode(path,stream,options)}import(path,read,options={format:"json",suppress_events:false,method:"set"}){return this.storage.importNode(path,read,options)}async setSchema(path,schema){return this.storage.setSchema(path,schema)}async getSchema(path){return this.storage.getSchema(path)}async getSchemas(){return this.storage.getSchemas()}async validateSchema(path,value,isUpdate){return this.storage.validateSchema(path,value,{updates:isUpdate})}async getMutations(filter){if(typeof this.storage.getMutations!=="function"){throw new Error("Used storage type does not support getMutations")}if(typeof filter!=="object"){throw new Error("No filter specified")}if(typeof filter.cursor!=="string"&&typeof filter.timestamp!=="number"){throw new Error("No cursor or timestamp given")}return this.storage.getMutations(filter)}async getChanges(filter){if(typeof this.storage.getChanges!=="function"){throw new Error("Used storage type does not support getChanges")}if(typeof filter!=="object"){throw new Error("No filter specified")}if(typeof filter.cursor!=="string"&&typeof filter.timestamp!=="number"){throw new Error("No cursor or timestamp given")}return this.storage.getChanges(filter)}}exports.LocalApi=LocalApi},{"./node-value-types":12,"./query":15,"./storage/binary":13,"./storage/custom":18,"./storage/mssql":13,"./storage/sqlite":13,"acebase-core":38}],4:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AsyncTaskBatch=void 0;class AsyncTaskBatch{constructor(limit=1e3,options){this.limit=limit;this.options=options;this.added=0;this.scheduled=[];this.running=0;this.results=[];this.done=false}async execute(task,index){var _a,_b;try{this.running++;const result=await task();this.results[index]=result;this.running--;if(this.running===0&&this.scheduled.length===0){this.done=true;(_a=this.doneCallback)===null||_a===void 0?void 0:_a.call(this,this.results)}else if(this.scheduled.length>0){const next=this.scheduled.shift();this.execute(next.task,next.index)}}catch(err){this.done=true;(_b=this.errorCallback)===null||_b===void 0?void 0:_b.call(this,err)}}add(task){var _a;if(this.done){throw new Error(`Cannot add to a batch that has already finished. Use wait option and start batch processing manually if you are adding tasks in an async loop`)}const index=this.added++;if(((_a=this.options)===null||_a===void 0?void 0:_a.wait)!==true&&this.running{this.doneCallback=resolve;this.errorCallback=reject}));return this.results}}exports.AsyncTaskBatch=AsyncTaskBatch},{}],5:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SchemaValidationError=exports.StorageSettings=exports.ICustomStorageNodeMetaData=exports.ICustomStorageNode=exports.CustomStorageHelpers=exports.CustomStorageSettings=exports.CustomStorageTransaction=exports.MSSQLStorageSettings=exports.SQLiteStorageSettings=exports.AceBaseStorageSettings=exports.IndexedDBStorageSettings=exports.LocalStorageSettings=exports.AceBaseLocalSettings=exports.AceBase=exports.PartialArray=exports.proxyAccess=exports.ID=exports.ObjectCollection=exports.TypeMappings=exports.PathReference=exports.EventSubscription=exports.EventStream=exports.DataReferencesArray=exports.DataSnapshotsArray=exports.DataReference=exports.DataSnapshot=void 0;const acebase_core_1=require("acebase-core");Object.defineProperty(exports,"DataReference",{enumerable:true,get:function(){return acebase_core_1.DataReference}});Object.defineProperty(exports,"DataSnapshot",{enumerable:true,get:function(){return acebase_core_1.DataSnapshot}});Object.defineProperty(exports,"EventSubscription",{enumerable:true,get:function(){return acebase_core_1.EventSubscription}});Object.defineProperty(exports,"PathReference",{enumerable:true,get:function(){return acebase_core_1.PathReference}});Object.defineProperty(exports,"TypeMappings",{enumerable:true,get:function(){return acebase_core_1.TypeMappings}});Object.defineProperty(exports,"ID",{enumerable:true,get:function(){return acebase_core_1.ID}});Object.defineProperty(exports,"proxyAccess",{enumerable:true,get:function(){return acebase_core_1.proxyAccess}});Object.defineProperty(exports,"DataSnapshotsArray",{enumerable:true,get:function(){return acebase_core_1.DataSnapshotsArray}});Object.defineProperty(exports,"ObjectCollection",{enumerable:true,get:function(){return acebase_core_1.ObjectCollection}});Object.defineProperty(exports,"DataReferencesArray",{enumerable:true,get:function(){return acebase_core_1.DataReferencesArray}});Object.defineProperty(exports,"EventStream",{enumerable:true,get:function(){return acebase_core_1.EventStream}});Object.defineProperty(exports,"PartialArray",{enumerable:true,get:function(){return acebase_core_1.PartialArray}});const acebase_local_1=require("./acebase-local");const acebase_browser_1=require("./acebase-browser");Object.defineProperty(exports,"AceBase",{enumerable:true,get:function(){return acebase_browser_1.BrowserAceBase}});const custom_1=require("./storage/custom");const acebase={AceBase:acebase_browser_1.BrowserAceBase,AceBaseLocalSettings:acebase_local_1.AceBaseLocalSettings,DataReference:acebase_core_1.DataReference,DataSnapshot:acebase_core_1.DataSnapshot,EventSubscription:acebase_core_1.EventSubscription,PathReference:acebase_core_1.PathReference,TypeMappings:acebase_core_1.TypeMappings,CustomStorageSettings:custom_1.CustomStorageSettings,CustomStorageTransaction:custom_1.CustomStorageTransaction,CustomStorageHelpers:custom_1.CustomStorageHelpers,ID:acebase_core_1.ID,proxyAccess:acebase_core_1.proxyAccess,DataSnapshotsArray:acebase_core_1.DataSnapshotsArray};window.acebase=acebase;window.AceBase=acebase_browser_1.BrowserAceBase;exports.default=acebase;var acebase_local_2=require("./acebase-local");Object.defineProperty(exports,"AceBaseLocalSettings",{enumerable:true,get:function(){return acebase_local_2.AceBaseLocalSettings}});Object.defineProperty(exports,"LocalStorageSettings",{enumerable:true,get:function(){return acebase_local_2.LocalStorageSettings}});Object.defineProperty(exports,"IndexedDBStorageSettings",{enumerable:true,get:function(){return acebase_local_2.IndexedDBStorageSettings}});var binary_1=require("./storage/binary");Object.defineProperty(exports,"AceBaseStorageSettings",{enumerable:true,get:function(){return binary_1.AceBaseStorageSettings}});var sqlite_1=require("./storage/sqlite");Object.defineProperty(exports,"SQLiteStorageSettings",{enumerable:true,get:function(){return sqlite_1.SQLiteStorageSettings}});var mssql_1=require("./storage/mssql");Object.defineProperty(exports,"MSSQLStorageSettings",{enumerable:true,get:function(){return mssql_1.MSSQLStorageSettings}});var custom_2=require("./storage/custom");Object.defineProperty(exports,"CustomStorageTransaction",{enumerable:true,get:function(){return custom_2.CustomStorageTransaction}});Object.defineProperty(exports,"CustomStorageSettings",{enumerable:true,get:function(){return custom_2.CustomStorageSettings}});Object.defineProperty(exports,"CustomStorageHelpers",{enumerable:true,get:function(){return custom_2.CustomStorageHelpers}});Object.defineProperty(exports,"ICustomStorageNode",{enumerable:true,get:function(){return custom_2.ICustomStorageNode}});Object.defineProperty(exports,"ICustomStorageNodeMetaData",{enumerable:true,get:function(){return custom_2.ICustomStorageNodeMetaData}});var storage_1=require("./storage");Object.defineProperty(exports,"StorageSettings",{enumerable:true,get:function(){return storage_1.StorageSettings}});Object.defineProperty(exports,"SchemaValidationError",{enumerable:true,get:function(){return storage_1.SchemaValidationError}})},{"./acebase-browser":1,"./acebase-local":2,"./storage":25,"./storage/binary":13,"./storage/custom":18,"./storage/mssql":13,"./storage/sqlite":13,"acebase-core":38}],6:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.IPCPeer=void 0;const acebase_core_1=require("acebase-core");const ipc_1=require("./ipc");class IPCPeer extends ipc_1.AceBaseIPCPeer{constructor(storage){super(storage,acebase_core_1.ID.generate());this.masterPeerId=this.id;this.ipcType="browser.bcc";window.addEventListener("beforeunload",(()=>{this.exit()}));if(typeof window.BroadcastChannel!=="undefined"){this.channel=new BroadcastChannel(`acebase:${storage.name}`)}else{const listeners=[null];const notImplemented=()=>{throw new Error("Not implemented")};this.channel={name:`acebase:${storage.name}`,postMessage:message=>{const messageId=acebase_core_1.ID.generate(),key=`acebase:${storage.name}:${this.id}:${messageId}`,payload=JSON.stringify(acebase_core_1.Transport.serialize(message));localStorage.setItem(key,payload);setTimeout((()=>localStorage.removeItem(key)),10)},set onmessage(handler){listeners[0]=handler},set onmessageerror(handler){notImplemented()},close(){notImplemented()},addEventListener(event,callback){if(event!=="message"){notImplemented()}listeners.push(callback)},removeEventListener(event,callback){const i=listeners.indexOf(callback);i>=1&&listeners.splice(i,1)},dispatchEvent(event){listeners.forEach((callback=>{try{callback&&callback(event)}catch(err){console.error(err)}}));return true}};window.addEventListener("storage",(event=>{const[acebase,dbname,peerId,messageId]=event.key.split(":");if(acebase!=="acebase"||dbname!==storage.name||peerId===this.id||event.newValue===null){return}const message=acebase_core_1.Transport.deserialize(JSON.parse(event.newValue));this.channel.dispatchEvent({data:message})}))}this.channel.addEventListener("message",(async event=>{const message=event.data;if(message.to&&message.to!==this.id){return}storage.debug.verbose(`[BroadcastChannel] received: `,message);if(message.type==="hello"&&message.frompeer.id)).concat(this.id).filter((id=>id!==this.masterPeerId));this.masterPeerId=allPeerIds.sort()[0];storage.debug.log(`[BroadcastChannel] ${this.masterPeerId===this.id?"We are":`tab ${this.masterPeerId} is`} the new master. Requesting ${this._locks.length} locks (${this._locks.filter((r=>!r.granted)).length} pending)`);const requests=this._locks.splice(0);await Promise.all(requests.filter((req=>req.granted)).map((async req=>{let released,movedToParent;req.lock.release=()=>new Promise((resolve=>released=resolve));req.lock.moveToParent=()=>new Promise((resolve=>movedToParent=resolve));const lock=await this.lock({path:req.lock.path,write:req.lock.forWriting,tid:req.lock.tid,comment:req.lock.comment});if(movedToParent){const newLock=await lock.moveToParent();movedToParent(newLock)}if(released){await lock.release();released()}})));await Promise.all(requests.filter((req=>!req.granted)).map((async req=>{await this.lock(req.request)})))}return this.handleMessage(message)}));const helloMsg={type:"hello",from:this.id,data:undefined};this.sendMessage(helloMsg)}sendMessage(message){this.storage.debug.verbose(`[BroadcastChannel] sending: `,message);this.channel.postMessage(message)}}exports.IPCPeer=IPCPeer},{"./ipc":7,"acebase-core":38}],7:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AceBaseIPCPeer=exports.AceBaseIPCPeerExitingError=void 0;const acebase_core_1=require("acebase-core");const node_lock_1=require("../node-lock");class AceBaseIPCPeerExitingError extends Error{constructor(message){super(`Exiting: ${message}`)}}exports.AceBaseIPCPeerExitingError=AceBaseIPCPeerExitingError;class AceBaseIPCPeer extends acebase_core_1.SimpleEventEmitter{constructor(storage,id,dbname=storage.name){super();this.storage=storage;this.id=id;this.dbname=dbname;this.ipcType="ipc";this.ourSubscriptions=[];this.remoteSubscriptions=[];this.peers=[];this._exiting=false;this._locks=[];this._requests=new Map;this._eventsEnabled=true;this._nodeLocker=new node_lock_1.NodeLocker(storage.debug,storage.settings.lockTimeout);storage.on("subscribe",(subscription=>{storage.debug.verbose(`database subscription being added on peer ${this.id}`);const remoteSubscription=this.remoteSubscriptions.find((sub=>sub.callback===subscription.callback));if(remoteSubscription){return}const othersAlreadyNotifying=this.ourSubscriptions.some((sub=>sub.event===subscription.event&&sub.path===subscription.path));this.ourSubscriptions.push(subscription);if(othersAlreadyNotifying){return}const message={type:"subscribe",from:this.id,data:{path:subscription.path,event:subscription.event}};this.sendMessage(message)}));storage.on("unsubscribe",(subscription=>{const remoteSubscription=this.remoteSubscriptions.find((sub=>sub.callback===subscription.callback));if(remoteSubscription){this.remoteSubscriptions.splice(this.remoteSubscriptions.indexOf(remoteSubscription),1);return}this.ourSubscriptions.filter((sub=>sub.path===subscription.path&&(!subscription.event||sub.event===subscription.event)&&(!subscription.callback||sub.callback===subscription.callback))).forEach((sub=>{this.ourSubscriptions.splice(this.ourSubscriptions.indexOf(sub),1);const message={type:"unsubscribe",from:this.id,data:{path:sub.path,event:sub.event}};this.sendMessage(message)}))}))}get isMaster(){return this.masterPeerId===this.id}async exit(code=0){if(this._exiting){return this.once("exit")}this._exiting=true;this.storage.debug.warn(`Received ${this.isMaster?"master":"worker "+this.id} process exit request`);if(this._locks.length>0){this.storage.debug.warn(`Waiting for ${this.isMaster?"master":"worker"} ${this.id} locks to clear`);await this.once("locks-cleared")}this.sayGoodbye(this.id);this.storage.debug.warn(`${this.isMaster?"Master":"Worker "+this.id} will now exit`);this.emitOnce("exit",code)}sayGoodbye(forPeerId){const bye={type:"bye",from:forPeerId,data:undefined};this.sendMessage(bye)}addPeer(id,sendReply=true){if(this._exiting){return}const peer=this.peers.find((w=>w.id===id));if(!peer){this.peers.push({id:id,lastSeen:Date.now()})}if(sendReply){const helloMessage={type:"hello",from:this.id,to:id,data:undefined};this.sendMessage(helloMessage);this.ourSubscriptions.forEach((sub=>{const message={type:"subscribe",from:this.id,to:id,data:{path:sub.path,event:sub.event}};this.sendMessage(message)}))}}removePeer(id,ignoreUnknown=false){if(this._exiting){return}const peer=this.peers.find((peer=>peer.id===id));if(!peer){if(!ignoreUnknown){throw new Error(`We are supposed to know this peer!`)}return}this.peers.splice(this.peers.indexOf(peer),1);const subscriptions=this.remoteSubscriptions.filter((sub=>sub.for===id));subscriptions.forEach((sub=>{this.remoteSubscriptions.splice(this.remoteSubscriptions.indexOf(sub),1);this.storage.subscriptions.remove(sub.path,sub.event,sub.callback)}))}addRemoteSubscription(peerId,details){if(this._exiting){return}if(this.remoteSubscriptions.some((sub=>sub.for===peerId&&sub.event===details.event&&sub.path===details.path))){return}const subscribeCallback=(err,path,val,previous,context)=>{const eventMessage={type:"event",from:this.id,to:peerId,path:details.path,event:details.event,data:{path:path,val:val,previous:previous,context:context}};this.sendMessage(eventMessage)};this.remoteSubscriptions.push({for:peerId,event:details.event,path:details.path,callback:subscribeCallback});this.storage.subscriptions.add(details.path,details.event,subscribeCallback)}cancelRemoteSubscription(peerId,details){const sub=this.remoteSubscriptions.find((sub=>sub.for===peerId&&sub.event===details.event&&sub.path===details.event));if(!sub){return}this.storage.subscriptions.remove(details.path,details.event,sub.callback)}async handleMessage(message){switch(message.type){case"hello":return this.addPeer(message.from,message.to!==this.id);case"bye":return this.removePeer(message.from,true);case"subscribe":return this.addRemoteSubscription(message.from,message.data);case"unsubscribe":return this.cancelRemoteSubscription(message.from,message.data);case"event":{if(!this._eventsEnabled){break}const eventMessage=message;const context=eventMessage.data.context||{};context.acebase_ipc={type:this.ipcType,origin:eventMessage.from};const subscriptions=this.ourSubscriptions.filter((sub=>sub.event===eventMessage.event&&sub.path===eventMessage.path));subscriptions.forEach((sub=>{sub.callback(null,eventMessage.data.path,eventMessage.data.val,eventMessage.data.previous,context)}));break}case"lock-request":{if(!this.isMaster){throw new Error(`Workers are not supposed to receive lock requests!`)}const request=message;const result={type:"lock-result",id:request.id,from:this.id,to:request.from,ok:true,data:undefined};try{const lock=await this.lock(request.data);result.data={id:lock.id,path:lock.path,tid:lock.tid,write:lock.forWriting,expires:lock.expires,comment:lock.comment}}catch(err){result.ok=false;result.reason=err.stack||err.message||err}return this.sendMessage(result)}case"lock-result":{if(this.isMaster){throw new Error(`Masters are not supposed to receive results for lock requests!`)}const result=message;const request=this._requests.get(result.id);if(typeof request!=="object"){throw new Error(`The request must be known to us!`)}if(result.ok){request.resolve(result.data)}else{request.reject(new Error(result.reason))}return}case"unlock-request":{if(!this.isMaster){throw new Error(`Workers are not supposed to receive unlock requests!`)}const request=message;const result={type:"unlock-result",id:request.id,from:this.id,to:request.from,ok:true,data:{id:request.data.id}};try{const lockInfo=this._locks.find((l=>{var _a;return((_a=l.lock)===null||_a===void 0?void 0:_a.id)===request.data.id}));await lockInfo.lock.release()}catch(err){result.ok=false;result.reason=err.stack||err.message||err}return this.sendMessage(result)}case"unlock-result":{if(this.isMaster){throw new Error(`Masters are not supposed to receive results for unlock requests!`)}const result=message;const request=this._requests.get(result.id);if(typeof request!=="object"){throw new Error(`The request must be known to us!`)}if(result.ok){request.resolve(result.data)}else{request.reject(new Error(result.reason))}return}case"move-lock-request":{if(!this.isMaster){throw new Error(`Workers are not supposed to receive move lock requests!`)}const request=message;const result={type:"lock-result",id:request.id,from:this.id,to:request.from,ok:true,data:undefined};try{let movedLock;const lockRequest=this._locks.find((r=>{var _a;return((_a=r.lock)===null||_a===void 0?void 0:_a.id)===request.data.id}));if(request.data.move_to==="parent"){movedLock=await lockRequest.lock.moveToParent()}else{throw new Error(`Unknown lock move_to "${request.data.move_to}"`)}lockRequest.lock=movedLock;result.data={id:movedLock.id,path:movedLock.path,tid:movedLock.tid,write:movedLock.forWriting,expires:movedLock.expires,comment:movedLock.comment}}catch(err){result.ok=false;result.reason=err.stack||err.message||err}return this.sendMessage(result)}case"notification":{return this.emit("notification",message)}case"request":{return this.emit("request",message)}case"result":{const result=message;const request=this._requests.get(result.id);if(typeof request!=="object"){throw new Error(`Result of unknown request received`)}if(result.ok){request.resolve(result.data)}else{request.reject(new Error(result.reason))}}}}async lock(details){if(this._exiting){const tidApproved=this._locks.find((l=>l.tid===details.tid&&l.granted));if(!tidApproved){throw new AceBaseIPCPeerExitingError("new transaction lock denied because the IPC peer is exiting")}}const removeLock=lockDetails=>{this._locks.splice(this._locks.indexOf(lockDetails),1);if(this._locks.length===0){this.emit("locks-cleared")}};if(this.isMaster){const lockInfo={tid:details.tid,granted:false,request:details,lock:null};this._locks.push(lockInfo);const lock=await this._nodeLocker.lock(details.path,details.tid,details.write,details.comment);lockInfo.tid=lock.tid;lockInfo.granted=true;const createIPCLock=lock=>({get id(){return lock.id},get tid(){return lock.tid},get path(){return lock.path},get forWriting(){return lock.forWriting},get expires(){return lock.expires},get comment(){return lock.comment},get state(){return lock.state},release:async()=>{await lock.release();removeLock(lockInfo)},moveToParent:async()=>{const parentLock=await lock.moveToParent();lockInfo.lock=createIPCLock(parentLock);return lockInfo.lock}});lockInfo.lock=createIPCLock(lock);return lockInfo.lock}else{const lockInfo={tid:details.tid,granted:false,request:details,lock:null};this._locks.push(lockInfo);const createIPCLock=result=>{lockInfo.granted=true;lockInfo.tid=result.tid;lockInfo.lock={id:result.id,tid:result.tid,path:result.path,forWriting:result.write,state:node_lock_1.LOCK_STATE.LOCKED,expires:result.expires,comment:result.comment,release:async()=>{const req={type:"unlock-request",id:acebase_core_1.ID.generate(),from:this.id,to:this.masterPeerId,data:{id:lockInfo.lock.id}};await this.request(req);lockInfo.lock.state=node_lock_1.LOCK_STATE.DONE;this.storage.debug.verbose(`Worker ${this.id} released lock ${lockInfo.lock.id} (tid ${lockInfo.lock.tid}, ${lockInfo.lock.comment}, "/${lockInfo.lock.path}", ${lockInfo.lock.forWriting?"write":"read"})`);removeLock(lockInfo)},moveToParent:async()=>{const req={type:"move-lock-request",id:acebase_core_1.ID.generate(),from:this.id,to:this.masterPeerId,data:{id:lockInfo.lock.id,move_to:"parent"}};let result;try{result=await this.request(req)}catch(err){lockInfo.lock.state=node_lock_1.LOCK_STATE.DONE;removeLock(lockInfo);throw err}lockInfo.lock=createIPCLock(result);return lockInfo.lock}};return lockInfo.lock};const req={type:"lock-request",id:acebase_core_1.ID.generate(),from:this.id,to:this.masterPeerId,data:details};let result,err;try{result=await this.request(req)}catch(e){err=e;result=null}if(err){removeLock(lockInfo);throw err}return createIPCLock(result)}}async request(req){let resolve,reject;const promise=new Promise(((rs,rj)=>{resolve=result=>{this._requests.delete(req.id);rs(result)};reject=err=>{this._requests.delete(req.id);rj(err)}}));this._requests.set(req.id,{resolve:resolve,reject:reject,request:req});this.sendMessage(req);return promise}sendRequest(request){const req={type:"request",from:this.id,to:this.masterPeerId,id:acebase_core_1.ID.generate(),data:request};return this.request(req).catch((err=>{this.storage.debug.error(err);throw err}))}replyRequest(requestMessage,result){const reply={type:"result",id:requestMessage.id,ok:true,from:this.id,to:requestMessage.from,data:result};this.sendMessage(reply)}sendNotification(notification){const msg={type:"notification",from:this.id,data:notification};this.sendMessage(msg)}get eventsEnabled(){return this._eventsEnabled}set eventsEnabled(enabled){this.storage.debug.log(`ipc events ${enabled?"enabled":"disabled"}`);this._eventsEnabled=enabled}}exports.AceBaseIPCPeer=AceBaseIPCPeer},{"../node-lock":11,"acebase-core":38}],8:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.RemovedNodeAddress=exports.NodeAddress=void 0;class NodeAddress{constructor(path){this.path=path}toString(){return`"/${this.path}"`}equals(address){return this.path===address.path}}exports.NodeAddress=NodeAddress;class RemovedNodeAddress extends NodeAddress{constructor(path){super(path)}toString(){return`"/${this.path}" (removed)`}equals(address){return address instanceof RemovedNodeAddress&&this.path===address.path}}exports.RemovedNodeAddress=RemovedNodeAddress},{}],9:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.NodeRevisionError=exports.NodeNotFoundError=void 0;class NodeNotFoundError extends Error{}exports.NodeNotFoundError=NodeNotFoundError;class NodeRevisionError extends Error{}exports.NodeRevisionError=NodeRevisionError},{}],10:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.NodeInfo=void 0;const node_value_types_1=require("./node-value-types");const acebase_core_1=require("acebase-core");class NodeInfo{constructor(info){this.path=info.path;this.type=info.type;this.index=info.index;this.key=info.key;this.exists=info.exists;this.address=info.address;this.value=info.value;this.childCount=info.childCount;if(typeof this.path==="string"&&(typeof this.key==="undefined"&&typeof this.index==="undefined")){const pathInfo=acebase_core_1.PathInfo.get(this.path);if(typeof pathInfo.key==="number"){this.index=pathInfo.key}else{this.key=pathInfo.key}}if(typeof this.exists==="undefined"){this.exists=true}}get valueType(){return this.type}get valueTypeName(){return(0,node_value_types_1.getValueTypeName)(this.valueType)}toString(){if(!this.exists){return`"${this.path}" doesn't exist`}if(this.address){return`"${this.path}" is ${this.valueTypeName} stored at ${this.address.toString()}`}else{return`"${this.path}" is ${this.valueTypeName} with value ${this.value}`}}}exports.NodeInfo=NodeInfo},{"./node-value-types":12,"acebase-core":38}],11:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.NodeLock=exports.NodeLocker=exports.LOCK_STATE=void 0;const acebase_core_1=require("acebase-core");const DEBUG_MODE=false;const DEFAULT_LOCK_TIMEOUT=120;exports.LOCK_STATE={PENDING:"pending",LOCKED:"locked",EXPIRED:"expired",DONE:"done"};class NodeLocker{constructor(debug,lockTimeout=DEFAULT_LOCK_TIMEOUT){this._locks=[];this._lastTid=0;this.debug=debug;this.timeout=lockTimeout*1e3}setTimeout(timeout){this.timeout=timeout*1e3}createTid(){return DEBUG_MODE?++this._lastTid:acebase_core_1.ID.generate()}_allowLock(path,tid,forWriting){const conflict=this._locks.find((otherLock=>otherLock.tid!==tid&&otherLock.state===exports.LOCK_STATE.LOCKED&&(forWriting||otherLock.forWriting)));return{allow:!conflict,conflict:conflict}}quit(){return new Promise((resolve=>{if(this._locks.length===0){return resolve()}this._quit=resolve}))}_rejectLock(lock,err){this._locks.splice(this._locks.indexOf(lock),1);clearTimeout(lock.timeout);try{lock.reject(err)}catch(err){console.error(`Unhandled promise rejection:`,err)}}_processLockQueue(){if(this._quit){const quitError=new Error("Quitting");this._locks.filter((lock=>lock.state===exports.LOCK_STATE.PENDING)).forEach((lock=>this._rejectLock(lock,quitError)));if(this._locks.length===0){this._quit()}}const pending=this._locks.filter((lock=>lock.state===exports.LOCK_STATE.PENDING)).sort(((a,b)=>{if(a.priority&&!b.priority){return-1}else if(!a.priority&&b.priority){return 1}return a.requested-b.requested}));pending.forEach((lock=>{const check=this._allowLock(lock.path,lock.tid,lock.forWriting);lock.waitingFor=check.conflict||null;if(check.allow){this.lock(lock).then(lock.resolve).catch((err=>this._rejectLock(lock,err)))}}))}async lock(path,tid,forWriting=true,comment="",options={withPriority:false,noTimeout:false}){let lock,proceed;if(path instanceof NodeLock){lock=path;proceed=true}else if(this._locks.findIndex((l=>l.tid===tid&&l.state===exports.LOCK_STATE.EXPIRED))>=0){throw new Error(`lock on tid ${tid} has expired, not allowed to continue`)}else if(this._quit&&!options.withPriority){throw new Error(`Quitting`)}else{DEBUG_MODE&&console.error(`${forWriting?"write":"read"} lock requested on "${path}" by tid ${tid} (${comment})`);lock=new NodeLock(this,path,tid,forWriting,options.withPriority===true);lock.comment=comment;this._locks.push(lock);const check=this._allowLock(path,tid,forWriting);lock.waitingFor=check.conflict||null;proceed=check.allow}if(proceed){DEBUG_MODE&&console.error(`${lock.forWriting?"write":"read"} lock ALLOWED on "${lock.path}" by tid ${lock.tid} (${lock.comment})`);lock.state=exports.LOCK_STATE.LOCKED;if(typeof lock.granted==="number"){}else{lock.granted=Date.now();if(options.noTimeout!==true){lock.expires=Date.now()+this.timeout;let timeoutCount=0;const timeoutHandler=()=>{if(lock.state!==exports.LOCK_STATE.LOCKED){return}timeoutCount++;if(timeoutCount<=3){this.debug.warn(`${lock.forWriting?"write":"read"} lock on path "/${lock.path}" by tid ${lock.tid} (${lock.comment}) is taking a long time to complete [${timeoutCount}]`);lock.timeout=setTimeout(timeoutHandler,this.timeout/4);return}this.debug.error(`lock :: ${lock.forWriting?"write":"read"} lock on path "/${lock.path}" by tid ${lock.tid} (${lock.comment}) took too long`);lock.state=exports.LOCK_STATE.EXPIRED;this._processLockQueue()};lock.timeout=setTimeout(timeoutHandler,this.timeout/4)}}return lock}else{console.assert(lock.state===exports.LOCK_STATE.PENDING);return new Promise(((resolve,reject)=>{lock.resolve=resolve;lock.reject=reject}))}}unlock(lockOrId,comment,processQueue=true){let lock,i;if(lockOrId instanceof NodeLock){lock=lockOrId;i=this._locks.indexOf(lock)}else{const id=lockOrId;i=this._locks.findIndex((l=>l.id===id));lock=this._locks[i]}if(i<0){const msg=`lock on "/${lock.path}" for tid ${lock.tid} wasn't found; ${comment}`;throw new Error(msg)}lock.state=exports.LOCK_STATE.DONE;clearTimeout(lock.timeout);this._locks.splice(i,1);DEBUG_MODE&&console.error(`${lock.forWriting?"write":"read"} lock RELEASED on "${lock.path}" by tid ${lock.tid}`);processQueue&&this._processLockQueue();return lock}list(){return this._locks||[]}isAllowed(path,tid,forWriting){return this._allowLock(path,tid,forWriting).allow}}exports.NodeLocker=NodeLocker;let lastid=0;class NodeLock{constructor(locker,path,tid,forWriting,priority=false){this.locker=locker;this.path=path;this.tid=tid;this.forWriting=forWriting;this.priority=priority;this.state=exports.LOCK_STATE.PENDING;this.requested=Date.now();this.comment="";this.waitingFor=null;this.id=++lastid;this.history=[]}static get LOCK_STATE(){return exports.LOCK_STATE}async release(comment){this.history.push({action:"release",path:this.path,forWriting:this.forWriting,comment:comment});return this.locker.unlock(this,comment||this.comment)}async moveToParent(){const parentPath=acebase_core_1.PathInfo.get(this.path).parentPath;const allowed=this.locker.isAllowed(parentPath,this.tid,this.forWriting);if(allowed){DEBUG_MODE&&console.error(`moveToParent ALLOWED for ${this.forWriting?"write":"read"} lock on "${this.path}" by tid ${this.tid} (${this.comment})`);this.history.push({path:this.path,forWriting:this.forWriting,action:"moving to parent"});this.waitingFor=null;this.path=parentPath;return this}else{DEBUG_MODE&&console.error(`moveToParent QUEUED for ${this.forWriting?"write":"read"} lock on "${this.path}" by tid ${this.tid} (${this.comment})`);this.locker.unlock(this,`moveLockToParent: ${this.comment}`,false);const newLock=await this.locker.lock(parentPath,this.tid,this.forWriting,this.comment,{withPriority:true});DEBUG_MODE&&console.error(`QUEUED moveToParent ALLOWED for ${this.forWriting?"write":"read"} lock on "${this.path}" by tid ${this.tid} (${this.comment})`);newLock.history=this.history;newLock.history.push({path:this.path,forWriting:this.forWriting,action:"moving to parent through queue (priority)"});return newLock}}}exports.NodeLock=NodeLock},{"acebase-core":38}],12:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.getValueType=exports.getNodeValueType=exports.getValueTypeName=exports.VALUE_TYPES=void 0;const acebase_core_1=require("acebase-core");exports.VALUE_TYPES=Object.freeze({OBJECT:1,ARRAY:2,NUMBER:3,BOOLEAN:4,STRING:5,BIGINT:7,DATETIME:6,BINARY:8,REFERENCE:9});function getValueTypeName(valueType){switch(valueType){case exports.VALUE_TYPES.ARRAY:return"array";case exports.VALUE_TYPES.BINARY:return"binary";case exports.VALUE_TYPES.BOOLEAN:return"boolean";case exports.VALUE_TYPES.DATETIME:return"date";case exports.VALUE_TYPES.NUMBER:return"number";case exports.VALUE_TYPES.OBJECT:return"object";case exports.VALUE_TYPES.REFERENCE:return"reference";case exports.VALUE_TYPES.STRING:return"string";case exports.VALUE_TYPES.BIGINT:return"bigint";default:"unknown"}}exports.getValueTypeName=getValueTypeName;function getNodeValueType(value){if(value instanceof Array){return exports.VALUE_TYPES.ARRAY}else if(value instanceof acebase_core_1.PathReference){return exports.VALUE_TYPES.REFERENCE}else if(value instanceof ArrayBuffer){return exports.VALUE_TYPES.BINARY}else if(typeof value==="string"){return exports.VALUE_TYPES.STRING}else if(typeof value==="object"){return exports.VALUE_TYPES.OBJECT}else if(typeof value==="bigint"){return exports.VALUE_TYPES.BIGINT}throw new Error(`Invalid value for standalone node: ${value}`)}exports.getNodeValueType=getNodeValueType;function getValueType(value){if(value instanceof Array){return exports.VALUE_TYPES.ARRAY}else if(value instanceof acebase_core_1.PathReference){return exports.VALUE_TYPES.REFERENCE}else if(value instanceof ArrayBuffer){return exports.VALUE_TYPES.BINARY}else if(value instanceof Date){return exports.VALUE_TYPES.DATETIME}else if(typeof value==="string"){return exports.VALUE_TYPES.STRING}else if(typeof value==="object"){return exports.VALUE_TYPES.OBJECT}else if(typeof value==="number"){return exports.VALUE_TYPES.NUMBER}else if(typeof value==="boolean"){return exports.VALUE_TYPES.BOOLEAN}else if(typeof value==="bigint"){return exports.VALUE_TYPES.BIGINT}throw new Error(`Unknown value type: ${value}`)}exports.getValueType=getValueType},{"acebase-core":38}],13:[function(require,module,exports){},{}],14:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.pfs=void 0;class pfs{static get hasFileSystem(){return false}static get fs(){return null}}exports.pfs=pfs},{}],15:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.query=void 0;const acebase_core_1=require("acebase-core");const node_value_types_1=require("./node-value-types");const node_errors_1=require("./node-errors");const data_index_1=require("./data-index");const async_task_batch_1=require("./async-task-batch");const noop=()=>{};function query(api,path,query,options={snapshots:false,include:undefined,exclude:undefined,child_objects:undefined,eventHandler:noop}){var _a;if(typeof options!=="object"){options={}}if(typeof options.snapshots==="undefined"){options.snapshots=false}const context={};if((_a=api.storage.settings.transactions)===null||_a===void 0?void 0:_a.log){context.acebase_cursor=acebase_core_1.ID.generate()}const queryFilters=query.filters.map((f=>Object.assign({},f)));const querySort=query.order.map((s=>Object.assign({},s)));const sortMatches=matches=>{matches.sort(((a,b)=>{const compare=i=>{const o=querySort[i];const trailKeys=acebase_core_1.PathInfo.getPathKeys(typeof o.key==="number"?`[${o.key}]`:o.key);const left=trailKeys.reduce(((val,key)=>val!==null&&typeof val==="object"&&key in val?val[key]:null),a.val);const right=trailKeys.reduce(((val,key)=>val!==null&&typeof val==="object"&&key in val?val[key]:null),b.val);if(left===null){return right===null?0:o.ascending?-1:1}if(right===null){return o.ascending?1:-1}if(left==right){if(i{if(preResults.length===0){return[]}const maxBatchSize=50;const batch=new async_task_batch_1.AsyncTaskBatch(maxBatchSize);const results=[];preResults.forEach((({path:path},index)=>batch.add((async()=>{const node=await api.storage.getNode(path,options);const val=node.value;if(val===null){api.storage.debug.warn(`Indexed result "/${path}" does not have a record!`);return}const result={path:path,val:val};if(stepsExecuted.sorted){results[index]=result}else{results.push(result);if(!stepsExecuted.skipped&&results.length>query.skip+Math.abs(query.take)){sortMatches(results);results.pop()}}}))));await batch.finish();return results};const pathInfo=acebase_core_1.PathInfo.get(path);const isWildcardPath=pathInfo.keys.some((key=>key==="*"||key.toString().startsWith("$")));const availableIndexes=api.storage.indexes.get(path);const usingIndexes=[];if(isWildcardPath){if(availableIndexes.length===0){const err=new Error(`Query on wildcard path "/${path}" requires an index`);return Promise.reject(err)}if(queryFilters.length===0){const index=availableIndexes.filter((index=>index.type==="normal"))[0];queryFilters.push({key:index.key,op:"!=",compare:null})}}queryFilters.forEach((filter=>{if(filter.index){return}const indexesOnKey=availableIndexes.filter((index=>index.key===filter.key)).filter((index=>index.validOperators.includes(filter.op)));if(indexesOnKey.length>=1){const otherFilterKeys=queryFilters.filter((f=>f!==filter)).map((f=>f.key));const sortKeys=querySort.map((o=>o.key)).filter((key=>key!==filter.key));const beneficialIndexes=indexesOnKey.map((index=>{const availableKeys=index.includeKeys.concat(index.key);const forOtherFilters=availableKeys.filter((key=>otherFilterKeys.includes(key)));const forSorting=availableKeys.filter((key=>sortKeys.includes(key)));const forBoth=forOtherFilters.concat(forSorting.filter((index=>!forOtherFilters.includes(index))));const points={filters:forOtherFilters.length,sorting:forSorting.length*(query.take!==0?forSorting.length:1),both:forBoth.length*forBoth.length,get total(){return this.filters+this.sorting+this.both}};return{index:index,points:points.total,filterKeys:forOtherFilters,sortKeys:forSorting}}));beneficialIndexes.sort(((a,b)=>a.points>b.points?-1:1));const bestBenificialIndex=beneficialIndexes[0];filter.index=bestBenificialIndex.index;bestBenificialIndex.filterKeys.forEach((key=>{queryFilters.filter((f=>f!==filter&&f.key===key)).forEach((f=>{if(!data_index_1.DataIndex.validOperators.includes(f.op)){return}f.indexUsage="filter";f.index=bestBenificialIndex.index}))}));bestBenificialIndex.sortKeys.forEach((key=>{querySort.filter((s=>s.key===key)).forEach((s=>{s.index=bestBenificialIndex.index}))}))}if(filter.index){usingIndexes.push({index:filter.index,description:filter.index.description})}}));if(querySort.length>0&&query.take!==0&&queryFilters.length===0){querySort.forEach((sort=>{if(sort.index){return}sort.index=availableIndexes.filter((index=>index.key===sort.key)).find((index=>index.type==="normal"))}))}const indexDescriptions=usingIndexes.map((index=>index.description)).join(", ");usingIndexes.length>0&&api.storage.debug.log(`Using indexes for query: ${indexDescriptions}`);const tableScanFilters=queryFilters.filter((filter=>!filter.index));const specialOpsRegex=/^[a-z]+:/i;if(tableScanFilters.some((filter=>specialOpsRegex.test(filter.op)))){const f=tableScanFilters.find((filter=>specialOpsRegex.test(filter.op)));const err=new Error(`query contains operator "${f.op}" which requires a special index that was not found on path "${path}", key "${f.key}"`);return Promise.reject(err)}const allowedTableScanOperators=["<","<=","==","!=",">=",">","like","!like","in","!in","matches","!matches","between","!between","has","!has","contains","!contains","exists","!exists"];for(let i=0;i0){const keys=tableScanFilters.reduce(((keys,f)=>{if(keys.indexOf(f.key)<0){keys.push(f.key)}return keys}),[]).map((key=>`"${key}"`));const err=new Error(`This wildcard path query on "/${path}" requires index(es) on key(s): ${keys.join(", ")}. Create the index(es) and retry`);return Promise.reject(err)}const indexScanPromises=[];queryFilters.forEach((filter=>{if(filter.index&&filter.indexUsage!=="filter"){let promise=filter.index.query(filter.op,filter.compare).then((results=>{options.eventHandler&&options.eventHandler({name:"stats",type:"index_query",source:filter.index.description,stats:results.stats});if(results.hints.length>0){options.eventHandler&&options.eventHandler({name:"hints",type:"index_query",source:filter.index.description,hints:results.hints})}return results}));const resultFilters=queryFilters.filter((f=>f.index===filter.index&&f.indexUsage==="filter"));if(resultFilters.length>0){promise=promise.then((results=>{resultFilters.forEach((filter=>{const{key:key,op:op,index:index}=filter;let{compare:compare}=filter;if(typeof compare==="string"&&!index.caseSensitive){compare=compare.toLocaleLowerCase(index.textLocale)}results=results.filterMetadata(key,op,compare)}));return results}))}indexScanPromises.push(promise)}}));const stepsExecuted={filtered:queryFilters.length===0,skipped:query.skip===0,taken:query.take===0,sorted:querySort.length===0,preDataLoaded:false,dataLoaded:false};if(queryFilters.length===0&&query.take===0){api.storage.debug.warn(`Filterless queries must use .take to limit the results. Defaulting to 100 for query on path "${path}"`);query.take=100}if(querySort.length>0&&querySort[0].index){const sortIndex=querySort[0].index;const ascending=query.take<0?!querySort[0].ascending:querySort[0].ascending;if(queryFilters.length===0&&querySort.slice(1).every((s=>sortIndex.allMetadataKeys.includes(s.key)))){api.storage.debug.log(`Using index for sorting: ${sortIndex.description}`);const metadataSort=querySort.slice(1).map((s=>{s.index=sortIndex;return{key:s.key,ascending:s.ascending}}));const promise=sortIndex.take(query.skip,Math.abs(query.take),{ascending:ascending,metadataSort:metadataSort}).then((results=>{options.eventHandler&&options.eventHandler({name:"stats",type:"sort_index_take",source:sortIndex.description,stats:results.stats});if(results.hints.length>0){options.eventHandler&&options.eventHandler({name:"hints",type:"sort_index_take",source:sortIndex.description,hints:results.hints})}return results}));indexScanPromises.push(promise);stepsExecuted.skipped=true;stepsExecuted.taken=true;stepsExecuted.sorted=true}}return Promise.all(indexScanPromises).then((async indexResultSets=>{let indexedResults=[];if(indexResultSets.length===1){const resultSet=indexResultSets[0];indexedResults=resultSet.map((match=>{const result={key:match.key,path:match.path,val:{[resultSet.filterKey]:match.value}};match.metadata&&Object.assign(result.val,match.metadata);return result}));stepsExecuted.filtered=true}else if(indexResultSets.length>1){indexResultSets.sort(((a,b)=>a.length{const result={key:match.key,path:match.path,val:{[shortestSet.filterKey]:match.value}};const matchedInAllSets=otherSets.every((set=>set.findIndex((m=>m.path===match.path))>=0));if(matchedInAllSets){match.metadata&&Object.assign(result.val,match.metadata);otherSets.forEach((set=>{const otherResult=set.find((r=>r.path===result.path));result.val[set.filterKey]=otherResult.value;otherResult.metadata&&Object.assign(result.val,otherResult.metadata)}));results.push(result)}return results}),[]);stepsExecuted.filtered=true}if(isWildcardPath||indexScanPromises.length>0&&tableScanFilters.length===0){if(querySort.length===0||querySort.every((o=>o.index))){stepsExecuted.preDataLoaded=true;if(!stepsExecuted.sorted&&querySort.length>0){sortMatches(indexedResults)}stepsExecuted.sorted=true;if(!stepsExecuted.skipped&&query.skip>0){indexedResults=query.take<0?indexedResults.slice(0,-query.skip):indexedResults.slice(query.skip)}if(!stepsExecuted.taken&&query.take!==0){indexedResults=query.take<0?indexedResults.slice(query.take):indexedResults.slice(0,query.take)}stepsExecuted.skipped=true;stepsExecuted.taken=true;if(!options.snapshots){return indexedResults}const childOptions={include:options.include,exclude:options.exclude,child_objects:options.child_objects};return loadResultsData(indexedResults,childOptions).then((results=>{stepsExecuted.dataLoaded=true;return results}))}if(options.snapshots||!stepsExecuted.sorted){const loadPartialResults=querySort.length>0;const childOptions=loadPartialResults?{include:querySort.map((order=>order.key))}:{include:options.include,exclude:options.exclude,child_objects:options.child_objects};return loadResultsData(indexedResults,childOptions).then((results=>{if(querySort.length>0){sortMatches(results)}stepsExecuted.sorted=true;if(query.skip>0){results=query.take<0?results.slice(0,-query.skip):results.slice(query.skip)}if(query.take!==0){results=query.take<0?results.slice(query.take):results.slice(0,query.take)}stepsExecuted.skipped=true;stepsExecuted.taken=true;if(options.snapshots&&loadPartialResults){return loadResultsData(results,{include:options.include,exclude:options.exclude,child_objects:options.child_objects})}return results}))}else{return indexedResults}}let indexKeyFilter;if(indexedResults.length>0){indexKeyFilter=indexedResults.map((result=>result.key))}let matches=[];let preliminaryStop=false;const loadPartialData=querySort.length>0;const childOptions=loadPartialData?{include:querySort.map((order=>order.key))}:{include:options.include,exclude:options.exclude,child_objects:options.child_objects};const batch={promises:[],add(promise){this.promises.push(promise);if(this.promises.length>=1e3){return Promise.all(this.promises.splice(0)).then((_=>undefined))}}};try{await api.storage.getChildren(path,{keyFilter:indexKeyFilter,async:true}).next((child=>{if(child.type!==node_value_types_1.VALUE_TYPES.OBJECT){return}if(!child.address){return}if(preliminaryStop){return false}const matchNode=async()=>{const isMatch=await api.storage.matchNode(child.address.path,tableScanFilters);if(!isMatch){return}const childPath=child.address.path;let result;if(options.snapshots||querySort.length>0){const node=await api.storage.getNode(childPath,childOptions);result={path:childPath,val:node.value}}else{result={path:childPath}}matches.push(result);if(query.take!==0&&matches.length>Math.abs(query.take)+query.skip){if(querySort.length>0){sortMatches(matches)}else if(query.take>0){preliminaryStop=true}matches.pop()}};const p=batch.add(matchNode());if(p instanceof Promise){return p}}))}catch(reason){if(!(reason instanceof node_errors_1.NodeNotFoundError)){api.storage.debug.warn(`Error getting child stream: ${reason}`)}return[]}await Promise.all(batch.promises);stepsExecuted.preDataLoaded=loadPartialData;stepsExecuted.dataLoaded=!loadPartialData;if(querySort.length>0){sortMatches(matches)}stepsExecuted.sorted=true;if(query.skip>0){matches=query.take<0?matches.slice(0,-query.skip):matches.slice(query.skip)}stepsExecuted.skipped=true;if(query.take!==0){matches=query.take<0?matches.slice(query.take):matches.slice(0,query.take)}stepsExecuted.taken=true;if(!stepsExecuted.dataLoaded){matches=await loadResultsData(matches,{include:options.include,exclude:options.exclude,child_objects:options.child_objects});stepsExecuted.dataLoaded=true}return matches})).then((matches=>{if(!stepsExecuted.sorted&&querySort.length>0){sortMatches(matches)}if(!options.snapshots){matches=matches.map((match=>match.path))}if(!stepsExecuted.skipped&&query.skip>0){matches=query.take<0?matches.slice(0,-query.skip):matches.slice(query.skip)}if(!stepsExecuted.taken&&query.take!==0){matches=query.take<0?matches.slice(query.take):matches.slice(0,query.take)}if(options.monitor===true){options.monitor={add:true,change:true,remove:true}}let stop=async()=>{};if(typeof options.monitor==="object"&&(options.monitor.add||options.monitor.change||options.monitor.remove)){const matchedPaths=options.snapshots?matches.map((match=>match.path)):matches.slice();const ref=api.db.ref(path);const removeMatch=path=>{const index=matchedPaths.indexOf(path);if(index<0){return}matchedPaths.splice(index,1)};const addMatch=path=>{if(matchedPaths.includes(path)){return}matchedPaths.push(path)};const stopMonitoring=()=>{api.unsubscribe(ref.path,"child_changed",childChangedCallback);api.unsubscribe(ref.path,"child_added",childAddedCallback);api.unsubscribe(ref.path,"notify_child_removed",childRemovedCallback)};stop=async()=>{stopMonitoring()};const childChangedCallback=async(err,path,newValue,oldValue)=>{const wasMatch=matchedPaths.includes(path);let keepMonitoring=true;const checkKeys=[];queryFilters.forEach((f=>!checkKeys.includes(f.key)&&checkKeys.push(f.key)));const seenKeys=[];typeof oldValue==="object"&&Object.keys(oldValue).forEach((key=>!seenKeys.includes(key)&&seenKeys.push(key)));typeof newValue==="object"&&Object.keys(newValue).forEach((key=>!seenKeys.includes(key)&&seenKeys.push(key)));const missingKeys=[];let isMatch=seenKeys.every((key=>{if(!checkKeys.includes(key)){return true}const filters=queryFilters.filter((filter=>filter.key===key));return filters.every((filter=>{var _a;if(((_a=filter.index)===null||_a===void 0?void 0:_a.textLocaleKey)&&!seenKeys.includes(filter.index.textLocaleKey)){missingKeys.push(filter.index.textLocaleKey);return true}else if(allowedTableScanOperators.includes(filter.op)){return api.storage.test(newValue[key],filter.op,filter.compare)}else{return filter.index.test(newValue,filter.op,filter.compare)}}))}));if(isMatch){missingKeys.push(...checkKeys.filter((key=>!seenKeys.includes(key))));if(!wasMatch&&missingKeys.length>0){const filterQueue=queryFilters.filter((f=>missingKeys.includes(f.key)));const simpleFilters=filterQueue.filter((f=>allowedTableScanOperators.includes(f.op)));const indexFilters=filterQueue.filter((f=>!allowedTableScanOperators.includes(f.op)));if(simpleFilters.length>0){isMatch=await api.storage.matchNode(path,simpleFilters)}if(isMatch&&indexFilters.length>0){const keysToLoad=indexFilters.reduce(((keys,filter)=>{if(!keys.includes(filter.key)){keys.push(filter.key)}if(filter.index instanceof data_index_1.FullTextIndex&&filter.index.config.localeKey&&!keys.includes(filter.index.config.localeKey)){keys.push(filter.index.config.localeKey)}return keys}),[]);const node=await api.storage.getNode(path,{include:keysToLoad});if(node.value===null){return false}isMatch=indexFilters.every((filter=>filter.index.test(node.value,filter.op,filter.compare)))}}}if(isMatch){if(!wasMatch){addMatch(path)}if(options.snapshots){const loadOptions={include:options.include,exclude:options.exclude,child_objects:options.child_objects};const node=await api.storage.getNode(path,loadOptions);newValue=node.value}if(wasMatch&&options.monitor.change){keepMonitoring=options.eventHandler({name:"change",path:path,value:newValue})!==false}else if(!wasMatch&&options.monitor.add){keepMonitoring=options.eventHandler({name:"add",path:path,value:newValue})!==false}}else if(wasMatch){removeMatch(path);if(options.monitor.remove){keepMonitoring=options.eventHandler({name:"remove",path:path,value:oldValue})!==false}}if(keepMonitoring===false){stopMonitoring()}};const childAddedCallback=(err,path,newValue)=>{const isMatch=queryFilters.every((filter=>{if(allowedTableScanOperators.includes(filter.op)){return api.storage.test(newValue[filter.key],filter.op,filter.compare)}else{return filter.index.test(newValue,filter.op,filter.compare)}}));let keepMonitoring=true;if(isMatch){addMatch(path);if(options.monitor.add){keepMonitoring=options.eventHandler({name:"add",path:path,value:options.snapshots?newValue:null})!==false}}if(keepMonitoring===false){stopMonitoring()}};const childRemovedCallback=(err,path,newValue,oldValue)=>{let keepMonitoring=true;removeMatch(path);if(options.monitor.remove){keepMonitoring=options.eventHandler({name:"remove",path:path,value:options.snapshots?oldValue:null})!==false}if(keepMonitoring===false){stopMonitoring()}};if(options.monitor.add||options.monitor.change||options.monitor.remove){api.subscribe(ref.path,"child_changed",childChangedCallback)}if(options.monitor.remove){api.subscribe(ref.path,"notify_child_removed",childRemovedCallback)}if(options.monitor.add){api.subscribe(ref.path,"child_added",childAddedCallback)}}return{results:matches,context:context,stop:stop}}))}exports.query=query},{"./async-task-batch":4,"./data-index":13,"./node-errors":9,"./node-value-types":12,"acebase-core":38}],16:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createIndex=void 0;const acebase_core_1=require("acebase-core");const data_index_1=require("../data-index");const promise_fs_1=require("../promise-fs");async function createIndex(context,path,key,options){if(!context.storage.indexes.supported){throw new Error("Indexes are not supported in current environment because it requires Node.js fs")}const{ipc:ipc,debug:debug,indexes:indexes,storage:storage}=context;const rebuild=options&&options.rebuild===true;const indexType=options&&options.type||"normal";let includeKeys=options&&options.include||[];if(typeof includeKeys==="string"){includeKeys=[includeKeys]}const existingIndex=indexes.find((index=>index.path===path&&index.key===key&&index.type===indexType&&index.includeKeys.length===includeKeys.length&&index.includeKeys.every(((key,index)=>includeKeys[index]===key))));if(existingIndex&&options.config){existingIndex.config=options.config}if(existingIndex&&rebuild!==true){debug.log(`Index on "/${path}/*/${key}" already exists`.colorize(acebase_core_1.ColorStyle.inverse));return existingIndex}if(!ipc.isMaster){const result=await ipc.sendRequest({type:"index.create",path:path,key:key,options:options});if(result.ok){return this.add(result.fileName)}throw new Error(result.reason)}await promise_fs_1.pfs.mkdir(`${storage.settings.path}/${storage.name}.acebase`).catch((err=>{if(err.code!=="EEXIST"){throw err}}));const index=existingIndex||(()=>{const{include:include,caseSensitive:caseSensitive,textLocale:textLocale,textLocaleKey:textLocaleKey}=options;const indexOptions={include:include,caseSensitive:caseSensitive,textLocale:textLocale,textLocaleKey:textLocaleKey};switch(indexType){case"array":return new data_index_1.ArrayIndex(storage,path,key,Object.assign({},indexOptions));case"fulltext":return new data_index_1.FullTextIndex(storage,path,key,Object.assign(Object.assign({},indexOptions),{config:options.config}));case"geo":return new data_index_1.GeoIndex(storage,path,key,Object.assign({},indexOptions));default:return new data_index_1.DataIndex(storage,path,key,Object.assign({},indexOptions))}})();if(!existingIndex){indexes.push(index)}try{await index.build()}catch(err){context.debug.error(`Index build on "/${path}/*/${key}" failed: ${err.message} (code: ${err.code})`.colorize(acebase_core_1.ColorStyle.red));if(!existingIndex){indexes.splice(indexes.indexOf(index),1)}throw err}ipc.sendNotification({type:"index.created",fileName:index.fileName,path:path,key:key,options:options});return index}exports.createIndex=createIndex},{"../data-index":13,"../promise-fs":14,"acebase-core":38}],17:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.CustomStorageHelpers=void 0;const acebase_core_1=require("acebase-core");class CustomStorageHelpers{static ChildPathsSql(path,columnName="path"){const where=path===""?`${columnName} <> '' AND ${columnName} NOT LIKE '%/%'`:`(${columnName} LIKE '${path}/%' OR ${columnName} LIKE '${path}[%') AND ${columnName} NOT LIKE '${path}/%/%' AND ${columnName} NOT LIKE '${path}[%]/%' AND ${columnName} NOT LIKE '${path}[%][%'`;return where}static ChildPathsRegex(path){return new RegExp(`^${path}(?:/[^/[]+|\\[[0-9]+\\])$`)}static DescendantPathsSql(path,columnName="path"){const where=path===""?`${columnName} <> ''`:`${columnName} LIKE '${path}/%' OR ${columnName} LIKE '${path}[%'`;return where}static DescendantPathsRegex(path){return new RegExp(`^${path}(?:/[^/[]+|\\[[0-9]+\\])`)}static get PathInfo(){return acebase_core_1.PathInfo}}exports.CustomStorageHelpers=CustomStorageHelpers},{"acebase-core":38}],18:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.CustomStorage=exports.CustomStorageNodeInfo=exports.CustomStorageNodeAddress=exports.CustomStorageSettings=exports.CustomStorageTransaction=exports.ICustomStorageNode=exports.ICustomStorageNodeMetaData=exports.CustomStorageHelpers=void 0;const acebase_core_1=require("acebase-core");const{compareValues:compareValues}=acebase_core_1.Utils;const node_info_1=require("../../node-info");const node_lock_1=require("../../node-lock");const node_value_types_1=require("../../node-value-types");const node_errors_1=require("../../node-errors");const index_1=require("../index");const helpers_1=require("./helpers");const node_address_1=require("../../node-address");var helpers_2=require("./helpers");Object.defineProperty(exports,"CustomStorageHelpers",{enumerable:true,get:function(){return helpers_2.CustomStorageHelpers}});class ICustomStorageNodeMetaData{constructor(){this.revision="";this.revision_nr=0;this.created=0;this.modified=0;this.type=0}}exports.ICustomStorageNodeMetaData=ICustomStorageNodeMetaData;class ICustomStorageNode extends ICustomStorageNodeMetaData{constructor(){super();this.value=null}}exports.ICustomStorageNode=ICustomStorageNode;class CustomStorageTransaction{constructor(target){this.production=false;this.target={get originalPath(){return target.path},path:target.path,get write(){return target.write}};this.id=acebase_core_1.ID.generate()}async getChildCount(path){let childCount=0;await this.childrenOf(path,{metadata:false,value:false},(()=>{childCount++;return false}));return childCount}async getMultiple(paths){const map=new Map;await Promise.all(paths.map((path=>this.get(path).then((val=>map.set(path,val))))));return map}async setMultiple(nodes){await Promise.all(nodes.map((({path:path,node:node})=>this.set(path,node))))}async removeMultiple(paths){await Promise.all(paths.map((path=>this.remove(path))))}async commit(){throw new Error(`CustomStorageTransaction.rollback must be overridden by subclass`)}async moveToParentPath(targetPath){const currentPath=this._lock&&this._lock.path||this.target.path;if(currentPath===targetPath){return targetPath}const pathInfo=helpers_1.CustomStorageHelpers.PathInfo.get(targetPath);if(pathInfo.isParentOf(currentPath)){if(this._lock){this._lock=await this._lock.moveToParent()}}else{throw new Error(`Locking issue. Locked path "${this._lock.path}" is not a child/descendant of "${targetPath}"`)}this.target.path=targetPath;return targetPath}}exports.CustomStorageTransaction=CustomStorageTransaction;class CustomStorageSettings extends index_1.StorageSettings{constructor(settings){super(settings);this.locking=true;if(typeof settings!=="object"){throw new Error("settings missing")}if(typeof settings.ready!=="function"){throw new Error(`ready must be a function`)}if(typeof settings.getTransaction!=="function"){throw new Error(`getTransaction must be a function`)}this.name=settings.name;this.locking=settings.locking!==false;if(this.locking){this.lockTimeout=typeof settings.lockTimeout==="number"?settings.lockTimeout:120}this.ready=settings.ready;const useLocking=this.locking;const nodeLocker=useLocking?new node_lock_1.NodeLocker(console,this.lockTimeout):null;this.getTransaction=async({path:path,write:write})=>{const transaction=await settings.getTransaction({path:path,write:write});console.assert(typeof transaction.id==="string",`transaction id not set`);const rollback=transaction.rollback;const commit=transaction.commit;transaction.commit=async()=>{const ret=await commit.call(transaction);if(useLocking){await transaction._lock.release("commit")}return ret};transaction.rollback=async reason=>{const ret=await rollback.call(transaction,reason);if(useLocking){await transaction._lock.release("rollback")}return ret};if(useLocking){transaction._lock=await nodeLocker.lock(path,transaction.id,write,`${this.name}::getTransaction`)}return transaction}}}exports.CustomStorageSettings=CustomStorageSettings;class CustomStorageNodeAddress{constructor(containerPath){this.path=containerPath}}exports.CustomStorageNodeAddress=CustomStorageNodeAddress;class CustomStorageNodeInfo extends node_info_1.NodeInfo{constructor(info){super(info);this.revision=info.revision;this.revision_nr=info.revision_nr;this.created=info.created;this.modified=info.modified}}exports.CustomStorageNodeInfo=CustomStorageNodeInfo;class CustomStorage extends index_1.Storage{constructor(dbname,settings,env){super(dbname,settings,env);this._customImplementation=settings;this._init()}async _init(){this.debug.log(`Database "${this.name}" details:`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Type: CustomStorage`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Path: ${this.settings.path}`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Max inline value size: ${this.settings.maxInlineValueSize}`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Autoremove undefined props: ${this.settings.removeVoidProperties}`.colorize(acebase_core_1.ColorStyle.dim));await this._customImplementation.ready();const transaction=await this._customImplementation.getTransaction({path:"",write:true});const info=await this.getNodeInfo("",{transaction:transaction});if(!info.exists){await this._writeNode("",{},{transaction:transaction})}await transaction.commit();if(this.indexes.supported){await this.indexes.load()}this.emit("ready")}throwImplementationError(message){throw new Error(`CustomStorage "${this._customImplementation.name}" ${message}`)}_storeNode(path,node,options){const getTypedChildValue=val=>{if(val===null){throw new Error(`Not allowed to store null values. remove the property`)}else if(["string","number","boolean"].includes(typeof val)){return val}else if(val instanceof Date){return{type:node_value_types_1.VALUE_TYPES.DATETIME,value:val.getTime()}}else if(val instanceof acebase_core_1.PathReference){return{type:node_value_types_1.VALUE_TYPES.REFERENCE,value:val.path}}else if(val instanceof ArrayBuffer){return{type:node_value_types_1.VALUE_TYPES.BINARY,value:acebase_core_1.ascii85.encode(val)}}else if(typeof val==="object"){console.assert(Object.keys(val).length===0,"child object stored in parent can only be empty");return val}};const unprocessed=`Caller should have pre-processed the value by converting it to a string`;if(node.type===node_value_types_1.VALUE_TYPES.ARRAY&&node.value instanceof Array){console.warn(`Unprocessed array. ${unprocessed}`);const obj={};for(let i=0;i{node.value[key]=getTypedChildValue(original[key])}))}return options.transaction.set(path,node)}_processReadNodeValue(node){const getTypedChildValue=val=>{if(val.type===node_value_types_1.VALUE_TYPES.BINARY){return acebase_core_1.ascii85.decode(val.value)}else if(val.type===node_value_types_1.VALUE_TYPES.DATETIME){return new Date(val.value)}else if(val.type===node_value_types_1.VALUE_TYPES.REFERENCE){return new acebase_core_1.PathReference(val.value)}else{throw new Error(`Unhandled child value type ${val.type}`)}};switch(node.type){case node_value_types_1.VALUE_TYPES.ARRAY:case node_value_types_1.VALUE_TYPES.OBJECT:{const obj=node.value;Object.keys(obj).forEach((key=>{const item=obj[key];if(typeof item==="object"&&"type"in item){obj[key]=getTypedChildValue(item)}}));node.value=obj;break}case node_value_types_1.VALUE_TYPES.BINARY:{node.value=acebase_core_1.ascii85.decode(node.value);break}case node_value_types_1.VALUE_TYPES.REFERENCE:{node.value=new acebase_core_1.PathReference(node.value);break}case node_value_types_1.VALUE_TYPES.STRING:{break}default:throw new Error(`Invalid standalone record value type`)}}async _readNode(path,options){const node=await options.transaction.get(path);if(node===null){return null}if(typeof node!=="object"){this.throwImplementationError(`transaction.get must return an ICustomStorageNode object. Use JSON.parse if your set function stored it as a string`)}this._processReadNodeValue(node);return node}_getTypeFromStoredValue(val){let type;if(typeof val==="string"){type=node_value_types_1.VALUE_TYPES.STRING}else if(typeof val==="number"){type=node_value_types_1.VALUE_TYPES.NUMBER}else if(typeof val==="boolean"){type=node_value_types_1.VALUE_TYPES.BOOLEAN}else if(val instanceof Array){type=node_value_types_1.VALUE_TYPES.ARRAY}else if(typeof val==="object"){if("type"in val){const serialized=val;type=serialized.type;val=serialized.value;if(type===node_value_types_1.VALUE_TYPES.DATETIME){val=new Date(val)}else if(type===node_value_types_1.VALUE_TYPES.REFERENCE){val=new acebase_core_1.PathReference(val)}}else{type=node_value_types_1.VALUE_TYPES.OBJECT}}else{throw new Error(`Unknown value type`)}return{type:type,value:val}}async _writeNode(path,value,options){if(!options.merge&&this.valueFitsInline(value)&&path!==""){throw new Error(`invalid value to store in its own node`)}else if(path===""&&(typeof value!=="object"||value instanceof Array)){throw new Error(`Invalid root node value. Must be an object`)}if(typeof options.diff==="undefined"&&typeof options.currentValue!=="undefined"){const diff=compareValues(options.currentValue,value);if(options.merge&&typeof diff==="object"){diff.removed=diff.removed.filter((key=>value[key]===null))}options.diff=diff}if(options.diff==="identical"){return}const transaction=options.transaction;const currentRow=options.currentValue===null?null:await this._readNode(path,{transaction:transaction});if(options.merge&¤tRow){if(currentRow.type===node_value_types_1.VALUE_TYPES.ARRAY&&!(value instanceof Array)&&typeof value==="object"&&Object.keys(value).some((key=>isNaN(parseInt(key))))){throw new Error(`Cannot merge existing array of path "${path}" with an object`)}if(value instanceof Array&¤tRow.type!==node_value_types_1.VALUE_TYPES.ARRAY){throw new Error(`Cannot merge existing object of path "${path}" with an array`)}}const revision=options.revision||acebase_core_1.ID.generate();const mainNode={type:currentRow&¤tRow.type===node_value_types_1.VALUE_TYPES.ARRAY?node_value_types_1.VALUE_TYPES.ARRAY:node_value_types_1.VALUE_TYPES.OBJECT,value:{}};const childNodeValues={};if(value instanceof Array){mainNode.type=node_value_types_1.VALUE_TYPES.ARRAY;const obj={};for(let i=0;i{if(!(key in value)){value[key]=null}}))}Object.keys(value).forEach((key=>{const val=value[key];delete mainNode.value[key];if(val===null){return}else if(typeof val==="undefined"){if(this.settings.removeVoidProperties===true){delete value[key];return}else{throw new Error(`Property "${key}" has invalid value. Cannot store undefined values. Set removeVoidProperties option to true to automatically remove undefined properties`)}}if(this.valueFitsInline(val)){mainNode.value[key]=val}else{childNodeValues[key]=val}}))}const isArray=mainNode.type===node_value_types_1.VALUE_TYPES.ARRAY;if(currentRow){this.debug.log(`Node "/${path}" is being ${options.merge?"updated":"overwritten"}`.colorize(acebase_core_1.ColorStyle.cyan));if(currentIsObjectOrArray||newIsObjectOrArray){const pathInfo=acebase_core_1.PathInfo.get(path);const keys=[];let checkExecuted=false;const includeChildCheck=childPath=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isParentOf(childPath)){this.throwImplementationError(`"${childPath}" is not a child of "${path}" - childrenOf must only check and return paths that are children`)}return true};const addChildPath=childPath=>{if(!checkExecuted){this.throwImplementationError(`childrenOf did not call checkCallback before addCallback`)}const key=acebase_core_1.PathInfo.get(childPath).key;keys.push(key.toString());return true};await transaction.childrenOf(path,{metadata:false,value:false},includeChildCheck,addChildPath);children.current=children.current.concat(keys);if(newIsObjectOrArray){if(options&&options.merge){children.new=children.current.slice()}Object.keys(value).forEach((key=>{if(!children.new.includes(key)){children.new.push(key)}}))}const changes={insert:children.new.filter((key=>!children.current.includes(key))),update:[],delete:options&&options.merge?Object.keys(value).filter((key=>value[key]===null)):children.current.filter((key=>!children.new.includes(key)))};changes.update=children.new.filter((key=>children.current.includes(key)&&!changes.delete.includes(key)));if(isArray&&options.merge&&(changes.insert.length>0||changes.delete.length>0)){const newArrayKeys=changes.update.concat(changes.insert);const isExhaustive=newArrayKeys.every(((k,index,arr)=>arr.includes(index.toString())));if(!isExhaustive){throw new Error(`Elements cannot be inserted beyond, or removed before the end of an array. Rewrite the whole array at path "${path}" or change your schema to use an object collection instead`)}}const writePromises=Object.keys(childNodeValues).map((key=>{const keyOrIndex=isArray?parseInt(key):key;const childDiff=typeof options.diff==="object"?options.diff.forChild(keyOrIndex):undefined;if(childDiff==="identical"){return}const childPath=pathInfo.childPath(keyOrIndex);const childValue=childNodeValues[keyOrIndex];const currentChildValue=typeof options.currentValue==="undefined"?undefined:options.currentValue!==null&&typeof options.currentValue==="object"&&keyOrIndex in options.currentValue?options.currentValue[keyOrIndex]:null;return this._writeNode(childPath,childValue,{transaction:transaction,revision:revision,merge:false,currentValue:currentChildValue,diff:childDiff})}));const movingNodes=newIsObjectOrArray?keys.filter((key=>key in mainNode.value)):[];const deleteDedicatedKeys=changes.delete.concat(movingNodes);const deletePromises=deleteDedicatedKeys.map((key=>{const keyOrIndex=isArray?parseInt(key):key;const childPath=pathInfo.childPath(keyOrIndex);return this._deleteNode(childPath,{transaction:transaction})}));const promises=writePromises.concat(deletePromises);await Promise.all(promises)}const p=this._storeNode(path,{type:mainNode.type,value:mainNode.value,revision:currentRow.revision,revision_nr:currentRow.revision_nr+1,created:currentRow.created,modified:Date.now()},{transaction:transaction});if(p instanceof Promise){return await p}}else{this.debug.log(`Node "/${path}" is being created`.colorize(acebase_core_1.ColorStyle.cyan));if(isArray){const arrayKeys=Object.keys(mainNode.value).concat(Object.keys(childNodeValues));const isExhaustive=arrayKeys.every(((k,index,arr)=>arr.includes(index.toString())));if(!isExhaustive){throw new Error(`Cannot store arrays with missing entries`)}}const promises=Object.keys(childNodeValues).map((key=>{const keyOrIndex=isArray?parseInt(key):key;const childPath=acebase_core_1.PathInfo.getChildPath(path,keyOrIndex);const childValue=childNodeValues[keyOrIndex];return this._writeNode(childPath,childValue,{transaction:transaction,revision:revision,merge:false,currentValue:null})}));const p=this._storeNode(path,{type:mainNode.type,value:mainNode.value,revision:revision,revision_nr:1,created:Date.now(),modified:Date.now()},{transaction:transaction});if(p instanceof Promise){promises.push(p)}await Promise.all(promises)}}async _deleteNode(path,options){const pathInfo=acebase_core_1.PathInfo.get(path);this.debug.log(`Node "/${path}" is being deleted`.colorize(acebase_core_1.ColorStyle.cyan));const deletePaths=[path];let checkExecuted=false;const includeDescendantCheck=descPath=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isAncestorOf(descPath)){this.throwImplementationError(`"${descPath}" is not a descendant of "${path}" - descendantsOf must only check and return paths that are descendants`)}return true};const addDescendant=descPath=>{if(!checkExecuted){this.throwImplementationError(`descendantsOf did not call checkCallback before addCallback`)}deletePaths.push(descPath);return true};const transaction=options.transaction;await transaction.descendantsOf(path,{metadata:false,value:false},includeDescendantCheck,addDescendant);this.debug.log(`Nodes ${deletePaths.map((p=>`"/${p}"`)).join(",")} are being deleted`.colorize(acebase_core_1.ColorStyle.cyan));return transaction.removeMultiple(deletePaths)}getChildren(path,options={}){let callback;const generator={next(valueCallback){callback=valueCallback;return start()}};const start=async()=>{const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:false});try{let canceled=false;await(async()=>{const node=await this._readNode(path,{transaction:transaction});if(!node){throw new node_errors_1.NodeNotFoundError(`Node "/${path}" does not exist`)}if(![node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(node.type)){return}const isArray=node.type===node_value_types_1.VALUE_TYPES.ARRAY;const value=node.value;let keys=Object.keys(value).map((key=>isArray?parseInt(key):key));if(options.keyFilter){keys=keys.filter((key=>options.keyFilter.includes(key)))}const pathInfo=acebase_core_1.PathInfo.get(path);keys.length>0&&keys.every((key=>{const child=this._getTypeFromStoredValue(value[key]);const info=new CustomStorageNodeInfo({path:pathInfo.childPath(key),key:isArray?null:key,index:isArray?key:null,type:child.type,address:null,exists:true,value:child.value,revision:node.revision,revision_nr:node.revision_nr,created:new Date(node.created),modified:new Date(node.modified)});canceled=callback(info)===false;return!canceled}));if(canceled){return}let checkExecuted=false;const includeChildCheck=childPath=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isParentOf(childPath)){this.throwImplementationError(`"${childPath}" is not a child of "${path}" - childrenOf must only check and return paths that are children`)}if(options.keyFilter){const key=acebase_core_1.PathInfo.get(childPath).key;return options.keyFilter.includes(key)}return true};const addChildNode=(childPath,node)=>{if(!checkExecuted){this.throwImplementationError(`childrenOf did not call checkCallback before addCallback`)}const key=acebase_core_1.PathInfo.get(childPath).key;const info=new CustomStorageNodeInfo({path:childPath,type:node.type,key:isArray?null:key,index:isArray?key:null,address:new node_address_1.NodeAddress(childPath),exists:true,value:null,revision:node.revision,revision_nr:node.revision_nr,created:new Date(node.created),modified:new Date(node.modified)});canceled=callback(info)===false;return!canceled};await transaction.childrenOf(path,{metadata:true,value:false},includeChildCheck,addChildNode)})();if(!options.transaction){await transaction.commit()}return canceled}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}};return generator}async getNode(path,options){options=options||{};const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:false});try{const node=await(async()=>{const filtered=options.include&&options.include.length>0||options.exclude&&options.exclude.length>0||options.child_objects===false;const pathInfo=acebase_core_1.PathInfo.get(path);const targetNode=await this._readNode(path,{transaction:transaction});if(!targetNode){if(path===""){return{value:null}}const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);const parentNode=await this._readNode(pathInfo.parentPath,{transaction:transaction});if(parentNode&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(parentNode.type)&&pathInfo.key in parentNode.value){const childValueInfo=this._getTypeFromStoredValue(parentNode.value[pathInfo.key]);return{revision:parentNode.revision,revision_nr:parentNode.revision_nr,created:parentNode.created,modified:parentNode.modified,type:childValueInfo.type,value:childValueInfo.value}}return{value:null}}const isArray=targetNode.type===node_value_types_1.VALUE_TYPES.ARRAY;const convertFilterArray=arr=>{const isNumber=key=>/^[0-9]+$/.test(key);return arr.map((path=>acebase_core_1.PathInfo.get(isArray&&isNumber(path)?`[${path}]`:path)))};const includeFilter=options.include?convertFilterArray(options.include):[];const excludeFilter=options.exclude?convertFilterArray(options.exclude):[];const applyFiltersOnInlineData=(descPath,node)=>{if([node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(node.type)&&includeFilter.length>0){const trailKeys=acebase_core_1.PathInfo.getPathKeys(descPath).slice(pathInfo.keys.length);const checkPathInfo=new acebase_core_1.PathInfo(trailKeys);const remove=[];const includes=includeFilter.filter((info=>info.isDescendantOf(checkPathInfo)));if(includes.length>0){const isArray=node.type===node_value_types_1.VALUE_TYPES.ARRAY;remove.push(...Object.keys(node.value).map((key=>isArray?+key:key)));for(const info of includes){const targetProp=info.keys[trailKeys.length];if(typeof targetProp==="string"&&(targetProp==="*"||targetProp.startsWith("$"))){remove.splice(0);break}const index=remove.indexOf(targetProp);index>=0&&remove.splice(index,1)}}const hasIncludeOnChild=includeFilter.some((info=>info.isChildOf(checkPathInfo)));const hasExcludeOnChild=excludeFilter.some((info=>info.isChildOf(checkPathInfo)));if(hasExcludeOnChild&&!hasIncludeOnChild){const excludes=excludeFilter.filter((info=>info.isChildOf(checkPathInfo)));for(let i=0;iinfo.equals(remove[i])))){remove.splice(i,1);i--}}}for(const key of remove){delete node.value[key]}}};applyFiltersOnInlineData(path,targetNode);let checkExecuted=false;const includeDescendantCheck=(descPath,metadata)=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isAncestorOf(descPath)){this.throwImplementationError(`"${descPath}" is not a descendant of "${path}" - descendantsOf must only check and return paths that are descendants`)}if(!filtered){return true}const descPathKeys=acebase_core_1.PathInfo.getPathKeys(descPath);const trailKeys=descPathKeys.slice(pathInfo.keys.length);const checkPathInfo=new acebase_core_1.PathInfo(trailKeys);let include=(includeFilter.length>0?includeFilter.some((info=>checkPathInfo.isOnTrailOf(info))):true)&&(excludeFilter.length>0?!excludeFilter.some((info=>info.equals(checkPathInfo)||info.isAncestorOf(checkPathInfo))):true);if(include&&options.child_objects===false&&(pathInfo.isParentOf(descPath)&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(metadata?metadata.type:-1)||acebase_core_1.PathInfo.getPathKeys(descPath).length>pathInfo.pathKeys.length+1)){include=false}return include};const descRows=[];const addDescendant=(descPath,node)=>{if(!checkExecuted){this.throwImplementationError("descendantsOf did not call checkCallback before addCallback")}if(options.child_objects===false&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(node.type)){return true}applyFiltersOnInlineData(descPath,node);this._processReadNodeValue(node);const row=node;row.path=descPath;descRows.push(row);return true};await transaction.descendantsOf(path,{metadata:true,value:true},includeDescendantCheck,addDescendant);this.debug.log(`Read node "/${path}" and ${filtered?"(filtered) ":""}descendants from ${descRows.length+1} records`.colorize(acebase_core_1.ColorStyle.magenta));const result=targetNode;const objectToArray=obj=>{const arr=[];Object.keys(obj).forEach((key=>{const index=parseInt(key);arr[index]=obj[index]}));return arr};if(targetNode.type===node_value_types_1.VALUE_TYPES.ARRAY){result.value=objectToArray(result.value)}if(targetNode.type===node_value_types_1.VALUE_TYPES.OBJECT||targetNode.type===node_value_types_1.VALUE_TYPES.ARRAY){const targetPathKeys=acebase_core_1.PathInfo.getPathKeys(path);const value=targetNode.value;for(let i=0;i{if(childKey in parent[key]){this.throwImplementationError(`Custom storage merge error: child key "${childKey}" is in parent value already! Make sure the get/childrenOf/descendantsOf methods of the custom storage class return values that can be modified by AceBase without affecting the stored source`)}parent[key][childKey]=nodeValue[childKey]}))}}else{parent[key]=nodeValue}parent=parent[key]}}}else if(descRows.length>0){this.throwImplementationError(`multiple records found for non-object value!`)}if(options.child_objects===false){Object.keys(result.value).forEach((key=>{if(typeof result.value[key]==="object"&&result.value[key].constructor===Object){console.assert(Object.keys(result.value[key]).length===0);delete result.value[key]}}))}if(options.include){}if(options.exclude){const process=(obj,keys)=>{if(typeof obj!=="object"){return}const key=keys[0];if(key==="*"){Object.keys(obj).forEach((k=>{process(obj[k],keys.slice(1))}))}else if(keys.length>1){key in obj&&process(obj[key],keys.slice(1))}else{delete obj[key]}};options.exclude.forEach((path=>{const checkKeys=acebase_core_1.PathInfo.getPathKeys(path);process(result.value,checkKeys)}))}return result})();if(!options.transaction){await transaction.commit()}return node}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}async getNodeInfo(path,options={}){options=options||{};const pathInfo=acebase_core_1.PathInfo.get(path);const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:false});try{const node=await this._readNode(path,{transaction:transaction});const info=new CustomStorageNodeInfo({path:path,key:typeof pathInfo.key==="string"?pathInfo.key:null,index:typeof pathInfo.key==="number"?pathInfo.key:null,type:node?node.type:0,exists:node!==null,address:node?new node_address_1.NodeAddress(path):null,created:node?new Date(node.created):null,modified:node?new Date(node.modified):null,revision:node?node.revision:null,revision_nr:node?node.revision_nr:null});if(!node&&path!==""){const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);const parent=await this._readNode(pathInfo.parentPath,{transaction:transaction});if(parent&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(parent.type)&&pathInfo.key in parent.value){info.exists=true;info.value=parent.value[pathInfo.key];info.address=null;info.type=parent.type;info.created=new Date(parent.created);info.modified=new Date(parent.modified);info.revision=parent.revision;info.revision_nr=parent.revision_nr}else{info.address=null}}if(options.include_child_count){info.childCount=0;if([node_value_types_1.VALUE_TYPES.ARRAY,node_value_types_1.VALUE_TYPES.OBJECT].includes(info.valueType)&&info.address){info.childCount=node.value?Object.keys(node.value).length:0;info.childCount+=await transaction.getChildCount(path)}}if(!options.transaction){await transaction.commit()}return info}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}async setNode(path,value,options={suppress_events:false,context:null}){if(this.settings.readOnly){throw new Error(`Database is opened in read-only mode`)}const pathInfo=acebase_core_1.PathInfo.get(path);const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:true});try{if(path===""){if(value===null||typeof value!=="object"||value instanceof Array||value instanceof ArrayBuffer||"buffer"in value&&value.buffer instanceof ArrayBuffer){throw new Error(`Invalid value for root node: ${value}`)}await this._writeNodeWithTracking("",value,{merge:false,transaction:transaction,suppress_events:options.suppress_events,context:options.context})}else if(typeof options.assert_revision!=="undefined"){const info=await this.getNodeInfo(path,{transaction:transaction});if(info.revision!==options.assert_revision){throw new node_errors_1.NodeRevisionError(`revision '${info.revision}' does not match requested revision '${options.assert_revision}'`)}if(info.address&&info.address.path===path&&value!==null&&!this.valueFitsInline(value)){await this._writeNodeWithTracking(path,value,{merge:false,transaction:transaction,suppress_events:options.suppress_events,context:options.context})}else{const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this._writeNodeWithTracking(pathInfo.parentPath,{[pathInfo.key]:value},{merge:true,transaction:transaction,suppress_events:options.suppress_events,context:options.context})}}else{const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this.updateNode(pathInfo.parentPath,{[pathInfo.key]:value},{transaction:transaction,suppress_events:options.suppress_events,context:options.context})}if(!options.transaction){await transaction.commit()}}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}async updateNode(path,updates,options={suppress_events:false,context:null}){if(this.settings.readOnly){throw new Error(`Database is opened in read-only mode`)}if(typeof updates!=="object"){throw new Error(`invalid updates argument`)}else if(Object.keys(updates).length===0){return}const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:true});try{const nodeInfo=await this.getNodeInfo(path,{transaction:transaction});const pathInfo=acebase_core_1.PathInfo.get(path);if(nodeInfo.exists&&nodeInfo.address&&nodeInfo.address.path===path){await this._writeNodeWithTracking(path,updates,{transaction:transaction,merge:true,suppress_events:options.suppress_events,context:options.context})}else if(nodeInfo.exists){const pathInfo=acebase_core_1.PathInfo.get(path);const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this._writeNodeWithTracking(pathInfo.parentPath,{[pathInfo.key]:updates},{transaction:transaction,merge:true,suppress_events:options.suppress_events,context:options.context})}else{const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this.updateNode(pathInfo.parentPath,{[pathInfo.key]:updates},{transaction:transaction,suppress_events:options.suppress_events,context:options.context})}if(!options.transaction){await transaction.commit()}}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}}exports.CustomStorage=CustomStorage},{"../../node-address":8,"../../node-errors":9,"../../node-info":10,"../../node-lock":11,"../../node-value-types":12,"../index":25,"./helpers":17,"acebase-core":38}],19:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createIndexedDBInstance=void 0;const acebase_core_1=require("acebase-core");const __1=require("..");const __2=require("../../..");const settings_1=require("./settings");const transaction_1=require("./transaction");function createIndexedDBInstance(dbname,init={}){const settings=new settings_1.IndexedDBStorageSettings(init);const IndexedDB=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;const request=IndexedDB.open(`${dbname}.acebase`,1);request.onupgradeneeded=e=>{const db=request.result;db.createObjectStore("nodes",{keyPath:"path"});db.createObjectStore("content")};let idb;const readyPromise=new Promise(((resolve,reject)=>{request.onsuccess=e=>{idb=request.result;resolve()};request.onerror=e=>{reject(e)}}));const cache=new acebase_core_1.SimpleCache(typeof settings.cacheSeconds==="number"?settings.cacheSeconds:60);const storageSettings=new __1.CustomStorageSettings({name:"IndexedDB",locking:true,removeVoidProperties:settings.removeVoidProperties,maxInlineValueSize:settings.maxInlineValueSize,lockTimeout:settings.lockTimeout,ready(){return readyPromise},async getTransaction(target){await readyPromise;const context={debug:false,db:idb,cache:cache,ipc:ipc};return new transaction_1.IndexedDBStorageTransaction(context,target)}});const db=new __2.AceBase(dbname,{logLevel:settings.logLevel,storage:storageSettings,sponsor:settings.sponsor});const ipc=db.api.storage.ipc;db.settings.ipcEvents=settings.multipleTabs===true;ipc.on("notification",(async notification=>{const message=notification.data;if(typeof message!=="object"){return}if(message.action==="cache.invalidate"){for(const path of message.paths){cache.remove(path)}}}));return db}exports.createIndexedDBInstance=createIndexedDBInstance},{"..":18,"../../..":5,"./settings":20,"./transaction":21,"acebase-core":38}],20:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.IndexedDBStorageSettings=void 0;const __1=require("../..");class IndexedDBStorageSettings extends __1.StorageSettings{constructor(settings){super(settings);this.multipleTabs=false;this.cacheSeconds=60;this.sponsor=false;if(typeof settings.logLevel==="string"){this.logLevel=settings.logLevel}if(typeof settings.multipleTabs==="boolean"){this.multipleTabs=settings.multipleTabs}if(typeof settings.cacheSeconds==="number"){this.cacheSeconds=settings.cacheSeconds}if(typeof settings.sponsor==="boolean"){this.sponsor=settings.sponsor}["type","ipc","path"].forEach((prop=>{if(prop in settings){console.warn(`${prop} setting is not supported for AceBase IndexedDBStorage`)}}))}}exports.IndexedDBStorageSettings=IndexedDBStorageSettings},{"../..":25}],21:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.IndexedDBStorageTransaction=void 0;const __1=require("..");function _requestToPromise(request){return new Promise(((resolve,reject)=>{request.onsuccess=event=>resolve(request.result||null);request.onerror=reject}))}class IndexedDBStorageTransaction extends __1.CustomStorageTransaction{constructor(context,target){super(target);this.context=context;this.production=true;this._pending=[]}_createTransaction(write=false){const tx=this.context.db.transaction(["nodes","content"],write?"readwrite":"readonly");return tx}_splitMetadata(node){const value=node.value;const copy=Object.assign({},node);delete copy.value;const metadata=copy;return{metadata:metadata,value:value}}async commit(){if(this._pending.length===0){return}const batch=this._pending.splice(0);this.context.ipc.sendNotification({action:"cache.invalidate",paths:batch.map((op=>op.path))});const tx=this._createTransaction(true);try{await new Promise(((resolve,reject)=>{let stop=false,processed=0;const handleError=err=>{stop=true;reject(err)};const handleSuccess=()=>{if(++processed===batch.length){resolve()}};batch.forEach(((op,i)=>{if(stop){return}let r1,r2;const path=op.path;if(op.action==="set"){const{metadata:metadata,value:value}=this._splitMetadata(op.node);const nodeInfo={path:path,metadata:metadata};r1=tx.objectStore("nodes").put(nodeInfo);r2=tx.objectStore("content").put(value,path);this.context.cache.set(path,op.node)}else if(op.action==="remove"){r1=tx.objectStore("content").delete(path);r2=tx.objectStore("nodes").delete(path);this.context.cache.set(path,null)}else{handleError(new Error(`Unknown pending operation "${op.action}" on path "${path}" `))}let succeeded=0;r1.onsuccess=r2.onsuccess=()=>{if(++succeeded===2){handleSuccess()}};r1.onerror=r2.onerror=handleError}))}));tx.commit&&tx.commit()}catch(err){console.error(err);tx.abort&&tx.abort();throw err}}async rollback(err){this._pending=[]}async get(path){if(this.context.cache.has(path)){const cache=this.context.cache.get(path);return cache}const tx=this._createTransaction(false);const r1=_requestToPromise(tx.objectStore("nodes").get(path));const r2=_requestToPromise(tx.objectStore("content").get(path));try{const results=await Promise.all([r1,r2]);tx.commit&&tx.commit();const info=results[0];if(!info){this.context.cache.set(path,null);return null}const node=info.metadata;node.value=results[1];this.context.cache.set(path,node);return node}catch(err){console.error(`IndexedDB get error`,err);tx.abort&&tx.abort();throw err}}set(path,node){this._pending.push({action:"set",path:path,node:node})}remove(path){this._pending.push({action:"remove",path:path})}async removeMultiple(paths){paths.forEach((path=>{this._pending.push({action:"remove",path:path})}))}childrenOf(path,include,checkCallback,addCallback){return this._getChildrenOf(path,Object.assign(Object.assign({},include),{descendants:false}),checkCallback,addCallback)}descendantsOf(path,include,checkCallback,addCallback){return this._getChildrenOf(path,Object.assign(Object.assign({},include),{descendants:true}),checkCallback,addCallback)}_getChildrenOf(path,include,checkCallback,addCallback){return new Promise(((resolve,reject)=>{const pathInfo=__1.CustomStorageHelpers.PathInfo.get(path);const tx=this._createTransaction(false);const store=tx.objectStore("nodes");const query=IDBKeyRange.lowerBound(path,true);const cursor=include.metadata?store.openCursor(query):store.openKeyCursor(query);cursor.onerror=e=>{var _a;(_a=tx.abort)===null||_a===void 0?void 0:_a.call(tx);reject(e)};cursor.onsuccess=async e=>{var _a,_b,_c;const otherPath=(_b=(_a=cursor.result)===null||_a===void 0?void 0:_a.key)!==null&&_b!==void 0?_b:null;let keepGoing=true;if(otherPath===null){keepGoing=false}else if(!pathInfo.isAncestorOf(otherPath)){keepGoing=false}else if(include.descendants||pathInfo.isParentOf(otherPath)){let node;if(include.metadata){const valueCursor=cursor;const data=valueCursor.result.value;node=data.metadata}const shouldAdd=checkCallback(otherPath,node);if(shouldAdd){if(include.value){if(this.context.cache.has(otherPath)){const cache=this.context.cache.get(otherPath);node.value=cache.value}else{const req=tx.objectStore("content").get(otherPath);node.value=await new Promise(((resolve,reject)=>{req.onerror=e=>{resolve(null)};req.onsuccess=e=>{resolve(req.result)}}));this.context.cache.set(otherPath,node.value===null?null:node)}}keepGoing=addCallback(otherPath,node)}}if(keepGoing){try{cursor.result.continue()}catch(err){keepGoing=false}}if(!keepGoing){(_c=tx.commit)===null||_c===void 0?void 0:_c.call(tx);resolve()}}}))}}exports.IndexedDBStorageTransaction=IndexedDBStorageTransaction},{"..":18}],22:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createLocalStorageInstance=exports.LocalStorageTransaction=exports.LocalStorageSettings=void 0;const __1=require("..");const __2=require("../../..");const settings_1=require("./settings");Object.defineProperty(exports,"LocalStorageSettings",{enumerable:true,get:function(){return settings_1.LocalStorageSettings}});const transaction_1=require("./transaction");Object.defineProperty(exports,"LocalStorageTransaction",{enumerable:true,get:function(){return transaction_1.LocalStorageTransaction}});function createLocalStorageInstance(dbname,init={}){const settings=new settings_1.LocalStorageSettings(init);const localStorage=settings.provider?settings.provider:settings.temp?window.localStorage:window.sessionStorage;const storageSettings=new __1.CustomStorageSettings({name:"LocalStorage",locking:true,removeVoidProperties:settings.removeVoidProperties,maxInlineValueSize:settings.maxInlineValueSize,ready(){return Promise.resolve()},getTransaction(target){const context={debug:true,dbname:dbname,localStorage:localStorage};const transaction=new transaction_1.LocalStorageTransaction(context,target);return Promise.resolve(transaction)}});const db=new __2.AceBase(dbname,{logLevel:settings.logLevel,storage:storageSettings,sponsor:settings.sponsor});db.settings.ipcEvents=settings.multipleTabs===true;return db}exports.createLocalStorageInstance=createLocalStorageInstance},{"..":18,"../../..":5,"./settings":23,"./transaction":24}],23:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.LocalStorageSettings=void 0;const __1=require("../..");class LocalStorageSettings extends __1.StorageSettings{constructor(settings){super(settings);this.temp=false;this.multipleTabs=false;if(typeof settings.temp==="boolean"){this.temp=settings.temp}if(typeof settings.provider==="object"){this.provider=settings.provider}if(typeof settings.multipleTabs==="boolean"){this.multipleTabs=settings.multipleTabs}if(typeof settings.logLevel==="string"){this.logLevel=settings.logLevel}if(typeof settings.sponsor==="boolean"){this.sponsor=settings.sponsor}["type","ipc","path"].forEach((prop=>{if(prop in settings){console.warn(`${prop} setting is not supported for AceBase LocalStorage`)}}))}}exports.LocalStorageSettings=LocalStorageSettings},{"../..":25}],24:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.LocalStorageTransaction=void 0;const __1=require("..");class LocalStorageTransaction extends __1.CustomStorageTransaction{constructor(context,target){super(target);this.context=context;this._storageKeysPrefix=`${this.context.dbname}.acebase::`}async commit(){}async rollback(err){}async get(path){const json=this.context.localStorage.getItem(this.getStorageKeyForPath(path));const val=JSON.parse(json);return val}async set(path,val){const json=JSON.stringify(val);this.context.localStorage.setItem(this.getStorageKeyForPath(path),json)}async remove(path){this.context.localStorage.removeItem(this.getStorageKeyForPath(path))}async childrenOf(path,include,checkCallback,addCallback){const pathInfo=__1.CustomStorageHelpers.PathInfo.get(path);for(let i=0;i`notify_${event}`)));const NOOP=()=>{};class SchemaValidationError extends Error{constructor(reason){super(`Schema validation failed: ${reason}`);this.reason=reason}}exports.SchemaValidationError=SchemaValidationError;class StorageSettings{constructor(settings={}){this.maxInlineValueSize=50;this.removeVoidProperties=false;this.path=".";this.lockTimeout=120;this.type="data";this.readOnly=false;if(typeof settings.maxInlineValueSize==="number"){this.maxInlineValueSize=settings.maxInlineValueSize}if(typeof settings.removeVoidProperties==="boolean"){this.removeVoidProperties=settings.removeVoidProperties}if(typeof settings.path==="string"){this.path=settings.path}if(this.path.endsWith("/")){this.path=this.path.slice(0,-1)}if(typeof settings.lockTimeout==="number"){this.lockTimeout=settings.lockTimeout}if(typeof settings.type==="string"){this.type=settings.type}if(typeof settings.readOnly==="boolean"){this.readOnly=settings.readOnly}if(typeof settings.ipc==="object"){this.ipc=settings.ipc}}}exports.StorageSettings=StorageSettings;class Storage extends acebase_core_1.SimpleEventEmitter{constructor(name,settings,env){super();this.name=name;this.settings=settings;this._schemas=[];this._indexes=[];this.indexes={get supported(){return promise_fs_1.pfs===null||promise_fs_1.pfs===void 0?void 0:promise_fs_1.pfs.hasFileSystem},create:(path,key,options={rebuild:false})=>{const context={storage:this,debug:this.debug,indexes:this._indexes,ipc:this.ipc};return(0,indexes_1.createIndex)(context,path,key,options)},get:(path,key=null)=>{if(path.includes("$")){const pathKeys=acebase_core_1.PathInfo.getPathKeys(path).map((key=>typeof key==="string"&&key.startsWith("$")?"*":key));path=new acebase_core_1.PathInfo(pathKeys).path}return this._indexes.filter((index=>index.path===path&&(key===null||key===index.key)))},getAll:(targetPath,options={parentPaths:true,childPaths:true})=>{const pathKeys=acebase_core_1.PathInfo.getPathKeys(targetPath);return this._indexes.filter((index=>{const indexKeys=acebase_core_1.PathInfo.getPathKeys(index.path+"/*");if(options.parentPaths&&indexKeys.every(((key,i)=>key==="*"||pathKeys[i]===key))&&[index.key].concat(...index.includeKeys).includes(pathKeys[indexKeys.length])){return true}else if(indexKeys.length[key,"*"].includes(indexKeys[i])))}))},list:()=>this._indexes.slice(),load:async()=>{this._indexes.splice(0);if(!promise_fs_1.pfs.hasFileSystem){return}let files=[];try{files=await promise_fs_1.pfs.readdir(`${this.settings.path}/${this.name}.acebase`)}catch(err){if(err.code!=="ENOENT"){this.debug.error(err)}}const promises=[];files.forEach((fileName=>{if(!fileName.endsWith(".idx")){return}const needsStoragePrefix=this.settings.type!=="data";const hasStoragePrefix=/^\[[a-z]+\]-/.test(fileName);if(!needsStoragePrefix&&!hasStoragePrefix||needsStoragePrefix&&fileName.startsWith(`[${this.settings.type}]-`)){const p=this.indexes.add(fileName);promises.push(p)}}));await Promise.all(promises)},add:async fileName=>{try{const index=await data_index_1.DataIndex.readFromFile(this,fileName);this._indexes.push(index);return index}catch(err){this.debug.error(err);return null}},delete:async fileName=>{const index=await this.indexes.remove(fileName);await index.delete();this.ipc.sendNotification({type:"index.deleted",fileName:index.fileName,path:index.path,keys:index.key})},remove:async fileName=>{const index=this._indexes.find((index=>index.fileName===fileName));if(!index){throw new Error(`Index ${fileName} not found`)}this._indexes.splice(this._indexes.indexOf(index),1);return index},close:async()=>{const promises=this.indexes.list().map((index=>index.close().catch((err=>this.debug.error(err)))));await Promise.all(promises)}};this._eventSubscriptions={};this.subscriptions={add:(path,type,callback)=>{if(SUPPORTED_EVENTS.indexOf(type)<0){throw new TypeError(`Invalid event type "${type}"`)}let pathSubs=this._eventSubscriptions[path];if(!pathSubs){pathSubs=this._eventSubscriptions[path]=[]}pathSubs.push({created:Date.now(),type:type,callback:callback});this.emit("subscribe",{path:path,event:type,callback:callback})},remove:(path,type,callback)=>{const pathSubs=this._eventSubscriptions[path];if(!pathSubs){return}const next=()=>pathSubs.findIndex((ps=>(type?ps.type===type:true)&&(callback?ps.callback===callback:true)));let i;while((i=next())>=0){pathSubs.splice(i,1)}this.emit("unsubscribe",{path:path,event:type,callback:callback})},hasValueSubscribersForPath(path){const valueNeeded=this.getValueSubscribersForPath(path);return!!valueNeeded},getValueSubscribersForPath:path=>{const pathInfo=new acebase_core_1.PathInfo(path);const valueSubscribers=[];Object.keys(this._eventSubscriptions).forEach((subscriptionPath=>{if(pathInfo.equals(subscriptionPath)||pathInfo.isDescendantOf(subscriptionPath)){const pathSubs=this._eventSubscriptions[subscriptionPath];const eventPath=acebase_core_1.PathInfo.fillVariables(subscriptionPath,path);pathSubs.filter((sub=>!sub.type.startsWith("notify_"))).forEach((sub=>{let dataPath=null;if(sub.type==="value"){dataPath=eventPath}else if(["mutated","mutations"].includes(sub.type)&&pathInfo.isDescendantOf(eventPath)){dataPath=path}else if(sub.type==="child_changed"&&path!==eventPath){const childKey=acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}else if(["child_added","child_removed"].includes(sub.type)&&pathInfo.isChildOf(eventPath)){const childKey=acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}if(dataPath!==null&&!valueSubscribers.some((s=>s.type===sub.type&&s.eventPath===eventPath))){valueSubscribers.push({type:sub.type,eventPath:eventPath,dataPath:dataPath,subscriptionPath:subscriptionPath})}}))}}));return valueSubscribers},getAllSubscribersForPath:path=>{const pathInfo=acebase_core_1.PathInfo.get(path);const subscribers=[];Object.keys(this._eventSubscriptions).forEach((subscriptionPath=>{if(pathInfo.isOnTrailOf(subscriptionPath)){const pathSubs=this._eventSubscriptions[subscriptionPath];const eventPath=acebase_core_1.PathInfo.fillVariables(subscriptionPath,path);pathSubs.forEach((sub=>{let dataPath=null;if(sub.type==="value"||sub.type==="notify_value"){dataPath=eventPath}else if(["child_changed","notify_child_changed"].includes(sub.type)){const childKey=path===eventPath||pathInfo.isAncestorOf(eventPath)?"*":acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}else if(["mutated","mutations","notify_mutated","notify_mutations"].includes(sub.type)){dataPath=path}else if(["child_added","child_removed","notify_child_added","notify_child_removed"].includes(sub.type)&&(pathInfo.isChildOf(eventPath)||path===eventPath||pathInfo.isAncestorOf(eventPath))){const childKey=path===eventPath||pathInfo.isAncestorOf(eventPath)?"*":acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}if(dataPath!==null&&!subscribers.some((s=>s.type===sub.type&&s.eventPath===eventPath&&s.subscriptionPath===subscriptionPath))){subscribers.push({type:sub.type,eventPath:eventPath,dataPath:dataPath,subscriptionPath:subscriptionPath})}}))}}));return subscribers},trigger:(event,path,dataPath,oldValue,newValue,context)=>{const pathSubscriptions=this._eventSubscriptions[path]||[];pathSubscriptions.filter((sub=>sub.type===event)).forEach((sub=>{sub.callback(null,dataPath,newValue,oldValue,context)}))}};this.debug=new acebase_core_1.DebugLogger(env.logLevel,`[${name}${typeof settings.type==="string"&&settings.type!=="data"?`:${settings.type}`:""}]`);const ipcName=name+(typeof settings.type==="string"?`_${settings.type}`:"");if(settings.ipc){if(typeof settings.ipc.port!=="number"){throw new Error("IPC port number must be a number")}if(!["master","worker"].includes(settings.ipc.role)){throw new Error(`IPC client role must be either "master" or "worker", not "${settings.ipc.role}"`)}const ipcSettings=Object.assign({dbname:ipcName},settings.ipc);this.ipc=new ipc_1.RemoteIPCPeer(this,ipcSettings)}else{this.ipc=new ipc_1.IPCPeer(this,ipcName)}this.ipc.once("exit",(code=>{if(this.indexes.supported){this.indexes.close()}}));this.nodeLocker={lock:(path,tid,write,comment)=>this.ipc.lock({path:path,tid:tid,write:write,comment:comment})};this._lastTid=0}createTid(){return DEBUG_MODE?++this._lastTid:acebase_core_1.ID.generate()}async close(){await this.ipc.exit()}get path(){return`${this.settings.path}/${this.name}.acebase`}valueFitsInline(value){if(typeof value==="number"||typeof value==="boolean"||value instanceof Date){return true}else if(typeof value==="string"){if(value.length>this.settings.maxInlineValueSize){return false}const encoded=encodeString(value);return encoded.lengththis.settings.maxInlineValueSize){return false}const encoded=encodeString(value.path);return encoded.length0){hasValueSubscribers=true;const eventPaths=valueSubscribers.map((sub=>({path:sub.dataPath,keys:acebase_core_1.PathInfo.getPathKeys(sub.dataPath)}))).sort(((a,b)=>{if(a.keys.lengthb.keys.length)return 1;return 0}));const first=eventPaths[0];topEventPath=first.path;if(valueSubscribers.filter((sub=>sub.dataPath===topEventPath)).every((sub=>sub.type==="mutated"||sub.type.startsWith("notify_")))){hasValueSubscribers=false}topEventPath=acebase_core_1.PathInfo.fillVariables(topEventPath,path)}const indexes=this.indexes.getAll(path,{childPaths:true,parentPaths:true}).map((index=>({index:index,keys:acebase_core_1.PathInfo.getPathKeys(index.path)}))).sort(((a,b)=>{if(a.keys.lengthb.keys.length){return 1}return 0})).map((obj=>obj.index));const keysFilter=[];if(indexes.length>0){indexes.sort(((a,b)=>{if(typeof a._pathKeys==="undefined"){a._pathKeys=acebase_core_1.PathInfo.getPathKeys(a.path)}if(typeof b._pathKeys==="undefined"){b._pathKeys=acebase_core_1.PathInfo.getPathKeys(b.path)}if(a._pathKeys.lengthb._pathKeys.length)return 1;return 0}));const topIndex=indexes[0];const topIndexPath=topIndex.path===path?path:acebase_core_1.PathInfo.fillVariables(`${topIndex.path}/*`,path);if(topIndexPath.lengthindex.path===topIndex.path)).forEach((index=>{const keys=[index.key].concat(index.includeKeys);keys.forEach((key=>!keysFilter.includes(key)&&keysFilter.push(key)))}))}}return{topEventPath:topEventPath,eventSubscriptions:eventSubscriptions,valueSubscribers:valueSubscribers,hasValueSubscribers:hasValueSubscribers,indexes:indexes,keysFilter:keysFilter}}async _writeNodeWithTracking(path,value,options={merge:false,waitForIndexUpdates:true,suppress_events:false,context:null,impact:null}){options=options||{};if(!options.tid&&!options.transaction){throw new Error("_writeNodeWithTracking MUST be executed with a tid OR transaction!")}options.merge=options.merge===true;const validation=this.validateSchema(path,value,{updates:options.merge});if(!validation.ok){throw new SchemaValidationError(validation.reason)}const tid=options.tid;const transaction=options.transaction;let topEventData=null;const updateImpact=options.impact?options.impact:this.getUpdateImpact(path,options.suppress_events);const{topEventPath:topEventPath,eventSubscriptions:eventSubscriptions,hasValueSubscribers:hasValueSubscribers,indexes:indexes}=updateImpact;let{keysFilter:keysFilter}=updateImpact;const writeNode=()=>{if(typeof options._customWriteFunction==="function"){return options._customWriteFunction()}if(topEventData){const pathKeys=acebase_core_1.PathInfo.getPathKeys(path);const eventPathKeys=acebase_core_1.PathInfo.getPathKeys(topEventPath);const trailKeys=pathKeys.slice(eventPathKeys.length);let currentValue=topEventData;while(trailKeys.length>0&¤tValue!==null){const childKey=trailKeys.shift();currentValue=typeof currentValue==="object"&&childKey in currentValue?currentValue[childKey]:null}options.currentValue=currentValue}return this._writeNode(path,value,options)};const transactionLoggingEnabled=this.settings.transactions&&this.settings.transactions.log===true;if(eventSubscriptions.length===0&&indexes.length===0&&!transactionLoggingEnabled){return writeNode()}if(!hasValueSubscribers&&options.merge===true&&keysFilter.length===0){keysFilter=Object.keys(value);if(topEventPath!==path){const trailPath=path.slice(topEventPath.length);keysFilter=keysFilter.map((key=>`${trailPath}/${key}`))}}const eventNodeInfo=await this.getNodeInfo(topEventPath,{transaction:transaction,tid:tid});let currentValue=null;if(eventNodeInfo.exists){const valueOptions={transaction:transaction,tid:tid};if(keysFilter.length>0){valueOptions.include=keysFilter}if(topEventPath===""&&typeof valueOptions.include==="undefined"){this.debug.warn('WARNING: One or more value event listeners on the root node are causing the entire database value to be read to facilitate change tracking. Using "value", "notify_value", "child_changed" and "notify_child_changed" events on the root node are a bad practice because of the significant performance impact. Use "mutated" or "mutations" events instead')}const node=await this.getNode(topEventPath,valueOptions);currentValue=node.value}topEventData=currentValue;const result=await writeNode()||{};let newTopEventData,modifiedData;if(path===topEventPath){if(options.merge){if(topEventData===null){newTopEventData=value instanceof Array?[]:{}}else{newTopEventData=topEventData instanceof Array?[]:{};Object.keys(topEventData).forEach((key=>{newTopEventData[key]=topEventData[key]}))}}else{newTopEventData=value}modifiedData=newTopEventData}else{const trailPath=path.slice(topEventPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);if(topEventData===null){newTopEventData=typeof trailKeys[0]==="number"?[]:{}}else{newTopEventData=topEventData instanceof Array?[]:{};Object.keys(topEventData).forEach((key=>{newTopEventData[key]=topEventData[key]}))}modifiedData=newTopEventData;while(trailKeys.length>0){const childKey=trailKeys.shift();if(!options.merge&&trailKeys.length===0){modifiedData[childKey]=value}else{const original=modifiedData[childKey];const shallowCopy=typeof childKey==="number"?[...original]:Object.assign({},original);modifiedData[childKey]=shallowCopy}modifiedData=modifiedData[childKey]}}if(options.merge){Object.keys(value).forEach((key=>{modifiedData[key]=value[key]}))}const dataChanges=compareValues(topEventData,newTopEventData);if(dataChanges==="identical"){result.mutations=[];return result}function removeNulls(obj){if(obj===null||typeof obj!=="object"){return obj}Object.keys(obj).forEach((prop=>{const val=obj[prop];if(val===null){delete obj[prop];if(obj instanceof Array){obj.length--}}if(typeof val==="object"){removeNulls(val)}}))}removeNulls(newTopEventData);const indexUpdates=[];indexes.map((index=>({index:index,keys:acebase_core_1.PathInfo.getPathKeys(index.path)}))).sort(((a,b)=>{if(a.keys.lengthb.keys.length){return-1}return 0})).forEach((({index:index})=>{const pathKeys=acebase_core_1.PathInfo.getPathKeys(topEventPath);const indexPathKeys=acebase_core_1.PathInfo.getPathKeys(index.path+"/*");const trailKeys=indexPathKeys.slice(pathKeys.length);const oldValue=topEventData;const newValue=newTopEventData;if(trailKeys.length===0){console.assert(pathKeys.length===indexPathKeys.length,"check logic");const p=this.ipc.isMaster?index.handleRecordUpdate(topEventPath,oldValue,newValue):this.ipc.sendRequest({type:"index.update",path:topEventPath,oldValue:oldValue,newValue:newValue});indexUpdates.push(p);return}const getAllIndexUpdates=(path,oldValue,newValue)=>{if(oldValue===null&&newValue===null){return[]}const pathKeys=acebase_core_1.PathInfo.getPathKeys(path);const indexPathKeys=acebase_core_1.PathInfo.getPathKeys(index.path+"/*");const trailKeys=indexPathKeys.slice(pathKeys.length);if(trailKeys.length===0){console.assert(pathKeys.length===indexPathKeys.length,"check logic");return[{path:path,oldValue:oldValue,newValue:newValue}]}let results=[];let trailPath="";while(trailKeys.length>0){const subKey=trailKeys.shift();if(typeof subKey==="string"&&(subKey==="*"||subKey.startsWith("$"))){const allKeys=oldValue===null?[]:Object.keys(oldValue);newValue!==null&&Object.keys(newValue).forEach((key=>{if(allKeys.indexOf(key)<0){allKeys.push(key)}}));allKeys.forEach((key=>{const childPath=acebase_core_1.PathInfo.getChildPath(trailPath,key);const childValues=getChildValues(key,oldValue,newValue);const subTrailPath=acebase_core_1.PathInfo.getChildPath(path,childPath);const childResults=getAllIndexUpdates(subTrailPath,childValues.oldValue,childValues.newValue);results=results.concat(childResults)}));break}else{const values=getChildValues(subKey,oldValue,newValue);oldValue=values.oldValue;newValue=values.newValue;if(oldValue===null&&newValue===null){break}trailPath=acebase_core_1.PathInfo.getChildPath(trailPath,subKey)}}return results};const results=getAllIndexUpdates(topEventPath,oldValue,newValue);results.forEach((result=>{const p=this.ipc.isMaster?index.handleRecordUpdate(result.path,result.oldValue,result.newValue):this.ipc.sendRequest({type:"index.update",path:result.path,oldValue:result.oldValue,newValue:result.newValue});indexUpdates.push(p)}))}));const callSubscriberWithValues=(sub,oldValue,newValue,variables=[])=>{let trigger=true;let type=sub.type;if(type.startsWith("notify_")){type=type.slice("notify_".length)}if(type==="mutated"){return}else if(type==="child_changed"&&(oldValue===null||newValue===null)){trigger=false}else if(type==="value"||type==="child_changed"){const changes=compareValues(oldValue,newValue);trigger=changes!=="identical"}else if(type==="child_added"){trigger=oldValue===null&&newValue!==null}else if(type==="child_removed"){trigger=oldValue!==null&&newValue===null}const pathKeys=acebase_core_1.PathInfo.getPathKeys(sub.dataPath);variables.forEach((variable=>{const index=pathKeys.indexOf(variable.name);console.assert(index>=0,`Variable "${variable.name}" not found in subscription dataPath "${sub.dataPath}"`);pathKeys[index]=variable.value}));const dataPath=pathKeys.reduce(((path,key)=>acebase_core_1.PathInfo.getChildPath(path,key)),"");trigger&&this.subscriptions.trigger(sub.type,sub.subscriptionPath,dataPath,oldValue,newValue,options.context)};const prepareMutationEvents=(currentPath,oldValue,newValue,compareResult)=>{const batch=[];const result=compareResult||compareValues(oldValue,newValue);if(result==="identical"){return batch}else if(typeof result==="string"){batch.push({path:currentPath,oldValue:oldValue,newValue:newValue})}else{result.changed.forEach((info=>{const childPath=acebase_core_1.PathInfo.getChildPath(currentPath,info.key);const childValues=getChildValues(info.key,oldValue,newValue);const childBatch=prepareMutationEvents(childPath,childValues.oldValue,childValues.newValue,info.change);batch.push(...childBatch)}));result.added.forEach((key=>{const childPath=acebase_core_1.PathInfo.getChildPath(currentPath,key);batch.push({path:childPath,oldValue:null,newValue:newValue[key]})}));if(oldValue instanceof Array&&newValue instanceof Array){result.removed.sort(((a,b)=>a{const childPath=acebase_core_1.PathInfo.getChildPath(currentPath,key);batch.push({path:childPath,oldValue:oldValue[key],newValue:null})}))}return batch};if(transactionLoggingEnabled&&this.settings.type!=="transaction"){result.mutations=(()=>{const trailPath=path.slice(topEventPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);let oldValue=topEventData,newValue=newTopEventData;while(trailKeys.length>0){const key=trailKeys.shift();({oldValue:oldValue,newValue:newValue}=getChildValues(key,oldValue,newValue))}const compareResults=compareValues(oldValue,newValue);const batch=prepareMutationEvents(path,oldValue,newValue,compareResults);const mutations=batch.map((m=>({target:acebase_core_1.PathInfo.getPathKeys(m.path.slice(path.length)),prev:m.oldValue,val:m.newValue})));return mutations})()}const triggerAllEvents=()=>{eventSubscriptions.filter((sub=>!["mutated","mutations","notify_mutated","notify_mutations"].includes(sub.type))).map((sub=>{const keys=acebase_core_1.PathInfo.getPathKeys(sub.dataPath);return{sub:sub,keys:keys}})).sort(((a,b)=>{if(a.keys.lengthb.keys.length){return-1}return 0})).forEach((({sub:sub})=>{const process=(currentPath,oldValue,newValue,variables=[])=>{const trailPath=sub.dataPath.slice(currentPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);while(trailKeys.length>0){const subKey=trailKeys.shift();if(typeof subKey==="string"&&(subKey==="*"||subKey[0]==="$")){const allKeys=oldValue===null?[]:Object.keys(oldValue).map((key=>oldValue instanceof Array?parseInt(key):key));newValue!==null&&Object.keys(newValue).forEach((key=>{const keyOrIndex=newValue instanceof Array?parseInt(key):key;!allKeys.includes(keyOrIndex)&&allKeys.push(key)}));allKeys.forEach((key=>{const childValues=getChildValues(key,oldValue,newValue);const vars=variables.concat({name:subKey,value:key});if(trailKeys.length===0){callSubscriberWithValues(sub,childValues.oldValue,childValues.newValue,vars)}else{process(acebase_core_1.PathInfo.getChildPath(currentPath,subKey),childValues.oldValue,childValues.newValue,vars)}}));return}else{currentPath=acebase_core_1.PathInfo.getChildPath(currentPath,subKey);const childValues=getChildValues(subKey,oldValue,newValue);oldValue=childValues.oldValue;newValue=childValues.newValue}}callSubscriberWithValues(sub,oldValue,newValue,variables)};if(sub.type.startsWith("notify_")&&acebase_core_1.PathInfo.get(sub.eventPath).isAncestorOf(topEventPath)){const isOnParentPath=acebase_core_1.PathInfo.get(sub.eventPath).isParentOf(topEventPath);const trigger=sub.type==="notify_value"||sub.type==="notify_child_changed"&&(!isOnParentPath||!["added","removed"].includes(dataChanges))||sub.type==="notify_child_removed"&&dataChanges==="removed"&&isOnParentPath||sub.type==="notify_child_added"&&dataChanges==="added"&&isOnParentPath;trigger&&this.subscriptions.trigger(sub.type,sub.subscriptionPath,sub.dataPath,null,null,options.context)}else{process(topEventPath,topEventData,newTopEventData)}}));const mutationEvents=eventSubscriptions.filter((sub=>["mutated","mutations","notify_mutated","notify_mutations"].includes(sub.type)));mutationEvents.forEach((sub=>{let currentPath=topEventPath;const trailPath=sub.eventPath.slice(currentPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);let oldValue=topEventData,newValue=newTopEventData;while(trailKeys.length>0){const subKey=trailKeys.shift();currentPath=acebase_core_1.PathInfo.getChildPath(currentPath,subKey);const childValues=getChildValues(subKey,oldValue,newValue);oldValue=childValues.oldValue;newValue=childValues.newValue}const batch=prepareMutationEvents(currentPath,oldValue,newValue);if(batch.length===0){return}const isNotifyEvent=sub.type.startsWith("notify_");if(["mutated","notify_mutated"].includes(sub.type)){batch.forEach(((mutation,index)=>{const context=options.context;const prevVal=isNotifyEvent?null:mutation.oldValue;const newVal=isNotifyEvent?null:mutation.newValue;this.subscriptions.trigger(sub.type,sub.subscriptionPath,mutation.path,prevVal,newVal,context)}))}else if(["mutations","notify_mutations"].includes(sub.type)){const values=isNotifyEvent?null:batch.map((m=>({target:acebase_core_1.PathInfo.getPathKeys(m.path.slice(sub.subscriptionPath.length)),prev:m.oldValue,val:m.newValue})));this.subscriptions.trigger(sub.type,sub.subscriptionPath,sub.subscriptionPath,null,values,options.context)}}))};if(options.waitForIndexUpdates===false){indexUpdates.splice(0)}await Promise.all(indexUpdates);defer(triggerAllEvents);return result}getChildren(path,options){throw new Error("This method must be implemented by subclass")}async getNodeValue(path,options={}){const node=await this.getNode(path,options);return node.value}getNode(path,options){throw new Error("This method must be implemented by subclass")}getNodeInfo(path,options){throw new Error("This method must be implemented by subclass")}setNode(path,value,options){throw new Error("This method must be implemented by subclass")}updateNode(path,updates,options){throw new Error("This method must be implemented by subclass")}async transactNode(path,callback,options={no_lock:false,suppress_events:false,context:null}){const useFakeLock=options&&options.no_lock===true;const tid=this.createTid();const lock=useFakeLock?{tid:tid,release:NOOP}:await this.nodeLocker.lock(path,tid,true,"transactNode");try{let changed=false;const changeCallback=()=>{changed=true};if(useFakeLock){this.subscriptions.add(path,"notify_value",changeCallback)}const node=await this.getNode(path,{tid:tid});const checkRevision=node.revision;let newValue;try{newValue=callback(node.value);if(newValue instanceof Promise){newValue=await newValue.catch((err=>{this.debug.error(`Error in transaction callback: ${err.message}`)}))}}catch(err){this.debug.error(`Error in transaction callback: ${err.message}`)}if(typeof newValue==="undefined"){return}if(useFakeLock){this.subscriptions.remove(path,"notify_value",changeCallback)}if(changed){throw new node_errors_1.NodeRevisionError("Node changed")}const cursor=await this.setNode(path,newValue,{assert_revision:checkRevision,tid:lock.tid,suppress_events:options.suppress_events,context:options.context});return cursor}catch(err){if(err instanceof node_errors_1.NodeRevisionError){console.warn(`node value changed, running again. Error: ${err.message}`);return this.transactNode(path,callback,options)}else{throw err}}finally{lock.release()}}async matchNode(path,criteria,options){var _a;const tid=(_a=options===null||options===void 0?void 0:options.tid)!==null&&_a!==void 0?_a:acebase_core_1.ID.generate();const checkNode=async(path,criteria)=>{if(criteria.length===0){return Promise.resolve(true)}const criteriaKeys=criteria.reduce(((keys,cr)=>{let key=cr.key;if(typeof key==="string"&&key.includes("/")){key=key.slice(0,key.indexOf("/"))}if(keys.indexOf(key)<0){keys.push(key)}return keys}),[]);const unseenKeys=criteriaKeys.slice();let isMatch=true;const delayedMatchPromises=[];try{await this.getChildren(path,{tid:tid,keyFilter:criteriaKeys}).next((childInfo=>{var _a;const keyOrIndex=(_a=childInfo.key)!==null&&_a!==void 0?_a:childInfo.index;unseenKeys.includes(keyOrIndex)&&unseenKeys.splice(unseenKeys.indexOf(childInfo.key),1);const keyCriteria=criteria.filter((cr=>cr.key===keyOrIndex)).map((cr=>({op:cr.op,compare:cr.compare})));const keyResult=keyCriteria.length>0?checkChild(childInfo,keyCriteria):{isMatch:true,promises:[]};isMatch=keyResult.isMatch;if(isMatch){delayedMatchPromises.push(...keyResult.promises);const childCriteria=criteria.filter((cr=>typeof cr.key==="string"&&cr.key.startsWith(`${typeof keyOrIndex==="number"?`[${keyOrIndex}]`:keyOrIndex}/`))).map((cr=>{const key=cr.key.slice(cr.key.indexOf("/")+1);return{key:key,op:cr.op,compare:cr.compare}}));if(childCriteria.length>0){const childPath=acebase_core_1.PathInfo.getChildPath(path,childInfo.key);const childPromise=checkNode(childPath,childCriteria).then((isMatch=>({isMatch:isMatch})));delayedMatchPromises.push(childPromise)}}if(!isMatch||unseenKeys.length===0){return false}}));if(isMatch){const results=await Promise.all(delayedMatchPromises);isMatch=results.every((res=>res.isMatch))}if(!isMatch){return false}isMatch=unseenKeys.every((keyOrIndex=>{const childInfo=new node_info_1.NodeInfo(Object.assign(Object.assign(Object.assign({},typeof keyOrIndex==="number"&&{index:keyOrIndex}),typeof keyOrIndex==="string"&&{key:keyOrIndex}),{exists:false}));const childCriteria=criteria.filter((cr=>typeof cr.key==="string"&&cr.key.startsWith(`${typeof keyOrIndex==="number"?`[${keyOrIndex}]`:keyOrIndex}/`))).map((cr=>({op:cr.op,compare:cr.compare})));if(childCriteria.length>0&&!checkChild(childInfo,childCriteria).isMatch){return false}const keyCriteria=criteria.filter((cr=>cr.key===keyOrIndex)).map((cr=>({op:cr.op,compare:cr.compare})));if(keyCriteria.length===0){return true}const result=checkChild(childInfo,keyCriteria);return result.isMatch}));return isMatch}catch(err){this.debug.error(`Error matching on "${path}": `,err);throw err}};const checkChild=(child,criteria)=>{const promises=[];const isMatch=criteria.every((f=>{let proceed=true;if(f.op==="!exists"||f.op==="=="&&(typeof f.compare==="undefined"||f.compare===null)){proceed=!child.exists}else if(f.op==="exists"||f.op==="!="&&(typeof f.compare==="undefined"||f.compare===null)){proceed=child.exists}else if((f.op==="contains"||f.op==="!contains")&&f.compare instanceof Array&&f.compare.length===0){proceed=true}else if(!child.exists){proceed=false}else{if(child.address){if(child.valueType===node_value_types_1.VALUE_TYPES.OBJECT&&["has","!has"].indexOf(f.op)>=0){const op=f.op==="has"?"exists":"!exists";const p=checkNode(child.path,[{key:f.compare,op:op}]).then((isMatch=>({key:child.key,isMatch:isMatch})));promises.push(p);proceed=true}else if(child.valueType===node_value_types_1.VALUE_TYPES.ARRAY&&["contains","!contains"].indexOf(f.op)>=0){const p=this.getNode(child.path,{tid:tid}).then((({value:arr})=>{const isMatch=f.op==="contains"?f.compare instanceof Array?f.compare.every((val=>arr.includes(val))):arr.includes(f.compare):f.compare instanceof Array?!f.compare.some((val=>arr.includes(val))):!arr.includes(f.compare);return{key:child.key,isMatch:isMatch}}));promises.push(p);proceed=true}else if(child.valueType===node_value_types_1.VALUE_TYPES.STRING){const p=this.getNode(child.path,{tid:tid}).then((node=>({key:child.key,isMatch:this.test(node.value,f.op,f.compare)})));promises.push(p);proceed=true}else{proceed=false}}else if(child.type===node_value_types_1.VALUE_TYPES.OBJECT&&["has","!has"].indexOf(f.op)>=0){const has=f.compare in child.value;proceed=has&&f.op==="has"||!has&&f.op==="!has"}else if(child.type===node_value_types_1.VALUE_TYPES.ARRAY&&["contains","!contains"].indexOf(f.op)>=0){const contains=child.value.indexOf(f.compare)>=0;proceed=contains&&f.op==="contains"||!contains&&f.op==="!contains"}else{let ret=this.test(child.value,f.op,f.compare);if(ret instanceof Promise){promises.push(ret);ret=true}proceed=ret}}return proceed}));return{isMatch:isMatch,promises:promises}};return checkNode(path,criteria)}test(val,op,compare){if(op==="<"){return val"){return val>compare}if(op===">="){return val>=compare}if(op==="in"){return compare.indexOf(val)>=0}if(op==="!in"){return compare.indexOf(val)<0}if(op==="like"||op==="!like"){const pattern="^"+compare.replace(/[-[\]{}()+.,\\^$|#\s]/g,"\\$&").replace(/\?/g,".").replace(/\*/g,".*?")+"$";const re=new RegExp(pattern,"i");const isMatch=re.test(val.toString());return op==="like"?isMatch:!isMatch}if(op==="matches"){return compare.test(val.toString())}if(op==="!matches"){return!compare.test(val.toString())}if(op==="between"){return val>=compare[0]&&val<=compare[1]}if(op==="!between"){return valcompare[1]}if(op==="has"||op==="!has"){const has=typeof val==="object"&&compare in val;return op==="has"?has:!has}if(op==="contains"||op==="!contains"){const includes=typeof val==="object"&&val instanceof Array&&val.includes(compare);return op==="contains"?includes:!includes}return false}async exportNode(path,writeFn,options={format:"json",type_safe:true}){if((options===null||options===void 0?void 0:options.format)!=="json"){throw new Error("Only json output is currently supported")}const write=typeof writeFn!=="function"?writeFn.write.bind(writeFn):writeFn;const stringifyValue=(type,val)=>{const escape=str=>str.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/[\u0000-\u001f]/g,(ch=>`\\u${ch.charCodeAt(0).toString(16).padStart(4,"0")}`));if(type===node_value_types_1.VALUE_TYPES.DATETIME){val=`"${val.toISOString()}"`;if(options.type_safe){val=`{".type":"date",".val":${val}}`}}else if(type===node_value_types_1.VALUE_TYPES.STRING){val=`"${escape(val)}"`}else if(type===node_value_types_1.VALUE_TYPES.ARRAY){val="[]"}else if(type===node_value_types_1.VALUE_TYPES.OBJECT){val="{}"}else if(type===node_value_types_1.VALUE_TYPES.BINARY){val=`"${escape(acebase_core_1.ascii85.encode(val))}"`;if(options.type_safe){val=`{".type":"binary",".val":${val}}`}}else if(type===node_value_types_1.VALUE_TYPES.REFERENCE){val=`"${val.path}"`;if(options.type_safe){val=`{".type":"reference",".val":${val}}`}}else if(type===node_value_types_1.VALUE_TYPES.BIGINT){val=`"${val}"`;if(options.type_safe){val=`{".type":"bigint",".val":${val}}`}}return val};let objStart="",objEnd="";const nodeInfo=await this.getNodeInfo(path);if(!nodeInfo.exists){return write("null")}else if(nodeInfo.type===node_value_types_1.VALUE_TYPES.OBJECT){objStart="{";objEnd="}"}else if(nodeInfo.type===node_value_types_1.VALUE_TYPES.ARRAY){objStart="[";objEnd="]"}else{const node=await this.getNode(path);const val=stringifyValue(nodeInfo.type,node.value);return write(val)}if(objStart){const p=write(objStart);if(p instanceof Promise){await p}}let output="",outputCount=0;const pending=[];await this.getChildren(path).next((childInfo=>{if(childInfo.address){pending.push(childInfo)}else{if(outputCount++>0){output+=","}if(typeof childInfo.key==="string"){output+=`"${childInfo.key}":`}output+=stringifyValue(childInfo.type,childInfo.value)}}));if(output){const p=write(output);if(p instanceof Promise){await p}}while(pending.length>0){const childInfo=pending.shift();let output=outputCount++>0?",":"";const key=typeof childInfo.index==="number"?childInfo.index:childInfo.key;if(typeof key==="string"){output+=`"${key}":`}if(output){const p=write(output);if(p instanceof Promise){await p}}await this.exportNode(acebase_core_1.PathInfo.getChildPath(path,key),write,options)}if(objEnd){const p=write(objEnd);if(p instanceof Promise){await p}}}async importNode(path,read,options={format:"json",method:"set"}){const chunkSize=256*1024;const maxQueueBytes=1024*1024;const state={data:"",index:0,offset:0,queue:[],queueStartByte:0,timesFlushed:0,get processedBytes(){return this.offset+this.index}};const readNextChunk=async(append=false)=>{let data=await read(chunkSize);if(data===null){if(state.data){throw new Error(`Unexpected EOF at index ${state.offset+state.data.length}`)}else{throw new Error("Unable to read data from stream")}}else if(typeof data==="object"){data=acebase_core_1.Utils.decodeString(data)}if(append){state.data+=data}else{state.offset+=state.data.length;state.data=data;state.index=0}};const readBytes=async length=>{let str="";if(state.index+length>=state.data.length){str=state.data.slice(state.index);length-=str.length;await readNextChunk()}str+=state.data.slice(state.index,state.index+length);state.index+=length;return str};const assertBytes=async length=>{if(state.index+length>state.data.length){await readNextChunk(true)}if(state.index+length>state.data.length){throw new Error("Not enough data available from stream")}};const consumeToken=async token=>{const str=await readBytes(token.length);if(str!==token){throw new Error(`Unexpected character "${str[0]}" at index ${state.offset+state.index}, expected "${token}"`)}};const consumeSpaces=async()=>{const spaces=[" ","\t","\r","\n"];while(true){if(state.index>=state.data.length){await readNextChunk()}if(spaces.includes(state.data[state.index])){state.index++}else{break}}};const peekBytes=async length=>{await assertBytes(length);const index=state.index;return state.data.slice(index,index+length)};const peekValueType=async()=>{await consumeSpaces();const ch=await peekBytes(1);switch(ch){case'"':return"string";case"{":return"object";case"[":return"array";case"n":return"null";case"u":return"undefined";case"t":case"f":return"boolean";default:{if(ch==="-"||ch>="0"&&ch<="9"){return"number"}throw new Error(`Unknown value at index ${state.offset+state.index}`)}}};const readString=async()=>{await consumeToken('"');let str="";let i=state.index;while(state.data[i]!=='"'||state.data[i-1]==="\\"){i++;if(i>=state.data.length){str+=state.data.slice(state.index);await readNextChunk();i=0}}str+=state.data.slice(state.index,i);state.index=i+1;return unescape(str)};const readBoolean=async()=>{if(state.data[state.index]==="t"){await consumeToken("true")}else if(state.data[state.index]==="f"){await consumeToken("false")}throw new Error(`Expected true or false at index ${state.offset+state.index}`)};const readNumber=async()=>{let str="";let i=state.index;const nrChars=["-","0","1","2","3","4","5","6","7","8","9",".","e","b","f","x","o","n"];while(nrChars.includes(state.data[i])){i++;if(i>=state.data.length){str+=state.data.slice(state.index);await readNextChunk();i=0}}str+=state.data.slice(state.index,i);state.index=i;const nr=str.endsWith("n")?BigInt(str.slice(0,-1)):str.includes(".")?parseFloat(str):parseInt(str);return nr};const readValue=async()=>{await consumeSpaces();const type=await peekValueType();const value=await(()=>{switch(type){case"string":return readString();case"object":return{};case"array":return[];case"number":return readNumber();case"null":return null;case"undefined":return undefined;case"boolean":return readBoolean()}})();return{type:type,value:value}};const unescape=str=>str.replace(/\\n/g,"\n").replace(/\\"/g,'"');const getTypeSafeValue=(path,obj)=>{const type=obj[".type"];let val=obj[".val"];switch(type){case"Date":case"date":{val=new Date(val);break}case"Buffer":case"binary":{val=unescape(val);if(val.startsWith("<~")){val=acebase_core_1.ascii85.decode(val)}else{throw new Error(`Import error: Unexpected encoding for value for value at path "/${path}"`)}break}case"PathReference":case"reference":{val=new acebase_core_1.PathReference(val);break}case"bigint":{val=BigInt(val);break}default:throw new Error(`Import error: Unsupported type "${type}" for value at path "/${path}"`)}return val};const context={acebase_import_id:acebase_core_1.ID.generate()};const childOptions={suppress_events:options.suppress_events,context:context};const enqueue=async(target,value)=>{state.queue.push({target:target,value:value});if(state.processedBytes>=state.queueStartByte+maxQueueBytes){const operations=state.queue.reduce(((updates,item)=>{if(item.target.path===path){updates.push(Object.assign({op:options.method==="set"&&state.timesFlushed===0?"set":"update"},item))}else{const parent=updates.find((other=>other.target.isParentOf(item.target)));if(parent){parent.value[item.target.key]=item.value}else{updates.push(Object.assign({op:options.method==="merge"?"update":"set"},item))}}return updates}),[]);state.queueStartByte=state.processedBytes;state.queue=[];state.timesFlushed++}if(target.path===path){}};const importObject=async target=>{await consumeToken("{");await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="}"){state.index++;return this.setNode(target.path,{},childOptions)}let childCount=0;let obj={};let flushedBefore=false;const flushObject=async()=>{let p;if(!flushedBefore){flushedBefore=true;p=this.setNode(target.path,obj,childOptions)}else if(Object.keys(obj).length>0){p=this.updateNode(target.path,obj,childOptions)}obj={};if(p){await p}};const promises=[];while(true){await consumeSpaces();const property=await readString();await consumeSpaces();await consumeToken(":");await consumeSpaces();const{value:value,type:type}=await readValue();obj[property]=value;childCount++;if(["object","array"].includes(type)){promises.push(flushObject());if(type==="object"){await importObject(target.child(property))}else{await importArray(target.child(property))}}await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="}"){state.index++;break}await consumeToken(",")}const isTypedValue=childCount===2&&".type"in obj&&".val"in obj;if(isTypedValue){const val=getTypeSafeValue(target.path,obj);return this.setNode(target.path,val,childOptions)}promises.push(flushObject());await Promise.all(promises)};const importArray=async target=>{await consumeToken("[");await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="]"){state.index++;return this.setNode(target.path,[],childOptions)}let flushedBefore=false;let arr=[];let updates={};const flushArray=async()=>{let p;if(!flushedBefore){flushedBefore=true;p=this.setNode(target.path,arr,childOptions);arr=null}else if(Object.keys(updates).length>0){p=this.updateNode(target.path,updates,childOptions);updates={}}if(p){await p}};const pushChild=(value,index)=>{if(flushedBefore){updates[index]=value}else{arr.push(value)}};const promises=[];let index=0;while(true){await consumeSpaces();const{value:value,type:type}=await readValue();pushChild(value,index);if(["object","array"].includes(type)){promises.push(flushArray());if(type==="object"){await importObject(target.child(index))}else{await importArray(target.child(index))}}await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="]"){state.index++;break}await consumeToken(",");index++}promises.push(flushArray());await Promise.all(promises)};const start=async()=>{const{value:value,type:type}=await readValue();if(["object","array"].includes(type)){const target=acebase_core_1.PathInfo.get(path);if(type==="object"){await importObject(target)}else{await importArray(target)}}else{await this.setNode(path,value,childOptions)}};return start()}setSchema(path,schema){if(typeof schema==="undefined"){throw new TypeError("schema argument must be given")}if(schema===null){const i=this._schemas.findIndex((s=>s.path===path));i>=0&&this._schemas.splice(i,1);return}const definition=new acebase_core_1.SchemaDefinition(schema);const item=this._schemas.find((s=>s.path===path));if(item){item.schema=definition}else{this._schemas.push({path:path,schema:definition});this._schemas.sort(((a,b)=>{const ka=acebase_core_1.PathInfo.getPathKeys(a.path),kb=acebase_core_1.PathInfo.getPathKeys(b.path);if(ka.length===kb.length){return 0}return ka.lengthitem.path===path));return item?{path:path,schema:item.schema.source,text:item.schema.text}:null}getSchemas(){return this._schemas.map((item=>({path:item.path,schema:item.schema.source,text:item.schema.text})))}validateSchema(path,value,options={updates:false}){let result={ok:true};const pathInfo=acebase_core_1.PathInfo.get(path);this._schemas.filter((s=>pathInfo.isOnTrailOf(s.path))).every((s=>{if(pathInfo.isDescendantOf(s.path)){const ancestorPath=acebase_core_1.PathInfo.fillVariables(s.path,path);const trailKeys=pathInfo.keys.slice(acebase_core_1.PathInfo.getPathKeys(s.path).length);result=s.schema.check(ancestorPath,value,options.updates,trailKeys);return result.ok}const trailKeys=acebase_core_1.PathInfo.getPathKeys(s.path).slice(pathInfo.keys.length);const partial=options.updates===true&&trailKeys.length===0;const check=(path,value,trailKeys)=>{if(trailKeys.length===0){return s.schema.check(path,value,partial)}else if(value===null){return{ok:true}}const key=trailKeys[0];if(typeof key==="string"&&(key==="*"||key[0]==="$")){if(value===null||typeof value!=="object"){return{ok:true}}let result;Object.keys(value).every((childKey=>{const childPath=acebase_core_1.PathInfo.getChildPath(path,childKey);const childValue=value[childKey];result=check(childPath,childValue,trailKeys.slice(1));return result.ok}));return result}else{const childPath=acebase_core_1.PathInfo.getChildPath(path,key);const childValue=value[key];return check(childPath,childValue,trailKeys.slice(1))}};result=check(path,value,trailKeys);return result.ok}));return result}}exports.Storage=Storage},{"../data-index":13,"../ipc":6,"../node-errors":9,"../node-info":10,"../node-value-types":12,"../promise-fs":14,"./indexes":26,"acebase-core":38}],26:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createIndex=void 0;var create_index_1=require("./create-index");Object.defineProperty(exports,"createIndex",{enumerable:true,get:function(){return create_index_1.createIndex}})},{"./create-index":16}],27:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AceBaseBase=exports.AceBaseBaseSettings=void 0;const simple_event_emitter_1=require("./simple-event-emitter");const data_reference_1=require("./data-reference");const type_mappings_1=require("./type-mappings");const optional_observable_1=require("./optional-observable");const debug_1=require("./debug");const simple_colors_1=require("./simple-colors");class AceBaseBaseSettings{constructor(options){this.logLevel="log";this.logColors=true;this.info="realtime database";this.sponsor=false;if(typeof options!=="object"){options={}}if(typeof options.logLevel==="string"){this.logLevel=options.logLevel}if(typeof options.logColors==="boolean"){this.logColors=options.logColors}if(typeof options.info==="string"){this.info=options.info}if(typeof options.sponsor==="boolean"){this.sponsor=options.sponsor}}}exports.AceBaseBaseSettings=AceBaseBaseSettings;class AceBaseBase extends simple_event_emitter_1.SimpleEventEmitter{constructor(dbname,options={}){super();this._ready=false;options=new AceBaseBaseSettings(options);this.name=dbname;this.debug=new debug_1.DebugLogger(options.logLevel,`[${dbname}]`);(0,simple_colors_1.SetColorsEnabled)(options.logColors);const logoStyle=[simple_colors_1.ColorStyle.magenta,simple_colors_1.ColorStyle.bold];const logo=" ___ ______ "+"\n"+" / _ \\ | ___ \\ "+"\n"+" / /_\\ \\ ___ ___| |_/ / __ _ ___ ___ "+"\n"+" | _ |/ __/ _ \\ ___ \\/ _` / __|/ _ \\"+"\n"+" | | | | (_| __/ |_/ / (_| \\__ \\ __/"+"\n"+" \\_| |_/\\___\\___\\____/ \\__,_|___/\\___|";const info=options.info?"".padStart(40-options.info.length," ")+options.info+"\n":"";if(!options.sponsor){this.debug.write(logo.colorize(logoStyle));info&&this.debug.write(info.colorize(simple_colors_1.ColorStyle.magenta))}this.types=new type_mappings_1.TypeMappings(this);this.once("ready",(()=>{this._ready=true}))}async ready(callback){if(!this._ready){await new Promise((resolve=>this.on("ready",resolve)))}callback===null||callback===void 0?void 0:callback()}get isReady(){return this._ready}setObservable(ObservableImpl){(0,optional_observable_1.setObservable)(ObservableImpl)}ref(path){return new data_reference_1.DataReference(this,path)}get root(){return this.ref("")}query(path){const ref=new data_reference_1.DataReference(this,path);return new data_reference_1.DataReferenceQuery(ref)}get indexes(){return{get:()=>this.api.getIndexes(),create:(path,key,options)=>this.api.createIndex(path,key,options),delete:async filePath=>this.api.deleteIndex(filePath)}}get schema(){return{get:path=>this.api.getSchema(path),set:(path,schema)=>this.api.setSchema(path,schema),all:()=>this.api.getSchemas(),check:(path,value,isUpdate)=>this.api.validateSchema(path,value,isUpdate)}}}exports.AceBaseBase=AceBaseBase},{"./data-reference":34,"./debug":36,"./optional-observable":40,"./simple-colors":47,"./simple-event-emitter":48,"./type-mappings":51}],28:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Api=void 0;class NotImplementedError extends Error{constructor(name){super(`${name} is not implemented`)}}class Api{constructor(){}stats(options){throw new NotImplementedError("stats")}subscribe(path,event,callback,settings){throw new NotImplementedError("subscribe")}unsubscribe(path,event,callback){throw new NotImplementedError("unsubscribe")}update(path,updates,options){throw new NotImplementedError("update")}set(path,value,options){throw new NotImplementedError("set")}get(path,options){throw new NotImplementedError("get")}transaction(path,callback,options){throw new NotImplementedError("transaction")}exists(path){throw new NotImplementedError("exists")}query(path,query,options){throw new NotImplementedError("query")}reflect(path,type,args){throw new NotImplementedError("reflect")}export(path,write,options){throw new NotImplementedError("export")}import(path,read,options){throw new NotImplementedError("import")}createIndex(path,key,options){throw new NotImplementedError("createIndex")}getIndexes(){throw new NotImplementedError("getIndexes")}deleteIndex(filePath){throw new NotImplementedError("deleteIndex")}setSchema(path,schema){throw new NotImplementedError("setSchema")}getSchema(path){throw new NotImplementedError("getSchema")}getSchemas(){throw new NotImplementedError("getSchemas")}validateSchema(path,value,isUpdate){throw new NotImplementedError("validateSchema")}getMutations(filter){throw new NotImplementedError("getMutations")}getChanges(filter){throw new NotImplementedError("getChanges")}}exports.Api=Api},{}],29:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ascii85=void 0;function c(input,length,result){const b=[0,0,0,0,0];for(let i=0;i";return ret}exports.ascii85={encode:function(arr){if(arr instanceof ArrayBuffer){arr=new Uint8Array(arr,0,arr.byteLength)}return encode(arr)},decode:function(input){if(!input.startsWith("<~")||!input.endsWith("~>")){throw new Error("Invalid input string")}input=input.substr(2,input.length-4);const n=input.length,r=[],b=[0,0,0,0,0];let t,x,y,d;for(let i=0;i>>=8;y=t&255;t>>>=8;r.push(t>>>8,t&255,y,x);for(let j=d;j<5;++j,r.pop());i+=4}const data=new Uint8Array(r);return data.buffer.slice(data.byteOffset,data.byteOffset+data.byteLength)}}},{}],30:[function(require,module,exports){"use strict";var _a,_b;Object.defineProperty(exports,"__esModule",{value:true});const pad_1=require("../pad");const env=typeof window==="object"?window:self,globalCount=Object.keys(env).length,mimeTypesLength=(_b=(_a=navigator.mimeTypes)===null||_a===void 0?void 0:_a.length)!==null&&_b!==void 0?_b:0,clientId=(0,pad_1.default)((mimeTypesLength+navigator.userAgent.length).toString(36)+globalCount.toString(36),4);function fingerprint(){return clientId}exports.default=fingerprint},{"../pad":32}],31:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});const fingerprint_1=require("./fingerprint");const pad_1=require("./pad");let c=0;const blockSize=4,base=36,discreteValues=Math.pow(base,blockSize);function randomBlock(){return(0,pad_1.default)((Math.random()*discreteValues<<0).toString(base),blockSize)}function safeCounter(){c=ct2[i]===key))}static isAncestor(ancestor,other){return ancestor.lengthother[i]===key))}static isDescendant(descendant,other){return descendant.length>other.length&&other.every(((key,i)=>descendant[i]===key))}}const isProxy=Symbol("isProxy");class LiveDataProxy{static async create(ref,options){var _a;ref=new data_reference_1.DataReference(ref.db,ref.path);let cache,loaded=false;let latestCursor=options===null||options===void 0?void 0:options.cursor;let proxy;const proxyId=id_1.ID.generate();const clientSubscriptions=[];const clientEventEmitter=new simple_event_emitter_1.SimpleEventEmitter;clientEventEmitter.on("cursor",(cursor=>latestCursor=cursor));clientEventEmitter.on("error",(err=>{console.error(err.message,err.details)}));const applyChange=(keys,newValue)=>{if(keys.length===0){cache=newValue;return true}const allowCreation=false;if(allowCreation){cache=typeof keys[0]==="number"?[]:{}}let target=cache;const trailKeys=keys.slice();while(trailKeys.length>1){const key=trailKeys.shift();if(!(key in target)){if(allowCreation){target[key]=typeof key==="number"?[]:{}}else{return false}}target=target[key]}const prop=trailKeys.shift();if(newValue===null){target instanceof Array?target.splice(prop,1):delete target[prop]}else{target[prop]=newValue}return true};const syncFallback=async()=>{if(!loaded){return}await reload()};const subscription=ref.on("mutations",{syncFallback:syncFallback}).subscribe((async snap=>{var _a;if(!loaded){return}const context=snap.context();const isRemote=((_a=context.acebase_proxy)===null||_a===void 0?void 0:_a.id)!==proxyId;if(!isRemote){return}const mutations=snap.val(false);const proceed=mutations.every((mutation=>{if(!applyChange(mutation.target,mutation.val)){return false}const changeRef=mutation.target.reduce(((ref,key)=>ref.child(key)),ref);const changeSnap=new data_snapshot_1.DataSnapshot(changeRef,mutation.val,false,mutation.prev,snap.context());clientEventEmitter.emit("mutation",{snapshot:changeSnap,isRemote:isRemote});return true}));if(proceed){clientEventEmitter.emit("cursor",context.acebase_cursor);localMutationsEmitter.emit("mutations",{origin:"remote",snap:snap})}else{console.warn(`Cached value of live data proxy on "${ref.path}" appears outdated, will be reloaded`);await reload()}}));let processPromise=Promise.resolve();const mutationQueue=[];const transactions=[];const pushLocalMutations=async()=>{const mutations=[];for(let i=0,m=mutationQueue[0];iRelativeNodeTarget.areEqual(t.target,m.target)||RelativeNodeTarget.isAncestor(t.target,m.target)))){mutationQueue.splice(i,1);i--;mutations.push(m)}}if(mutations.length===0){return}mutations.forEach((mutation=>{mutation.value=(0,utils_1.cloneObject)(getTargetValue(cache,mutation.target))}));process_1.default.nextTick((()=>{const context={acebase_proxy:{id:proxyId,source:"update"}};mutations.forEach((mutation=>{const mutationRef=mutation.target.reduce(((ref,key)=>ref.child(key)),ref);const mutationSnap=new data_snapshot_1.DataSnapshot(mutationRef,mutation.value,false,mutation.previous,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false})}));const snap=new data_snapshot_1.MutationsDataSnapshot(ref,mutations.map((m=>({target:m.target,val:m.value,prev:m.previous}))),context);localMutationsEmitter.emit("mutations",{origin:"local",snap:snap})}));processPromise=mutations.reduce(((mutations,m,i,arr)=>{if(!arr.some((other=>RelativeNodeTarget.isAncestor(other.target,m.target)))){mutations.push(m)}return mutations}),[]).reduce(((updates,m)=>{const target=m.target;if(target.length===0){updates.push({ref:ref,target:target,value:cache,type:"set",previous:m.previous})}else{const parentTarget=target.slice(0,-1);const key=target.slice(-1)[0];const parentRef=parentTarget.reduce(((ref,key)=>ref.child(key)),ref);const parentUpdate=updates.find((update=>update.ref.path===parentRef.path));const cacheValue=getTargetValue(cache,target);const prevValue=m.previous;if(parentUpdate){parentUpdate.value[key]=cacheValue;parentUpdate.previous[key]=prevValue}else{updates.push({ref:parentRef,target:parentTarget,value:{[key]:cacheValue},type:"update",previous:{[key]:prevValue}})}}return updates}),[]).reduce((async(promise,update)=>{const context={acebase_proxy:{id:proxyId,source:update.type}};await promise;await update.ref.context(context)[update.type](update.value).catch((err=>{clientEventEmitter.emit("error",{source:"update",message:`Error processing update of "/${ref.path}"`,details:err});const context={acebase_proxy:{id:proxyId,source:"update-rollback"}};const mutations=[];if(update.type==="set"){setTargetValue(cache,update.target,update.previous);const mutationSnap=new data_snapshot_1.DataSnapshot(update.ref,update.previous,false,update.value,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false});mutations.push({target:update.target,val:update.previous,prev:update.value})}else{Object.keys(update.previous).forEach((key=>{setTargetValue(cache,update.target.concat(key),update.previous[key]);const mutationSnap=new data_snapshot_1.DataSnapshot(update.ref.child(key),update.previous[key],false,update.value[key],context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false});mutations.push({target:update.target.concat(key),val:update.previous[key],prev:update.value[key]})}))}mutations.forEach((m=>{const mutationRef=m.target.reduce(((ref,key)=>ref.child(key)),ref);const mutationSnap=new data_snapshot_1.DataSnapshot(mutationRef,m.val,false,m.prev,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false})}));const snap=new data_snapshot_1.MutationsDataSnapshot(update.ref,mutations,context);localMutationsEmitter.emit("mutations",{origin:"local",snap:snap})}));if(update.ref.cursor){clientEventEmitter.emit("cursor",update.ref.cursor)}}),processPromise);await processPromise};let syncInProgress=false;const syncPromises=[];const syncCompleted=()=>{let resolve;const promise=new Promise((rs=>resolve=rs));syncPromises.push({resolve:resolve});return promise};let processQueueTimeout=null;const scheduleSync=()=>{if(!processQueueTimeout){processQueueTimeout=setTimeout((async()=>{syncInProgress=true;processQueueTimeout=null;await pushLocalMutations();syncInProgress=false;syncPromises.splice(0).forEach((p=>p.resolve()))}),0)}};const flagOverwritten=target=>{if(!mutationQueue.find((m=>RelativeNodeTarget.areEqual(m.target,target)))){mutationQueue.push({target:target,previous:(0,utils_1.cloneObject)(getTargetValue(cache,target))})}scheduleSync()};const localMutationsEmitter=new simple_event_emitter_1.SimpleEventEmitter;const addOnChangeHandler=(target,callback)=>{const isObject=val=>val!==null&&typeof val==="object";const mutationsHandler=async details=>{var _a;const{snap:snap,origin:origin}=details;const context=snap.context();const causedByOurProxy=((_a=context.acebase_proxy)===null||_a===void 0?void 0:_a.id)===proxyId;if(details.origin==="remote"&&causedByOurProxy){console.error("DEV ISSUE: mutationsHandler was called from remote event originating from our own proxy");return}const mutations=snap.val(false).filter((mutation=>mutation.target.slice(0,target.length).every(((key,i)=>target[i]===key))));if(mutations.length===0){return}let newValue,previousValue;const singleMutation=mutations.find((m=>m.target.length<=target.length));if(singleMutation){const trailKeys=target.slice(singleMutation.target.length);newValue=trailKeys.reduce(((val,key)=>!isObject(val)||!(key in val)?null:val[key]),singleMutation.val);previousValue=trailKeys.reduce(((val,key)=>!isObject(val)||!(key in val)?null:val[key]),singleMutation.prev)}else{const currentValue=getTargetValue(cache,target);newValue=(0,utils_1.cloneObject)(currentValue);previousValue=(0,utils_1.cloneObject)(newValue);mutations.forEach((mutation=>{const trailKeys=mutation.target.slice(target.length);for(let i=0,val=newValue,prev=previousValue;i{let keepSubscription=true;try{keepSubscription=false!==callback(Object.freeze(newValue),Object.freeze(previousValue),!causedByOurProxy,context)}catch(err){clientEventEmitter.emit("error",{source:origin==="remote"?"remote_update":"local_update",message:"Error running subscription callback",details:err})}if(keepSubscription===false){stop()}}))};localMutationsEmitter.on("mutations",mutationsHandler);const stop=()=>{localMutationsEmitter.off("mutations").off("mutations",mutationsHandler);clientSubscriptions.splice(clientSubscriptions.findIndex((cs=>cs.stop===stop)),1)};clientSubscriptions.push({target:target,stop:stop});return{stop:stop}};const handleFlag=(flag,target,args)=>{if(flag==="write"){return flagOverwritten(target)}else if(flag==="onChange"){return addOnChangeHandler(target,args.callback)}else if(flag==="subscribe"||flag==="observe"){const subscribe=subscriber=>{const currentValue=getTargetValue(cache,target);subscriber.next(currentValue);const subscription=addOnChangeHandler(target,(value=>{subscriber.next(value)}));return function unsubscribe(){subscription.stop()}};if(flag==="subscribe"){return subscribe}const Observable=(0,optional_observable_1.getObservable)();return new Observable(subscribe)}else if(flag==="transaction"){const hasConflictingTransaction=transactions.some((t=>RelativeNodeTarget.areEqual(target,t.target)||RelativeNodeTarget.isAncestor(target,t.target)||RelativeNodeTarget.isDescendant(target,t.target)));if(hasConflictingTransaction){return Promise.reject(new Error("Cannot start transaction because it conflicts with another transaction"))}return new Promise((async resolve=>{const hasPendingMutations=mutationQueue.some((m=>RelativeNodeTarget.areEqual(target,m.target)||RelativeNodeTarget.isAncestor(target,m.target)));if(hasPendingMutations){if(!syncInProgress){scheduleSync()}await syncCompleted()}const tx={target:target,status:"started",transaction:null};transactions.push(tx);tx.transaction={get status(){return tx.status},get completed(){return tx.status!=="started"},get mutations(){return mutationQueue.filter((m=>RelativeNodeTarget.areEqual(tx.target,m.target)||RelativeNodeTarget.isAncestor(tx.target,m.target)))},get hasMutations(){return this.mutations.length>0},async commit(){if(this.completed){throw new Error(`Transaction has completed already (status '${tx.status}')`)}tx.status="finished";transactions.splice(transactions.indexOf(tx),1);if(syncInProgress){await syncCompleted()}scheduleSync();await syncCompleted()},rollback(){if(this.completed){throw new Error(`Transaction has completed already (status '${tx.status}')`)}tx.status="canceled";const mutations=[];for(let i=0;i{if(m.target.length===0){cache=m.previous}else{setTargetValue(cache,m.target,m.previous)}}));transactions.splice(transactions.indexOf(tx),1)}};resolve(tx.transaction)}))}};const snap=await ref.get({cache_mode:"allow",cache_cursor:options===null||options===void 0?void 0:options.cursor});if(snap.context().acebase_origin!=="cache"){clientEventEmitter.emit("cursor",(_a=ref.cursor)!==null&&_a!==void 0?_a:null)}loaded=true;cache=snap.val();if(cache===null&&typeof(options===null||options===void 0?void 0:options.defaultValue)!=="undefined"){cache=options.defaultValue;const context={acebase_proxy:{id:proxyId,source:"default"}};await ref.context(context).set(cache)}proxy=createProxy({root:{ref:ref,get cache(){return cache}},target:[],id:proxyId,flag:handleFlag});const assertProxyAvailable=()=>{if(proxy===null){throw new Error("Proxy was destroyed")}};const reload=async()=>{assertProxyAvailable();mutationQueue.splice(0);const snap=await ref.get({allow_cache:false});const oldVal=cache,newVal=snap.val();cache=newVal;const mutations=(0,utils_1.getMutations)(oldVal,newVal);if(mutations.length===0){return}const context=snap.context();context.acebase_proxy={id:proxyId,source:"reload"};mutations.forEach((m=>{const targetRef=getTargetRef(ref,m.target);const newSnap=new data_snapshot_1.DataSnapshot(targetRef,m.val,m.val===null,m.prev,context);clientEventEmitter.emit("mutation",{snapshot:newSnap,isRemote:true})}));const mutationsSnap=new data_snapshot_1.MutationsDataSnapshot(ref,mutations,context);localMutationsEmitter.emit("mutations",{origin:"local",snap:mutationsSnap})};return{async destroy(){await processPromise;const promises=[subscription.stop(),...clientSubscriptions.map((cs=>cs.stop()))];await Promise.all(promises);["cursor","mutation","error"].forEach((event=>clientEventEmitter.off(event)));cache=null;proxy=null},stop(){this.destroy()},get value(){assertProxyAvailable();return proxy},get hasValue(){assertProxyAvailable();return cache!==null},set value(val){assertProxyAvailable();if(val!==null&&typeof val==="object"&&val[isProxy]){val=val.valueOf()}flagOverwritten([]);cache=val},get ref(){return ref},get cursor(){return latestCursor},reload:reload,onMutation(callback){assertProxyAvailable();clientEventEmitter.off("mutation");clientEventEmitter.on("mutation",(({snapshot:snapshot,isRemote:isRemote})=>{try{callback(snapshot,isRemote)}catch(err){clientEventEmitter.emit("error",{source:"mutation_callback",message:"Error in dataproxy onMutation callback",details:err})}}))},onError(callback){assertProxyAvailable();clientEventEmitter.off("error");clientEventEmitter.on("error",(err=>{try{callback(err)}catch(err){console.error(`Error in dataproxy onError callback: ${err.message}`)}}))},on(event,callback){clientEventEmitter.on(event,callback)},off(event,callback){clientEventEmitter.off(event,callback)}}}}exports.LiveDataProxy=LiveDataProxy;function getTargetValue(obj,target){let val=obj;for(const key of target){val=typeof val==="object"&&val!==null&&key in val?val[key]:null}return val}function setTargetValue(obj,target,value){if(target.length===0){throw new Error("Cannot update root target, caller must do that itself!")}const targetObject=target.slice(0,-1).reduce(((obj,key)=>obj[key]),obj);const prop=target.slice(-1)[0];if(value===null||typeof value==="undefined"){targetObject instanceof Array?targetObject.splice(prop,1):delete targetObject[prop]}else{targetObject[prop]=value}}function getTargetRef(ref,target){const path=path_info_1.PathInfo.get(ref.path).childPath(target);return new data_reference_1.DataReference(ref.db,path)}function createProxy(context){const targetRef=getTargetRef(context.root.ref,context.target);const childProxies=[];const handler={get(target,prop,receiver){target=getTargetValue(context.root.cache,context.target);if(typeof prop==="symbol"){if(prop.toString()===Symbol.iterator.toString()){prop="values"}else if(prop.toString()===isProxy.toString()){return true}else{return Reflect.get(target,prop,receiver)}}if(prop==="valueOf"){return function valueOf(){return target}}if(target===null||typeof target!=="object"){throw new Error(`Cannot read property "${prop}" of ${target}. Value of path "/${targetRef.path}" is not an object (anymore)`)}if(target instanceof Array&&typeof prop==="string"&&/^[0-9]+$/.test(prop)){prop=parseInt(prop)}const value=target[prop];if(value===null){delete target[prop];return}const childProxy=childProxies.find((proxy=>proxy.prop===prop));if(childProxy){if(childProxy.typeof===typeof value){return childProxy.value}childProxies.splice(childProxies.indexOf(childProxy),1)}const proxifyChildValue=prop=>{const value=target[prop];const childProxy=childProxies.find((child=>child.prop===prop));if(childProxy){if(childProxy.typeof===typeof value){return childProxy.value}childProxies.splice(childProxies.indexOf(childProxy),1)}if(typeof value!=="object"){return value}const newChildProxy=createProxy({root:context.root,target:context.target.concat(prop),id:context.id,flag:context.flag});childProxies.push({typeof:typeof value,prop:prop,value:newChildProxy});return newChildProxy};const unproxyValue=value=>value!==null&&typeof value==="object"&&value[isProxy]?value.getTarget():value;if(["string","number","boolean"].includes(typeof value)||value instanceof Date||value instanceof path_reference_1.PathReference||value instanceof ArrayBuffer||typeof value==="object"&&"buffer"in value){return value}const isArray=target instanceof Array;if(prop==="toString"){return function toString(){return`[LiveDataProxy for "${targetRef.path}"]`}}if(typeof value==="undefined"){if(prop==="push"){return function push(item){const childRef=targetRef.push();context.flag("write",context.target.concat(childRef.key));target[childRef.key]=item;return childRef.key}}if(prop==="getTarget"){return function(warn=true){warn&&console.warn("Use getTarget with caution - any changes will not be synchronized!");return target}}if(prop==="getRef"){return function getRef(){const ref=getTargetRef(context.root.ref,context.target);return ref}}if(prop==="forEach"){return function forEach(callback){const keys=Object.keys(target);let stop=false;for(let i=0;!stop&&iproxifyChildValue(key)));if(sortFn){arr.sort(sortFn)}return arr}}if(prop==="onChanged"){return function onChanged(callback){return context.flag("onChange",context.target,{callback:callback})}}if(prop==="subscribe"){return function subscribe(){return context.flag("subscribe",context.target)}}if(prop==="getObservable"){return function getObservable(){return context.flag("observe",context.target)}}if(prop==="getOrderedCollection"){return function getOrderedCollection(orderProperty,orderIncrement){return new OrderedCollectionProxy(this,orderProperty,orderIncrement)}}if(prop==="startTransaction"){return function startTransaction(){return context.flag("transaction",context.target)}}if(prop==="remove"&&!isArray){return function remove(){if(context.target.length===0){throw new Error("Can't remove proxy root value")}const parent=getTargetValue(context.root.cache,context.target.slice(0,-1));const key=context.target.slice(-1)[0];context.flag("write",context.target);delete parent[key]}}return}else if(typeof value==="function"){if(isArray){const writeArray=action=>{context.flag("write",context.target);return action()};const cleanArrayValues=values=>values.map((value=>{value=unproxyValue(value);removeVoidProperties(value);return value}));if(prop==="push"){return function push(...items){items=cleanArrayValues(items);return writeArray((()=>target.push(...items)))}}if(prop==="pop"){return function pop(){return writeArray((()=>target.pop()))}}if(prop==="splice"){return function splice(start,deleteCount,...items){items=cleanArrayValues(items);return writeArray((()=>target.splice(start,deleteCount,...items)))}}if(prop==="shift"){return function shift(){return writeArray((()=>target.shift()))}}if(prop==="unshift"){return function unshift(...items){items=cleanArrayValues(items);return writeArray((()=>target.unshift(...items)))}}if(prop==="sort"){return function sort(compareFn){return writeArray((()=>target.sort(compareFn)))}}if(prop==="reverse"){return function reverse(){return writeArray((()=>target.reverse()))}}if(["indexOf","lastIndexOf"].includes(prop)){return function indexOf(item,start){if(item!==null&&typeof item==="object"&&item[isProxy]){item=item.getTarget(false)}return target[prop](item,start)}}if(["forEach","every","some","filter","map"].includes(prop)){return function iterate(callback){return target[prop](((value,i)=>callback(proxifyChildValue(i),i,proxy)))}}if(["reduce","reduceRight"].includes(prop)){return function reduce(callback,initialValue){return target[prop](((prev,value,i)=>callback(prev,proxifyChildValue(i),i,proxy)),initialValue)}}if(["find","findIndex"].includes(prop)){return function find(callback){let value=target[prop](((value,i)=>callback(proxifyChildValue(i),i,proxy)));if(prop==="find"&&value){const index=target.indexOf(value);value=proxifyChildValue(index)}return value}}if(["values","entries","keys"].includes(prop)){return function*generator(){for(let i=0;itypeof key==="number"))){context.flag("write",context.target.slice(0,context.target.findIndex((key=>typeof key==="number"))))}else if(target instanceof Array){context.flag("write",context.target)}else{context.flag("write",context.target.concat(prop))}if(value===null){delete target[prop]}else{removeVoidProperties(value);target[prop]=value}return true},deleteProperty(target,prop){target=getTargetValue(context.root.cache,context.target);if(target===null){throw new Error(`Cannot delete property ${prop.toString()} of null`)}if(typeof prop==="symbol"){return Reflect.deleteProperty(target,prop)}if(!(prop in target)){return true}context.flag("write",context.target.concat(prop));delete target[prop];return true},ownKeys(target){target=getTargetValue(context.root.cache,context.target);return Reflect.ownKeys(target)},has(target,prop){target=getTargetValue(context.root.cache,context.target);return Reflect.has(target,prop)},getOwnPropertyDescriptor(target,prop){target=getTargetValue(context.root.cache,context.target);const descriptor=Reflect.getOwnPropertyDescriptor(target,prop);if(descriptor){descriptor.configurable=true}return descriptor},getPrototypeOf(target){target=getTargetValue(context.root.cache,context.target);return Reflect.getPrototypeOf(target)}};const proxy=new Proxy({},handler);return proxy}function removeVoidProperties(obj){if(typeof obj!=="object"){return}Object.keys(obj).forEach((key=>{const val=obj[key];if(val===null||typeof val==="undefined"){delete obj[key]}else if(typeof val==="object"){removeVoidProperties(val)}}))}function proxyAccess(proxiedValue){if(typeof proxiedValue!=="object"||!proxiedValue[isProxy]){throw new Error("Given value is not proxied. Make sure you are referencing the value through the live data proxy.")}return proxiedValue}exports.proxyAccess=proxyAccess;class OrderedCollectionProxy{constructor(collection,orderProperty="order",orderIncrement=10){this.collection=collection;this.orderProperty=orderProperty;this.orderIncrement=orderIncrement;if(typeof collection!=="object"||!collection[isProxy]){throw new Error("Collection is not proxied")}if(collection.valueOf()instanceof Array){throw new Error("Collection is an array, not an object collection")}if(!Object.keys(collection).every((key=>typeof collection[key]==="object"))){throw new Error("Collection has non-object children")}const ok=Object.keys(collection).every((key=>typeof collection[key][orderProperty]==="number"));if(!ok){const keys=Object.keys(collection);for(let i=0;i{const subscription=this.getObservable().subscribe((()=>{const newArray=this.getArray();subscriber.next(newArray)}));return function unsubscribe(){subscription.unsubscribe()}}))}getArray(){const arr=proxyAccess(this.collection).toArray(((a,b)=>a[this.orderProperty]-b[this.orderProperty]));return arr}add(item,index,from){const arr=this.getArray();let minOrder=Number.POSITIVE_INFINITY,maxOrder=Number.NEGATIVE_INFINITY;for(let i=0;ithis.collection[key]===item));if(!fromKey){throw new Error("item not found in collection")}if(from===index){return{key:fromKey,index:index}}if(Math.abs(from-index)===1){const otherItem=arr[index];const otherOrder=otherItem[this.orderProperty];otherItem[this.orderProperty]=item[this.orderProperty];item[this.orderProperty]=otherOrder;return{key:fromKey,index:index}}else{arr.splice(from,1)}}if(typeof index!=="number"||index>=arr.length){index=arr.length;item[this.orderProperty]=arr.length==0?0:maxOrder+this.orderIncrement}else if(index===0){item[this.orderProperty]=arr.length==0?0:minOrder-this.orderIncrement}else{const orders=arr.map((item=>item[this.orderProperty]));const gap=orders[index]-orders[index-1];if(gap>1){item[this.orderProperty]=orders[index]-Math.floor(gap/2)}else{arr.splice(index,0,item);for(let i=0;ithis.collection[key]===item));if(!key){throw new Error("Cannot find target object to delete")}this.collection[key]=null;return{key:key,index:index}}move(fromIndex,toIndex){const arr=this.getArray();return this.add(arr[fromIndex],toIndex,fromIndex)}sort(sortFn){const arr=this.getArray();arr.sort(sortFn);for(let i=0;i{newContext[key]=context[key]}))}this[_private].context=newContext;return this}else if(typeof context==="undefined"){console.warn("Use snap.context() instead of snap.ref.context() to get updating context in event callbacks");return currentContext}else{throw new Error("Invalid context argument")}}get cursor(){return this[_private].cursor}set cursor(value){var _a;this[_private].cursor=value;(_a=this.onCursor)===null||_a===void 0?void 0:_a.call(this,value)}get path(){return this[_private].path}get key(){const key=this[_private].key;return typeof key==="number"?`[${key}]`:key}get index(){const key=this[_private].key;if(typeof key!=="number"){throw new Error(`"${key}" is not a number`)}return key}get parent(){const currentPath=path_info_1.PathInfo.fillVariables2(this.path,this.vars);const info=path_info_1.PathInfo.get(currentPath);if(info.parentPath===null){return null}return new DataReference(this.db,info.parentPath).context(this[_private].context)}get vars(){return this[_private].vars}child(childPath){childPath=typeof childPath==="number"?childPath:childPath.replace(/^\/|\/$/g,"");const currentPath=path_info_1.PathInfo.fillVariables2(this.path,this.vars);const targetPath=path_info_1.PathInfo.getChildPath(currentPath,childPath);return new DataReference(this.db,targetPath).context(this[_private].context)}async set(value,onComplete){try{if(this.isWildcardPath){throw new Error(`Cannot set the value of wildcard path "/${this.path}"`)}if(this.parent===null){throw new Error("Cannot set the root object. Use update, or set individual child properties")}if(typeof value==="undefined"){throw new TypeError(`Cannot store undefined value in "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}value=this.db.types.serialize(this.path,value);const{cursor:cursor}=await this.db.api.set(this.path,value,{context:this[_private].context});this.cursor=cursor;if(typeof onComplete==="function"){try{onComplete(null,this)}catch(err){console.error("Error in onComplete callback:",err)}}}catch(err){if(typeof onComplete==="function"){try{onComplete(err,this)}catch(err){console.error("Error in onComplete callback:",err)}}else{throw err}}return this}async update(updates,onComplete){try{if(this.isWildcardPath){throw new Error(`Cannot update the value of wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}if(typeof updates!=="object"||updates instanceof Array||updates instanceof ArrayBuffer||updates instanceof Date){await this.set(updates)}else if(Object.keys(updates).length===0){console.warn(`update called on path "/${this.path}", but there is nothing to update`)}else{updates=this.db.types.serialize(this.path,updates);const{cursor:cursor}=await this.db.api.update(this.path,updates,{context:this[_private].context});this.cursor=cursor}if(typeof onComplete==="function"){try{onComplete(null,this)}catch(err){console.error("Error in onComplete callback:",err)}}}catch(err){if(typeof onComplete==="function"){try{onComplete(err,this)}catch(err){console.error("Error in onComplete callback:",err)}}else{throw err}}return this}async transaction(callback){if(this.isWildcardPath){throw new Error(`Cannot start a transaction on wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}let throwError;const cb=currentValue=>{currentValue=this.db.types.deserialize(this.path,currentValue);const snap=new data_snapshot_1.DataSnapshot(this,currentValue);let newValue;try{newValue=callback(snap)}catch(err){throwError=err;return}if(newValue instanceof Promise){return newValue.then((val=>this.db.types.serialize(this.path,val))).catch((err=>{throwError=err;return}))}else{return this.db.types.serialize(this.path,newValue)}};const{cursor:cursor}=await this.db.api.transaction(this.path,cb,{context:this[_private].context});this.cursor=cursor;if(throwError){throw throwError}return this}on(event,callback,cancelCallback){if(this.path===""&&["value","child_changed"].includes(event)){console.warn("WARNING: Listening for value and child_changed events on the root node is a bad practice. These events require loading of all data (value event), or potentially lots of data (child_changed event) each time they are fired")}let eventPublisher=null;const eventStream=new subscription_1.EventStream((publisher=>{eventPublisher=publisher}));const cb={event:event,stream:eventStream,userCallback:typeof callback==="function"&&callback,ourCallback:(err,path,newValue,oldValue,eventContext)=>{if(err){this.db.debug.error(`Error getting data for event ${event} on path "${path}"`,err);return}const ref=this.db.ref(path);ref[_private].vars=path_info_1.PathInfo.extractVariables(this.path,path);let callbackObject;if(event.startsWith("notify_")){callbackObject=ref.context(eventContext||{})}else{const values={previous:this.db.types.deserialize(path,oldValue),current:this.db.types.deserialize(path,newValue)};if(event==="child_removed"){callbackObject=new data_snapshot_1.DataSnapshot(ref,values.previous,true,values.previous,eventContext)}else if(event==="mutations"){callbackObject=new data_snapshot_1.MutationsDataSnapshot(ref,values.current,eventContext)}else{const isRemoved=event==="mutated"&&values.current===null;callbackObject=new data_snapshot_1.DataSnapshot(ref,values.current,isRemoved,values.previous,eventContext)}}eventPublisher.publish(callbackObject);if(eventContext===null||eventContext===void 0?void 0:eventContext.acebase_cursor){this.cursor=eventContext.acebase_cursor}}};this[_private].callbacks.push(cb);const subscribe=()=>{if(typeof callback==="function"){eventStream.subscribe(callback,((activated,cancelReason)=>{if(!activated){cancelCallback&&cancelCallback(cancelReason)}}))}const advancedOptions=typeof callback==="object"?callback:{newOnly:!callback};if(typeof advancedOptions.newOnly!=="boolean"){advancedOptions.newOnly=false}if(this.isWildcardPath){advancedOptions.newOnly=true}const cancelSubscription=err=>{const callbacks=this[_private].callbacks;callbacks.splice(callbacks.indexOf(cb),1);this.db.api.unsubscribe(this.path,event,cb.ourCallback);this.db.debug.error(`Subscription "${event}" on path "/${this.path}" canceled because of an error: ${err.message}`);eventPublisher.cancel(err.message)};const authorized=this.db.api.subscribe(this.path,event,cb.ourCallback,{newOnly:advancedOptions.newOnly,cancelCallback:cancelSubscription,syncFallback:advancedOptions.syncFallback});const allSubscriptionsStoppedCallback=()=>{const callbacks=this[_private].callbacks;callbacks.splice(callbacks.indexOf(cb),1);return this.db.api.unsubscribe(this.path,event,cb.ourCallback)};if(authorized instanceof Promise){authorized.then((()=>{eventPublisher.start(allSubscriptionsStoppedCallback)})).catch(cancelSubscription)}else{eventPublisher.start(allSubscriptionsStoppedCallback)}if(!advancedOptions.newOnly){if(event==="value"){this.get((snap=>{eventPublisher.publish(snap)}))}else if(event==="child_added"){this.get((snap=>{const val=snap.val();if(val===null||typeof val!=="object"){return}Object.keys(val).forEach((key=>{const childSnap=new data_snapshot_1.DataSnapshot(this.child(key),val[key]);eventPublisher.publish(childSnap)}))}))}else if(event==="notify_child_added"){const step=100,limit=step;let skip=0;const more=async()=>{const children=await this.db.api.reflect(this.path,"children",{limit:limit,skip:skip});children.list.forEach((child=>{const childRef=this.child(child.key);eventPublisher.publish(childRef)}));if(children.more){skip+=step;more()}};more()}}};if(this.db.isReady){subscribe()}else{this.db.ready(subscribe)}return eventStream}off(event,callback){const subscriptions=this[_private].callbacks;const stopSubs=subscriptions.filter((sub=>(!event||sub.event===event)&&(!callback||sub.userCallback===callback)));if(stopSubs.length===0){this.db.debug.warn(`Can't find event subscriptions to stop (path: "${this.path}", event: ${event||"(any)"}, callback: ${callback})`)}stopSubs.forEach((sub=>{sub.stream.stop()}));return this}get(optionsOrCallback,callback){if(!this.db.isReady){const promise=this.db.ready().then((()=>this.get(optionsOrCallback,callback)));return typeof optionsOrCallback!=="function"&&typeof callback!=="function"?promise:undefined}callback=typeof optionsOrCallback==="function"?optionsOrCallback:typeof callback==="function"?callback:undefined;if(this.isWildcardPath){const error=new Error(`Cannot get value of wildcard path "/${this.path}". Use .query() instead`);if(typeof callback==="function"){throw error}return Promise.reject(error)}const options=new DataRetrievalOptions(typeof optionsOrCallback==="object"?optionsOrCallback:{cache_mode:"allow"});const promise=this.db.api.get(this.path,options).then((result=>{var _a;const isNewApiResult="context"in result&&"value"in result;if(!isNewApiResult){console.warn("AceBase api.get method returned an old response value. Update your acebase or acebase-client package");result={value:result,context:{}}}const value=this.db.types.deserialize(this.path,result.value);const snapshot=new data_snapshot_1.DataSnapshot(this,value,undefined,undefined,result.context);if((_a=result.context)===null||_a===void 0?void 0:_a.acebase_cursor){this.cursor=result.context.acebase_cursor}return snapshot}));if(callback){promise.then(callback).catch((err=>{console.error("Uncaught error:",err)}));return}else{return promise}}once(event,options){if(event==="value"&&!this.isWildcardPath){return this.get(options)}return new Promise((resolve=>{const callback=snap=>{this.off(event,callback);resolve(snap)};this.on(event,callback)}))}push(value,onComplete){if(this.isWildcardPath){const error=new Error(`Cannot push to wildcard path "/${this.path}"`);if(typeof value==="undefined"||typeof onComplete==="function"){throw error}return Promise.reject(error)}const id=id_1.ID.generate();const ref=this.child(id);ref[_private].pushed=true;if(typeof value!=="undefined"){return ref.set(value,onComplete).then((()=>ref))}else{return ref}}async remove(){if(this.isWildcardPath){throw new Error(`Cannot remove wildcard path "/${this.path}". Use query().remove instead`)}if(this.parent===null){throw new Error("Cannot remove the root node")}return this.set(null)}async exists(){if(this.isWildcardPath){throw new Error(`Cannot check wildcard path "/${this.path}" existence`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.exists(this.path)}get isWildcardPath(){return this.path.indexOf("*")>=0||this.path.indexOf("$")>=0}query(){return new DataReferenceQuery(this)}async count(){const info=await this.reflect("info",{child_count:true});return info.children.count}async reflect(type,args){if(this.isWildcardPath){throw new Error(`Cannot reflect on wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.reflect(this.path,type,args)}async export(write,options={format:"json",type_safe:true}){if(this.isWildcardPath){throw new Error(`Cannot export wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}const writeFn=typeof write==="function"?write:write.write.bind(write);return this.db.api.export(this.path,writeFn,options)}async import(read,options={format:"json",suppress_events:false}){if(this.isWildcardPath){throw new Error(`Cannot import to wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.import(this.path,read,options)}proxy(options){const isOptionsArg=typeof options==="object"&&(typeof options.cursor!=="undefined"||typeof options.defaultValue!=="undefined");if(typeof options!=="undefined"&&!isOptionsArg){this.db.debug.warn("Warning: live data proxy is being initialized with a deprecated method signature. Use ref.proxy(options) instead of ref.proxy(defaultValue)");options={defaultValue:options}}return data_proxy_1.LiveDataProxy.create(this,options)}observe(options){if(options){throw new Error("observe does not support data retrieval options yet")}if(this.isWildcardPath){throw new Error(`Cannot observe wildcard path "/${this.path}"`)}const Observable=(0,optional_observable_1.getObservable)();return new Observable((observer=>{let cache,resolved=false;let promise=this.get(options).then((snap=>{resolved=true;cache=snap.val();observer.next(cache)}));const updateCache=snap=>{if(!resolved){promise=promise.then((()=>updateCache(snap)));return}const mutatedPath=snap.ref.path;if(mutatedPath===this.path){cache=snap.val();return observer.next(cache)}const trailKeys=path_info_1.PathInfo.getPathKeys(mutatedPath).slice(path_info_1.PathInfo.getPathKeys(this.path).length);let target=cache;while(trailKeys.length>1){const key=trailKeys.shift();if(!(key in target)){target[key]=typeof trailKeys[0]==="number"?[]:{}}target=target[key]}const prop=trailKeys.shift();const newValue=snap.val();if(newValue===null){target instanceof Array&&typeof prop==="number"?target.splice(prop,1):delete target[prop]}else{target[prop]=newValue}observer.next(cache)};this.on("mutated",updateCache);return()=>{this.off("mutated",updateCache)}}))}async forEach(callbackOrOptions,callback){let options;if(typeof callbackOrOptions==="function"){callback=callbackOrOptions}else{options=callbackOrOptions}if(typeof callback!=="function"){throw new TypeError("No callback function given")}const info=await this.reflect("children",{limit:0,skip:0});const summary={canceled:false,total:info.list.length,processed:0};for(let i=0;ithis.get(optionsOrCallback,callback)));return typeof optionsOrCallback!=="function"&&typeof callback!=="function"?promise:undefined}callback=typeof optionsOrCallback==="function"?optionsOrCallback:typeof callback==="function"?callback:undefined;const options=new QueryDataRetrievalOptions(typeof optionsOrCallback==="object"?optionsOrCallback:{snapshots:true,cache_mode:"allow"});options.allow_cache=options.cache_mode!=="bypass";options.eventHandler=ev=>{if(!this[_private].events[ev.name]){return false}const listeners=this[_private].events[ev.name];if(typeof listeners!=="object"||listeners.length===0){return false}if(["add","change","remove"].includes(ev.name)){const ref=new DataReference(this.ref.db,ev.path);const eventData={name:ev.name};if(options.snapshots&&ev.name!=="remove"){const val=db.types.deserialize(ev.path,ev.value);eventData.snapshot=new data_snapshot_1.DataSnapshot(ref,val,false)}else{eventData.ref=ref}ev=eventData}listeners.forEach((callback=>{try{callback(ev)}catch(e){}}))};options.monitor={add:false,change:false,remove:false};if(this[_private].events){if(this[_private].events["add"]&&this[_private].events["add"].length>0){options.monitor.add=true}if(this[_private].events["change"]&&this[_private].events["change"].length>0){options.monitor.change=true}if(this[_private].events["remove"]&&this[_private].events["remove"].length>0){options.monitor.remove=true}}this.stop();const db=this.ref.db;return db.api.query(this.ref.path,this[_private],options).catch((err=>{throw new Error(err)})).then((res=>{const{stop:stop}=res;let{results:results,context:context}=res;this.stop=async()=>{await stop()};if(!("results"in res&&"context"in res)){console.warn("Query results missing context. Update your acebase and/or acebase-client packages");results=res,context={}}if(options.snapshots){const snaps=results.map((result=>{const val=db.types.deserialize(result.path,result.val);return new data_snapshot_1.DataSnapshot(db.ref(result.path),val,false,undefined,context)}));return DataSnapshotsArray.from(snaps)}else{const refs=results.map((path=>db.ref(path)));return DataReferencesArray.from(refs)}})).then((results=>{callback&&callback(results);return results}))}async stop(){}getRefs(callback){return this.get({snapshots:false},callback)}find(){return this.get({snapshots:false})}async count(){const refs=await this.find();return refs.length}async exists(){const originalTake=this[_private].take;const p=this.take(1).find();this.take(originalTake);const refs=await p;return refs.length!==0}async remove(callback){const refs=await this.find();const parentUpdates=refs.reduce(((parents,ref)=>{const parent=parents[ref.parent.path];if(!parent){parents[ref.parent.path]=[ref]}else{parent.push(ref)}return parents}),{});const db=this.ref.db;const promises=Object.keys(parentUpdates).map((async parentPath=>{const updates=refs.reduce(((updates,ref)=>{updates[ref.key]=null;return updates}),{});const ref=db.ref(parentPath);try{await ref.update(updates);return{ref:ref,success:true}}catch(error){return{ref:ref,success:false,error:error}}}));const results=await Promise.all(promises);callback&&callback(results);return results}on(event,callback){if(!this[_private].events[event]){this[_private].events[event]=[]}this[_private].events[event].push(callback);return this}off(event,callback){if(typeof event==="undefined"){this[_private].events={};return this}if(!this[_private].events[event]){return this}if(typeof callback==="undefined"){delete this[_private].events[event];return this}const index=this[_private].events[event].indexOf(callback);if(!~index){return this}this[_private].events[event].splice(index,1);return this}async forEach(callbackOrOptions,callback){let options;if(typeof callbackOrOptions==="function"){callback=callbackOrOptions}else{options=callbackOrOptions}if(typeof callback!=="function"){throw new TypeError("No callback function given")}const refs=await this.find();const summary={canceled:false,total:refs.length,processed:0};for(let i=0;iarr[i]=snap));return arr}getValues(){return this.map((snap=>snap.val()))}}exports.DataSnapshotsArray=DataSnapshotsArray;class DataReferencesArray extends Array{static from(refs){const arr=new DataReferencesArray(refs.length);refs.forEach(((ref,i)=>arr[i]=ref));return arr}getPaths(){return this.map((ref=>ref.path))}}exports.DataReferencesArray=DataReferencesArray},{"./data-proxy":33,"./data-snapshot":35,"./id":37,"./optional-observable":40,"./path-info":42,"./subscription":49}],35:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.MutationsDataSnapshot=exports.DataSnapshot=void 0;const path_info_1=require("./path-info");function getChild(snapshot,path,previous=false){if(!snapshot.exists()){return null}let child=previous?snapshot.previous():snapshot.val();if(typeof path==="number"){return child[path]}path_info_1.PathInfo.getPathKeys(path).every((key=>{child=child[key];return typeof child!=="undefined"}));return child||null}function getChildren(snapshot){if(!snapshot.exists()){return[]}const value=snapshot.val();if(value instanceof Array){return new Array(value.length).map(((v,i)=>i))}if(typeof value==="object"){return Object.keys(value)}return[]}class DataSnapshot{constructor(ref,value,isRemoved=false,prevValue,context){this.ref=ref;this.val=()=>value;this.previous=()=>prevValue;this.exists=()=>{if(isRemoved){return false}return value!==null&&typeof value!=="undefined"};this.context=()=>context||{}}exists(){return false}static for(ref,value){return new DataSnapshot(ref,value)}child(path){const val=getChild(this,path,false);const prev=getChild(this,path,true);return new DataSnapshot(this.ref.child(path),val,false,prev)}hasChild(path){return getChild(this,path)!==null}hasChildren(){return getChildren(this).length>0}numChildren(){return getChildren(this).length}forEach(callback){const value=this.val();const prev=this.previous();return getChildren(this).every((key=>{const snap=new DataSnapshot(this.ref.child(key),value[key],false,prev[key]);return callback(snap)}))}get key(){return this.ref.key}}exports.DataSnapshot=DataSnapshot;class MutationsDataSnapshot extends DataSnapshot{constructor(ref,mutations,context){super(ref,mutations,false,undefined,context);this.previous=()=>{throw new Error("Iterate values to get previous values for each mutation")};this.val=(warn=true)=>{if(warn){console.warn("Unless you know what you are doing, it is best not to use the value of a mutations snapshot directly. Use child methods and forEach to iterate the mutations instead")}return mutations}}forEach(callback){const mutations=this.val();return mutations.every((mutation=>{const ref=mutation.target.reduce(((ref,key)=>ref.child(key)),this.ref);const snap=new DataSnapshot(ref,mutation.val,false,mutation.prev);return callback(snap)}))}child(index){if(typeof index!=="number"){throw new Error("child index must be a number")}const mutation=this.val()[index];const ref=mutation.target.reduce(((ref,key)=>ref.child(key)),this.ref);return new DataSnapshot(ref,mutation.val,false,mutation.prev)}}exports.MutationsDataSnapshot=MutationsDataSnapshot},{"./path-info":42}],36:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DebugLogger=void 0;const process_1=require("./process");const noop=()=>{};class DebugLogger{constructor(level="log",prefix=""){this.level=level;this.prefix=prefix;this.setLevel(level)}setLevel(level){const prefix=this.prefix?this.prefix+" %s":"";this.verbose=["verbose"].includes(level)?prefix?console.log.bind(console,prefix):console.log.bind(console):noop;this.log=["verbose","log"].includes(level)?prefix?console.log.bind(console,prefix):console.log.bind(console):noop;this.warn=["verbose","log","warn"].includes(level)?prefix?console.warn.bind(console,prefix):console.warn.bind(console):noop;this.error=["verbose","log","warn","error"].includes(level)?prefix?console.error.bind(console,prefix):console.error.bind(console):noop;this.write=text=>{const isRunKit=typeof process_1.default!=="undefined"&&process_1.default.env&&typeof process_1.default.env.RUNKIT_ENDPOINT_PATH==="string";if(text&&isRunKit){text.split("\n").forEach((line=>console.log(line)))}else{console.log(text)}}}}exports.DebugLogger=DebugLogger},{"./process":44}],37:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ID=void 0;const cuid_1=require("./cuid");let timeBias=0;class ID{static set timeBias(bias){if(typeof bias!=="number"){return}timeBias=bias}static generate(){return(0,cuid_1.default)(timeBias).slice(1)}}exports.ID=ID},{"./cuid":31}],38:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObjectCollection=exports.PartialArray=exports.SchemaDefinition=exports.Colorize=exports.ColorStyle=exports.SimpleEventEmitter=exports.SimpleCache=exports.ascii85=exports.PathInfo=exports.Utils=exports.TypeMappings=exports.Transport=exports.EventSubscription=exports.EventPublisher=exports.EventStream=exports.PathReference=exports.ID=exports.DebugLogger=exports.OrderedCollectionProxy=exports.proxyAccess=exports.MutationsDataSnapshot=exports.DataSnapshot=exports.DataReferencesArray=exports.DataSnapshotsArray=exports.QueryDataRetrievalOptions=exports.DataRetrievalOptions=exports.DataReferenceQuery=exports.DataReference=exports.Api=exports.AceBaseBaseSettings=exports.AceBaseBase=void 0;var acebase_base_1=require("./acebase-base");Object.defineProperty(exports,"AceBaseBase",{enumerable:true,get:function(){return acebase_base_1.AceBaseBase}});Object.defineProperty(exports,"AceBaseBaseSettings",{enumerable:true,get:function(){return acebase_base_1.AceBaseBaseSettings}});var api_1=require("./api");Object.defineProperty(exports,"Api",{enumerable:true,get:function(){return api_1.Api}});var data_reference_1=require("./data-reference");Object.defineProperty(exports,"DataReference",{enumerable:true,get:function(){return data_reference_1.DataReference}});Object.defineProperty(exports,"DataReferenceQuery",{enumerable:true,get:function(){return data_reference_1.DataReferenceQuery}});Object.defineProperty(exports,"DataRetrievalOptions",{enumerable:true,get:function(){return data_reference_1.DataRetrievalOptions}});Object.defineProperty(exports,"QueryDataRetrievalOptions",{enumerable:true,get:function(){return data_reference_1.QueryDataRetrievalOptions}});Object.defineProperty(exports,"DataSnapshotsArray",{enumerable:true,get:function(){return data_reference_1.DataSnapshotsArray}});Object.defineProperty(exports,"DataReferencesArray",{enumerable:true,get:function(){return data_reference_1.DataReferencesArray}});var data_snapshot_1=require("./data-snapshot");Object.defineProperty(exports,"DataSnapshot",{enumerable:true,get:function(){return data_snapshot_1.DataSnapshot}});Object.defineProperty(exports,"MutationsDataSnapshot",{enumerable:true,get:function(){return data_snapshot_1.MutationsDataSnapshot}});var data_proxy_1=require("./data-proxy");Object.defineProperty(exports,"proxyAccess",{enumerable:true,get:function(){return data_proxy_1.proxyAccess}});Object.defineProperty(exports,"OrderedCollectionProxy",{enumerable:true,get:function(){return data_proxy_1.OrderedCollectionProxy}});var debug_1=require("./debug");Object.defineProperty(exports,"DebugLogger",{enumerable:true,get:function(){return debug_1.DebugLogger}});var id_1=require("./id");Object.defineProperty(exports,"ID",{enumerable:true,get:function(){return id_1.ID}});var path_reference_1=require("./path-reference");Object.defineProperty(exports,"PathReference",{enumerable:true,get:function(){return path_reference_1.PathReference}});var subscription_1=require("./subscription");Object.defineProperty(exports,"EventStream",{enumerable:true,get:function(){return subscription_1.EventStream}});Object.defineProperty(exports,"EventPublisher",{enumerable:true,get:function(){return subscription_1.EventPublisher}});Object.defineProperty(exports,"EventSubscription",{enumerable:true,get:function(){return subscription_1.EventSubscription}});exports.Transport=require("./transport");var type_mappings_1=require("./type-mappings");Object.defineProperty(exports,"TypeMappings",{enumerable:true,get:function(){return type_mappings_1.TypeMappings}});exports.Utils=require("./utils");var path_info_1=require("./path-info");Object.defineProperty(exports,"PathInfo",{enumerable:true,get:function(){return path_info_1.PathInfo}});var ascii85_1=require("./ascii85");Object.defineProperty(exports,"ascii85",{enumerable:true,get:function(){return ascii85_1.ascii85}});var simple_cache_1=require("./simple-cache");Object.defineProperty(exports,"SimpleCache",{enumerable:true,get:function(){return simple_cache_1.SimpleCache}});var simple_event_emitter_1=require("./simple-event-emitter");Object.defineProperty(exports,"SimpleEventEmitter",{enumerable:true,get:function(){return simple_event_emitter_1.SimpleEventEmitter}});var simple_colors_1=require("./simple-colors");Object.defineProperty(exports,"ColorStyle",{enumerable:true,get:function(){return simple_colors_1.ColorStyle}});Object.defineProperty(exports,"Colorize",{enumerable:true,get:function(){return simple_colors_1.Colorize}});var schema_1=require("./schema");Object.defineProperty(exports,"SchemaDefinition",{enumerable:true,get:function(){return schema_1.SchemaDefinition}});var partial_array_1=require("./partial-array");Object.defineProperty(exports,"PartialArray",{enumerable:true,get:function(){return partial_array_1.PartialArray}});const object_collection_1=require("./object-collection");Object.defineProperty(exports,"ObjectCollection",{enumerable:true,get:function(){return object_collection_1.ObjectCollection}})},{"./acebase-base":27,"./api":28,"./ascii85":29,"./data-proxy":33,"./data-reference":34,"./data-snapshot":35,"./debug":36,"./id":37,"./object-collection":39,"./partial-array":41,"./path-info":42,"./path-reference":43,"./schema":45,"./simple-cache":46,"./simple-colors":47,"./simple-event-emitter":48,"./subscription":49,"./transport":50,"./type-mappings":51,"./utils":52}],39:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObjectCollection=void 0;const id_1=require("./id");class ObjectCollection{static from(array){const collection={};array.forEach((child=>{collection[id_1.ID.generate()]=child}));return collection}}exports.ObjectCollection=ObjectCollection},{"./id":37}],40:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObservableShim=exports.setObservable=exports.getObservable=void 0;let _observable;function getObservable(){if(_observable){return _observable}if(typeof window!=="undefined"&&window.Observable){_observable=window.Observable;return _observable}try{const{Observable:Observable}=require("rxjs");if(!Observable){throw new Error("not loaded")}_observable=Observable;return Observable}catch(err){throw new Error("RxJS Observable could not be loaded. If you are using a browser build, add it to AceBase using db.setObservable. For node.js builds, add it to your project with: npm i rxjs")}}exports.getObservable=getObservable;function setObservable(Observable){if(Observable==="shim"){console.warn("Using AceBase's simple Observable shim. Only use this if you know what you're doing.");Observable=ObservableShim}_observable=Observable}exports.setObservable=setObservable;class ObservableShim{constructor(create){this._active=false;this._subscribers=[];this._create=create}subscribe(subscriber){if(!this._active){const next=value=>{this._subscribers.forEach((s=>{try{s(value)}catch(err){console.error("Error in subscriber callback:",err)}}))};const observer={next:next};this._cleanup=this._create(observer);this._active=true}this._subscribers.push(subscriber);const unsubscribe=()=>{this._subscribers.splice(this._subscribers.indexOf(subscriber),1);if(this._subscribers.length===0){this._active=false;this._cleanup()}};const subscription={unsubscribe:unsubscribe};return subscription}}exports.ObservableShim=ObservableShim},{rxjs:53}],41:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.PartialArray=void 0;class PartialArray{constructor(sparseArray){if(sparseArray instanceof Array){for(let i=0;ikey.startsWith("[")?parseInt(key.slice(1,-1)):key))}class PathInfo{constructor(path){if(typeof path==="string"){this.keys=getPathKeys(path)}else if(path instanceof Array){this.keys=path}this.path=this.keys.reduce(((path,key,i)=>i===0?`${key}`:typeof key==="string"?`${path}/${key}`:`${path}[${key}]`),"")}static get(path){return new PathInfo(path)}static getChildPath(path,childKey){return PathInfo.get(path).child(childKey).path}static getPathKeys(path){return getPathKeys(path)}get key(){return this.keys.length===0?null:this.keys.slice(-1)[0]}get parent(){if(this.keys.length==0){return null}const parentKeys=this.keys.slice(0,-1);return new PathInfo(parentKeys)}get parentPath(){return this.keys.length===0?null:this.parent.path}child(childKey){if(typeof childKey==="string"){childKey=getPathKeys(childKey)}return new PathInfo(this.keys.concat(childKey))}childPath(childKey){return this.child(childKey).path}get pathKeys(){return this.keys}static extractVariables(varPath,fullPath){if(!varPath.includes("*")&&!varPath.includes("$")){return[]}const keys=getPathKeys(varPath);const pathKeys=getPathKeys(fullPath);let count=0;const variables={get length(){return count}};keys.forEach(((key,index)=>{const pathKey=pathKeys[index];if(key==="*"){variables[count++]=pathKey}else if(typeof key==="string"&&key[0]==="$"){variables[count++]=pathKey;variables[key]=pathKey;const varName=key.slice(1);if(typeof variables[varName]==="undefined"){variables[varName]=pathKey}}}));return variables}static fillVariables(varPath,fullPath){if(varPath.indexOf("*")<0&&varPath.indexOf("$")<0){return varPath}const keys=getPathKeys(varPath);const pathKeys=getPathKeys(fullPath);const merged=keys.map(((key,index)=>{if(key===pathKeys[index]||index>=pathKeys.length){return key}else if(typeof key==="string"&&(key==="*"||key[0]==="$")){return pathKeys[index]}else{throw new Error(`Path "${fullPath}" cannot be used to fill variables of path "${varPath}" because they do not match`)}}));let mergedPath="";merged.forEach((key=>{if(typeof key==="number"){mergedPath+=`[${key}]`}else{if(mergedPath.length>0){mergedPath+="/"}mergedPath+=key}}));return mergedPath}static fillVariables2(varPath,vars){if(typeof vars!=="object"||Object.keys(vars).length===0){return varPath}const pathKeys=getPathKeys(varPath);let n=0;const targetPath=pathKeys.reduce(((path,key)=>{if(typeof key==="string"&&(key==="*"||key.startsWith("$"))){return PathInfo.getChildPath(path,vars[n++])}else{return PathInfo.getChildPath(path,key)}}),"");return targetPath}equals(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path===other.path){return true}if(this.keys.length!==other.keys.length){return false}return this.keys.every(((key,index)=>{const otherKey=other.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isAncestorOf(descendantPath){const descendant=descendantPath instanceof PathInfo?descendantPath:new PathInfo(descendantPath);if(descendant.path===""||this.path===descendant.path){return false}if(this.path===""){return true}if(this.keys.length>=descendant.keys.length){return false}return this.keys.every(((key,index)=>{const otherKey=descendant.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isDescendantOf(ancestorPath){const ancestor=ancestorPath instanceof PathInfo?ancestorPath:new PathInfo(ancestorPath);if(this.path===""||this.path===ancestor.path){return false}if(ancestorPath===""){return true}if(ancestor.keys.length>=this.keys.length){return false}return ancestor.keys.every(((key,index)=>{const otherKey=this.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isOnTrailOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path.length===0||other.path.length===0){return true}if(this.path===other.path){return true}return this.pathKeys.every(((key,index)=>{if(index>=other.keys.length){return true}const otherKey=other.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isChildOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path===""){return false}return this.parent.equals(other)}isParentOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(other.path===""){return false}return this.equals(other.parent)}}exports.PathInfo=PathInfo},{}],43:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.PathReference=void 0;class PathReference{constructor(path){this.path=path}}exports.PathReference=PathReference},{}],44:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default={nextTick(fn){setTimeout(fn,0)}}},{}],45:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SchemaDefinition=void 0;function parse(definition){let pos=0;function consumeSpaces(){let c;while(c=definition[pos],[" ","\r","\n","\t"].includes(c)){pos++}}function consumeCharacter(c){if(definition[pos]!==c){throw new Error(`Unexpected character at position ${pos}. Expected: '${c}', found '${definition[pos]}'`)}pos++}function readProperty(){consumeSpaces();const prop={name:"",optional:false,wildcard:false};let c;while(c=definition[pos],c==="_"||c==="$"||c>="a"&&c<="z"||c>="A"&&c<="Z"||prop.name.length>0&&c>="0"&&c<="9"||prop.name.length===0&&c==="*"){prop.name+=c;pos++}if(prop.name.length===0){throw new Error(`Property name expected at position ${pos}, found: ${definition.slice(pos,pos+10)}..`)}if(definition[pos]==="?"){prop.optional=true;pos++}if(prop.name==="*"||prop.name[0]==="$"){prop.optional=true;prop.wildcard=true}consumeSpaces();consumeCharacter(":");return prop}function readType(){consumeSpaces();let type={typeOf:"any"},c;let name="";while(c=definition[pos],c>="a"&&c<="z"||c>="A"&&c<="Z"){name+=c;pos++}if(name.length===0){if(definition[pos]==="*"){consumeCharacter("*");type.typeOf="any"}else if(["'",'"',"`"].includes(definition[pos])){type.typeOf="string";type.value="";const quote=definition[pos];consumeCharacter(quote);while(c=definition[pos],c&&c!==quote){type.value+=c;pos++}consumeCharacter(quote)}else if(definition[pos]>="0"&&definition[pos]<="9"){type.typeOf="number";let nr="";while(c=definition[pos],c==="."||c==="n"||c>="0"&&c<="9"){nr+=c;pos++}if(nr.endsWith("n")){type.value=BigInt(nr)}else if(nr.includes(".")){type.value=parseFloat(nr)}else{type.value=parseInt(nr)}}else if(definition[pos]==="{"){consumeCharacter("{");type.typeOf="object";type.instanceOf=Object;type.children=[];while(true){const prop=readProperty();const types=readTypes();type.children.push({name:prop.name,optional:prop.optional,wildcard:prop.wildcard,types:types});consumeSpaces();if(definition[pos]==="}"){break}consumeCharacter(",")}consumeCharacter("}")}else if(definition[pos]==="/"){consumeCharacter("/");let pattern="",flags="";while(c=definition[pos],c!=="/"||pattern.endsWith("\\")){pattern+=c;pos++}consumeCharacter("/");while(c=definition[pos],["g","i","m","s","u","y","d"].includes(c)){flags+=c;pos++}type.typeOf="string";type.matches=new RegExp(pattern,flags)}else{throw new Error(`Expected a type definition at position ${pos}, found character '${definition[pos]}'`)}}else if(["string","number","boolean","bigint","undefined","String","Number","Boolean","BigInt"].includes(name)){type.typeOf=name.toLowerCase()}else if(name==="Object"||name==="object"){type.typeOf="object";type.instanceOf=Object}else if(name==="Date"){type.typeOf="object";type.instanceOf=Date}else if(name==="Binary"||name==="binary"){type.typeOf="object";type.instanceOf=ArrayBuffer}else if(name==="any"){type.typeOf="any"}else if(name==="null"){type.typeOf="object";type.value=null}else if(name==="Array"){consumeCharacter("<");type.typeOf="object";type.instanceOf=Array;type.genericTypes=readTypes();consumeCharacter(">")}else if(["true","false"].includes(name)){type.typeOf="boolean";type.value=name==="true"}else{throw new Error(`Unknown type at position ${pos}: "${type}"`)}consumeSpaces();while(definition[pos]==="["){consumeCharacter("[");consumeCharacter("]");type={typeOf:"object",instanceOf:Array,genericTypes:[type]}}return type}function readTypes(){consumeSpaces();const types=[readType()];while(definition[pos]==="|"){consumeCharacter("|");types.push(readType());consumeSpaces()}return types}return readType()}function checkObject(path,properties,obj,partial){const invalidProperties=properties.find((prop=>prop.name==="*"||prop.name[0]==="$"))?[]:Object.keys(obj).filter((key=>![null,undefined].includes(obj[key])&&!properties.find((prop=>prop.name===key))));if(invalidProperties.length>0){return{ok:false,reason:`Object at path "${path}" cannot have propert${invalidProperties.length===1?"y":"ies"} ${invalidProperties.map((p=>`"${p}"`)).join(", ")}`}}function checkProperty(property){const hasValue=![null,undefined].includes(obj[property.name]);if(!property.optional&&(partial?obj[property.name]===null:!hasValue)){return{ok:false,reason:`Property at path "${path}/${property.name}" is not optional`}}if(hasValue&&property.types.length===1){return checkType(`${path}/${property.name}`,property.types[0],obj[property.name],false)}if(hasValue&&!property.types.some((type=>checkType(`${path}/${property.name}`,type,obj[property.name],false).ok))){return{ok:false,reason:`Property at path "${path}/${property.name}" does not match any of ${property.types.length} allowed types`}}return{ok:true}}const namedProperties=properties.filter((prop=>!prop.wildcard));const failedProperty=namedProperties.find((prop=>!checkProperty(prop).ok));if(failedProperty){const reason=checkProperty(failedProperty).reason;return{ok:false,reason:reason}}const wildcardProperty=properties.find((prop=>prop.wildcard));if(!wildcardProperty){return{ok:true}}const wildcardChildKeys=Object.keys(obj).filter((key=>!namedProperties.find((prop=>prop.name===key))));let result={ok:true};for(let i=0;i0){if(type.typeOf!=="object"){return{ok:false,reason:`path "${path}" must be typeof ${type.typeOf}`}}if(!type.children){return ok}const childKey=trailKeys[0];let property=type.children.find((prop=>prop.name===childKey));if(!property){property=type.children.find((prop=>prop.name==="*"||prop.name[0]==="$"))}if(!property){return{ok:false,reason:`Object at path "${path}" cannot have property "${childKey}"`}}if(property.optional&&value===null&&trailKeys.length===1){return ok}let result;property.types.some((type=>{const childPath=typeof childKey==="number"?`${path}[${childKey}]`:`${path}/${childKey}`;result=checkType(childPath,type,value,partial,trailKeys.slice(1));return result.ok}));return result}if(value===null){return ok}if(type.instanceOf===Object&&(typeof value!=="object"||value instanceof Array||value instanceof Date)){return{ok:false,reason:`path "${path}" must be an object collection`}}if(type.instanceOf&&(typeof value!=="object"||value.constructor!==type.instanceOf)){return{ok:false,reason:`path "${path}" must be an instance of ${type.instanceOf.name}`}}if("value"in type&&value!==type.value){return{ok:false,reason:`path "${path}" must be value: ${type.value}`}}if(typeof value!==type.typeOf){return{ok:false,reason:`path "${path}" must be typeof ${type.typeOf}`}}if(type.instanceOf===Array&&type.genericTypes&&!value.every((v=>type.genericTypes.some((t=>checkType(path,t,v,false).ok))))){return{ok:false,reason:`every array value of path "${path}" must match one of the specified types`}}if(type.typeOf==="object"&&type.children){return checkObject(path,type.children,value,partial)}if(type.matches&&!type.matches.test(value)){return{ok:false,reason:`path "${path}" must match regular expression /${type.matches.source}/${type.matches.flags}`}}return ok}function getConstructorType(val){switch(val){case String:return"string";case Number:return"number";case Boolean:return"boolean";case Date:return"Date";case BigInt:return"bigint";case Array:throw new Error("Schema error: Array cannot be used without a type. Use string[] or Array instead");default:throw new Error(`Schema error: unknown type used: ${val.name}`)}}class SchemaDefinition{constructor(definition){this.source=definition;if(typeof definition==="object"){const toTS=obj=>"{"+Object.keys(obj).map((key=>{let val=obj[key];if(val===undefined){val="undefined"}else if(val instanceof RegExp){val=`/${val.source}/${val.flags}`}else if(typeof val==="object"){val=toTS(val)}else if(typeof val==="function"){val=getConstructorType(val)}else if(!["string","number","boolean","bigint"].includes(typeof val)){throw new Error(`Type definition for key "${key}" must be a string, number, boolean, bigint, object, regular expression, or one of these classes: String, Number, Boolean, Date, BigInt`)}return`${key}:${val}`})).join(",")+"}";this.text=toTS(definition)}else if(typeof definition==="string"){this.text=definition}else{throw new Error("Type definiton must be a string or an object")}this.type=parse(this.text)}check(path,value,partial,trailKeys){return checkType(path,this.type,value,partial,trailKeys)}}exports.SchemaDefinition=SchemaDefinition},{}],46:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SimpleCache=void 0;const utils_1=require("./utils");const calculateExpiryTime=expirySeconds=>expirySeconds>0?Date.now()+expirySeconds*1e3:Infinity;class SimpleCache{constructor(options){var _a;this.enabled=true;if(typeof options==="number"){options={expirySeconds:options}}options.cloneValues=options.cloneValues!==false;if(typeof options.expirySeconds!=="number"&&typeof options.maxEntries!=="number"){throw new Error("Either expirySeconds or maxEntries must be specified")}this.options=options;this.cache=new Map;const interval=setInterval((()=>{this.cleanUp()}),60*1e3);(_a=interval.unref)===null||_a===void 0?void 0:_a.call(interval)}get size(){return this.cache.size}has(key){if(!this.enabled){return false}return this.cache.has(key)}get(key){if(!this.enabled){return null}const entry=this.cache.get(key);if(!entry){return null}entry.expires=calculateExpiryTime(this.options.expirySeconds);entry.accessed=Date.now();return this.options.cloneValues?(0,utils_1.cloneObject)(entry.value):entry.value}set(key,value){if(this.options.maxEntries>0&&this.cache.size>=this.options.maxEntries&&!this.cache.has(key)){let oldest=null;const now=Date.now();for(const[key,entry]of this.cache.entries()){if(entry.expires<=now){this.cache.delete(key);oldest=null;break}if(!oldest||entry.accessed{if(entry.expires<=now){this.cache.delete(key)}}))}}exports.SimpleCache=SimpleCache},{"./utils":52}],47:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Colorize=exports.SetColorsEnabled=exports.ColorsSupported=exports.ColorStyle=void 0;const process_1=require("./process");const FontCode={bold:1,dim:2,italic:3,underline:4,inverse:7,hidden:8,strikethrough:94};const ColorCode={black:30,red:31,green:32,yellow:33,blue:34,magenta:35,cyan:36,white:37,grey:90,brightRed:91};const BgColorCode={bgBlack:40,bgRed:41,bgGreen:42,bgYellow:43,bgBlue:44,bgMagenta:45,bgCyan:46,bgWhite:47,bgGrey:100,bgBrightRed:101};const ResetCode={all:0,color:39,background:49,bold:22,dim:22,italic:23,underline:24,inverse:27,hidden:28,strikethrough:29};var ColorStyle;(function(ColorStyle){ColorStyle["reset"]="reset";ColorStyle["bold"]="bold";ColorStyle["dim"]="dim";ColorStyle["italic"]="italic";ColorStyle["underline"]="underline";ColorStyle["inverse"]="inverse";ColorStyle["hidden"]="hidden";ColorStyle["strikethrough"]="strikethrough";ColorStyle["black"]="black";ColorStyle["red"]="red";ColorStyle["green"]="green";ColorStyle["yellow"]="yellow";ColorStyle["blue"]="blue";ColorStyle["magenta"]="magenta";ColorStyle["cyan"]="cyan";ColorStyle["grey"]="grey";ColorStyle["bgBlack"]="bgBlack";ColorStyle["bgRed"]="bgRed";ColorStyle["bgGreen"]="bgGreen";ColorStyle["bgYellow"]="bgYellow";ColorStyle["bgBlue"]="bgBlue";ColorStyle["bgMagenta"]="bgMagenta";ColorStyle["bgCyan"]="bgCyan";ColorStyle["bgWhite"]="bgWhite";ColorStyle["bgGrey"]="bgGrey"})(ColorStyle=exports.ColorStyle||(exports.ColorStyle={}));function ColorsSupported(){if(typeof process_1.default==="undefined"||!process_1.default.stdout||!process_1.default.env||!process_1.default.platform||process_1.default.platform==="browser"){return false}if(process_1.default.platform==="win32"){return true}const env=process_1.default.env;if(env.COLORTERM){return true}if(env.TERM==="dumb"){return false}if(env.CI||env.TEAMCITY_VERSION){return!!env.TRAVIS}if(["iTerm.app","HyperTerm","Hyper","MacTerm","Apple_Terminal","vscode"].includes(env.TERM_PROGRAM)){return true}if(/^xterm-256|^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(env.TERM)){return true}return false}exports.ColorsSupported=ColorsSupported;let _enabled=ColorsSupported();function SetColorsEnabled(enabled){_enabled=ColorsSupported()&&enabled}exports.SetColorsEnabled=SetColorsEnabled;function Colorize(str,style){if(!_enabled){return str}const openCodes=[],closeCodes=[];const addStyle=style=>{if(style===ColorStyle.reset){openCodes.push(ResetCode.all)}else if(style in FontCode){openCodes.push(FontCode[style]);closeCodes.push(ResetCode[style])}else if(style in ColorCode){openCodes.push(ColorCode[style]);closeCodes.push(ResetCode.color)}else if(style in BgColorCode){openCodes.push(BgColorCode[style]);closeCodes.push(ResetCode.background)}};if(style instanceof Array){style.forEach(addStyle)}else{addStyle(style)}const open=openCodes.map((code=>"["+code+"m")).join("");const close=closeCodes.map((code=>"["+code+"m")).join("");return str.split("\n").map((line=>open+line+close)).join("\n")}exports.Colorize=Colorize;String.prototype.colorize=function(style){return Colorize(this,style)}},{"./process":44}],48:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SimpleEventEmitter=void 0;function runCallback(callback,data){try{callback(data)}catch(err){console.error("Error in subscription callback",err)}}class SimpleEventEmitter{constructor(){this._subscriptions=[];this._oneTimeEvents=new Map}on(event,callback){if(this._oneTimeEvents.has(event)){return runCallback(callback,this._oneTimeEvents.get(event))}this._subscriptions.push({event:event,callback:callback,once:false});return this}off(event,callback){this._subscriptions=this._subscriptions.filter((s=>s.event!==event||callback&&s.callback!==callback));return this}once(event,callback){return new Promise((resolve=>{const ourCallback=data=>{resolve(data);callback===null||callback===void 0?void 0:callback(data)};if(this._oneTimeEvents.has(event)){runCallback(ourCallback,this._oneTimeEvents.get(event))}else{this._subscriptions.push({event:event,callback:ourCallback,once:true})}}))}emit(event,data){if(this._oneTimeEvents.has(event)){throw new Error(`Event "${event}" was supposed to be emitted only once`)}for(let i=0;i{if(this._internal.state==="active"){return resolve()}else if(this._internal.state==="canceled"&&!callback){return reject(new Error(this._internal.cancelReason))}const noop=()=>{};this._internal.activatePromises.push({resolve:resolve,reject:callback?noop:reject})}))}_setActivationState(activated,cancelReason){this._internal.cancelReason=cancelReason;this._internal.state=activated?"active":"canceled";while(this._internal.activatePromises.length>0){const p=this._internal.activatePromises.shift();if(activated){p.callback&&p.callback(true);p.resolve&&p.resolve()}else{p.callback&&p.callback(false,cancelReason);p.reject&&p.reject(cancelReason)}}}}exports.EventSubscription=EventSubscription;class EventPublisher{constructor(publish,start,cancel){this.publish=publish;this.start=start;this.cancel=cancel}}exports.EventPublisher=EventPublisher;class EventStream{constructor(eventPublisherCallback){const subscribers=[];let noMoreSubscribersCallback;let activationState;const _stoppedState="stopped (no more subscribers)";this.subscribe=(callback,activationCallback)=>{if(typeof callback!=="function"){throw new TypeError("callback must be a function")}else if(activationState===_stoppedState){throw new Error("stream can't be used anymore because all subscribers were stopped")}const sub={callback:callback,activationCallback:function(activated,cancelReason){activationCallback&&activationCallback(activated,cancelReason);this.subscription._setActivationState(activated,cancelReason)},subscription:new EventSubscription((function stop(){subscribers.splice(subscribers.indexOf(this),1);return checkActiveSubscribers()}))};subscribers.push(sub);if(typeof activationState!=="undefined"){if(activationState===true){activationCallback&&activationCallback(true);sub.subscription._setActivationState(true)}else if(typeof activationState==="string"){activationCallback&&activationCallback(false,activationState);sub.subscription._setActivationState(false,activationState)}}return sub.subscription};const checkActiveSubscribers=()=>{let ret;if(subscribers.length===0){ret=noMoreSubscribersCallback&&noMoreSubscribersCallback();activationState=_stoppedState}return Promise.resolve(ret)};this.unsubscribe=callback=>{const remove=callback?subscribers.filter((sub=>sub.callback===callback)):subscribers;remove.forEach((sub=>{const i=subscribers.indexOf(sub);subscribers.splice(i,1)}));checkActiveSubscribers()};this.stop=()=>{subscribers.splice(0);checkActiveSubscribers()};const publish=val=>{subscribers.forEach((sub=>{try{sub.callback(val)}catch(err){console.error(`Error running subscriber callback: ${err.message}`)}}));if(subscribers.length===0){checkActiveSubscribers()}return subscribers.length>0};const start=allSubscriptionsStoppedCallback=>{activationState=true;noMoreSubscribersCallback=allSubscriptionsStoppedCallback;subscribers.forEach((sub=>{sub.activationCallback&&sub.activationCallback(true)}))};const cancel=reason=>{activationState=reason;subscribers.forEach((sub=>{sub.activationCallback&&sub.activationCallback(false,reason||new Error("unknown reason"))}));subscribers.splice(0)};const publisher=new EventPublisher(publish,start,cancel);eventPublisherCallback(publisher)}}exports.EventStream=EventStream},{}],50:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.deserialize2=exports.serialize2=exports.serialize=exports.detectSerializeVersion=exports.deserialize=void 0;const path_reference_1=require("./path-reference");const utils_1=require("./utils");const ascii85_1=require("./ascii85");const path_info_1=require("./path-info");const partial_array_1=require("./partial-array");const deserialize=data=>{if(data.map===null||typeof data.map==="undefined"){if(typeof data.val==="undefined"){throw new Error("serialized value must have a val property")}return data.val}const deserializeValue=(type,val)=>{if(type==="date"){return new Date(val)}else if(type==="binary"){return ascii85_1.ascii85.decode(val)}else if(type==="reference"){return new path_reference_1.PathReference(val)}else if(type==="regexp"){return new RegExp(val.pattern,val.flags)}else if(type==="array"){return new partial_array_1.PartialArray(val)}else if(type==="bigint"){return BigInt(val)}return val};if(typeof data.map==="string"){return deserializeValue(data.map,data.val)}Object.keys(data.map).forEach((path=>{const type=data.map[path];const keys=path_info_1.PathInfo.getPathKeys(path);let parent=data;let key="val";let val=data.val;keys.forEach((k=>{key=k;parent=val;val=val[key]}));parent[key]=deserializeValue(type,val)}));return data.val};exports.deserialize=deserialize;const detectSerializeVersion=data=>{if(typeof data!=="object"||data===null){return 2}if("map"in data&&"val"in data){return 1}else if("val"in data){if(Object.keys(data).length>1){return 2}return 1}return 2};exports.detectSerializeVersion=detectSerializeVersion;const serialize=obj=>{var _a;if(obj===null||typeof obj!=="object"||obj instanceof Date||obj instanceof ArrayBuffer||obj instanceof path_reference_1.PathReference||obj instanceof RegExp){const ser=(0,exports.serialize)({value:obj});return{map:(_a=ser.map)===null||_a===void 0?void 0:_a.value,val:ser.val.value}}obj=(0,utils_1.cloneObject)(obj);const process=(obj,mappings,prefix)=>{if(obj instanceof partial_array_1.PartialArray){mappings[prefix]="array"}Object.keys(obj).forEach((key=>{const val=obj[key];const path=prefix.length===0?key:`${prefix}/${key}`;if(typeof val==="bigint"){obj[key]=val.toString();mappings[path]="bigint"}else if(val instanceof Date){obj[key]=val.toISOString();mappings[path]="date"}else if(val instanceof ArrayBuffer){obj[key]=ascii85_1.ascii85.encode(val);mappings[path]="binary"}else if(val instanceof path_reference_1.PathReference){obj[key]=val.path;mappings[path]="reference"}else if(val instanceof RegExp){obj[key]={pattern:val.source,flags:val.flags};mappings[path]="regexp"}else if(typeof val==="object"&&val!==null){process(val,mappings,path)}}))};const mappings={};process(obj,mappings,"");const serialized={val:obj};if(Object.keys(mappings).length>0){serialized.map=mappings}return serialized};exports.serialize=serialize;const serialize2=obj=>{const getSerializedValue=val=>{if(typeof val==="bigint"){return{".type":"bigint",".val":val.toString()}}else if(val instanceof Date){return{".type":"date",".val":val.toISOString()}}else if(val instanceof ArrayBuffer){return{".type":"binary",".val":ascii85_1.ascii85.encode(val)}}else if(val instanceof path_reference_1.PathReference){return{".type":"reference",".val":val.path}}else if(val instanceof RegExp){return{".type":"regexp",".val":`/${val.source}/${val.flags}`}}else if(typeof val==="object"&&val!==null){if(val instanceof Array){const copy=[];for(let i=0;i{if(typeof data!=="object"||data===null){return data}if(typeof data[".type"]==="undefined"){if(data instanceof Array){const copy=[];const arr=data;for(let i=0;i{const mkeys=path_info_1.PathInfo.getPathKeys(mpath);if(mkeys.length!==keys.length){return false}return mkeys.every(((mkey,index)=>{if(mkey==="*"||mkey[0]==="$"){return true}return mkey===keys[index]}))}));const mapping=mappings[mappedPath];return mapping}function map(mappings,path){const targetPath=path_info_1.PathInfo.get(path).parentPath;if(targetPath===null){return}return get(mappings,targetPath)}function mapDeep(mappings,entryPath){entryPath=entryPath.replace(/^\/|\/$/g,"");const pathInfo=path_info_1.PathInfo.get(entryPath);const startPath=pathInfo.parentPath;const keys=startPath?path_info_1.PathInfo.getPathKeys(startPath):[];const matches=Object.keys(mappings).reduce(((m,mpath)=>{const mkeys=path_info_1.PathInfo.getPathKeys(mpath);if(mkeys.length{if(index>=keys.length){return false}else if(mkey==="*"||mkey[0]==="$"||mkey===keys[index]){return true}else{isMatch=false;return false}}))}if(isMatch){const mapping=mappings[mpath];m.push({path:mpath,type:mapping})}return m}),[]);return matches}function process(db,mappings,path,obj,action){if(obj===null||typeof obj!=="object"){return obj}const keys=path_info_1.PathInfo.getPathKeys(path);const m=mapDeep(mappings,path);const changes=[];m.sort(((a,b)=>path_info_1.PathInfo.getPathKeys(a.path).length>path_info_1.PathInfo.getPathKeys(b.path).length?-1:1));m.forEach((mapping=>{const mkeys=path_info_1.PathInfo.getPathKeys(mapping.path);mkeys.push("*");const mTrailKeys=mkeys.slice(keys.length);if(mTrailKeys.length===0){const vars=path_info_1.PathInfo.extractVariables(mapping.path,path);const ref=new data_reference_1.DataReference(db,path,vars);if(action==="serialize"){obj=mapping.type.serialize(obj,ref)}else if(action==="deserialize"){const snap=new data_snapshot_1.DataSnapshot(ref,obj);obj=mapping.type.deserialize(snap)}return}const process=(parentPath,parent,keys)=>{if(obj===null||typeof obj!=="object"){return obj}const key=keys[0];let children=[];if(key==="*"||key[0]==="$"){if(parent instanceof Array){children=parent.map(((val,index)=>({key:index,val:val})))}else{children=Object.keys(parent).map((k=>({key:k,val:parent[k]})))}}else{const child=parent[key];if(typeof child==="object"){children.push({key:key,val:child})}}children.forEach((child=>{const childPath=path_info_1.PathInfo.getChildPath(parentPath,child.key);const vars=path_info_1.PathInfo.extractVariables(mapping.path,childPath);const ref=new data_reference_1.DataReference(db,childPath,vars);if(keys.length===1){if(action==="serialize"){changes.push({parent:parent,key:child.key,original:parent[child.key]});parent[child.key]=mapping.type.serialize(child.val,ref)}else if(action==="deserialize"){const snap=new data_snapshot_1.DataSnapshot(ref,child.val);parent[child.key]=mapping.type.deserialize(snap)}}else{process(childPath,child.val,keys.slice(1))}}))};process(path,obj,mTrailKeys)}));if(action==="serialize"){obj=(0,utils_1.cloneObject)(obj);if(changes.length>0){changes.forEach((change=>{change.parent[change.key]=change.original}))}}return obj}const _mappings=Symbol("mappings");class TypeMappings{constructor(db){this.db=db;this[_mappings]={}}get mappings(){return this[_mappings]}map(path){return map(this[_mappings],path)}bind(path,type,options={}){if(typeof path!=="string"){throw new TypeError("path must be a string")}if(typeof type!=="function"){throw new TypeError("constructor must be a function")}if(typeof options.serializer==="undefined"){}else if(typeof options.serializer==="string"){if(typeof type.prototype[options.serializer]==="function"){options.serializer=type.prototype[options.serializer]}else{throw new TypeError(`${type.name}.prototype.${options.serializer} is not a function, cannot use it as serializer`)}}else if(typeof options.serializer!=="function"){throw new TypeError(`serializer for class ${type.name} must be a function, or the name of a prototype method`)}if(typeof options.creator==="undefined"){if(typeof type.create==="function"){options.creator=type.create}}else if(typeof options.creator==="string"){if(typeof type[options.creator]==="function"){options.creator=type[options.creator]}else{throw new TypeError(`${type.name}.${options.creator} is not a function, cannot use it as creator`)}}else if(typeof options.creator!=="function"){throw new TypeError(`creator for class ${type.name} must be a function, or the name of a static method`)}path=path.replace(/^\/|\/$/g,"");this[_mappings][path]={db:this.db,type:type,creator:options.creator,serializer:options.serializer,deserialize(snap){let obj;if(this.creator){obj=this.creator.call(this.type,snap)}else{obj=new this.type(snap)}return obj},serialize(obj,ref){if(this.serializer){obj=this.serializer.call(obj,ref,obj)}else if(obj&&typeof obj.serialize==="function"){obj=obj.serialize(ref,obj)}return obj}}}serialize(path,obj){return process(this.db,this[_mappings],path,obj,"serialize")}deserialize(path,obj){return process(this.db,this[_mappings],path,obj,"deserialize")}}exports.TypeMappings=TypeMappings},{"./data-reference":34,"./data-snapshot":35,"./path-info":42,"./utils":52}],52:[function(require,module,exports){(function(Buffer){(function(){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.defer=exports.getChildValues=exports.getMutations=exports.compareValues=exports.ObjectDifferences=exports.valuesAreEqual=exports.cloneObject=exports.concatTypedArrays=exports.decodeString=exports.encodeString=exports.bytesToBigint=exports.bigintToBytes=exports.bytesToNumber=exports.numberToBytes=void 0;const path_reference_1=require("./path-reference");const process_1=require("./process");const partial_array_1=require("./partial-array");function numberToBytes(number){const bytes=new Uint8Array(8);const view=new DataView(bytes.buffer);view.setFloat64(0,number);return new Array(...bytes)}exports.numberToBytes=numberToBytes;function bytesToNumber(bytes){const length=Array.isArray(bytes)?bytes.length:bytes.byteLength;if(length!==8){throw new TypeError("must be 8 bytes")}const bin=new Uint8Array(bytes);const view=new DataView(bin.buffer);const nr=view.getFloat64(0);return nr}exports.bytesToNumber=bytesToNumber;const big={zero:BigInt(0),one:BigInt(1),two:BigInt(2),eight:BigInt(8),ff:BigInt(255)};function bigintToBytes(number){if(typeof number!=="bigint"){throw new Error("number must be a bigint")}const bytes=[];const negative=number>big.eight}while(number!==(negative?-big.one:big.zero));bytes.reverse();if(negative?bytes[0]<128:bytes[0]>=128){bytes.unshift(negative?255:0)}return bytes}exports.bigintToBytes=bigintToBytes;function bytesToBigint(bytes){const negative=bytes[0]>=128;let number=big.zero;for(let b of bytes){if(negative){b=~b&255}number=(number<128){if((code&55296)===55296){const nextCode=str.charCodeAt(i+1);if((nextCode&56320)!==56320){throw new Error("follow-up utf-16 character does not start with 0xDC00")}i++;const p1=code&1023;const p2=nextCode&1023;code=65536|p1<<10|p2}if(code<2048){const b1=192|code>>6&31;const b2=128|code&63;arr.push(b1,b2)}else if(code<65536){const b1=224|code>>12&15;const b2=128|code>>6&63;const b3=128|code&63;arr.push(b1,b2,b3)}else if(code<2097152){const b1=240|code>>18&7;const b2=128|code>>12&63;const b3=128|code>>6&63;const b4=128|code&63;arr.push(b1,b2,b3,b4)}else{throw new Error(`Cannot convert character ${str.charAt(i)} (code ${code}) to utf-8`)}}else{arr.push(code<128?code:63)}}return new Uint8Array(arr)}}exports.encodeString=encodeString;function decodeString(buffer){if(typeof TextDecoder!=="undefined"){const decoder=new TextDecoder;if(buffer instanceof Uint8Array){return decoder.decode(buffer)}const buf=Uint8Array.from(buffer);return decoder.decode(buf)}else if(typeof Buffer==="function"){if(buffer instanceof Array){buffer=Uint8Array.from(buffer)}if(!(buffer instanceof Buffer)&&"buffer"in buffer&&buffer.buffer instanceof ArrayBuffer){const typedArray=buffer;buffer=Buffer.from(typedArray.buffer,typedArray.byteOffset,typedArray.byteLength)}if(!(buffer instanceof Buffer)){throw new Error("Unsupported buffer argument")}return buffer.toString("utf-8")}else{if(!(buffer instanceof Uint8Array)&&"buffer"in buffer&&buffer["buffer"]instanceof ArrayBuffer){const typedArray=buffer;buffer=new Uint8Array(typedArray.buffer,typedArray.byteOffset,typedArray.byteLength)}if(buffer instanceof Buffer||buffer instanceof Array||buffer instanceof Uint8Array){let str="";for(let i=0;i128){if((code&240)===240){const b1=code,b2=buffer[i+1],b3=buffer[i+2],b4=buffer[i+3];code=(b1&7)<<18|(b2&63)<<12|(b3&63)<<6|b4&63;i+=3}else if((code&224)===224){const b1=code,b2=buffer[i+1],b3=buffer[i+2];code=(b1&15)<<12|(b2&63)<<6|b3&63;i+=2}else if((code&192)===192){const b1=code,b2=buffer[i+1];code=(b1&31)<<6|b2&63;i++}else{throw new Error("invalid utf-8 data")}}if(code>=65536){code^=65536;const p1=55296|code>>10;const p2=56320|code&1023;str+=String.fromCharCode(p1);str+=String.fromCharCode(p2)}else{str+=String.fromCharCode(code)}}return str}else{throw new Error("Unsupported buffer argument")}}}exports.decodeString=decodeString;function concatTypedArrays(a,b){const c=new a.constructor(a.length+b.length);c.set(a);c.set(b,a.length);return c}exports.concatTypedArrays=concatTypedArrays;function cloneObject(original,stack){var _a;if(((_a=original===null||original===void 0?void 0:original.constructor)===null||_a===void 0?void 0:_a.name)==="DataSnapshot"){throw new TypeError(`Object to clone is a DataSnapshot (path "${original.ref.path}")`)}const checkAndFixTypedArray=obj=>{if(obj!==null&&typeof obj==="object"&&typeof obj.constructor==="function"&&typeof obj.constructor.name==="string"&&["Buffer","Uint8Array","Int8Array","Uint16Array","Int16Array","Uint32Array","Int32Array","BigUint64Array","BigInt64Array"].includes(obj.constructor.name)){obj=obj.buffer.slice(obj.byteOffset,obj.byteOffset+obj.byteLength)}return obj};original=checkAndFixTypedArray(original);if(typeof original!=="object"||original===null||original instanceof Date||original instanceof ArrayBuffer||original instanceof path_reference_1.PathReference||original instanceof RegExp){return original}const cloneValue=val=>{if(stack.indexOf(val)>=0){throw new ReferenceError("object contains a circular reference")}val=checkAndFixTypedArray(val);if(val===null||val instanceof Date||val instanceof ArrayBuffer||val instanceof path_reference_1.PathReference||val instanceof RegExp){return val}else if(typeof val==="object"){stack.push(val);val=cloneObject(val,stack);stack.pop();return val}else{return val}};if(typeof stack==="undefined"){stack=[original]}const clone=original instanceof Array?[]:original instanceof partial_array_1.PartialArray?new partial_array_1.PartialArray:{};Object.keys(original).forEach((key=>{const val=original[key];if(typeof val==="function"){return}clone[key]=cloneValue(val)}));return clone}exports.cloneObject=cloneObject;const isTypedArray=val=>typeof val==="object"&&["ArrayBuffer","Buffer","Uint8Array","Uint16Array","Uint32Array","Int8Array","Int16Array","Int32Array"].includes(val.constructor.name);function valuesAreEqual(val1,val2){if(val1===val2){return true}if(typeof val1!==typeof val2){return false}if(typeof val1==="object"||typeof val2==="object"){if(val1===null||val2===null){return false}if(val1 instanceof path_reference_1.PathReference||val2 instanceof path_reference_1.PathReference){return val1 instanceof path_reference_1.PathReference&&val2 instanceof path_reference_1.PathReference&&val1.path===val2.path}if(val1 instanceof Date||val2 instanceof Date){return val1 instanceof Date&&val2 instanceof Date&&val1.getTime()===val2.getTime()}if(val1 instanceof Array||val2 instanceof Array){return val1 instanceof Array&&val2 instanceof Array&&val1.length===val2.length&&val1.every(((item,i)=>valuesAreEqual(val1[i],val2[i])))}if(isTypedArray(val1)||isTypedArray(val2)){if(!isTypedArray(val1)||!isTypedArray(val2)||val1.byteLength===val2.byteLength){return false}const typed1=val1 instanceof ArrayBuffer?new Uint8Array(val1):new Uint8Array(val1.buffer,val1.byteOffset,val1.byteLength),typed2=val2 instanceof ArrayBuffer?new Uint8Array(val2):new Uint8Array(val2.buffer,val2.byteOffset,val2.byteLength);return typed1.every(((val,i)=>typed2[i]===val))}const keys1=Object.keys(val1),keys2=Object.keys(val2);return keys1.length===keys2.length&&keys1.every((key=>keys2.includes(key)))&&keys1.every((key=>valuesAreEqual(val1[key],val2[key])))}return false}exports.valuesAreEqual=valuesAreEqual;class ObjectDifferences{constructor(added,removed,changed){this.added=added;this.removed=removed;this.changed=changed}forChild(key){if(this.added.includes(key)){return"added"}if(this.removed.includes(key)){return"removed"}const changed=this.changed.find((ch=>ch.key===key));return changed?changed.change:"identical"}}exports.ObjectDifferences=ObjectDifferences;function compareValues(oldVal,newVal,sortedResults=false){const voids=[undefined,null];if(oldVal===newVal){return"identical"}else if(voids.indexOf(oldVal)>=0&&voids.indexOf(newVal)<0){return"added"}else if(voids.indexOf(oldVal)<0&&voids.indexOf(newVal)>=0){return"removed"}else if(typeof oldVal!==typeof newVal){return"changed"}else if(isTypedArray(oldVal)||isTypedArray(newVal)){if(!isTypedArray(oldVal)||!isTypedArray(newVal)){return"changed"}const typed1=oldVal instanceof Uint8Array?oldVal:oldVal instanceof ArrayBuffer?new Uint8Array(oldVal):new Uint8Array(oldVal.buffer,oldVal.byteOffset,oldVal.byteLength);const typed2=newVal instanceof Uint8Array?newVal:newVal instanceof ArrayBuffer?new Uint8Array(newVal):new Uint8Array(newVal.buffer,newVal.byteOffset,newVal.byteLength);return typed1.byteLength===typed2.byteLength&&typed1.every(((val,i)=>typed2[i]===val))?"identical":"changed"}else if(oldVal instanceof Date||newVal instanceof Date){return oldVal instanceof Date&&newVal instanceof Date&&oldVal.getTime()===newVal.getTime()?"identical":"changed"}else if(oldVal instanceof path_reference_1.PathReference||newVal instanceof path_reference_1.PathReference){return oldVal instanceof path_reference_1.PathReference&&newVal instanceof path_reference_1.PathReference&&oldVal.path===newVal.path?"identical":"changed"}else if(typeof oldVal==="object"){const isArray=oldVal instanceof Array;const getKeys=obj=>{let keys=Object.keys(obj).filter((key=>!voids.includes(obj[key])));if(isArray){keys=keys.map((v=>parseInt(v)))}return keys};const oldKeys=getKeys(oldVal);const newKeys=getKeys(newVal);const removedKeys=oldKeys.filter((key=>!newKeys.includes(key)));const addedKeys=newKeys.filter((key=>!oldKeys.includes(key)));const changedKeys=newKeys.reduce(((changed,key)=>{if(oldKeys.includes(key)){const val1=oldVal[key];const val2=newVal[key];const c=compareValues(val1,val2);if(c!=="identical"){changed.push({key:key,change:c})}}return changed}),[]);if(addedKeys.length===0&&removedKeys.length===0&&changedKeys.length===0){return"identical"}else{return new ObjectDifferences(addedKeys,removedKeys,sortedResults?changedKeys.sort(((a,b)=>a.key{switch(compareResult){case"identical":return[];case"changed":return[{target:target,prev:prev,val:val}];case"added":return[{target:target,prev:null,val:val}];case"removed":return[{target:target,prev:prev,val:null}];default:{let changes=[];compareResult.added.forEach((key=>changes.push({target:target.concat(key),prev:null,val:val[key]})));compareResult.removed.forEach((key=>changes.push({target:target.concat(key),prev:prev[key],val:null})));compareResult.changed.forEach((item=>{const childChanges=process(target.concat(item.key),item.change,prev[item.key],val[item.key]);changes=changes.concat(childChanges)}));return changes}}};const compareResult=compareValues(oldVal,newVal,sortedResults);return process([],compareResult,oldVal,newVal)}exports.getMutations=getMutations;function getChildValues(childKey,oldValue,newValue){oldValue=oldValue===null?null:oldValue[childKey];if(typeof oldValue==="undefined"){oldValue=null}newValue=newValue===null?null:newValue[childKey];if(typeof newValue==="undefined"){newValue=null}return{oldValue:oldValue,newValue:newValue}}exports.getChildValues=getChildValues;function defer(fn){process_1.default.nextTick(fn)}exports.defer=defer}).call(this)}).call(this,require("buffer").Buffer)},{"./partial-array":41,"./path-reference":43,"./process":44,buffer:53}],53:[function(require,module,exports){},{}]},{},[5])(5)})); \ No newline at end of file +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.acebase=f()}})((function(){var define,module,exports;return function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,(function(r){var n=e[i][1][r];return o(n||r)}),p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i{this._ready=true}))}async ready(callback){if(!this._ready){await new Promise((resolve=>this.on("ready",resolve)))}callback===null||callback===void 0?void 0:callback()}get isReady(){return this._ready}setObservable(ObservableImpl){(0,optional_observable_1.setObservable)(ObservableImpl)}ref(path){return new data_reference_1.DataReference(this,path)}get root(){return this.ref("")}query(path){const ref=new data_reference_1.DataReference(this,path);return new data_reference_1.DataReferenceQuery(ref)}get indexes(){return{get:()=>this.api.getIndexes(),create:(path,key,options)=>this.api.createIndex(path,key,options),delete:async filePath=>this.api.deleteIndex(filePath)}}get schema(){return{get:path=>this.api.getSchema(path),set:(path,schema)=>this.api.setSchema(path,schema),all:()=>this.api.getSchemas(),check:(path,value,isUpdate)=>this.api.validateSchema(path,value,isUpdate)}}}exports.AceBaseBase=AceBaseBase},{"./data-reference":8,"./debug":10,"./optional-observable":14,"./simple-colors":21,"./simple-event-emitter":22,"./type-mappings":25}],2:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Api=void 0;class NotImplementedError extends Error{constructor(name){super(`${name} is not implemented`)}}class Api{constructor(){}stats(options){throw new NotImplementedError("stats")}subscribe(path,event,callback,settings){throw new NotImplementedError("subscribe")}unsubscribe(path,event,callback){throw new NotImplementedError("unsubscribe")}update(path,updates,options){throw new NotImplementedError("update")}set(path,value,options){throw new NotImplementedError("set")}get(path,options){throw new NotImplementedError("get")}transaction(path,callback,options){throw new NotImplementedError("transaction")}exists(path){throw new NotImplementedError("exists")}query(path,query,options){throw new NotImplementedError("query")}reflect(path,type,args){throw new NotImplementedError("reflect")}export(path,write,options){throw new NotImplementedError("export")}import(path,read,options){throw new NotImplementedError("import")}createIndex(path,key,options){throw new NotImplementedError("createIndex")}getIndexes(){throw new NotImplementedError("getIndexes")}deleteIndex(filePath){throw new NotImplementedError("deleteIndex")}setSchema(path,schema){throw new NotImplementedError("setSchema")}getSchema(path){throw new NotImplementedError("getSchema")}getSchemas(){throw new NotImplementedError("getSchemas")}validateSchema(path,value,isUpdate){throw new NotImplementedError("validateSchema")}getMutations(filter){throw new NotImplementedError("getMutations")}getChanges(filter){throw new NotImplementedError("getChanges")}}exports.Api=Api},{}],3:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ascii85=void 0;function c(input,length,result){const b=[0,0,0,0,0];for(let i=0;i";return ret}exports.ascii85={encode:function(arr){if(arr instanceof ArrayBuffer){arr=new Uint8Array(arr,0,arr.byteLength)}return encode(arr)},decode:function(input){if(!input.startsWith("<~")||!input.endsWith("~>")){throw new Error("Invalid input string")}input=input.substr(2,input.length-4);const n=input.length,r=[],b=[0,0,0,0,0];let t,x,y,d;for(let i=0;i>>=8;y=t&255;t>>>=8;r.push(t>>>8,t&255,y,x);for(let j=d;j<5;++j,r.pop());i+=4}const data=new Uint8Array(r);return data.buffer.slice(data.byteOffset,data.byteOffset+data.byteLength)}}},{}],4:[function(require,module,exports){"use strict";var _a,_b;Object.defineProperty(exports,"__esModule",{value:true});const pad_1=require("../pad");const env=typeof window==="object"?window:self,globalCount=Object.keys(env).length,mimeTypesLength=(_b=(_a=navigator.mimeTypes)===null||_a===void 0?void 0:_a.length)!==null&&_b!==void 0?_b:0,clientId=(0,pad_1.default)((mimeTypesLength+navigator.userAgent.length).toString(36)+globalCount.toString(36),4);function fingerprint(){return clientId}exports.default=fingerprint},{"../pad":6}],5:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});const fingerprint_1=require("./fingerprint");const pad_1=require("./pad");let c=0;const blockSize=4,base=36,discreteValues=Math.pow(base,blockSize);function randomBlock(){return(0,pad_1.default)((Math.random()*discreteValues<<0).toString(base),blockSize)}function safeCounter(){c=ct2[i]===key))}static isAncestor(ancestor,other){return ancestor.lengthother[i]===key))}static isDescendant(descendant,other){return descendant.length>other.length&&other.every(((key,i)=>descendant[i]===key))}}const isProxy=Symbol("isProxy");class LiveDataProxy{static async create(ref,options){var _a;ref=new data_reference_1.DataReference(ref.db,ref.path);let cache,loaded=false;let latestCursor=options===null||options===void 0?void 0:options.cursor;let proxy;const proxyId=id_1.ID.generate();const clientSubscriptions=[];const clientEventEmitter=new simple_event_emitter_1.SimpleEventEmitter;clientEventEmitter.on("cursor",(cursor=>latestCursor=cursor));clientEventEmitter.on("error",(err=>{console.error(err.message,err.details)}));const applyChange=(keys,newValue)=>{if(keys.length===0){cache=newValue;return true}const allowCreation=false;if(allowCreation){cache=typeof keys[0]==="number"?[]:{}}let target=cache;const trailKeys=keys.slice();while(trailKeys.length>1){const key=trailKeys.shift();if(!(key in target)){if(allowCreation){target[key]=typeof key==="number"?[]:{}}else{return false}}target=target[key]}const prop=trailKeys.shift();if(newValue===null){target instanceof Array?target.splice(prop,1):delete target[prop]}else{target[prop]=newValue}return true};const syncFallback=async()=>{if(!loaded){return}await reload()};const subscription=ref.on("mutations",{syncFallback:syncFallback}).subscribe((async snap=>{var _a;if(!loaded){return}const context=snap.context();const isRemote=((_a=context.acebase_proxy)===null||_a===void 0?void 0:_a.id)!==proxyId;if(!isRemote){return}const mutations=snap.val(false);const proceed=mutations.every((mutation=>{if(!applyChange(mutation.target,mutation.val)){return false}const changeRef=mutation.target.reduce(((ref,key)=>ref.child(key)),ref);const changeSnap=new data_snapshot_1.DataSnapshot(changeRef,mutation.val,false,mutation.prev,snap.context());clientEventEmitter.emit("mutation",{snapshot:changeSnap,isRemote:isRemote});return true}));if(proceed){clientEventEmitter.emit("cursor",context.acebase_cursor);localMutationsEmitter.emit("mutations",{origin:"remote",snap:snap})}else{console.warn(`Cached value of live data proxy on "${ref.path}" appears outdated, will be reloaded`);await reload()}}));let processPromise=Promise.resolve();const mutationQueue=[];const transactions=[];const pushLocalMutations=async()=>{const mutations=[];for(let i=0,m=mutationQueue[0];iRelativeNodeTarget.areEqual(t.target,m.target)||RelativeNodeTarget.isAncestor(t.target,m.target)))){mutationQueue.splice(i,1);i--;mutations.push(m)}}if(mutations.length===0){return}mutations.forEach((mutation=>{mutation.value=(0,utils_1.cloneObject)(getTargetValue(cache,mutation.target))}));process_1.default.nextTick((()=>{const context={acebase_proxy:{id:proxyId,source:"update"}};mutations.forEach((mutation=>{const mutationRef=mutation.target.reduce(((ref,key)=>ref.child(key)),ref);const mutationSnap=new data_snapshot_1.DataSnapshot(mutationRef,mutation.value,false,mutation.previous,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false})}));const snap=new data_snapshot_1.MutationsDataSnapshot(ref,mutations.map((m=>({target:m.target,val:m.value,prev:m.previous}))),context);localMutationsEmitter.emit("mutations",{origin:"local",snap:snap})}));processPromise=mutations.reduce(((mutations,m,i,arr)=>{if(!arr.some((other=>RelativeNodeTarget.isAncestor(other.target,m.target)))){mutations.push(m)}return mutations}),[]).reduce(((updates,m)=>{const target=m.target;if(target.length===0){updates.push({ref:ref,target:target,value:cache,type:"set",previous:m.previous})}else{const parentTarget=target.slice(0,-1);const key=target.slice(-1)[0];const parentRef=parentTarget.reduce(((ref,key)=>ref.child(key)),ref);const parentUpdate=updates.find((update=>update.ref.path===parentRef.path));const cacheValue=getTargetValue(cache,target);const prevValue=m.previous;if(parentUpdate){parentUpdate.value[key]=cacheValue;parentUpdate.previous[key]=prevValue}else{updates.push({ref:parentRef,target:parentTarget,value:{[key]:cacheValue},type:"update",previous:{[key]:prevValue}})}}return updates}),[]).reduce((async(promise,update)=>{const context={acebase_proxy:{id:proxyId,source:update.type}};await promise;await update.ref.context(context)[update.type](update.value).catch((err=>{clientEventEmitter.emit("error",{source:"update",message:`Error processing update of "/${ref.path}"`,details:err});const context={acebase_proxy:{id:proxyId,source:"update-rollback"}};const mutations=[];if(update.type==="set"){setTargetValue(cache,update.target,update.previous);const mutationSnap=new data_snapshot_1.DataSnapshot(update.ref,update.previous,false,update.value,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false});mutations.push({target:update.target,val:update.previous,prev:update.value})}else{Object.keys(update.previous).forEach((key=>{setTargetValue(cache,update.target.concat(key),update.previous[key]);const mutationSnap=new data_snapshot_1.DataSnapshot(update.ref.child(key),update.previous[key],false,update.value[key],context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false});mutations.push({target:update.target.concat(key),val:update.previous[key],prev:update.value[key]})}))}mutations.forEach((m=>{const mutationRef=m.target.reduce(((ref,key)=>ref.child(key)),ref);const mutationSnap=new data_snapshot_1.DataSnapshot(mutationRef,m.val,false,m.prev,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false})}));const snap=new data_snapshot_1.MutationsDataSnapshot(update.ref,mutations,context);localMutationsEmitter.emit("mutations",{origin:"local",snap:snap})}));if(update.ref.cursor){clientEventEmitter.emit("cursor",update.ref.cursor)}}),processPromise);await processPromise};let syncInProgress=false;const syncPromises=[];const syncCompleted=()=>{let resolve;const promise=new Promise((rs=>resolve=rs));syncPromises.push({resolve:resolve});return promise};let processQueueTimeout=null;const scheduleSync=()=>{if(!processQueueTimeout){processQueueTimeout=setTimeout((async()=>{syncInProgress=true;processQueueTimeout=null;await pushLocalMutations();syncInProgress=false;syncPromises.splice(0).forEach((p=>p.resolve()))}),0)}};const flagOverwritten=target=>{if(!mutationQueue.find((m=>RelativeNodeTarget.areEqual(m.target,target)))){mutationQueue.push({target:target,previous:(0,utils_1.cloneObject)(getTargetValue(cache,target))})}scheduleSync()};const localMutationsEmitter=new simple_event_emitter_1.SimpleEventEmitter;const addOnChangeHandler=(target,callback)=>{const isObject=val=>val!==null&&typeof val==="object";const mutationsHandler=async details=>{var _a;const{snap:snap,origin:origin}=details;const context=snap.context();const causedByOurProxy=((_a=context.acebase_proxy)===null||_a===void 0?void 0:_a.id)===proxyId;if(details.origin==="remote"&&causedByOurProxy){console.error("DEV ISSUE: mutationsHandler was called from remote event originating from our own proxy");return}const mutations=snap.val(false).filter((mutation=>mutation.target.slice(0,target.length).every(((key,i)=>target[i]===key))));if(mutations.length===0){return}let newValue,previousValue;const singleMutation=mutations.find((m=>m.target.length<=target.length));if(singleMutation){const trailKeys=target.slice(singleMutation.target.length);newValue=trailKeys.reduce(((val,key)=>!isObject(val)||!(key in val)?null:val[key]),singleMutation.val);previousValue=trailKeys.reduce(((val,key)=>!isObject(val)||!(key in val)?null:val[key]),singleMutation.prev)}else{const currentValue=getTargetValue(cache,target);newValue=(0,utils_1.cloneObject)(currentValue);previousValue=(0,utils_1.cloneObject)(newValue);mutations.forEach((mutation=>{const trailKeys=mutation.target.slice(target.length);for(let i=0,val=newValue,prev=previousValue;i{let keepSubscription=true;try{keepSubscription=false!==callback(Object.freeze(newValue),Object.freeze(previousValue),!causedByOurProxy,context)}catch(err){clientEventEmitter.emit("error",{source:origin==="remote"?"remote_update":"local_update",message:"Error running subscription callback",details:err})}if(keepSubscription===false){stop()}}))};localMutationsEmitter.on("mutations",mutationsHandler);const stop=()=>{localMutationsEmitter.off("mutations").off("mutations",mutationsHandler);clientSubscriptions.splice(clientSubscriptions.findIndex((cs=>cs.stop===stop)),1)};clientSubscriptions.push({target:target,stop:stop});return{stop:stop}};const handleFlag=(flag,target,args)=>{if(flag==="write"){return flagOverwritten(target)}else if(flag==="onChange"){return addOnChangeHandler(target,args.callback)}else if(flag==="subscribe"||flag==="observe"){const subscribe=subscriber=>{const currentValue=getTargetValue(cache,target);subscriber.next(currentValue);const subscription=addOnChangeHandler(target,(value=>{subscriber.next(value)}));return function unsubscribe(){subscription.stop()}};if(flag==="subscribe"){return subscribe}const Observable=(0,optional_observable_1.getObservable)();return new Observable(subscribe)}else if(flag==="transaction"){const hasConflictingTransaction=transactions.some((t=>RelativeNodeTarget.areEqual(target,t.target)||RelativeNodeTarget.isAncestor(target,t.target)||RelativeNodeTarget.isDescendant(target,t.target)));if(hasConflictingTransaction){return Promise.reject(new Error("Cannot start transaction because it conflicts with another transaction"))}return new Promise((async resolve=>{const hasPendingMutations=mutationQueue.some((m=>RelativeNodeTarget.areEqual(target,m.target)||RelativeNodeTarget.isAncestor(target,m.target)));if(hasPendingMutations){if(!syncInProgress){scheduleSync()}await syncCompleted()}const tx={target:target,status:"started",transaction:null};transactions.push(tx);tx.transaction={get status(){return tx.status},get completed(){return tx.status!=="started"},get mutations(){return mutationQueue.filter((m=>RelativeNodeTarget.areEqual(tx.target,m.target)||RelativeNodeTarget.isAncestor(tx.target,m.target)))},get hasMutations(){return this.mutations.length>0},async commit(){if(this.completed){throw new Error(`Transaction has completed already (status '${tx.status}')`)}tx.status="finished";transactions.splice(transactions.indexOf(tx),1);if(syncInProgress){await syncCompleted()}scheduleSync();await syncCompleted()},rollback(){if(this.completed){throw new Error(`Transaction has completed already (status '${tx.status}')`)}tx.status="canceled";const mutations=[];for(let i=0;i{if(m.target.length===0){cache=m.previous}else{setTargetValue(cache,m.target,m.previous)}}));transactions.splice(transactions.indexOf(tx),1)}};resolve(tx.transaction)}))}};const snap=await ref.get({cache_mode:"allow",cache_cursor:options===null||options===void 0?void 0:options.cursor});if(snap.context().acebase_origin!=="cache"){clientEventEmitter.emit("cursor",(_a=ref.cursor)!==null&&_a!==void 0?_a:null)}loaded=true;cache=snap.val();if(cache===null&&typeof(options===null||options===void 0?void 0:options.defaultValue)!=="undefined"){cache=options.defaultValue;const context={acebase_proxy:{id:proxyId,source:"default"}};await ref.context(context).set(cache)}proxy=createProxy({root:{ref:ref,get cache(){return cache}},target:[],id:proxyId,flag:handleFlag});const assertProxyAvailable=()=>{if(proxy===null){throw new Error("Proxy was destroyed")}};const reload=async()=>{assertProxyAvailable();mutationQueue.splice(0);const snap=await ref.get({allow_cache:false});const oldVal=cache,newVal=snap.val();cache=newVal;const mutations=(0,utils_1.getMutations)(oldVal,newVal);if(mutations.length===0){return}const context=snap.context();context.acebase_proxy={id:proxyId,source:"reload"};mutations.forEach((m=>{const targetRef=getTargetRef(ref,m.target);const newSnap=new data_snapshot_1.DataSnapshot(targetRef,m.val,m.val===null,m.prev,context);clientEventEmitter.emit("mutation",{snapshot:newSnap,isRemote:true})}));const mutationsSnap=new data_snapshot_1.MutationsDataSnapshot(ref,mutations,context);localMutationsEmitter.emit("mutations",{origin:"local",snap:mutationsSnap})};return{async destroy(){await processPromise;const promises=[subscription.stop(),...clientSubscriptions.map((cs=>cs.stop()))];await Promise.all(promises);["cursor","mutation","error"].forEach((event=>clientEventEmitter.off(event)));cache=null;proxy=null},stop(){this.destroy()},get value(){assertProxyAvailable();return proxy},get hasValue(){assertProxyAvailable();return cache!==null},set value(val){assertProxyAvailable();if(val!==null&&typeof val==="object"&&val[isProxy]){val=val.valueOf()}flagOverwritten([]);cache=val},get ref(){return ref},get cursor(){return latestCursor},reload:reload,onMutation(callback){assertProxyAvailable();clientEventEmitter.off("mutation");clientEventEmitter.on("mutation",(({snapshot:snapshot,isRemote:isRemote})=>{try{callback(snapshot,isRemote)}catch(err){clientEventEmitter.emit("error",{source:"mutation_callback",message:"Error in dataproxy onMutation callback",details:err})}}))},onError(callback){assertProxyAvailable();clientEventEmitter.off("error");clientEventEmitter.on("error",(err=>{try{callback(err)}catch(err){console.error(`Error in dataproxy onError callback: ${err.message}`)}}))},on(event,callback){clientEventEmitter.on(event,callback)},off(event,callback){clientEventEmitter.off(event,callback)}}}}exports.LiveDataProxy=LiveDataProxy;function getTargetValue(obj,target){let val=obj;for(const key of target){val=typeof val==="object"&&val!==null&&key in val?val[key]:null}return val}function setTargetValue(obj,target,value){if(target.length===0){throw new Error("Cannot update root target, caller must do that itself!")}const targetObject=target.slice(0,-1).reduce(((obj,key)=>obj[key]),obj);const prop=target.slice(-1)[0];if(value===null||typeof value==="undefined"){targetObject instanceof Array?targetObject.splice(prop,1):delete targetObject[prop]}else{targetObject[prop]=value}}function getTargetRef(ref,target){const path=path_info_1.PathInfo.get(ref.path).childPath(target);return new data_reference_1.DataReference(ref.db,path)}function createProxy(context){const targetRef=getTargetRef(context.root.ref,context.target);const childProxies=[];const handler={get(target,prop,receiver){target=getTargetValue(context.root.cache,context.target);if(typeof prop==="symbol"){if(prop.toString()===Symbol.iterator.toString()){prop="values"}else if(prop.toString()===isProxy.toString()){return true}else{return Reflect.get(target,prop,receiver)}}if(prop==="valueOf"){return function valueOf(){return target}}if(target===null||typeof target!=="object"){throw new Error(`Cannot read property "${prop}" of ${target}. Value of path "/${targetRef.path}" is not an object (anymore)`)}if(target instanceof Array&&typeof prop==="string"&&/^[0-9]+$/.test(prop)){prop=parseInt(prop)}const value=target[prop];if(value===null){delete target[prop];return}const childProxy=childProxies.find((proxy=>proxy.prop===prop));if(childProxy){if(childProxy.typeof===typeof value){return childProxy.value}childProxies.splice(childProxies.indexOf(childProxy),1)}const proxifyChildValue=prop=>{const value=target[prop];const childProxy=childProxies.find((child=>child.prop===prop));if(childProxy){if(childProxy.typeof===typeof value){return childProxy.value}childProxies.splice(childProxies.indexOf(childProxy),1)}if(typeof value!=="object"){return value}const newChildProxy=createProxy({root:context.root,target:context.target.concat(prop),id:context.id,flag:context.flag});childProxies.push({typeof:typeof value,prop:prop,value:newChildProxy});return newChildProxy};const unproxyValue=value=>value!==null&&typeof value==="object"&&value[isProxy]?value.getTarget():value;if(["string","number","boolean"].includes(typeof value)||value instanceof Date||value instanceof path_reference_1.PathReference||value instanceof ArrayBuffer||typeof value==="object"&&"buffer"in value){return value}const isArray=target instanceof Array;if(prop==="toString"){return function toString(){return`[LiveDataProxy for "${targetRef.path}"]`}}if(typeof value==="undefined"){if(prop==="push"){return function push(item){const childRef=targetRef.push();context.flag("write",context.target.concat(childRef.key));target[childRef.key]=item;return childRef.key}}if(prop==="getTarget"){return function(warn=true){warn&&console.warn("Use getTarget with caution - any changes will not be synchronized!");return target}}if(prop==="getRef"){return function getRef(){const ref=getTargetRef(context.root.ref,context.target);return ref}}if(prop==="forEach"){return function forEach(callback){const keys=Object.keys(target);let stop=false;for(let i=0;!stop&&iproxifyChildValue(key)));if(sortFn){arr.sort(sortFn)}return arr}}if(prop==="onChanged"){return function onChanged(callback){return context.flag("onChange",context.target,{callback:callback})}}if(prop==="subscribe"){return function subscribe(){return context.flag("subscribe",context.target)}}if(prop==="getObservable"){return function getObservable(){return context.flag("observe",context.target)}}if(prop==="getOrderedCollection"){return function getOrderedCollection(orderProperty,orderIncrement){return new OrderedCollectionProxy(this,orderProperty,orderIncrement)}}if(prop==="startTransaction"){return function startTransaction(){return context.flag("transaction",context.target)}}if(prop==="remove"&&!isArray){return function remove(){if(context.target.length===0){throw new Error("Can't remove proxy root value")}const parent=getTargetValue(context.root.cache,context.target.slice(0,-1));const key=context.target.slice(-1)[0];context.flag("write",context.target);delete parent[key]}}return}else if(typeof value==="function"){if(isArray){const writeArray=action=>{context.flag("write",context.target);return action()};const cleanArrayValues=values=>values.map((value=>{value=unproxyValue(value);removeVoidProperties(value);return value}));if(prop==="push"){return function push(...items){items=cleanArrayValues(items);return writeArray((()=>target.push(...items)))}}if(prop==="pop"){return function pop(){return writeArray((()=>target.pop()))}}if(prop==="splice"){return function splice(start,deleteCount,...items){items=cleanArrayValues(items);return writeArray((()=>target.splice(start,deleteCount,...items)))}}if(prop==="shift"){return function shift(){return writeArray((()=>target.shift()))}}if(prop==="unshift"){return function unshift(...items){items=cleanArrayValues(items);return writeArray((()=>target.unshift(...items)))}}if(prop==="sort"){return function sort(compareFn){return writeArray((()=>target.sort(compareFn)))}}if(prop==="reverse"){return function reverse(){return writeArray((()=>target.reverse()))}}if(["indexOf","lastIndexOf"].includes(prop)){return function indexOf(item,start){if(item!==null&&typeof item==="object"&&item[isProxy]){item=item.getTarget(false)}return target[prop](item,start)}}if(["forEach","every","some","filter","map"].includes(prop)){return function iterate(callback){return target[prop](((value,i)=>callback(proxifyChildValue(i),i,proxy)))}}if(["reduce","reduceRight"].includes(prop)){return function reduce(callback,initialValue){return target[prop](((prev,value,i)=>callback(prev,proxifyChildValue(i),i,proxy)),initialValue)}}if(["find","findIndex"].includes(prop)){return function find(callback){let value=target[prop](((value,i)=>callback(proxifyChildValue(i),i,proxy)));if(prop==="find"&&value){const index=target.indexOf(value);value=proxifyChildValue(index)}return value}}if(["values","entries","keys"].includes(prop)){return function*generator(){for(let i=0;itypeof key==="number"))){context.flag("write",context.target.slice(0,context.target.findIndex((key=>typeof key==="number"))))}else if(target instanceof Array){context.flag("write",context.target)}else{context.flag("write",context.target.concat(prop))}if(value===null){delete target[prop]}else{removeVoidProperties(value);target[prop]=value}return true},deleteProperty(target,prop){target=getTargetValue(context.root.cache,context.target);if(target===null){throw new Error(`Cannot delete property ${prop.toString()} of null`)}if(typeof prop==="symbol"){return Reflect.deleteProperty(target,prop)}if(!(prop in target)){return true}context.flag("write",context.target.concat(prop));delete target[prop];return true},ownKeys(target){target=getTargetValue(context.root.cache,context.target);return Reflect.ownKeys(target)},has(target,prop){target=getTargetValue(context.root.cache,context.target);return Reflect.has(target,prop)},getOwnPropertyDescriptor(target,prop){target=getTargetValue(context.root.cache,context.target);const descriptor=Reflect.getOwnPropertyDescriptor(target,prop);if(descriptor){descriptor.configurable=true}return descriptor},getPrototypeOf(target){target=getTargetValue(context.root.cache,context.target);return Reflect.getPrototypeOf(target)}};const proxy=new Proxy({},handler);return proxy}function removeVoidProperties(obj){if(typeof obj!=="object"){return}Object.keys(obj).forEach((key=>{const val=obj[key];if(val===null||typeof val==="undefined"){delete obj[key]}else if(typeof val==="object"){removeVoidProperties(val)}}))}function proxyAccess(proxiedValue){if(typeof proxiedValue!=="object"||!proxiedValue[isProxy]){throw new Error("Given value is not proxied. Make sure you are referencing the value through the live data proxy.")}return proxiedValue}exports.proxyAccess=proxyAccess;class OrderedCollectionProxy{constructor(collection,orderProperty="order",orderIncrement=10){this.collection=collection;this.orderProperty=orderProperty;this.orderIncrement=orderIncrement;if(typeof collection!=="object"||!collection[isProxy]){throw new Error("Collection is not proxied")}if(collection.valueOf()instanceof Array){throw new Error("Collection is an array, not an object collection")}if(!Object.keys(collection).every((key=>typeof collection[key]==="object"))){throw new Error("Collection has non-object children")}const ok=Object.keys(collection).every((key=>typeof collection[key][orderProperty]==="number"));if(!ok){const keys=Object.keys(collection);for(let i=0;i{const subscription=this.getObservable().subscribe((()=>{const newArray=this.getArray();subscriber.next(newArray)}));return function unsubscribe(){subscription.unsubscribe()}}))}getArray(){const arr=proxyAccess(this.collection).toArray(((a,b)=>a[this.orderProperty]-b[this.orderProperty]));return arr}add(newItem,index,from){const item=newItem;const arr=this.getArray();let minOrder=Number.POSITIVE_INFINITY,maxOrder=Number.NEGATIVE_INFINITY;for(let i=0;ithis.collection[key]===item));if(!fromKey){throw new Error("item not found in collection")}if(from===index){return{key:fromKey,index:index}}if(Math.abs(from-index)===1){const otherItem=arr[index];const otherOrder=otherItem[this.orderProperty];otherItem[this.orderProperty]=item[this.orderProperty];item[this.orderProperty]=otherOrder;return{key:fromKey,index:index}}else{arr.splice(from,1)}}if(typeof index!=="number"||index>=arr.length){index=arr.length;item[this.orderProperty]=arr.length==0?0:maxOrder+this.orderIncrement}else if(index===0){item[this.orderProperty]=arr.length==0?0:minOrder-this.orderIncrement}else{const orders=arr.map((item=>item[this.orderProperty]));const gap=orders[index]-orders[index-1];if(gap>1){item[this.orderProperty]=orders[index]-Math.floor(gap/2)}else{arr.splice(index,0,item);for(let i=0;ithis.collection[key]===item));if(!key){throw new Error("Cannot find target object to delete")}this.collection[key]=null;return{key:key,index:index}}move(fromIndex,toIndex){const arr=this.getArray();return this.add(arr[fromIndex],toIndex,fromIndex)}sort(sortFn){const arr=this.getArray();arr.sort(sortFn);for(let i=0;i{newContext[key]=context[key]}))}this[_private].context=newContext;return this}else if(typeof context==="undefined"){console.warn("Use snap.context() instead of snap.ref.context() to get updating context in event callbacks");return currentContext}else{throw new Error("Invalid context argument")}}get cursor(){return this[_private].cursor}set cursor(value){var _a;this[_private].cursor=value;(_a=this.onCursor)===null||_a===void 0?void 0:_a.call(this,value)}get path(){return this[_private].path}get key(){const key=this[_private].key;return typeof key==="number"?`[${key}]`:key}get index(){const key=this[_private].key;if(typeof key!=="number"){throw new Error(`"${key}" is not a number`)}return key}get parent(){const currentPath=path_info_1.PathInfo.fillVariables2(this.path,this.vars);const info=path_info_1.PathInfo.get(currentPath);if(info.parentPath===null){return null}return new DataReference(this.db,info.parentPath).context(this[_private].context)}get vars(){return this[_private].vars}child(childPath){childPath=typeof childPath==="number"?childPath:childPath.replace(/^\/|\/$/g,"");const currentPath=path_info_1.PathInfo.fillVariables2(this.path,this.vars);const targetPath=path_info_1.PathInfo.getChildPath(currentPath,childPath);return new DataReference(this.db,targetPath).context(this[_private].context)}async set(value,onComplete){try{if(this.isWildcardPath){throw new Error(`Cannot set the value of wildcard path "/${this.path}"`)}if(this.parent===null){throw new Error("Cannot set the root object. Use update, or set individual child properties")}if(typeof value==="undefined"){throw new TypeError(`Cannot store undefined value in "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}value=this.db.types.serialize(this.path,value);const{cursor:cursor}=await this.db.api.set(this.path,value,{context:this[_private].context});this.cursor=cursor;if(typeof onComplete==="function"){try{onComplete(null,this)}catch(err){console.error("Error in onComplete callback:",err)}}}catch(err){if(typeof onComplete==="function"){try{onComplete(err,this)}catch(err){console.error("Error in onComplete callback:",err)}}else{throw err}}return this}async update(updates,onComplete){try{if(this.isWildcardPath){throw new Error(`Cannot update the value of wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}if(typeof updates!=="object"||updates instanceof Array||updates instanceof ArrayBuffer||updates instanceof Date){await this.set(updates)}else if(Object.keys(updates).length===0){console.warn(`update called on path "/${this.path}", but there is nothing to update`)}else{updates=this.db.types.serialize(this.path,updates);const{cursor:cursor}=await this.db.api.update(this.path,updates,{context:this[_private].context});this.cursor=cursor}if(typeof onComplete==="function"){try{onComplete(null,this)}catch(err){console.error("Error in onComplete callback:",err)}}}catch(err){if(typeof onComplete==="function"){try{onComplete(err,this)}catch(err){console.error("Error in onComplete callback:",err)}}else{throw err}}return this}async transaction(callback){if(this.isWildcardPath){throw new Error(`Cannot start a transaction on wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}let throwError;const cb=currentValue=>{currentValue=this.db.types.deserialize(this.path,currentValue);const snap=new data_snapshot_1.DataSnapshot(this,currentValue);let newValue;try{newValue=callback(snap)}catch(err){throwError=err;return}if(newValue instanceof Promise){return newValue.then((val=>this.db.types.serialize(this.path,val))).catch((err=>{throwError=err;return}))}else{return this.db.types.serialize(this.path,newValue)}};const{cursor:cursor}=await this.db.api.transaction(this.path,cb,{context:this[_private].context});this.cursor=cursor;if(throwError){throw throwError}return this}on(event,callback,cancelCallback){if(this.path===""&&["value","child_changed"].includes(event)){console.warn("WARNING: Listening for value and child_changed events on the root node is a bad practice. These events require loading of all data (value event), or potentially lots of data (child_changed event) each time they are fired")}let eventPublisher=null;const eventStream=new subscription_1.EventStream((publisher=>{eventPublisher=publisher}));const cb={event:event,stream:eventStream,userCallback:typeof callback==="function"&&callback,ourCallback:(err,path,newValue,oldValue,eventContext)=>{if(err){this.db.debug.error(`Error getting data for event ${event} on path "${path}"`,err);return}const ref=this.db.ref(path);ref[_private].vars=path_info_1.PathInfo.extractVariables(this.path,path);let callbackObject;if(event.startsWith("notify_")){callbackObject=ref.context(eventContext||{})}else{const values={previous:this.db.types.deserialize(path,oldValue),current:this.db.types.deserialize(path,newValue)};if(event==="child_removed"){callbackObject=new data_snapshot_1.DataSnapshot(ref,values.previous,true,values.previous,eventContext)}else if(event==="mutations"){callbackObject=new data_snapshot_1.MutationsDataSnapshot(ref,values.current,eventContext)}else{const isRemoved=event==="mutated"&&values.current===null;callbackObject=new data_snapshot_1.DataSnapshot(ref,values.current,isRemoved,values.previous,eventContext)}}eventPublisher.publish(callbackObject);if(eventContext===null||eventContext===void 0?void 0:eventContext.acebase_cursor){this.cursor=eventContext.acebase_cursor}}};this[_private].callbacks.push(cb);const subscribe=()=>{if(typeof callback==="function"){eventStream.subscribe(callback,((activated,cancelReason)=>{if(!activated){cancelCallback&&cancelCallback(cancelReason)}}))}const advancedOptions=typeof callback==="object"?callback:{newOnly:!callback};if(typeof advancedOptions.newOnly!=="boolean"){advancedOptions.newOnly=false}if(this.isWildcardPath){advancedOptions.newOnly=true}const cancelSubscription=err=>{const callbacks=this[_private].callbacks;callbacks.splice(callbacks.indexOf(cb),1);this.db.api.unsubscribe(this.path,event,cb.ourCallback);this.db.debug.error(`Subscription "${event}" on path "/${this.path}" canceled because of an error: ${err.message}`);eventPublisher.cancel(err.message)};const authorized=this.db.api.subscribe(this.path,event,cb.ourCallback,{newOnly:advancedOptions.newOnly,cancelCallback:cancelSubscription,syncFallback:advancedOptions.syncFallback});const allSubscriptionsStoppedCallback=()=>{const callbacks=this[_private].callbacks;callbacks.splice(callbacks.indexOf(cb),1);return this.db.api.unsubscribe(this.path,event,cb.ourCallback)};if(authorized instanceof Promise){authorized.then((()=>{eventPublisher.start(allSubscriptionsStoppedCallback)})).catch(cancelSubscription)}else{eventPublisher.start(allSubscriptionsStoppedCallback)}if(!advancedOptions.newOnly){if(event==="value"){this.get((snap=>{eventPublisher.publish(snap)}))}else if(event==="child_added"){this.get((snap=>{const val=snap.val();if(val===null||typeof val!=="object"){return}Object.keys(val).forEach((key=>{const childSnap=new data_snapshot_1.DataSnapshot(this.child(key),val[key]);eventPublisher.publish(childSnap)}))}))}else if(event==="notify_child_added"){const step=100,limit=step;let skip=0;const more=async()=>{const children=await this.db.api.reflect(this.path,"children",{limit:limit,skip:skip});children.list.forEach((child=>{const childRef=this.child(child.key);eventPublisher.publish(childRef)}));if(children.more){skip+=step;more()}};more()}}};if(this.db.isReady){subscribe()}else{this.db.ready(subscribe)}return eventStream}off(event,callback){const subscriptions=this[_private].callbacks;const stopSubs=subscriptions.filter((sub=>(!event||sub.event===event)&&(!callback||sub.userCallback===callback)));if(stopSubs.length===0){this.db.debug.warn(`Can't find event subscriptions to stop (path: "${this.path}", event: ${event||"(any)"}, callback: ${callback})`)}stopSubs.forEach((sub=>{sub.stream.stop()}));return this}get(optionsOrCallback,callback){if(!this.db.isReady){const promise=this.db.ready().then((()=>this.get(optionsOrCallback,callback)));return typeof optionsOrCallback!=="function"&&typeof callback!=="function"?promise:undefined}callback=typeof optionsOrCallback==="function"?optionsOrCallback:typeof callback==="function"?callback:undefined;if(this.isWildcardPath){const error=new Error(`Cannot get value of wildcard path "/${this.path}". Use .query() instead`);if(typeof callback==="function"){throw error}return Promise.reject(error)}const options=new DataRetrievalOptions(typeof optionsOrCallback==="object"?optionsOrCallback:{cache_mode:"allow"});const promise=this.db.api.get(this.path,options).then((result=>{var _a;const isNewApiResult="context"in result&&"value"in result;if(!isNewApiResult){console.warn("AceBase api.get method returned an old response value. Update your acebase or acebase-client package");result={value:result,context:{}}}const value=this.db.types.deserialize(this.path,result.value);const snapshot=new data_snapshot_1.DataSnapshot(this,value,undefined,undefined,result.context);if((_a=result.context)===null||_a===void 0?void 0:_a.acebase_cursor){this.cursor=result.context.acebase_cursor}return snapshot}));if(callback){promise.then(callback).catch((err=>{console.error("Uncaught error:",err)}));return}else{return promise}}once(event,options){if(event==="value"&&!this.isWildcardPath){return this.get(options)}return new Promise((resolve=>{const callback=snap=>{this.off(event,callback);resolve(snap)};this.on(event,callback)}))}push(value,onComplete){if(this.isWildcardPath){const error=new Error(`Cannot push to wildcard path "/${this.path}"`);if(typeof value==="undefined"||typeof onComplete==="function"){throw error}return Promise.reject(error)}const id=id_1.ID.generate();const ref=this.child(id);ref[_private].pushed=true;if(typeof value!=="undefined"){return ref.set(value,onComplete).then((()=>ref))}else{return ref}}async remove(){if(this.isWildcardPath){throw new Error(`Cannot remove wildcard path "/${this.path}". Use query().remove instead`)}if(this.parent===null){throw new Error("Cannot remove the root node")}return this.set(null)}async exists(){if(this.isWildcardPath){throw new Error(`Cannot check wildcard path "/${this.path}" existence`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.exists(this.path)}get isWildcardPath(){return this.path.indexOf("*")>=0||this.path.indexOf("$")>=0}query(){return new DataReferenceQuery(this)}async count(){const info=await this.reflect("info",{child_count:true});return info.children.count}async reflect(type,args){if(this.isWildcardPath){throw new Error(`Cannot reflect on wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.reflect(this.path,type,args)}async export(write,options={format:"json",type_safe:true}){if(this.isWildcardPath){throw new Error(`Cannot export wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}const writeFn=typeof write==="function"?write:write.write.bind(write);return this.db.api.export(this.path,writeFn,options)}async import(read,options={format:"json",suppress_events:false}){if(this.isWildcardPath){throw new Error(`Cannot import to wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.import(this.path,read,options)}proxy(options){const isOptionsArg=typeof options==="object"&&(typeof options.cursor!=="undefined"||typeof options.defaultValue!=="undefined");if(typeof options!=="undefined"&&!isOptionsArg){this.db.debug.warn("Warning: live data proxy is being initialized with a deprecated method signature. Use ref.proxy(options) instead of ref.proxy(defaultValue)");options={defaultValue:options}}return data_proxy_1.LiveDataProxy.create(this,options)}observe(options){if(options){throw new Error("observe does not support data retrieval options yet")}if(this.isWildcardPath){throw new Error(`Cannot observe wildcard path "/${this.path}"`)}const Observable=(0,optional_observable_1.getObservable)();return new Observable((observer=>{let cache,resolved=false;let promise=this.get(options).then((snap=>{resolved=true;cache=snap.val();observer.next(cache)}));const updateCache=snap=>{if(!resolved){promise=promise.then((()=>updateCache(snap)));return}const mutatedPath=snap.ref.path;if(mutatedPath===this.path){cache=snap.val();return observer.next(cache)}const trailKeys=path_info_1.PathInfo.getPathKeys(mutatedPath).slice(path_info_1.PathInfo.getPathKeys(this.path).length);let target=cache;while(trailKeys.length>1){const key=trailKeys.shift();if(!(key in target)){target[key]=typeof trailKeys[0]==="number"?[]:{}}target=target[key]}const prop=trailKeys.shift();const newValue=snap.val();if(newValue===null){target instanceof Array&&typeof prop==="number"?target.splice(prop,1):delete target[prop]}else{target[prop]=newValue}observer.next(cache)};this.on("mutated",updateCache);return()=>{this.off("mutated",updateCache)}}))}async forEach(callbackOrOptions,callback){let options;if(typeof callbackOrOptions==="function"){callback=callbackOrOptions}else{options=callbackOrOptions}if(typeof callback!=="function"){throw new TypeError("No callback function given")}const info=await this.reflect("children",{limit:0,skip:0});const summary={canceled:false,total:info.list.length,processed:0};for(let i=0;ithis.get(optionsOrCallback,callback)));return typeof optionsOrCallback!=="function"&&typeof callback!=="function"?promise:undefined}callback=typeof optionsOrCallback==="function"?optionsOrCallback:typeof callback==="function"?callback:undefined;const options=new QueryDataRetrievalOptions(typeof optionsOrCallback==="object"?optionsOrCallback:{snapshots:true,cache_mode:"allow"});options.allow_cache=options.cache_mode!=="bypass";options.eventHandler=ev=>{if(!this[_private].events[ev.name]){return false}const listeners=this[_private].events[ev.name];if(typeof listeners!=="object"||listeners.length===0){return false}if(["add","change","remove"].includes(ev.name)){const ref=new DataReference(this.ref.db,ev.path);const eventData={name:ev.name};if(options.snapshots&&ev.name!=="remove"){const val=db.types.deserialize(ev.path,ev.value);eventData.snapshot=new data_snapshot_1.DataSnapshot(ref,val,false)}else{eventData.ref=ref}ev=eventData}listeners.forEach((callback=>{try{callback(ev)}catch(e){}}))};options.monitor={add:false,change:false,remove:false};if(this[_private].events){if(this[_private].events["add"]&&this[_private].events["add"].length>0){options.monitor.add=true}if(this[_private].events["change"]&&this[_private].events["change"].length>0){options.monitor.change=true}if(this[_private].events["remove"]&&this[_private].events["remove"].length>0){options.monitor.remove=true}}this.stop();const db=this.ref.db;return db.api.query(this.ref.path,this[_private],options).catch((err=>{throw new Error(err)})).then((res=>{const{stop:stop}=res;let{results:results,context:context}=res;this.stop=async()=>{await stop()};if(!("results"in res&&"context"in res)){console.warn("Query results missing context. Update your acebase and/or acebase-client packages");results=res,context={}}if(options.snapshots){const snaps=results.map((result=>{const val=db.types.deserialize(result.path,result.val);return new data_snapshot_1.DataSnapshot(db.ref(result.path),val,false,undefined,context)}));return DataSnapshotsArray.from(snaps)}else{const refs=results.map((path=>db.ref(path)));return DataReferencesArray.from(refs)}})).then((results=>{callback&&callback(results);return results}))}async stop(){}getRefs(callback){return this.get({snapshots:false},callback)}find(){return this.get({snapshots:false})}async count(){const refs=await this.find();return refs.length}async exists(){const originalTake=this[_private].take;const p=this.take(1).find();this.take(originalTake);const refs=await p;return refs.length!==0}async remove(callback){const refs=await this.find();const parentUpdates=refs.reduce(((parents,ref)=>{const parent=parents[ref.parent.path];if(!parent){parents[ref.parent.path]=[ref]}else{parent.push(ref)}return parents}),{});const db=this.ref.db;const promises=Object.keys(parentUpdates).map((async parentPath=>{const updates=refs.reduce(((updates,ref)=>{updates[ref.key]=null;return updates}),{});const ref=db.ref(parentPath);try{await ref.update(updates);return{ref:ref,success:true}}catch(error){return{ref:ref,success:false,error:error}}}));const results=await Promise.all(promises);callback&&callback(results);return results}on(event,callback){if(!this[_private].events[event]){this[_private].events[event]=[]}this[_private].events[event].push(callback);return this}off(event,callback){if(typeof event==="undefined"){this[_private].events={};return this}if(!this[_private].events[event]){return this}if(typeof callback==="undefined"){delete this[_private].events[event];return this}const index=this[_private].events[event].indexOf(callback);if(!~index){return this}this[_private].events[event].splice(index,1);return this}async forEach(callbackOrOptions,callback){let options;if(typeof callbackOrOptions==="function"){callback=callbackOrOptions}else{options=callbackOrOptions}if(typeof callback!=="function"){throw new TypeError("No callback function given")}const refs=await this.find();const summary={canceled:false,total:refs.length,processed:0};for(let i=0;iarr[i]=snap));return arr}getValues(){return this.map((snap=>snap.val()))}}exports.DataSnapshotsArray=DataSnapshotsArray;class DataReferencesArray extends Array{static from(refs){const arr=new DataReferencesArray(refs.length);refs.forEach(((ref,i)=>arr[i]=ref));return arr}getPaths(){return this.map((ref=>ref.path))}}exports.DataReferencesArray=DataReferencesArray},{"./data-proxy":7,"./data-snapshot":9,"./id":11,"./optional-observable":14,"./path-info":16,"./subscription":23}],9:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.MutationsDataSnapshot=exports.DataSnapshot=void 0;const path_info_1=require("./path-info");function getChild(snapshot,path,previous=false){if(!snapshot.exists()){return null}let child=previous?snapshot.previous():snapshot.val();if(typeof path==="number"){return child[path]}path_info_1.PathInfo.getPathKeys(path).every((key=>{child=child[key];return typeof child!=="undefined"}));return child||null}function getChildren(snapshot){if(!snapshot.exists()){return[]}const value=snapshot.val();if(value instanceof Array){return new Array(value.length).map(((v,i)=>i))}if(typeof value==="object"){return Object.keys(value)}return[]}class DataSnapshot{constructor(ref,value,isRemoved=false,prevValue,context){this.ref=ref;this.val=()=>value;this.previous=()=>prevValue;this.exists=()=>{if(isRemoved){return false}return value!==null&&typeof value!=="undefined"};this.context=()=>context||{}}exists(){return false}static for(ref,value){return new DataSnapshot(ref,value)}child(path){const val=getChild(this,path,false);const prev=getChild(this,path,true);return new DataSnapshot(this.ref.child(path),val,false,prev)}hasChild(path){return getChild(this,path)!==null}hasChildren(){return getChildren(this).length>0}numChildren(){return getChildren(this).length}forEach(callback){const value=this.val();const prev=this.previous();return getChildren(this).every((key=>{const snap=new DataSnapshot(this.ref.child(key),value[key],false,prev[key]);return callback(snap)}))}get key(){return this.ref.key}}exports.DataSnapshot=DataSnapshot;class MutationsDataSnapshot extends DataSnapshot{constructor(ref,mutations,context){super(ref,mutations,false,undefined,context);this.previous=()=>{throw new Error("Iterate values to get previous values for each mutation")};this.val=(warn=true)=>{if(warn){console.warn("Unless you know what you are doing, it is best not to use the value of a mutations snapshot directly. Use child methods and forEach to iterate the mutations instead")}return mutations}}forEach(callback){const mutations=this.val();return mutations.every((mutation=>{const ref=mutation.target.reduce(((ref,key)=>ref.child(key)),this.ref);const snap=new DataSnapshot(ref,mutation.val,false,mutation.prev);return callback(snap)}))}child(index){if(typeof index!=="number"){throw new Error("child index must be a number")}const mutation=this.val()[index];const ref=mutation.target.reduce(((ref,key)=>ref.child(key)),this.ref);return new DataSnapshot(ref,mutation.val,false,mutation.prev)}}exports.MutationsDataSnapshot=MutationsDataSnapshot},{"./path-info":16}],10:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DebugLogger=void 0;const process_1=require("./process");const noop=()=>{};class DebugLogger{constructor(level="log",prefix=""){this.level=level;this.prefix=prefix;this.setLevel(level)}setLevel(level){const prefix=this.prefix?this.prefix+" %s":"";this.verbose=["verbose"].includes(level)?prefix?console.log.bind(console,prefix):console.log.bind(console):noop;this.log=["verbose","log"].includes(level)?prefix?console.log.bind(console,prefix):console.log.bind(console):noop;this.warn=["verbose","log","warn"].includes(level)?prefix?console.warn.bind(console,prefix):console.warn.bind(console):noop;this.error=["verbose","log","warn","error"].includes(level)?prefix?console.error.bind(console,prefix):console.error.bind(console):noop;this.write=text=>{const isRunKit=typeof process_1.default!=="undefined"&&process_1.default.env&&typeof process_1.default.env.RUNKIT_ENDPOINT_PATH==="string";if(text&&isRunKit){text.split("\n").forEach((line=>console.log(line)))}else{console.log(text)}}}}exports.DebugLogger=DebugLogger},{"./process":18}],11:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ID=void 0;const cuid_1=require("./cuid");let timeBias=0;class ID{static set timeBias(bias){if(typeof bias!=="number"){return}timeBias=bias}static generate(){return(0,cuid_1.default)(timeBias).slice(1)}}exports.ID=ID},{"./cuid":5}],12:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObjectCollection=exports.PartialArray=exports.SchemaDefinition=exports.Colorize=exports.ColorStyle=exports.SimpleEventEmitter=exports.SimpleCache=exports.ascii85=exports.PathInfo=exports.Utils=exports.TypeMappings=exports.Transport=exports.EventSubscription=exports.EventPublisher=exports.EventStream=exports.PathReference=exports.ID=exports.DebugLogger=exports.OrderedCollectionProxy=exports.proxyAccess=exports.MutationsDataSnapshot=exports.DataSnapshot=exports.DataReferencesArray=exports.DataSnapshotsArray=exports.QueryDataRetrievalOptions=exports.DataRetrievalOptions=exports.DataReferenceQuery=exports.DataReference=exports.Api=exports.AceBaseBaseSettings=exports.AceBaseBase=void 0;var acebase_base_1=require("./acebase-base");Object.defineProperty(exports,"AceBaseBase",{enumerable:true,get:function(){return acebase_base_1.AceBaseBase}});Object.defineProperty(exports,"AceBaseBaseSettings",{enumerable:true,get:function(){return acebase_base_1.AceBaseBaseSettings}});var api_1=require("./api");Object.defineProperty(exports,"Api",{enumerable:true,get:function(){return api_1.Api}});var data_reference_1=require("./data-reference");Object.defineProperty(exports,"DataReference",{enumerable:true,get:function(){return data_reference_1.DataReference}});Object.defineProperty(exports,"DataReferenceQuery",{enumerable:true,get:function(){return data_reference_1.DataReferenceQuery}});Object.defineProperty(exports,"DataRetrievalOptions",{enumerable:true,get:function(){return data_reference_1.DataRetrievalOptions}});Object.defineProperty(exports,"QueryDataRetrievalOptions",{enumerable:true,get:function(){return data_reference_1.QueryDataRetrievalOptions}});Object.defineProperty(exports,"DataSnapshotsArray",{enumerable:true,get:function(){return data_reference_1.DataSnapshotsArray}});Object.defineProperty(exports,"DataReferencesArray",{enumerable:true,get:function(){return data_reference_1.DataReferencesArray}});var data_snapshot_1=require("./data-snapshot");Object.defineProperty(exports,"DataSnapshot",{enumerable:true,get:function(){return data_snapshot_1.DataSnapshot}});Object.defineProperty(exports,"MutationsDataSnapshot",{enumerable:true,get:function(){return data_snapshot_1.MutationsDataSnapshot}});var data_proxy_1=require("./data-proxy");Object.defineProperty(exports,"proxyAccess",{enumerable:true,get:function(){return data_proxy_1.proxyAccess}});Object.defineProperty(exports,"OrderedCollectionProxy",{enumerable:true,get:function(){return data_proxy_1.OrderedCollectionProxy}});var debug_1=require("./debug");Object.defineProperty(exports,"DebugLogger",{enumerable:true,get:function(){return debug_1.DebugLogger}});var id_1=require("./id");Object.defineProperty(exports,"ID",{enumerable:true,get:function(){return id_1.ID}});var path_reference_1=require("./path-reference");Object.defineProperty(exports,"PathReference",{enumerable:true,get:function(){return path_reference_1.PathReference}});var subscription_1=require("./subscription");Object.defineProperty(exports,"EventStream",{enumerable:true,get:function(){return subscription_1.EventStream}});Object.defineProperty(exports,"EventPublisher",{enumerable:true,get:function(){return subscription_1.EventPublisher}});Object.defineProperty(exports,"EventSubscription",{enumerable:true,get:function(){return subscription_1.EventSubscription}});exports.Transport=require("./transport");var type_mappings_1=require("./type-mappings");Object.defineProperty(exports,"TypeMappings",{enumerable:true,get:function(){return type_mappings_1.TypeMappings}});exports.Utils=require("./utils");var path_info_1=require("./path-info");Object.defineProperty(exports,"PathInfo",{enumerable:true,get:function(){return path_info_1.PathInfo}});var ascii85_1=require("./ascii85");Object.defineProperty(exports,"ascii85",{enumerable:true,get:function(){return ascii85_1.ascii85}});var simple_cache_1=require("./simple-cache");Object.defineProperty(exports,"SimpleCache",{enumerable:true,get:function(){return simple_cache_1.SimpleCache}});var simple_event_emitter_1=require("./simple-event-emitter");Object.defineProperty(exports,"SimpleEventEmitter",{enumerable:true,get:function(){return simple_event_emitter_1.SimpleEventEmitter}});var simple_colors_1=require("./simple-colors");Object.defineProperty(exports,"ColorStyle",{enumerable:true,get:function(){return simple_colors_1.ColorStyle}});Object.defineProperty(exports,"Colorize",{enumerable:true,get:function(){return simple_colors_1.Colorize}});var schema_1=require("./schema");Object.defineProperty(exports,"SchemaDefinition",{enumerable:true,get:function(){return schema_1.SchemaDefinition}});var partial_array_1=require("./partial-array");Object.defineProperty(exports,"PartialArray",{enumerable:true,get:function(){return partial_array_1.PartialArray}});const object_collection_1=require("./object-collection");Object.defineProperty(exports,"ObjectCollection",{enumerable:true,get:function(){return object_collection_1.ObjectCollection}})},{"./acebase-base":1,"./api":2,"./ascii85":3,"./data-proxy":7,"./data-reference":8,"./data-snapshot":9,"./debug":10,"./id":11,"./object-collection":13,"./partial-array":15,"./path-info":16,"./path-reference":17,"./schema":19,"./simple-cache":20,"./simple-colors":21,"./simple-event-emitter":22,"./subscription":23,"./transport":24,"./type-mappings":25,"./utils":26}],13:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObjectCollection=void 0;const id_1=require("./id");class ObjectCollection{static from(array){const collection={};array.forEach((child=>{collection[id_1.ID.generate()]=child}));return collection}}exports.ObjectCollection=ObjectCollection},{"./id":11}],14:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObservableShim=exports.setObservable=exports.getObservable=void 0;let _observable;function getObservable(){if(_observable){return _observable}if(typeof window!=="undefined"&&window.Observable){_observable=window.Observable;return _observable}try{const{Observable:Observable}=require("rxjs");if(!Observable){throw new Error("not loaded")}_observable=Observable;return Observable}catch(err){throw new Error("RxJS Observable could not be loaded. If you are using a browser build, add it to AceBase using db.setObservable. For node.js builds, add it to your project with: npm i rxjs")}}exports.getObservable=getObservable;function setObservable(Observable){if(Observable==="shim"){console.warn("Using AceBase's simple Observable shim. Only use this if you know what you're doing.");Observable=ObservableShim}_observable=Observable}exports.setObservable=setObservable;class ObservableShim{constructor(create){this._active=false;this._subscribers=[];this._create=create}subscribe(subscriber){if(!this._active){const next=value=>{this._subscribers.forEach((s=>{try{s(value)}catch(err){console.error("Error in subscriber callback:",err)}}))};const observer={next:next};this._cleanup=this._create(observer);this._active=true}this._subscribers.push(subscriber);const unsubscribe=()=>{this._subscribers.splice(this._subscribers.indexOf(subscriber),1);if(this._subscribers.length===0){this._active=false;this._cleanup()}};const subscription={unsubscribe:unsubscribe};return subscription}}exports.ObservableShim=ObservableShim},{rxjs:53}],15:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.PartialArray=void 0;class PartialArray{constructor(sparseArray){if(sparseArray instanceof Array){for(let i=0;ikey.startsWith("[")?parseInt(key.slice(1,-1)):key))}class PathInfo{constructor(path){if(typeof path==="string"){this.keys=getPathKeys(path)}else if(path instanceof Array){this.keys=path}this.path=this.keys.reduce(((path,key,i)=>i===0?`${key}`:typeof key==="string"?`${path}/${key}`:`${path}[${key}]`),"")}static get(path){return new PathInfo(path)}static getChildPath(path,childKey){return PathInfo.get(path).child(childKey).path}static getPathKeys(path){return getPathKeys(path)}get key(){return this.keys.length===0?null:this.keys.slice(-1)[0]}get parent(){if(this.keys.length==0){return null}const parentKeys=this.keys.slice(0,-1);return new PathInfo(parentKeys)}get parentPath(){return this.keys.length===0?null:this.parent.path}child(childKey){if(typeof childKey==="string"){childKey=getPathKeys(childKey)}return new PathInfo(this.keys.concat(childKey))}childPath(childKey){return this.child(childKey).path}get pathKeys(){return this.keys}static extractVariables(varPath,fullPath){if(!varPath.includes("*")&&!varPath.includes("$")){return[]}const keys=getPathKeys(varPath);const pathKeys=getPathKeys(fullPath);let count=0;const variables={get length(){return count}};keys.forEach(((key,index)=>{const pathKey=pathKeys[index];if(key==="*"){variables[count++]=pathKey}else if(typeof key==="string"&&key[0]==="$"){variables[count++]=pathKey;variables[key]=pathKey;const varName=key.slice(1);if(typeof variables[varName]==="undefined"){variables[varName]=pathKey}}}));return variables}static fillVariables(varPath,fullPath){if(varPath.indexOf("*")<0&&varPath.indexOf("$")<0){return varPath}const keys=getPathKeys(varPath);const pathKeys=getPathKeys(fullPath);const merged=keys.map(((key,index)=>{if(key===pathKeys[index]||index>=pathKeys.length){return key}else if(typeof key==="string"&&(key==="*"||key[0]==="$")){return pathKeys[index]}else{throw new Error(`Path "${fullPath}" cannot be used to fill variables of path "${varPath}" because they do not match`)}}));let mergedPath="";merged.forEach((key=>{if(typeof key==="number"){mergedPath+=`[${key}]`}else{if(mergedPath.length>0){mergedPath+="/"}mergedPath+=key}}));return mergedPath}static fillVariables2(varPath,vars){if(typeof vars!=="object"||Object.keys(vars).length===0){return varPath}const pathKeys=getPathKeys(varPath);let n=0;const targetPath=pathKeys.reduce(((path,key)=>{if(typeof key==="string"&&(key==="*"||key.startsWith("$"))){return PathInfo.getChildPath(path,vars[n++])}else{return PathInfo.getChildPath(path,key)}}),"");return targetPath}equals(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path===other.path){return true}if(this.keys.length!==other.keys.length){return false}return this.keys.every(((key,index)=>{const otherKey=other.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isAncestorOf(descendantPath){const descendant=descendantPath instanceof PathInfo?descendantPath:new PathInfo(descendantPath);if(descendant.path===""||this.path===descendant.path){return false}if(this.path===""){return true}if(this.keys.length>=descendant.keys.length){return false}return this.keys.every(((key,index)=>{const otherKey=descendant.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isDescendantOf(ancestorPath){const ancestor=ancestorPath instanceof PathInfo?ancestorPath:new PathInfo(ancestorPath);if(this.path===""||this.path===ancestor.path){return false}if(ancestorPath===""){return true}if(ancestor.keys.length>=this.keys.length){return false}return ancestor.keys.every(((key,index)=>{const otherKey=this.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isOnTrailOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path.length===0||other.path.length===0){return true}if(this.path===other.path){return true}return this.pathKeys.every(((key,index)=>{if(index>=other.keys.length){return true}const otherKey=other.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isChildOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path===""){return false}return this.parent.equals(other)}isParentOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(other.path===""){return false}return this.equals(other.parent)}}exports.PathInfo=PathInfo},{}],17:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.PathReference=void 0;class PathReference{constructor(path){this.path=path}}exports.PathReference=PathReference},{}],18:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default={nextTick(fn){setTimeout(fn,0)}}},{}],19:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SchemaDefinition=void 0;function parse(definition){let pos=0;function consumeSpaces(){let c;while(c=definition[pos],[" ","\r","\n","\t"].includes(c)){pos++}}function consumeCharacter(c){if(definition[pos]!==c){throw new Error(`Unexpected character at position ${pos}. Expected: '${c}', found '${definition[pos]}'`)}pos++}function readProperty(){consumeSpaces();const prop={name:"",optional:false,wildcard:false};let c;while(c=definition[pos],c==="_"||c==="$"||c>="a"&&c<="z"||c>="A"&&c<="Z"||prop.name.length>0&&c>="0"&&c<="9"||prop.name.length===0&&c==="*"){prop.name+=c;pos++}if(prop.name.length===0){throw new Error(`Property name expected at position ${pos}, found: ${definition.slice(pos,pos+10)}..`)}if(definition[pos]==="?"){prop.optional=true;pos++}if(prop.name==="*"||prop.name[0]==="$"){prop.optional=true;prop.wildcard=true}consumeSpaces();consumeCharacter(":");return prop}function readType(){consumeSpaces();let type={typeOf:"any"},c;let name="";while(c=definition[pos],c>="a"&&c<="z"||c>="A"&&c<="Z"){name+=c;pos++}if(name.length===0){if(definition[pos]==="*"){consumeCharacter("*");type.typeOf="any"}else if(["'",'"',"`"].includes(definition[pos])){type.typeOf="string";type.value="";const quote=definition[pos];consumeCharacter(quote);while(c=definition[pos],c&&c!==quote){type.value+=c;pos++}consumeCharacter(quote)}else if(definition[pos]>="0"&&definition[pos]<="9"){type.typeOf="number";let nr="";while(c=definition[pos],c==="."||c==="n"||c>="0"&&c<="9"){nr+=c;pos++}if(nr.endsWith("n")){type.value=BigInt(nr)}else if(nr.includes(".")){type.value=parseFloat(nr)}else{type.value=parseInt(nr)}}else if(definition[pos]==="{"){consumeCharacter("{");type.typeOf="object";type.instanceOf=Object;type.children=[];while(true){const prop=readProperty();const types=readTypes();type.children.push({name:prop.name,optional:prop.optional,wildcard:prop.wildcard,types:types});consumeSpaces();if(definition[pos]==="}"){break}consumeCharacter(",")}consumeCharacter("}")}else if(definition[pos]==="/"){consumeCharacter("/");let pattern="",flags="";while(c=definition[pos],c!=="/"||pattern.endsWith("\\")){pattern+=c;pos++}consumeCharacter("/");while(c=definition[pos],["g","i","m","s","u","y","d"].includes(c)){flags+=c;pos++}type.typeOf="string";type.matches=new RegExp(pattern,flags)}else{throw new Error(`Expected a type definition at position ${pos}, found character '${definition[pos]}'`)}}else if(["string","number","boolean","bigint","undefined","String","Number","Boolean","BigInt"].includes(name)){type.typeOf=name.toLowerCase()}else if(name==="Object"||name==="object"){type.typeOf="object";type.instanceOf=Object}else if(name==="Date"){type.typeOf="object";type.instanceOf=Date}else if(name==="Binary"||name==="binary"){type.typeOf="object";type.instanceOf=ArrayBuffer}else if(name==="any"){type.typeOf="any"}else if(name==="null"){type.typeOf="object";type.value=null}else if(name==="Array"){consumeCharacter("<");type.typeOf="object";type.instanceOf=Array;type.genericTypes=readTypes();consumeCharacter(">")}else if(["true","false"].includes(name)){type.typeOf="boolean";type.value=name==="true"}else{throw new Error(`Unknown type at position ${pos}: "${type}"`)}consumeSpaces();while(definition[pos]==="["){consumeCharacter("[");consumeCharacter("]");type={typeOf:"object",instanceOf:Array,genericTypes:[type]}}return type}function readTypes(){consumeSpaces();const types=[readType()];while(definition[pos]==="|"){consumeCharacter("|");types.push(readType());consumeSpaces()}return types}return readType()}function checkObject(path,properties,obj,partial){const invalidProperties=properties.find((prop=>prop.name==="*"||prop.name[0]==="$"))?[]:Object.keys(obj).filter((key=>![null,undefined].includes(obj[key])&&!properties.find((prop=>prop.name===key))));if(invalidProperties.length>0){return{ok:false,reason:`Object at path "${path}" cannot have propert${invalidProperties.length===1?"y":"ies"} ${invalidProperties.map((p=>`"${p}"`)).join(", ")}`}}function checkProperty(property){const hasValue=![null,undefined].includes(obj[property.name]);if(!property.optional&&(partial?obj[property.name]===null:!hasValue)){return{ok:false,reason:`Property at path "${path}/${property.name}" is not optional`}}if(hasValue&&property.types.length===1){return checkType(`${path}/${property.name}`,property.types[0],obj[property.name],false)}if(hasValue&&!property.types.some((type=>checkType(`${path}/${property.name}`,type,obj[property.name],false).ok))){return{ok:false,reason:`Property at path "${path}/${property.name}" does not match any of ${property.types.length} allowed types`}}return{ok:true}}const namedProperties=properties.filter((prop=>!prop.wildcard));const failedProperty=namedProperties.find((prop=>!checkProperty(prop).ok));if(failedProperty){const reason=checkProperty(failedProperty).reason;return{ok:false,reason:reason}}const wildcardProperty=properties.find((prop=>prop.wildcard));if(!wildcardProperty){return{ok:true}}const wildcardChildKeys=Object.keys(obj).filter((key=>!namedProperties.find((prop=>prop.name===key))));let result={ok:true};for(let i=0;i0){if(type.typeOf!=="object"){return{ok:false,reason:`path "${path}" must be typeof ${type.typeOf}`}}if(!type.children){return ok}const childKey=trailKeys[0];let property=type.children.find((prop=>prop.name===childKey));if(!property){property=type.children.find((prop=>prop.name==="*"||prop.name[0]==="$"))}if(!property){return{ok:false,reason:`Object at path "${path}" cannot have property "${childKey}"`}}if(property.optional&&value===null&&trailKeys.length===1){return ok}let result;property.types.some((type=>{const childPath=typeof childKey==="number"?`${path}[${childKey}]`:`${path}/${childKey}`;result=checkType(childPath,type,value,partial,trailKeys.slice(1));return result.ok}));return result}if(value===null){return ok}if(type.instanceOf===Object&&(typeof value!=="object"||value instanceof Array||value instanceof Date)){return{ok:false,reason:`path "${path}" must be an object collection`}}if(type.instanceOf&&(typeof value!=="object"||value.constructor!==type.instanceOf)){return{ok:false,reason:`path "${path}" must be an instance of ${type.instanceOf.name}`}}if("value"in type&&value!==type.value){return{ok:false,reason:`path "${path}" must be value: ${type.value}`}}if(typeof value!==type.typeOf){return{ok:false,reason:`path "${path}" must be typeof ${type.typeOf}`}}if(type.instanceOf===Array&&type.genericTypes&&!value.every((v=>type.genericTypes.some((t=>checkType(path,t,v,false).ok))))){return{ok:false,reason:`every array value of path "${path}" must match one of the specified types`}}if(type.typeOf==="object"&&type.children){return checkObject(path,type.children,value,partial)}if(type.matches&&!type.matches.test(value)){return{ok:false,reason:`path "${path}" must match regular expression /${type.matches.source}/${type.matches.flags}`}}return ok}function getConstructorType(val){switch(val){case String:return"string";case Number:return"number";case Boolean:return"boolean";case Date:return"Date";case BigInt:return"bigint";case Array:throw new Error("Schema error: Array cannot be used without a type. Use string[] or Array instead");default:throw new Error(`Schema error: unknown type used: ${val.name}`)}}class SchemaDefinition{constructor(definition){this.source=definition;if(typeof definition==="object"){const toTS=obj=>"{"+Object.keys(obj).map((key=>{let val=obj[key];if(val===undefined){val="undefined"}else if(val instanceof RegExp){val=`/${val.source}/${val.flags}`}else if(typeof val==="object"){val=toTS(val)}else if(typeof val==="function"){val=getConstructorType(val)}else if(!["string","number","boolean","bigint"].includes(typeof val)){throw new Error(`Type definition for key "${key}" must be a string, number, boolean, bigint, object, regular expression, or one of these classes: String, Number, Boolean, Date, BigInt`)}return`${key}:${val}`})).join(",")+"}";this.text=toTS(definition)}else if(typeof definition==="string"){this.text=definition}else{throw new Error("Type definiton must be a string or an object")}this.type=parse(this.text)}check(path,value,partial,trailKeys){return checkType(path,this.type,value,partial,trailKeys)}}exports.SchemaDefinition=SchemaDefinition},{}],20:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SimpleCache=void 0;const utils_1=require("./utils");const calculateExpiryTime=expirySeconds=>expirySeconds>0?Date.now()+expirySeconds*1e3:Infinity;class SimpleCache{constructor(options){var _a;this.enabled=true;if(typeof options==="number"){options={expirySeconds:options}}options.cloneValues=options.cloneValues!==false;if(typeof options.expirySeconds!=="number"&&typeof options.maxEntries!=="number"){throw new Error("Either expirySeconds or maxEntries must be specified")}this.options=options;this.cache=new Map;const interval=setInterval((()=>{this.cleanUp()}),60*1e3);(_a=interval.unref)===null||_a===void 0?void 0:_a.call(interval)}get size(){return this.cache.size}has(key){if(!this.enabled){return false}return this.cache.has(key)}get(key){if(!this.enabled){return null}const entry=this.cache.get(key);if(!entry){return null}entry.expires=calculateExpiryTime(this.options.expirySeconds);entry.accessed=Date.now();return this.options.cloneValues?(0,utils_1.cloneObject)(entry.value):entry.value}set(key,value){if(this.options.maxEntries>0&&this.cache.size>=this.options.maxEntries&&!this.cache.has(key)){let oldest=null;const now=Date.now();for(const[key,entry]of this.cache.entries()){if(entry.expires<=now){this.cache.delete(key);oldest=null;break}if(!oldest||entry.accessed{if(entry.expires<=now){this.cache.delete(key)}}))}}exports.SimpleCache=SimpleCache},{"./utils":26}],21:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Colorize=exports.SetColorsEnabled=exports.ColorsSupported=exports.ColorStyle=void 0;const process_1=require("./process");const FontCode={bold:1,dim:2,italic:3,underline:4,inverse:7,hidden:8,strikethrough:94};const ColorCode={black:30,red:31,green:32,yellow:33,blue:34,magenta:35,cyan:36,white:37,grey:90,brightRed:91};const BgColorCode={bgBlack:40,bgRed:41,bgGreen:42,bgYellow:43,bgBlue:44,bgMagenta:45,bgCyan:46,bgWhite:47,bgGrey:100,bgBrightRed:101};const ResetCode={all:0,color:39,background:49,bold:22,dim:22,italic:23,underline:24,inverse:27,hidden:28,strikethrough:29};var ColorStyle;(function(ColorStyle){ColorStyle["reset"]="reset";ColorStyle["bold"]="bold";ColorStyle["dim"]="dim";ColorStyle["italic"]="italic";ColorStyle["underline"]="underline";ColorStyle["inverse"]="inverse";ColorStyle["hidden"]="hidden";ColorStyle["strikethrough"]="strikethrough";ColorStyle["black"]="black";ColorStyle["red"]="red";ColorStyle["green"]="green";ColorStyle["yellow"]="yellow";ColorStyle["blue"]="blue";ColorStyle["magenta"]="magenta";ColorStyle["cyan"]="cyan";ColorStyle["grey"]="grey";ColorStyle["bgBlack"]="bgBlack";ColorStyle["bgRed"]="bgRed";ColorStyle["bgGreen"]="bgGreen";ColorStyle["bgYellow"]="bgYellow";ColorStyle["bgBlue"]="bgBlue";ColorStyle["bgMagenta"]="bgMagenta";ColorStyle["bgCyan"]="bgCyan";ColorStyle["bgWhite"]="bgWhite";ColorStyle["bgGrey"]="bgGrey"})(ColorStyle=exports.ColorStyle||(exports.ColorStyle={}));function ColorsSupported(){if(typeof process_1.default==="undefined"||!process_1.default.stdout||!process_1.default.env||!process_1.default.platform||process_1.default.platform==="browser"){return false}if(process_1.default.platform==="win32"){return true}const env=process_1.default.env;if(env.COLORTERM){return true}if(env.TERM==="dumb"){return false}if(env.CI||env.TEAMCITY_VERSION){return!!env.TRAVIS}if(["iTerm.app","HyperTerm","Hyper","MacTerm","Apple_Terminal","vscode"].includes(env.TERM_PROGRAM)){return true}if(/^xterm-256|^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(env.TERM)){return true}return false}exports.ColorsSupported=ColorsSupported;let _enabled=ColorsSupported();function SetColorsEnabled(enabled){_enabled=ColorsSupported()&&enabled}exports.SetColorsEnabled=SetColorsEnabled;function Colorize(str,style){if(!_enabled){return str}const openCodes=[],closeCodes=[];const addStyle=style=>{if(style===ColorStyle.reset){openCodes.push(ResetCode.all)}else if(style in FontCode){openCodes.push(FontCode[style]);closeCodes.push(ResetCode[style])}else if(style in ColorCode){openCodes.push(ColorCode[style]);closeCodes.push(ResetCode.color)}else if(style in BgColorCode){openCodes.push(BgColorCode[style]);closeCodes.push(ResetCode.background)}};if(style instanceof Array){style.forEach(addStyle)}else{addStyle(style)}const open=openCodes.map((code=>"["+code+"m")).join("");const close=closeCodes.map((code=>"["+code+"m")).join("");return str.split("\n").map((line=>open+line+close)).join("\n")}exports.Colorize=Colorize;String.prototype.colorize=function(style){return Colorize(this,style)}},{"./process":18}],22:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SimpleEventEmitter=void 0;function runCallback(callback,data){try{callback(data)}catch(err){console.error("Error in subscription callback",err)}}class SimpleEventEmitter{constructor(){this._subscriptions=[];this._oneTimeEvents=new Map}on(event,callback){if(this._oneTimeEvents.has(event)){return runCallback(callback,this._oneTimeEvents.get(event))}this._subscriptions.push({event:event,callback:callback,once:false});return this}off(event,callback){this._subscriptions=this._subscriptions.filter((s=>s.event!==event||callback&&s.callback!==callback));return this}once(event,callback){return new Promise((resolve=>{const ourCallback=data=>{resolve(data);callback===null||callback===void 0?void 0:callback(data)};if(this._oneTimeEvents.has(event)){runCallback(ourCallback,this._oneTimeEvents.get(event))}else{this._subscriptions.push({event:event,callback:ourCallback,once:true})}}))}emit(event,data){if(this._oneTimeEvents.has(event)){throw new Error(`Event "${event}" was supposed to be emitted only once`)}for(let i=0;i{if(this._internal.state==="active"){return resolve()}else if(this._internal.state==="canceled"&&!callback){return reject(new Error(this._internal.cancelReason))}const noop=()=>{};this._internal.activatePromises.push({resolve:resolve,reject:callback?noop:reject})}))}_setActivationState(activated,cancelReason){this._internal.cancelReason=cancelReason;this._internal.state=activated?"active":"canceled";while(this._internal.activatePromises.length>0){const p=this._internal.activatePromises.shift();if(activated){p.callback&&p.callback(true);p.resolve&&p.resolve()}else{p.callback&&p.callback(false,cancelReason);p.reject&&p.reject(cancelReason)}}}}exports.EventSubscription=EventSubscription;class EventPublisher{constructor(publish,start,cancel){this.publish=publish;this.start=start;this.cancel=cancel}}exports.EventPublisher=EventPublisher;class EventStream{constructor(eventPublisherCallback){const subscribers=[];let noMoreSubscribersCallback;let activationState;const _stoppedState="stopped (no more subscribers)";this.subscribe=(callback,activationCallback)=>{if(typeof callback!=="function"){throw new TypeError("callback must be a function")}else if(activationState===_stoppedState){throw new Error("stream can't be used anymore because all subscribers were stopped")}const sub={callback:callback,activationCallback:function(activated,cancelReason){activationCallback===null||activationCallback===void 0?void 0:activationCallback(activated,cancelReason);this.subscription._setActivationState(activated,cancelReason)},subscription:new EventSubscription((function stop(){subscribers.splice(subscribers.indexOf(this),1);return checkActiveSubscribers()}))};subscribers.push(sub);if(typeof activationState!=="undefined"){if(activationState===true){activationCallback===null||activationCallback===void 0?void 0:activationCallback(true);sub.subscription._setActivationState(true)}else if(typeof activationState==="string"){activationCallback===null||activationCallback===void 0?void 0:activationCallback(false,activationState);sub.subscription._setActivationState(false,activationState)}}return sub.subscription};const checkActiveSubscribers=()=>{let ret;if(subscribers.length===0){ret=noMoreSubscribersCallback===null||noMoreSubscribersCallback===void 0?void 0:noMoreSubscribersCallback();activationState=_stoppedState}return Promise.resolve(ret)};this.unsubscribe=callback=>{const remove=callback?subscribers.filter((sub=>sub.callback===callback)):subscribers;remove.forEach((sub=>{const i=subscribers.indexOf(sub);subscribers.splice(i,1)}));checkActiveSubscribers()};this.stop=()=>{subscribers.splice(0);checkActiveSubscribers()};const publish=val=>{subscribers.forEach((sub=>{try{sub.callback(val)}catch(err){console.error(`Error running subscriber callback: ${err.message}`)}}));if(subscribers.length===0){checkActiveSubscribers()}return subscribers.length>0};const start=allSubscriptionsStoppedCallback=>{activationState=true;noMoreSubscribersCallback=allSubscriptionsStoppedCallback;subscribers.forEach((sub=>{var _a;(_a=sub.activationCallback)===null||_a===void 0?void 0:_a.call(sub,true)}))};const cancel=reason=>{activationState=reason;subscribers.forEach((sub=>{var _a;(_a=sub.activationCallback)===null||_a===void 0?void 0:_a.call(sub,false,reason||new Error("unknown reason"))}));subscribers.splice(0)};const publisher=new EventPublisher(publish,start,cancel);eventPublisherCallback(publisher)}}exports.EventStream=EventStream},{}],24:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.deserialize2=exports.serialize2=exports.serialize=exports.detectSerializeVersion=exports.deserialize=void 0;const path_reference_1=require("./path-reference");const utils_1=require("./utils");const ascii85_1=require("./ascii85");const path_info_1=require("./path-info");const partial_array_1=require("./partial-array");const deserialize=data=>{if(data.map===null||typeof data.map==="undefined"){if(typeof data.val==="undefined"){throw new Error("serialized value must have a val property")}return data.val}const deserializeValue=(type,val)=>{if(type==="date"){return new Date(val)}else if(type==="binary"){return ascii85_1.ascii85.decode(val)}else if(type==="reference"){return new path_reference_1.PathReference(val)}else if(type==="regexp"){return new RegExp(val.pattern,val.flags)}else if(type==="array"){return new partial_array_1.PartialArray(val)}else if(type==="bigint"){return BigInt(val)}return val};if(typeof data.map==="string"){return deserializeValue(data.map,data.val)}Object.keys(data.map).forEach((path=>{const type=data.map[path];const keys=path_info_1.PathInfo.getPathKeys(path);let parent=data;let key="val";let val=data.val;keys.forEach((k=>{key=k;parent=val;val=val[key]}));parent[key]=deserializeValue(type,val)}));return data.val};exports.deserialize=deserialize;const detectSerializeVersion=data=>{if(typeof data!=="object"||data===null){return 2}if("map"in data&&"val"in data){return 1}else if("val"in data){if(Object.keys(data).length>1){return 2}return 1}return 2};exports.detectSerializeVersion=detectSerializeVersion;const serialize=obj=>{var _a;if(obj===null||typeof obj!=="object"||obj instanceof Date||obj instanceof ArrayBuffer||obj instanceof path_reference_1.PathReference||obj instanceof RegExp){const ser=(0,exports.serialize)({value:obj});return{map:(_a=ser.map)===null||_a===void 0?void 0:_a.value,val:ser.val.value}}obj=(0,utils_1.cloneObject)(obj);const process=(obj,mappings,prefix)=>{if(obj instanceof partial_array_1.PartialArray){mappings[prefix]="array"}Object.keys(obj).forEach((key=>{const val=obj[key];const path=prefix.length===0?key:`${prefix}/${key}`;if(typeof val==="bigint"){obj[key]=val.toString();mappings[path]="bigint"}else if(val instanceof Date){obj[key]=val.toISOString();mappings[path]="date"}else if(val instanceof ArrayBuffer){obj[key]=ascii85_1.ascii85.encode(val);mappings[path]="binary"}else if(val instanceof path_reference_1.PathReference){obj[key]=val.path;mappings[path]="reference"}else if(val instanceof RegExp){obj[key]={pattern:val.source,flags:val.flags};mappings[path]="regexp"}else if(typeof val==="object"&&val!==null){process(val,mappings,path)}}))};const mappings={};process(obj,mappings,"");const serialized={val:obj};if(Object.keys(mappings).length>0){serialized.map=mappings}return serialized};exports.serialize=serialize;const serialize2=obj=>{const getSerializedValue=val=>{if(typeof val==="bigint"){return{".type":"bigint",".val":val.toString()}}else if(val instanceof Date){return{".type":"date",".val":val.toISOString()}}else if(val instanceof ArrayBuffer){return{".type":"binary",".val":ascii85_1.ascii85.encode(val)}}else if(val instanceof path_reference_1.PathReference){return{".type":"reference",".val":val.path}}else if(val instanceof RegExp){return{".type":"regexp",".val":`/${val.source}/${val.flags}`}}else if(typeof val==="object"&&val!==null){if(val instanceof Array){const copy=[];for(let i=0;i{if(typeof data!=="object"||data===null){return data}if(typeof data[".type"]==="undefined"){if(data instanceof Array){const copy=[];const arr=data;for(let i=0;i{const mkeys=path_info_1.PathInfo.getPathKeys(mpath);if(mkeys.length!==keys.length){return false}return mkeys.every(((mkey,index)=>{if(mkey==="*"||typeof mkey==="string"&&mkey[0]==="$"){return true}return mkey===keys[index]}))}));const mapping=mappings[mappedPath];return mapping}function map(mappings,path){const targetPath=path_info_1.PathInfo.get(path).parentPath;if(targetPath===null){return}return get(mappings,targetPath)}function mapDeep(mappings,entryPath){entryPath=entryPath.replace(/^\/|\/$/g,"");const pathInfo=path_info_1.PathInfo.get(entryPath);const startPath=pathInfo.parentPath;const keys=startPath?path_info_1.PathInfo.getPathKeys(startPath):[];const matches=Object.keys(mappings).reduce(((m,mpath)=>{const mkeys=path_info_1.PathInfo.getPathKeys(mpath);if(mkeys.length{if(index>=keys.length){return false}else if(mkey==="*"||typeof mkey==="string"&&mkey[0]==="$"||mkey===keys[index]){return true}else{isMatch=false;return false}}))}if(isMatch){const mapping=mappings[mpath];m.push({path:mpath,type:mapping})}return m}),[]);return matches}function process(db,mappings,path,obj,action){if(obj===null||typeof obj!=="object"){return obj}const keys=path_info_1.PathInfo.getPathKeys(path);const m=mapDeep(mappings,path);const changes=[];m.sort(((a,b)=>path_info_1.PathInfo.getPathKeys(a.path).length>path_info_1.PathInfo.getPathKeys(b.path).length?-1:1));m.forEach((mapping=>{const mkeys=path_info_1.PathInfo.getPathKeys(mapping.path);mkeys.push("*");const mTrailKeys=mkeys.slice(keys.length);if(mTrailKeys.length===0){const vars=path_info_1.PathInfo.extractVariables(mapping.path,path);const ref=new data_reference_1.DataReference(db,path,vars);if(action==="serialize"){obj=mapping.type.serialize(obj,ref)}else if(action==="deserialize"){const snap=new data_snapshot_1.DataSnapshot(ref,obj);obj=mapping.type.deserialize(snap)}return}const process=(parentPath,parent,keys)=>{if(obj===null||typeof obj!=="object"){return obj}const key=keys[0];let children=[];if(key==="*"||typeof key==="string"&&key[0]==="$"){if(parent instanceof Array){children=parent.map(((val,index)=>({key:index,val:val})))}else{children=Object.keys(parent).map((k=>({key:k,val:parent[k]})))}}else{const child=parent[key];if(typeof child==="object"){children.push({key:key,val:child})}}children.forEach((child=>{const childPath=path_info_1.PathInfo.getChildPath(parentPath,child.key);const vars=path_info_1.PathInfo.extractVariables(mapping.path,childPath);const ref=new data_reference_1.DataReference(db,childPath,vars);if(keys.length===1){if(action==="serialize"){changes.push({parent:parent,key:child.key,original:parent[child.key]});parent[child.key]=mapping.type.serialize(child.val,ref)}else if(action==="deserialize"){const snap=new data_snapshot_1.DataSnapshot(ref,child.val);parent[child.key]=mapping.type.deserialize(snap)}}else{process(childPath,child.val,keys.slice(1))}}))};process(path,obj,mTrailKeys)}));if(action==="serialize"){obj=(0,utils_1.cloneObject)(obj);if(changes.length>0){changes.forEach((change=>{change.parent[change.key]=change.original}))}}return obj}const _mappings=Symbol("mappings");class TypeMappings{constructor(db){this.db=db;this[_mappings]={}}get mappings(){return this[_mappings]}map(path){return map(this[_mappings],path)}bind(path,type,options={}){if(typeof path!=="string"){throw new TypeError("path must be a string")}if(typeof type!=="function"){throw new TypeError("constructor must be a function")}if(typeof options.serializer==="undefined"){}else if(typeof options.serializer==="string"){if(typeof type.prototype[options.serializer]==="function"){options.serializer=type.prototype[options.serializer]}else{throw new TypeError(`${type.name}.prototype.${options.serializer} is not a function, cannot use it as serializer`)}}else if(typeof options.serializer!=="function"){throw new TypeError(`serializer for class ${type.name} must be a function, or the name of a prototype method`)}if(typeof options.creator==="undefined"){if(typeof type.create==="function"){options.creator=type.create}}else if(typeof options.creator==="string"){if(typeof type[options.creator]==="function"){options.creator=type[options.creator]}else{throw new TypeError(`${type.name}.${options.creator} is not a function, cannot use it as creator`)}}else if(typeof options.creator!=="function"){throw new TypeError(`creator for class ${type.name} must be a function, or the name of a static method`)}path=path.replace(/^\/|\/$/g,"");this[_mappings][path]={db:this.db,type:type,creator:options.creator,serializer:options.serializer,deserialize(snap){let obj;if(this.creator){obj=this.creator.call(this.type,snap)}else{obj=new this.type(snap)}return obj},serialize(obj,ref){if(this.serializer){obj=this.serializer.call(obj,ref,obj)}else if(obj&&typeof obj.serialize==="function"){obj=obj.serialize(ref,obj)}return obj}}}serialize(path,obj){return process(this.db,this[_mappings],path,obj,"serialize")}deserialize(path,obj){return process(this.db,this[_mappings],path,obj,"deserialize")}}exports.TypeMappings=TypeMappings},{"./data-reference":8,"./data-snapshot":9,"./path-info":16,"./utils":26}],26:[function(require,module,exports){(function(Buffer){(function(){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.defer=exports.getChildValues=exports.getMutations=exports.compareValues=exports.ObjectDifferences=exports.valuesAreEqual=exports.cloneObject=exports.concatTypedArrays=exports.decodeString=exports.encodeString=exports.bytesToBigint=exports.bigintToBytes=exports.bytesToNumber=exports.numberToBytes=void 0;const path_reference_1=require("./path-reference");const process_1=require("./process");const partial_array_1=require("./partial-array");function numberToBytes(number){const bytes=new Uint8Array(8);const view=new DataView(bytes.buffer);view.setFloat64(0,number);return new Array(...bytes)}exports.numberToBytes=numberToBytes;function bytesToNumber(bytes){const length=Array.isArray(bytes)?bytes.length:bytes.byteLength;if(length!==8){throw new TypeError("must be 8 bytes")}const bin=new Uint8Array(bytes);const view=new DataView(bin.buffer);const nr=view.getFloat64(0);return nr}exports.bytesToNumber=bytesToNumber;const big={zero:BigInt(0),one:BigInt(1),two:BigInt(2),eight:BigInt(8),ff:BigInt(255)};function bigintToBytes(number){if(typeof number!=="bigint"){throw new Error("number must be a bigint")}const bytes=[];const negative=number>big.eight}while(number!==(negative?-big.one:big.zero));bytes.reverse();if(negative?bytes[0]<128:bytes[0]>=128){bytes.unshift(negative?255:0)}return bytes}exports.bigintToBytes=bigintToBytes;function bytesToBigint(bytes){const negative=bytes[0]>=128;let number=big.zero;for(let b of bytes){if(negative){b=~b&255}number=(number<128){if((code&55296)===55296){const nextCode=str.charCodeAt(i+1);if((nextCode&56320)!==56320){throw new Error("follow-up utf-16 character does not start with 0xDC00")}i++;const p1=code&1023;const p2=nextCode&1023;code=65536|p1<<10|p2}if(code<2048){const b1=192|code>>6&31;const b2=128|code&63;arr.push(b1,b2)}else if(code<65536){const b1=224|code>>12&15;const b2=128|code>>6&63;const b3=128|code&63;arr.push(b1,b2,b3)}else if(code<2097152){const b1=240|code>>18&7;const b2=128|code>>12&63;const b3=128|code>>6&63;const b4=128|code&63;arr.push(b1,b2,b3,b4)}else{throw new Error(`Cannot convert character ${str.charAt(i)} (code ${code}) to utf-8`)}}else{arr.push(code<128?code:63)}}return new Uint8Array(arr)}}exports.encodeString=encodeString;function decodeString(buffer){if(typeof TextDecoder!=="undefined"){const decoder=new TextDecoder;if(buffer instanceof Uint8Array){return decoder.decode(buffer)}const buf=Uint8Array.from(buffer);return decoder.decode(buf)}else if(typeof Buffer==="function"){if(buffer instanceof Array){buffer=Uint8Array.from(buffer)}if(!(buffer instanceof Buffer)&&"buffer"in buffer&&buffer.buffer instanceof ArrayBuffer){const typedArray=buffer;buffer=Buffer.from(typedArray.buffer,typedArray.byteOffset,typedArray.byteLength)}if(!(buffer instanceof Buffer)){throw new Error("Unsupported buffer argument")}return buffer.toString("utf-8")}else{if(!(buffer instanceof Uint8Array)&&"buffer"in buffer&&buffer["buffer"]instanceof ArrayBuffer){const typedArray=buffer;buffer=new Uint8Array(typedArray.buffer,typedArray.byteOffset,typedArray.byteLength)}if(buffer instanceof Buffer||buffer instanceof Array||buffer instanceof Uint8Array){let str="";for(let i=0;i128){if((code&240)===240){const b1=code,b2=buffer[i+1],b3=buffer[i+2],b4=buffer[i+3];code=(b1&7)<<18|(b2&63)<<12|(b3&63)<<6|b4&63;i+=3}else if((code&224)===224){const b1=code,b2=buffer[i+1],b3=buffer[i+2];code=(b1&15)<<12|(b2&63)<<6|b3&63;i+=2}else if((code&192)===192){const b1=code,b2=buffer[i+1];code=(b1&31)<<6|b2&63;i++}else{throw new Error("invalid utf-8 data")}}if(code>=65536){code^=65536;const p1=55296|code>>10;const p2=56320|code&1023;str+=String.fromCharCode(p1);str+=String.fromCharCode(p2)}else{str+=String.fromCharCode(code)}}return str}else{throw new Error("Unsupported buffer argument")}}}exports.decodeString=decodeString;function concatTypedArrays(a,b){const c=new a.constructor(a.length+b.length);c.set(a);c.set(b,a.length);return c}exports.concatTypedArrays=concatTypedArrays;function cloneObject(original,stack){var _a;if(((_a=original===null||original===void 0?void 0:original.constructor)===null||_a===void 0?void 0:_a.name)==="DataSnapshot"){throw new TypeError(`Object to clone is a DataSnapshot (path "${original.ref.path}")`)}const checkAndFixTypedArray=obj=>{if(obj!==null&&typeof obj==="object"&&typeof obj.constructor==="function"&&typeof obj.constructor.name==="string"&&["Buffer","Uint8Array","Int8Array","Uint16Array","Int16Array","Uint32Array","Int32Array","BigUint64Array","BigInt64Array"].includes(obj.constructor.name)){obj=obj.buffer.slice(obj.byteOffset,obj.byteOffset+obj.byteLength)}return obj};original=checkAndFixTypedArray(original);if(typeof original!=="object"||original===null||original instanceof Date||original instanceof ArrayBuffer||original instanceof path_reference_1.PathReference||original instanceof RegExp){return original}const cloneValue=val=>{if(stack.indexOf(val)>=0){throw new ReferenceError("object contains a circular reference")}val=checkAndFixTypedArray(val);if(val===null||val instanceof Date||val instanceof ArrayBuffer||val instanceof path_reference_1.PathReference||val instanceof RegExp){return val}else if(typeof val==="object"){stack.push(val);val=cloneObject(val,stack);stack.pop();return val}else{return val}};if(typeof stack==="undefined"){stack=[original]}const clone=original instanceof Array?[]:original instanceof partial_array_1.PartialArray?new partial_array_1.PartialArray:{};Object.keys(original).forEach((key=>{const val=original[key];if(typeof val==="function"){return}clone[key]=cloneValue(val)}));return clone}exports.cloneObject=cloneObject;const isTypedArray=val=>typeof val==="object"&&["ArrayBuffer","Buffer","Uint8Array","Uint16Array","Uint32Array","Int8Array","Int16Array","Int32Array"].includes(val.constructor.name);function valuesAreEqual(val1,val2){if(val1===val2){return true}if(typeof val1!==typeof val2){return false}if(typeof val1==="object"||typeof val2==="object"){if(val1===null||val2===null){return false}if(val1 instanceof path_reference_1.PathReference||val2 instanceof path_reference_1.PathReference){return val1 instanceof path_reference_1.PathReference&&val2 instanceof path_reference_1.PathReference&&val1.path===val2.path}if(val1 instanceof Date||val2 instanceof Date){return val1 instanceof Date&&val2 instanceof Date&&val1.getTime()===val2.getTime()}if(val1 instanceof Array||val2 instanceof Array){return val1 instanceof Array&&val2 instanceof Array&&val1.length===val2.length&&val1.every(((item,i)=>valuesAreEqual(val1[i],val2[i])))}if(isTypedArray(val1)||isTypedArray(val2)){if(!isTypedArray(val1)||!isTypedArray(val2)||val1.byteLength===val2.byteLength){return false}const typed1=val1 instanceof ArrayBuffer?new Uint8Array(val1):new Uint8Array(val1.buffer,val1.byteOffset,val1.byteLength),typed2=val2 instanceof ArrayBuffer?new Uint8Array(val2):new Uint8Array(val2.buffer,val2.byteOffset,val2.byteLength);return typed1.every(((val,i)=>typed2[i]===val))}const keys1=Object.keys(val1),keys2=Object.keys(val2);return keys1.length===keys2.length&&keys1.every((key=>keys2.includes(key)))&&keys1.every((key=>valuesAreEqual(val1[key],val2[key])))}return false}exports.valuesAreEqual=valuesAreEqual;class ObjectDifferences{constructor(added,removed,changed){this.added=added;this.removed=removed;this.changed=changed}forChild(key){if(this.added.includes(key)){return"added"}if(this.removed.includes(key)){return"removed"}const changed=this.changed.find((ch=>ch.key===key));return changed?changed.change:"identical"}}exports.ObjectDifferences=ObjectDifferences;function compareValues(oldVal,newVal,sortedResults=false){const voids=[undefined,null];if(oldVal===newVal){return"identical"}else if(voids.indexOf(oldVal)>=0&&voids.indexOf(newVal)<0){return"added"}else if(voids.indexOf(oldVal)<0&&voids.indexOf(newVal)>=0){return"removed"}else if(typeof oldVal!==typeof newVal){return"changed"}else if(isTypedArray(oldVal)||isTypedArray(newVal)){if(!isTypedArray(oldVal)||!isTypedArray(newVal)){return"changed"}const typed1=oldVal instanceof Uint8Array?oldVal:oldVal instanceof ArrayBuffer?new Uint8Array(oldVal):new Uint8Array(oldVal.buffer,oldVal.byteOffset,oldVal.byteLength);const typed2=newVal instanceof Uint8Array?newVal:newVal instanceof ArrayBuffer?new Uint8Array(newVal):new Uint8Array(newVal.buffer,newVal.byteOffset,newVal.byteLength);return typed1.byteLength===typed2.byteLength&&typed1.every(((val,i)=>typed2[i]===val))?"identical":"changed"}else if(oldVal instanceof Date||newVal instanceof Date){return oldVal instanceof Date&&newVal instanceof Date&&oldVal.getTime()===newVal.getTime()?"identical":"changed"}else if(oldVal instanceof path_reference_1.PathReference||newVal instanceof path_reference_1.PathReference){return oldVal instanceof path_reference_1.PathReference&&newVal instanceof path_reference_1.PathReference&&oldVal.path===newVal.path?"identical":"changed"}else if(typeof oldVal==="object"){const isArray=oldVal instanceof Array;const getKeys=obj=>{let keys=Object.keys(obj).filter((key=>!voids.includes(obj[key])));if(isArray){keys=keys.map((v=>parseInt(v)))}return keys};const oldKeys=getKeys(oldVal);const newKeys=getKeys(newVal);const removedKeys=oldKeys.filter((key=>!newKeys.includes(key)));const addedKeys=newKeys.filter((key=>!oldKeys.includes(key)));const changedKeys=newKeys.reduce(((changed,key)=>{if(oldKeys.includes(key)){const val1=oldVal[key];const val2=newVal[key];const c=compareValues(val1,val2);if(c!=="identical"){changed.push({key:key,change:c})}}return changed}),[]);if(addedKeys.length===0&&removedKeys.length===0&&changedKeys.length===0){return"identical"}else{return new ObjectDifferences(addedKeys,removedKeys,sortedResults?changedKeys.sort(((a,b)=>a.key{switch(compareResult){case"identical":return[];case"changed":return[{target:target,prev:prev,val:val}];case"added":return[{target:target,prev:null,val:val}];case"removed":return[{target:target,prev:prev,val:null}];default:{let changes=[];compareResult.added.forEach((key=>changes.push({target:target.concat(key),prev:null,val:val[key]})));compareResult.removed.forEach((key=>changes.push({target:target.concat(key),prev:prev[key],val:null})));compareResult.changed.forEach((item=>{const childChanges=process(target.concat(item.key),item.change,prev[item.key],val[item.key]);changes=changes.concat(childChanges)}));return changes}}};const compareResult=compareValues(oldVal,newVal,sortedResults);return process([],compareResult,oldVal,newVal)}exports.getMutations=getMutations;function getChildValues(childKey,oldValue,newValue){oldValue=oldValue===null?null:oldValue[childKey];if(typeof oldValue==="undefined"){oldValue=null}newValue=newValue===null?null:newValue[childKey];if(typeof newValue==="undefined"){newValue=null}return{oldValue:oldValue,newValue:newValue}}exports.getChildValues=getChildValues;function defer(fn){process_1.default.nextTick(fn)}exports.defer=defer}).call(this)}).call(this,require("buffer").Buffer)},{"./partial-array":15,"./path-reference":17,"./process":18,buffer:53}],27:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.BrowserAceBase=void 0;const acebase_local_1=require("./acebase-local");const indexed_db_1=require("./storage/custom/indexed-db");const deprecatedConstructorError=`Using AceBase constructor in the browser to use localStorage is deprecated!\nSwitch to:\nIndexedDB implementation (FASTER, MORE RELIABLE):\n let db = AceBase.WithIndexedDB(name, settings)\nOr, new LocalStorage implementation:\n let db = AceBase.WithLocalStorage(name, settings)\nOr, write your own CustomStorage adapter:\n let myCustomStorage = new CustomStorageSettings({ ... });\n let db = new AceBase(name, { storage: myCustomStorage })`;class BrowserAceBase extends acebase_local_1.AceBase{constructor(name,settings){if(typeof settings!=="object"||typeof settings.storage!=="object"){throw new Error(deprecatedConstructorError)}super(name,settings);this.settings.ipcEvents=settings.multipleTabs===true}static WithIndexedDB(dbname,init={}){return(0,indexed_db_1.createIndexedDBInstance)(dbname,init)}}exports.BrowserAceBase=BrowserAceBase},{"./acebase-local":28,"./storage/custom/indexed-db":45}],28:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AceBase=exports.AceBaseLocalSettings=exports.IndexedDBStorageSettings=exports.LocalStorageSettings=void 0;const acebase_core_1=require("acebase-core");const binary_1=require("./storage/binary");const api_local_1=require("./api-local");const local_storage_1=require("./storage/custom/local-storage");Object.defineProperty(exports,"LocalStorageSettings",{enumerable:true,get:function(){return local_storage_1.LocalStorageSettings}});const settings_1=require("./storage/custom/indexed-db/settings");Object.defineProperty(exports,"IndexedDBStorageSettings",{enumerable:true,get:function(){return settings_1.IndexedDBStorageSettings}});class AceBaseLocalSettings extends acebase_core_1.AceBaseBaseSettings{constructor(options={}){super(options);if(options.storage){this.storage=options.storage;if(options.ipc){this.storage.ipc=options.ipc}if(options.transactions){this.storage.transactions=options.transactions}}}}exports.AceBaseLocalSettings=AceBaseLocalSettings;class AceBase extends acebase_core_1.AceBaseBase{constructor(dbname,init={}){const settings=new AceBaseLocalSettings(init);super(dbname,settings);const apiSettings={db:this,settings:settings};this.api=new api_local_1.LocalApi(dbname,apiSettings,(()=>{this.emit("ready")}));this.recovery={repairNode:async(path,options)=>{if(this.api.storage instanceof binary_1.AceBaseStorage){await this.api.storage.repairNode(path,options)}else if(!this.api.storage.repairNode){throw new Error(`repairNode is not supported with chosen storage engine`)}}}}async close(){await this.api.storage.close()}get settings(){const ipc=this.api.storage.ipc,debug=this.debug;return{get logLevel(){return debug.level},set logLevel(level){debug.setLevel(level)},get ipcEvents(){return ipc.eventsEnabled},set ipcEvents(enabled){ipc.eventsEnabled=enabled}}}static WithLocalStorage(dbname,settings={}){const db=(0,local_storage_1.createLocalStorageInstance)(dbname,settings);return db}static WithIndexedDB(dbname,init={}){throw new Error(`IndexedDB storage can only be used in browser contexts`)}}exports.AceBase=AceBase},{"./api-local":29,"./storage/binary":39,"./storage/custom/indexed-db/settings":46,"./storage/custom/local-storage":48,"acebase-core":12}],29:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.LocalApi=void 0;const acebase_core_1=require("acebase-core");const binary_1=require("./storage/binary");const sqlite_1=require("./storage/sqlite");const mssql_1=require("./storage/mssql");const custom_1=require("./storage/custom");const node_value_types_1=require("./node-value-types");const query_1=require("./query");class LocalApi extends acebase_core_1.Api{constructor(dbname="default",init,readyCallback){super();this.db=init.db;const storageEnv={logLevel:init.settings.logLevel};if(typeof init.settings.storage==="object"){if(sqlite_1.SQLiteStorageSettings&&init.settings.storage instanceof sqlite_1.SQLiteStorageSettings){this.storage=new sqlite_1.SQLiteStorage(dbname,init.settings.storage,storageEnv)}else if(mssql_1.MSSQLStorageSettings&&init.settings.storage instanceof mssql_1.MSSQLStorageSettings){this.storage=new mssql_1.MSSQLStorage(dbname,init.settings.storage,storageEnv)}else if(custom_1.CustomStorageSettings&&init.settings.storage instanceof custom_1.CustomStorageSettings){this.storage=new custom_1.CustomStorage(dbname,init.settings.storage,storageEnv)}else{const storageSettings=init.settings.storage instanceof binary_1.AceBaseStorageSettings?init.settings.storage:new binary_1.AceBaseStorageSettings(init.settings.storage);this.storage=new binary_1.AceBaseStorage(dbname,storageSettings,storageEnv)}}else{this.storage=new binary_1.AceBaseStorage(dbname,new binary_1.AceBaseStorageSettings,storageEnv)}this.storage.on("ready",readyCallback)}async stats(options){return this.storage.stats}subscribe(path,event,callback){this.storage.subscriptions.add(path,event,callback)}unsubscribe(path,event,callback){this.storage.subscriptions.remove(path,event,callback)}async set(path,value,options={suppress_events:false,context:null}){const cursor=await this.storage.setNode(path,value,{suppress_events:options.suppress_events,context:options.context});return Object.assign({},cursor&&{cursor:cursor})}async update(path,updates,options={suppress_events:false,context:null}){const cursor=await this.storage.updateNode(path,updates,{suppress_events:options.suppress_events,context:options.context});return Object.assign({},cursor&&{cursor:cursor})}get transactionLoggingEnabled(){return this.storage.settings.transactions&&this.storage.settings.transactions.log===true}async get(path,options){if(!options){options={}}if(typeof options.include!=="undefined"&&!(options.include instanceof Array)){throw new TypeError(`options.include must be an array of key names`)}if(typeof options.exclude!=="undefined"&&!(options.exclude instanceof Array)){throw new TypeError(`options.exclude must be an array of key names`)}if(["undefined","boolean"].indexOf(typeof options.child_objects)<0){throw new TypeError(`options.child_objects must be a boolean`)}const node=await this.storage.getNode(path,options);return{value:node.value,context:{acebase_cursor:node.cursor},cursor:node.cursor}}async transaction(path,callback,options={suppress_events:false,context:null}){const cursor=await this.storage.transactNode(path,callback,{suppress_events:options.suppress_events,context:options.context});return Object.assign({},cursor&&{cursor:cursor})}async exists(path){const nodeInfo=await this.storage.getNodeInfo(path);return nodeInfo.exists}async query(path,query,options={snapshots:false}){const results=await(0,query_1.query)(this,path,query,options);return results}createIndex(path,key,options){return this.storage.indexes.create(path,key,options)}async getIndexes(){return this.storage.indexes.list()}async deleteIndex(filePath){return this.storage.indexes.delete(filePath)}async reflect(path,type,args){args=args||{};const getChildren=async(path,limit=50,skip=0,from=null)=>{if(typeof limit==="string"){limit=parseInt(limit)}if(typeof skip==="string"){skip=parseInt(skip)}if(["null","undefined"].includes(from)){from=null}const children=[];let n=0,stop=false,more=false;await this.storage.getChildren(path).next((childInfo=>{if(stop){more=true;return false}n++;const include=from!==null?childInfo.key>from:skip===0||n>skip;if(include){children.push(Object.assign({key:typeof childInfo.key==="string"?childInfo.key:childInfo.index,type:childInfo.valueTypeName,value:childInfo.value},typeof childInfo.address==="object"&&"pageNr"in childInfo.address&&{address:{pageNr:childInfo.address.pageNr,recordNr:childInfo.address.recordNr}}))}stop=limit>0&&children.length===limit})).catch((err=>{}));return{more:more,list:children}};switch(type){case"children":{const result=await getChildren(path,args.limit,args.skip,args.from);return result}case"info":{const info={key:"",exists:false,type:"unknown",value:undefined,address:undefined,children:{count:0,more:false,list:[]}};const nodeInfo=await this.storage.getNodeInfo(path,{include_child_count:args.child_count===true});info.key=typeof nodeInfo.key!=="undefined"?nodeInfo.key:nodeInfo.index;info.exists=nodeInfo.exists;info.type=nodeInfo.exists?nodeInfo.valueTypeName:undefined;info.value=nodeInfo.value;info.address=typeof nodeInfo.address==="object"&&"pageNr"in nodeInfo.address?{pageNr:nodeInfo.address.pageNr,recordNr:nodeInfo.address.recordNr}:undefined;const isObjectOrArray=nodeInfo.exists&&nodeInfo.address&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(nodeInfo.type);if(args.child_count===true){info.children={count:isObjectOrArray?nodeInfo.childCount:0}}else if(typeof args.child_limit==="number"&&args.child_limit>0){if(isObjectOrArray){info.children=await getChildren(path,args.child_limit,args.child_skip,args.child_from)}}return info}}}export(path,stream,options={format:"json",type_safe:true}){return this.storage.exportNode(path,stream,options)}import(path,read,options={format:"json",suppress_events:false,method:"set"}){return this.storage.importNode(path,read,options)}async setSchema(path,schema){return this.storage.setSchema(path,schema)}async getSchema(path){return this.storage.getSchema(path)}async getSchemas(){return this.storage.getSchemas()}async validateSchema(path,value,isUpdate){return this.storage.validateSchema(path,value,{updates:isUpdate})}async getMutations(filter){if(typeof this.storage.getMutations!=="function"){throw new Error("Used storage type does not support getMutations")}if(typeof filter!=="object"){throw new Error("No filter specified")}if(typeof filter.cursor!=="string"&&typeof filter.timestamp!=="number"){throw new Error("No cursor or timestamp given")}return this.storage.getMutations(filter)}async getChanges(filter){if(typeof this.storage.getChanges!=="function"){throw new Error("Used storage type does not support getChanges")}if(typeof filter!=="object"){throw new Error("No filter specified")}if(typeof filter.cursor!=="string"&&typeof filter.timestamp!=="number"){throw new Error("No cursor or timestamp given")}return this.storage.getChanges(filter)}}exports.LocalApi=LocalApi},{"./node-value-types":38,"./query":41,"./storage/binary":39,"./storage/custom":44,"./storage/mssql":39,"./storage/sqlite":39,"acebase-core":12}],30:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AsyncTaskBatch=void 0;class AsyncTaskBatch{constructor(limit=1e3,options){this.limit=limit;this.options=options;this.added=0;this.scheduled=[];this.running=0;this.results=[];this.done=false}async execute(task,index){var _a,_b;try{this.running++;const result=await task();this.results[index]=result;this.running--;if(this.running===0&&this.scheduled.length===0){this.done=true;(_a=this.doneCallback)===null||_a===void 0?void 0:_a.call(this,this.results)}else if(this.scheduled.length>0){const next=this.scheduled.shift();this.execute(next.task,next.index)}}catch(err){this.done=true;(_b=this.errorCallback)===null||_b===void 0?void 0:_b.call(this,err)}}add(task){var _a;if(this.done){throw new Error(`Cannot add to a batch that has already finished. Use wait option and start batch processing manually if you are adding tasks in an async loop`)}const index=this.added++;if(((_a=this.options)===null||_a===void 0?void 0:_a.wait)!==true&&this.running{this.doneCallback=resolve;this.errorCallback=reject}));return this.results}}exports.AsyncTaskBatch=AsyncTaskBatch},{}],31:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SchemaValidationError=exports.StorageSettings=exports.ICustomStorageNodeMetaData=exports.ICustomStorageNode=exports.CustomStorageHelpers=exports.CustomStorageSettings=exports.CustomStorageTransaction=exports.MSSQLStorageSettings=exports.SQLiteStorageSettings=exports.AceBaseStorageSettings=exports.IndexedDBStorageSettings=exports.LocalStorageSettings=exports.AceBaseLocalSettings=exports.AceBase=exports.PartialArray=exports.proxyAccess=exports.ID=exports.ObjectCollection=exports.TypeMappings=exports.PathReference=exports.EventSubscription=exports.EventStream=exports.DataReferencesArray=exports.DataSnapshotsArray=exports.DataReference=exports.DataSnapshot=void 0;const acebase_core_1=require("acebase-core");Object.defineProperty(exports,"DataReference",{enumerable:true,get:function(){return acebase_core_1.DataReference}});Object.defineProperty(exports,"DataSnapshot",{enumerable:true,get:function(){return acebase_core_1.DataSnapshot}});Object.defineProperty(exports,"EventSubscription",{enumerable:true,get:function(){return acebase_core_1.EventSubscription}});Object.defineProperty(exports,"PathReference",{enumerable:true,get:function(){return acebase_core_1.PathReference}});Object.defineProperty(exports,"TypeMappings",{enumerable:true,get:function(){return acebase_core_1.TypeMappings}});Object.defineProperty(exports,"ID",{enumerable:true,get:function(){return acebase_core_1.ID}});Object.defineProperty(exports,"proxyAccess",{enumerable:true,get:function(){return acebase_core_1.proxyAccess}});Object.defineProperty(exports,"DataSnapshotsArray",{enumerable:true,get:function(){return acebase_core_1.DataSnapshotsArray}});Object.defineProperty(exports,"ObjectCollection",{enumerable:true,get:function(){return acebase_core_1.ObjectCollection}});Object.defineProperty(exports,"DataReferencesArray",{enumerable:true,get:function(){return acebase_core_1.DataReferencesArray}});Object.defineProperty(exports,"EventStream",{enumerable:true,get:function(){return acebase_core_1.EventStream}});Object.defineProperty(exports,"PartialArray",{enumerable:true,get:function(){return acebase_core_1.PartialArray}});const acebase_local_1=require("./acebase-local");const acebase_browser_1=require("./acebase-browser");Object.defineProperty(exports,"AceBase",{enumerable:true,get:function(){return acebase_browser_1.BrowserAceBase}});const custom_1=require("./storage/custom");const acebase={AceBase:acebase_browser_1.BrowserAceBase,AceBaseLocalSettings:acebase_local_1.AceBaseLocalSettings,DataReference:acebase_core_1.DataReference,DataSnapshot:acebase_core_1.DataSnapshot,EventSubscription:acebase_core_1.EventSubscription,PathReference:acebase_core_1.PathReference,TypeMappings:acebase_core_1.TypeMappings,CustomStorageSettings:custom_1.CustomStorageSettings,CustomStorageTransaction:custom_1.CustomStorageTransaction,CustomStorageHelpers:custom_1.CustomStorageHelpers,ID:acebase_core_1.ID,proxyAccess:acebase_core_1.proxyAccess,DataSnapshotsArray:acebase_core_1.DataSnapshotsArray};window.acebase=acebase;window.AceBase=acebase_browser_1.BrowserAceBase;exports.default=acebase;var acebase_local_2=require("./acebase-local");Object.defineProperty(exports,"AceBaseLocalSettings",{enumerable:true,get:function(){return acebase_local_2.AceBaseLocalSettings}});Object.defineProperty(exports,"LocalStorageSettings",{enumerable:true,get:function(){return acebase_local_2.LocalStorageSettings}});Object.defineProperty(exports,"IndexedDBStorageSettings",{enumerable:true,get:function(){return acebase_local_2.IndexedDBStorageSettings}});var binary_1=require("./storage/binary");Object.defineProperty(exports,"AceBaseStorageSettings",{enumerable:true,get:function(){return binary_1.AceBaseStorageSettings}});var sqlite_1=require("./storage/sqlite");Object.defineProperty(exports,"SQLiteStorageSettings",{enumerable:true,get:function(){return sqlite_1.SQLiteStorageSettings}});var mssql_1=require("./storage/mssql");Object.defineProperty(exports,"MSSQLStorageSettings",{enumerable:true,get:function(){return mssql_1.MSSQLStorageSettings}});var custom_2=require("./storage/custom");Object.defineProperty(exports,"CustomStorageTransaction",{enumerable:true,get:function(){return custom_2.CustomStorageTransaction}});Object.defineProperty(exports,"CustomStorageSettings",{enumerable:true,get:function(){return custom_2.CustomStorageSettings}});Object.defineProperty(exports,"CustomStorageHelpers",{enumerable:true,get:function(){return custom_2.CustomStorageHelpers}});Object.defineProperty(exports,"ICustomStorageNode",{enumerable:true,get:function(){return custom_2.ICustomStorageNode}});Object.defineProperty(exports,"ICustomStorageNodeMetaData",{enumerable:true,get:function(){return custom_2.ICustomStorageNodeMetaData}});var storage_1=require("./storage");Object.defineProperty(exports,"StorageSettings",{enumerable:true,get:function(){return storage_1.StorageSettings}});Object.defineProperty(exports,"SchemaValidationError",{enumerable:true,get:function(){return storage_1.SchemaValidationError}})},{"./acebase-browser":27,"./acebase-local":28,"./storage":51,"./storage/binary":39,"./storage/custom":44,"./storage/mssql":39,"./storage/sqlite":39,"acebase-core":12}],32:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.IPCPeer=void 0;const acebase_core_1=require("acebase-core");const ipc_1=require("./ipc");class IPCPeer extends ipc_1.AceBaseIPCPeer{constructor(storage){super(storage,acebase_core_1.ID.generate());this.masterPeerId=this.id;this.ipcType="browser.bcc";window.addEventListener("beforeunload",(()=>{this.exit()}));if(typeof window.BroadcastChannel!=="undefined"){this.channel=new BroadcastChannel(`acebase:${storage.name}`)}else{const listeners=[null];const notImplemented=()=>{throw new Error("Not implemented")};this.channel={name:`acebase:${storage.name}`,postMessage:message=>{const messageId=acebase_core_1.ID.generate(),key=`acebase:${storage.name}:${this.id}:${messageId}`,payload=JSON.stringify(acebase_core_1.Transport.serialize(message));localStorage.setItem(key,payload);setTimeout((()=>localStorage.removeItem(key)),10)},set onmessage(handler){listeners[0]=handler},set onmessageerror(handler){notImplemented()},close(){notImplemented()},addEventListener(event,callback){if(event!=="message"){notImplemented()}listeners.push(callback)},removeEventListener(event,callback){const i=listeners.indexOf(callback);i>=1&&listeners.splice(i,1)},dispatchEvent(event){listeners.forEach((callback=>{try{callback&&callback(event)}catch(err){console.error(err)}}));return true}};window.addEventListener("storage",(event=>{const[acebase,dbname,peerId,messageId]=event.key.split(":");if(acebase!=="acebase"||dbname!==storage.name||peerId===this.id||event.newValue===null){return}const message=acebase_core_1.Transport.deserialize(JSON.parse(event.newValue));this.channel.dispatchEvent({data:message})}))}this.channel.addEventListener("message",(async event=>{const message=event.data;if(message.to&&message.to!==this.id){return}storage.debug.verbose(`[BroadcastChannel] received: `,message);if(message.type==="hello"&&message.frompeer.id)).concat(this.id).filter((id=>id!==this.masterPeerId));this.masterPeerId=allPeerIds.sort()[0];storage.debug.log(`[BroadcastChannel] ${this.masterPeerId===this.id?"We are":`tab ${this.masterPeerId} is`} the new master. Requesting ${this._locks.length} locks (${this._locks.filter((r=>!r.granted)).length} pending)`);const requests=this._locks.splice(0);await Promise.all(requests.filter((req=>req.granted)).map((async req=>{let released,movedToParent;req.lock.release=()=>new Promise((resolve=>released=resolve));req.lock.moveToParent=()=>new Promise((resolve=>movedToParent=resolve));const lock=await this.lock({path:req.lock.path,write:req.lock.forWriting,tid:req.lock.tid,comment:req.lock.comment});if(movedToParent){const newLock=await lock.moveToParent();movedToParent(newLock)}if(released){await lock.release();released()}})));await Promise.all(requests.filter((req=>!req.granted)).map((async req=>{await this.lock(req.request)})))}return this.handleMessage(message)}));const helloMsg={type:"hello",from:this.id,data:undefined};this.sendMessage(helloMsg)}sendMessage(message){this.storage.debug.verbose(`[BroadcastChannel] sending: `,message);this.channel.postMessage(message)}}exports.IPCPeer=IPCPeer},{"./ipc":33,"acebase-core":12}],33:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AceBaseIPCPeer=exports.AceBaseIPCPeerExitingError=void 0;const acebase_core_1=require("acebase-core");const node_lock_1=require("../node-lock");class AceBaseIPCPeerExitingError extends Error{constructor(message){super(`Exiting: ${message}`)}}exports.AceBaseIPCPeerExitingError=AceBaseIPCPeerExitingError;class AceBaseIPCPeer extends acebase_core_1.SimpleEventEmitter{constructor(storage,id,dbname=storage.name){super();this.storage=storage;this.id=id;this.dbname=dbname;this.ipcType="ipc";this.ourSubscriptions=[];this.remoteSubscriptions=[];this.peers=[];this._exiting=false;this._locks=[];this._requests=new Map;this._eventsEnabled=true;this._nodeLocker=new node_lock_1.NodeLocker(storage.debug,storage.settings.lockTimeout);storage.on("subscribe",(subscription=>{storage.debug.verbose(`database subscription being added on peer ${this.id}`);const remoteSubscription=this.remoteSubscriptions.find((sub=>sub.callback===subscription.callback));if(remoteSubscription){return}const othersAlreadyNotifying=this.ourSubscriptions.some((sub=>sub.event===subscription.event&&sub.path===subscription.path));this.ourSubscriptions.push(subscription);if(othersAlreadyNotifying){return}const message={type:"subscribe",from:this.id,data:{path:subscription.path,event:subscription.event}};this.sendMessage(message)}));storage.on("unsubscribe",(subscription=>{const remoteSubscription=this.remoteSubscriptions.find((sub=>sub.callback===subscription.callback));if(remoteSubscription){this.remoteSubscriptions.splice(this.remoteSubscriptions.indexOf(remoteSubscription),1);return}this.ourSubscriptions.filter((sub=>sub.path===subscription.path&&(!subscription.event||sub.event===subscription.event)&&(!subscription.callback||sub.callback===subscription.callback))).forEach((sub=>{this.ourSubscriptions.splice(this.ourSubscriptions.indexOf(sub),1);const message={type:"unsubscribe",from:this.id,data:{path:sub.path,event:sub.event}};this.sendMessage(message)}))}))}get isMaster(){return this.masterPeerId===this.id}async exit(code=0){if(this._exiting){return this.once("exit")}this._exiting=true;this.storage.debug.warn(`Received ${this.isMaster?"master":"worker "+this.id} process exit request`);if(this._locks.length>0){this.storage.debug.warn(`Waiting for ${this.isMaster?"master":"worker"} ${this.id} locks to clear`);await this.once("locks-cleared")}this.sayGoodbye(this.id);this.storage.debug.warn(`${this.isMaster?"Master":"Worker "+this.id} will now exit`);this.emitOnce("exit",code)}sayGoodbye(forPeerId){const bye={type:"bye",from:forPeerId,data:undefined};this.sendMessage(bye)}addPeer(id,sendReply=true){if(this._exiting){return}const peer=this.peers.find((w=>w.id===id));if(!peer){this.peers.push({id:id,lastSeen:Date.now()})}if(sendReply){const helloMessage={type:"hello",from:this.id,to:id,data:undefined};this.sendMessage(helloMessage);this.ourSubscriptions.forEach((sub=>{const message={type:"subscribe",from:this.id,to:id,data:{path:sub.path,event:sub.event}};this.sendMessage(message)}))}}removePeer(id,ignoreUnknown=false){if(this._exiting){return}const peer=this.peers.find((peer=>peer.id===id));if(!peer){if(!ignoreUnknown){throw new Error(`We are supposed to know this peer!`)}return}this.peers.splice(this.peers.indexOf(peer),1);const subscriptions=this.remoteSubscriptions.filter((sub=>sub.for===id));subscriptions.forEach((sub=>{this.remoteSubscriptions.splice(this.remoteSubscriptions.indexOf(sub),1);this.storage.subscriptions.remove(sub.path,sub.event,sub.callback)}))}addRemoteSubscription(peerId,details){if(this._exiting){return}if(this.remoteSubscriptions.some((sub=>sub.for===peerId&&sub.event===details.event&&sub.path===details.path))){return}const subscribeCallback=(err,path,val,previous,context)=>{const eventMessage={type:"event",from:this.id,to:peerId,path:details.path,event:details.event,data:{path:path,val:val,previous:previous,context:context}};this.sendMessage(eventMessage)};this.remoteSubscriptions.push({for:peerId,event:details.event,path:details.path,callback:subscribeCallback});this.storage.subscriptions.add(details.path,details.event,subscribeCallback)}cancelRemoteSubscription(peerId,details){const sub=this.remoteSubscriptions.find((sub=>sub.for===peerId&&sub.event===details.event&&sub.path===details.event));if(!sub){return}this.storage.subscriptions.remove(details.path,details.event,sub.callback)}async handleMessage(message){switch(message.type){case"hello":return this.addPeer(message.from,message.to!==this.id);case"bye":return this.removePeer(message.from,true);case"subscribe":return this.addRemoteSubscription(message.from,message.data);case"unsubscribe":return this.cancelRemoteSubscription(message.from,message.data);case"event":{if(!this._eventsEnabled){break}const eventMessage=message;const context=eventMessage.data.context||{};context.acebase_ipc={type:this.ipcType,origin:eventMessage.from};const subscriptions=this.ourSubscriptions.filter((sub=>sub.event===eventMessage.event&&sub.path===eventMessage.path));subscriptions.forEach((sub=>{sub.callback(null,eventMessage.data.path,eventMessage.data.val,eventMessage.data.previous,context)}));break}case"lock-request":{if(!this.isMaster){throw new Error(`Workers are not supposed to receive lock requests!`)}const request=message;const result={type:"lock-result",id:request.id,from:this.id,to:request.from,ok:true,data:undefined};try{const lock=await this.lock(request.data);result.data={id:lock.id,path:lock.path,tid:lock.tid,write:lock.forWriting,expires:lock.expires,comment:lock.comment}}catch(err){result.ok=false;result.reason=err.stack||err.message||err}return this.sendMessage(result)}case"lock-result":{if(this.isMaster){throw new Error(`Masters are not supposed to receive results for lock requests!`)}const result=message;const request=this._requests.get(result.id);if(typeof request!=="object"){throw new Error(`The request must be known to us!`)}if(result.ok){request.resolve(result.data)}else{request.reject(new Error(result.reason))}return}case"unlock-request":{if(!this.isMaster){throw new Error(`Workers are not supposed to receive unlock requests!`)}const request=message;const result={type:"unlock-result",id:request.id,from:this.id,to:request.from,ok:true,data:{id:request.data.id}};try{const lockInfo=this._locks.find((l=>{var _a;return((_a=l.lock)===null||_a===void 0?void 0:_a.id)===request.data.id}));await lockInfo.lock.release()}catch(err){result.ok=false;result.reason=err.stack||err.message||err}return this.sendMessage(result)}case"unlock-result":{if(this.isMaster){throw new Error(`Masters are not supposed to receive results for unlock requests!`)}const result=message;const request=this._requests.get(result.id);if(typeof request!=="object"){throw new Error(`The request must be known to us!`)}if(result.ok){request.resolve(result.data)}else{request.reject(new Error(result.reason))}return}case"move-lock-request":{if(!this.isMaster){throw new Error(`Workers are not supposed to receive move lock requests!`)}const request=message;const result={type:"lock-result",id:request.id,from:this.id,to:request.from,ok:true,data:undefined};try{let movedLock;const lockRequest=this._locks.find((r=>{var _a;return((_a=r.lock)===null||_a===void 0?void 0:_a.id)===request.data.id}));if(request.data.move_to==="parent"){movedLock=await lockRequest.lock.moveToParent()}else{throw new Error(`Unknown lock move_to "${request.data.move_to}"`)}lockRequest.lock=movedLock;result.data={id:movedLock.id,path:movedLock.path,tid:movedLock.tid,write:movedLock.forWriting,expires:movedLock.expires,comment:movedLock.comment}}catch(err){result.ok=false;result.reason=err.stack||err.message||err}return this.sendMessage(result)}case"notification":{return this.emit("notification",message)}case"request":{return this.emit("request",message)}case"result":{const result=message;const request=this._requests.get(result.id);if(typeof request!=="object"){throw new Error(`Result of unknown request received`)}if(result.ok){request.resolve(result.data)}else{request.reject(new Error(result.reason))}}}}async lock(details){if(this._exiting){const tidApproved=this._locks.find((l=>l.tid===details.tid&&l.granted));if(!tidApproved){throw new AceBaseIPCPeerExitingError("new transaction lock denied because the IPC peer is exiting")}}const removeLock=lockDetails=>{this._locks.splice(this._locks.indexOf(lockDetails),1);if(this._locks.length===0){this.emit("locks-cleared")}};if(this.isMaster){const lockInfo={tid:details.tid,granted:false,request:details,lock:null};this._locks.push(lockInfo);const lock=await this._nodeLocker.lock(details.path,details.tid,details.write,details.comment);lockInfo.tid=lock.tid;lockInfo.granted=true;const createIPCLock=lock=>({get id(){return lock.id},get tid(){return lock.tid},get path(){return lock.path},get forWriting(){return lock.forWriting},get expires(){return lock.expires},get comment(){return lock.comment},get state(){return lock.state},release:async()=>{await lock.release();removeLock(lockInfo)},moveToParent:async()=>{const parentLock=await lock.moveToParent();lockInfo.lock=createIPCLock(parentLock);return lockInfo.lock}});lockInfo.lock=createIPCLock(lock);return lockInfo.lock}else{const lockInfo={tid:details.tid,granted:false,request:details,lock:null};this._locks.push(lockInfo);const createIPCLock=result=>{lockInfo.granted=true;lockInfo.tid=result.tid;lockInfo.lock={id:result.id,tid:result.tid,path:result.path,forWriting:result.write,state:node_lock_1.LOCK_STATE.LOCKED,expires:result.expires,comment:result.comment,release:async()=>{const req={type:"unlock-request",id:acebase_core_1.ID.generate(),from:this.id,to:this.masterPeerId,data:{id:lockInfo.lock.id}};await this.request(req);lockInfo.lock.state=node_lock_1.LOCK_STATE.DONE;this.storage.debug.verbose(`Worker ${this.id} released lock ${lockInfo.lock.id} (tid ${lockInfo.lock.tid}, ${lockInfo.lock.comment}, "/${lockInfo.lock.path}", ${lockInfo.lock.forWriting?"write":"read"})`);removeLock(lockInfo)},moveToParent:async()=>{const req={type:"move-lock-request",id:acebase_core_1.ID.generate(),from:this.id,to:this.masterPeerId,data:{id:lockInfo.lock.id,move_to:"parent"}};let result;try{result=await this.request(req)}catch(err){lockInfo.lock.state=node_lock_1.LOCK_STATE.DONE;removeLock(lockInfo);throw err}lockInfo.lock=createIPCLock(result);return lockInfo.lock}};return lockInfo.lock};const req={type:"lock-request",id:acebase_core_1.ID.generate(),from:this.id,to:this.masterPeerId,data:details};let result,err;try{result=await this.request(req)}catch(e){err=e;result=null}if(err){removeLock(lockInfo);throw err}return createIPCLock(result)}}async request(req){let resolve,reject;const promise=new Promise(((rs,rj)=>{resolve=result=>{this._requests.delete(req.id);rs(result)};reject=err=>{this._requests.delete(req.id);rj(err)}}));this._requests.set(req.id,{resolve:resolve,reject:reject,request:req});this.sendMessage(req);return promise}sendRequest(request){const req={type:"request",from:this.id,to:this.masterPeerId,id:acebase_core_1.ID.generate(),data:request};return this.request(req).catch((err=>{this.storage.debug.error(err);throw err}))}replyRequest(requestMessage,result){const reply={type:"result",id:requestMessage.id,ok:true,from:this.id,to:requestMessage.from,data:result};this.sendMessage(reply)}sendNotification(notification){const msg={type:"notification",from:this.id,data:notification};this.sendMessage(msg)}get eventsEnabled(){return this._eventsEnabled}set eventsEnabled(enabled){this.storage.debug.log(`ipc events ${enabled?"enabled":"disabled"}`);this._eventsEnabled=enabled}}exports.AceBaseIPCPeer=AceBaseIPCPeer},{"../node-lock":37,"acebase-core":12}],34:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.RemovedNodeAddress=exports.NodeAddress=void 0;class NodeAddress{constructor(path){this.path=path}toString(){return`"/${this.path}"`}equals(address){return this.path===address.path}}exports.NodeAddress=NodeAddress;class RemovedNodeAddress extends NodeAddress{constructor(path){super(path)}toString(){return`"/${this.path}" (removed)`}equals(address){return address instanceof RemovedNodeAddress&&this.path===address.path}}exports.RemovedNodeAddress=RemovedNodeAddress},{}],35:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.NodeRevisionError=exports.NodeNotFoundError=void 0;class NodeNotFoundError extends Error{}exports.NodeNotFoundError=NodeNotFoundError;class NodeRevisionError extends Error{}exports.NodeRevisionError=NodeRevisionError},{}],36:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.NodeInfo=void 0;const node_value_types_1=require("./node-value-types");const acebase_core_1=require("acebase-core");class NodeInfo{constructor(info){this.path=info.path;this.type=info.type;this.index=info.index;this.key=info.key;this.exists=info.exists;this.address=info.address;this.value=info.value;this.childCount=info.childCount;if(typeof this.path==="string"&&(typeof this.key==="undefined"&&typeof this.index==="undefined")){const pathInfo=acebase_core_1.PathInfo.get(this.path);if(typeof pathInfo.key==="number"){this.index=pathInfo.key}else{this.key=pathInfo.key}}if(typeof this.exists==="undefined"){this.exists=true}}get valueType(){return this.type}get valueTypeName(){return(0,node_value_types_1.getValueTypeName)(this.valueType)}toString(){if(!this.exists){return`"${this.path}" doesn't exist`}if(this.address){return`"${this.path}" is ${this.valueTypeName} stored at ${this.address.toString()}`}else{return`"${this.path}" is ${this.valueTypeName} with value ${this.value}`}}}exports.NodeInfo=NodeInfo},{"./node-value-types":38,"acebase-core":12}],37:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.NodeLock=exports.NodeLocker=exports.LOCK_STATE=void 0;const acebase_core_1=require("acebase-core");const DEBUG_MODE=false;const DEFAULT_LOCK_TIMEOUT=120;exports.LOCK_STATE={PENDING:"pending",LOCKED:"locked",EXPIRED:"expired",DONE:"done"};class NodeLocker{constructor(debug,lockTimeout=DEFAULT_LOCK_TIMEOUT){this._locks=[];this._lastTid=0;this.debug=debug;this.timeout=lockTimeout*1e3}setTimeout(timeout){this.timeout=timeout*1e3}createTid(){return DEBUG_MODE?++this._lastTid:acebase_core_1.ID.generate()}_allowLock(path,tid,forWriting){const conflict=this._locks.find((otherLock=>otherLock.tid!==tid&&otherLock.state===exports.LOCK_STATE.LOCKED&&(forWriting||otherLock.forWriting)));return{allow:!conflict,conflict:conflict}}quit(){return new Promise((resolve=>{if(this._locks.length===0){return resolve()}this._quit=resolve}))}_rejectLock(lock,err){this._locks.splice(this._locks.indexOf(lock),1);clearTimeout(lock.timeout);try{lock.reject(err)}catch(err){console.error(`Unhandled promise rejection:`,err)}}_processLockQueue(){if(this._quit){const quitError=new Error("Quitting");this._locks.filter((lock=>lock.state===exports.LOCK_STATE.PENDING)).forEach((lock=>this._rejectLock(lock,quitError)));if(this._locks.length===0){this._quit()}}const pending=this._locks.filter((lock=>lock.state===exports.LOCK_STATE.PENDING)).sort(((a,b)=>{if(a.priority&&!b.priority){return-1}else if(!a.priority&&b.priority){return 1}return a.requested-b.requested}));pending.forEach((lock=>{const check=this._allowLock(lock.path,lock.tid,lock.forWriting);lock.waitingFor=check.conflict||null;if(check.allow){this.lock(lock).then(lock.resolve).catch((err=>this._rejectLock(lock,err)))}}))}async lock(path,tid,forWriting=true,comment="",options={withPriority:false,noTimeout:false}){let lock,proceed;if(path instanceof NodeLock){lock=path;proceed=true}else if(this._locks.findIndex((l=>l.tid===tid&&l.state===exports.LOCK_STATE.EXPIRED))>=0){throw new Error(`lock on tid ${tid} has expired, not allowed to continue`)}else if(this._quit&&!options.withPriority){throw new Error(`Quitting`)}else{DEBUG_MODE&&console.error(`${forWriting?"write":"read"} lock requested on "${path}" by tid ${tid} (${comment})`);lock=new NodeLock(this,path,tid,forWriting,options.withPriority===true);lock.comment=comment;this._locks.push(lock);const check=this._allowLock(path,tid,forWriting);lock.waitingFor=check.conflict||null;proceed=check.allow}if(proceed){DEBUG_MODE&&console.error(`${lock.forWriting?"write":"read"} lock ALLOWED on "${lock.path}" by tid ${lock.tid} (${lock.comment})`);lock.state=exports.LOCK_STATE.LOCKED;if(typeof lock.granted==="number"){}else{lock.granted=Date.now();if(options.noTimeout!==true){lock.expires=Date.now()+this.timeout;let timeoutCount=0;const timeoutHandler=()=>{if(lock.state!==exports.LOCK_STATE.LOCKED){return}timeoutCount++;if(timeoutCount<=3){this.debug.warn(`${lock.forWriting?"write":"read"} lock on path "/${lock.path}" by tid ${lock.tid} (${lock.comment}) is taking a long time to complete [${timeoutCount}]`);lock.timeout=setTimeout(timeoutHandler,this.timeout/4);return}this.debug.error(`lock :: ${lock.forWriting?"write":"read"} lock on path "/${lock.path}" by tid ${lock.tid} (${lock.comment}) took too long`);lock.state=exports.LOCK_STATE.EXPIRED;this._processLockQueue()};lock.timeout=setTimeout(timeoutHandler,this.timeout/4)}}return lock}else{console.assert(lock.state===exports.LOCK_STATE.PENDING);return new Promise(((resolve,reject)=>{lock.resolve=resolve;lock.reject=reject}))}}unlock(lockOrId,comment,processQueue=true){let lock,i;if(lockOrId instanceof NodeLock){lock=lockOrId;i=this._locks.indexOf(lock)}else{const id=lockOrId;i=this._locks.findIndex((l=>l.id===id));lock=this._locks[i]}if(i<0){const msg=`lock on "/${lock.path}" for tid ${lock.tid} wasn't found; ${comment}`;throw new Error(msg)}lock.state=exports.LOCK_STATE.DONE;clearTimeout(lock.timeout);this._locks.splice(i,1);DEBUG_MODE&&console.error(`${lock.forWriting?"write":"read"} lock RELEASED on "${lock.path}" by tid ${lock.tid}`);processQueue&&this._processLockQueue();return lock}list(){return this._locks||[]}isAllowed(path,tid,forWriting){return this._allowLock(path,tid,forWriting).allow}}exports.NodeLocker=NodeLocker;let lastid=0;class NodeLock{constructor(locker,path,tid,forWriting,priority=false){this.locker=locker;this.path=path;this.tid=tid;this.forWriting=forWriting;this.priority=priority;this.state=exports.LOCK_STATE.PENDING;this.requested=Date.now();this.comment="";this.waitingFor=null;this.id=++lastid;this.history=[]}static get LOCK_STATE(){return exports.LOCK_STATE}async release(comment){this.history.push({action:"release",path:this.path,forWriting:this.forWriting,comment:comment});return this.locker.unlock(this,comment||this.comment)}async moveToParent(){const parentPath=acebase_core_1.PathInfo.get(this.path).parentPath;const allowed=this.locker.isAllowed(parentPath,this.tid,this.forWriting);if(allowed){DEBUG_MODE&&console.error(`moveToParent ALLOWED for ${this.forWriting?"write":"read"} lock on "${this.path}" by tid ${this.tid} (${this.comment})`);this.history.push({path:this.path,forWriting:this.forWriting,action:"moving to parent"});this.waitingFor=null;this.path=parentPath;return this}else{DEBUG_MODE&&console.error(`moveToParent QUEUED for ${this.forWriting?"write":"read"} lock on "${this.path}" by tid ${this.tid} (${this.comment})`);this.locker.unlock(this,`moveLockToParent: ${this.comment}`,false);const newLock=await this.locker.lock(parentPath,this.tid,this.forWriting,this.comment,{withPriority:true});DEBUG_MODE&&console.error(`QUEUED moveToParent ALLOWED for ${this.forWriting?"write":"read"} lock on "${this.path}" by tid ${this.tid} (${this.comment})`);newLock.history=this.history;newLock.history.push({path:this.path,forWriting:this.forWriting,action:"moving to parent through queue (priority)"});return newLock}}}exports.NodeLock=NodeLock},{"acebase-core":12}],38:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.getValueType=exports.getNodeValueType=exports.getValueTypeName=exports.VALUE_TYPES=void 0;const acebase_core_1=require("acebase-core");exports.VALUE_TYPES=Object.freeze({OBJECT:1,ARRAY:2,NUMBER:3,BOOLEAN:4,STRING:5,BIGINT:7,DATETIME:6,BINARY:8,REFERENCE:9});function getValueTypeName(valueType){switch(valueType){case exports.VALUE_TYPES.ARRAY:return"array";case exports.VALUE_TYPES.BINARY:return"binary";case exports.VALUE_TYPES.BOOLEAN:return"boolean";case exports.VALUE_TYPES.DATETIME:return"date";case exports.VALUE_TYPES.NUMBER:return"number";case exports.VALUE_TYPES.OBJECT:return"object";case exports.VALUE_TYPES.REFERENCE:return"reference";case exports.VALUE_TYPES.STRING:return"string";case exports.VALUE_TYPES.BIGINT:return"bigint";default:"unknown"}}exports.getValueTypeName=getValueTypeName;function getNodeValueType(value){if(value instanceof Array){return exports.VALUE_TYPES.ARRAY}else if(value instanceof acebase_core_1.PathReference){return exports.VALUE_TYPES.REFERENCE}else if(value instanceof ArrayBuffer){return exports.VALUE_TYPES.BINARY}else if(typeof value==="string"){return exports.VALUE_TYPES.STRING}else if(typeof value==="object"){return exports.VALUE_TYPES.OBJECT}else if(typeof value==="bigint"){return exports.VALUE_TYPES.BIGINT}throw new Error(`Invalid value for standalone node: ${value}`)}exports.getNodeValueType=getNodeValueType;function getValueType(value){if(value instanceof Array){return exports.VALUE_TYPES.ARRAY}else if(value instanceof acebase_core_1.PathReference){return exports.VALUE_TYPES.REFERENCE}else if(value instanceof ArrayBuffer){return exports.VALUE_TYPES.BINARY}else if(value instanceof Date){return exports.VALUE_TYPES.DATETIME}else if(typeof value==="string"){return exports.VALUE_TYPES.STRING}else if(typeof value==="object"){return exports.VALUE_TYPES.OBJECT}else if(typeof value==="number"){return exports.VALUE_TYPES.NUMBER}else if(typeof value==="boolean"){return exports.VALUE_TYPES.BOOLEAN}else if(typeof value==="bigint"){return exports.VALUE_TYPES.BIGINT}throw new Error(`Unknown value type: ${value}`)}exports.getValueType=getValueType},{"acebase-core":12}],39:[function(require,module,exports){},{}],40:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.pfs=void 0;class pfs{static get hasFileSystem(){return false}static get fs(){return null}}exports.pfs=pfs},{}],41:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.query=void 0;const acebase_core_1=require("acebase-core");const node_value_types_1=require("./node-value-types");const node_errors_1=require("./node-errors");const data_index_1=require("./data-index");const async_task_batch_1=require("./async-task-batch");const noop=()=>{};function query(api,path,query,options={snapshots:false,include:undefined,exclude:undefined,child_objects:undefined,eventHandler:noop}){var _a;if(typeof options!=="object"){options={}}if(typeof options.snapshots==="undefined"){options.snapshots=false}const context={};if((_a=api.storage.settings.transactions)===null||_a===void 0?void 0:_a.log){context.acebase_cursor=acebase_core_1.ID.generate()}const queryFilters=query.filters.map((f=>Object.assign({},f)));const querySort=query.order.map((s=>Object.assign({},s)));const sortMatches=matches=>{matches.sort(((a,b)=>{const compare=i=>{const o=querySort[i];const trailKeys=acebase_core_1.PathInfo.getPathKeys(typeof o.key==="number"?`[${o.key}]`:o.key);const left=trailKeys.reduce(((val,key)=>val!==null&&typeof val==="object"&&key in val?val[key]:null),a.val);const right=trailKeys.reduce(((val,key)=>val!==null&&typeof val==="object"&&key in val?val[key]:null),b.val);if(left===null){return right===null?0:o.ascending?-1:1}if(right===null){return o.ascending?1:-1}if(left==right){if(i{if(preResults.length===0){return[]}const maxBatchSize=50;const batch=new async_task_batch_1.AsyncTaskBatch(maxBatchSize);const results=[];preResults.forEach((({path:path},index)=>batch.add((async()=>{const node=await api.storage.getNode(path,options);const val=node.value;if(val===null){api.storage.debug.warn(`Indexed result "/${path}" does not have a record!`);return}const result={path:path,val:val};if(stepsExecuted.sorted){results[index]=result}else{results.push(result);if(!stepsExecuted.skipped&&results.length>query.skip+Math.abs(query.take)){sortMatches(results);results.pop()}}}))));await batch.finish();return results};const pathInfo=acebase_core_1.PathInfo.get(path);const isWildcardPath=pathInfo.keys.some((key=>key==="*"||key.toString().startsWith("$")));const availableIndexes=api.storage.indexes.get(path);const usingIndexes=[];if(isWildcardPath){if(availableIndexes.length===0){const err=new Error(`Query on wildcard path "/${path}" requires an index`);return Promise.reject(err)}if(queryFilters.length===0){const index=availableIndexes.filter((index=>index.type==="normal"))[0];queryFilters.push({key:index.key,op:"!=",compare:null})}}queryFilters.forEach((filter=>{if(filter.index){return}const indexesOnKey=availableIndexes.filter((index=>index.key===filter.key)).filter((index=>index.validOperators.includes(filter.op)));if(indexesOnKey.length>=1){const otherFilterKeys=queryFilters.filter((f=>f!==filter)).map((f=>f.key));const sortKeys=querySort.map((o=>o.key)).filter((key=>key!==filter.key));const beneficialIndexes=indexesOnKey.map((index=>{const availableKeys=index.includeKeys.concat(index.key);const forOtherFilters=availableKeys.filter((key=>otherFilterKeys.includes(key)));const forSorting=availableKeys.filter((key=>sortKeys.includes(key)));const forBoth=forOtherFilters.concat(forSorting.filter((index=>!forOtherFilters.includes(index))));const points={filters:forOtherFilters.length,sorting:forSorting.length*(query.take!==0?forSorting.length:1),both:forBoth.length*forBoth.length,get total(){return this.filters+this.sorting+this.both}};return{index:index,points:points.total,filterKeys:forOtherFilters,sortKeys:forSorting}}));beneficialIndexes.sort(((a,b)=>a.points>b.points?-1:1));const bestBenificialIndex=beneficialIndexes[0];filter.index=bestBenificialIndex.index;bestBenificialIndex.filterKeys.forEach((key=>{queryFilters.filter((f=>f!==filter&&f.key===key)).forEach((f=>{if(!data_index_1.DataIndex.validOperators.includes(f.op)){return}f.indexUsage="filter";f.index=bestBenificialIndex.index}))}));bestBenificialIndex.sortKeys.forEach((key=>{querySort.filter((s=>s.key===key)).forEach((s=>{s.index=bestBenificialIndex.index}))}))}if(filter.index){usingIndexes.push({index:filter.index,description:filter.index.description})}}));if(querySort.length>0&&query.take!==0&&queryFilters.length===0){querySort.forEach((sort=>{if(sort.index){return}sort.index=availableIndexes.filter((index=>index.key===sort.key)).find((index=>index.type==="normal"))}))}const indexDescriptions=usingIndexes.map((index=>index.description)).join(", ");usingIndexes.length>0&&api.storage.debug.log(`Using indexes for query: ${indexDescriptions}`);const tableScanFilters=queryFilters.filter((filter=>!filter.index));const specialOpsRegex=/^[a-z]+:/i;if(tableScanFilters.some((filter=>specialOpsRegex.test(filter.op)))){const f=tableScanFilters.find((filter=>specialOpsRegex.test(filter.op)));const err=new Error(`query contains operator "${f.op}" which requires a special index that was not found on path "${path}", key "${f.key}"`);return Promise.reject(err)}const allowedTableScanOperators=["<","<=","==","!=",">=",">","like","!like","in","!in","matches","!matches","between","!between","has","!has","contains","!contains","exists","!exists"];for(let i=0;i0){const keys=tableScanFilters.reduce(((keys,f)=>{if(keys.indexOf(f.key)<0){keys.push(f.key)}return keys}),[]).map((key=>`"${key}"`));const err=new Error(`This wildcard path query on "/${path}" requires index(es) on key(s): ${keys.join(", ")}. Create the index(es) and retry`);return Promise.reject(err)}const indexScanPromises=[];queryFilters.forEach((filter=>{if(filter.index&&filter.indexUsage!=="filter"){let promise=filter.index.query(filter.op,filter.compare).then((results=>{options.eventHandler&&options.eventHandler({name:"stats",type:"index_query",source:filter.index.description,stats:results.stats});if(results.hints.length>0){options.eventHandler&&options.eventHandler({name:"hints",type:"index_query",source:filter.index.description,hints:results.hints})}return results}));const resultFilters=queryFilters.filter((f=>f.index===filter.index&&f.indexUsage==="filter"));if(resultFilters.length>0){promise=promise.then((results=>{resultFilters.forEach((filter=>{const{key:key,op:op,index:index}=filter;let{compare:compare}=filter;if(typeof compare==="string"&&!index.caseSensitive){compare=compare.toLocaleLowerCase(index.textLocale)}results=results.filterMetadata(key,op,compare)}));return results}))}indexScanPromises.push(promise)}}));const stepsExecuted={filtered:queryFilters.length===0,skipped:query.skip===0,taken:query.take===0,sorted:querySort.length===0,preDataLoaded:false,dataLoaded:false};if(queryFilters.length===0&&query.take===0){api.storage.debug.warn(`Filterless queries must use .take to limit the results. Defaulting to 100 for query on path "${path}"`);query.take=100}if(querySort.length>0&&querySort[0].index){const sortIndex=querySort[0].index;const ascending=query.take<0?!querySort[0].ascending:querySort[0].ascending;if(queryFilters.length===0&&querySort.slice(1).every((s=>sortIndex.allMetadataKeys.includes(s.key)))){api.storage.debug.log(`Using index for sorting: ${sortIndex.description}`);const metadataSort=querySort.slice(1).map((s=>{s.index=sortIndex;return{key:s.key,ascending:s.ascending}}));const promise=sortIndex.take(query.skip,Math.abs(query.take),{ascending:ascending,metadataSort:metadataSort}).then((results=>{options.eventHandler&&options.eventHandler({name:"stats",type:"sort_index_take",source:sortIndex.description,stats:results.stats});if(results.hints.length>0){options.eventHandler&&options.eventHandler({name:"hints",type:"sort_index_take",source:sortIndex.description,hints:results.hints})}return results}));indexScanPromises.push(promise);stepsExecuted.skipped=true;stepsExecuted.taken=true;stepsExecuted.sorted=true}}return Promise.all(indexScanPromises).then((async indexResultSets=>{let indexedResults=[];if(indexResultSets.length===1){const resultSet=indexResultSets[0];indexedResults=resultSet.map((match=>{const result={key:match.key,path:match.path,val:{[resultSet.filterKey]:match.value}};match.metadata&&Object.assign(result.val,match.metadata);return result}));stepsExecuted.filtered=true}else if(indexResultSets.length>1){indexResultSets.sort(((a,b)=>a.length{const result={key:match.key,path:match.path,val:{[shortestSet.filterKey]:match.value}};const matchedInAllSets=otherSets.every((set=>set.findIndex((m=>m.path===match.path))>=0));if(matchedInAllSets){match.metadata&&Object.assign(result.val,match.metadata);otherSets.forEach((set=>{const otherResult=set.find((r=>r.path===result.path));result.val[set.filterKey]=otherResult.value;otherResult.metadata&&Object.assign(result.val,otherResult.metadata)}));results.push(result)}return results}),[]);stepsExecuted.filtered=true}if(isWildcardPath||indexScanPromises.length>0&&tableScanFilters.length===0){if(querySort.length===0||querySort.every((o=>o.index))){stepsExecuted.preDataLoaded=true;if(!stepsExecuted.sorted&&querySort.length>0){sortMatches(indexedResults)}stepsExecuted.sorted=true;if(!stepsExecuted.skipped&&query.skip>0){indexedResults=query.take<0?indexedResults.slice(0,-query.skip):indexedResults.slice(query.skip)}if(!stepsExecuted.taken&&query.take!==0){indexedResults=query.take<0?indexedResults.slice(query.take):indexedResults.slice(0,query.take)}stepsExecuted.skipped=true;stepsExecuted.taken=true;if(!options.snapshots){return indexedResults}const childOptions={include:options.include,exclude:options.exclude,child_objects:options.child_objects};return loadResultsData(indexedResults,childOptions).then((results=>{stepsExecuted.dataLoaded=true;return results}))}if(options.snapshots||!stepsExecuted.sorted){const loadPartialResults=querySort.length>0;const childOptions=loadPartialResults?{include:querySort.map((order=>order.key))}:{include:options.include,exclude:options.exclude,child_objects:options.child_objects};return loadResultsData(indexedResults,childOptions).then((results=>{if(querySort.length>0){sortMatches(results)}stepsExecuted.sorted=true;if(query.skip>0){results=query.take<0?results.slice(0,-query.skip):results.slice(query.skip)}if(query.take!==0){results=query.take<0?results.slice(query.take):results.slice(0,query.take)}stepsExecuted.skipped=true;stepsExecuted.taken=true;if(options.snapshots&&loadPartialResults){return loadResultsData(results,{include:options.include,exclude:options.exclude,child_objects:options.child_objects})}return results}))}else{return indexedResults}}let indexKeyFilter;if(indexedResults.length>0){indexKeyFilter=indexedResults.map((result=>result.key))}let matches=[];let preliminaryStop=false;const loadPartialData=querySort.length>0;const childOptions=loadPartialData?{include:querySort.map((order=>order.key))}:{include:options.include,exclude:options.exclude,child_objects:options.child_objects};const batch={promises:[],add(promise){this.promises.push(promise);if(this.promises.length>=1e3){return Promise.all(this.promises.splice(0)).then((_=>undefined))}}};try{await api.storage.getChildren(path,{keyFilter:indexKeyFilter,async:true}).next((child=>{if(child.type!==node_value_types_1.VALUE_TYPES.OBJECT){return}if(!child.address){return}if(preliminaryStop){return false}const matchNode=async()=>{const isMatch=await api.storage.matchNode(child.address.path,tableScanFilters);if(!isMatch){return}const childPath=child.address.path;let result;if(options.snapshots||querySort.length>0){const node=await api.storage.getNode(childPath,childOptions);result={path:childPath,val:node.value}}else{result={path:childPath}}matches.push(result);if(query.take!==0&&matches.length>Math.abs(query.take)+query.skip){if(querySort.length>0){sortMatches(matches)}else if(query.take>0){preliminaryStop=true}matches.pop()}};const p=batch.add(matchNode());if(p instanceof Promise){return p}}))}catch(reason){if(!(reason instanceof node_errors_1.NodeNotFoundError)){api.storage.debug.warn(`Error getting child stream: ${reason}`)}return[]}await Promise.all(batch.promises);stepsExecuted.preDataLoaded=loadPartialData;stepsExecuted.dataLoaded=!loadPartialData;if(querySort.length>0){sortMatches(matches)}stepsExecuted.sorted=true;if(query.skip>0){matches=query.take<0?matches.slice(0,-query.skip):matches.slice(query.skip)}stepsExecuted.skipped=true;if(query.take!==0){matches=query.take<0?matches.slice(query.take):matches.slice(0,query.take)}stepsExecuted.taken=true;if(!stepsExecuted.dataLoaded){matches=await loadResultsData(matches,{include:options.include,exclude:options.exclude,child_objects:options.child_objects});stepsExecuted.dataLoaded=true}return matches})).then((matches=>{if(!stepsExecuted.sorted&&querySort.length>0){sortMatches(matches)}if(!options.snapshots){matches=matches.map((match=>match.path))}if(!stepsExecuted.skipped&&query.skip>0){matches=query.take<0?matches.slice(0,-query.skip):matches.slice(query.skip)}if(!stepsExecuted.taken&&query.take!==0){matches=query.take<0?matches.slice(query.take):matches.slice(0,query.take)}if(options.monitor===true){options.monitor={add:true,change:true,remove:true}}let stop=async()=>{};if(typeof options.monitor==="object"&&(options.monitor.add||options.monitor.change||options.monitor.remove)){const matchedPaths=options.snapshots?matches.map((match=>match.path)):matches.slice();const ref=api.db.ref(path);const removeMatch=path=>{const index=matchedPaths.indexOf(path);if(index<0){return}matchedPaths.splice(index,1)};const addMatch=path=>{if(matchedPaths.includes(path)){return}matchedPaths.push(path)};const stopMonitoring=()=>{api.unsubscribe(ref.path,"child_changed",childChangedCallback);api.unsubscribe(ref.path,"child_added",childAddedCallback);api.unsubscribe(ref.path,"notify_child_removed",childRemovedCallback)};stop=async()=>{stopMonitoring()};const childChangedCallback=async(err,path,newValue,oldValue)=>{const wasMatch=matchedPaths.includes(path);let keepMonitoring=true;const checkKeys=[];queryFilters.forEach((f=>!checkKeys.includes(f.key)&&checkKeys.push(f.key)));const seenKeys=[];typeof oldValue==="object"&&Object.keys(oldValue).forEach((key=>!seenKeys.includes(key)&&seenKeys.push(key)));typeof newValue==="object"&&Object.keys(newValue).forEach((key=>!seenKeys.includes(key)&&seenKeys.push(key)));const missingKeys=[];let isMatch=seenKeys.every((key=>{if(!checkKeys.includes(key)){return true}const filters=queryFilters.filter((filter=>filter.key===key));return filters.every((filter=>{var _a;if(((_a=filter.index)===null||_a===void 0?void 0:_a.textLocaleKey)&&!seenKeys.includes(filter.index.textLocaleKey)){missingKeys.push(filter.index.textLocaleKey);return true}else if(allowedTableScanOperators.includes(filter.op)){return api.storage.test(newValue[key],filter.op,filter.compare)}else{return filter.index.test(newValue,filter.op,filter.compare)}}))}));if(isMatch){missingKeys.push(...checkKeys.filter((key=>!seenKeys.includes(key))));if(!wasMatch&&missingKeys.length>0){const filterQueue=queryFilters.filter((f=>missingKeys.includes(f.key)));const simpleFilters=filterQueue.filter((f=>allowedTableScanOperators.includes(f.op)));const indexFilters=filterQueue.filter((f=>!allowedTableScanOperators.includes(f.op)));if(simpleFilters.length>0){isMatch=await api.storage.matchNode(path,simpleFilters)}if(isMatch&&indexFilters.length>0){const keysToLoad=indexFilters.reduce(((keys,filter)=>{if(!keys.includes(filter.key)){keys.push(filter.key)}if(filter.index instanceof data_index_1.FullTextIndex&&filter.index.config.localeKey&&!keys.includes(filter.index.config.localeKey)){keys.push(filter.index.config.localeKey)}return keys}),[]);const node=await api.storage.getNode(path,{include:keysToLoad});if(node.value===null){return false}isMatch=indexFilters.every((filter=>filter.index.test(node.value,filter.op,filter.compare)))}}}if(isMatch){if(!wasMatch){addMatch(path)}if(options.snapshots){const loadOptions={include:options.include,exclude:options.exclude,child_objects:options.child_objects};const node=await api.storage.getNode(path,loadOptions);newValue=node.value}if(wasMatch&&options.monitor.change){keepMonitoring=options.eventHandler({name:"change",path:path,value:newValue})!==false}else if(!wasMatch&&options.monitor.add){keepMonitoring=options.eventHandler({name:"add",path:path,value:newValue})!==false}}else if(wasMatch){removeMatch(path);if(options.monitor.remove){keepMonitoring=options.eventHandler({name:"remove",path:path,value:oldValue})!==false}}if(keepMonitoring===false){stopMonitoring()}};const childAddedCallback=(err,path,newValue)=>{const isMatch=queryFilters.every((filter=>{if(allowedTableScanOperators.includes(filter.op)){return api.storage.test(newValue[filter.key],filter.op,filter.compare)}else{return filter.index.test(newValue,filter.op,filter.compare)}}));let keepMonitoring=true;if(isMatch){addMatch(path);if(options.monitor.add){keepMonitoring=options.eventHandler({name:"add",path:path,value:options.snapshots?newValue:null})!==false}}if(keepMonitoring===false){stopMonitoring()}};const childRemovedCallback=(err,path,newValue,oldValue)=>{let keepMonitoring=true;removeMatch(path);if(options.monitor.remove){keepMonitoring=options.eventHandler({name:"remove",path:path,value:options.snapshots?oldValue:null})!==false}if(keepMonitoring===false){stopMonitoring()}};if(options.monitor.add||options.monitor.change||options.monitor.remove){api.subscribe(ref.path,"child_changed",childChangedCallback)}if(options.monitor.remove){api.subscribe(ref.path,"notify_child_removed",childRemovedCallback)}if(options.monitor.add){api.subscribe(ref.path,"child_added",childAddedCallback)}}return{results:matches,context:context,stop:stop}}))}exports.query=query},{"./async-task-batch":30,"./data-index":39,"./node-errors":35,"./node-value-types":38,"acebase-core":12}],42:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createIndex=void 0;const acebase_core_1=require("acebase-core");const data_index_1=require("../data-index");const promise_fs_1=require("../promise-fs");async function createIndex(context,path,key,options){if(!context.storage.indexes.supported){throw new Error("Indexes are not supported in current environment because it requires Node.js fs")}const{ipc:ipc,debug:debug,indexes:indexes,storage:storage}=context;const rebuild=options&&options.rebuild===true;const indexType=options&&options.type||"normal";let includeKeys=options&&options.include||[];if(typeof includeKeys==="string"){includeKeys=[includeKeys]}const existingIndex=indexes.find((index=>index.path===path&&index.key===key&&index.type===indexType&&index.includeKeys.length===includeKeys.length&&index.includeKeys.every(((key,index)=>includeKeys[index]===key))));if(existingIndex&&options.config){existingIndex.config=options.config}if(existingIndex&&rebuild!==true){debug.log(`Index on "/${path}/*/${key}" already exists`.colorize(acebase_core_1.ColorStyle.inverse));return existingIndex}if(!ipc.isMaster){const result=await ipc.sendRequest({type:"index.create",path:path,key:key,options:options});if(result.ok){return this.add(result.fileName)}throw new Error(result.reason)}await promise_fs_1.pfs.mkdir(`${storage.settings.path}/${storage.name}.acebase`).catch((err=>{if(err.code!=="EEXIST"){throw err}}));const index=existingIndex||(()=>{const{include:include,caseSensitive:caseSensitive,textLocale:textLocale,textLocaleKey:textLocaleKey}=options;const indexOptions={include:include,caseSensitive:caseSensitive,textLocale:textLocale,textLocaleKey:textLocaleKey};switch(indexType){case"array":return new data_index_1.ArrayIndex(storage,path,key,Object.assign({},indexOptions));case"fulltext":return new data_index_1.FullTextIndex(storage,path,key,Object.assign(Object.assign({},indexOptions),{config:options.config}));case"geo":return new data_index_1.GeoIndex(storage,path,key,Object.assign({},indexOptions));default:return new data_index_1.DataIndex(storage,path,key,Object.assign({},indexOptions))}})();if(!existingIndex){indexes.push(index)}try{await index.build()}catch(err){context.debug.error(`Index build on "/${path}/*/${key}" failed: ${err.message} (code: ${err.code})`.colorize(acebase_core_1.ColorStyle.red));if(!existingIndex){indexes.splice(indexes.indexOf(index),1)}throw err}ipc.sendNotification({type:"index.created",fileName:index.fileName,path:path,key:key,options:options});return index}exports.createIndex=createIndex},{"../data-index":39,"../promise-fs":40,"acebase-core":12}],43:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.CustomStorageHelpers=void 0;const acebase_core_1=require("acebase-core");class CustomStorageHelpers{static ChildPathsSql(path,columnName="path"){const where=path===""?`${columnName} <> '' AND ${columnName} NOT LIKE '%/%'`:`(${columnName} LIKE '${path}/%' OR ${columnName} LIKE '${path}[%') AND ${columnName} NOT LIKE '${path}/%/%' AND ${columnName} NOT LIKE '${path}[%]/%' AND ${columnName} NOT LIKE '${path}[%][%'`;return where}static ChildPathsRegex(path){return new RegExp(`^${path}(?:/[^/[]+|\\[[0-9]+\\])$`)}static DescendantPathsSql(path,columnName="path"){const where=path===""?`${columnName} <> ''`:`${columnName} LIKE '${path}/%' OR ${columnName} LIKE '${path}[%'`;return where}static DescendantPathsRegex(path){return new RegExp(`^${path}(?:/[^/[]+|\\[[0-9]+\\])`)}static get PathInfo(){return acebase_core_1.PathInfo}}exports.CustomStorageHelpers=CustomStorageHelpers},{"acebase-core":12}],44:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.CustomStorage=exports.CustomStorageNodeInfo=exports.CustomStorageNodeAddress=exports.CustomStorageSettings=exports.CustomStorageTransaction=exports.ICustomStorageNode=exports.ICustomStorageNodeMetaData=exports.CustomStorageHelpers=void 0;const acebase_core_1=require("acebase-core");const{compareValues:compareValues}=acebase_core_1.Utils;const node_info_1=require("../../node-info");const node_lock_1=require("../../node-lock");const node_value_types_1=require("../../node-value-types");const node_errors_1=require("../../node-errors");const index_1=require("../index");const helpers_1=require("./helpers");const node_address_1=require("../../node-address");var helpers_2=require("./helpers");Object.defineProperty(exports,"CustomStorageHelpers",{enumerable:true,get:function(){return helpers_2.CustomStorageHelpers}});class ICustomStorageNodeMetaData{constructor(){this.revision="";this.revision_nr=0;this.created=0;this.modified=0;this.type=0}}exports.ICustomStorageNodeMetaData=ICustomStorageNodeMetaData;class ICustomStorageNode extends ICustomStorageNodeMetaData{constructor(){super();this.value=null}}exports.ICustomStorageNode=ICustomStorageNode;class CustomStorageTransaction{constructor(target){this.production=false;this.target={get originalPath(){return target.path},path:target.path,get write(){return target.write}};this.id=acebase_core_1.ID.generate()}async getChildCount(path){let childCount=0;await this.childrenOf(path,{metadata:false,value:false},(()=>{childCount++;return false}));return childCount}async getMultiple(paths){const map=new Map;await Promise.all(paths.map((path=>this.get(path).then((val=>map.set(path,val))))));return map}async setMultiple(nodes){await Promise.all(nodes.map((({path:path,node:node})=>this.set(path,node))))}async removeMultiple(paths){await Promise.all(paths.map((path=>this.remove(path))))}async commit(){throw new Error(`CustomStorageTransaction.rollback must be overridden by subclass`)}async moveToParentPath(targetPath){const currentPath=this._lock&&this._lock.path||this.target.path;if(currentPath===targetPath){return targetPath}const pathInfo=helpers_1.CustomStorageHelpers.PathInfo.get(targetPath);if(pathInfo.isParentOf(currentPath)){if(this._lock){this._lock=await this._lock.moveToParent()}}else{throw new Error(`Locking issue. Locked path "${this._lock.path}" is not a child/descendant of "${targetPath}"`)}this.target.path=targetPath;return targetPath}}exports.CustomStorageTransaction=CustomStorageTransaction;class CustomStorageSettings extends index_1.StorageSettings{constructor(settings){super(settings);this.locking=true;if(typeof settings!=="object"){throw new Error("settings missing")}if(typeof settings.ready!=="function"){throw new Error(`ready must be a function`)}if(typeof settings.getTransaction!=="function"){throw new Error(`getTransaction must be a function`)}this.name=settings.name;this.locking=settings.locking!==false;if(this.locking){this.lockTimeout=typeof settings.lockTimeout==="number"?settings.lockTimeout:120}this.ready=settings.ready;const useLocking=this.locking;const nodeLocker=useLocking?new node_lock_1.NodeLocker(console,this.lockTimeout):null;this.getTransaction=async({path:path,write:write})=>{const transaction=await settings.getTransaction({path:path,write:write});console.assert(typeof transaction.id==="string",`transaction id not set`);const rollback=transaction.rollback;const commit=transaction.commit;transaction.commit=async()=>{const ret=await commit.call(transaction);if(useLocking){await transaction._lock.release("commit")}return ret};transaction.rollback=async reason=>{const ret=await rollback.call(transaction,reason);if(useLocking){await transaction._lock.release("rollback")}return ret};if(useLocking){transaction._lock=await nodeLocker.lock(path,transaction.id,write,`${this.name}::getTransaction`)}return transaction}}}exports.CustomStorageSettings=CustomStorageSettings;class CustomStorageNodeAddress{constructor(containerPath){this.path=containerPath}}exports.CustomStorageNodeAddress=CustomStorageNodeAddress;class CustomStorageNodeInfo extends node_info_1.NodeInfo{constructor(info){super(info);this.revision=info.revision;this.revision_nr=info.revision_nr;this.created=info.created;this.modified=info.modified}}exports.CustomStorageNodeInfo=CustomStorageNodeInfo;class CustomStorage extends index_1.Storage{constructor(dbname,settings,env){super(dbname,settings,env);this._customImplementation=settings;this._init()}async _init(){this.debug.log(`Database "${this.name}" details:`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Type: CustomStorage`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Path: ${this.settings.path}`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Max inline value size: ${this.settings.maxInlineValueSize}`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Autoremove undefined props: ${this.settings.removeVoidProperties}`.colorize(acebase_core_1.ColorStyle.dim));await this._customImplementation.ready();const transaction=await this._customImplementation.getTransaction({path:"",write:true});const info=await this.getNodeInfo("",{transaction:transaction});if(!info.exists){await this._writeNode("",{},{transaction:transaction})}await transaction.commit();if(this.indexes.supported){await this.indexes.load()}this.emit("ready")}throwImplementationError(message){throw new Error(`CustomStorage "${this._customImplementation.name}" ${message}`)}_storeNode(path,node,options){const getTypedChildValue=val=>{if(val===null){throw new Error(`Not allowed to store null values. remove the property`)}else if(["string","number","boolean"].includes(typeof val)){return val}else if(val instanceof Date){return{type:node_value_types_1.VALUE_TYPES.DATETIME,value:val.getTime()}}else if(val instanceof acebase_core_1.PathReference){return{type:node_value_types_1.VALUE_TYPES.REFERENCE,value:val.path}}else if(val instanceof ArrayBuffer){return{type:node_value_types_1.VALUE_TYPES.BINARY,value:acebase_core_1.ascii85.encode(val)}}else if(typeof val==="object"){console.assert(Object.keys(val).length===0,"child object stored in parent can only be empty");return val}};const unprocessed=`Caller should have pre-processed the value by converting it to a string`;if(node.type===node_value_types_1.VALUE_TYPES.ARRAY&&node.value instanceof Array){console.warn(`Unprocessed array. ${unprocessed}`);const obj={};for(let i=0;i{node.value[key]=getTypedChildValue(original[key])}))}return options.transaction.set(path,node)}_processReadNodeValue(node){const getTypedChildValue=val=>{if(val.type===node_value_types_1.VALUE_TYPES.BINARY){return acebase_core_1.ascii85.decode(val.value)}else if(val.type===node_value_types_1.VALUE_TYPES.DATETIME){return new Date(val.value)}else if(val.type===node_value_types_1.VALUE_TYPES.REFERENCE){return new acebase_core_1.PathReference(val.value)}else{throw new Error(`Unhandled child value type ${val.type}`)}};switch(node.type){case node_value_types_1.VALUE_TYPES.ARRAY:case node_value_types_1.VALUE_TYPES.OBJECT:{const obj=node.value;Object.keys(obj).forEach((key=>{const item=obj[key];if(typeof item==="object"&&"type"in item){obj[key]=getTypedChildValue(item)}}));node.value=obj;break}case node_value_types_1.VALUE_TYPES.BINARY:{node.value=acebase_core_1.ascii85.decode(node.value);break}case node_value_types_1.VALUE_TYPES.REFERENCE:{node.value=new acebase_core_1.PathReference(node.value);break}case node_value_types_1.VALUE_TYPES.STRING:{break}default:throw new Error(`Invalid standalone record value type`)}}async _readNode(path,options){const node=await options.transaction.get(path);if(node===null){return null}if(typeof node!=="object"){this.throwImplementationError(`transaction.get must return an ICustomStorageNode object. Use JSON.parse if your set function stored it as a string`)}this._processReadNodeValue(node);return node}_getTypeFromStoredValue(val){let type;if(typeof val==="string"){type=node_value_types_1.VALUE_TYPES.STRING}else if(typeof val==="number"){type=node_value_types_1.VALUE_TYPES.NUMBER}else if(typeof val==="boolean"){type=node_value_types_1.VALUE_TYPES.BOOLEAN}else if(val instanceof Array){type=node_value_types_1.VALUE_TYPES.ARRAY}else if(typeof val==="object"){if("type"in val){const serialized=val;type=serialized.type;val=serialized.value;if(type===node_value_types_1.VALUE_TYPES.DATETIME){val=new Date(val)}else if(type===node_value_types_1.VALUE_TYPES.REFERENCE){val=new acebase_core_1.PathReference(val)}}else{type=node_value_types_1.VALUE_TYPES.OBJECT}}else{throw new Error(`Unknown value type`)}return{type:type,value:val}}async _writeNode(path,value,options){if(!options.merge&&this.valueFitsInline(value)&&path!==""){throw new Error(`invalid value to store in its own node`)}else if(path===""&&(typeof value!=="object"||value instanceof Array)){throw new Error(`Invalid root node value. Must be an object`)}if(typeof options.diff==="undefined"&&typeof options.currentValue!=="undefined"){const diff=compareValues(options.currentValue,value);if(options.merge&&typeof diff==="object"){diff.removed=diff.removed.filter((key=>value[key]===null))}options.diff=diff}if(options.diff==="identical"){return}const transaction=options.transaction;const currentRow=options.currentValue===null?null:await this._readNode(path,{transaction:transaction});if(options.merge&¤tRow){if(currentRow.type===node_value_types_1.VALUE_TYPES.ARRAY&&!(value instanceof Array)&&typeof value==="object"&&Object.keys(value).some((key=>isNaN(parseInt(key))))){throw new Error(`Cannot merge existing array of path "${path}" with an object`)}if(value instanceof Array&¤tRow.type!==node_value_types_1.VALUE_TYPES.ARRAY){throw new Error(`Cannot merge existing object of path "${path}" with an array`)}}const revision=options.revision||acebase_core_1.ID.generate();const mainNode={type:currentRow&¤tRow.type===node_value_types_1.VALUE_TYPES.ARRAY?node_value_types_1.VALUE_TYPES.ARRAY:node_value_types_1.VALUE_TYPES.OBJECT,value:{}};const childNodeValues={};if(value instanceof Array){mainNode.type=node_value_types_1.VALUE_TYPES.ARRAY;const obj={};for(let i=0;i{if(!(key in value)){value[key]=null}}))}Object.keys(value).forEach((key=>{const val=value[key];delete mainNode.value[key];if(val===null){return}else if(typeof val==="undefined"){if(this.settings.removeVoidProperties===true){delete value[key];return}else{throw new Error(`Property "${key}" has invalid value. Cannot store undefined values. Set removeVoidProperties option to true to automatically remove undefined properties`)}}if(this.valueFitsInline(val)){mainNode.value[key]=val}else{childNodeValues[key]=val}}))}const isArray=mainNode.type===node_value_types_1.VALUE_TYPES.ARRAY;if(currentRow){this.debug.log(`Node "/${path}" is being ${options.merge?"updated":"overwritten"}`.colorize(acebase_core_1.ColorStyle.cyan));if(currentIsObjectOrArray||newIsObjectOrArray){const pathInfo=acebase_core_1.PathInfo.get(path);const keys=[];let checkExecuted=false;const includeChildCheck=childPath=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isParentOf(childPath)){this.throwImplementationError(`"${childPath}" is not a child of "${path}" - childrenOf must only check and return paths that are children`)}return true};const addChildPath=childPath=>{if(!checkExecuted){this.throwImplementationError(`childrenOf did not call checkCallback before addCallback`)}const key=acebase_core_1.PathInfo.get(childPath).key;keys.push(key.toString());return true};await transaction.childrenOf(path,{metadata:false,value:false},includeChildCheck,addChildPath);children.current=children.current.concat(keys);if(newIsObjectOrArray){if(options&&options.merge){children.new=children.current.slice()}Object.keys(value).forEach((key=>{if(!children.new.includes(key)){children.new.push(key)}}))}const changes={insert:children.new.filter((key=>!children.current.includes(key))),update:[],delete:options&&options.merge?Object.keys(value).filter((key=>value[key]===null)):children.current.filter((key=>!children.new.includes(key)))};changes.update=children.new.filter((key=>children.current.includes(key)&&!changes.delete.includes(key)));if(isArray&&options.merge&&(changes.insert.length>0||changes.delete.length>0)){const newArrayKeys=changes.update.concat(changes.insert);const isExhaustive=newArrayKeys.every(((k,index,arr)=>arr.includes(index.toString())));if(!isExhaustive){throw new Error(`Elements cannot be inserted beyond, or removed before the end of an array. Rewrite the whole array at path "${path}" or change your schema to use an object collection instead`)}}const writePromises=Object.keys(childNodeValues).map((key=>{const keyOrIndex=isArray?parseInt(key):key;const childDiff=typeof options.diff==="object"?options.diff.forChild(keyOrIndex):undefined;if(childDiff==="identical"){return}const childPath=pathInfo.childPath(keyOrIndex);const childValue=childNodeValues[keyOrIndex];const currentChildValue=typeof options.currentValue==="undefined"?undefined:options.currentValue!==null&&typeof options.currentValue==="object"&&keyOrIndex in options.currentValue?options.currentValue[keyOrIndex]:null;return this._writeNode(childPath,childValue,{transaction:transaction,revision:revision,merge:false,currentValue:currentChildValue,diff:childDiff})}));const movingNodes=newIsObjectOrArray?keys.filter((key=>key in mainNode.value)):[];const deleteDedicatedKeys=changes.delete.concat(movingNodes);const deletePromises=deleteDedicatedKeys.map((key=>{const keyOrIndex=isArray?parseInt(key):key;const childPath=pathInfo.childPath(keyOrIndex);return this._deleteNode(childPath,{transaction:transaction})}));const promises=writePromises.concat(deletePromises);await Promise.all(promises)}const p=this._storeNode(path,{type:mainNode.type,value:mainNode.value,revision:currentRow.revision,revision_nr:currentRow.revision_nr+1,created:currentRow.created,modified:Date.now()},{transaction:transaction});if(p instanceof Promise){return await p}}else{this.debug.log(`Node "/${path}" is being created`.colorize(acebase_core_1.ColorStyle.cyan));if(isArray){const arrayKeys=Object.keys(mainNode.value).concat(Object.keys(childNodeValues));const isExhaustive=arrayKeys.every(((k,index,arr)=>arr.includes(index.toString())));if(!isExhaustive){throw new Error(`Cannot store arrays with missing entries`)}}const promises=Object.keys(childNodeValues).map((key=>{const keyOrIndex=isArray?parseInt(key):key;const childPath=acebase_core_1.PathInfo.getChildPath(path,keyOrIndex);const childValue=childNodeValues[keyOrIndex];return this._writeNode(childPath,childValue,{transaction:transaction,revision:revision,merge:false,currentValue:null})}));const p=this._storeNode(path,{type:mainNode.type,value:mainNode.value,revision:revision,revision_nr:1,created:Date.now(),modified:Date.now()},{transaction:transaction});if(p instanceof Promise){promises.push(p)}await Promise.all(promises)}}async _deleteNode(path,options){const pathInfo=acebase_core_1.PathInfo.get(path);this.debug.log(`Node "/${path}" is being deleted`.colorize(acebase_core_1.ColorStyle.cyan));const deletePaths=[path];let checkExecuted=false;const includeDescendantCheck=descPath=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isAncestorOf(descPath)){this.throwImplementationError(`"${descPath}" is not a descendant of "${path}" - descendantsOf must only check and return paths that are descendants`)}return true};const addDescendant=descPath=>{if(!checkExecuted){this.throwImplementationError(`descendantsOf did not call checkCallback before addCallback`)}deletePaths.push(descPath);return true};const transaction=options.transaction;await transaction.descendantsOf(path,{metadata:false,value:false},includeDescendantCheck,addDescendant);this.debug.log(`Nodes ${deletePaths.map((p=>`"/${p}"`)).join(",")} are being deleted`.colorize(acebase_core_1.ColorStyle.cyan));return transaction.removeMultiple(deletePaths)}getChildren(path,options={}){let callback;const generator={next(valueCallback){callback=valueCallback;return start()}};const start=async()=>{const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:false});try{let canceled=false;await(async()=>{const node=await this._readNode(path,{transaction:transaction});if(!node){throw new node_errors_1.NodeNotFoundError(`Node "/${path}" does not exist`)}if(![node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(node.type)){return}const isArray=node.type===node_value_types_1.VALUE_TYPES.ARRAY;const value=node.value;let keys=Object.keys(value).map((key=>isArray?parseInt(key):key));if(options.keyFilter){keys=keys.filter((key=>options.keyFilter.includes(key)))}const pathInfo=acebase_core_1.PathInfo.get(path);keys.length>0&&keys.every((key=>{const child=this._getTypeFromStoredValue(value[key]);const info=new CustomStorageNodeInfo({path:pathInfo.childPath(key),key:isArray?null:key,index:isArray?key:null,type:child.type,address:null,exists:true,value:child.value,revision:node.revision,revision_nr:node.revision_nr,created:new Date(node.created),modified:new Date(node.modified)});canceled=callback(info)===false;return!canceled}));if(canceled){return}let checkExecuted=false;const includeChildCheck=childPath=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isParentOf(childPath)){this.throwImplementationError(`"${childPath}" is not a child of "${path}" - childrenOf must only check and return paths that are children`)}if(options.keyFilter){const key=acebase_core_1.PathInfo.get(childPath).key;return options.keyFilter.includes(key)}return true};const addChildNode=(childPath,node)=>{if(!checkExecuted){this.throwImplementationError(`childrenOf did not call checkCallback before addCallback`)}const key=acebase_core_1.PathInfo.get(childPath).key;const info=new CustomStorageNodeInfo({path:childPath,type:node.type,key:isArray?null:key,index:isArray?key:null,address:new node_address_1.NodeAddress(childPath),exists:true,value:null,revision:node.revision,revision_nr:node.revision_nr,created:new Date(node.created),modified:new Date(node.modified)});canceled=callback(info)===false;return!canceled};await transaction.childrenOf(path,{metadata:true,value:false},includeChildCheck,addChildNode)})();if(!options.transaction){await transaction.commit()}return canceled}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}};return generator}async getNode(path,options){options=options||{};const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:false});try{const node=await(async()=>{const filtered=options.include&&options.include.length>0||options.exclude&&options.exclude.length>0||options.child_objects===false;const pathInfo=acebase_core_1.PathInfo.get(path);const targetNode=await this._readNode(path,{transaction:transaction});if(!targetNode){if(path===""){return{value:null}}const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);const parentNode=await this._readNode(pathInfo.parentPath,{transaction:transaction});if(parentNode&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(parentNode.type)&&pathInfo.key in parentNode.value){const childValueInfo=this._getTypeFromStoredValue(parentNode.value[pathInfo.key]);return{revision:parentNode.revision,revision_nr:parentNode.revision_nr,created:parentNode.created,modified:parentNode.modified,type:childValueInfo.type,value:childValueInfo.value}}return{value:null}}const isArray=targetNode.type===node_value_types_1.VALUE_TYPES.ARRAY;const convertFilterArray=arr=>{const isNumber=key=>/^[0-9]+$/.test(key);return arr.map((path=>acebase_core_1.PathInfo.get(isArray&&isNumber(path)?`[${path}]`:path)))};const includeFilter=options.include?convertFilterArray(options.include):[];const excludeFilter=options.exclude?convertFilterArray(options.exclude):[];const applyFiltersOnInlineData=(descPath,node)=>{if([node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(node.type)&&includeFilter.length>0){const trailKeys=acebase_core_1.PathInfo.getPathKeys(descPath).slice(pathInfo.keys.length);const checkPathInfo=new acebase_core_1.PathInfo(trailKeys);const remove=[];const includes=includeFilter.filter((info=>info.isDescendantOf(checkPathInfo)));if(includes.length>0){const isArray=node.type===node_value_types_1.VALUE_TYPES.ARRAY;remove.push(...Object.keys(node.value).map((key=>isArray?+key:key)));for(const info of includes){const targetProp=info.keys[trailKeys.length];if(typeof targetProp==="string"&&(targetProp==="*"||targetProp.startsWith("$"))){remove.splice(0);break}const index=remove.indexOf(targetProp);index>=0&&remove.splice(index,1)}}const hasIncludeOnChild=includeFilter.some((info=>info.isChildOf(checkPathInfo)));const hasExcludeOnChild=excludeFilter.some((info=>info.isChildOf(checkPathInfo)));if(hasExcludeOnChild&&!hasIncludeOnChild){const excludes=excludeFilter.filter((info=>info.isChildOf(checkPathInfo)));for(let i=0;iinfo.equals(remove[i])))){remove.splice(i,1);i--}}}for(const key of remove){delete node.value[key]}}};applyFiltersOnInlineData(path,targetNode);let checkExecuted=false;const includeDescendantCheck=(descPath,metadata)=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isAncestorOf(descPath)){this.throwImplementationError(`"${descPath}" is not a descendant of "${path}" - descendantsOf must only check and return paths that are descendants`)}if(!filtered){return true}const descPathKeys=acebase_core_1.PathInfo.getPathKeys(descPath);const trailKeys=descPathKeys.slice(pathInfo.keys.length);const checkPathInfo=new acebase_core_1.PathInfo(trailKeys);let include=(includeFilter.length>0?includeFilter.some((info=>checkPathInfo.isOnTrailOf(info))):true)&&(excludeFilter.length>0?!excludeFilter.some((info=>info.equals(checkPathInfo)||info.isAncestorOf(checkPathInfo))):true);if(include&&options.child_objects===false&&(pathInfo.isParentOf(descPath)&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(metadata?metadata.type:-1)||acebase_core_1.PathInfo.getPathKeys(descPath).length>pathInfo.pathKeys.length+1)){include=false}return include};const descRows=[];const addDescendant=(descPath,node)=>{if(!checkExecuted){this.throwImplementationError("descendantsOf did not call checkCallback before addCallback")}if(options.child_objects===false&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(node.type)){return true}applyFiltersOnInlineData(descPath,node);this._processReadNodeValue(node);const row=node;row.path=descPath;descRows.push(row);return true};await transaction.descendantsOf(path,{metadata:true,value:true},includeDescendantCheck,addDescendant);this.debug.log(`Read node "/${path}" and ${filtered?"(filtered) ":""}descendants from ${descRows.length+1} records`.colorize(acebase_core_1.ColorStyle.magenta));const result=targetNode;const objectToArray=obj=>{const arr=[];Object.keys(obj).forEach((key=>{const index=parseInt(key);arr[index]=obj[index]}));return arr};if(targetNode.type===node_value_types_1.VALUE_TYPES.ARRAY){result.value=objectToArray(result.value)}if(targetNode.type===node_value_types_1.VALUE_TYPES.OBJECT||targetNode.type===node_value_types_1.VALUE_TYPES.ARRAY){const targetPathKeys=acebase_core_1.PathInfo.getPathKeys(path);const value=targetNode.value;for(let i=0;i{if(childKey in parent[key]){this.throwImplementationError(`Custom storage merge error: child key "${childKey}" is in parent value already! Make sure the get/childrenOf/descendantsOf methods of the custom storage class return values that can be modified by AceBase without affecting the stored source`)}parent[key][childKey]=nodeValue[childKey]}))}}else{parent[key]=nodeValue}parent=parent[key]}}}else if(descRows.length>0){this.throwImplementationError(`multiple records found for non-object value!`)}if(options.child_objects===false){Object.keys(result.value).forEach((key=>{if(typeof result.value[key]==="object"&&result.value[key].constructor===Object){console.assert(Object.keys(result.value[key]).length===0);delete result.value[key]}}))}if(options.include){}if(options.exclude){const process=(obj,keys)=>{if(typeof obj!=="object"){return}const key=keys[0];if(key==="*"){Object.keys(obj).forEach((k=>{process(obj[k],keys.slice(1))}))}else if(keys.length>1){key in obj&&process(obj[key],keys.slice(1))}else{delete obj[key]}};options.exclude.forEach((path=>{const checkKeys=acebase_core_1.PathInfo.getPathKeys(path);process(result.value,checkKeys)}))}return result})();if(!options.transaction){await transaction.commit()}return node}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}async getNodeInfo(path,options={}){options=options||{};const pathInfo=acebase_core_1.PathInfo.get(path);const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:false});try{const node=await this._readNode(path,{transaction:transaction});const info=new CustomStorageNodeInfo({path:path,key:typeof pathInfo.key==="string"?pathInfo.key:null,index:typeof pathInfo.key==="number"?pathInfo.key:null,type:node?node.type:0,exists:node!==null,address:node?new node_address_1.NodeAddress(path):null,created:node?new Date(node.created):null,modified:node?new Date(node.modified):null,revision:node?node.revision:null,revision_nr:node?node.revision_nr:null});if(!node&&path!==""){const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);const parent=await this._readNode(pathInfo.parentPath,{transaction:transaction});if(parent&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(parent.type)&&pathInfo.key in parent.value){info.exists=true;info.value=parent.value[pathInfo.key];info.address=null;info.type=parent.type;info.created=new Date(parent.created);info.modified=new Date(parent.modified);info.revision=parent.revision;info.revision_nr=parent.revision_nr}else{info.address=null}}if(options.include_child_count){info.childCount=0;if([node_value_types_1.VALUE_TYPES.ARRAY,node_value_types_1.VALUE_TYPES.OBJECT].includes(info.valueType)&&info.address){info.childCount=node.value?Object.keys(node.value).length:0;info.childCount+=await transaction.getChildCount(path)}}if(!options.transaction){await transaction.commit()}return info}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}async setNode(path,value,options={suppress_events:false,context:null}){if(this.settings.readOnly){throw new Error(`Database is opened in read-only mode`)}const pathInfo=acebase_core_1.PathInfo.get(path);const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:true});try{if(path===""){if(value===null||typeof value!=="object"||value instanceof Array||value instanceof ArrayBuffer||"buffer"in value&&value.buffer instanceof ArrayBuffer){throw new Error(`Invalid value for root node: ${value}`)}await this._writeNodeWithTracking("",value,{merge:false,transaction:transaction,suppress_events:options.suppress_events,context:options.context})}else if(typeof options.assert_revision!=="undefined"){const info=await this.getNodeInfo(path,{transaction:transaction});if(info.revision!==options.assert_revision){throw new node_errors_1.NodeRevisionError(`revision '${info.revision}' does not match requested revision '${options.assert_revision}'`)}if(info.address&&info.address.path===path&&value!==null&&!this.valueFitsInline(value)){await this._writeNodeWithTracking(path,value,{merge:false,transaction:transaction,suppress_events:options.suppress_events,context:options.context})}else{const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this._writeNodeWithTracking(pathInfo.parentPath,{[pathInfo.key]:value},{merge:true,transaction:transaction,suppress_events:options.suppress_events,context:options.context})}}else{const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this.updateNode(pathInfo.parentPath,{[pathInfo.key]:value},{transaction:transaction,suppress_events:options.suppress_events,context:options.context})}if(!options.transaction){await transaction.commit()}}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}async updateNode(path,updates,options={suppress_events:false,context:null}){if(this.settings.readOnly){throw new Error(`Database is opened in read-only mode`)}if(typeof updates!=="object"){throw new Error(`invalid updates argument`)}else if(Object.keys(updates).length===0){return}const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:true});try{const nodeInfo=await this.getNodeInfo(path,{transaction:transaction});const pathInfo=acebase_core_1.PathInfo.get(path);if(nodeInfo.exists&&nodeInfo.address&&nodeInfo.address.path===path){await this._writeNodeWithTracking(path,updates,{transaction:transaction,merge:true,suppress_events:options.suppress_events,context:options.context})}else if(nodeInfo.exists){const pathInfo=acebase_core_1.PathInfo.get(path);const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this._writeNodeWithTracking(pathInfo.parentPath,{[pathInfo.key]:updates},{transaction:transaction,merge:true,suppress_events:options.suppress_events,context:options.context})}else{const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this.updateNode(pathInfo.parentPath,{[pathInfo.key]:updates},{transaction:transaction,suppress_events:options.suppress_events,context:options.context})}if(!options.transaction){await transaction.commit()}}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}}exports.CustomStorage=CustomStorage},{"../../node-address":34,"../../node-errors":35,"../../node-info":36,"../../node-lock":37,"../../node-value-types":38,"../index":51,"./helpers":43,"acebase-core":12}],45:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createIndexedDBInstance=void 0;const acebase_core_1=require("acebase-core");const __1=require("..");const __2=require("../../..");const settings_1=require("./settings");const transaction_1=require("./transaction");function createIndexedDBInstance(dbname,init={}){const settings=new settings_1.IndexedDBStorageSettings(init);const IndexedDB=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;const request=IndexedDB.open(`${dbname}.acebase`,1);request.onupgradeneeded=e=>{const db=request.result;db.createObjectStore("nodes",{keyPath:"path"});db.createObjectStore("content")};let idb;const readyPromise=new Promise(((resolve,reject)=>{request.onsuccess=e=>{idb=request.result;resolve()};request.onerror=e=>{reject(e)}}));const cache=new acebase_core_1.SimpleCache(typeof settings.cacheSeconds==="number"?settings.cacheSeconds:60);const storageSettings=new __1.CustomStorageSettings({name:"IndexedDB",locking:true,removeVoidProperties:settings.removeVoidProperties,maxInlineValueSize:settings.maxInlineValueSize,lockTimeout:settings.lockTimeout,ready(){return readyPromise},async getTransaction(target){await readyPromise;const context={debug:false,db:idb,cache:cache,ipc:ipc};return new transaction_1.IndexedDBStorageTransaction(context,target)}});const db=new __2.AceBase(dbname,{logLevel:settings.logLevel,storage:storageSettings,sponsor:settings.sponsor});const ipc=db.api.storage.ipc;db.settings.ipcEvents=settings.multipleTabs===true;ipc.on("notification",(async notification=>{const message=notification.data;if(typeof message!=="object"){return}if(message.action==="cache.invalidate"){for(const path of message.paths){cache.remove(path)}}}));return db}exports.createIndexedDBInstance=createIndexedDBInstance},{"..":44,"../../..":31,"./settings":46,"./transaction":47,"acebase-core":12}],46:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.IndexedDBStorageSettings=void 0;const __1=require("../..");class IndexedDBStorageSettings extends __1.StorageSettings{constructor(settings){super(settings);this.multipleTabs=false;this.cacheSeconds=60;this.sponsor=false;if(typeof settings.logLevel==="string"){this.logLevel=settings.logLevel}if(typeof settings.multipleTabs==="boolean"){this.multipleTabs=settings.multipleTabs}if(typeof settings.cacheSeconds==="number"){this.cacheSeconds=settings.cacheSeconds}if(typeof settings.sponsor==="boolean"){this.sponsor=settings.sponsor}["type","ipc","path"].forEach((prop=>{if(prop in settings){console.warn(`${prop} setting is not supported for AceBase IndexedDBStorage`)}}))}}exports.IndexedDBStorageSettings=IndexedDBStorageSettings},{"../..":51}],47:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.IndexedDBStorageTransaction=void 0;const __1=require("..");function _requestToPromise(request){return new Promise(((resolve,reject)=>{request.onsuccess=event=>resolve(request.result||null);request.onerror=reject}))}class IndexedDBStorageTransaction extends __1.CustomStorageTransaction{constructor(context,target){super(target);this.context=context;this.production=true;this._pending=[]}_createTransaction(write=false){const tx=this.context.db.transaction(["nodes","content"],write?"readwrite":"readonly");return tx}_splitMetadata(node){const value=node.value;const copy=Object.assign({},node);delete copy.value;const metadata=copy;return{metadata:metadata,value:value}}async commit(){if(this._pending.length===0){return}const batch=this._pending.splice(0);this.context.ipc.sendNotification({action:"cache.invalidate",paths:batch.map((op=>op.path))});const tx=this._createTransaction(true);try{await new Promise(((resolve,reject)=>{let stop=false,processed=0;const handleError=err=>{stop=true;reject(err)};const handleSuccess=()=>{if(++processed===batch.length){resolve()}};batch.forEach(((op,i)=>{if(stop){return}let r1,r2;const path=op.path;if(op.action==="set"){const{metadata:metadata,value:value}=this._splitMetadata(op.node);const nodeInfo={path:path,metadata:metadata};r1=tx.objectStore("nodes").put(nodeInfo);r2=tx.objectStore("content").put(value,path);this.context.cache.set(path,op.node)}else if(op.action==="remove"){r1=tx.objectStore("content").delete(path);r2=tx.objectStore("nodes").delete(path);this.context.cache.set(path,null)}else{handleError(new Error(`Unknown pending operation "${op.action}" on path "${path}" `))}let succeeded=0;r1.onsuccess=r2.onsuccess=()=>{if(++succeeded===2){handleSuccess()}};r1.onerror=r2.onerror=handleError}))}));tx.commit&&tx.commit()}catch(err){console.error(err);tx.abort&&tx.abort();throw err}}async rollback(err){this._pending=[]}async get(path){if(this.context.cache.has(path)){const cache=this.context.cache.get(path);return cache}const tx=this._createTransaction(false);const r1=_requestToPromise(tx.objectStore("nodes").get(path));const r2=_requestToPromise(tx.objectStore("content").get(path));try{const results=await Promise.all([r1,r2]);tx.commit&&tx.commit();const info=results[0];if(!info){this.context.cache.set(path,null);return null}const node=info.metadata;node.value=results[1];this.context.cache.set(path,node);return node}catch(err){console.error(`IndexedDB get error`,err);tx.abort&&tx.abort();throw err}}set(path,node){this._pending.push({action:"set",path:path,node:node})}remove(path){this._pending.push({action:"remove",path:path})}async removeMultiple(paths){paths.forEach((path=>{this._pending.push({action:"remove",path:path})}))}childrenOf(path,include,checkCallback,addCallback){return this._getChildrenOf(path,Object.assign(Object.assign({},include),{descendants:false}),checkCallback,addCallback)}descendantsOf(path,include,checkCallback,addCallback){return this._getChildrenOf(path,Object.assign(Object.assign({},include),{descendants:true}),checkCallback,addCallback)}_getChildrenOf(path,include,checkCallback,addCallback){return new Promise(((resolve,reject)=>{const pathInfo=__1.CustomStorageHelpers.PathInfo.get(path);const tx=this._createTransaction(false);const store=tx.objectStore("nodes");const query=IDBKeyRange.lowerBound(path,true);const cursor=include.metadata?store.openCursor(query):store.openKeyCursor(query);cursor.onerror=e=>{var _a;(_a=tx.abort)===null||_a===void 0?void 0:_a.call(tx);reject(e)};cursor.onsuccess=async e=>{var _a,_b,_c;const otherPath=(_b=(_a=cursor.result)===null||_a===void 0?void 0:_a.key)!==null&&_b!==void 0?_b:null;let keepGoing=true;if(otherPath===null){keepGoing=false}else if(!pathInfo.isAncestorOf(otherPath)){keepGoing=false}else if(include.descendants||pathInfo.isParentOf(otherPath)){let node;if(include.metadata){const valueCursor=cursor;const data=valueCursor.result.value;node=data.metadata}const shouldAdd=checkCallback(otherPath,node);if(shouldAdd){if(include.value){if(this.context.cache.has(otherPath)){const cache=this.context.cache.get(otherPath);node.value=cache.value}else{const req=tx.objectStore("content").get(otherPath);node.value=await new Promise(((resolve,reject)=>{req.onerror=e=>{resolve(null)};req.onsuccess=e=>{resolve(req.result)}}));this.context.cache.set(otherPath,node.value===null?null:node)}}keepGoing=addCallback(otherPath,node)}}if(keepGoing){try{cursor.result.continue()}catch(err){keepGoing=false}}if(!keepGoing){(_c=tx.commit)===null||_c===void 0?void 0:_c.call(tx);resolve()}}}))}}exports.IndexedDBStorageTransaction=IndexedDBStorageTransaction},{"..":44}],48:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createLocalStorageInstance=exports.LocalStorageTransaction=exports.LocalStorageSettings=void 0;const __1=require("..");const __2=require("../../..");const settings_1=require("./settings");Object.defineProperty(exports,"LocalStorageSettings",{enumerable:true,get:function(){return settings_1.LocalStorageSettings}});const transaction_1=require("./transaction");Object.defineProperty(exports,"LocalStorageTransaction",{enumerable:true,get:function(){return transaction_1.LocalStorageTransaction}});function createLocalStorageInstance(dbname,init={}){const settings=new settings_1.LocalStorageSettings(init);const localStorage=settings.provider?settings.provider:settings.temp?window.localStorage:window.sessionStorage;const storageSettings=new __1.CustomStorageSettings({name:"LocalStorage",locking:true,removeVoidProperties:settings.removeVoidProperties,maxInlineValueSize:settings.maxInlineValueSize,ready(){return Promise.resolve()},getTransaction(target){const context={debug:true,dbname:dbname,localStorage:localStorage};const transaction=new transaction_1.LocalStorageTransaction(context,target);return Promise.resolve(transaction)}});const db=new __2.AceBase(dbname,{logLevel:settings.logLevel,storage:storageSettings,sponsor:settings.sponsor});db.settings.ipcEvents=settings.multipleTabs===true;return db}exports.createLocalStorageInstance=createLocalStorageInstance},{"..":44,"../../..":31,"./settings":49,"./transaction":50}],49:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.LocalStorageSettings=void 0;const __1=require("../..");class LocalStorageSettings extends __1.StorageSettings{constructor(settings){super(settings);this.temp=false;this.multipleTabs=false;if(typeof settings.temp==="boolean"){this.temp=settings.temp}if(typeof settings.provider==="object"){this.provider=settings.provider}if(typeof settings.multipleTabs==="boolean"){this.multipleTabs=settings.multipleTabs}if(typeof settings.logLevel==="string"){this.logLevel=settings.logLevel}if(typeof settings.sponsor==="boolean"){this.sponsor=settings.sponsor}["type","ipc","path"].forEach((prop=>{if(prop in settings){console.warn(`${prop} setting is not supported for AceBase LocalStorage`)}}))}}exports.LocalStorageSettings=LocalStorageSettings},{"../..":51}],50:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.LocalStorageTransaction=void 0;const __1=require("..");class LocalStorageTransaction extends __1.CustomStorageTransaction{constructor(context,target){super(target);this.context=context;this._storageKeysPrefix=`${this.context.dbname}.acebase::`}async commit(){}async rollback(err){}async get(path){const json=this.context.localStorage.getItem(this.getStorageKeyForPath(path));const val=JSON.parse(json);return val}async set(path,val){const json=JSON.stringify(val);this.context.localStorage.setItem(this.getStorageKeyForPath(path),json)}async remove(path){this.context.localStorage.removeItem(this.getStorageKeyForPath(path))}async childrenOf(path,include,checkCallback,addCallback){const pathInfo=__1.CustomStorageHelpers.PathInfo.get(path);for(let i=0;i`notify_${event}`)));const NOOP=()=>{};class SchemaValidationError extends Error{constructor(reason){super(`Schema validation failed: ${reason}`);this.reason=reason}}exports.SchemaValidationError=SchemaValidationError;class StorageSettings{constructor(settings={}){this.maxInlineValueSize=50;this.removeVoidProperties=false;this.path=".";this.lockTimeout=120;this.type="data";this.readOnly=false;if(typeof settings.maxInlineValueSize==="number"){this.maxInlineValueSize=settings.maxInlineValueSize}if(typeof settings.removeVoidProperties==="boolean"){this.removeVoidProperties=settings.removeVoidProperties}if(typeof settings.path==="string"){this.path=settings.path}if(this.path.endsWith("/")){this.path=this.path.slice(0,-1)}if(typeof settings.lockTimeout==="number"){this.lockTimeout=settings.lockTimeout}if(typeof settings.type==="string"){this.type=settings.type}if(typeof settings.readOnly==="boolean"){this.readOnly=settings.readOnly}if(typeof settings.ipc==="object"){this.ipc=settings.ipc}}}exports.StorageSettings=StorageSettings;class Storage extends acebase_core_1.SimpleEventEmitter{constructor(name,settings,env){super();this.name=name;this.settings=settings;this._schemas=[];this._indexes=[];this.indexes={get supported(){return promise_fs_1.pfs===null||promise_fs_1.pfs===void 0?void 0:promise_fs_1.pfs.hasFileSystem},create:(path,key,options={rebuild:false})=>{const context={storage:this,debug:this.debug,indexes:this._indexes,ipc:this.ipc};return(0,indexes_1.createIndex)(context,path,key,options)},get:(path,key=null)=>{if(path.includes("$")){const pathKeys=acebase_core_1.PathInfo.getPathKeys(path).map((key=>typeof key==="string"&&key.startsWith("$")?"*":key));path=new acebase_core_1.PathInfo(pathKeys).path}return this._indexes.filter((index=>index.path===path&&(key===null||key===index.key)))},getAll:(targetPath,options={parentPaths:true,childPaths:true})=>{const pathKeys=acebase_core_1.PathInfo.getPathKeys(targetPath);return this._indexes.filter((index=>{const indexKeys=acebase_core_1.PathInfo.getPathKeys(index.path+"/*");if(options.parentPaths&&indexKeys.every(((key,i)=>key==="*"||pathKeys[i]===key))&&[index.key].concat(...index.includeKeys).includes(pathKeys[indexKeys.length])){return true}else if(indexKeys.length[key,"*"].includes(indexKeys[i])))}))},list:()=>this._indexes.slice(),load:async()=>{this._indexes.splice(0);if(!promise_fs_1.pfs.hasFileSystem){return}let files=[];try{files=await promise_fs_1.pfs.readdir(`${this.settings.path}/${this.name}.acebase`)}catch(err){if(err.code!=="ENOENT"){this.debug.error(err)}}const promises=[];files.forEach((fileName=>{if(!fileName.endsWith(".idx")){return}const needsStoragePrefix=this.settings.type!=="data";const hasStoragePrefix=/^\[[a-z]+\]-/.test(fileName);if(!needsStoragePrefix&&!hasStoragePrefix||needsStoragePrefix&&fileName.startsWith(`[${this.settings.type}]-`)){const p=this.indexes.add(fileName);promises.push(p)}}));await Promise.all(promises)},add:async fileName=>{try{const index=await data_index_1.DataIndex.readFromFile(this,fileName);this._indexes.push(index);return index}catch(err){this.debug.error(err);return null}},delete:async fileName=>{const index=await this.indexes.remove(fileName);await index.delete();this.ipc.sendNotification({type:"index.deleted",fileName:index.fileName,path:index.path,keys:index.key})},remove:async fileName=>{const index=this._indexes.find((index=>index.fileName===fileName));if(!index){throw new Error(`Index ${fileName} not found`)}this._indexes.splice(this._indexes.indexOf(index),1);return index},close:async()=>{const promises=this.indexes.list().map((index=>index.close().catch((err=>this.debug.error(err)))));await Promise.all(promises)}};this._eventSubscriptions={};this.subscriptions={add:(path,type,callback)=>{if(SUPPORTED_EVENTS.indexOf(type)<0){throw new TypeError(`Invalid event type "${type}"`)}let pathSubs=this._eventSubscriptions[path];if(!pathSubs){pathSubs=this._eventSubscriptions[path]=[]}pathSubs.push({created:Date.now(),type:type,callback:callback});this.emit("subscribe",{path:path,event:type,callback:callback})},remove:(path,type,callback)=>{const pathSubs=this._eventSubscriptions[path];if(!pathSubs){return}const next=()=>pathSubs.findIndex((ps=>(type?ps.type===type:true)&&(callback?ps.callback===callback:true)));let i;while((i=next())>=0){pathSubs.splice(i,1)}this.emit("unsubscribe",{path:path,event:type,callback:callback})},hasValueSubscribersForPath(path){const valueNeeded=this.getValueSubscribersForPath(path);return!!valueNeeded},getValueSubscribersForPath:path=>{const pathInfo=new acebase_core_1.PathInfo(path);const valueSubscribers=[];Object.keys(this._eventSubscriptions).forEach((subscriptionPath=>{if(pathInfo.equals(subscriptionPath)||pathInfo.isDescendantOf(subscriptionPath)){const pathSubs=this._eventSubscriptions[subscriptionPath];const eventPath=acebase_core_1.PathInfo.fillVariables(subscriptionPath,path);pathSubs.filter((sub=>!sub.type.startsWith("notify_"))).forEach((sub=>{let dataPath=null;if(sub.type==="value"){dataPath=eventPath}else if(["mutated","mutations"].includes(sub.type)&&pathInfo.isDescendantOf(eventPath)){dataPath=path}else if(sub.type==="child_changed"&&path!==eventPath){const childKey=acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}else if(["child_added","child_removed"].includes(sub.type)&&pathInfo.isChildOf(eventPath)){const childKey=acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}if(dataPath!==null&&!valueSubscribers.some((s=>s.type===sub.type&&s.eventPath===eventPath))){valueSubscribers.push({type:sub.type,eventPath:eventPath,dataPath:dataPath,subscriptionPath:subscriptionPath})}}))}}));return valueSubscribers},getAllSubscribersForPath:path=>{const pathInfo=acebase_core_1.PathInfo.get(path);const subscribers=[];Object.keys(this._eventSubscriptions).forEach((subscriptionPath=>{if(pathInfo.isOnTrailOf(subscriptionPath)){const pathSubs=this._eventSubscriptions[subscriptionPath];const eventPath=acebase_core_1.PathInfo.fillVariables(subscriptionPath,path);pathSubs.forEach((sub=>{let dataPath=null;if(sub.type==="value"||sub.type==="notify_value"){dataPath=eventPath}else if(["child_changed","notify_child_changed"].includes(sub.type)){const childKey=path===eventPath||pathInfo.isAncestorOf(eventPath)?"*":acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}else if(["mutated","mutations","notify_mutated","notify_mutations"].includes(sub.type)){dataPath=path}else if(["child_added","child_removed","notify_child_added","notify_child_removed"].includes(sub.type)&&(pathInfo.isChildOf(eventPath)||path===eventPath||pathInfo.isAncestorOf(eventPath))){const childKey=path===eventPath||pathInfo.isAncestorOf(eventPath)?"*":acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}if(dataPath!==null&&!subscribers.some((s=>s.type===sub.type&&s.eventPath===eventPath&&s.subscriptionPath===subscriptionPath))){subscribers.push({type:sub.type,eventPath:eventPath,dataPath:dataPath,subscriptionPath:subscriptionPath})}}))}}));return subscribers},trigger:(event,path,dataPath,oldValue,newValue,context)=>{const pathSubscriptions=this._eventSubscriptions[path]||[];pathSubscriptions.filter((sub=>sub.type===event)).forEach((sub=>{sub.callback(null,dataPath,newValue,oldValue,context)}))}};this.debug=new acebase_core_1.DebugLogger(env.logLevel,`[${name}${typeof settings.type==="string"&&settings.type!=="data"?`:${settings.type}`:""}]`);const ipcName=name+(typeof settings.type==="string"?`_${settings.type}`:"");if(settings.ipc){if(typeof settings.ipc.port!=="number"){throw new Error("IPC port number must be a number")}if(!["master","worker"].includes(settings.ipc.role)){throw new Error(`IPC client role must be either "master" or "worker", not "${settings.ipc.role}"`)}const ipcSettings=Object.assign({dbname:ipcName},settings.ipc);this.ipc=new ipc_1.RemoteIPCPeer(this,ipcSettings)}else{this.ipc=new ipc_1.IPCPeer(this,ipcName)}this.ipc.once("exit",(code=>{if(this.indexes.supported){this.indexes.close()}}));this.nodeLocker={lock:(path,tid,write,comment)=>this.ipc.lock({path:path,tid:tid,write:write,comment:comment})};this._lastTid=0}createTid(){return DEBUG_MODE?++this._lastTid:acebase_core_1.ID.generate()}async close(){await this.ipc.exit()}get path(){return`${this.settings.path}/${this.name}.acebase`}valueFitsInline(value){if(typeof value==="number"||typeof value==="boolean"||value instanceof Date){return true}else if(typeof value==="string"){if(value.length>this.settings.maxInlineValueSize){return false}const encoded=encodeString(value);return encoded.lengththis.settings.maxInlineValueSize){return false}const encoded=encodeString(value.path);return encoded.length0){hasValueSubscribers=true;const eventPaths=valueSubscribers.map((sub=>({path:sub.dataPath,keys:acebase_core_1.PathInfo.getPathKeys(sub.dataPath)}))).sort(((a,b)=>{if(a.keys.lengthb.keys.length)return 1;return 0}));const first=eventPaths[0];topEventPath=first.path;if(valueSubscribers.filter((sub=>sub.dataPath===topEventPath)).every((sub=>sub.type==="mutated"||sub.type.startsWith("notify_")))){hasValueSubscribers=false}topEventPath=acebase_core_1.PathInfo.fillVariables(topEventPath,path)}const indexes=this.indexes.getAll(path,{childPaths:true,parentPaths:true}).map((index=>({index:index,keys:acebase_core_1.PathInfo.getPathKeys(index.path)}))).sort(((a,b)=>{if(a.keys.lengthb.keys.length){return 1}return 0})).map((obj=>obj.index));const keysFilter=[];if(indexes.length>0){indexes.sort(((a,b)=>{if(typeof a._pathKeys==="undefined"){a._pathKeys=acebase_core_1.PathInfo.getPathKeys(a.path)}if(typeof b._pathKeys==="undefined"){b._pathKeys=acebase_core_1.PathInfo.getPathKeys(b.path)}if(a._pathKeys.lengthb._pathKeys.length)return 1;return 0}));const topIndex=indexes[0];const topIndexPath=topIndex.path===path?path:acebase_core_1.PathInfo.fillVariables(`${topIndex.path}/*`,path);if(topIndexPath.lengthindex.path===topIndex.path)).forEach((index=>{const keys=[index.key].concat(index.includeKeys);keys.forEach((key=>!keysFilter.includes(key)&&keysFilter.push(key)))}))}}return{topEventPath:topEventPath,eventSubscriptions:eventSubscriptions,valueSubscribers:valueSubscribers,hasValueSubscribers:hasValueSubscribers,indexes:indexes,keysFilter:keysFilter}}async _writeNodeWithTracking(path,value,options={merge:false,waitForIndexUpdates:true,suppress_events:false,context:null,impact:null}){options=options||{};if(!options.tid&&!options.transaction){throw new Error("_writeNodeWithTracking MUST be executed with a tid OR transaction!")}options.merge=options.merge===true;const validation=this.validateSchema(path,value,{updates:options.merge});if(!validation.ok){throw new SchemaValidationError(validation.reason)}const tid=options.tid;const transaction=options.transaction;let topEventData=null;const updateImpact=options.impact?options.impact:this.getUpdateImpact(path,options.suppress_events);const{topEventPath:topEventPath,eventSubscriptions:eventSubscriptions,hasValueSubscribers:hasValueSubscribers,indexes:indexes}=updateImpact;let{keysFilter:keysFilter}=updateImpact;const writeNode=()=>{if(typeof options._customWriteFunction==="function"){return options._customWriteFunction()}if(topEventData){const pathKeys=acebase_core_1.PathInfo.getPathKeys(path);const eventPathKeys=acebase_core_1.PathInfo.getPathKeys(topEventPath);const trailKeys=pathKeys.slice(eventPathKeys.length);let currentValue=topEventData;while(trailKeys.length>0&¤tValue!==null){const childKey=trailKeys.shift();currentValue=typeof currentValue==="object"&&childKey in currentValue?currentValue[childKey]:null}options.currentValue=currentValue}return this._writeNode(path,value,options)};const transactionLoggingEnabled=this.settings.transactions&&this.settings.transactions.log===true;if(eventSubscriptions.length===0&&indexes.length===0&&!transactionLoggingEnabled){return writeNode()}if(!hasValueSubscribers&&options.merge===true&&keysFilter.length===0){keysFilter=Object.keys(value);if(topEventPath!==path){const trailPath=path.slice(topEventPath.length);keysFilter=keysFilter.map((key=>`${trailPath}/${key}`))}}const eventNodeInfo=await this.getNodeInfo(topEventPath,{transaction:transaction,tid:tid});let currentValue=null;if(eventNodeInfo.exists){const valueOptions={transaction:transaction,tid:tid};if(keysFilter.length>0){valueOptions.include=keysFilter}if(topEventPath===""&&typeof valueOptions.include==="undefined"){this.debug.warn('WARNING: One or more value event listeners on the root node are causing the entire database value to be read to facilitate change tracking. Using "value", "notify_value", "child_changed" and "notify_child_changed" events on the root node are a bad practice because of the significant performance impact. Use "mutated" or "mutations" events instead')}const node=await this.getNode(topEventPath,valueOptions);currentValue=node.value}topEventData=currentValue;const result=await writeNode()||{};let newTopEventData,modifiedData;if(path===topEventPath){if(options.merge){if(topEventData===null){newTopEventData=value instanceof Array?[]:{}}else{newTopEventData=topEventData instanceof Array?[]:{};Object.keys(topEventData).forEach((key=>{newTopEventData[key]=topEventData[key]}))}}else{newTopEventData=value}modifiedData=newTopEventData}else{const trailPath=path.slice(topEventPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);if(topEventData===null){newTopEventData=typeof trailKeys[0]==="number"?[]:{}}else{newTopEventData=topEventData instanceof Array?[]:{};Object.keys(topEventData).forEach((key=>{newTopEventData[key]=topEventData[key]}))}modifiedData=newTopEventData;while(trailKeys.length>0){const childKey=trailKeys.shift();if(!options.merge&&trailKeys.length===0){modifiedData[childKey]=value}else{const original=modifiedData[childKey];const shallowCopy=typeof childKey==="number"?[...original]:Object.assign({},original);modifiedData[childKey]=shallowCopy}modifiedData=modifiedData[childKey]}}if(options.merge){Object.keys(value).forEach((key=>{modifiedData[key]=value[key]}))}const dataChanges=compareValues(topEventData,newTopEventData);if(dataChanges==="identical"){result.mutations=[];return result}function removeNulls(obj){if(obj===null||typeof obj!=="object"){return obj}Object.keys(obj).forEach((prop=>{const val=obj[prop];if(val===null){delete obj[prop];if(obj instanceof Array){obj.length--}}if(typeof val==="object"){removeNulls(val)}}))}removeNulls(newTopEventData);const indexUpdates=[];indexes.map((index=>({index:index,keys:acebase_core_1.PathInfo.getPathKeys(index.path)}))).sort(((a,b)=>{if(a.keys.lengthb.keys.length){return-1}return 0})).forEach((({index:index})=>{const pathKeys=acebase_core_1.PathInfo.getPathKeys(topEventPath);const indexPathKeys=acebase_core_1.PathInfo.getPathKeys(index.path+"/*");const trailKeys=indexPathKeys.slice(pathKeys.length);const oldValue=topEventData;const newValue=newTopEventData;if(trailKeys.length===0){console.assert(pathKeys.length===indexPathKeys.length,"check logic");const p=this.ipc.isMaster?index.handleRecordUpdate(topEventPath,oldValue,newValue):this.ipc.sendRequest({type:"index.update",path:topEventPath,oldValue:oldValue,newValue:newValue});indexUpdates.push(p);return}const getAllIndexUpdates=(path,oldValue,newValue)=>{if(oldValue===null&&newValue===null){return[]}const pathKeys=acebase_core_1.PathInfo.getPathKeys(path);const indexPathKeys=acebase_core_1.PathInfo.getPathKeys(index.path+"/*");const trailKeys=indexPathKeys.slice(pathKeys.length);if(trailKeys.length===0){console.assert(pathKeys.length===indexPathKeys.length,"check logic");return[{path:path,oldValue:oldValue,newValue:newValue}]}let results=[];let trailPath="";while(trailKeys.length>0){const subKey=trailKeys.shift();if(typeof subKey==="string"&&(subKey==="*"||subKey.startsWith("$"))){const allKeys=oldValue===null?[]:Object.keys(oldValue);newValue!==null&&Object.keys(newValue).forEach((key=>{if(allKeys.indexOf(key)<0){allKeys.push(key)}}));allKeys.forEach((key=>{const childPath=acebase_core_1.PathInfo.getChildPath(trailPath,key);const childValues=getChildValues(key,oldValue,newValue);const subTrailPath=acebase_core_1.PathInfo.getChildPath(path,childPath);const childResults=getAllIndexUpdates(subTrailPath,childValues.oldValue,childValues.newValue);results=results.concat(childResults)}));break}else{const values=getChildValues(subKey,oldValue,newValue);oldValue=values.oldValue;newValue=values.newValue;if(oldValue===null&&newValue===null){break}trailPath=acebase_core_1.PathInfo.getChildPath(trailPath,subKey)}}return results};const results=getAllIndexUpdates(topEventPath,oldValue,newValue);results.forEach((result=>{const p=this.ipc.isMaster?index.handleRecordUpdate(result.path,result.oldValue,result.newValue):this.ipc.sendRequest({type:"index.update",path:result.path,oldValue:result.oldValue,newValue:result.newValue});indexUpdates.push(p)}))}));const callSubscriberWithValues=(sub,oldValue,newValue,variables=[])=>{let trigger=true;let type=sub.type;if(type.startsWith("notify_")){type=type.slice("notify_".length)}if(type==="mutated"){return}else if(type==="child_changed"&&(oldValue===null||newValue===null)){trigger=false}else if(type==="value"||type==="child_changed"){const changes=compareValues(oldValue,newValue);trigger=changes!=="identical"}else if(type==="child_added"){trigger=oldValue===null&&newValue!==null}else if(type==="child_removed"){trigger=oldValue!==null&&newValue===null}const pathKeys=acebase_core_1.PathInfo.getPathKeys(sub.dataPath);variables.forEach((variable=>{const index=pathKeys.indexOf(variable.name);console.assert(index>=0,`Variable "${variable.name}" not found in subscription dataPath "${sub.dataPath}"`);pathKeys[index]=variable.value}));const dataPath=pathKeys.reduce(((path,key)=>acebase_core_1.PathInfo.getChildPath(path,key)),"");trigger&&this.subscriptions.trigger(sub.type,sub.subscriptionPath,dataPath,oldValue,newValue,options.context)};const prepareMutationEvents=(currentPath,oldValue,newValue,compareResult)=>{const batch=[];const result=compareResult||compareValues(oldValue,newValue);if(result==="identical"){return batch}else if(typeof result==="string"){batch.push({path:currentPath,oldValue:oldValue,newValue:newValue})}else{result.changed.forEach((info=>{const childPath=acebase_core_1.PathInfo.getChildPath(currentPath,info.key);const childValues=getChildValues(info.key,oldValue,newValue);const childBatch=prepareMutationEvents(childPath,childValues.oldValue,childValues.newValue,info.change);batch.push(...childBatch)}));result.added.forEach((key=>{const childPath=acebase_core_1.PathInfo.getChildPath(currentPath,key);batch.push({path:childPath,oldValue:null,newValue:newValue[key]})}));if(oldValue instanceof Array&&newValue instanceof Array){result.removed.sort(((a,b)=>a{const childPath=acebase_core_1.PathInfo.getChildPath(currentPath,key);batch.push({path:childPath,oldValue:oldValue[key],newValue:null})}))}return batch};if(transactionLoggingEnabled&&this.settings.type!=="transaction"){result.mutations=(()=>{const trailPath=path.slice(topEventPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);let oldValue=topEventData,newValue=newTopEventData;while(trailKeys.length>0){const key=trailKeys.shift();({oldValue:oldValue,newValue:newValue}=getChildValues(key,oldValue,newValue))}const compareResults=compareValues(oldValue,newValue);const batch=prepareMutationEvents(path,oldValue,newValue,compareResults);const mutations=batch.map((m=>({target:acebase_core_1.PathInfo.getPathKeys(m.path.slice(path.length)),prev:m.oldValue,val:m.newValue})));return mutations})()}const triggerAllEvents=()=>{eventSubscriptions.filter((sub=>!["mutated","mutations","notify_mutated","notify_mutations"].includes(sub.type))).map((sub=>{const keys=acebase_core_1.PathInfo.getPathKeys(sub.dataPath);return{sub:sub,keys:keys}})).sort(((a,b)=>{if(a.keys.lengthb.keys.length){return-1}return 0})).forEach((({sub:sub})=>{const process=(currentPath,oldValue,newValue,variables=[])=>{const trailPath=sub.dataPath.slice(currentPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);while(trailKeys.length>0){const subKey=trailKeys.shift();if(typeof subKey==="string"&&(subKey==="*"||subKey[0]==="$")){const allKeys=oldValue===null?[]:Object.keys(oldValue).map((key=>oldValue instanceof Array?parseInt(key):key));newValue!==null&&Object.keys(newValue).forEach((key=>{const keyOrIndex=newValue instanceof Array?parseInt(key):key;!allKeys.includes(keyOrIndex)&&allKeys.push(key)}));allKeys.forEach((key=>{const childValues=getChildValues(key,oldValue,newValue);const vars=variables.concat({name:subKey,value:key});if(trailKeys.length===0){callSubscriberWithValues(sub,childValues.oldValue,childValues.newValue,vars)}else{process(acebase_core_1.PathInfo.getChildPath(currentPath,subKey),childValues.oldValue,childValues.newValue,vars)}}));return}else{currentPath=acebase_core_1.PathInfo.getChildPath(currentPath,subKey);const childValues=getChildValues(subKey,oldValue,newValue);oldValue=childValues.oldValue;newValue=childValues.newValue}}callSubscriberWithValues(sub,oldValue,newValue,variables)};if(sub.type.startsWith("notify_")&&acebase_core_1.PathInfo.get(sub.eventPath).isAncestorOf(topEventPath)){const isOnParentPath=acebase_core_1.PathInfo.get(sub.eventPath).isParentOf(topEventPath);const trigger=sub.type==="notify_value"||sub.type==="notify_child_changed"&&(!isOnParentPath||!["added","removed"].includes(dataChanges))||sub.type==="notify_child_removed"&&dataChanges==="removed"&&isOnParentPath||sub.type==="notify_child_added"&&dataChanges==="added"&&isOnParentPath;trigger&&this.subscriptions.trigger(sub.type,sub.subscriptionPath,sub.dataPath,null,null,options.context)}else{process(topEventPath,topEventData,newTopEventData)}}));const mutationEvents=eventSubscriptions.filter((sub=>["mutated","mutations","notify_mutated","notify_mutations"].includes(sub.type)));mutationEvents.forEach((sub=>{let currentPath=topEventPath;const trailPath=sub.eventPath.slice(currentPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);let oldValue=topEventData,newValue=newTopEventData;while(trailKeys.length>0){const subKey=trailKeys.shift();currentPath=acebase_core_1.PathInfo.getChildPath(currentPath,subKey);const childValues=getChildValues(subKey,oldValue,newValue);oldValue=childValues.oldValue;newValue=childValues.newValue}const batch=prepareMutationEvents(currentPath,oldValue,newValue);if(batch.length===0){return}const isNotifyEvent=sub.type.startsWith("notify_");if(["mutated","notify_mutated"].includes(sub.type)){batch.forEach(((mutation,index)=>{const context=options.context;const prevVal=isNotifyEvent?null:mutation.oldValue;const newVal=isNotifyEvent?null:mutation.newValue;this.subscriptions.trigger(sub.type,sub.subscriptionPath,mutation.path,prevVal,newVal,context)}))}else if(["mutations","notify_mutations"].includes(sub.type)){const values=isNotifyEvent?null:batch.map((m=>({target:acebase_core_1.PathInfo.getPathKeys(m.path.slice(sub.subscriptionPath.length)),prev:m.oldValue,val:m.newValue})));this.subscriptions.trigger(sub.type,sub.subscriptionPath,sub.subscriptionPath,null,values,options.context)}}))};if(options.waitForIndexUpdates===false){indexUpdates.splice(0)}await Promise.all(indexUpdates);defer(triggerAllEvents);return result}getChildren(path,options){throw new Error("This method must be implemented by subclass")}async getNodeValue(path,options={}){const node=await this.getNode(path,options);return node.value}getNode(path,options){throw new Error("This method must be implemented by subclass")}getNodeInfo(path,options){throw new Error("This method must be implemented by subclass")}setNode(path,value,options){throw new Error("This method must be implemented by subclass")}updateNode(path,updates,options){throw new Error("This method must be implemented by subclass")}async transactNode(path,callback,options={no_lock:false,suppress_events:false,context:null}){const useFakeLock=options&&options.no_lock===true;const tid=this.createTid();const lock=useFakeLock?{tid:tid,release:NOOP}:await this.nodeLocker.lock(path,tid,true,"transactNode");try{let changed=false;const changeCallback=()=>{changed=true};if(useFakeLock){this.subscriptions.add(path,"notify_value",changeCallback)}const node=await this.getNode(path,{tid:tid});const checkRevision=node.revision;let newValue;try{newValue=callback(node.value);if(newValue instanceof Promise){newValue=await newValue.catch((err=>{this.debug.error(`Error in transaction callback: ${err.message}`)}))}}catch(err){this.debug.error(`Error in transaction callback: ${err.message}`)}if(typeof newValue==="undefined"){return}if(useFakeLock){this.subscriptions.remove(path,"notify_value",changeCallback)}if(changed){throw new node_errors_1.NodeRevisionError("Node changed")}const cursor=await this.setNode(path,newValue,{assert_revision:checkRevision,tid:lock.tid,suppress_events:options.suppress_events,context:options.context});return cursor}catch(err){if(err instanceof node_errors_1.NodeRevisionError){console.warn(`node value changed, running again. Error: ${err.message}`);return this.transactNode(path,callback,options)}else{throw err}}finally{lock.release()}}async matchNode(path,criteria,options){var _a;const tid=(_a=options===null||options===void 0?void 0:options.tid)!==null&&_a!==void 0?_a:acebase_core_1.ID.generate();const checkNode=async(path,criteria)=>{if(criteria.length===0){return Promise.resolve(true)}const criteriaKeys=criteria.reduce(((keys,cr)=>{let key=cr.key;if(typeof key==="string"&&key.includes("/")){key=key.slice(0,key.indexOf("/"))}if(keys.indexOf(key)<0){keys.push(key)}return keys}),[]);const unseenKeys=criteriaKeys.slice();let isMatch=true;const delayedMatchPromises=[];try{await this.getChildren(path,{tid:tid,keyFilter:criteriaKeys}).next((childInfo=>{var _a;const keyOrIndex=(_a=childInfo.key)!==null&&_a!==void 0?_a:childInfo.index;unseenKeys.includes(keyOrIndex)&&unseenKeys.splice(unseenKeys.indexOf(childInfo.key),1);const keyCriteria=criteria.filter((cr=>cr.key===keyOrIndex)).map((cr=>({op:cr.op,compare:cr.compare})));const keyResult=keyCriteria.length>0?checkChild(childInfo,keyCriteria):{isMatch:true,promises:[]};isMatch=keyResult.isMatch;if(isMatch){delayedMatchPromises.push(...keyResult.promises);const childCriteria=criteria.filter((cr=>typeof cr.key==="string"&&cr.key.startsWith(`${typeof keyOrIndex==="number"?`[${keyOrIndex}]`:keyOrIndex}/`))).map((cr=>{const key=cr.key.slice(cr.key.indexOf("/")+1);return{key:key,op:cr.op,compare:cr.compare}}));if(childCriteria.length>0){const childPath=acebase_core_1.PathInfo.getChildPath(path,childInfo.key);const childPromise=checkNode(childPath,childCriteria).then((isMatch=>({isMatch:isMatch})));delayedMatchPromises.push(childPromise)}}if(!isMatch||unseenKeys.length===0){return false}}));if(isMatch){const results=await Promise.all(delayedMatchPromises);isMatch=results.every((res=>res.isMatch))}if(!isMatch){return false}isMatch=unseenKeys.every((keyOrIndex=>{const childInfo=new node_info_1.NodeInfo(Object.assign(Object.assign(Object.assign({},typeof keyOrIndex==="number"&&{index:keyOrIndex}),typeof keyOrIndex==="string"&&{key:keyOrIndex}),{exists:false}));const childCriteria=criteria.filter((cr=>typeof cr.key==="string"&&cr.key.startsWith(`${typeof keyOrIndex==="number"?`[${keyOrIndex}]`:keyOrIndex}/`))).map((cr=>({op:cr.op,compare:cr.compare})));if(childCriteria.length>0&&!checkChild(childInfo,childCriteria).isMatch){return false}const keyCriteria=criteria.filter((cr=>cr.key===keyOrIndex)).map((cr=>({op:cr.op,compare:cr.compare})));if(keyCriteria.length===0){return true}const result=checkChild(childInfo,keyCriteria);return result.isMatch}));return isMatch}catch(err){this.debug.error(`Error matching on "${path}": `,err);throw err}};const checkChild=(child,criteria)=>{const promises=[];const isMatch=criteria.every((f=>{let proceed=true;if(f.op==="!exists"||f.op==="=="&&(typeof f.compare==="undefined"||f.compare===null)){proceed=!child.exists}else if(f.op==="exists"||f.op==="!="&&(typeof f.compare==="undefined"||f.compare===null)){proceed=child.exists}else if((f.op==="contains"||f.op==="!contains")&&f.compare instanceof Array&&f.compare.length===0){proceed=true}else if(!child.exists){proceed=false}else{if(child.address){if(child.valueType===node_value_types_1.VALUE_TYPES.OBJECT&&["has","!has"].indexOf(f.op)>=0){const op=f.op==="has"?"exists":"!exists";const p=checkNode(child.path,[{key:f.compare,op:op}]).then((isMatch=>({key:child.key,isMatch:isMatch})));promises.push(p);proceed=true}else if(child.valueType===node_value_types_1.VALUE_TYPES.ARRAY&&["contains","!contains"].indexOf(f.op)>=0){const p=this.getNode(child.path,{tid:tid}).then((({value:arr})=>{const isMatch=f.op==="contains"?f.compare instanceof Array?f.compare.every((val=>arr.includes(val))):arr.includes(f.compare):f.compare instanceof Array?!f.compare.some((val=>arr.includes(val))):!arr.includes(f.compare);return{key:child.key,isMatch:isMatch}}));promises.push(p);proceed=true}else if(child.valueType===node_value_types_1.VALUE_TYPES.STRING){const p=this.getNode(child.path,{tid:tid}).then((node=>({key:child.key,isMatch:this.test(node.value,f.op,f.compare)})));promises.push(p);proceed=true}else{proceed=false}}else if(child.type===node_value_types_1.VALUE_TYPES.OBJECT&&["has","!has"].indexOf(f.op)>=0){const has=f.compare in child.value;proceed=has&&f.op==="has"||!has&&f.op==="!has"}else if(child.type===node_value_types_1.VALUE_TYPES.ARRAY&&["contains","!contains"].indexOf(f.op)>=0){const contains=child.value.indexOf(f.compare)>=0;proceed=contains&&f.op==="contains"||!contains&&f.op==="!contains"}else{let ret=this.test(child.value,f.op,f.compare);if(ret instanceof Promise){promises.push(ret);ret=true}proceed=ret}}return proceed}));return{isMatch:isMatch,promises:promises}};return checkNode(path,criteria)}test(val,op,compare){if(op==="<"){return val"){return val>compare}if(op===">="){return val>=compare}if(op==="in"){return compare.indexOf(val)>=0}if(op==="!in"){return compare.indexOf(val)<0}if(op==="like"||op==="!like"){const pattern="^"+compare.replace(/[-[\]{}()+.,\\^$|#\s]/g,"\\$&").replace(/\?/g,".").replace(/\*/g,".*?")+"$";const re=new RegExp(pattern,"i");const isMatch=re.test(val.toString());return op==="like"?isMatch:!isMatch}if(op==="matches"){return compare.test(val.toString())}if(op==="!matches"){return!compare.test(val.toString())}if(op==="between"){return val>=compare[0]&&val<=compare[1]}if(op==="!between"){return valcompare[1]}if(op==="has"||op==="!has"){const has=typeof val==="object"&&compare in val;return op==="has"?has:!has}if(op==="contains"||op==="!contains"){const includes=typeof val==="object"&&val instanceof Array&&val.includes(compare);return op==="contains"?includes:!includes}return false}async exportNode(path,writeFn,options={format:"json",type_safe:true}){if((options===null||options===void 0?void 0:options.format)!=="json"){throw new Error("Only json output is currently supported")}const write=typeof writeFn!=="function"?writeFn.write.bind(writeFn):writeFn;const stringifyValue=(type,val)=>{const escape=str=>str.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/[\u0000-\u001f]/g,(ch=>`\\u${ch.charCodeAt(0).toString(16).padStart(4,"0")}`));if(type===node_value_types_1.VALUE_TYPES.DATETIME){val=`"${val.toISOString()}"`;if(options.type_safe){val=`{".type":"date",".val":${val}}`}}else if(type===node_value_types_1.VALUE_TYPES.STRING){val=`"${escape(val)}"`}else if(type===node_value_types_1.VALUE_TYPES.ARRAY){val="[]"}else if(type===node_value_types_1.VALUE_TYPES.OBJECT){val="{}"}else if(type===node_value_types_1.VALUE_TYPES.BINARY){val=`"${escape(acebase_core_1.ascii85.encode(val))}"`;if(options.type_safe){val=`{".type":"binary",".val":${val}}`}}else if(type===node_value_types_1.VALUE_TYPES.REFERENCE){val=`"${val.path}"`;if(options.type_safe){val=`{".type":"reference",".val":${val}}`}}else if(type===node_value_types_1.VALUE_TYPES.BIGINT){val=`"${val}"`;if(options.type_safe){val=`{".type":"bigint",".val":${val}}`}}return val};let objStart="",objEnd="";const nodeInfo=await this.getNodeInfo(path);if(!nodeInfo.exists){return write("null")}else if(nodeInfo.type===node_value_types_1.VALUE_TYPES.OBJECT){objStart="{";objEnd="}"}else if(nodeInfo.type===node_value_types_1.VALUE_TYPES.ARRAY){objStart="[";objEnd="]"}else{const node=await this.getNode(path);const val=stringifyValue(nodeInfo.type,node.value);return write(val)}if(objStart){const p=write(objStart);if(p instanceof Promise){await p}}let output="",outputCount=0;const pending=[];await this.getChildren(path).next((childInfo=>{if(childInfo.address){pending.push(childInfo)}else{if(outputCount++>0){output+=","}if(typeof childInfo.key==="string"){output+=`"${childInfo.key}":`}output+=stringifyValue(childInfo.type,childInfo.value)}}));if(output){const p=write(output);if(p instanceof Promise){await p}}while(pending.length>0){const childInfo=pending.shift();let output=outputCount++>0?",":"";const key=typeof childInfo.index==="number"?childInfo.index:childInfo.key;if(typeof key==="string"){output+=`"${key}":`}if(output){const p=write(output);if(p instanceof Promise){await p}}await this.exportNode(acebase_core_1.PathInfo.getChildPath(path,key),write,options)}if(objEnd){const p=write(objEnd);if(p instanceof Promise){await p}}}async importNode(path,read,options={format:"json",method:"set"}){const chunkSize=256*1024;const maxQueueBytes=1024*1024;const state={data:"",index:0,offset:0,queue:[],queueStartByte:0,timesFlushed:0,get processedBytes(){return this.offset+this.index}};const readNextChunk=async(append=false)=>{let data=await read(chunkSize);if(data===null){if(state.data){throw new Error(`Unexpected EOF at index ${state.offset+state.data.length}`)}else{throw new Error("Unable to read data from stream")}}else if(typeof data==="object"){data=acebase_core_1.Utils.decodeString(data)}if(append){state.data+=data}else{state.offset+=state.data.length;state.data=data;state.index=0}};const readBytes=async length=>{let str="";if(state.index+length>=state.data.length){str=state.data.slice(state.index);length-=str.length;await readNextChunk()}str+=state.data.slice(state.index,state.index+length);state.index+=length;return str};const assertBytes=async length=>{if(state.index+length>state.data.length){await readNextChunk(true)}if(state.index+length>state.data.length){throw new Error("Not enough data available from stream")}};const consumeToken=async token=>{const str=await readBytes(token.length);if(str!==token){throw new Error(`Unexpected character "${str[0]}" at index ${state.offset+state.index}, expected "${token}"`)}};const consumeSpaces=async()=>{const spaces=[" ","\t","\r","\n"];while(true){if(state.index>=state.data.length){await readNextChunk()}if(spaces.includes(state.data[state.index])){state.index++}else{break}}};const peekBytes=async length=>{await assertBytes(length);const index=state.index;return state.data.slice(index,index+length)};const peekValueType=async()=>{await consumeSpaces();const ch=await peekBytes(1);switch(ch){case'"':return"string";case"{":return"object";case"[":return"array";case"n":return"null";case"u":return"undefined";case"t":case"f":return"boolean";default:{if(ch==="-"||ch>="0"&&ch<="9"){return"number"}throw new Error(`Unknown value at index ${state.offset+state.index}`)}}};const readString=async()=>{await consumeToken('"');let str="";let i=state.index;while(state.data[i]!=='"'||state.data[i-1]==="\\"){i++;if(i>=state.data.length){str+=state.data.slice(state.index);await readNextChunk();i=0}}str+=state.data.slice(state.index,i);state.index=i+1;return unescape(str)};const readBoolean=async()=>{if(state.data[state.index]==="t"){await consumeToken("true")}else if(state.data[state.index]==="f"){await consumeToken("false")}throw new Error(`Expected true or false at index ${state.offset+state.index}`)};const readNumber=async()=>{let str="";let i=state.index;const nrChars=["-","0","1","2","3","4","5","6","7","8","9",".","e","b","f","x","o","n"];while(nrChars.includes(state.data[i])){i++;if(i>=state.data.length){str+=state.data.slice(state.index);await readNextChunk();i=0}}str+=state.data.slice(state.index,i);state.index=i;const nr=str.endsWith("n")?BigInt(str.slice(0,-1)):str.includes(".")?parseFloat(str):parseInt(str);return nr};const readValue=async()=>{await consumeSpaces();const type=await peekValueType();const value=await(()=>{switch(type){case"string":return readString();case"object":return{};case"array":return[];case"number":return readNumber();case"null":return null;case"undefined":return undefined;case"boolean":return readBoolean()}})();return{type:type,value:value}};const unescape=str=>str.replace(/\\n/g,"\n").replace(/\\"/g,'"');const getTypeSafeValue=(path,obj)=>{const type=obj[".type"];let val=obj[".val"];switch(type){case"Date":case"date":{val=new Date(val);break}case"Buffer":case"binary":{val=unescape(val);if(val.startsWith("<~")){val=acebase_core_1.ascii85.decode(val)}else{throw new Error(`Import error: Unexpected encoding for value for value at path "/${path}"`)}break}case"PathReference":case"reference":{val=new acebase_core_1.PathReference(val);break}case"bigint":{val=BigInt(val);break}default:throw new Error(`Import error: Unsupported type "${type}" for value at path "/${path}"`)}return val};const context={acebase_import_id:acebase_core_1.ID.generate()};const childOptions={suppress_events:options.suppress_events,context:context};const enqueue=async(target,value)=>{state.queue.push({target:target,value:value});if(state.processedBytes>=state.queueStartByte+maxQueueBytes){const operations=state.queue.reduce(((updates,item)=>{if(item.target.path===path){updates.push(Object.assign({op:options.method==="set"&&state.timesFlushed===0?"set":"update"},item))}else{const parent=updates.find((other=>other.target.isParentOf(item.target)));if(parent){parent.value[item.target.key]=item.value}else{updates.push(Object.assign({op:options.method==="merge"?"update":"set"},item))}}return updates}),[]);state.queueStartByte=state.processedBytes;state.queue=[];state.timesFlushed++}if(target.path===path){}};const importObject=async target=>{await consumeToken("{");await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="}"){state.index++;return this.setNode(target.path,{},childOptions)}let childCount=0;let obj={};let flushedBefore=false;const flushObject=async()=>{let p;if(!flushedBefore){flushedBefore=true;p=this.setNode(target.path,obj,childOptions)}else if(Object.keys(obj).length>0){p=this.updateNode(target.path,obj,childOptions)}obj={};if(p){await p}};const promises=[];while(true){await consumeSpaces();const property=await readString();await consumeSpaces();await consumeToken(":");await consumeSpaces();const{value:value,type:type}=await readValue();obj[property]=value;childCount++;if(["object","array"].includes(type)){promises.push(flushObject());if(type==="object"){await importObject(target.child(property))}else{await importArray(target.child(property))}}await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="}"){state.index++;break}await consumeToken(",")}const isTypedValue=childCount===2&&".type"in obj&&".val"in obj;if(isTypedValue){const val=getTypeSafeValue(target.path,obj);return this.setNode(target.path,val,childOptions)}promises.push(flushObject());await Promise.all(promises)};const importArray=async target=>{await consumeToken("[");await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="]"){state.index++;return this.setNode(target.path,[],childOptions)}let flushedBefore=false;let arr=[];let updates={};const flushArray=async()=>{let p;if(!flushedBefore){flushedBefore=true;p=this.setNode(target.path,arr,childOptions);arr=null}else if(Object.keys(updates).length>0){p=this.updateNode(target.path,updates,childOptions);updates={}}if(p){await p}};const pushChild=(value,index)=>{if(flushedBefore){updates[index]=value}else{arr.push(value)}};const promises=[];let index=0;while(true){await consumeSpaces();const{value:value,type:type}=await readValue();pushChild(value,index);if(["object","array"].includes(type)){promises.push(flushArray());if(type==="object"){await importObject(target.child(index))}else{await importArray(target.child(index))}}await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="]"){state.index++;break}await consumeToken(",");index++}promises.push(flushArray());await Promise.all(promises)};const start=async()=>{const{value:value,type:type}=await readValue();if(["object","array"].includes(type)){const target=acebase_core_1.PathInfo.get(path);if(type==="object"){await importObject(target)}else{await importArray(target)}}else{await this.setNode(path,value,childOptions)}};return start()}setSchema(path,schema){if(typeof schema==="undefined"){throw new TypeError("schema argument must be given")}if(schema===null){const i=this._schemas.findIndex((s=>s.path===path));i>=0&&this._schemas.splice(i,1);return}const definition=new acebase_core_1.SchemaDefinition(schema);const item=this._schemas.find((s=>s.path===path));if(item){item.schema=definition}else{this._schemas.push({path:path,schema:definition});this._schemas.sort(((a,b)=>{const ka=acebase_core_1.PathInfo.getPathKeys(a.path),kb=acebase_core_1.PathInfo.getPathKeys(b.path);if(ka.length===kb.length){return 0}return ka.lengthitem.path===path));return item?{path:path,schema:item.schema.source,text:item.schema.text}:null}getSchemas(){return this._schemas.map((item=>({path:item.path,schema:item.schema.source,text:item.schema.text})))}validateSchema(path,value,options={updates:false}){let result={ok:true};const pathInfo=acebase_core_1.PathInfo.get(path);this._schemas.filter((s=>pathInfo.isOnTrailOf(s.path))).every((s=>{if(pathInfo.isDescendantOf(s.path)){const ancestorPath=acebase_core_1.PathInfo.fillVariables(s.path,path);const trailKeys=pathInfo.keys.slice(acebase_core_1.PathInfo.getPathKeys(s.path).length);result=s.schema.check(ancestorPath,value,options.updates,trailKeys);return result.ok}const trailKeys=acebase_core_1.PathInfo.getPathKeys(s.path).slice(pathInfo.keys.length);const partial=options.updates===true&&trailKeys.length===0;const check=(path,value,trailKeys)=>{if(trailKeys.length===0){return s.schema.check(path,value,partial)}else if(value===null){return{ok:true}}const key=trailKeys[0];if(typeof key==="string"&&(key==="*"||key[0]==="$")){if(value===null||typeof value!=="object"){return{ok:true}}let result;Object.keys(value).every((childKey=>{const childPath=acebase_core_1.PathInfo.getChildPath(path,childKey);const childValue=value[childKey];result=check(childPath,childValue,trailKeys.slice(1));return result.ok}));return result}else{const childPath=acebase_core_1.PathInfo.getChildPath(path,key);const childValue=value[key];return check(childPath,childValue,trailKeys.slice(1))}};result=check(path,value,trailKeys);return result.ok}));return result}}exports.Storage=Storage},{"../data-index":39,"../ipc":32,"../node-errors":35,"../node-info":36,"../node-value-types":38,"../promise-fs":40,"./indexes":52,"acebase-core":12}],52:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createIndex=void 0;var create_index_1=require("./create-index");Object.defineProperty(exports,"createIndex",{enumerable:true,get:function(){return create_index_1.createIndex}})},{"./create-index":42}],53:[function(require,module,exports){},{}]},{},[31])(31)})); \ No newline at end of file diff --git a/dist/cjs/api-local.js b/dist/cjs/api-local.js index 0d71d14..57af9de 100644 --- a/dist/cjs/api-local.js +++ b/dist/cjs/api-local.js @@ -164,7 +164,7 @@ class LocalApi extends acebase_core_1.Api { if (['null', 'undefined'].includes(from)) { from = null; } - const children = []; + const children = []; // Array<{ key: string | number; type: string; value: any; address?: any }>; let n = 0, stop = false, more = false; //stop = skip + limit, await this.storage.getChildren(path) .next(childInfo => { @@ -195,7 +195,8 @@ class LocalApi extends acebase_core_1.Api { }; switch (type) { case 'children': { - return getChildren(path, args.limit, args.skip, args.from); + const result = await getChildren(path, args.limit, args.skip, args.from); + return result; } case 'info': { const info = { diff --git a/dist/cjs/api-local.js.map b/dist/cjs/api-local.js.map index 2f9d951..bdd06ff 100644 --- a/dist/cjs/api-local.js.map +++ b/dist/cjs/api-local.js.map @@ -1 +1 @@ -{"version":3,"file":"api-local.js","sourceRoot":"","sources":["../../src/api-local.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"api-local.js","sourceRoot":"","sources":["../../src/api-local.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/btree/binary-pointer.js b/dist/cjs/btree/binary-pointer.js new file mode 100644 index 0000000..603e4b1 --- /dev/null +++ b/dist/cjs/btree/binary-pointer.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=binary-pointer.js.map \ No newline at end of file diff --git a/dist/cjs/btree/binary-pointer.js.map b/dist/cjs/btree/binary-pointer.js.map new file mode 100644 index 0000000..3b7fbac --- /dev/null +++ b/dist/cjs/btree/binary-pointer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"binary-pointer.js","sourceRoot":"","sources":["../../../src/btree/binary-pointer.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/cjs/btree/binary-reference.js b/dist/cjs/btree/binary-reference.js new file mode 100644 index 0000000..638b257 --- /dev/null +++ b/dist/cjs/btree/binary-reference.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=binary-reference.js.map \ No newline at end of file diff --git a/dist/cjs/btree/binary-reference.js.map b/dist/cjs/btree/binary-reference.js.map new file mode 100644 index 0000000..9baed60 --- /dev/null +++ b/dist/cjs/btree/binary-reference.js.map @@ -0,0 +1 @@ +{"version":3,"file":"binary-reference.js","sourceRoot":"","sources":["../../../src/btree/binary-reference.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/cjs/btree/tree-leaf.js.map b/dist/cjs/btree/tree-leaf.js.map index f421b3c..6fe26ff 100644 --- a/dist/cjs/btree/tree-leaf.js.map +++ b/dist/cjs/btree/tree-leaf.js.map @@ -1 +1 @@ -{"version":3,"file":"tree-leaf.js","sourceRoot":"","sources":["../../../src/btree/tree-leaf.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tree-leaf.js","sourceRoot":"","sources":["../../../src/btree/tree-leaf.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/btree/tree-node.js b/dist/cjs/btree/tree-node.js index e1935bc..fb1679c 100644 --- a/dist/cjs/btree/tree-node.js +++ b/dist/cjs/btree/tree-node.js @@ -173,6 +173,7 @@ class BPlusTreeNode { // * Written by BPlusTreeNode.toBinary // ** Written by BPlusTreeLeaf.toBinary // *** including free bytes (BUT excluding size of ext_data blocks for leafs) + var _a; const bytes = []; const startIndex = writer.length; //bytes.length; // byte_length: @@ -235,7 +236,7 @@ class BPlusTreeNode { }); } // Add node pointers added by the child - 'pointers' in child && child.pointers.forEach(pointer => { + (_a = child.pointers) === null || _a === void 0 ? void 0 : _a.forEach(pointer => { // pointer.index += index; // DISABLED: indexes must already be ok now we're using 1 bytes array pointers.push(pointer); }); diff --git a/dist/cjs/btree/tree-node.js.map b/dist/cjs/btree/tree-node.js.map index 86c5ef9..cbce946 100644 --- a/dist/cjs/btree/tree-node.js.map +++ b/dist/cjs/btree/tree-node.js.map @@ -1 +1 @@ -{"version":3,"file":"tree-node.js","sourceRoot":"","sources":["../../../src/btree/tree-node.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tree-node.js","sourceRoot":"","sources":["../../../src/btree/tree-node.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/index.d.ts b/dist/cjs/index.d.ts new file mode 100644 index 0000000..81a39a8 --- /dev/null +++ b/dist/cjs/index.d.ts @@ -0,0 +1 @@ +export * from '../types'; diff --git a/dist/cjs/package.json b/dist/cjs/package.json new file mode 100644 index 0000000..fa1ca79 --- /dev/null +++ b/dist/cjs/package.json @@ -0,0 +1,14 @@ +{ + "type": "commonjs", + "types": "../types/index.d.ts", + "browser": { + "./index.js": "./browser.js", + "./ipc/index.js": "./ipc/browser.js", + "./promise-fs/index.js": "./promise-fs/browser.js", + "./storage/binary/index.js": "./not-supported.js", + "./storage/mssql/index.js": "./not-supported.js", + "./storage/sqlite/index.js": "./not-supported.js", + "./data-index/index.js": "./not-supported.js", + "./btree/index.js": "./not-supported.js" + } +} diff --git a/dist/cjs/storage/index.js.map b/dist/cjs/storage/index.js.map index e2868fb..216a5ec 100644 --- a/dist/cjs/storage/index.js.map +++ b/dist/cjs/storage/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/acebase-browser.js b/dist/esm/acebase-browser.js new file mode 100644 index 0000000..2e280bc --- /dev/null +++ b/dist/esm/acebase-browser.js @@ -0,0 +1,42 @@ +import { AceBase } from './acebase-local.js'; +import { createIndexedDBInstance } from './storage/custom/indexed-db/index.js'; +const deprecatedConstructorError = `Using AceBase constructor in the browser to use localStorage is deprecated! +Switch to: +IndexedDB implementation (FASTER, MORE RELIABLE): + let db = AceBase.WithIndexedDB(name, settings) +Or, new LocalStorage implementation: + let db = AceBase.WithLocalStorage(name, settings) +Or, write your own CustomStorage adapter: + let myCustomStorage = new CustomStorageSettings({ ... }); + let db = new AceBase(name, { storage: myCustomStorage })`; +export class BrowserAceBase extends AceBase { + /** + * Constructor that is used in browser context + * @param name database name + * @param settings settings + */ + constructor(name, settings) { + if (typeof settings !== 'object' || typeof settings.storage !== 'object') { + // Client is using old AceBaseBrowser signature, eg: + // let db = new AceBase('name', { temp: false }) + // + // Don't allow this anymore. If client wants to use localStorage, + // they need to switch to AceBase.WithLocalStorage('name', settings). + // If they want to use custom storage in the browser, they must + // use the same constructor signature AceBase has: + // let db = new AceBase('name', { storage: new CustomStorageSettings({ ... }) }); + throw new Error(deprecatedConstructorError); + } + super(name, settings); + this.settings.ipcEvents = settings.multipleTabs === true; + } + /** + * Creates an AceBase database instance using IndexedDB as storage engine + * @param dbname Name of the database + * @param settings optional settings + */ + static WithIndexedDB(dbname, init = {}) { + return createIndexedDBInstance(dbname, init); + } +} +//# sourceMappingURL=acebase-browser.js.map \ No newline at end of file diff --git a/dist/esm/acebase-browser.js.map b/dist/esm/acebase-browser.js.map new file mode 100644 index 0000000..88e6d1b --- /dev/null +++ b/dist/esm/acebase-browser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"acebase-browser.js","sourceRoot":"","sources":["../../src/acebase-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAwB,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAGtE,MAAM,0BAA0B,GAAG;;;;;;;;6DAQ0B,CAAC;AAE9D,MAAM,OAAO,cAAe,SAAQ,OAAO;IACvC;;;;OAIG;IACH,YAAY,IAAY,EAAE,QAAoE;QAC1F,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE;YACtE,oDAAoD;YACpD,gDAAgD;YAChD,EAAE;YACF,iEAAiE;YACjE,qEAAqE;YACrE,+DAA+D;YAC/D,kDAAkD;YAClD,iFAAiF;YAEjF,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;SAC/C;QACD,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC;IAC7D,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,MAAc,EAAE,OAA0C,EAAE;QAC7E,OAAO,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/esm/acebase-local.js b/dist/esm/acebase-local.js new file mode 100644 index 0000000..a6662df --- /dev/null +++ b/dist/esm/acebase-local.js @@ -0,0 +1,79 @@ +import { AceBaseBase, AceBaseBaseSettings } from 'acebase-core'; +import { AceBaseStorage } from './storage/binary/index.js'; +import { LocalApi } from './api-local.js'; +import { createLocalStorageInstance, LocalStorageSettings } from './storage/custom/local-storage/index.js'; +import { IndexedDBStorageSettings } from './storage/custom/indexed-db/settings.js'; +export { LocalStorageSettings, IndexedDBStorageSettings }; +export class AceBaseLocalSettings extends AceBaseBaseSettings { + constructor(options = {}) { + super(options); + if (options.storage) { + this.storage = options.storage; + // If they were set on global settings, copy IPC and transaction settings to storage settings + if (options.ipc) { + this.storage.ipc = options.ipc; + } + if (options.transactions) { + this.storage.transactions = options.transactions; + } + } + } +} +export class AceBase extends AceBaseBase { + /** + * @param dbname Name of the database to open or create + */ + constructor(dbname, init = {}) { + const settings = new AceBaseLocalSettings(init); + super(dbname, settings); + const apiSettings = { + db: this, + settings, + }; + this.api = new LocalApi(dbname, apiSettings, () => { + this.emit('ready'); + }); + this.recovery = { + repairNode: async (path, options) => { + if (this.api.storage instanceof AceBaseStorage) { + await this.api.storage.repairNode(path, options); + } + else if (!this.api.storage.repairNode) { + throw new Error(`repairNode is not supported with chosen storage engine`); + } + }, + }; + } + async close() { + // Close the database by calling exit on the ipc channel, which will emit an 'exit' event when the database can be safely closed. + await this.api.storage.close(); + } + get settings() { + const ipc = this.api.storage.ipc, debug = this.debug; + return { + get logLevel() { return debug.level; }, + set logLevel(level) { debug.setLevel(level); }, + get ipcEvents() { return ipc.eventsEnabled; }, + set ipcEvents(enabled) { ipc.eventsEnabled = enabled; }, + }; + } + /** + * Creates an AceBase database instance using LocalStorage or SessionStorage as storage engine. When running in non-browser environments, set + * settings.provider to a custom LocalStorage provider, eg 'node-localstorage' + * @param dbname Name of the database + * @param settings optional settings + */ + static WithLocalStorage(dbname, settings = {}) { + const db = createLocalStorageInstance(dbname, settings); + return db; + } + /** + * Creates an AceBase database instance using IndexedDB as storage engine. Only available in browser contexts! + * @param dbname Name of the database + * @param settings optional settings + */ + static WithIndexedDB(dbname, init = {}) { + throw new Error(`IndexedDB storage can only be used in browser contexts`); + } +} +//# sourceMappingURL=acebase-local.js.map \ No newline at end of file diff --git a/dist/esm/acebase-local.js.map b/dist/esm/acebase-local.js.map new file mode 100644 index 0000000..cc2ed7a --- /dev/null +++ b/dist/esm/acebase-local.js.map @@ -0,0 +1 @@ +{"version":3,"file":"acebase-local.js","sourceRoot":"","sources":["../../src/acebase-local.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/api-local.js b/dist/esm/api-local.js new file mode 100644 index 0000000..1047e8a --- /dev/null +++ b/dist/esm/api-local.js @@ -0,0 +1,298 @@ +import { Api } from 'acebase-core'; +import { AceBaseStorage, AceBaseStorageSettings } from './storage/binary/index.js'; +import { SQLiteStorage, SQLiteStorageSettings } from './storage/sqlite/index.js'; +import { MSSQLStorage, MSSQLStorageSettings } from './storage/mssql/index.js'; +import { CustomStorage, CustomStorageSettings } from './storage/custom/index.js'; +import { VALUE_TYPES } from './node-value-types.js'; +import { query as executeQuery } from './query.js'; +export class LocalApi extends Api { + constructor(dbname = 'default', init, readyCallback) { + super(); + this.db = init.db; + const storageEnv = { logLevel: init.settings.logLevel }; + if (typeof init.settings.storage === 'object') { + // settings.storage.logLevel = settings.logLevel; + if (SQLiteStorageSettings && (init.settings.storage instanceof SQLiteStorageSettings)) { // || env.settings.storage.type === 'sqlite' + this.storage = new SQLiteStorage(dbname, init.settings.storage, storageEnv); + } + else if (MSSQLStorageSettings && (init.settings.storage instanceof MSSQLStorageSettings)) { // || env.settings.storage.type === 'mssql' + this.storage = new MSSQLStorage(dbname, init.settings.storage, storageEnv); + } + else if (CustomStorageSettings && (init.settings.storage instanceof CustomStorageSettings)) { // || settings.storage.type === 'custom' + this.storage = new CustomStorage(dbname, init.settings.storage, storageEnv); + } + else { + const storageSettings = init.settings.storage instanceof AceBaseStorageSettings + ? init.settings.storage + : new AceBaseStorageSettings(init.settings.storage); + this.storage = new AceBaseStorage(dbname, storageSettings, storageEnv); + } + } + else { + this.storage = new AceBaseStorage(dbname, new AceBaseStorageSettings(), storageEnv); + } + this.storage.on('ready', readyCallback); + } + async stats(options) { + return this.storage.stats; + } + subscribe(path, event, callback) { + this.storage.subscriptions.add(path, event, callback); + } + unsubscribe(path, event, callback) { + this.storage.subscriptions.remove(path, event, callback); + } + /** + * Creates a new node or overwrites an existing node + * @param path + * @param value Any value will do. If the value is small enough to be stored in a parent record, it will take care of it + * @returns returns a promise with the new cursor (if transaction logging is enabled) + */ + async set(path, value, options = { + suppress_events: false, + context: null, + }) { + const cursor = await this.storage.setNode(path, value, { suppress_events: options.suppress_events, context: options.context }); + return { ...(cursor && { cursor }) }; + } + /** + * Updates an existing node, or creates a new node. + * @returns returns a promise with the new cursor (if transaction logging is enabled) + */ + async update(path, updates, options = { + suppress_events: false, + context: null, + }) { + const cursor = await this.storage.updateNode(path, updates, { suppress_events: options.suppress_events, context: options.context }); + return { ...(cursor && { cursor }) }; + } + get transactionLoggingEnabled() { + return this.storage.settings.transactions && this.storage.settings.transactions.log === true; + } + /** + * Gets the value of a node + * @param options when omitted retrieves all nested data. If `include` is set to an array of keys it will only return those children. + * If `exclude` is set to an array of keys, those values will not be included + */ + async get(path, options) { + if (!options) { + options = {}; + } + if (typeof options.include !== 'undefined' && !(options.include instanceof Array)) { + throw new TypeError(`options.include must be an array of key names`); + } + if (typeof options.exclude !== 'undefined' && !(options.exclude instanceof Array)) { + throw new TypeError(`options.exclude must be an array of key names`); + } + if (['undefined', 'boolean'].indexOf(typeof options.child_objects) < 0) { + throw new TypeError(`options.child_objects must be a boolean`); + } + const node = await this.storage.getNode(path, options); + return { value: node.value, context: { acebase_cursor: node.cursor }, cursor: node.cursor }; + } + /** + * Performs a transaction on a Node + * @param path + * @param callback callback is called with the current value. The returned value (or promise) will be used as the new value. When the callbacks returns undefined, the transaction will be canceled. When callback returns null, the node will be removed. + * @returns returns a promise with the new cursor (if transaction logging is enabled) + */ + async transaction(path, callback, options = { + suppress_events: false, + context: null, + }) { + const cursor = await this.storage.transactNode(path, callback, { suppress_events: options.suppress_events, context: options.context }); + return { ...(cursor && { cursor }) }; + } + async exists(path) { + const nodeInfo = await this.storage.getNodeInfo(path); + return nodeInfo.exists; + } + // query2(path, query, options = { snapshots: false, include: undefined, exclude: undefined, child_objects: undefined }) { + // /* + // Now that we're using indexes to filter data and order upon, each query requires a different strategy + // to get the results the quickest. + // So, we'll analyze the query first, build a strategy and then execute the strategy + // Analyze stage: + // - what path is being queried (wildcard path or single parent) + // - which indexes are available for the path + // - which indexes can be used for filtering + // - which indexes can be used for sorting + // - is take/skip used to limit the result set + // Strategy stage: + // - chain index filtering + // - .... + // TODO! + // */ + // } + /** + * @returns Returns a promise that resolves with matching data or paths in `results` + */ + async query(path, query, options = { snapshots: false }) { + const results = await executeQuery(this, path, query, options); + return results; + } + /** + * Creates an index on key for all child nodes at path + */ + createIndex(path, key, options) { + return this.storage.indexes.create(path, key, options); + } + /** + * Gets all indexes + */ + async getIndexes() { + return this.storage.indexes.list(); + } + /** + * Deletes an existing index from the database + */ + async deleteIndex(filePath) { + return this.storage.indexes.delete(filePath); + } + async reflect(path, type, args) { + args = args || {}; + const getChildren = async (path, limit = 50, skip = 0, from = null) => { + if (typeof limit === 'string') { + limit = parseInt(limit); + } + if (typeof skip === 'string') { + skip = parseInt(skip); + } + if (['null', 'undefined'].includes(from)) { + from = null; + } + const children = []; // Array<{ key: string | number; type: string; value: any; address?: any }>; + let n = 0, stop = false, more = false; //stop = skip + limit, + await this.storage.getChildren(path) + .next(childInfo => { + if (stop) { + // Stop 1 child too late on purpose to make sure there's more + more = true; + return false; // Stop iterating + } + n++; + const include = from !== null ? childInfo.key > from : skip === 0 || n > skip; + if (include) { + children.push({ + key: typeof childInfo.key === 'string' ? childInfo.key : childInfo.index, + type: childInfo.valueTypeName, + value: childInfo.value, + // address is now only added when storage is acebase. Not when eg sqlite, mssql + ...(typeof childInfo.address === 'object' && 'pageNr' in childInfo.address && { + address: { + pageNr: childInfo.address.pageNr, + recordNr: childInfo.address.recordNr, + }, + }), + }); + } + stop = limit > 0 && children.length === limit; // flag, but don't stop now. Otherwise we won't know if there's more + }) + .catch(err => { + // Node doesn't exist? No children.. + }); + return { + more, + list: children, + }; + }; + switch (type) { + case 'children': { + const result = await getChildren(path, args.limit, args.skip, args.from); + return result; + } + case 'info': { + const info = { + key: '', + exists: false, + type: 'unknown', + value: undefined, + address: undefined, + children: { + count: 0, + more: false, + list: [], + }, + }; + const nodeInfo = await this.storage.getNodeInfo(path, { include_child_count: args.child_count === true }); + info.key = typeof nodeInfo.key !== 'undefined' ? nodeInfo.key : nodeInfo.index; + info.exists = nodeInfo.exists; + info.type = nodeInfo.exists ? nodeInfo.valueTypeName : undefined; + info.value = nodeInfo.value; + info.address = typeof nodeInfo.address === 'object' && 'pageNr' in nodeInfo.address + ? { + pageNr: nodeInfo.address.pageNr, + recordNr: nodeInfo.address.recordNr, + } + : undefined; + const isObjectOrArray = nodeInfo.exists && nodeInfo.address && [VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(nodeInfo.type); + if (args.child_count === true) { + // set child count instead of enumerating + info.children = { count: isObjectOrArray ? nodeInfo.childCount : 0 }; + } + else if (typeof args.child_limit === 'number' && args.child_limit > 0) { + if (isObjectOrArray) { + info.children = await getChildren(path, args.child_limit, args.child_skip, args.child_from); + } + } + return info; + } + } + } + export(path, stream, options = { + format: 'json', + type_safe: true, + }) { + return this.storage.exportNode(path, stream, options); + } + import(path, read, options = { + format: 'json', + suppress_events: false, + method: 'set', + }) { + return this.storage.importNode(path, read, options); + } + async setSchema(path, schema) { + return this.storage.setSchema(path, schema); + } + async getSchema(path) { + return this.storage.getSchema(path); + } + async getSchemas() { + return this.storage.getSchemas(); + } + async validateSchema(path, value, isUpdate) { + return this.storage.validateSchema(path, value, { updates: isUpdate }); + } + /** + * Gets all relevant mutations for specific events on a path and since specified cursor + */ + async getMutations(filter) { + if (typeof this.storage.getMutations !== 'function') { + throw new Error('Used storage type does not support getMutations'); + } + if (typeof filter !== 'object') { + throw new Error('No filter specified'); + } + if (typeof filter.cursor !== 'string' && typeof filter.timestamp !== 'number') { + throw new Error('No cursor or timestamp given'); + } + return this.storage.getMutations(filter); + } + /** + * Gets all relevant effective changes for specific events on a path and since specified cursor + */ + async getChanges(filter) { + if (typeof this.storage.getChanges !== 'function') { + throw new Error('Used storage type does not support getChanges'); + } + if (typeof filter !== 'object') { + throw new Error('No filter specified'); + } + if (typeof filter.cursor !== 'string' && typeof filter.timestamp !== 'number') { + throw new Error('No cursor or timestamp given'); + } + return this.storage.getChanges(filter); + } +} +//# sourceMappingURL=api-local.js.map \ No newline at end of file diff --git a/dist/esm/api-local.js.map b/dist/esm/api-local.js.map new file mode 100644 index 0000000..0a4b9e4 --- /dev/null +++ b/dist/esm/api-local.js.map @@ -0,0 +1 @@ +{"version":3,"file":"api-local.js","sourceRoot":"","sources":["../../src/api-local.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/async-task-batch.js b/dist/esm/async-task-batch.js new file mode 100644 index 0000000..ea6eb75 --- /dev/null +++ b/dist/esm/async-task-batch.js @@ -0,0 +1,73 @@ +export class AsyncTaskBatch { + /** + * Creates a new batch: runs a maximum amount of async tasks simultaniously and waits until they are all resolved. + * If all tasks succeed, returns the results in the same order tasks were added (like `Promise.all` would do), but + * cancels any waiting tasks upon failure of one task. Note that the execution order of tasks added after the set + * limit is unknown. + * @param name (optional) name of the batch + * @param limit Max amount of async functions to execute simultaniously. Default is `1000` + */ + constructor(limit = 1000, options) { + this.limit = limit; + this.options = options; + this.added = 0; + this.scheduled = []; + this.running = 0; + this.results = []; + this.done = false; + } + async execute(task, index) { + try { + this.running++; + const result = await task(); + this.results[index] = result; + this.running--; + if (this.running === 0 && this.scheduled.length === 0) { + // Finished + this.done = true; + this.doneCallback?.(this.results); + } + else if (this.scheduled.length > 0) { + // Run next scheduled task + const next = this.scheduled.shift(); + this.execute(next.task, next.index); + } + } + catch (err) { + this.done = true; + this.errorCallback?.(err); + } + } + add(task) { + if (this.done) { + throw new Error(`Cannot add to a batch that has already finished. Use wait option and start batch processing manually if you are adding tasks in an async loop`); + } + const index = this.added++; + if (this.options?.wait !== true && this.running < this.limit) { + this.execute(task, index); + } + else { + this.scheduled.push({ task, index }); + } + } + /** + * Manually starts batch processing, mus be done if the `wait` option was used + */ + start() { + while (this.running < this.limit) { + const next = this.scheduled.shift(); + this.execute(next.task, next.index); + } + } + async finish() { + if (this.running === 0 && this.scheduled.length === 0) { + return this.results; + } + await new Promise((resolve, reject) => { + this.doneCallback = resolve; + this.errorCallback = reject; + }); + return this.results; + } +} +//# sourceMappingURL=async-task-batch.js.map \ No newline at end of file diff --git a/dist/esm/async-task-batch.js.map b/dist/esm/async-task-batch.js.map new file mode 100644 index 0000000..14d2897 --- /dev/null +++ b/dist/esm/async-task-batch.js.map @@ -0,0 +1 @@ +{"version":3,"file":"async-task-batch.js","sourceRoot":"","sources":["../../src/async-task-batch.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAc;IASvB;;;;;;;OAOG;IACH,YAAmB,QAAQ,IAAI,EAAS,OAA2C;QAAhE,UAAK,GAAL,KAAK,CAAO;QAAS,YAAO,GAAP,OAAO,CAAoC;QAhB3E,UAAK,GAAG,CAAC,CAAC;QACV,cAAS,GAAG,EAAwD,CAAC;QACrE,YAAO,GAAG,CAAC,CAAC;QACZ,YAAO,GAAG,EAAW,CAAC;QAGtB,SAAI,GAAG,KAAK,CAAC;IAUkE,CAAC;IAEhF,KAAK,CAAC,OAAO,CAAC,IAAwB,EAAE,KAAa;QACzD,IAAI;YACA,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;YAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;YAEf,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;gBACnD,WAAW;gBACX,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBACjB,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACrC;iBACI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChC,0BAA0B;gBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;gBACpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;aACvC;SACJ;QACD,OAAO,GAAG,EAAE;YACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC;SAC7B;IACL,CAAC;IAED,GAAG,CAAC,IAAwB;QACxB,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,+IAA+I,CAAC,CAAC;SACpK;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE;YAC1D,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAC7B;aACI;YACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;SACxC;IACL,CAAC;IAED;;OAEG;IACH,KAAK;QACD,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;SACvC;IACL,CAAC;IAED,KAAK,CAAC,MAAM;QACR,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YACnD,OAAO,IAAI,CAAC,OAAO,CAAC;SACvB;QACD,MAAM,IAAI,OAAO,CAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;YAC5B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/esm/binary.js b/dist/esm/binary.js new file mode 100644 index 0000000..3453099 --- /dev/null +++ b/dist/esm/binary.js @@ -0,0 +1,297 @@ +export function writeByteLength(bytes, index, length) { + bytes[index] = (length >> 24) & 0xff; + bytes[index + 1] = (length >> 16) & 0xff; + bytes[index + 2] = (length >> 8) & 0xff; + bytes[index + 3] = length & 0xff; + return bytes; +} +export function readByteLength(bytes, index) { + const length = (bytes[index] << 24) + | (bytes[index + 1] << 16) + | (bytes[index + 2] << 8) + | bytes[index + 3]; + return length; +} +const MAX_SIGNED_NUMBER = Math.pow(2, 31) - 1; +export function writeSignedNumber(bytes, index, offset) { + const negative = offset < 0; + if (negative) { + offset = -offset; + } + if (offset > MAX_SIGNED_NUMBER) { + throw new Error(`reference offset to big to store in 31 bits`); + } + bytes[index] = ((offset >> 24) & 0x7f) | (negative ? 0x80 : 0); + bytes[index + 1] = (offset >> 16) & 0xff; + bytes[index + 2] = (offset >> 8) & 0xff; + bytes[index + 3] = offset & 0xff; + return bytes; +} +export function readSignedNumber(bytes, index) { + let nr = ((bytes[index] & 0x7f) << 24) | (bytes[index + 1] << 16) | (bytes[index + 2] << 8) | bytes[index + 3]; + const isNegative = (bytes[index] & 0x80) > 0; + if (isNegative) { + nr = -nr; + } + return nr; +} +const MAX_SIGNED_OFFSET = Math.pow(2, 47) - 1; +// input: 2315765760 +// expected output: [0, 0, 138, 7, 200, 0] +export function writeSignedOffset(bytes, index, offset, large = false) { + if (!large) { + // throw new Error('DEV: write large offsets only! (remove error later when successfully implemented)'); + return writeSignedNumber(bytes, index, offset); + } + const negative = offset < 0; + if (negative) { + offset = -offset; + } + if (offset > MAX_SIGNED_OFFSET) { + throw new Error(`reference offset to big to store in 47 bits`); + } + // Bitwise operations in javascript are 32 bits, so they cannot be used on larger numbers + // Split the large number into 6 8-bit numbers by division instead + let n = offset; + for (let i = 0; i < 6; i++) { + const b = n & 0xff; + bytes[index + 5 - i] = b; + n = n <= b ? 0 : (n - b) / 256; + } + if (negative) { + bytes[index] |= 0x80; + } + return bytes; +} +export function readSignedOffset(bytes, index, large = false) { + if (!large) { + // throw new Error('DEV: read large offsets only! (remove error later when successfully implemented)'); + return readSignedNumber(bytes, index); + } + let offset = 0; + const isNegative = (bytes[index] & 0x80) > 0; + for (let i = 0; i < 6; i++) { + let b = bytes[index + i]; + if (i === 0 && isNegative) { + b ^= 0x80; + } + offset += b * Math.pow(2, (5 - i) * 8); + } + if (isNegative) { + offset = -offset; + } + return offset; +} +export class Uint8ArrayBuilder { + // static get blockSize() { + // return 4096; + // } + constructor(bytes = null, bufferSize = 4096) { + /** @type {Uint8Array} */ + this._data = new Uint8Array(); + this._length = 0; + this._bufferSize = bufferSize; + bytes && this.append(bytes); + } + // /** + // * grows the buffer + // * @param byteCount the amount of bytes + // */ + // reserve(byteCount: number) { + // const addBytes = Uint8ArrayBuilder.blockSize * Math.ceil(byteCount / Uint8ArrayBuilder.blockSize); + // const newLength = this._data.byteLength + addBytes; + // const newData = new Uint8Array(newLength); + // newData.set(this._data, 0); + // this._data = newData; + // } + append(bytes) { + if (bytes instanceof Uint8ArrayBuilder) { + bytes = bytes.data; + } + this.reserve(bytes.length); + this._data.set(bytes, this._length); + this._length += bytes.length; + return this; + } + push(...bytes) { + if (bytes.length === 0) { + console.warn('WARNING: pushing 0 bytes to Uint8ArrayBuilder!'); + } + return this.append(bytes); + } + static writeUint32(positiveNumber, target, index) { + if (target) { + new DataView(target).setUint32(index, positiveNumber, false); + } + else { + const bytes = new Uint8Array(4); + const view = new DataView(bytes); + view.setUint32(index, positiveNumber); + return bytes; + } + } + reserve(length) { + const freeBytes = this._data.byteLength - this._length; + if (freeBytes < length) { + // Won't fit + const bytesShort = length - freeBytes; + const addBytes = this._bufferSize * Math.ceil((bytesShort * 1.1) / this._bufferSize); + const newLength = this._data.byteLength + addBytes; + // this._data = new Uint8Array(this._data.buffer, 0, newLength); + const newData = new Uint8Array(newLength); + newData.set(this._data, 0); + this._data = newData; + } + } + get dataView() { + return new DataView(this._data.buffer, this._data.byteOffset, this._data.byteLength); + } + write(data, index) { + if (typeof index !== 'number') { + throw new Error(`no index passed to write method`); + } + const grow = index + data.byteLength - this._length; + if (grow > 0) { + this.reserve(grow); + this._length += grow; + } + this._data.set(data, index); + } + writeByte(byte, index) { + if (typeof index !== 'number') { + // Append + this.reserve(1); + index = this._length; + this._length += 1; + } + this.dataView.setUint8(index, byte); + } + writeUint16(positiveNumber, index) { + if (typeof index !== 'number') { + // Append + this.reserve(2); + index = this._length; + this._length += 2; + } + this.dataView.setUint16(index, positiveNumber, false); // Use big-endian, msb first + } + writeUint32(positiveNumber, index) { + if (typeof index !== 'number') { + // Append + this.reserve(4); + index = this._length; + this._length += 4; + } + this.dataView.setUint32(index, positiveNumber, false); // Use big-endian, msb first + } + writeUint32_old(positiveNumber, index) { + const bytes = writeByteLength([], 0, positiveNumber); + if (index >= 0) { + this._data.set(bytes, index); + return this; + } + return this.append(bytes); + } + writeInt32(signedNumber, index) { + if (typeof index !== 'number') { + // Append + this.reserve(4); + index = this._length; + this._length += 4; + } + if (signedNumber > MAX_SIGNED_NUMBER || signedNumber < -MAX_SIGNED_NUMBER) { + throw new Error(`number to big to store in uint32`); + } + const negative = signedNumber < 0; + if (negative) { + // Old method uses "signed magnitude" method for negative numbers + // setInt32 uses 2's complement instead. So, for negative numbers we have + // to do something else to be backward compatible with old code + const nr = -signedNumber; // Make positive + const view = this.dataView; + view.setInt8(index, ((nr >> 24) & 0x7f) | (negative ? 0x80 : 0)); + view.setInt8(index + 1, (nr >> 16) & 0xff); + view.setInt8(index + 2, (nr >> 8) & 0xff); + view.setInt8(index + 3, nr & 0xff); + } + else { + this.dataView.setInt32(index, signedNumber, false); // Use big-endian, msb first + } + return this; + } + writeInt32_old(signedNumber, index) { + const bytes = writeSignedNumber([], 0, signedNumber); + if (index >= 0) { + this._data.set(bytes, index); + return this; + } + return this.append(bytes); + } + writeInt48(signedNumber, index) { + if (typeof index !== 'number') { + // Append + this.reserve(6); + index = this._length; + this._length += 6; + } + if (signedNumber > MAX_SIGNED_OFFSET || signedNumber < -MAX_SIGNED_OFFSET) { + throw new Error(`number to big to store in int48`); + } + const negative = signedNumber < 0; + // Write ourselves + let n = negative ? -signedNumber : signedNumber; + // let view = this.dataView; + for (let i = 0; i < 6; i++) { + let b = n & 0xff; + if (negative && i === 5) { + b |= 0x80; + } + this.data[index + 5 - i] = b; //view.setUint8(index + 5 - i, b); + n = n <= b ? 0 : (n - b) / 256; + } + // else { + // // No way to write an Uint48 natively, so we'll write a BigInt64 and chop off 2 bytes + // let uint64 = new Uint8Array(8); + // new DataView(uint64.buffer).setBigUint64(0, signedNumber, false); + // this._data.set(uint64.slice(2), index); + // } + return this; + } + writeInt48_old(signedNumber, index) { + const bytes = writeSignedOffset([], 0, signedNumber, true); + if (index >= 0) { + this._data.set(bytes, index); + return this; + } + return this.append(bytes); + } + get data() { + return this._data.subarray(0, this._length); + } + get length() { + return this._length; + } + slice(begin, end) { + if (begin < 0) { + return this._data.subarray(this._length + begin, this._length); + } + else { + return this._data.subarray(begin, end || this._length); + } + } + splice(index, remove) { + if (typeof remove !== 'number') { + remove = this.length - index; + } + const removed = this._data.slice(index, index + remove); + if (index + remove >= this.length) { + this._length = index; + } + else { + this._data.copyWithin(index, index + remove, this._length); + this._length -= remove; + } + return removed; + } +} +//# sourceMappingURL=binary.js.map \ No newline at end of file diff --git a/dist/esm/binary.js.map b/dist/esm/binary.js.map new file mode 100644 index 0000000..d3ff16a --- /dev/null +++ b/dist/esm/binary.js.map @@ -0,0 +1 @@ +{"version":3,"file":"binary.js","sourceRoot":"","sources":["../../src/binary.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/browser.js b/dist/esm/browser.js new file mode 100644 index 0000000..2085f94 --- /dev/null +++ b/dist/esm/browser.js @@ -0,0 +1,54 @@ +/** + ________________________________________________________________________________ + + ___ ______ + / _ \ | ___ \ + / /_\ \ ___ ___| |_/ / __ _ ___ ___ + | _ |/ __/ _ \ ___ \/ _` / __|/ _ \ + | | | | (_| __/ |_/ / (_| \__ \ __/ + \_| |_/\___\___\____/ \__,_|___/\___| + realtime database + + Copyright 2018-2022 by Ewout Stortenbeker (me@appy.one) + Published under MIT license + + See docs at https://github.com/appy-one/acebase + ________________________________________________________________________________ + +*/ +import { DataReference, DataSnapshot, EventSubscription, PathReference, TypeMappings, ID, proxyAccess, DataSnapshotsArray, ObjectCollection, DataReferencesArray, EventStream, PartialArray } from 'acebase-core'; +import { AceBaseLocalSettings } from './acebase-local.js'; +import { BrowserAceBase } from './acebase-browser.js'; +import { CustomStorageSettings, CustomStorageTransaction, CustomStorageHelpers } from './storage/custom/index.js'; +const acebase = { + AceBase: BrowserAceBase, + AceBaseLocalSettings, + DataReference, + DataSnapshot, + EventSubscription, + PathReference, + TypeMappings, + CustomStorageSettings, + CustomStorageTransaction, + CustomStorageHelpers, + ID, + proxyAccess, + DataSnapshotsArray, +}; +// Expose classes to window.acebase: +window.acebase = acebase; +// Expose BrowserAceBase class as window.AceBase: +window.AceBase = BrowserAceBase; +// Expose classes for module imports: +export default acebase; +// acebase-core exports +export { DataSnapshot, DataReference, DataSnapshotsArray, DataReferencesArray, EventStream, EventSubscription, PathReference, TypeMappings, ObjectCollection, ID, proxyAccess, PartialArray, }; +// acebase exports +export { BrowserAceBase as AceBase, }; +export { AceBaseLocalSettings, LocalStorageSettings, IndexedDBStorageSettings, } from './acebase-local.js'; +export { AceBaseStorageSettings } from './storage/binary/index.js'; +export { SQLiteStorageSettings } from './storage/sqlite/index.js'; +export { MSSQLStorageSettings } from './storage/mssql/index.js'; +export { CustomStorageTransaction, CustomStorageSettings, CustomStorageHelpers, ICustomStorageNode, ICustomStorageNodeMetaData, } from './storage/custom/index.js'; +export { StorageSettings, SchemaValidationError, } from './storage/index.js'; +//# sourceMappingURL=browser.js.map \ No newline at end of file diff --git a/dist/esm/browser.js.map b/dist/esm/browser.js.map new file mode 100644 index 0000000..7169ff8 --- /dev/null +++ b/dist/esm/browser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;EAiBE;AAEF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EACjG,kBAAkB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,WAAW,EAEnD,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAEzG,MAAM,OAAO,GAAG;IACZ,OAAO,EAAE,cAAc;IACvB,oBAAoB;IACpB,aAAa;IACb,YAAY;IACZ,iBAAiB;IACjB,aAAa;IACb,YAAY;IACZ,qBAAqB;IACrB,wBAAwB;IACxB,oBAAoB;IACpB,EAAE;IACF,WAAW;IACX,kBAAkB;CACrB,CAAC;AAEF,oCAAoC;AACnC,MAAc,CAAC,OAAO,GAAG,OAAO,CAAC;AAClC,iDAAiD;AAChD,MAAc,CAAC,OAAO,GAAG,cAAc,CAAC;AAEzC,qCAAqC;AACrC,eAAe,OAAO,CAAC;AAEvB,uBAAuB;AACvB,OAAO,EACH,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,YAAY,EAQZ,gBAAgB,EAChB,EAAE,EACF,WAAW,EACX,YAAY,GACf,CAAC;AAEF,kBAAkB;AAClB,OAAO,EACH,cAAc,IAAI,OAAO,GAC5B,CAAC;AAEF,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,GAC3B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EACH,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,GAC7B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACH,eAAe,EAGf,qBAAqB,GACxB,MAAM,WAAW,CAAC"} \ No newline at end of file diff --git a/dist/esm/btree/binary-pointer.js b/dist/esm/btree/binary-pointer.js new file mode 100644 index 0000000..db7317e --- /dev/null +++ b/dist/esm/btree/binary-pointer.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=binary-pointer.js.map \ No newline at end of file diff --git a/dist/esm/btree/binary-pointer.js.map b/dist/esm/btree/binary-pointer.js.map new file mode 100644 index 0000000..3b7fbac --- /dev/null +++ b/dist/esm/btree/binary-pointer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"binary-pointer.js","sourceRoot":"","sources":["../../../src/btree/binary-pointer.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/esm/btree/binary-reader.js b/dist/esm/btree/binary-reader.js new file mode 100644 index 0000000..a0dcf18 --- /dev/null +++ b/dist/esm/btree/binary-reader.js @@ -0,0 +1,189 @@ +import { Utils } from 'acebase-core'; +import { readByteLength, readSignedNumber } from '../binary.js'; +import { DetailedError } from '../detailed-error.js'; +import { pfs } from '../promise-fs/index.js'; +import { BPlusTree } from './tree.js'; +const { bytesToNumber } = Utils; +export class BinaryReader { + /** + * BinaryReader is a helper class to make reading binary data easier and faster + * @param file file name, file descriptor, or an open file, or read function that returns a promise + * @param chunkSize how many bytes per read. default is 4KB + */ + constructor(file, chunkSize = 4096) { + this.chunkSize = chunkSize; + this.data = null; + /** + * offset of loaded data (start index of current chunk in data source) + */ + this.offset = 0; + /** + * current chunk reading index ("cursor" in currently loaded chunk) + */ + this.index = 0; + this.chunkSize = chunkSize; + if (typeof file === 'function') { + // Use the passed function for reads + this.read = file; + } + else { + let fd; + if (typeof file === 'number') { + // Use the passed file descriptor + fd = file; + } + else if (typeof file === 'string') { + // Read from passed file name + // Override this.init to open the file first + const init = this.init.bind(this); + this.init = async () => { + fd = await pfs.open(file, 'r'); // Open file now + return init(); // Run original this.init + }; + this.close = async () => { + return pfs.close(fd); + }; + } + else { + throw new DetailedError('invalid-file-argument', 'invalid file argument'); + } + this.read = async (index, length) => { + const buffer = Buffer.alloc(length); + const { bytesRead } = await pfs.read(fd, buffer, 0, length, index); + if (bytesRead < length) { + return buffer.slice(0, bytesRead); + } + return buffer; + }; + } + } + async init() { + const chunk = await this.read(0, this.chunkSize); + console.assert(chunk instanceof Buffer, 'read function must return a Buffer'); + this.data = chunk; + this.offset = 0; + this.index = 0; + } + clone() { + const clone = Object.assign(new BinaryReader(this.read, this.chunkSize), this); + clone.offset = 0; + clone.index = 0; + clone.data = Buffer.alloc(0); + return clone; + } + async get(byteCount) { + await this.assert(byteCount); + // const bytes = this.data.slice(this.index, this.index + byteCount); + const slice = this.data.slice(this.index, this.index + byteCount); // Buffer.from(this.data.buffer, this.index, byteCount); + if (slice.byteLength !== byteCount) { + throw new DetailedError('invalid_byte_length', `Expected to read ${byteCount} bytes from tree, got ${slice.byteLength}`); + } + this.index += byteCount; + return slice; + } + async getInt32() { + const buffer = await this.get(4); + return readSignedNumber(buffer, 0); + } + async getUint32() { + const buffer = await this.get(4); + return readByteLength(buffer, 0); + } + async getValue() { + const header = await this.get(2); + const length = header[1]; + await this.seek(-2); + const buffer = await this.get(length + 2); + return BinaryReader.readValue(buffer, 0).value; + // // TODO: Refactor not to convert buffer to array and back to buffer + // let b = await this.get(2); + // let bytes = Array.from(b); + // b = await this.get(bytes[1]); + // _appendToArray(bytes, Array.from(b)); + // return BinaryReader.readValue(Buffer.from(bytes), 0).value; + } + async more(chunks = 1) { + const length = chunks * this.chunkSize; + const nextChunk = await this.read(this.offset + this.data.length, length); + console.assert(nextChunk instanceof Buffer, 'read function must return a Buffer'); + // Let go of old data before current index: + this.data = this.data.slice(this.index); + this.offset += this.index; + this.index = 0; + // Append new data + const newData = Buffer.alloc(this.data.length + nextChunk.length); + newData.set(this.data, 0); + newData.set(nextChunk, this.data.length); + this.data = newData; + } + async seek(offset) { + if (this.index + offset < this.data.length) { + this.index += offset; + } + else { + const dataIndex = this.offset + this.index + offset; + const newChunk = await this.read(dataIndex, this.chunkSize); + this.data = newChunk; + this.offset = dataIndex; + this.index = 0; + } + } + async assert(byteCount) { + if (byteCount < 0) { + throw new DetailedError('invalid_byte_count', `Cannot read ${byteCount} bytes from tree`); + } + if (this.index + byteCount > this.data.byteLength) { + await this.more(Math.ceil(byteCount / this.chunkSize)); + if (this.index + byteCount > this.data.byteLength) { + throw new DetailedError('EOF', 'end of file'); + } + } + } + skip(byteCount) { + this.index += byteCount; + } + rewind(byteCount) { + this.index -= byteCount; + } + async go(index) { + if (this.offset <= index && this.offset + this.data.byteLength > index) { + this.index = index - this.offset; + } + else { + const chunk = await this.read(index, this.chunkSize); + this.data = chunk; + this.offset = index; + this.index = 0; + } + } + savePosition(offsetCorrection = 0) { + const savedIndex = this.offset + this.index + offsetCorrection; + const go = (offset = 0) => { + const index = savedIndex + offset; + return this.go(index); + }; + return { + go, + index: savedIndex, + }; + } + get sourceIndex() { + return this.offset + this.index; + } + static readValue(buffer, index) { + const arr = buffer; // Hack, getKeyFromBinary will work with a Buffer too + const val = BPlusTree.getKeyFromBinary(arr, index); + return { value: val.key, byteLength: val.byteLength }; + } + static bytesToNumber(buffer) { + const arr = buffer; // Hack, bytesToNumber will work with a Buffer too + return bytesToNumber(arr); + } + static readUint32(buffer, index) { + return readSignedNumber(buffer, index); + } + static readInt32(buffer, index) { + return readByteLength(buffer, index); + } +} +//# sourceMappingURL=binary-reader.js.map \ No newline at end of file diff --git a/dist/esm/btree/binary-reader.js.map b/dist/esm/btree/binary-reader.js.map new file mode 100644 index 0000000..0f41171 --- /dev/null +++ b/dist/esm/btree/binary-reader.js.map @@ -0,0 +1 @@ +{"version":3,"file":"binary-reader.js","sourceRoot":"","sources":["../../../src/btree/binary-reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,MAAM,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;AAIhC,MAAM,OAAO,YAAY;IAgBrB;;;;OAIG;IACH,YAAY,IAAoC,EAAS,YAAY,IAAI;QAAhB,cAAS,GAAT,SAAS,CAAO;QAjBlE,SAAI,GAAW,IAAI,CAAC;QAE3B;;WAEG;QACI,WAAM,GAAG,CAAC,CAAC;QAElB;;WAEG;QACI,UAAK,GAAG,CAAC,CAAC;QAQb,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAE3B,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;YAC5B,oCAAoC;YACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;SACpB;aACI;YACD,IAAI,EAAU,CAAC;YACf,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;gBAC1B,iCAAiC;gBACjC,EAAE,GAAG,IAAI,CAAC;aACb;iBACI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;gBAC/B,6BAA6B;gBAC7B,4CAA4C;gBAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClC,IAAI,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE;oBACnB,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,gBAAgB;oBAChD,OAAO,IAAI,EAAE,CAAC,CAAC,yBAAyB;gBAC5C,CAAC,CAAC;gBACF,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;oBACpB,OAAO,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACzB,CAAC,CAAC;aACL;iBACI;gBACD,MAAM,IAAI,aAAa,CAAC,uBAAuB,EAAE,uBAAuB,CAAC,CAAC;aAC7E;YAED,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBAChC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACpC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;gBACnE,IAAI,SAAS,GAAG,MAAM,EAAE;oBAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;iBAAE;gBAC9D,OAAO,MAAM,CAAC;YAClB,CAAC,CAAC;SACL;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACN,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,OAAO,CAAC,MAAM,CAAC,KAAK,YAAY,MAAM,EAAE,oCAAoC,CAAC,CAAC;QAC9E,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,KAAK;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/E,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACjB,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QAChB,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,SAAiB;QACvB,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC7B,qEAAqE;QACrE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,wDAAwD;QAC3H,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE;YAAE,MAAM,IAAI,aAAa,CAAC,qBAAqB,EAAE,oBAAoB,SAAS,yBAAyB,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;SAAE;QACjK,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC;QACxB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACjC,OAAO,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,SAAS;QACX,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACjC,OAAO,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1C,OAAO,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAE/C,sEAAsE;QACtE,6BAA6B;QAC7B,6BAA6B;QAC7B,gCAAgC;QAChC,wCAAwC;QACxC,8DAA8D;IAClE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QACjB,MAAM,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;QACvC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1E,OAAO,CAAC,MAAM,CAAC,SAAS,YAAY,MAAM,EAAE,oCAAoC,CAAC,CAAC;QAElF,2CAA2C;QAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAEf,kBAAkB;QAClB,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAc;QACrB,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACxC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC;SACxB;aACI;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;YACpD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5D,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;YACrB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;SAClB;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAiB;QAC1B,IAAI,SAAS,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,aAAa,CAAC,oBAAoB,EAAE,eAAe,SAAS,kBAAkB,CAAC,CAAC;SAAE;QACjH,IAAI,IAAI,CAAC,KAAK,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAC/C,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YACvD,IAAI,IAAI,CAAC,KAAK,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBAC/C,MAAM,IAAI,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;aACjD;SACJ;IACL,CAAC;IAED,IAAI,CAAC,SAAiB;QAClB,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,SAAiB;QACpB,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,EAAE,CAAC,KAAa;QAClB,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,EAAE;YACpE,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;SACpC;aACI;YACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;SAClB;IACL,CAAC;IAED,YAAY,CAAC,gBAAgB,GAAG,CAAC;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC;QAC/D,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE;YACtB,MAAM,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC;YAClC,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC,CAAC;QACF,OAAO;YACH,EAAE;YACF,KAAK,EAAE,UAAU;SACpB,CAAC;IACN,CAAC;IAED,IAAI,WAAW;QACX,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,MAAc,EAAE,KAAa;QAC1C,MAAM,GAAG,GAAG,MAAyB,CAAC,CAAC,qDAAqD;QAC5F,MAAM,GAAG,GAAG,SAAS,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACnD,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,MAAc;QAC/B,MAAM,GAAG,GAAG,MAAyB,CAAC,CAAC,kDAAkD;QACzF,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,MAAc,EAAE,KAAa;QAC3C,OAAO,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,MAAc,EAAE,KAAa;QAC1C,OAAO,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/esm/btree/binary-reference.js b/dist/esm/btree/binary-reference.js new file mode 100644 index 0000000..dde190c --- /dev/null +++ b/dist/esm/btree/binary-reference.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=binary-reference.js.map \ No newline at end of file diff --git a/dist/esm/btree/binary-reference.js.map b/dist/esm/btree/binary-reference.js.map new file mode 100644 index 0000000..9baed60 --- /dev/null +++ b/dist/esm/btree/binary-reference.js.map @@ -0,0 +1 @@ +{"version":3,"file":"binary-reference.js","sourceRoot":"","sources":["../../../src/btree/binary-reference.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/esm/btree/binary-tree-builder.js b/dist/esm/btree/binary-tree-builder.js new file mode 100644 index 0000000..fe75daf --- /dev/null +++ b/dist/esm/btree/binary-tree-builder.js @@ -0,0 +1,535 @@ +import { Uint8ArrayBuilder, writeByteLength, writeSignedOffset } from '../binary.js'; +import { DetailedError } from '../detailed-error.js'; +import { MAX_SMALL_LEAF_VALUE_LENGTH, WRITE_SMALL_LEAFS } from './config.js'; +import { BPlusTree } from './tree.js'; +import { Utils } from 'acebase-core'; +const { bigintToBytes, encodeString, numberToBytes } = Utils; +export const KEY_TYPE = { + UNDEFINED: 0, + STRING: 1, + NUMBER: 2, + BOOLEAN: 3, + DATE: 4, + BIGINT: 5, +}; +export const FLAGS = { + UNIQUE_KEYS: 1, + HAS_METADATA: 2, + HAS_FREE_SPACE: 4, + HAS_FILL_FACTOR: 8, + HAS_SMALL_LEAFS: 16, + HAS_LARGE_PTRS: 32, + ENTRY_HAS_EXT_DATA: 128, + IS_LEAF: 1, + LEAF_HAS_EXT_DATA: 2, +}; +export class BinaryBPlusTreeBuilder { + constructor(options = { uniqueKeys: true, smallLeafs: WRITE_SMALL_LEAFS, maxEntriesPerNode: 3, fillFactor: 95, metadataKeys: [], byteLength: 0, freeBytes: 0 }) { + this.uniqueKeys = options.uniqueKeys; + this.maxEntriesPerNode = options.maxEntriesPerNode; + this.metadataKeys = options.metadataKeys; + this.byteLength = options.byteLength; + this.freeBytes = options.freeBytes; + this.smallLeafs = options.smallLeafs; + this.fillFactor = options.fillFactor; + } + getHeader() { + const indexTypeFlags = (this.uniqueKeys ? FLAGS.UNIQUE_KEYS : 0) + | (this.metadataKeys.length > 0 ? FLAGS.HAS_METADATA : 0) + | (this.freeBytes > 0 ? FLAGS.HAS_FREE_SPACE : 0) + | (typeof this.fillFactor === 'number' && this.fillFactor > 0 && this.fillFactor <= 100 ? FLAGS.HAS_FILL_FACTOR : 0) + | (this.smallLeafs === true ? FLAGS.HAS_SMALL_LEAFS : 0) + | FLAGS.HAS_LARGE_PTRS; + const bytes = [ + // byte_length: + 0, 0, 0, 0, + // index_type: + indexTypeFlags, + // max_node_entries: + this.maxEntriesPerNode, + ]; + // update byte_length: + writeByteLength(bytes, 0, this.byteLength); + if (this.fillFactor > 0 && this.fillFactor <= 100) { + // fill_factor: + bytes.push(this.fillFactor); + } + if (this.freeBytes > 0) { + // free_byte_length: + writeByteLength(bytes, bytes.length, this.freeBytes); + } + if (this.metadataKeys.length > 0) { + // metadata_keys: + const index = bytes.length; + bytes.push(0, 0, 0, 0); // metadata_length + // metadata_key_count: + bytes.push(this.metadataKeys.length); + this.metadataKeys.forEach(key => { + // metadata_key: + bytes.push(key.length); // metadata_key_length + // metadata_key_name: + for (let i = 0; i < key.length; i++) { + bytes.push(key.charCodeAt(i)); + } + }); + // update metadata_length: + const length = bytes.length - index - 4; + writeByteLength(bytes, index, length); + } + return bytes; + } + createNode(info, options = { addFreeSpace: true, maxLength: 0 }) { + console.assert(info.entries.length > 0, 'node has no entries!'); + const bytes = [ + // byte_length: + 0, 0, 0, 0, + 0, + // free_byte_length: + 0, 0, 0, 0, + ]; + // entries_length: + bytes.push(info.entries.length); + // entries: + info.entries.forEach(entry => { + const keyBytes = BinaryBPlusTreeBuilder.getKeyBytes(entry.key); + bytes.push(...keyBytes); + // lt_child_ptr: recalculate offset + console.assert(entry.ltIndex >= 0, `node entry "${entry.key}" has ltIndex < 0: ${entry.ltIndex}`); + const ltChildOffset = entry.ltIndex === 0 ? 0 : entry.ltIndex - 5 - (info.index + bytes.length); + console.assert(options.allowMissingChildIndexes || ltChildOffset !== 0, 'A node entry\'s ltChildOffset must ALWAYS be set!'); + writeSignedOffset(bytes, bytes.length, ltChildOffset, true); + }); + // gt_child_ptr: calculate offset + const gtChildOffset = info.gtIndex === 0 ? 0 : info.gtIndex - 5 - (info.index + bytes.length); + console.assert(options.allowMissingChildIndexes || gtChildOffset !== 0, 'A node\'s gtChildOffset must ALWAYS be set!'); + writeSignedOffset(bytes, bytes.length, gtChildOffset, true); + let byteLength = bytes.length; + if (options.maxLength > 0 && byteLength > options.maxLength) { + throw new DetailedError('max-node-size-reached', `Node byte size (${byteLength}) grew above maximum of ${options.maxLength}`); + } + if (options.addFreeSpace) { + let freeSpace = 0; + if (options.maxLength > 0) { + freeSpace = options.maxLength - byteLength; + byteLength = options.maxLength; + } + else { + const freeEntries = this.maxEntriesPerNode - info.entries.length; + const avgEntrySize = Math.ceil((byteLength - 14) / info.entries.length); + // freeSpace = freeEntries * avgEntrySize; + freeSpace = Math.ceil(freeEntries * avgEntrySize * 1.1); // + 10% + byteLength += freeSpace; + } + // Add free space zero bytes + for (let i = 0; i < freeSpace; i++) { + bytes.push(0); + } + // update free_byte_length: + writeByteLength(bytes, 5, freeSpace); + } + // update byte_length: + writeByteLength(bytes, 0, byteLength); + return bytes; + } + /** + * + * @param {} info + * @param {} options + * @returns {Uint8Array} bytes + */ + createLeaf(info, options = { addFreeSpace: true }) { + // console.log(`Creating leaf for entries "${info.entries[0].key}" to "${info.entries.slice(-1)[0].key}" (${info.entries.length} entries, ${info.entries.reduce((total, entry) => total + entry.values.length, 0)} values)`); + // const tree = new BPlusTree(this.maxEntriesPerNode, this.uniqueKeys, this.metadataKeys); + // const leaf = new BPlusTreeLeaf(tree); + // info.entries.forEach(entry => { + // const leafEntry = new BPlusTreeLeafEntry(leaf, entry.key); + // leafEntry.values = entry.values; + // leaf.entries.push(leafEntry); + // // leaf.entries.push(entry); // // Changed to code above during TS port + // }); + let hasExtData = typeof info.extData === 'object' && info.extData.length > 0; + const bytes = new Uint8ArrayBuilder([ + 0, 0, 0, 0, + FLAGS.IS_LEAF | (hasExtData ? FLAGS.LEAF_HAS_EXT_DATA : 0), + 0, 0, 0, 0, // free_byte_length + ]); + const leafFlagsIndex = 4; + // prev_leaf_ptr: + const prevLeafOffset = info.prevIndex === 0 ? 0 : info.prevIndex - (info.index + 9); + bytes.writeInt48(prevLeafOffset); + // next_leaf_ptr: + let nextLeafOffset = info.nextIndex === 0 ? 0 : info.nextIndex === 'adjacent' ? 0 : info.nextIndex - (info.index + 15); + bytes.writeInt48(nextLeafOffset); + const extDataHeaderIndex = bytes.length; + bytes.push(0, 0, 0, 0, // ext_byte_length + 0, 0, 0, 0); + // entries_length: + bytes.push(info.entries.length); + const moreDataBlocks = []; + // entries: + info.entries.forEach(entry => { + const keyBytes = BinaryBPlusTreeBuilder.getKeyBytes(entry.key); + bytes.push(...keyBytes); + // val_length: + const valLengthIndex = bytes.length; + if (hasExtData && info.extData.rebuild && entry.extData && !entry.extData.loaded) { + throw new DetailedError('ext-data-not-loaded', 'extData cannot be rebuilt if an entry\'s extData isn\'t loaded'); + } + if (hasExtData && entry.extData && !info.extData.rebuild) { + // this entry has external value data (leaf is being overwritten), + // use existing details + // val_length: + bytes.push(FLAGS.ENTRY_HAS_EXT_DATA); + if (!this.uniqueKeys) { + // value_list_length: + bytes.writeUint32(entry.extData.totalValues); // _writeByteLength(bytes, bytes.length, entry.extData.totalValues); + } + // ext_data_ptr: + bytes.writeUint32(entry.extData.leafOffset); // _writeByteLength(bytes, bytes.length, entry.extData.leafOffset); + return; // next! + } + else if (this.smallLeafs) { + // val_length: (small) + bytes.push(0); + } + else { + // val_length: (large) + bytes.push(0, 0, 0, 0); + } + const valueBytes = new Uint8ArrayBuilder([]); + const addValue = (entryValue) => { + const { recordPointer, metadata } = entryValue; + // value_length: + valueBytes.push(recordPointer.length); + // value_data: + valueBytes.append(recordPointer); + // metadata: + this.metadataKeys.forEach(key => { + const metadataValue = metadata[key]; + const mdBytes = BinaryBPlusTreeBuilder.getKeyBytes(metadataValue); // metadata_value has same structure as key, so getBinaryKeyData comes in handy here + valueBytes.append(mdBytes); + }); + }; + if (this.uniqueKeys) { + // value: + addValue(entry.values[0]); + } + else { + entry.values.forEach(entryValue => { + // value: + addValue(entryValue); + }); + } + if (this.smallLeafs && valueBytes.length > MAX_SMALL_LEAF_VALUE_LENGTH) { + // Values too big for small leafs + // Store value bytes in ext_data block + if (!this.uniqueKeys) { + // value_list_length: + bytes.writeUint32(entry.values.length); // _writeByteLength(bytes, bytes.length, entry.values.length); + } + // ext_data_ptr: + const extPointerIndex = bytes.length; + bytes.push(0, 0, 0, 0); + // update val_length: + bytes.data[valLengthIndex] = FLAGS.ENTRY_HAS_EXT_DATA; + // add the data + if (hasExtData && !info.extData.rebuild) { + // adding ext_data_block to existing leaf is impossible here, + // because we don't have existing ext_data + // addExtData function must be supplied to handle writing + console.assert(typeof options.addExtData === 'function', 'to add ext_data to existing leaf, provide addExtData function to options'); + const { extIndex } = options.addExtData(extPointerIndex, valueBytes.data); + bytes.writeUint32(extIndex, extPointerIndex); + } + else { + // add to in-memory block, leaf output will include ext_data + moreDataBlocks.push({ + pointerIndex: extPointerIndex, + bytes: valueBytes, + }); + } + } + else { + // update val_length: + const valLength = valueBytes.length + (this.uniqueKeys ? 0 : 4); // +4 to include value_list_length bytes //bytes.length - valLengthIndex - 4; + if (this.smallLeafs) { + bytes.data[valLengthIndex] = valLength; + } + else { + bytes.writeUint32(valLength, valLengthIndex); // _writeByteLength(bytes, valLengthIndex, valLength); + } + if (!this.uniqueKeys) { + // value_list_length: + bytes.writeUint32(entry.values.length); // _writeByteLength(bytes, bytes.length, entry.values.length); + } + // add value bytes: + bytes.append(valueBytes); // _appendToArray(bytes, valueBytes); + } + }); + if (moreDataBlocks.length > 0) { + // additional ext_data block will be written + if (!hasExtData && typeof options.maxLength === 'number' && options.maxLength > 0) { + // Try if ext_data_block can be added to the leaf by shrinking the leaf size + // (using its free space for ext_data block) + const minExtDataLength = options.addFreeSpace + ? Math.ceil(moreDataBlocks.reduce((length, block) => length + 8 + Math.ceil(block.bytes.length * 1.1), 0) * 1.1) + : moreDataBlocks.reduce((length, block) => length + 8 + block.bytes.length, 0); + const freeBytes = options.maxLength - bytes.length; + if (freeBytes < minExtDataLength) { + throw new DetailedError('leaf-too-small-for-extdata', 'leaf needs rebuild: not enough free space to extend leaf with ext_data'); + } + // Move free space to ext_data: + options.maxLength -= minExtDataLength; + info.extData = { + length: minExtDataLength, + }; + } + hasExtData = true; + // update leaf_flags: + bytes.data[leafFlagsIndex] |= FLAGS.LEAF_HAS_EXT_DATA; + } + if (!hasExtData) { + // update leaf_flags: + bytes.data[leafFlagsIndex] &= ~FLAGS.LEAF_HAS_EXT_DATA; // if ((bytes[leafFlagsIndex] & FLAGS.LEAF_HAS_EXT_DATA) > 0) { bytes[leafFlagsIndex] ^= FLAGS.LEAF_HAS_EXT_DATA }; // has_ext_data (no) + // remove ext_byte_length, ext_free_byte_length + bytes.splice(extDataHeaderIndex, 8); + } + let byteLength = bytes.length; + if (options.maxLength > 0 && byteLength > options.maxLength) { + throw new DetailedError('max-leaf-size-reached', `leaf byte size grew above maximum of ${options.maxLength}`); + } + let freeSpace = 0; + if (options.addFreeSpace) { + if (options.maxLength > 0) { + freeSpace = options.maxLength - byteLength; + byteLength = options.maxLength; + } + else { + const freeEntries = this.maxEntriesPerNode - info.entries.length; + const avgEntrySize = info.entries.length === 0 ? 1 : Math.ceil((byteLength - 18) / info.entries.length); + // freeSpace = (freeEntries * avgEntrySize) + (avgEntrySize * 2); + freeSpace = Math.ceil(freeEntries * avgEntrySize * 1.1); // + 10% + byteLength += freeSpace; + } + // Add free space zero bytes + bytes.append(new Uint8Array(freeSpace)); // Uint8Array is initialized with 0's + // update free_byte_length: + bytes.writeUint32(freeSpace, 5); + } + // update byte_length: + bytes.writeUint32(byteLength, 0); + // Now, add any ext_data blocks + if (moreDataBlocks.length > 0) { + // Can only happen when this is a new leaf, or when it's being rebuilt + const fbm = options.addFreeSpace ? 0.1 : 0; // fmb -> free bytes multiplier + const maxEntries = this.maxEntriesPerNode; + const extDataSize = { + // minimum size: all ext_data blocks with 10% free space + minimum: moreDataBlocks.reduce((total, block) => total + 8 + block.bytes.length + Math.ceil(block.bytes.length * fbm), 0), + // average size: minimum + 10% free bytes for growth + get average() { return Math.ceil(this.minimum * (1 + fbm)); }, + // ideal size: minimum size + room for more entries percentagewise + get ideal() { + const avgExtBlockSize = Math.ceil(this.minimum / moreDataBlocks.length); + const extDataValueRatio = moreDataBlocks.length / info.entries.length; + // if 5 out of 200 entries have extData: ratio === 0.025 (2.5%) + // with total current extData size of 800 bytes, that means it should + // allow growth for another 2.5% of remaining entries. With a max of + // 255 entries, that means leaving room for 2.5% of 55 more entries. + // So, max_entries * ratio * avg_block_size gives us that number! + const idealSize = Math.ceil(maxEntries * extDataValueRatio) * avgExtBlockSize; + return idealSize; + }, + used: 0, + }; + extDataSize.used = info.extData + ? info.extData.length + : extDataSize.ideal; // default + if (info.extData && info.extData.length < extDataSize.minimum) { // && info.extData.rebuild + // ext_data becomes too large + // Try to steal free bytes from leaf + let bytesShort = extDataSize.ideal - info.extData.length; // first try getting space for free ext_data bytes as well + extDataSize.used = extDataSize.ideal; + if (freeSpace < bytesShort) { + // Not enough free space for the ideal size. Try again with only 10% free bytes + bytesShort = extDataSize.average - info.extData.length; + extDataSize.used = extDataSize.average; + } + if (freeSpace < bytesShort) { + // Not enough free space to include ext_data free bytes. Try again without ext_data free bytes + bytesShort = extDataSize.minimum - info.extData.length; + extDataSize.used = extDataSize.minimum; + } + if (freeSpace >= bytesShort) { + // steal free bytes from leaf + byteLength -= bytesShort; + freeSpace -= bytesShort; + // update byte_length: + bytes.writeUint32(byteLength, 0); + // update free_byte_length: + bytes.writeUint32(freeSpace, 5); + // remove trailing free bytes from leaf buffer: + bytes.splice(bytes.length - bytesShort); + // Add bytes to ext_data + info.extData.length += bytesShort; + } + else { + throw new DetailedError('max-leaf-extdata-size-reached', `leaf extdata grows larger than the ${info.extData.length} bytes available to it`); + } + } + const leafEndIndex = bytes.length; + bytes.reserve(extDataSize.used); + // const blocksDebugging = []; + // let addedExtBytes = 0; + while (moreDataBlocks.length > 0) { // moreDataBlocks.forEach(block => { + const block = moreDataBlocks.shift(); + const offset = bytes.length - leafEndIndex; // offset from leaf end index + bytes.writeUint32(offset, block.pointerIndex); // update ext_data_ptr + // Calculate 10% free space per block + const free = options.addFreeSpace ? Math.ceil(block.bytes.length * fbm) : 0; + const blockLength = block.bytes.length + free; + // blocksDebugging.push({ + // index: bytes.length, + // length: blockLength, + // free: { + // length: free, + // index: bytes.length + block.bytes.data.length, + // end: bytes.length + block.bytes.data.length + free + // } + // }); + // const debugStartIndex = bytes.length; + // ext_block_length: + bytes.writeUint32(blockLength); + // ext_block_free_length: + bytes.writeUint32(free); + // data: + bytes.append(block.bytes.data); + // Add free space: + bytes.append(new Uint8Array(free)); + // addedExtBytes += bytes.length - debugStartIndex; + } //); + const extByteLength = bytes.length - leafEndIndex; + // console.assert(extByteLength === extDataSize.minimum, 'These must be equal by now!'); + // console.assert(addedExtBytes === extByteLength, 'Why are these not the same?'); + const extFreeByteLength = info.extData // && info.extData.rebuild + ? info.extData.length - extByteLength + : options.addFreeSpace + ? extDataSize.used - extByteLength // Math.ceil(extByteLength * 0.1) + : 0; + // // Debug free space: + // const freeSpaceStartIndex = bytes.length; // - extFreeByteLength; + // blocksDebugging.forEach(block => { + // if (block.free.end > freeSpaceStartIndex) { + // debugger; // This is the problem + // } + // }); + // update extData info + hasExtData = true; + if (info.extData) { + info.extData.freeBytes = extFreeByteLength; + } + else { + info.extData = { + length: extByteLength + extFreeByteLength, + freeBytes: extFreeByteLength, + }; + } + // Add free space: + bytes.append(new Uint8Array(extFreeByteLength)); + // adjust byteLength + byteLength = bytes.length; + } + else if (hasExtData) { + byteLength += info.extData.length; + } + if (hasExtData) { + // update leaf_flags: + bytes.data[leafFlagsIndex] |= FLAGS.LEAF_HAS_EXT_DATA; // has_ext_data (yes) + // update ext_byte_length: + bytes.writeUint32(info.extData.length, extDataHeaderIndex); // _writeByteLength(bytes, extDataHeaderIndex, info.extData.length); + // update ext_free_byte_length: + bytes.writeUint32(info.extData.freeBytes, extDataHeaderIndex + 4); // _writeByteLength(bytes, extDataHeaderIndex + 4, info.extData.freeBytes); + } + if (info.nextIndex === 'adjacent') { + // update next_leaf_ptr + nextLeafOffset = byteLength - 15; + bytes.writeInt48(nextLeafOffset, 15); //_writeSignedOffset(bytes, 15, nextLeafOffset, true); + } + // console.log(`Created leaf, ${bytes.length} bytes generated`); + return bytes.data; + } + getLeafEntryValueBytes(recordPointer, metadata) { + const bytes = []; + // value_length: + bytes.push(recordPointer.length); + // value_data: + bytes.push(...recordPointer); + // metadata: + this.metadataKeys.forEach(key => { + const metadataValue = metadata[key]; + const valueBytes = BPlusTree.getBinaryKeyData(metadataValue); // metadata_value has same structure as key, so getBinaryKeyData comes in handy here + bytes.push(...valueBytes); + }); + return bytes; + } + static getKeyBytes(key) { + let keyBytes = []; + let keyType = KEY_TYPE.UNDEFINED; + switch (typeof key) { + case 'undefined': { + keyType = KEY_TYPE.UNDEFINED; + break; + } + case 'string': { + keyType = KEY_TYPE.STRING; + keyBytes = Array.from(encodeString(key)); // textEncoder.encode(key) + console.assert(keyBytes.length < 256, `key byte size for "${key}" is too large, max is 255`); + break; + } + case 'number': { + keyType = KEY_TYPE.NUMBER; + keyBytes = numberToBytes(key); + // Remove trailing 0's to reduce size for smaller and integer values + while (keyBytes[keyBytes.length - 1] === 0) { + keyBytes.pop(); + } + break; + } + case 'bigint': { + keyType = KEY_TYPE.BIGINT; + keyBytes = bigintToBytes(key); + break; + } + case 'boolean': { + keyType = KEY_TYPE.BOOLEAN; + keyBytes = [key ? 1 : 0]; + break; + } + case 'object': { + if (key instanceof Date) { + keyType = KEY_TYPE.DATE; + keyBytes = numberToBytes(key.getTime()); + } + else if (key === null) { + keyType = KEY_TYPE.UNDEFINED; + } + else { + throw new DetailedError('invalid-object-key-type', `Unsupported object key type: ${key}`); + } + break; + } + default: { + throw new DetailedError('invalid-key-type', `Unsupported key type: ${typeof key}`); + } + } + const bytes = []; + // key_type: + bytes.push(keyType); + // key_length: + bytes.push(keyBytes.length); + // key_data: + bytes.push(...keyBytes); + return bytes; + } +} +//# sourceMappingURL=binary-tree-builder.js.map \ No newline at end of file diff --git a/dist/esm/btree/binary-tree-builder.js.map b/dist/esm/btree/binary-tree-builder.js.map new file mode 100644 index 0000000..bca710d --- /dev/null +++ b/dist/esm/btree/binary-tree-builder.js.map @@ -0,0 +1 @@ +{"version":3,"file":"binary-tree-builder.js","sourceRoot":"","sources":["../../../src/btree/binary-tree-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAInC,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAMrC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;AAE7D,MAAM,CAAC,MAAM,QAAQ,GAAG;IACpB,SAAS,EAAE,CAAC;IACZ,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;CACZ,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG;IACjB,WAAW,EAAE,CAAC;IACd,YAAY,EAAE,CAAC;IACf,cAAc,EAAE,CAAC;IACjB,eAAe,EAAE,CAAC;IAClB,eAAe,EAAE,EAAE;IACnB,cAAc,EAAE,EAAE;IAClB,kBAAkB,EAAE,GAAG;IACvB,OAAO,EAAE,CAAC;IACV,iBAAiB,EAAE,CAAC;CACvB,CAAC;AAOF,MAAM,OAAO,sBAAsB;IAS/B,YAAY,UAA2C,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;QAC3L,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACnD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACzC,CAAC;IAED,SAAS;QACL,MAAM,cAAc,GACd,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;cACzC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;cACvD,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;cAC/C,CAAC,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;cAClH,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;cACtD,KAAK,CAAC,cAAc,CAAC;QAC3B,MAAM,KAAK,GAAG;YACV,eAAe;YACf,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACV,cAAc;YACd,cAAc;YACd,oBAAoB;YACpB,IAAI,CAAC,iBAAiB;SACzB,CAAC;QACF,sBAAsB;QACtB,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAE3C,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,GAAG,EAAE;YAC/C,eAAe;YACf,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC/B;QAED,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE;YACpB,oBAAoB;YACpB,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;SACxD;QAED,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9B,iBAAiB;YACjB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB;YAE1C,sBAAsB;YACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAErC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAC5B,gBAAgB;gBAChB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAsB;gBAC9C,qBAAqB;gBACrB,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;iBACjC;YACL,CAAC,CAAC,CAAC;YAEH,0BAA0B;YAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC;YACxC,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;SACzC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,UAAU,CAAC,IAAoB,EAAE,UAA6B,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE;QAE9F,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,sBAAsB,CAAC,CAAC;QAEhE,MAAM,KAAK,GAAG;YACV,eAAe;YACf,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACV,CAAC;YACD,oBAAoB;YACpB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;SACb,CAAC;QAEF,kBAAkB;QAClB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEhC,WAAW;QACX,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACzB,MAAM,QAAQ,GAAG,sBAAsB,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;YAExB,mCAAmC;YACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,EAAE,eAAe,KAAK,CAAC,GAAG,sBAAsB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAClG,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YAChG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,wBAAwB,IAAI,aAAa,KAAK,CAAC,EAAE,mDAAmD,CAAC,CAAC;YAC7H,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,iCAAiC;QACjC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9F,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,wBAAwB,IAAI,aAAa,KAAK,CAAC,EAAE,6CAA6C,CAAC,CAAC;QACvH,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;QAE5D,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;QAC9B,IAAI,OAAO,CAAC,SAAS,GAAG,CAAC,IAAI,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE;YACzD,MAAM,IAAI,aAAa,CAAC,uBAAuB,EAAE,mBAAmB,UAAU,2BAA2B,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;SACjI;QAED,IAAI,OAAO,CAAC,YAAY,EAAE;YACtB,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,OAAO,CAAC,SAAS,GAAG,CAAC,EAAE;gBACvB,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,UAAU,CAAC;gBAC3C,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;aAClC;iBACI;gBACD,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBACjE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACxE,0CAA0C;gBAC1C,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ;gBACjE,UAAU,IAAI,SAAS,CAAC;aAC3B;YAED,4BAA4B;YAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;gBAChC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACjB;YAED,2BAA2B;YAC3B,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;SACxC;QAED,sBAAsB;QACtB,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;QAEtC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,IAAoB,EAAE,UAA6B,EAAE,YAAY,EAAE,IAAI,EAAE;QAEhF,6NAA6N;QAE7N,0FAA0F;QAC1F,wCAAwC;QACxC,kCAAkC;QAClC,iEAAiE;QACjE,uCAAuC;QACvC,oCAAoC;QACpC,8EAA8E;QAC9E,MAAM;QAEN,IAAI,UAAU,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG,IAAI,iBAAiB,CAAC;YAChC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACV,KAAK,CAAC,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,mBAAmB;SAClC,CAAC,CAAC;QACH,MAAM,cAAc,GAAG,CAAC,CAAC;QAEzB,iBAAiB;QACjB,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACpF,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAEjC,iBAAiB;QACjB,IAAI,cAAc,GAAG,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QACvH,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAEjC,MAAM,kBAAkB,GAAG,KAAK,CAAC,MAAM,CAAC;QACxC,KAAK,CAAC,IAAI,CACN,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,kBAAkB;QAC9B,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CACb,CAAC;QAEF,kBAAkB;QAClB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEhC,MAAM,cAAc,GAA8D,EAAE,CAAC;QAErF,WAAW;QACX,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACzB,MAAM,QAAQ,GAAG,sBAAsB,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;YAExB,cAAc;YACd,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC;YACpC,IAAI,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;gBAC9E,MAAM,IAAI,aAAa,CAAC,qBAAqB,EAAE,gEAAgE,CAAC,CAAC;aACpH;YACD,IAAI,UAAU,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;gBACtD,kEAAkE;gBAClE,uBAAuB;gBAEvB,cAAc;gBACd,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBAErC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;oBAClB,qBAAqB;oBACrB,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,oEAAoE;iBACrH;gBAED,gBAAgB;gBAChB,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,mEAAmE;gBAEhH,OAAO,CAAC,QAAQ;aACnB;iBACI,IAAI,IAAI,CAAC,UAAU,EAAE;gBACtB,sBAAsB;gBACtB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACjB;iBACI;gBACD,sBAAsB;gBACtB,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;aAC1B;YAED,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAE7C,MAAM,QAAQ,GAAG,CAAC,UAAmC,EAAE,EAAE;gBACrD,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC;gBAE/C,gBAAgB;gBAChB,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAEtC,cAAc;gBACd,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBAEjC,YAAY;gBACZ,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBAC5B,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;oBACpC,MAAM,OAAO,GAAG,sBAAsB,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,oFAAoF;oBACvJ,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC/B,CAAC,CAAC,CAAC;YACP,CAAC,CAAC;YAEF,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB,SAAS;gBACT,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;aAC7B;iBACI;gBACD,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;oBAC9B,SAAS;oBACT,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACzB,CAAC,CAAC,CAAC;aACN;YAED,IAAI,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,2BAA2B,EAAE;gBACpE,iCAAiC;gBACjC,sCAAsC;gBAEtC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;oBAClB,qBAAqB;oBACrB,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,8DAA8D;iBACzG;gBAED,gBAAgB;gBAChB,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC;gBACrC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAEvB,qBAAqB;gBACrB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,kBAAkB,CAAC;gBAEtD,eAAe;gBACf,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;oBACrC,6DAA6D;oBAC7D,0CAA0C;oBAC1C,yDAAyD;oBACzD,OAAO,CAAC,MAAM,CAAC,OAAO,OAAO,CAAC,UAAU,KAAK,UAAU,EAAE,0EAA0E,CAAC,CAAC;oBACrI,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;oBAC1E,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;iBAChD;qBACI;oBACD,4DAA4D;oBAC5D,cAAc,CAAC,IAAI,CAAC;wBAChB,YAAY,EAAE,eAAe;wBAC7B,KAAK,EAAE,UAAU;qBACpB,CAAC,CAAC;iBACN;aACJ;iBACI;gBACD,qBAAqB;gBACrB,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,6EAA6E;gBAC9I,IAAI,IAAI,CAAC,UAAU,EAAE;oBACjB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;iBAC1C;qBACI;oBACD,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,sDAAsD;iBACvG;gBAED,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;oBAClB,qBAAqB;oBACrB,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,8DAA8D;iBACzG;gBAED,mBAAmB;gBACnB,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,qCAAqC;aAClE;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,4CAA4C;YAE5C,IAAI,CAAC,UAAU,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,CAAC,SAAS,GAAG,CAAC,EAAE;gBAC/E,4EAA4E;gBAC5E,4CAA4C;gBAC5C,MAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY;oBACzC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;oBAChH,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAEnF,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;gBACnD,IAAI,SAAS,GAAG,gBAAgB,EAAE;oBAC9B,MAAM,IAAI,aAAa,CAAC,4BAA4B,EAAE,wEAAwE,CAAC,CAAC;iBACnI;gBACD,+BAA+B;gBAC/B,OAAO,CAAC,SAAS,IAAI,gBAAgB,CAAC;gBACtC,IAAI,CAAC,OAAO,GAAG;oBACX,MAAM,EAAE,gBAAgB;iBAC3B,CAAC;aACL;YAED,UAAU,GAAG,IAAI,CAAC;YAClB,qBAAqB;YACrB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC;SACzD;QACD,IAAI,CAAC,UAAU,EAAE;YACb,qBAAqB;YACrB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,wIAAwI;YAChM,+CAA+C;YAC/C,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;SACvC;QAED,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;QAC9B,IAAI,OAAO,CAAC,SAAS,GAAG,CAAC,IAAI,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE;YACzD,MAAM,IAAI,aAAa,CAAC,uBAAuB,EAAE,wCAAwC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;SACjH;QAED,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,OAAO,CAAC,YAAY,EAAE;YACtB,IAAI,OAAO,CAAC,SAAS,GAAG,CAAC,EAAE;gBACvB,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,UAAU,CAAC;gBAC3C,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;aAClC;iBACI;gBACD,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBACjE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACxG,iEAAiE;gBACjE,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ;gBACjE,UAAU,IAAI,SAAS,CAAC;aAC3B;YAED,4BAA4B;YAC5B,KAAK,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,qCAAqC;YAE9E,2BAA2B;YAC3B,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;SACnC;QAED,sBAAsB;QACtB,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAEjC,+BAA+B;QAC/B,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,sEAAsE;YAEtE,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,+BAA+B;YAC3E,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC;YAC1C,MAAM,WAAW,GAAG;gBAChB,wDAAwD;gBACxD,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;gBACzH,oDAAoD;gBACpD,IAAI,OAAO,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7D,kEAAkE;gBAClE,IAAI,KAAK;oBACL,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;oBACxE,MAAM,iBAAiB,GAAG,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;oBACtE,+DAA+D;oBAC/D,qEAAqE;oBACrE,oEAAoE;oBACpE,oEAAoE;oBACpE,iEAAiE;oBACjE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,iBAAiB,CAAC,GAAG,eAAe,CAAC;oBAC9E,OAAO,SAAS,CAAC;gBACrB,CAAC;gBACD,IAAI,EAAE,CAAC;aACV,CAAC;YACF,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO;gBAC3B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;gBACrB,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,UAAU;YAEnC,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,EAAE,2BAA2B;gBACxF,6BAA6B;gBAC7B,oCAAoC;gBACpC,IAAI,UAAU,GAAG,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,0DAA0D;gBACpH,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;gBACrC,IAAI,SAAS,GAAG,UAAU,EAAE;oBACxB,+EAA+E;oBAC/E,UAAU,GAAG,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;oBACvD,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC;iBAC1C;gBACD,IAAI,SAAS,GAAG,UAAU,EAAE;oBACxB,8FAA8F;oBAC9F,UAAU,GAAG,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;oBACvD,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC;iBAC1C;gBACD,IAAI,SAAS,IAAI,UAAU,EAAE;oBACzB,6BAA6B;oBAC7B,UAAU,IAAI,UAAU,CAAC;oBACzB,SAAS,IAAI,UAAU,CAAC;oBAExB,sBAAsB;oBACtB,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;oBAEjC,2BAA2B;oBAC3B,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;oBAEhC,+CAA+C;oBAC/C,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;oBAExC,wBAAwB;oBACxB,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC;iBACrC;qBACI;oBACD,MAAM,IAAI,aAAa,CAAC,+BAA+B,EAAE,sCAAsC,IAAI,CAAC,OAAO,CAAC,MAAM,wBAAwB,CAAC,CAAC;iBAC/I;aACJ;YAED,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC;YAClC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAEhC,8BAA8B;YAC9B,yBAAyB;YAEzB,OAAO,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,oCAAoC;gBACpE,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC;gBACrC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,6BAA6B;gBACzE,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,sBAAsB;gBAErE,qCAAqC;gBACrC,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5E,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;gBAE9C,yBAAyB;gBACzB,2BAA2B;gBAC3B,2BAA2B;gBAC3B,cAAc;gBACd,wBAAwB;gBACxB,yDAAyD;gBACzD,6DAA6D;gBAC7D,QAAQ;gBACR,MAAM;gBAEN,wCAAwC;gBAExC,oBAAoB;gBACpB,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;gBAE/B,yBAAyB;gBACzB,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAExB,QAAQ;gBACR,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAE/B,kBAAkB;gBAClB,KAAK,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;gBAEnC,mDAAmD;aACtD,CAAC,IAAI;YAEN,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC;YAClD,wFAAwF;YACxF,kFAAkF;YAElF,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B;gBAC7D,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,aAAa;gBACrC,CAAC,CAAC,OAAO,CAAC,YAAY;oBAClB,CAAC,CAAC,WAAW,CAAC,IAAI,GAAG,aAAa,CAAC,kCAAkC;oBACrE,CAAC,CAAC,CAAC,CAAC;YAEZ,uBAAuB;YACvB,oEAAoE;YACpE,qCAAqC;YACrC,kDAAkD;YAClD,2CAA2C;YAC3C,QAAQ;YACR,MAAM;YAEN,sBAAsB;YACtB,UAAU,GAAG,IAAI,CAAC;YAClB,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,iBAAiB,CAAC;aAC9C;iBACI;gBACD,IAAI,CAAC,OAAO,GAAG;oBACX,MAAM,EAAE,aAAa,GAAG,iBAAiB;oBACzC,SAAS,EAAE,iBAAiB;iBAC/B,CAAC;aACL;YAED,kBAAkB;YAClB,KAAK,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAEhD,oBAAoB;YACpB,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;SAC7B;aACI,IAAI,UAAU,EAAE;YACjB,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;SACrC;QAED,IAAI,UAAU,EAAE;YACZ,qBAAqB;YACrB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,qBAAqB;YAC5E,0BAA0B;YAC1B,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,oEAAoE;YAChI,+BAA+B;YAC/B,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,2EAA2E;SACjJ;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,UAAU,EAAE;YAC/B,uBAAuB;YACvB,cAAc,GAAG,UAAU,GAAG,EAAE,CAAC;YACjC,KAAK,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,sDAAsD;SAC/F;QAED,gEAAgE;QAChE,OAAO,KAAK,CAAC,IAAI,CAAC;IACtB,CAAC;IAED,sBAAsB,CAAC,aAAqC,EAAE,QAA2B;QACrF,MAAM,KAAK,GAAG,EAAE,CAAC;QAEjB,gBAAgB;QAChB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAEjC,cAAc;QACd,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;QAE7B,YAAY;QACZ,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC5B,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,UAAU,GAAG,SAAS,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,oFAAoF;YAClJ,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAqB;QACpC,IAAI,QAAQ,GAAa,EAAE,CAAC;QAC5B,IAAI,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC;QACjC,QAAO,OAAO,GAAG,EAAE;YACf,KAAK,WAAW,CAAC,CAAC;gBACd,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC;gBAC7B,MAAM;aACT;YACD,KAAK,QAAQ,CAAC,CAAC;gBACX,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC;gBAC1B,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,0BAA0B;gBACpE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,sBAAsB,GAAG,4BAA4B,CAAC,CAAC;gBAC7F,MAAM;aACT;YACD,KAAK,QAAQ,CAAC,CAAC;gBACX,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC;gBAC1B,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;gBAC9B,oEAAoE;gBACpE,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAC,CAAC,CAAC,KAAK,CAAC,EAAE;oBAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;iBAAE;gBAC7D,MAAM;aACT;YACD,KAAK,QAAQ,CAAC,CAAC;gBACX,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC;gBAC1B,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;gBAC9B,MAAM;aACT;YACD,KAAK,SAAS,CAAC,CAAC;gBACZ,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;gBAC3B,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzB,MAAM;aACT;YACD,KAAK,QAAQ,CAAC,CAAC;gBACX,IAAI,GAAG,YAAY,IAAI,EAAE;oBACrB,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;oBACxB,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;iBAC3C;qBACI,IAAI,GAAG,KAAK,IAAI,EAAE;oBACnB,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC;iBAChC;qBACI;oBACD,MAAM,IAAI,aAAa,CAAC,yBAAyB,EAAE,gCAAgC,GAAG,EAAE,CAAC,CAAC;iBAC7F;gBACD,MAAM;aACT;YACD,OAAO,CAAC,CAAC;gBACL,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,yBAAyB,OAAO,GAAG,EAAE,CAAC,CAAC;aACtF;SACJ;QAED,MAAM,KAAK,GAAG,EAAE,CAAC;QAEjB,YAAY;QACZ,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEpB,cAAc;QACd,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE5B,YAAY;QACZ,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QAExB,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/esm/btree/binary-tree-leaf-entry-extdata.js b/dist/esm/btree/binary-tree-leaf-entry-extdata.js new file mode 100644 index 0000000..5f2a0fa --- /dev/null +++ b/dist/esm/btree/binary-tree-leaf-entry-extdata.js @@ -0,0 +1,28 @@ +export {}; +// I apparently started building a BinaryBPlusTreeLeafExtData class, +// which would be a good thing to try again soon! +// class BinaryBPlusTreeLeafExtData { +// /** +// * +// * @param {object} [info] +// * @param {number} [info.length=0] +// * @param {number} [info.freeBytes=0] +// * @param {boolean} [info.loaded] +// * @param {()=>Promise} [info.load] +// */ +// constructor(info) { +// this.length = typeof info.length === 'number' ? info.length : 0; +// this.freeBytes = typeof info.freeBytes === 'number' ? info.freeBytes : 0; +// this.loaded = typeof info.loaded === 'boolean' ? info.loaded : false; +// if (typeof info.load === 'function') { +// this.load = info.load; +// } +// } +// /** +// * MUST BE OVERRIDEN: Makes sure all extData blocks are read. Needed when eg rebuilding. +// */ +// load() { +// throw new Error('BinaryBPlusTreeLeaf.extData.load must be overriden'); +// } +// } +//# sourceMappingURL=binary-tree-leaf-entry-extdata.js.map \ No newline at end of file diff --git a/dist/esm/btree/binary-tree-leaf-entry-extdata.js.map b/dist/esm/btree/binary-tree-leaf-entry-extdata.js.map new file mode 100644 index 0000000..db955c5 --- /dev/null +++ b/dist/esm/btree/binary-tree-leaf-entry-extdata.js.map @@ -0,0 +1 @@ +{"version":3,"file":"binary-tree-leaf-entry-extdata.js","sourceRoot":"","sources":["../../../src/btree/binary-tree-leaf-entry-extdata.ts"],"names":[],"mappings":";AA0BA,oEAAoE;AACpE,iDAAiD;AAEjD,qCAAqC;AACrC,UAAU;AACV,SAAS;AACT,gCAAgC;AAChC,yCAAyC;AACzC,4CAA4C;AAC5C,wCAAwC;AACxC,gDAAgD;AAChD,UAAU;AACV,0BAA0B;AAC1B,2EAA2E;AAC3E,oFAAoF;AACpF,gFAAgF;AAChF,iDAAiD;AACjD,qCAAqC;AACrC,YAAY;AACZ,QAAQ;AACR,UAAU;AACV,+FAA+F;AAC/F,UAAU;AACV,eAAe;AACf,iFAAiF;AACjF,QAAQ;AACR,IAAI"} \ No newline at end of file diff --git a/dist/esm/btree/binary-tree-leaf-entry-value.js b/dist/esm/btree/binary-tree-leaf-entry-value.js new file mode 100644 index 0000000..8deae71 --- /dev/null +++ b/dist/esm/btree/binary-tree-leaf-entry-value.js @@ -0,0 +1,16 @@ +export class BinaryBPlusTreeLeafEntryValue { + /** + * + * @param recordPointer used to be called "value", renamed to prevent confusion + * @param metadata + */ + constructor(recordPointer, metadata) { + this.recordPointer = recordPointer; + this.metadata = metadata; + } + /** @deprecated use .recordPointer instead */ + get value() { + return this.recordPointer; + } +} +//# sourceMappingURL=binary-tree-leaf-entry-value.js.map \ No newline at end of file diff --git a/dist/esm/btree/binary-tree-leaf-entry-value.js.map b/dist/esm/btree/binary-tree-leaf-entry-value.js.map new file mode 100644 index 0000000..5328b87 --- /dev/null +++ b/dist/esm/btree/binary-tree-leaf-entry-value.js.map @@ -0,0 +1 @@ +{"version":3,"file":"binary-tree-leaf-entry-value.js","sourceRoot":"","sources":["../../../src/btree/binary-tree-leaf-entry-value.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,6BAA6B;IACtC;;;;OAIG;IACH,YAAmB,aAAqC,EAAS,QAA4B;QAA1E,kBAAa,GAAb,aAAa,CAAwB;QAAS,aAAQ,GAAR,QAAQ,CAAoB;IAC7F,CAAC;IAED,6CAA6C;IAC7C,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/esm/btree/binary-tree-leaf-entry.js b/dist/esm/btree/binary-tree-leaf-entry.js new file mode 100644 index 0000000..0d189a2 --- /dev/null +++ b/dist/esm/btree/binary-tree-leaf-entry.js @@ -0,0 +1,35 @@ +export class BinaryBPlusTreeLeafEntry { + /** + * @param key + * @param values Array of binary values - NOTE if the tree has unique values, it must always wrap the single value in an Array: [value] + */ + constructor(key, values) { + this.key = key; + this.values = values; + this.key = key; + this.values = values; + } + /** + * @deprecated use .values[0] instead + */ + get value() { + return this.values[0]; + } + get totalValues() { + if (typeof this._totalValues === 'number') { + return this._totalValues; + } + if (this.extData) { + return this.extData.totalValues; + } + return this.values.length; + } + set totalValues(nr) { + this._totalValues = nr; + } + /** Loads values from leaf's extData block */ + async loadValues() { + throw new Error('entry.loadValues must be overridden if leaf has extData'); + } +} +//# sourceMappingURL=binary-tree-leaf-entry.js.map \ No newline at end of file diff --git a/dist/esm/btree/binary-tree-leaf-entry.js.map b/dist/esm/btree/binary-tree-leaf-entry.js.map new file mode 100644 index 0000000..05eac6e --- /dev/null +++ b/dist/esm/btree/binary-tree-leaf-entry.js.map @@ -0,0 +1 @@ +{"version":3,"file":"binary-tree-leaf-entry.js","sourceRoot":"","sources":["../../../src/btree/binary-tree-leaf-entry.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,wBAAwB;IAMjC;;;OAGG;IACH,YAAmB,GAAqB,EAAS,MAAuC;QAArE,QAAG,GAAH,GAAG,CAAkB;QAAS,WAAM,GAAN,MAAM,CAAiC;QACpF,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,WAAW;QACX,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC;SAAE;QACxE,IAAI,IAAI,CAAC,OAAO,EAAE;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;SAAE;QACtD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,IAAI,WAAW,CAAC,EAAE;QACd,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;IAC3B,CAAC;IAOD,6CAA6C;IAC7C,KAAK,CAAC,UAAU;QACZ,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC/E,CAAC;CAEJ"} \ No newline at end of file diff --git a/dist/esm/btree/binary-tree-leaf.js b/dist/esm/btree/binary-tree-leaf.js new file mode 100644 index 0000000..ca71bab --- /dev/null +++ b/dist/esm/btree/binary-tree-leaf.js @@ -0,0 +1,62 @@ +import { DetailedError } from '../detailed-error.js'; +import { BinaryBPlusTreeNodeInfo } from './binary-tree-node-info.js'; +import { _isEqual } from './typesafe-compare.js'; +export class BinaryBPlusTreeLeaf extends BinaryBPlusTreeNodeInfo { + constructor(nodeInfo) { + console.assert(typeof nodeInfo.hasExtData === 'boolean', 'nodeInfo.hasExtData must be specified'); + super(nodeInfo); + this.prevLeafOffset = 0; + this.nextLeafOffset = 0; + this.extData = { + length: 0, + freeBytes: 0, + loaded: false, + async load() { + // Make sure all extData blocks are read. Needed when eg rebuilding + throw new DetailedError('method-not-overridden', 'BinaryBPlusTreeLeaf.extData.load must be overriden'); + }, + }; + this.entries = []; + } + static get prevLeafPtrIndex() { return 9; } + static get nextLeafPtrIndex() { return 15; } + static getPrevLeafOffset(leafIndex, prevLeafIndex) { + return prevLeafIndex > 0 + ? prevLeafIndex - leafIndex - 9 + : 0; + } + static getNextLeafOffset(leafIndex, nextLeafIndex) { + return nextLeafIndex > 0 + ? nextLeafIndex - leafIndex - 15 + : 0; + } + get hasPrevious() { return typeof this.getPrevious === 'function'; } + get hasNext() { return typeof this.getNext === 'function'; } + get prevLeafIndex() { + return this.prevLeafOffset !== 0 + ? this.index + 9 + this.prevLeafOffset + : 0; + } + set prevLeafIndex(newIndex) { + this.prevLeafOffset = newIndex > 0 + ? newIndex - this.index - 9 + : 0; + } + get nextLeafIndex() { + return this.nextLeafOffset !== 0 + ? this.index + (this.tree.info.hasLargePtrs ? 15 : 13) + this.nextLeafOffset + : 0; + } + set nextLeafIndex(newIndex) { + this.nextLeafOffset = newIndex > 0 + ? newIndex - this.index - (this.tree.info.hasLargePtrs ? 15 : 13) + : 0; + } + findEntryIndex(key) { + return this.entries.findIndex(entry => _isEqual(entry.key, key)); + } + findEntry(key) { + return this.entries[this.findEntryIndex(key)]; + } +} +//# sourceMappingURL=binary-tree-leaf.js.map \ No newline at end of file diff --git a/dist/esm/btree/binary-tree-leaf.js.map b/dist/esm/btree/binary-tree-leaf.js.map new file mode 100644 index 0000000..bad5518 --- /dev/null +++ b/dist/esm/btree/binary-tree-leaf.js.map @@ -0,0 +1 @@ +{"version":3,"file":"binary-tree-leaf.js","sourceRoot":"","sources":["../../../src/btree/binary-tree-leaf.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/btree/binary-tree-node-entry.js b/dist/esm/btree/binary-tree-node-entry.js new file mode 100644 index 0000000..f50b191 --- /dev/null +++ b/dist/esm/btree/binary-tree-node-entry.js @@ -0,0 +1,11 @@ +import { DetailedError } from '../detailed-error.js'; +export class BinaryBPlusTreeNodeEntry { + constructor(key) { + this.key = key; + this.ltChildOffset = null; + } + async getLtChild() { + throw new DetailedError('method not overridden', 'getLtChild must be overridden'); + } +} +//# sourceMappingURL=binary-tree-node-entry.js.map \ No newline at end of file diff --git a/dist/esm/btree/binary-tree-node-entry.js.map b/dist/esm/btree/binary-tree-node-entry.js.map new file mode 100644 index 0000000..a18634b --- /dev/null +++ b/dist/esm/btree/binary-tree-node-entry.js.map @@ -0,0 +1 @@ +{"version":3,"file":"binary-tree-node-entry.js","sourceRoot":"","sources":["../../../src/btree/binary-tree-node-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIlD,MAAM,OAAO,wBAAwB;IAQjC,YAAmB,GAAqB;QAArB,QAAG,GAAH,GAAG,CAAkB;QAPxC,kBAAa,GAAW,IAAI,CAAC;IAQ7B,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,MAAM,IAAI,aAAa,CAAC,uBAAuB,EAAE,+BAA+B,CAAC,CAAC;IACtF,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/esm/btree/binary-tree-node-info.js b/dist/esm/btree/binary-tree-node-info.js new file mode 100644 index 0000000..b3fed63 --- /dev/null +++ b/dist/esm/btree/binary-tree-node-info.js @@ -0,0 +1,27 @@ +export class BinaryBPlusTreeNodeInfo { + constructor(info) { + this.tree = info.tree; + this.isLeaf = info.isLeaf; + this.hasExtData = info.hasExtData || false; + this.bytes = info.bytes; + if (typeof info.sourceIndex === 'undefined') { + info.sourceIndex = info.index; + } + this.sourceIndex = info.sourceIndex; + if (typeof info.dataIndex === 'undefined') { + info.dataIndex = this.sourceIndex + 9; // node/leaf header is 9 bytes + } + this.dataIndex = info.dataIndex; + this.length = info.length; + this.free = info.free; + this.parentNode = info.parentNode; + this.parentEntry = info.parentEntry; + } + get index() { + return this.sourceIndex; + } + set index(value) { + this.sourceIndex = value; + } +} +//# sourceMappingURL=binary-tree-node-info.js.map \ No newline at end of file diff --git a/dist/esm/btree/binary-tree-node-info.js.map b/dist/esm/btree/binary-tree-node-info.js.map new file mode 100644 index 0000000..259c9a7 --- /dev/null +++ b/dist/esm/btree/binary-tree-node-info.js.map @@ -0,0 +1 @@ +{"version":3,"file":"binary-tree-node-info.js","sourceRoot":"","sources":["../../../src/btree/binary-tree-node-info.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,uBAAuB;IA+ChC,YAAY,IAAsC;QAC9C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,WAAW,EAAE;YACzC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;SACjC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,WAAW,EAAE;YACvC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,8BAA8B;SACxE;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACxC,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAI,KAAK,CAAC,KAAK;QACX,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC7B,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/esm/btree/binary-tree-node.js b/dist/esm/btree/binary-tree-node.js new file mode 100644 index 0000000..950747e --- /dev/null +++ b/dist/esm/btree/binary-tree-node.js @@ -0,0 +1,13 @@ +import { DetailedError } from '../detailed-error.js'; +import { BinaryBPlusTreeNodeInfo } from './binary-tree-node-info.js'; +export class BinaryBPlusTreeNode extends BinaryBPlusTreeNodeInfo { + constructor(nodeInfo) { + super(nodeInfo); + this.entries = []; + this.gtChildOffset = null; + } + async getGtChild() { + throw new DetailedError('method-not-overridden', 'getGtChild must be overridden'); + } +} +//# sourceMappingURL=binary-tree-node.js.map \ No newline at end of file diff --git a/dist/esm/btree/binary-tree-node.js.map b/dist/esm/btree/binary-tree-node.js.map new file mode 100644 index 0000000..fb0f8ea --- /dev/null +++ b/dist/esm/btree/binary-tree-node.js.map @@ -0,0 +1 @@ +{"version":3,"file":"binary-tree-node.js","sourceRoot":"","sources":["../../../src/btree/binary-tree-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,MAAM,OAAO,mBAAoB,SAAQ,uBAAuB;IAW5D,YAAY,QAA0C;QAClD,KAAK,CAAC,QAAQ,CAAC,CAAC;QAVpB,YAAO,GAA+B,EAAE,CAAC;QAEzC,kBAAa,GAAW,IAAI,CAAC;IAS7B,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,MAAM,IAAI,aAAa,CAAC,uBAAuB,EAAE,+BAA+B,CAAC,CAAC;IACtF,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/esm/btree/binary-tree-transaction-operation.js b/dist/esm/btree/binary-tree-transaction-operation.js new file mode 100644 index 0000000..42f6dc6 --- /dev/null +++ b/dist/esm/btree/binary-tree-transaction-operation.js @@ -0,0 +1,27 @@ +export class BinaryBPlusTreeTransactionOperation { + constructor(operation) { + // operation.key = _normalizeKey(operation.key); // if (_isIntString(operation.key)) { operation.key = parseInt(operation.key); } + this.type = operation.type; + this.key = operation.key; + if (operation.type === 'add' || operation.type === 'remove') { + this.recordPointer = operation.recordPointer; + } + if (operation.type === 'add') { + this.metadata = operation.metadata; + } + if (operation.type === 'update') { + this.newValue = operation.newValue; + this.currentValue = operation.currentValue; + } + } + static add(key, recordPointer, metadata) { + return new BinaryBPlusTreeTransactionOperation({ type: 'add', key, recordPointer, metadata }); + } + static update(key, newValue, currentValue, metadata) { + return new BinaryBPlusTreeTransactionOperation({ type: 'update', key, newValue, currentValue, metadata }); + } + static remove(key, recordPointer) { + return new BinaryBPlusTreeTransactionOperation({ type: 'remove', key, recordPointer }); + } +} +//# sourceMappingURL=binary-tree-transaction-operation.js.map \ No newline at end of file diff --git a/dist/esm/btree/binary-tree-transaction-operation.js.map b/dist/esm/btree/binary-tree-transaction-operation.js.map new file mode 100644 index 0000000..e4a5ca0 --- /dev/null +++ b/dist/esm/btree/binary-tree-transaction-operation.js.map @@ -0,0 +1 @@ +{"version":3,"file":"binary-tree-transaction-operation.js","sourceRoot":"","sources":["../../../src/btree/binary-tree-transaction-operation.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,mCAAmC;IAoB5C,YAAY,SAA8C;QACtD,iIAAiI;QACjI,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC;QACzB,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE;YACzD,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,aAAa,CAAC;SAChD;QACD,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE;YAC1B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;SACtC;QACD,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC7B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;YACnC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC;SAC9C;IACL,CAAC;IAjCD,MAAM,CAAC,GAAG,CAAC,GAAqB,EAAE,aAAqC,EAAE,QAA4B;QACjG,OAAO,IAAI,mCAAmC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClG,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,GAAqB,EAAE,QAAuC,EAAE,YAA2C,EAAE,QAA4B;QACnJ,OAAO,IAAI,mCAAmC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9G,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,GAAqB,EAAE,aAAqC;QACtE,OAAO,IAAI,mCAAmC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC;IAC3F,CAAC;CAwBJ"} \ No newline at end of file diff --git a/dist/esm/btree/binary-tree.js b/dist/esm/btree/binary-tree.js new file mode 100644 index 0000000..07e8f22 --- /dev/null +++ b/dist/esm/btree/binary-tree.js @@ -0,0 +1,3492 @@ +import { Utils } from 'acebase-core'; +import { readByteLength, readSignedOffset, Uint8ArrayBuilder, writeByteLength, writeSignedOffset } from '../binary.js'; +import { DetailedError } from '../detailed-error.js'; +import { ThreadSafe } from '../thread-safe.js'; +import { BinaryReader } from './binary-reader.js'; +import { BinaryBPlusTreeBuilder, FLAGS } from './binary-tree-builder.js'; +import { BinaryBPlusTreeLeaf } from './binary-tree-leaf.js'; +import { BinaryBPlusTreeLeafEntry } from './binary-tree-leaf-entry.js'; +import { BinaryBPlusTreeLeafEntryValue } from './binary-tree-leaf-entry-value.js'; +import { BinaryBPlusTreeNode } from './binary-tree-node.js'; +import { BinaryBPlusTreeNodeEntry } from './binary-tree-node-entry.js'; +import { BinaryBPlusTreeNodeInfo } from './binary-tree-node-info.js'; +import { BinaryBPlusTreeTransactionOperation } from './binary-tree-transaction-operation.js'; +import { BinaryWriter } from './binary-writer.js'; +import { WRITE_SMALL_LEAFS } from './config.js'; +import { BPlusTree } from './tree.js'; +import { BPlusTreeBuilder } from './tree-builder.js'; +import { BPlusTreeLeafEntryValue } from './tree-leaf-entry-value.js'; +import { TX } from './tx.js'; +import { _compareBinary, _isEqual, _isLess, _isLessOrEqual, _isMore, _isMoreOrEqual, _isNotEqual } from './typesafe-compare.js'; +import { _appendToArray, _checkNewEntryArgs } from './utils.js'; +const { bigintToBytes } = Utils; +export class BlacklistingSearchOperator { + /** + * @param callback callback that runs for each entry, must return an array of the entry values to be blacklisted + */ + constructor(callback) { + this.check = callback; + } +} +class NoTreeInfoError extends Error { + constructor() { super('Tree info has not been read'); } +} +// eslint-disable-next-line @typescript-eslint/no-empty-function +async function noop() { } +/** + * Replacement for console.assert, throws an error if condition is not met. + * @param condition 'truthy' condition + * @param error + */ +function assert(condition, error) { + if (!condition) { + throw new Error(`Assertion failed: ${error}`); + } +} +export class BinaryBPlusTree { + /** + * Provides functionality to read and search in a B+tree from a binary data source + * @param readFn byte array, or function that reads from your data source, must return a promise that resolves with a byte array (the bytes read from file/memory) + * @param chunkSize numbers of bytes per chunk to read at once + * @param writeFn function that writes to your data source, must return a promise that resolves once write has completed + * @param id to edit the tree, pass a unique id to enable "thread-safe" locking + */ + constructor(readFn, chunkSize = 1024, writeFn, id) { + this.id = id; + this._chunkSize = chunkSize; + this._autoGrow = false; + this.id = id; + if (readFn instanceof Array) { + let data = readFn; + if (BPlusTree.debugBinary) { + this.debugData = data; + data = this.debugData.map(entry => entry instanceof Array ? entry[1] : entry); + } + this._readFn = async (i, length) => { + const slice = data.slice(i, i + length); + return Buffer.from(slice); + }; + } + else if (typeof readFn === 'function') { + this._readFn = readFn; + } + else { + throw new TypeError('readFn must be a byte array or function that reads from a data source'); + } + if (typeof writeFn === 'function') { + this._writeFn = writeFn; + } + else if (typeof writeFn === 'undefined' && readFn instanceof Array) { + const sourceData = readFn; + this._writeFn = (data, index) => { + for (let i = 0; i < data.length; i++) { + sourceData[index + i] = data[i]; + } + }; + } + else { + this._writeFn = () => { + throw new Error('Cannot write data, no writeFn was supplied'); + }; + } + } + static async test(data) { + const tree = new BinaryBPlusTree(data); + let leaf = await tree.getFirstLeaf(); + while (leaf) { + for (let i = 0; i < leaf.entries.length; i++) { + const entry = leaf.entries[i]; + const found = await tree.find(entry.key); + if (found === null) { + throw new Error(`Tree entry ${entry.key} could not be found using tree.find`); + } + } + leaf = leaf.getNext ? await leaf.getNext() : null; + } + } + get autoGrow() { + return this._autoGrow; + } + set autoGrow(grow) { + this._autoGrow = grow === true; + // if (this._autoGrow) { + // console.warn('autoGrow enabled for binary tree'); + // } + } + async _loadInfo() { + // Quick and dirty way to trigger info to be loaded. TODO: refactored later + await this._getReader(); + } + async _getReader() { + const reader = new BinaryReader(this._readFn, this._chunkSize); // new ChunkReader(this._chunkSize, this._readFn); + await reader.init(); + const header = await reader.get(6); + const originalByteLength = (header[0] << 24) | (header[1] << 16) | (header[2] << 8) | header[3]; + if (!this._originalByteLength) { + this._originalByteLength = originalByteLength; + } + this.info = { + headerLength: 6, + byteLength: originalByteLength, + isUnique: (header[4] & FLAGS.UNIQUE_KEYS) > 0, + hasMetadata: (header[4] & FLAGS.HAS_METADATA) > 0, + hasFreeSpace: (header[4] & FLAGS.HAS_FREE_SPACE) > 0, + hasFillFactor: (header[4] & FLAGS.HAS_FILL_FACTOR) > 0, + hasSmallLeafs: (header[4] & FLAGS.HAS_SMALL_LEAFS) > 0, + hasLargePtrs: (header[4] & FLAGS.HAS_LARGE_PTRS) > 0, + freeSpace: 0, + get freeSpaceIndex() { return this.hasFillFactor ? 7 : 6; }, + entriesPerNode: header[5], + fillFactor: 100, + metadataKeys: [], + }; + // if (!this.info.hasLargePtrs) { + // console.warn(`Warning: tree "${this.id}" is read-only because it contains small ptrs. it needs to be rebuilt`); + // } + let additionalHeaderBytes = 0; + if (this.info.hasFillFactor) { + additionalHeaderBytes += 1; + } + if (this.info.hasFreeSpace) { + additionalHeaderBytes += 4; + } + if (this.info.hasMetadata) { + additionalHeaderBytes += 4; + } + if (additionalHeaderBytes > 0) { + // The tree has fill factor, free space, and/or metadata keys, read them + this.info.headerLength += additionalHeaderBytes; + const ahbBuffer = await reader.get(additionalHeaderBytes); + let i = 0; + if (this.info.hasFillFactor) { + this.info.fillFactor = ahbBuffer[i]; + i++; + } + if (this.info.hasFreeSpace) { + this.info.freeSpace = (ahbBuffer[i] << 24) | (ahbBuffer[i + 1] << 16) | (ahbBuffer[i + 2] << 8) | ahbBuffer[i + 3]; + i += 4; + } + if (this.info.hasMetadata) { + const length = (ahbBuffer[i] << 24) | (ahbBuffer[i + 1] << 16) | (ahbBuffer[i + 2] << 8) | ahbBuffer[i + 3]; + this.info.headerLength += length; + // Read metadata + const mdBuffer = await reader.get(length); + const keyCount = mdBuffer[0]; + let index = 1; + for (let i = 0; i < keyCount; i++) { + const keyLength = mdBuffer[index]; + index++; + let key = ''; + for (let j = 0; j < keyLength; j++) { + key += String.fromCharCode(mdBuffer[index + j]); + } + index += keyLength; + this.info.metadataKeys.push(key); + } + } + } + // Done reading header + return reader; + } + async _readChild(reader) { + const index = reader.sourceIndex; //reader.savePosition().index; + const headerLength = 9; + const header = await reader.get(headerLength); // byte_length, is_leaf, free_byte_length + const byteLength = (header[0] << 24) | (header[1] << 16) | (header[2] << 8) | header[3]; // byte_length + const isLeaf = (header[4] & FLAGS.IS_LEAF) > 0; // is_leaf + const hasExtData = (header[4] & FLAGS.LEAF_HAS_EXT_DATA) > 0; // has_ext_data + const freeBytesLength = (header[5] << 24) | (header[6] << 16) | (header[7] << 8) | header[8]; + // load whole node/leaf for easy processing + const dataLength = byteLength - headerLength - freeBytesLength; + const bytes = await reader.get(dataLength); + assert(bytes.length === dataLength, 'less bytes read than requested?'); + const childInfo = new BinaryBPlusTreeNodeInfo({ + tree: this, + isLeaf, + hasExtData, + bytes, + sourceIndex: index, + dataIndex: index + headerLength, + length: byteLength, + free: freeBytesLength, + }); + return childInfo; + } + _getLeaf(leafInfo, reader, options) { + if (!this.info) { + throw new Error('Tree info has not been read'); + } + const leaf = new BinaryBPlusTreeLeaf(leafInfo); + const bytes = leaf.bytes; + // const savedPosition = reader.savePosition(-bytes.length); + const prevLeafOffset = readSignedOffset(bytes, 0, this.info.hasLargePtrs); // prev_leaf_ptr + let index = this.info.hasLargePtrs ? 6 : 4; + const nextLeafOffset = readSignedOffset(bytes, index, this.info.hasLargePtrs); // next_leaf_ptr + index += this.info.hasLargePtrs ? 6 : 4; + leaf.prevLeafOffset = prevLeafOffset; + leaf.nextLeafOffset = nextLeafOffset; + if (leafInfo.hasExtData) { + leaf.extData.length = readByteLength(bytes, index); + leaf.extData.freeBytes = readByteLength(bytes, index + 4); + index += 8; + leaf.extData.load = async () => { + // Load all extData blocks. Needed when eg rebuilding + if (leaf.extData.loaded) { + return; + } + const index = leaf.sourceIndex + leaf.length; + const length = leaf.extData.length - leaf.extData.freeBytes; + const r = reader.clone(); + r.chunkSize = length; // So it will be 1 read + await r.go(index); + const bytes = await r.get(length); + leaf.entries.forEach(entry => { + if (entry.extData) { + entry.extData.loadFromExtData(bytes); + } + }); + leaf.extData.loaded = true; + }; + } + const entriesLength = bytes[index]; // entries_length + index++; + const readValue = () => { + const result = readEntryValue(bytes, index); + index += result.byteLength; + return result.entryValue; + }; + const readEntryValue = (bytes, index) => { + assert(index < bytes.length, 'invalid data'); + if (index >= bytes.length) { + throw new Error('invalid data'); + } + const startIndex = index; + const valueLength = bytes[index]; // value_length + // assert(index + valueLength <= bytes.length, 'not enough data!'); + if (index + valueLength > bytes.length) { + const bytesShort = index + valueLength - bytes.length; + throw new Error(`DEV ERROR: Cannot read entry value past the end of the read buffer (${bytesShort} bytes short)`); + } + index++; + const value = []; + // value_data: + for (let j = 0; j < valueLength; j++) { + value[j] = bytes[index + j]; + } + index += valueLength; + // metadata: + const metadata = this.info.hasMetadata ? {} : undefined; + this.info.metadataKeys.forEach(key => { + // metadata_value: + // NOTE: it seems strange to use getKeyFromBinary to read a value, but metadata_value is stored in the same way as a key, so this comes in handy + const valueInfo = BPlusTree.getKeyFromBinary(bytes, index); + metadata[key] = valueInfo.key; + index += valueInfo.byteLength; + }); + return { + entryValue: new BinaryBPlusTreeLeafEntryValue(value, metadata), + byteLength: index - startIndex, + }; + }; + for (let i = 0; i < entriesLength; i++) { + const keyInfo = BPlusTree.getKeyFromBinary(bytes, index); + const key = keyInfo.key; + index += keyInfo.byteLength; + // Read value(s) and return + const hasExtData = this.info.hasSmallLeafs && (bytes[index] & FLAGS.ENTRY_HAS_EXT_DATA) > 0; + const valLength = this.info.hasSmallLeafs + ? hasExtData ? 0 : bytes[index] + : (bytes[index] << 24) | (bytes[index + 1] << 16) | (bytes[index + 2] << 8) | bytes[index + 3]; // val_length + index += this.info.hasSmallLeafs + ? 1 + : 4; + if (options && options.stats) { + // Skip values, only load value count + const entry = new BinaryBPlusTreeLeafEntry(key, null); + if (this.info.isUnique) { + entry.totalValues = 1; + } + else { + entry.totalValues = (bytes[index] << 24) | (bytes[index + 1] << 16) | (bytes[index + 2] << 8) | bytes[index + 3]; // value_list_length + } + leaf.entries.push(entry); + if (hasExtData) { + index += this.info.isUnique ? 4 : 8; // skip ext_data_ptr (and value_list_length if not unique) + } + else { + index += valLength; // skip value + } + } + else if (this.info.isUnique) { + // Read single value + const entryValue = readValue(); + leaf.entries.push(new BinaryBPlusTreeLeafEntry(key, [entryValue])); + } + else { + // Read value_list_length + const valuesListLengthIndex = leafInfo.dataIndex + index; + let valuesLength = (bytes[index] << 24) | (bytes[index + 1] << 16) | (bytes[index + 2] << 8) | bytes[index + 3]; // value_list_length + index += 4; + if (hasExtData) { + // additional data will have to be loaded upon request + // ext_data_ptr: + let extDataOffset = readByteLength(bytes, index); + index += 4; + const extDataBlockIndex = leafInfo.sourceIndex + leafInfo.length + extDataOffset; + const entry = new BinaryBPlusTreeLeafEntry(key, new Array(valuesLength)); + // eslint-disable-next-line @typescript-eslint/no-this-alias + const tree = this; + Object.defineProperties(entry, { + values: { + get() { + return this.extData.values; + }, + set(values) { + this.extData.values = values; + }, + }, + }); + entry.extData = { + _headerLoaded: false, + _length: -1, + _freeBytes: -1, + _values: null, + _listLengthIndex: valuesListLengthIndex, + get length() { + if (this._headerLoaded) { + return this._length; + } + throw new Error('ext_data header not read yet'); + }, + get freeBytes() { + if (this._headerLoaded) { + return this._freeBytes; + } + throw new Error('ext_data header not read yet'); + }, + get values() { + if (this._values !== null) { + return this._values; + } + throw new Error('ext_data values were not read yet. use entry.extData.loadValues() first'); + }, + set values(values) { + this._values = values; + }, + leafOffset: extDataOffset, + index: extDataBlockIndex, + get totalValues() { return valuesLength; }, + set totalValues(n) { valuesLength = n; }, + get loaded() { return this._values !== null; }, + get _headerLength() { return 8; }, + async loadValues(existingLock = null) { + // load all values + // reader = reader.clone(); + const self = this; + const lock = await self.loadHeader(existingLock || true); + await reader.go(self.index + self._headerLength); + const extData = await reader.get(self._length - self._freeBytes); + self._values = []; + let index = 0; + for (let i = 0; i < valuesLength; i++) { + const result = readEntryValue(extData, index); + index += result.byteLength; + self._values.push(result.entryValue); + } + self.totalValues = valuesLength; + if (!existingLock) { + lock.release(); + } + if (index !== self._length - self._freeBytes) { + throw new Error('DEV ERROR: index should now be at the known end of the data'); + } + return self._values; + }, + async loadHeader(lockOptions) { + const self = this; + const keepLock = lockOptions === true; + const existingLock = typeof lockOptions === 'object' ? lockOptions : null; + // if (self._headerLoaded) { + // return keepLock ? ThreadSafe.lock(leaf) : Promise.resolve(null); + // } + reader = reader.clone(); + // load header + const lock = existingLock || await ThreadSafe.lock(leaf); + await reader.go(self.index); + const extHeader = await reader.get(self._headerLength); // ext_block_length, ext_block_free_length + self._headerLoaded = true; + self._length = readByteLength(extHeader, 0); + self._freeBytes = readByteLength(extHeader, 4); + assert(self._length >= 0 && self._freeBytes >= 0 && self._freeBytes < self._length, 'invalid data'); + if (keepLock || existingLock) { + return lock; + } + else { + return lock.release(); + } + }, + loadFromExtData(allExtData) { + const self = this; + let index = extDataOffset; + self._headerLoaded = true; + self._length = readByteLength(allExtData, index); + self._freeBytes = readByteLength(allExtData, index + 4); + index += self._headerLength; // 8 + self._values = []; + for (let i = 0; i < valuesLength; i++) { + const result = readEntryValue(allExtData, index); + index += result.byteLength; + self._values.push(result.entryValue); + } + self.totalValues = valuesLength; + }, + async addValue(recordPointer, metadata) { + // add value to this entry's extData block. + const self = this; + const lock = await self.loadHeader(true); + // await tree._testTree(); // Check tree when debugging + // We have to add it to ext_data, and update leaf's value_list_length + // no checking for existing recordPointer + const builder = new BinaryBPlusTreeBuilder({ metadataKeys: tree.info.metadataKeys }); + const extValueData = builder.getLeafEntryValueBytes(recordPointer, metadata); + let extBlockMoves = false; + let newValueIndex = -1; + if (extValueData.length > self._freeBytes) { + // NEW: check if parent ext_data block has free space, maybe we can use that space + const requiredSpace = (() => { + const grossNewLength = entry.extData.length - entry.extData.freeBytes + extValueData.length; + const newValues = Math.ceil((entry.totalValues + 1) * 1.1); // 10% more values than will have now + const avgValueLength = Math.ceil((entry.extData.length - entry.extData.freeBytes) / entry.extData.totalValues); + const netNewLength = avgValueLength * newValues; + const newFreeBytes = netNewLength - grossNewLength; + return { + bytes: netNewLength + self._headerLength, + length: netNewLength, + freeBytes: newFreeBytes, + }; + })(); + if (requiredSpace.bytes > leaf.extData.freeBytes) { + lock.release(); + throw new DetailedError('max-extdata-size-reached', 'No space left to add value to leaf ext_data_block'); + } + else { + // leaf has enough free space in its ext_data to add a new ext_data_block + // store extData there and move the leaf entry's pointer + // Load existing values now before adjusting indexes etc + await entry.extData.loadValues(lock); + // const oldIndex = entry.extData.index; + const oldOffset = extDataOffset; + const newOffset = leaf.extData.length - leaf.extData.freeBytes; + // if (newOffset === oldOffset + self._length) { + // // This is the last ext_data_block in ext_data, it can stay at the same spot + // newOffset = oldOffset; + // } + extDataOffset = newOffset; + entry.extData.index += (newOffset - oldOffset); + entry.extData._length = requiredSpace.length; + entry.extData._freeBytes = requiredSpace.freeBytes; + // // Let's check now if the ext_data_free_bytes in the file is the same as we have in memory + // const leafExtFreeBytesIndex = + // leaf.dataIndex + // + ((tree.info.hasLargePtrs ? 6 : 4) * 2) // prev_leaf_ptr, next_leaf_ptr + // + 4; // ext_byte_length + // const check = await tree._readFn(leafExtFreeBytesIndex, 4); + // const nr = _readByteLength(check, 0); + // assert(nr === leaf.extData.freeBytes, 'ext free bytes in file is different'); + // const oldLeafExtFreeBytes = leaf.extData.freeBytes; + leaf.extData.freeBytes -= requiredSpace.bytes; // leaf.extData.length - (newOffset + requiredSpace.length); + // console.log(`addValue :: moving ext_block from index ${oldIndex} to ${entry.extData.index}, leaf's ext_data_free_bytes reduces from ${oldLeafExtFreeBytes} to ${leaf.extData.freeBytes} bytes`) + extBlockMoves = true; + } + } + else { + // Before adjusting freeBytes, calc new value storage index + newValueIndex = self.index + self._headerLength + self._length - self._freeBytes; + // Reduce free space in ext_data_block + entry.extData._freeBytes -= extValueData.length; + } + const extDataBlock = [ + 0, 0, 0, 0, + 0, 0, 0, 0, // ext_block_free_length + ]; + // update ext_block_length: + writeByteLength(extDataBlock, 0, entry.extData.length); + // update ext_block_free_length: + writeByteLength(extDataBlock, 4, entry.extData.freeBytes); + if (extBlockMoves) { + // If the ext_data_block moves, it has to be rewritten entirely + // Add all existing values first + const builder = new BinaryBPlusTreeBuilder({ metadataKeys: tree.info.metadataKeys }); + entry.extData.values.forEach(val => { + const valData = builder.getLeafEntryValueBytes(val.recordPointer, val.metadata); + _appendToArray(extDataBlock, valData); + }); + // Now add new value + _appendToArray(extDataBlock, extValueData); + // Check if the new size is indeed what we calculated + if (extDataBlock.length - 8 + entry.extData.freeBytes !== entry.extData.length) { + throw new Error('DEV ERROR: new ext_block size is not equal to calculated size'); + } + } + const valueListLengthData = [0, 0, 0, 0]; + writeByteLength(valueListLengthData, 0, self.totalValues + 1); + // const displayIndex = index => (index + 4096).toString(16).toUpperCase(); + // const displayBytes = bytes => '[' + bytes.map(b => b.toString(16)).join(',').toUpperCase() + ']'; + try { + // console.log(`TreeWrite:ext_block_length(${entry.extData.length}), ext_block_free_length(${entry.extData.freeBytes})${extBlockMoves ? ', value_list' : ''} :: ${extDataBlock.length} bytes at index ${displayIndex(self.index)}: ${displayBytes(extDataBlock.slice(0,4))}, ${displayBytes(extDataBlock.slice(4,8))}${extBlockMoves ? ', [...]' : ''}`); + // console.log(`TreeWrite:value_list_length(${self.totalValues + 1}) :: ${valueListLengthData.length} bytes at index ${displayIndex(self._listLengthIndex)}: ${displayBytes(valueListLengthData)}`); + const promises = [ + // Write header (ext_block_length, ext_block_free_length) or entire ext_data_block to its index: + tree._writeFn(extDataBlock, self.index), + // update value_list_length + tree._writeFn(valueListLengthData, self._listLengthIndex), + ]; + if (extBlockMoves) { + // Write new ext_data_ptr in leaf entry's val_data + let writeBytes = [0, 0, 0, 0]; + writeByteLength(writeBytes, 0, extDataOffset); + // console.log(`TreeWrite:ext_data_ptr(${extDataOffset}) :: ${writeBytes.length} bytes at index ${displayIndex(self._listLengthIndex + 4)}: ${displayBytes(writeBytes)}`); + let p = tree._writeFn(writeBytes, self._listLengthIndex + 4); + promises.push(p); + // Update leaf's ext_free_byte_length + const leafExtFreeBytesIndex = leaf.dataIndex + + ((tree.info.hasLargePtrs ? 6 : 4) * 2) // prev_leaf_ptr, next_leaf_ptr + + 4; // ext_byte_length + writeBytes = [0, 0, 0, 0]; + writeByteLength(writeBytes, 0, leaf.extData.freeBytes); + // console.log(`TreeWrite:ext_free_byte_length(${leaf.extData.freeBytes}) :: ${writeBytes.length} bytes at index ${displayIndex(leafExtFreeBytesIndex)}: ${displayBytes(writeBytes)}`); + p = tree._writeFn(writeBytes, leafExtFreeBytesIndex); + promises.push(p); + } + else { + // write new value: + // console.log(`TreeWrite:value :: ${extValueData.length} bytes at index ${displayIndex(newValueIndex)}: ${displayBytes(extValueData)}`); + const p = tree._writeFn(extValueData, newValueIndex); + promises.push(p); + } + await Promise.all(promises); + // self._freeBytes -= extValueData.length; + self.totalValues++; + // TEST + // try { + // console.log(`Values for entry '${entry.key}' updated: ${self.totalValues} values`); + // await tree._testTree(); + // console.log(`Successfully added value to entry '${entry.key}'`); + // } + // catch (err) { + // console.error(`Tree is broken after updating entry '${entry.key}': ${err.message}`); + // } + } + finally { + await lock.release(); + } + // TEST + // try { + // await self.loadValues(); + // } + // catch (err) { + // console.error(`Values are broken after updating entry '${entry.key}': ${err.message}`); + // } + }, + async removeValue(recordPointer) { + // remove value + // load the whole value, then rewrite it + const self = this; + const values = await self.loadValues(); + // LOCK? + const index = values.findIndex(val => _compareBinary(val.recordPointer, recordPointer)); + if (!~index) { + return; + } + values.splice(index, 1); + // rebuild ext_data_block + const bytes = [ + 0, 0, 0, 0, + 0, 0, 0, 0, // ext_block_free_length + ]; + // ext_block_length: + writeByteLength(bytes, 0, self._length); + // Add all values + const builder = new BinaryBPlusTreeBuilder({ metadataKeys: tree.info.metadataKeys }); + values.forEach(val => { + const valData = builder.getLeafEntryValueBytes(val.recordPointer, val.metadata); + _appendToArray(bytes, valData); + }); + // update ext_block_free_length: + writeByteLength(bytes, 4, self._length - bytes.length); + const valueListLengthData = writeByteLength([], 0, self.totalValues - 1); + await Promise.all([ + // write ext_data_block + tree._writeFn(bytes, self.index), + // update value_list_length + tree._writeFn(valueListLengthData, self._listLengthIndex), + ]); + self.totalValues--; + self._freeBytes = self._length - bytes.length; + }, + }; + entry.loadValues = async function loadValues() { + const lock = await ThreadSafe.lock(leaf); + await reader.go(extDataBlockIndex); + const extHeader = await reader.get(8); // ext_data_length, ext_free_byte_length + const length = readByteLength(extHeader, 0); + const freeBytes = readByteLength(extHeader, 4); + const data = await reader.get(length - freeBytes); + entry._values = []; + let index = 0; + for (let i = 0; i < this.totalValues; i++) { + const result = readEntryValue(data, index); + index += result.byteLength; + entry._values.push(result.entryValue); + } + lock.release(); + return entry._values; + }; + leaf.entries.push(entry); + } + else { + const entryValues = []; + for (let j = 0; j < valuesLength; j++) { + const entryValue = readValue(); + entryValues.push(entryValue); + } + leaf.entries.push(new BinaryBPlusTreeLeafEntry(key, entryValues)); + } + } + } + if (prevLeafOffset !== 0) { + leaf.getPrevious = async () => { + const freshReader = reader.clone(); + await freshReader.go(leaf.prevLeafIndex); + const childInfo = await this._readChild(freshReader); + assert(childInfo.isLeaf, `previous leaf is *not* a leaf. Current leaf index: ${leaf.sourceIndex}, next leaf offset: ${prevLeafOffset}, target index: ${leaf.dataIndex + prevLeafOffset}`); + const prevLeaf = await this._getLeaf(childInfo, freshReader, options); + return prevLeaf; + }; + } + if (nextLeafOffset !== 0) { + leaf.getNext = async () => { + const freshReader = reader.clone(); + await freshReader.go(leaf.nextLeafIndex); + const childInfo = await this._readChild(freshReader); + assert(childInfo.isLeaf, `next leaf is *not* a leaf. Current leaf index: ${leaf.sourceIndex}, next leaf offset: ${nextLeafOffset}, target index: ${leaf.dataIndex + 4 + nextLeafOffset}`); + const nextLeaf = await this._getLeaf(childInfo, freshReader, options); + assert(nextLeaf.entries.length === 0 || leaf.entries.length === 0 || _isMore(nextLeaf.entries[0].key, leaf.entries[leaf.entries.length - 1].key), 'next leaf has lower keys than previous leaf?!'); + return nextLeaf; + }; + } + assert(leaf.entries.every((entry, index, arr) => index === 0 || _isMore(entry.key, arr[index - 1].key)), 'Invalid B+Tree: leaf entries are not sorted ok'); + return leaf; + } + async _writeNode(nodeInfo) { + // Rewrite the node. + // NOTE: not using BPlusTreeNode.toBinary for this, because + // that function writes children too, we don't want that + assert(nodeInfo.entries.length > 0, 'node has no entries!'); + assert(nodeInfo.entries.every((entry, index, arr) => index === 0 || _isMore(entry.key, arr[index - 1].key)), 'Node entries are not sorted ok'); + try { + const builder = new BinaryBPlusTreeBuilder({ + uniqueKeys: this.info.isUnique, + maxEntriesPerNode: this.info.entriesPerNode, + metadataKeys: this.info.metadataKeys, + // Not needed: + byteLength: this.info.byteLength, + freeBytes: this.info.freeSpace, + }); + const bytes = builder.createNode({ + index: nodeInfo.index, + entries: nodeInfo.entries.map(entry => ({ key: entry.key, ltIndex: entry.ltChildIndex })), + gtIndex: nodeInfo.gtChildIndex, + }, { + addFreeSpace: true, + maxLength: nodeInfo.length, + }); + assert(bytes.length <= nodeInfo.length, 'too many bytes allocated for node'); + return await this._writeFn(bytes, nodeInfo.index); + } + catch (err) { + throw new DetailedError('write-node-fail', `Failed to write node: ${err.message}`, err); + } + } + async _writeLeaf(leafInfo) { + assert(leafInfo.entries.every((entry, index, arr) => index === 0 || _isMore(entry.key, arr[index - 1].key)), 'Leaf entries are not sorted ok'); + try { + const builder = new BinaryBPlusTreeBuilder({ + uniqueKeys: this.info.isUnique, + maxEntriesPerNode: this.info.entriesPerNode, + metadataKeys: this.info.metadataKeys, + smallLeafs: this.info.hasSmallLeafs, + // Not needed: + byteLength: this.info.byteLength, + freeBytes: this.info.freeSpace, + fillFactor: this.info.fillFactor, + }); + const extData = leafInfo.extData + ? { + length: leafInfo.extData.length, + freeBytes: leafInfo.extData.freeBytes, + rebuild: leafInfo.extData.loaded, + } + : null; + const addFreeSpace = true; + const writes = []; + const bytes = builder.createLeaf({ + index: leafInfo.index, + prevIndex: leafInfo.prevLeafIndex, + nextIndex: leafInfo.nextLeafIndex, + entries: leafInfo.entries, + extData, + }, { + addFreeSpace, + maxLength: leafInfo.length, + addExtData: (pointerIndex, data) => { + // Write additional ext_data_block + const extIndex = extData.length - extData.freeBytes; + const fileIndex = leafInfo.sourceIndex + leafInfo.length + extIndex; + const bytes = new Uint8ArrayBuilder(); + const minRequired = data.length + 8; + if (extData.freeBytes < minRequired) { + throw new DetailedError('max-extdata-size-reached', 'Not enough free space in ext_data'); + } + // Calculate free space + const maxFree = extData.freeBytes - minRequired; // Max available free space for new block + const free = addFreeSpace ? Math.min(maxFree, Math.ceil(data.length * 0.1)) : 0; + const length = data.length + free; + // ext_block_length: + bytes.writeUint32(length); + // ext_block_free_length: + bytes.writeUint32(free); + // data: + bytes.append(data); + // Add free space: + bytes.append(new Uint8Array(free)); + // Adjust extData + extData.freeBytes -= bytes.length; + const writePromise = this._writeFn(bytes.data, fileIndex); + writes.push(writePromise); + return { extIndex }; + }, + }); + const maxLength = leafInfo.length + (leafInfo.extData && leafInfo.extData.loaded ? leafInfo.extData.length : 0); + assert(bytes.length <= maxLength, 'more bytes needed than allocated for leaf'); + // write leaf: + const promise = this._writeFn(bytes, leafInfo.index); + writes.push(promise); + // // Check ext_free_byte_length + // if (leafInfo.hasExtData) { + // const extDataLength = _writeByteLength([], 0, extData.length); + // const extDataFreeBytes = _writeByteLength([], 0, extData.freeBytes); + // // Check ext_free_byte_length + // bytes.slice(21, 25).forEach((b, i) => { + // assert(b === extDataLength[i], 'Not the same'); + // }); + // // Check ext_free_byte_length + // bytes.slice(25, 29).forEach((b, i) => { + // assert(b === extDataFreeBytes[i], 'Not the same'); + // }); + // } + const result = await Promise.all(writes); + // await this._testTree(); + return result; + } + catch (err) { + throw new DetailedError('write-leaf-fail', `Failed to write leaf: ${err.message}`, err); + } + } + /** + * TODO: rename to `parseNode` or something + */ + _getNode(nodeInfo, reader) { + // const node = { + // entries: [] + // }; + const node = new BinaryBPlusTreeNode(nodeInfo); + const bytes = node.bytes; + const entriesLength = bytes[0]; + assert(entriesLength > 0, 'Node read failure: no entries'); + let index = 1; + for (let i = 0; i < entriesLength; i++) { + const keyInfo = BPlusTree.getKeyFromBinary(bytes, index); + const key = keyInfo.key; + index += keyInfo.byteLength; + const entry = new BinaryBPlusTreeNodeEntry(key); + node.entries.push(entry); + // read lt_child_ptr: + entry.ltChildOffset = readSignedOffset(bytes, index, this.info.hasLargePtrs); // lt_child_ptr + assert(entry.ltChildOffset !== 0, 'Node read failure: invalid ltChildOffset 0'); + entry.ltChildIndex = node.index + index + 9 + entry.ltChildOffset + (this.info.hasLargePtrs ? 5 : 3); // index + 9 header bytes, +5 because offset is from first byte + entry.getLtChild = async () => { + // return savedPosition.go(entry.ltChildOffset) + await reader.go(entry.ltChildIndex); + const childNodeInfo = await this._readChild(reader); + childNodeInfo.parentNode = node; + childNodeInfo.parentEntry = entry; + return childNodeInfo; + }; + index += this.info.hasLargePtrs ? 6 : 4; + } + // read gt_child_ptr: + node.gtChildOffset = readSignedOffset(bytes, index, this.info.hasLargePtrs); // gt_child_ptr + assert(node.gtChildOffset !== 0, 'Node read failure: invalid gtChildOffset 0'); + node.gtChildIndex = node.index + index + 9 + node.gtChildOffset + (this.info.hasLargePtrs ? 5 : 3); // index + 9 header bytes, +5 because offset is from first byte + node.getGtChild = async () => { + await reader.go(node.gtChildIndex); + const childNodeInfo = await this._readChild(reader); + childNodeInfo.parentNode = node; + childNodeInfo.parentEntry = null; + return childNodeInfo; + }; + return node; + } + /** + * + * @param mode If the requested lock is shared (reads) or exclusive (writes) + * @param fn function to execute with lock in place + * @returns + */ + async _threadSafe(mode, fn) { + if (!this.id) { + throw new DetailedError('tree-id-not-set', 'Set tree.id property to something unique for locking purposes'); + } + const lock = await ThreadSafe.lock(this.id, { timeout: 15 * 60 * 1000, shared: mode === 'shared' }); // 15 minutes for debugging: + try { + let result = fn(); + if (result instanceof Promise) { + result = await result; + } + return result; + } + finally { + lock.release(); + } + } + async getFirstLeaf(options) { + return this._threadSafe('shared', () => this._getFirstLeaf(options)); + } + async _getFirstLeaf(options) { + const reader = await this._getReader(); + let nodeInfo = await this._readChild(reader); + while (!nodeInfo.isLeaf) { + const node = this._getNode(nodeInfo, reader); + const firstEntry = node.entries[0]; + assert(firstEntry, 'node has no entries!'); + nodeInfo = await firstEntry.getLtChild(); + } + const leaf = this._getLeaf(nodeInfo, reader, options); + return leaf; + } + async getLastLeaf(options) { + return this._threadSafe('shared', () => this._getLastLeaf(options)); + } + async _getLastLeaf(options) { + const reader = await this._getReader(); + let nodeInfo = await this._readChild(reader); + while (!nodeInfo.isLeaf) { + const node = this._getNode(nodeInfo, reader); + nodeInfo = await node.getGtChild(); + } + const leaf = this._getLeaf(nodeInfo, reader, options); + return leaf; + } + async findLeaf(searchKey, options) { + return this._threadSafe('shared', () => this._findLeaf(searchKey, options)); + } + async _findLeaf(searchKey, options) { + // searchKey = _normalizeKey(searchKey); // if (_isIntString(searchKey)) { searchKey = parseInt(searchKey); } + const reader = await this._getReader(); + let nodeInfo = await this._readChild(reader); + while (!nodeInfo.isLeaf) { + const node = this._getNode(nodeInfo, reader); + if (node.entries.length === 0) { + throw new Error('read node has no entries!'); + } + const targetEntry = node.entries.find(entry => _isLess(searchKey, entry.key)); + if (targetEntry) { + nodeInfo = await targetEntry.getLtChild(); + } + else { + nodeInfo = await node.getGtChild(); + } + } + const leaf = this._getLeaf(nodeInfo, reader, options); + return leaf; + } + /** + * Searches the tree + * @param op operator to use for key comparison, can be single value operators "<", "<=", "==", "!=", ">", ">=", "matches", "!matches", double value operators "between", "!between", and multiple value operators "in", "!in" + * @param param single value or array for double/multiple value operators + * @param include what data to include in results. `filter`: recordPointers to filter upon + * @returns {Promise<{ entries?: BinaryBPlusTreeLeafEntry[], keys?: Array, keyCount?: number, valueCount?: number, values?: BinaryBPlusTreeLeafEntryValue[] }} + */ + search(op, param, include = { entries: true, values: false, keys: false, count: false }) { + return this._threadSafe('shared', () => this._search(op, param, include)); + } + /** + * Searches the tree + * @param op operator to use for key comparison, can be single value operators "<", "<=", "==", "!=", ">", ">=", "matches", "!matches", double value operators "between", "!between", and multiple value operators "in", "!in" + * @param param single value or array for double/multiple value operators + * @param include what data to include in results. `filter`: recordPointers to filter upon + * @returns {Promise<{ entries?: BinaryBPlusTreeLeafEntry[]; keys?: Array; keyCount?: number; valueCount?: number; values?: BinaryBPlusTreeLeafEntryValue[] }>} + */ + _search(op, param, include = { entries: true, values: false, keys: false, count: false }) { + // TODO: async'ify + if (typeof op === 'string' && ['in', '!in', 'between', '!between'].includes(op) && !(param instanceof Array)) { + // param must be an array + throw new TypeError(`param must be an array when using operator ${op}`); + } + if (typeof op === 'string' && ['exists', '!exists'].includes(op)) { + // These operators are a bit strange: they return results for key [undefined] (op === "!exists"), or all other keys (op === "exists") + // search("exists", ..) executes ("!=", undefined) + // search("!exists", ..) executes ("==", undefined) + op = op === 'exists' ? '!=' : '=='; + param = undefined; + } + if (param === null) { + param = undefined; + } + const getLeafOptions = { stats: !(include.entries || include.values) }; + const results = { + entries: [], + keys: [], + keyCount: 0, + valueCount: 0, + values: [], // was not implemented? is include.values used anywhere? + }; + let blacklistRpTree; + if (op instanceof BlacklistingSearchOperator) { + blacklistRpTree = new BPlusTree(255, true); + } + // const binaryCompare = (a, b) => { + // if (a.length < b.length) { return -1; } + // if (a.length > b.length) { return 1; } + // for (let i = 0; i < a.length; i++) { + // if (a[i] < b[i]) { return -1; } + // if (a[i] > b[i]) { return 1; } + // } + // return 0; + // } + const filterRecordPointers = include.filter + // Using string comparison: + ? include.filter.reduce((arr, entry) => { + arr = arr.concat(entry.values.map(val => String.fromCharCode(...val.recordPointer))); + return arr; + }, []) + // // Using binary comparison: + // ? include.filter.reduce((arr, entry) => { + // arr = arr.concat(entry.values.map(val => val.recordPointer)); + // return arr; + // }, []).sort(binaryCompare) + : null; + let totalMatches = 0; + let totalAdded = 0; + const valuePromises = []; + const emptyValue = []; + const add = (entry) => { + totalMatches += entry.totalValues; + const requireValues = filterRecordPointers || include.entries || include.values || op instanceof BlacklistingSearchOperator; + if (requireValues && typeof entry.extData === 'object' && !entry.extData.loaded) { + // We haven't got its values yet + const p = entry.extData.loadValues().then(() => { + return add(entry); // Do it now + }); + valuePromises.push(p); + return p; + } + if (filterRecordPointers || op instanceof BlacklistingSearchOperator) { + // Generate rp's for each value + entry.values.forEach(val => { + val.rp = String.fromCharCode(...val.recordPointer); + }); + } + if (filterRecordPointers) { + // Apply filter first, only use what remains + // String comparison method seem to have slightly better performance than binary + // Using string comparison: + const values = entry.values.filter(val => filterRecordPointers.includes(val.rp)); + // const recordPointers = entry.values.map(val => String.fromCharCode(...val.recordPointer)); + // const values = []; + // for (let i = 0; i < recordPointers.length; i++) { + // let a = recordPointers[i]; + // if (~filterRecordPointers.indexOf(a)) { + // values.push(entry.values[i]); + // } + // } + // // Using binary comparison: + // const recordPointers = entry.values.map(val => val.recordPointer).sort(binaryCompare); + // const values = []; + // for (let i = 0; i < recordPointers.length; i++) { + // let a = recordPointers[i]; + // for (let j = 0; j < filterRecordPointers.length; j++) { + // let b = filterRecordPointers[j]; + // let diff = binaryCompare(a, b); + // if (diff === 0) { + // let index = entry.values.findIndex(val => val.recordPointer === a); + // values.push(entry.values[index]); + // break; + // } + // else if (diff === -1) { + // // stop searching for this recordpointer + // break; + // } + // } + // } + if (values.length === 0) { + return; + } + entry.values = values; + entry.totalValues = values.length; + } + if (op instanceof BlacklistingSearchOperator) { + // // Generate rp's for each value + // entry.values.forEach(val => { + // val.rp = val.rp || String.fromCharCode(...val.recordPointer); + // }); + // Check which values were previously blacklisted + entry.values = entry.values.filter(val => { + return blacklistRpTree.find(val.rp) === null; + }); + if (entry.values.length === 0) { + return; + } + // Check which values should be blacklisted + const blacklistValues = op.check(entry); + if (blacklistValues instanceof Array) { + // Add to blacklist tree + blacklistValues.forEach(val => { + blacklistRpTree.add(val.rp, emptyValue); + }); + // Remove from current results + entry.values = blacklistValues === entry.values + ? [] // Same array, so all values were blacklisted + : entry.values.filter(value => blacklistValues.indexOf(value) < 0); + const removed = { values: 0, entries: 0 }; + if (include.values) { + // Remove from previous results (values) + for (let i = 0; i < results.values.length; i++) { + const val = results.values[i]; + // if (!val.rp) { val.rp = String.fromCharCode(...val.recordPointer); } + if (blacklistRpTree.find(val.rp)) { + results.values.splice(i, 1); + i--; + removed.values++; + } + } + } + if (include.entries) { + // Remove from previous results (entries, keys) + for (let i = 0; i < results.entries.length; i++) { + const entry = results.entries[i]; + for (let j = 0; j < entry.values.length; j++) { + const val = entry.values[j]; + // if (!val.rp) { val.rp = String.fromCharCode(...val.recordPointer); } + if (blacklistRpTree.find(val.rp)) { + entry.values.splice(j, 1); + j--; + if (!include.values) { + removed.values++; + } + if (entry.values.length === 0) { + results.entries.splice(i, 1); + i--; + removed.entries++; + if (include.keys) { + results.keys.splice(results.keys.indexOf(entry.key), 1); + } + } + } + } + } + } + results.valueCount -= removed.values; + results.keyCount -= removed.entries; + if (entry.values.length === 0) { + return; + } + } + // The way BlacklistingSearchOperator is currently used (including ALL values + // in the index besides the ones that are blacklisted along the way), we only + // want unique "non-blacklisted" recordpointers in the results. So, we want to + // remove all values that are already present in the current results: + for (let i = 0; i < entry.values.length; i++) { + const currentValue = entry.values[i]; + let remove = false; + if (include.values) { + // TODO: change to: remove = results.values.includes + const index = results.values.findIndex(val => val.rp === currentValue.rp); + remove = index >= 0; + } + else if (include.entries) { + // Check result entries + for (let j = 0; j < results.entries.length; j++) { + const entry = results.entries[j]; + // TODO: change to: remove = entry.values.includes + const index = entry.values.findIndex(val => val.rp === currentValue.rp); + remove = index >= 0; + if (remove) { + break; + } + } + } + if (remove) { + entry.values.splice(i, 1); + i--; + } + } + if (entry.values.length === 0) { + return; + } + } + if (include.entries) { + results.entries.push(entry); + } + if (include.keys) { + results.keys.push(entry.key); + } + if (include.values) { + entry.values.forEach(val => results.values.push(val)); + } + if (include.count) { + results.keyCount++; + results.valueCount += entry.totalValues; + } + totalAdded += entry.totalValues; + }; + // const t1 = Date.now(); + // const ret = () => { + // const t2 = Date.now(); + // console.log(`tree.search [${op} ${param}] took ${t2-t1}ms, matched ${totalMatches} values, returning ${totalAdded} values in ${results.entries.length} entries`); + // return results; + // }; + const ret = () => { + if (valuePromises.length > 0) { + return Promise.all(valuePromises) + .then(() => results); + } + else { + return results; + } + }; + if (op instanceof BlacklistingSearchOperator) { + // NEW: custom callback methods to check match + // Full index scan needed + const processLeaf = (leaf) => { + for (let i = 0; i < leaf.entries.length; i++) { + const entry = leaf.entries[i]; + // const keyMatch = typeof op.keyCheck === 'function' ? op.keyCheck(entry.key) : true; + // if (!keyMatch) { continue; } + add(entry); // check will be done by add + } + if (leaf.hasNext) { + return leaf.getNext() + .then(processLeaf); + } + else { + return ret(); // results; //ret(results); + } + }; + return this._getFirstLeaf(getLeafOptions) + .then(processLeaf); + } + else if (['<', '<='].indexOf(op) >= 0) { + const processLeaf = (leaf) => { + let stop = false; + for (let i = 0; i < leaf.entries.length; i++) { + const entry = leaf.entries[i]; + if (op === '<=' && _isLessOrEqual(entry.key, param)) { + add(entry); + } + else if (op === '<' && _isLess(entry.key, param)) { + add(entry); + } + else { + stop = true; + break; + } + } + if (!stop && leaf.getNext) { + return leaf.getNext() + .then(processLeaf); + } + else { + return ret(); //results; //ret(results); + } + }; + return this._getFirstLeaf(getLeafOptions) + .then(processLeaf); + } + else if (['>', '>='].indexOf(op) >= 0) { + const processLeaf = (leaf) => { + for (let i = 0; i < leaf.entries.length; i++) { + const entry = leaf.entries[i]; + if (op === '>=' && _isMoreOrEqual(entry.key, param)) { + add(entry); + } + else if (op === '>' && _isMore(entry.key, param)) { + add(entry); + } + } + if (leaf.hasNext) { + return leaf.getNext() + .then(processLeaf); + } + else { + return ret(); //results; //ret(results); + } + }; + return this._findLeaf(param, getLeafOptions) + .then(processLeaf); + } + else if (op === '==') { + return this._findLeaf(param, getLeafOptions) + .then(leaf => { + const entry = leaf.entries.find(entry => _isEqual(entry.key, param)); //entry.key === param + if (entry) { + add(entry); + } + return ret(); // results; //ret(results); + }); + } + else if (op === '!=') { + // Full index scan needed + const processLeaf = (leaf) => { + for (let i = 0; i < leaf.entries.length; i++) { + const entry = leaf.entries[i]; + if (_isNotEqual(entry.key, param)) { + add(entry); + } //entry.key !== param + } + if (leaf.hasNext) { + return leaf.getNext() + .then(processLeaf); + } + else { + return ret(); // results; //ret(results); + } + }; + return this._getFirstLeaf(getLeafOptions) + .then(processLeaf); + } + else if (op === 'like') { + if (typeof param !== 'string') { + throw new TypeError(`search param value must be a string for operator 'like'`); + } + const wildcardIndex = ~(~param.indexOf('*') || ~param.indexOf('?')); // TODO: make less cryptic + const startSearch = wildcardIndex > 0 ? param.slice(0, wildcardIndex) : ''; + const pattern = '^' + param.replace(/\*/g, '.*').replace(/\?/g, '.') + '$'; + const re = new RegExp(pattern, 'i'); + const processLeaf = (leaf) => { + for (let i = 0; i < leaf.entries.length; i++) { + const entry = leaf.entries[i]; + if (re.test(entry.key.toString())) { + add(entry); + } + } + let stop = false; + if (wildcardIndex > 0 && leaf.entries.length > 0) { + // Check if we can stop. If the last entry does not start with the first part of the string. + // Eg: like 'Al*', we can stop if the last entry starts with 'Am' + const lastEntry = leaf.entries[leaf.entries.length - 1]; + stop = lastEntry.key.toString().slice(0, wildcardIndex) > startSearch; + } + if (!stop && leaf.getNext) { + return leaf.getNext() + .then(processLeaf); + } + else { + return ret(); + } + }; + if (wildcardIndex === 0) { + return this._getFirstLeaf(getLeafOptions) + .then(processLeaf); + } + else { + return this._findLeaf(startSearch, getLeafOptions) + .then(processLeaf); + } + } + else if (op === '!like') { + // Full index scan needed + if (typeof param !== 'string') { + throw new TypeError(`search param value must be a string for operator '!like'`); + } + const pattern = '^' + param.replace(/\*/g, '.*').replace(/\?/g, '.') + '$'; + const re = new RegExp(pattern, 'i'); + const processLeaf = (leaf) => { + for (let i = 0; i < leaf.entries.length; i++) { + const entry = leaf.entries[i]; + if (!re.test(entry.key.toString())) { + add(entry); + } + } + if (leaf.hasNext) { + return leaf.getNext() + .then(processLeaf); + } + else { + return ret(); // results; //ret(results); + } + }; + return this._getFirstLeaf(getLeafOptions) + .then(processLeaf); + } + else if (op === 'in') { + if (!(param instanceof Array)) { + throw new TypeError(`search param value must be an array for operator 'in'`); + } + const sorted = param.slice().sort(); + let searchKey = sorted.shift(); + const processLeaf = (leaf) => { + while (true) { + const entry = leaf.entries.find(entry => _isEqual(entry.key, searchKey)); //entry.key === searchKey + if (entry) { + add(entry); + } + searchKey = sorted.shift(); + if (!searchKey) { + return ret(); // results; //ret(results); + } + else if (_isMore(searchKey, leaf.entries[leaf.entries.length - 1].key)) { + return this._findLeaf(searchKey).then(processLeaf); + } + // Stay in the loop trying more keys on the same leaf + } + }; + return this._findLeaf(searchKey, getLeafOptions) + .then(processLeaf); + } + else if (op === '!in') { + // Full index scan needed + if (!(param instanceof Array)) { + throw new TypeError(`search param value must be an array for operator '!in'`); + } + const keys = param; + const processLeaf = (leaf) => { + for (let i = 0; i < leaf.entries.length; i++) { + const entry = leaf.entries[i]; + if (keys.findIndex(key => _isEqual(key, entry.key)) < 0) { + add(entry); + } //if (keys.indexOf(entry.key) < 0) + } + if (leaf.hasNext) { + return leaf.getNext() + .then(processLeaf); + } + else { + return ret(); //results; //ret(results); + } + }; + return this._getFirstLeaf(getLeafOptions) + .then(processLeaf); + } + else if (op === 'between') { + if (!(param instanceof Array)) { + throw new TypeError(`search param value must be an array for operator 'between'`); + } + let bottom = param[0], top = param[1]; + if (top < bottom) { + const swap = top; + top = bottom; + bottom = swap; + } + return this._findLeaf(bottom, getLeafOptions) + .then(leaf => { + let stop = false; + const processLeaf = (leaf) => { + for (let i = 0; i < leaf.entries.length; i++) { + const entry = leaf.entries[i]; + if (_isMoreOrEqual(entry.key, bottom) && _isLessOrEqual(entry.key, top)) { + add(entry); + } + if (_isMore(entry.key, top)) { + stop = true; + break; + } + } + if (stop || !leaf.getNext) { + return ret(); // results; //ret(results); + } + else { + return leaf.getNext().then(processLeaf); + } + }; + return processLeaf(leaf); + }); + } + else if (op === '!between') { + // Equal to key < bottom || key > top + if (!(param instanceof Array)) { + throw new TypeError(`search param value must be an array for operator '!between'`); + } + let bottom = param[0], top = param[1]; + if (top < bottom) { + const swap = top; + top = bottom; + bottom = swap; + } + // Add lower range first, lowest value < val < bottom + return this._getFirstLeaf(getLeafOptions) + .then(leaf => { + let stop = false; + const processLeaf = (leaf) => { + for (let i = 0; i < leaf.entries.length; i++) { + const entry = leaf.entries[i]; + if (_isLess(entry.key, bottom)) { + add(entry); + } + else { + stop = true; + break; + } + } + if (!stop && leaf.getNext) { + return leaf.getNext().then(processLeaf); + } + }; + return processLeaf(leaf); + }) + .then(() => { + // Now add upper range, top < val < highest value + return this._findLeaf(top, getLeafOptions); + }) + .then(leaf => { + const processLeaf = (leaf) => { + for (let i = 0; i < leaf.entries.length; i++) { + const entry = leaf.entries[i]; + if (_isMore(entry.key, top)) { + add(entry); + } + } + if (!leaf.getNext) { + return ret(); // results; //ret(results); + } + else { + return leaf.getNext().then(processLeaf); + } + }; + return processLeaf(leaf); + }); + } + else if (op === 'matches' || op === '!matches') { + // Full index scan needed + if (!(param instanceof RegExp)) { + throw new TypeError(`search param value must be a RegExp for operator 'matches' and '!matches'`); + } + const re = param; + const processLeaf = (leaf) => { + for (let i = 0; i < leaf.entries.length; i++) { + const entry = leaf.entries[i]; + const isMatch = re.test(entry.key.toString()); + if ((isMatch && op === 'matches') || (!isMatch && op === '!matches')) { + add(entry); + } + } + if (leaf.hasNext) { + return leaf.getNext() + .then(processLeaf); + } + else { + return ret(); // results; //ret(results); + } + }; + return this._getFirstLeaf(getLeafOptions) + .then(processLeaf); + } + else { + throw new Error(`Unknown search operator "${op}"`); + } + } + /** + * @returns returns a promise that resolves with 1 value (unique keys), a values array or the number of values (options.stats === true) + */ + async find(searchKey, options) { + return this._threadSafe('shared', () => this._find(searchKey, options)); + } + /** + * @returns returns a promise that resolves with 1 value (unique keys), a values array or the number of values (options.stats === true) + */ + async _find(searchKey, options) { + // searchKey = _normalizeKey(searchKey); //if (_isIntString(searchKey)) { searchKey = parseInt(searchKey); } + const leaf = options?.leaf ?? await this._findLeaf(searchKey, options); + const entry = leaf.entries.find(entry => _isEqual(searchKey, entry.key)); + if (!this.info) { + throw new NoTreeInfoError(); + } + if (options && options.stats) { + return entry?.totalValues ?? 0; + } + else if (entry) { + if (entry.extData) { + await entry.extData.loadValues(); + } + return this.info.isUnique + ? entry.values[0] + : entry.values; + } + else { + return null; + } + } + /** + * @param options `existingOnly`: Whether to only return lookup results for keys that were actually found + */ + async findAll(keys, options) { + return this._threadSafe('shared', () => this._findAll(keys, options)); + } + async _findAll(keys, options = { existingOnly: true, stats: false }) { + options.stats = options.stats === true; + if (keys.length <= 2) { + const promises = keys.map(async (key) => { + const result = await this._find(key, { stats: options.stats }); + const value = options.stats ? null : result; + const totalValues = options.stats ? result : value === null ? 0 : value instanceof Array ? value.length : 1; + return { key, value, totalValues }; + }); + const results = await Promise.all(promises); + return options.existingOnly + ? results.filter(r => options.stats ? r.totalValues > 0 : r.value !== null) + : results; + } + // Get upperbound + const lastLeaf = await this._getLastLeaf(); + const lastEntry = lastLeaf.entries.slice(-1)[0]; + const lastKey = lastEntry.key; + // Sort the keys + keys = keys.slice().sort(); + if (_isMore(keys[0], lastKey)) { + // First key to lookup is > lastKey, no need to lookup anything! + return options.existingOnly ? [] : keys.map(key => ({ key, value: null, totalValues: 0 })); + } + // Get lowerbound + const firstLeaf = await this._getFirstLeaf(); + const firstEntry = firstLeaf.entries[0]; + const firstKey = firstEntry.key; + if (_isLess(keys.slice(-1)[0], firstKey)) { + // Last key to lookup is < firstKey, no need to lookup anything! + return options.existingOnly ? [] : keys.map(key => ({ key, value: null, totalValues: 0 })); + } + // Some keys might be out of bounds, others must be looked up + const results = [], lookups = []; + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (_isLess(key, firstKey) || _isMore(key, lastKey)) { + // Out of bounds, no need to lookup + options.existingOnly || results.push({ key, value: null, totalValues: 0 }); + } + else { + // Lookup + lookups.push(key); + } + } + lookups.sort((a, b) => _isLess(a, b) ? -1 : 1); + for (let i = 0; i < lookups.length;) { + let key = lookups[i]; + const leaf = await this._findLeaf(key); + const lastKey = leaf.entries.slice(-1)[0]?.key; + const expectedKeysInLeaf = lookups.slice(i).filter(key => _isLessOrEqual(key, lastKey)); + if (!options.stats && leaf.hasExtData && !leaf.extData.loaded && expectedKeysInLeaf.length > 1) { + // Prevent many (small, locking) ext_data reads by _find -> perform 1 whole ext_data read now + await leaf.extData.load(); + } + const promises = []; + do { + const lookupKey = key; + const p = this._find(lookupKey, { leaf, stats: options.stats }).then(result => { + const value = options.stats ? null : result; + const totalValues = options.stats ? result : value === null ? 0 : value instanceof Array ? value.length : 1; + const exists = options.stats ? totalValues > 0 : value !== null; + if (exists || !options.existingOnly) { + results.push({ key: lookupKey, value, totalValues }); + } + }); + promises.push(p); + key = lookups[++i]; + } while (lastKey && i < lookups.length && _isLessOrEqual(key, lastKey)); + await Promise.all(promises); + } + return results; + } + async _growTree(bytesNeeded) { + if (!this.info) { + throw new NoTreeInfoError(); + } + if (!this._autoGrow) { + throw new Error('Cannot grow tree - autoGrow not enabled'); + } + const grow = bytesNeeded - this.info.freeSpace; + this.info.byteLength += grow; + this.info.freeSpace += grow; + await this._writeAllocationBytes(); // write + } + async writeAllocationBytes() { + return this._threadSafe('exclusive', () => this._writeAllocationBytes()); + } + async _writeAllocationBytes() { + if (!this.info) { + throw new NoTreeInfoError(); + } + await Promise.all([ + // byte_length: + this._writeFn(writeByteLength([], 0, this.info.byteLength), 0), + // free_byte_length: + this._writeFn(writeByteLength([], 0, this.info.freeSpace), this.info.freeSpaceIndex), + ]); + } + async _registerFreeSpace(index, length) { + if (!this.info) { + throw new NoTreeInfoError(); + } + if (!this._fst) { + this._fst = []; + } + if (index + length === this.info.byteLength - this.info.freeSpace) { + // Cancel free space allocated at the end of the file + // console.log(`Freeing ${length} bytes from index ${index} (at end of file)`); + this.info.freeSpace += length; + await this._writeFn(writeByteLength([], 0, this.info.freeSpace), this.info.freeSpaceIndex); // free_byte_length + } + else { + // console.log(`Freeing ${length} bytes from index ${index} to ${index+length}`); + this._fst.push({ index, length }); + // Normalize fst by joining adjacent blocks + this._fst.sort((a, b) => a.index < b.index ? -1 : 1); + let i = 0; + while (i + 1 < this._fst.length) { + const block = this._fst[i]; + const next = this._fst[i + 1]; + if (next.index === block.index + block.length) { + // Adjacent! + block.length += next.length; // Add space to this item + this._fst.splice(i + 1, 1); // Remove next + } + else { + i++; + } + } + } + } + async _claimFreeSpace(bytesRequired) { + if (!this.info) { + throw new NoTreeInfoError(); + } + // if (bytesRequired === 0) { return Promise.reject(new Error('Claiming 0 bytes')); } // ALLOW this! + if (bytesRequired > this.info.freeSpace) { + throw new Error('Attempt to claim more bytes than available in trailing free space'); + } + this.info.freeSpace -= bytesRequired; + await this._writeFn(writeByteLength([], 0, this.info.freeSpace), this.info.freeSpaceIndex); + } + async _requestFreeSpace(bytesRequired) { + if (!this.info) { + throw new NoTreeInfoError(); + } + if (bytesRequired === 0) { + throw new Error('Requesting 0 bytes'); + } + if (!this._fst) { + this._fst = []; + } + const available = this._fst.filter(block => block.length >= bytesRequired); + if (available.length > 0) { + const best = available.sort((a, b) => a.length < b.length ? -1 : 1)[0]; + this._fst.splice(this._fst.indexOf(best), 1); + return best; + } + else { + // Check if there is not too much wasted space + const wastedSpace = this._fst.reduce((total, block) => total + block.length, 0); + const maxWaste = Math.round(this._originalByteLength * 0.5); // max 50% waste + if (wastedSpace > maxWaste) { + throw new Error('too much space being wasted. tree rebuild is needed'); + } + if (this.info.freeSpace < bytesRequired) { + if (this.autoGrow) { + await this._growTree(bytesRequired); + } + else { + throw new DetailedError('tree-full-no-autogrow', `tree doesn't have ${bytesRequired} free bytes and autoGrow is not enabled`); + } + } + const index = this.info.byteLength - this.info.freeSpace; + this.info.freeSpace -= bytesRequired; + await this._writeFn(writeByteLength([], 0, this.info.freeSpace), this.info.freeSpaceIndex); + return { index, length: bytesRequired }; + } + } + /** + * + * @param {BinaryBPlusTreeLeaf} leaf + * @param {object} options + * @param {boolean} [options.growData=false] + * @param {boolean} [options.growExtData=false] + * @param {(leaf: BinaryBPlusTreeLeaf) => any} [options.applyChanges] callback function to apply changes to leaf before writing + * @param {boolean} [options.rollbackOnFailure=true] Whether to rewrite the original leaf on failure (only done if this is a one leaf tree) - disable if this rebuild is called because of a failure to write an updated leaf (rollback will fail too!) + */ + async _rebuildLeaf(leaf, options = { + growData: false, + growExtData: false, + rollbackOnFailure: true, + prevLeaf: null, + nextLeaf: null, + }) { + // rebuild the leaf + // await this._testTree(); + const newLeafExtDataLength = options.growExtData ? Math.ceil(leaf.extData.length * 1.1) : leaf.extData.length; + const extDataGrowth = newLeafExtDataLength - leaf.extData.length; + const newLeafLength = options.growData ? Math.ceil(leaf.length * 1.1) : leaf.length; + const leafGrows = options.growData || options.growExtData; + const bytesNeeded = newLeafLength + newLeafExtDataLength; //leafGrows ? newLeafLength + newLeafExtDataLength : 0; + if (!this.info) { + throw new NoTreeInfoError(); + } + if (this.info.freeSpace < bytesNeeded && !options.growData && options.growExtData && leaf.free >= extDataGrowth) { + // ext_data must grow but can't because there is not enough free space to create a new leaf + // the leaf however has enough free space to shrink a bit for the ext_data + if (!leaf.extData.loaded) { + await leaf.extData.load(); + } + leaf.length -= extDataGrowth; + leaf.free -= extDataGrowth; + leaf.extData.length += extDataGrowth; + leaf.extData.freeBytes += extDataGrowth; + // options.growExtData = false; // already done by stealing from leaf + // return this._rebuildLeaf(leaf, options); + options.applyChanges && options.applyChanges(leaf); + return this._writeLeaf(leaf); + } + // Read additional data needed to rebuild this leaf + const reads = []; + if (leaf.hasExtData) { + if (!leaf.extData.loaded) { + // Load all ext_data + reads.push(leaf.extData.load()); + } + else if (!leafGrows) { + // We're done after rewriting this leaf + options.applyChanges && options.applyChanges(leaf); + return this._writeLeaf(leaf); + } + } + if (reads.length > 0) { + // Continue after all additional data has been loaded + await Promise.all(reads); + } + const oneLeafTree = !leaf.parentNode; + try { + let allocated; + if (oneLeafTree) { + const available = leaf.length + leaf.extData.length + this.info.freeSpace; + if (bytesNeeded < available) { + await this._claimFreeSpace(bytesNeeded - leaf.length - leaf.extData.length); + allocated = { index: leaf.index, length: bytesNeeded }; // overwrite leaf at same index + } + else if (this.autoGrow) { + const growBytes = bytesNeeded - available; + await this._growTree(growBytes); + allocated = { index: leaf.index, length: bytesNeeded }; + } + else { + throw new Error('Not enough space to overwrite one leaf tree'); // not possible to overwrite + } + } + else { + allocated = await this._requestFreeSpace(bytesNeeded); // request free space + } + // Create new leaf + const newLeaf = new BinaryBPlusTreeLeaf({ + isLeaf: true, + index: allocated.index, + length: allocated.length - newLeafExtDataLength, + hasExtData: leaf.hasExtData, + tree: leaf.tree, + }); + newLeaf.prevLeafIndex = leaf.prevLeafIndex; + newLeaf.nextLeafIndex = leaf.nextLeafIndex; + newLeaf.entries = leaf.entries.map(entry => new BinaryBPlusTreeLeafEntry(entry.key, entry.values.slice())); + if (leaf.hasExtData) { + newLeaf.extData = { + loaded: true, + length: newLeafExtDataLength, + freeBytes: leaf.extData.freeBytes + (newLeafExtDataLength - leaf.extData.length), + load: noop, + }; + } + // Update indexes pointing to this leaf + if (leaf.parentEntry) { + leaf.parentEntry.ltChildIndex = newLeaf.index; + } + else if (leaf.parentNode) { + leaf.parentNode.gtChildIndex = newLeaf.index; + } + const freedBytes = leaf.length + leaf.extData.length; + // console.log(`Rebuilding leaf for entries "${leaf.entries[0].key}" to "${leaf.entries[leaf.entries.length-1].key}"`); + options.applyChanges && options.applyChanges(newLeaf); + // Start transaction + const tx = new TX(); + // Write new leaf: + tx.queue({ + name: 'new leaf', + action: async () => { + const result = await this._writeLeaf(newLeaf); + // console.log(`new leaf for entries "${newLeaf.entries[0].key}" to "${newLeaf.entries.slice(-1)[0].key}" was written successfully at index ${newLeaf.index} (used to be at ${leaf.index})`); + // // TEST leaf + // const leaf = await this._findLeaf(newLeaf.entries[0].key); + // const promises = leaf.entries.filter(entry => entry.extData).map(entry => entry.extData.loadValues()); + // await Promise.all(promises); + return `${result.length} leaf writes`; + }, + rollback: async () => { + // release allocated space again + if (oneLeafTree) { + if (options.rollbackOnFailure === false) { + return; + } + return this._writeLeaf(leaf); + } + else { + return this._registerFreeSpace(allocated.index, allocated.length); + } + }, + }); + // Adjust previous leaf's next_leaf_ptr: + if (leaf.hasPrevious) { + const prevLeaf = { + nextPointerIndex: leaf.prevLeafIndex + BinaryBPlusTreeLeaf.nextLeafPtrIndex, + oldOffset: BinaryBPlusTreeLeaf.getNextLeafOffset(leaf.prevLeafIndex, leaf.index), + newOffset: BinaryBPlusTreeLeaf.getNextLeafOffset(leaf.prevLeafIndex, newLeaf.index), + }; + tx.queue({ + name: 'prev leaf next_leaf_ptr', + action: async () => { + const bytes = writeSignedOffset([], 0, prevLeaf.newOffset, true); + return this._writeFn(bytes, prevLeaf.nextPointerIndex); + }, + rollback: async () => { + const bytes = writeSignedOffset([], 0, prevLeaf.oldOffset, true); + return this._writeFn(bytes, prevLeaf.nextPointerIndex); + }, + }); + } + // Adjust next leaf's prev_leaf_ptr: + if (leaf.hasNext) { + const nextLeaf = { + prevPointerIndex: leaf.nextLeafIndex + BinaryBPlusTreeLeaf.prevLeafPtrIndex, + oldOffset: BinaryBPlusTreeLeaf.getPrevLeafOffset(leaf.nextLeafIndex, leaf.index), + newOffset: BinaryBPlusTreeLeaf.getPrevLeafOffset(leaf.nextLeafIndex, newLeaf.index), + }; + tx.queue({ + name: 'next leaf prev_leaf_ptr', + action: async () => { + const bytes = writeSignedOffset([], 0, nextLeaf.newOffset, true); + return this._writeFn(bytes, nextLeaf.prevPointerIndex); + }, + rollback: async () => { + const bytes = writeSignedOffset([], 0, nextLeaf.oldOffset, true); + return this._writeFn(bytes, nextLeaf.prevPointerIndex); + }, + }); + } + // Rewrite parent node + if (leaf.parentNode) { + tx.queue({ + name: 'parent node', + action: async () => { + return this._writeNode(leaf.parentNode); + }, + rollback: async () => { + // Set the target leaf indexes back to the originals + if (leaf.parentEntry) { + leaf.parentEntry.ltChildIndex = leaf.index; + } + else { + leaf.parentNode.gtChildIndex = leaf.index; + } + if (options.nextLeaf.parentNode === leaf.parentNode) { + if (options.nextLeaf.parentEntry) { + options.nextLeaf.parentEntry.ltChildIndex = options.nextLeaf.index; + } + else { + options.nextLeaf.parentNode.gtChildIndex = options.nextLeaf.index; + } + } + return this._writeNode(leaf.parentNode); + }, + }); + } + const results = await tx.execute(true); + if (!oneLeafTree) { + await this._registerFreeSpace(leaf.index, freedBytes); + } + // await this._testTree(); + return results; + } + catch (err) { + throw new DetailedError('rebuild-leaf-failed', `Failed to rebuild leaf: ${err.message}`, err); + } + } + async _splitNode(node, options = { keepEntries: 0, cancelCallback: null }) { + // split node if it could not be written. + // There needs to be enough free space to store another leaf the size of current node, + // and the parent node must not be full. + if (typeof options.cancelCallback !== 'function') { + throw new Error('specify options.cancelCallback to undo any changes when a rollback needs to be performed'); + } + try { + if (!node.parentNode) { + throw new DetailedError('cannot-split-top-level-node', 'Cannot split top-level node, tree rebuild is needed'); + } + if (node.parentNode.entries.length >= this.info.entriesPerNode) { + // Split parent node before continuing + const { node1, node2 } = await this._splitNode(node.parentNode, { cancelCallback: noop }); + // find out if this node is now a child of node1 or node2, update properties accordingly + const parentEntry1 = node1.entries.find(e => e.ltChildIndex === node.index); + const parentEntry2 = node2.entries.find(e => e.ltChildIndex === node.index); + if (parentEntry1) { + node.parentNode = node1; + node.parentEntry = parentEntry1; + } + else if (parentEntry2) { + node.parentNode = node2; + node.parentEntry = parentEntry2; + } + else if (node1.gtChildIndex === node.index) { + node.parentNode = node1; + node.parentEntry = null; + } + else if (node2.gtChildIndex === node.index) { + node.parentNode = node2; + node.parentEntry = null; + } + else { + throw new Error('DEV ERROR: new parent nodes do not reference this node'); + } + } + if (typeof options.keepEntries !== 'number' || options.keepEntries === 0) { + options.keepEntries = Math.floor(node.entries.length / 2); + } + if (options.keepEntries > this.info.entriesPerNode - 2) { + options.keepEntries = this.info.entriesPerNode - 2; // 1 entry will move to the next node, 1 entry is removed as it becomes this node's gtChild + } + const newNodeLength = node.length; // Use same length as current node + const allocated = await this._requestFreeSpace(newNodeLength); + // console.log(`Splitting node "${node.entries[0].key}" to "${node.entries.slice(-1)[0].key}", cutting at "${movingEntries[0].key}"`); + // Create new node + const newNode = new BinaryBPlusTreeNode({ + isLeaf: false, + length: newNodeLength, + index: allocated.index, + tree: node.tree, + }); + // current node's gtChild becomes new node's gtChild + newNode.gtChildIndex = node.gtChildIndex; + // move entries + const movingEntries = node.entries.splice(options.keepEntries); + // First entry is not moving, it becomes original node's gtChild and new parent node entry key + const disappearingEntry = movingEntries.shift(); + node.gtChildIndex = disappearingEntry.ltChildIndex; + // Add all other entries to new node + newNode.entries.push(...movingEntries); + // movingEntries.forEach(entry => { + // const childIndex = node.index + entry.ltChildOffset; + // const newEntry = new BinaryBPlusTreeNodeEntry(entry.key); + // newEntry.ltChildIndex = childIndex - newNode.index; + // newNode.entries.push(newEntry); + // }); + // console.log(`Creating new node for ${movingEntries.length} entries`); + // Update parent node entry pointing to this node + const oldParentNode = new BinaryBPlusTreeNode({ + isLeaf: false, + index: node.parentNode.index, + length: node.parentNode.length, + free: node.parentNode.free, + }); + oldParentNode.gtChildIndex = node.parentNode.gtChildIndex; + oldParentNode.entries = node.parentNode.entries.map(entry => { + const newEntry = new BinaryBPlusTreeNodeEntry(entry.key); + newEntry.ltChildIndex = entry.ltChildIndex; + return newEntry; + }); + if (node.parentEntry !== null) { + // Current node is a parent node entry's ltChild + // eg: current node [10,11,12, ... ,18,19] is parent node [10,20,30] second entry's (20) ltChild. + // When splitting to [10, ..., 14] and [15, ..., 19], we have to add key 15 to parent: [10,15,20,30] + const newEntryKey = node.parentEntry.key; // (20 in above example) + node.parentEntry.key = disappearingEntry.key; // movingEntries[0].key; // (15 in above example) + // Add new node entry for created node + const insertIndex = node.parentNode.entries.indexOf(node.parentEntry) + 1; + const newNodeEntry = new BinaryBPlusTreeNodeEntry(newEntryKey); + newNodeEntry.ltChildIndex = newNode.index; // Set the target index, so _writeNode knows it must calculate the target offset + node.parentNode.entries.splice(insertIndex, 0, newNodeEntry); + } + else { + // Current node is parent node's gtChild + const newNodeEntry = new BinaryBPlusTreeNodeEntry(disappearingEntry.key); //new BinaryBPlusTreeNodeEntry(movingEntries[0].key); + newNodeEntry.ltChildIndex = node.index; + node.parentNode.entries.push(newNodeEntry); + node.parentNode.gtChildIndex = newNode.index; + } + // Start transaction + const tx = new TX(); + // Write new node: + tx.queue({ + name: 'write new node', + action: async () => { + return this._writeNode(newNode); + }, + rollback: async () => { + // Release allocated space again + return this._registerFreeSpace(allocated.index, allocated.length); + }, + // No need to add rollback step to remove new node. It'll be overwritten later + }); + // Rewrite this node: + tx.queue({ + name: 'rewrite current node', + action: async () => { + return this._writeNode(node); + }, + rollback: async () => { + node.entries.push(...movingEntries); + const p = options.cancelCallback(); + if (p instanceof Promise) { + return p.then(() => { + return this._writeNode(node); + }); + } + return this._writeNode(node); + }, + }); + // Rewrite parent node: + tx.queue({ + name: 'rewrite parent node', + action: async () => { + return this._writeNode(node.parentNode); + }, + rollback: async () => { + // this is the last step, we don't need to rollback if we are running the tx sequentially. + // Because we run parallel, we need rollback code here: + return this._writeNode(oldParentNode); + }, + }); + await tx.execute(true); // run parallel + // await this._testTree(); + return { node1: node, node2: newNode }; + } + catch (err) { + throw new DetailedError('split-node-failed', `Unable to split node: ${err.message}`, err); + } + } + async _splitLeaf(leaf, options = { nextLeaf: null, keepEntries: 0, cancelCallback: null }) { + // split leaf if it could not be written. + // console.log('splitLeaf'); + // There needs to be enough free space to store another leaf the size of current leaf + if (typeof options.cancelCallback !== 'function') { + throw new Error('specify options.cancelCallback to undo any changes when a rollback needs to be performed'); + } + if (leaf.parentNode.entries.length >= this.info.entriesPerNode) { + // TODO: TEST splitting node + // throw new DetailedError('parent-node-full', `Cannot split leaf because parent node is full`); + // NEW: split parent node! + const { node1, node2 } = await this._splitNode(leaf.parentNode, { keepEntries: options.keepEntries, cancelCallback: noop }); + // find out if leaf is now a child of node1 or node2, update properties and try again + const parentEntry1 = node1.entries.find(e => e.ltChildIndex === leaf.index); // node1.entries.find(e => node1.index + e.ltChildOffset === leaf.index); //node1.entries.find(entry => entry === node.parentEntry); // + const parentEntry2 = node2.entries.find(e => e.ltChildIndex === leaf.index); // node1.entries.find(e => node1.index + e.ltChildOffset === leaf.index); //node1.entries.find(entry => entry === node.parentEntry); // + if (parentEntry1) { + leaf.parentNode = node1; + leaf.parentEntry = parentEntry1; + } + else if (parentEntry2) { + leaf.parentNode = node2; + leaf.parentEntry = parentEntry2; + } + else if (node1.gtChildIndex === leaf.index) { + leaf.parentNode = node1; + leaf.parentEntry = null; + } + else if (node2.gtChildIndex === leaf.index) { + leaf.parentNode = node2; + leaf.parentEntry = null; + } + else { + throw new Error('DEV ERROR: new parent nodes have no reference this leaf'); + // if (leaf.entries[0].key <= node2.entries[node2.entries.length-1].key) { + // throw new Error(`DEV ERROR: Leaf's first entry key (${leaf.entries[0].key}) <= node2's last entry key ${node2.entries[node2.entries.length-1].key}`); + // } + } + } + if (typeof options.keepEntries !== 'number' || options.keepEntries === 0) { + options.keepEntries = leaf.hasNext + ? Math.floor(leaf.entries.length / 2) // Split leaf entries into 2 equal parts + : Math.floor(this.info.entriesPerNode * (this.info.fillFactor / 100)); // No next leaf, split at fill factor + } + // Check if additional data has to be loaded before proceeding + const reads = []; + if (!options.nextLeaf && leaf.hasNext) { + // Load next leaf first + reads.push(leaf.getNext() + .then(nextLeaf => { + options.nextLeaf = nextLeaf; + })); + } + if (leaf.hasExtData && !leaf.extData.loaded) { + // load all ext_data before proceeding with split + reads.push(leaf.extData.load()); + } + if (reads.length > 0) { + await Promise.all(reads); + } + try { + const movingEntries = leaf.entries.slice(options.keepEntries); + // const movingExtDataLength = movingEntry.extData ? Math.ceil((movingEntry.extData.length - movingEntry.extData.freeBytes) * 1.1) : 0; + // const movingExtDataLength = Math.ceil(movingEntries.reduce((length, entry) => { + // return length + (entry.extData ? entry.extData.length + 8 - entry.extData.freeBytes : 0); + // }, 0) / movingEntries.length * this.info.entriesPerNode); + const extDataLengths = leaf.entries + .filter(entry => entry.extData) + .map(entry => entry.extData.length + 8 - entry.extData.freeBytes); + const avgExtDataLength = extDataLengths.length === 0 ? 0 : extDataLengths.reduce((total, length) => total + length, 0) / extDataLengths.length; + //const movingExtDataLength = Math.ceil(avgExtDataLength * movingEntries.length); + const movingExtDataLength = movingEntries.reduce((total, entry) => total + (entry.extData ? entry.extData.length + 8 - entry.extData.freeBytes : 0), 0); + const newLeafExtDataLength = Math.ceil(avgExtDataLength * this.info.entriesPerNode); //Math.ceil(movingExtDataLength * 1.1); + const newLeafLength = leaf.length; // Use same length as current leaf + const allocated = await this._requestFreeSpace(newLeafLength + newLeafExtDataLength); + // console.log(`Splitting leaf "${leaf.entries[0].key}" to "${leaf.entries.slice(-1)[0].key}", cutting at "${movingEntries[0].key}"`); + const nextLeaf = options.nextLeaf; + // Create new leaf + const newLeaf = new BinaryBPlusTreeLeaf({ + isLeaf: true, + length: newLeafLength, + index: allocated.index, + tree: leaf.tree, + hasExtData: newLeafExtDataLength > 0, + }); + if (newLeafExtDataLength > 0) { + newLeaf.extData = { + loaded: true, + length: newLeafExtDataLength, + freeBytes: newLeafExtDataLength - movingExtDataLength, + load: noop, + }; + } + // Adjust free space length and prev & next offsets + // this.info.freeSpace -= newLeafLength + newLeafExtDataLength; + newLeaf.prevLeafIndex = leaf.index; + newLeaf.nextLeafIndex = nextLeaf ? nextLeaf.index : 0; + leaf.nextLeafIndex = newLeaf.index; + if (nextLeaf) { + nextLeaf.prevLeafIndex = newLeaf.index; + } + // move entries + leaf.entries.splice(-movingEntries.length); + newLeaf.entries.push(...movingEntries); + // console.log(`Creating new leaf for ${movingEntries.length} entries`); + // Update parent node entry pointing to this leaf + const oldParentNode = new BinaryBPlusTreeNode({ + isLeaf: false, + index: leaf.parentNode.index, + length: leaf.parentNode.length, + free: leaf.parentNode.free, + }); + oldParentNode.gtChildIndex = leaf.parentNode.gtChildIndex; + oldParentNode.entries = leaf.parentNode.entries.map(entry => { + const newEntry = new BinaryBPlusTreeNodeEntry(entry.key); + newEntry.ltChildIndex = entry.ltChildIndex; + return newEntry; + }); + if (leaf.parentEntry !== null) { + // Current leaf is a parent node entry's ltChild + // eg: current leaf [10,11,12, ... ,18,19] is parent node [10,20,30] second entry's (20) ltChild. + // When splitting to [10, ..., 14] and [15, ..., 19], we have to add key 15 to parent: [10,15,20,30] + const newEntryKey = leaf.parentEntry.key; // (20 in above example) + leaf.parentEntry.key = movingEntries[0].key; // (15 in above example) + // Add new node entry for created leaf + const insertIndex = leaf.parentNode.entries.indexOf(leaf.parentEntry) + 1; + const newNodeEntry = new BinaryBPlusTreeNodeEntry(newEntryKey); + newNodeEntry.ltChildIndex = newLeaf.index; // Set the target index, so _writeNode knows it must calculate the target offset + leaf.parentNode.entries.splice(insertIndex, 0, newNodeEntry); + } + else { + // Current leaf is parent node's gtChild + const newNodeEntry = new BinaryBPlusTreeNodeEntry(movingEntries[0].key); + newNodeEntry.ltChildIndex = leaf.index; + leaf.parentNode.entries.push(newNodeEntry); + leaf.parentNode.gtChildIndex = newLeaf.index; + } + // Start transaction + const tx = new TX(); + // Write new leaf: + tx.queue({ + name: 'write new leaf', + action: async () => { + return this._writeLeaf(newLeaf); + }, + rollback: async () => { + // Release allocated space again + return this._registerFreeSpace(allocated.index, allocated.length); + }, + // No need to add rollback step to remove new leaf. It'll be overwritten later + }); + // Rewrite next leaf: + nextLeaf && tx.queue({ + name: 'rewrite next leaf', + action: async () => { + return this._writeLeaf(nextLeaf); + }, + rollback: async () => { + nextLeaf.prevLeafIndex = leaf.index; + return this._writeLeaf(nextLeaf); + }, + }); + // Rewrite this leaf: + tx.queue({ + name: 'rewrite current leaf', + action: async () => { + return this._writeLeaf(leaf); + }, + rollback: async () => { + leaf.entries.push(...movingEntries); + leaf.nextLeafIndex = nextLeaf ? nextLeaf.index : 0; + await options.cancelCallback(); // await in case cancelCallback returns a promise + return this._writeLeaf(leaf); + }, + }); + // Rewrite parent node: + tx.queue({ + name: 'rewrite parent node', + action: async () => { + return this._writeNode(leaf.parentNode); + // TODO: If node grew larger than allocated size, try rebuilding it. + }, + rollback: async () => { + // this is the last step, we don't need to rollback if we are running the tx sequentially. + // Because we run parallel, we need rollback code here: + return this._writeNode(oldParentNode); + }, + }); + const results = await tx.execute(true); // run parallel + // await this._testTree(); + return results; + } + catch (err) { + throw new DetailedError('split-leaf-failed', `Unable to split leaf: ${err.message}`, err); + } + } + // async _testTree() { + // // Test tree by looking up all entries individually + // let leaf = await this._getFirstLeaf(); + // const keys = leaf.entries.map(e => e.key); + // while (leaf.hasNext) { + // leaf = await leaf.getNext(); + // keys.push(...leaf.entries.map(e => e.key)); + // } + // console.warn(`TREE TEST: testing ${keys.length} keys`); + // // console.warn(keys); + // for (let i = 0; i < keys.length - 1; i++) { + // const key1 = keys[i], key2 = keys[i + 1]; + // assert(_isLess(key1, key2), `Key "${key1}" must be smaller than "${key2}"`); + // } + // for (let i = 0; i < keys.length; i++) { + // const key = keys[i]; + // leaf = await this._findLeaf(key); + // const entry = leaf?.entries.find(e => e.key === key) + // assert(entry, `Key "${key}" must be in leaf`); + // } + // console.warn(`TREE TEST: testing ext_data`); + // leaf = await this._getFirstLeaf(); + // while (leaf) { + // if (leaf.hasExtData) { + // const leafExtDataIndex = leaf.sourceIndex + leaf.length; + // const endIndex = leafExtDataIndex + leaf.extData.length - leaf.extData.freeBytes; + // const testEntries = leaf.entries.filter(entry => entry.extData); + // for (const entry of testEntries) { + // // if (!entry.extData.loaded) {} + // await entry.extData.loadHeader(); + // if (entry.extData.index + entry.extData.length > endIndex) { + // throw new Error(`TREE TEST FAILED: ext_block is larger than allowed (in ext_data free space that starts at index ${endIndex})`); + // } + // } + // try { + // await leaf.extData.load(); + // } + // catch (err) { + // throw new Error(`TREE TEST FAILED: could not load leaf extData. ext_data free space starts at index ${endIndex}`, err.message); + // } + // } + // leaf = leaf.hasNext ? await leaf.getNext() : null; + // } + // console.warn(`TREE TEST SUCCESSFUL`); + // } + async add(key, recordPointer, metadata) { + return this._threadSafe('exclusive', () => this._add(key, recordPointer, metadata)); + } + async _add(key, recordPointer, metadata) { + if (!this.info) { + await this._loadInfo(); + } + const err = _checkNewEntryArgs(key, recordPointer, this.info.metadataKeys, metadata); + if (err) { + throw err; + } + const entryValue = new BinaryBPlusTreeLeafEntryValue(recordPointer, metadata); + if (!this.id) { + throw new DetailedError('tree-id-not-set', 'To edit tree, set the id property to something unique for locking purposes'); + } + try { + const leaf = await this._findLeaf(key); + if (!this.info.hasLargePtrs) { + throw new DetailedError('small-ptrs-deprecated', 'small ptrs have deprecated, tree will have to be rebuilt'); + } + const entryIndex = leaf.entries.findIndex(entry => _isEqual(key, entry.key)); + let addNew = false; + if (this.info.isUnique) { + // Make sure key doesn't exist yet + if (entryIndex >= 0) { + throw new DetailedError('unique-key-violation', `Cannot add duplicate key "${key}": tree expects unique keys`); + } + addNew = true; + } + else { + if (entryIndex >= 0) { + const entry = leaf.entries[entryIndex]; + if (entry.extData) { + try { + return await entry.extData.addValue(recordPointer, metadata); + } + catch (err) { + // Something went wrong adding the value. ext_data_block is probably full + // and needs to grow + // console.log(`Leaf rebuild necessary - unable to add value to key "${key}": ${err.message}`); + if (err.code !== 'max-extdata-size-reached') { + throw err; + } + const rebuildOptions = { + growData: false, + growExtData: true, + applyChanges: (leaf) => { + const entry = leaf.entries.find(entry => _isEqual(entry.key, key)); //[entryIndex]; + entry.values.push(new BinaryBPlusTreeLeafEntryValue(recordPointer, metadata)); + }, + }; + return await this._rebuildLeaf(leaf, rebuildOptions); + } + } + entry.values.push(entryValue); + } + else { + addNew = true; + } + } + if (!addNew) { + try { + return await this._writeLeaf(leaf); + } + catch (err) { + // Leaf got too small? Try rebuilding it + const extDataError = DetailedError.hasErrorCode(err, 'max-extdata-size-reached'); //leaf.hasExtData && err.message.match(/ext_data/) !== null; + try { + return await this._rebuildLeaf(leaf, { + growData: !extDataError, + growExtData: extDataError, + rollbackOnFailure: false, // Disable original leaf rewriting on failure + }); + } + catch (err) { + throw new DetailedError('add-value-failed', `Can't add value to key '${key}': ${err.message}`, err); + } + } + } + // If we get here, we have to add a new leaf entry + const entry = new BinaryBPlusTreeLeafEntry(key, [entryValue]); + // Insert it + const insertBeforeIndex = leaf.entries.findIndex(entry => _isMore(entry.key, key)); + const isLastEntry = insertBeforeIndex === -1; + if (isLastEntry) { + leaf.entries.push(entry); + } + else { + leaf.entries.splice(insertBeforeIndex, 0, entry); + } + if (leaf.entries.length <= this.info.entriesPerNode) { + try { + return await this._writeLeaf(leaf); + } + catch (err) { + if (!DetailedError.hasErrorCode(err, 'max-leaf-size-reached')) { + throw err; + } + // Leaf had no space left, try rebuilding it + return await this._rebuildLeaf(leaf, { + growData: true, + growExtData: leaf.hasExtData, + rollbackOnFailure: false, // Don't try rewriting updated leaf on failure + }); + } + } + // If we get here, our leaf has too many entries + const undoAdd = () => { + const index = leaf.entries.indexOf(entry); + index >= 0 && leaf.entries.splice(index, 1); + }; + if (!leaf.parentNode) { + // No parent, so this is a 1 leaf "tree" + undoAdd(); + throw new DetailedError('slt-no-space-available', `Cannot add key "${key}", no space left in single leaf tree`); + } + // Split leaf + return await this._splitLeaf(leaf, { cancelCallback: undoAdd, keepEntries: isLastEntry ? this.info.entriesPerNode : 0 }); + } + catch (err) { + throw new DetailedError('add-key-failed', `Can't add key '${key}': ${err.message}`, err); + } + // .then(() => { + // // TEST the tree adjustments by getting the leaf with the added key, + // // and then previous and next leafs! + // console.warn(`TESTING leaf adjustment after adding "${key}". Remove code when all is well!`); + // return this._findLeaf(key); + // }) + // .then(leaf => { + // let promises = leaf.entries.map(entry => { + // if (entry.extData) { + // return entry.extData.loadValues(); + // } + // return null; + // }) + // .filter(p => p !== null); + // return Promise.all(promises); + // // return leaf.hasExtData && leaf.extData.load(); + // }); + // .then(leaf => { + // let prev = leaf.getPrevious ? leaf.getPrevious() : null; + // let next = leaf.getNext ? leaf.getNext() : null; + // return Promise.all([leaf, prev, next]); + // }) + // .then(results => { + // let leaf = results[0]; + // let prev = results[1]; + // let next = results[2]; + // }); + } + // /** + // * @param {BinaryBPlusTreeTransactionOperation[]} operations + // */ + // async process(operations) { + // return this._threadSafe('exclusive', () => this._process(operations)); + // } + async _process(operations) { + if (!this.info) { + await this._loadInfo(); + } + if (!this.info.isUnique) { + throw new DetailedError('non-unique-tree', 'DEV ERROR: process() should not be called on non-unique trees because of ext_data complexity, cannot handle that yet. Use old "transaction" logic instead'); + } + if (operations.length === 0) { + return; + } + operations.filter(op => op.type === 'add').forEach(({ key, recordPointer, metadata }) => { + const err = _checkNewEntryArgs(key, recordPointer, this.info.metadataKeys, metadata); // Fixed this.metadataKeys issue during TS port + if (err) { + throw err; + } + }); + operations.filter(op => op.type === 'update').forEach(({ key, newValue }) => { + const err = _checkNewEntryArgs(key, newValue.recordPointer, this.info.metadataKeys, newValue.metadata); // Fixed this.metadataKeys issue during TS port + if (err) { + throw err; + } + }); + if (!this.info.hasLargePtrs) { + throw new DetailedError('small-ptrs-deprecated', 'small ptrs have deprecated, tree will have to be rebuilt'); + } + let batchedOps = []; + // const debugRemoved = []; + // let debugThrownError; + try { + // Sort the entries + operations.sort((a, b) => _isLess(a.key, b.key) ? -1 : 1); + // Get first leaf to edit + let leaf = await this._findLeaf(operations[0].key); + let undo = []; + const saveLeaf = async () => { + // debugRemoved.forEach(r => { + // if (leaf.entries.find(e => e.key === r.key)) { + // debugger; + // } + // }); + if (leaf.entries.length > this.info.entriesPerNode) { + // Leaf too large to save, must split + const cancelCallback = () => undo.splice(0).reverse().forEach(fn => fn()); + const keepEntries = leaf.hasNext ? 0 : this.info.entriesPerNode; + // console.log('*process _splitLeaf'); + await this._splitLeaf(leaf, { cancelCallback, keepEntries }); + } + else if (leaf.entries.length > 0 || !leaf.parentNode) { + // Leaf has entries or is a single-leaf tree + try { + // console.log('*process _writeLeaf'); + await this._writeLeaf(leaf); + } + catch (err) { + // Leaf had no space left, try rebuilding it with more space + // console.log('*process _rebuildLeaf'); + await this._rebuildLeaf(leaf, { + growData: true, + growExtData: true, + rollbackOnFailure: false, // Don't try rewriting updated leaf on failure + }); + } + } + else if (leaf.parentNode.entries.length > 1) { + // Remove leaf + // console.log('*process _removeLeaf'); + await this._removeLeaf(leaf); + } + else { + // Parent node has only 1 entry, removing it would also make parent node empty... + // throw new DetailedError('leaf-empty', 'leaf is now empty and parent node has only 1 entry, tree will have to be rebuilt'); + // Write the empty leaf anyway, will be removed automatically upon a future tree rebuild. + await this._writeLeaf(leaf); + } + }; + while (operations.length > 0) { + const op = operations.shift(); + // tx.queue({ + // name: 'start', + // action() { operations.shift(); }, + // rollback() {operations.unshift(op); } + // }) + const { type, key, recordPointer, metadata, newValue, currentValue } = op; + // Should this entry be added to this leaf? + const applyToThisLeaf = (() => { + if (leaf.entries.length > this.info.entriesPerNode) { + return false; + } + // Check if the "roadsigns" in parent nodes will point to this leaf for the new key + const pointsThisDirection = (node) => { + if (node.parentEntry) { + // Parent node's entry has a less than connection to this node/leaf + return _isLess(key, node.parentEntry.key); + } + else if (node.parentNode) { + // Parent node's "greater than" pointer goes to this node/leaf. + if (!_isMoreOrEqual(key, node.parentNode.entries.slice(-1)[0].key)) { + return false; // Does this ever happen? + } + // Check resursively + return pointsThisDirection(node.parentNode); + } + else { + // There is no parent, this is the gtChild + if (!_isMoreOrEqual(key, node.entries.slice(-1)[0].key)) { + throw new Error('DEV ERROR: this tree is not right..'); + } + return true; + } + }; + return pointsThisDirection(leaf); + })(); + if (!applyToThisLeaf) { + // No. Save leaf edits and load a new one + // try { + await saveLeaf(); + // } + // catch (err) { + // failedOps.push(...batchedOps); + // } + // Load new leaf + batchedOps = []; + undo = []; + leaf = await this._findLeaf(key); + } + batchedOps.push(op); + // Make adjustment to leaf + const entryIndex = leaf.entries.findIndex(entry => _isEqual(key, entry.key)); + const entry = leaf.entries[entryIndex]; + if (type === 'remove') { + // Remove an entry + if (!entry) { + throw new DetailedError('key-not-found', `Cannot remove key "${key}" because it is not present in the tree`); + // continue; // Entry not in leaf, nothing changes + } + else { + // debugRemoved.push(entry); + leaf.entries.splice(entryIndex, 1); + undo.push(() => { + // console.log(`Undo remove ${entry.key}`); + leaf.entries.splice(entryIndex, 0, entry); + }); + // if (entryIndex === 0 && !leaf.parentEntry) { + // // Somehow the entry is not removed in this case. DEBUG! + // const checkEntry = leaf.entries.find(e => _isEqual(key, e.key)); + // debugger; + // } + } + } + else if (type === 'add') { + if (entry) { + throw new DetailedError('unique-key-violation', `Cannot add duplicate key "${key}": tree expects unique keys`); + } + else { + // Add new entry + const value = new BinaryBPlusTreeLeafEntryValue(recordPointer, metadata); + const entry = new BinaryBPlusTreeLeafEntry(key, [value]); + const insertBeforeIndex = leaf.entries.findIndex(entry => _isMore(entry.key, key)); + const isLastEntry = insertBeforeIndex === -1; + if (isLastEntry) { + leaf.entries.push(entry); + } + else { + leaf.entries.splice(insertBeforeIndex, 0, entry); + } + undo.push(() => leaf.entries.splice(leaf.entries.indexOf(entry), 1)); + } + } + else if (type === 'update') { + if (!entry) { + throw new DetailedError('key-not-found', `Cannot update key "${key}" because it is not present in the tree`); + } + else { + // const currentValue = entry.values[0]; + // const newValue = new BinaryBPlusTreeLeafEntryValue(recordPointer, metadata); + entry.values[0] = newValue; + undo.push(() => entry.values[0] = currentValue); + } + } + } + if (batchedOps.length > 0) { + await saveLeaf(); + } + // batchedOps = []; + } + catch (err) { + operations.push(...batchedOps); + // debugThrownError = err; + throw err; //new DetailedError('process-error', 'Could not process all requested operations', err); + } + // finally { + // // await this._testTree(); + // for (let removedEntry of debugRemoved) { + // const leaf = await this._findLeaf(removedEntry.key); + // if (leaf.entries.find(e => _isEqual(e.key, removedEntry.key))) { + // console.log(debugThrownError); + // debugger; + // } + // } + // } + } + async remove(key, recordPointer) { + return this._threadSafe('exclusive', () => this._remove(key, recordPointer)); + } + async _remove(key, recordPointer) { + // key = _normalizeKey(key); //if (_isIntString(key)) { key = parseInt(key); } + try { + const leaf = await this._findLeaf(key); + // This is the leaf the key should be in + if (!this.info.hasLargePtrs) { + throw new DetailedError('small-ptrs-deprecated', 'small ptrs have deprecated, tree will have to be rebuilt'); + } + const entryIndex = leaf.entries.findIndex(entry => _isEqual(key, entry.key)); + if (!~entryIndex) { + return; + } + if (this.info.isUnique || typeof recordPointer === 'undefined' || leaf.entries[entryIndex].totalValues === 1) { + leaf.entries.splice(entryIndex, 1); + } + else if (leaf.entries[entryIndex].extData) { + return leaf.entries[entryIndex].extData.removeValue(recordPointer); + } + else { + const valueIndex = leaf.entries[entryIndex].values.findIndex(val => _compareBinary(val.recordPointer, recordPointer)); + if (!~valueIndex) { + return; + } + leaf.entries[entryIndex].values.splice(valueIndex, 1); + } + if (leaf.parentNode && leaf.entries.length === 0) { + // This is not a single leaf tree, and the leaf is now empty. Remove it + if (leaf.parentNode.entries.length === 1) { + // Parent node has only 1 entry, removing it would also make parent node empty... + throw new DetailedError('leaf-empty', 'leaf is now empty and parent node has only 1 entry, tree will have to be rebuilt'); + } + return await this._removeLeaf(leaf); + } + return await this._writeLeaf(leaf); + } + catch (err) { + throw new DetailedError('remove-key-failed', `Can't remove key '${key}': ${err.message}`, err); + } + } + /** + * Removes an empty leaf + */ + async _removeLeaf(leaf) { + try { + assert(leaf.parentNode && leaf.parentNode.entries.length >= 2, 'Leaf to remove must have a parent node with at least 2 entries'); // TODO: implement _removeNode + assert(leaf.entries.length === 0, 'Leaf to remove must be empty'); + const freedBytes = leaf.length + leaf.extData.length; + // Start transaction + const tx = new TX(); + // Adjust previous leaf's next_leaf_ptr: (point it to leaf's next leaf) + if (leaf.hasPrevious) { + const prevLeaf = { + nextPointerIndex: leaf.prevLeafIndex + BinaryBPlusTreeLeaf.nextLeafPtrIndex, + oldOffset: BinaryBPlusTreeLeaf.getNextLeafOffset(leaf.prevLeafIndex, leaf.index), + newOffset: BinaryBPlusTreeLeaf.getNextLeafOffset(leaf.prevLeafIndex, leaf.nextLeafIndex), + }; + tx.queue({ + name: 'prev leaf next_leaf_ptr', + action: async () => { + const bytes = writeSignedOffset([], 0, prevLeaf.newOffset, true); + return this._writeFn(bytes, prevLeaf.nextPointerIndex); + }, + rollback: async () => { + const bytes = writeSignedOffset([], 0, prevLeaf.oldOffset, true); + return this._writeFn(bytes, prevLeaf.nextPointerIndex); + }, + }); + } + // Adjust next leaf's prev_leaf_ptr: (point it to leaf's previous leaf) + if (leaf.hasNext) { + const nextLeaf = { + prevPointerIndex: leaf.nextLeafIndex + BinaryBPlusTreeLeaf.prevLeafPtrIndex, + oldOffset: BinaryBPlusTreeLeaf.getPrevLeafOffset(leaf.nextLeafIndex, leaf.index), + newOffset: BinaryBPlusTreeLeaf.getPrevLeafOffset(leaf.nextLeafIndex, leaf.prevLeafIndex), + }; + tx.queue({ + name: 'next leaf prev_leaf_ptr', + action: async () => { + const bytes = writeSignedOffset([], 0, nextLeaf.newOffset, true); + return this._writeFn(bytes, nextLeaf.prevPointerIndex); + }, + rollback: async () => { + const bytes = writeSignedOffset([], 0, nextLeaf.oldOffset, true); + return this._writeFn(bytes, nextLeaf.prevPointerIndex); + }, + }); + } + // Rewrite parent node + const parentNodeInfo = { + entries: leaf.parentNode.entries.slice(), + gtChildIndex: leaf.parentNode.gtChildIndex, + }; + // Remove parent node entry or change gtChildOffset + if (leaf.parentEntry) { + const removeEntryIndex = leaf.parentNode.entries.indexOf(leaf.parentEntry); + leaf.parentNode.entries.splice(removeEntryIndex, 1); + } + else { + // Change gtChildOffset to last entry's offset + const lastEntry = leaf.parentNode.entries.splice(-1)[0]; + leaf.parentNode.gtChildIndex = lastEntry.ltChildIndex; + } + tx.queue({ + name: 'parent node', + action: async () => { + return this._writeNode(leaf.parentNode); + }, + rollback: async () => { + // Set the target leaf indexes back to the originals + leaf.parentNode.entries = parentNodeInfo.entries; + leaf.parentNode.gtChildIndex = parentNodeInfo.gtChildIndex; + return this._writeNode(leaf.parentNode); + }, + }); + await tx.execute(true); + await this._registerFreeSpace(leaf.index, freedBytes); + // await this._testTree(); + } + catch (err) { + throw new DetailedError('remove-leaf-failed', `Failed to remove leaf: ${err.message}`, err); + } + } + async update(key, newRecordPointer, currentRecordPointer, newMetadata) { + return this._threadSafe('exclusive', () => this._update(key, newRecordPointer, currentRecordPointer, newMetadata)); + } + async _update(key, newRecordPointer, currentRecordPointer, newMetadata) { + try { + // key = _normalizeKey(key); // if (_isIntString(key)) { key = parseInt(key); } + if (currentRecordPointer === null) { + currentRecordPointer = undefined; + } + const newEntryValue = new BPlusTreeLeafEntryValue(newRecordPointer, newMetadata); + const leaf = await this._findLeaf(key); + // This is the leaf the key should be in + const entryIndex = leaf.entries.findIndex(entry => _isEqual(entry.key, key)); + if (!~entryIndex) { + throw new DetailedError('key-not-found', `Key to update ("${key}") not found`); + } + const entry = leaf.entries[entryIndex]; + if (this.info.isUnique) { + entry.values = [newEntryValue]; + } + else if (typeof currentRecordPointer === 'undefined') { + throw new DetailedError('current-value-not-given', 'To update a non-unique key, the current value must be passed as parameter'); + } + else { + const valueIndex = entry.values.findIndex(val => _compareBinary(val.recordPointer, currentRecordPointer)); + if (!~valueIndex) { + throw new DetailedError('key-value-pair-not-found', `Key/value combination to update not found (key: "${key}") `); + } + entry.values[valueIndex] = newEntryValue; + } + return await this._writeLeaf(leaf); + } + catch (err) { + throw new DetailedError('update-value-failed', `Could not update value for key '${key}': ${err.message}`, err); + } + } + /** + * Executes all operations until execution fails: remaining operations are left in passed array + */ + async transaction(operations) { + return this._threadSafe('exclusive', () => this._transaction(operations)); + } + async _transaction(operations) { + if (!this.info) { + // Populate info for this tree + const reader = await this._getReader(); + if (typeof reader.close === 'function') { + reader.close(); + } + } + if (this.info.isUnique) { + return this._process(operations); + } + while (operations.length > 0) { + const op = operations.shift(); + try { + switch (op.type) { + case 'add': { + await this._add(op.key, op.recordPointer, op.metadata); + break; + } + case 'remove': { + await this._remove(op.key, op.recordPointer); + break; + } + case 'update': { + await this._update(op.key, op.newValue.recordPointer, op.currentValue.recordPointer, op.newValue.metadata); + break; + } + } + } + catch (err) { + operations.unshift(op); + throw err; + } + } + } + async toTree(fillFactor = 100) { + const builder = await this.toTreeBuilder(fillFactor); + return builder.create(); + } + /** + * @returns Promise that resolves with a BPlusTreeBuilder + */ + async toTreeBuilder(fillFactor) { + return this._threadSafe('shared', () => this._toTreeBuilder(fillFactor)); + } + /** + * @returns Promise that resolves with a BPlusTreeBuilder + */ + async _toTreeBuilder(fillFactor) { + const treeBuilder = new BPlusTreeBuilder(this.info.isUnique, fillFactor, this.info.metadataKeys); + let leaf = await this._getFirstLeaf(); + while (leaf) { + leaf.entries.forEach(entry => { + entry.values.forEach(entryValue => treeBuilder.add(entry.key, entryValue.value, entryValue.metadata)); + }); + leaf = leaf.getNext ? await leaf.getNext() : null; + } + return treeBuilder; + } + async rebuild(writer, options) { + return this._threadSafe('exclusive', () => this._rebuild(writer, options)); + } + async _rebuild(writer, options = { + allocatedBytes: 0, + fillFactor: 95, + keepFreeSpace: true, + increaseMaxEntries: true, + reserveSpaceForNewEntries: 0, + }) { + const perf = {}; + const mark = (name) => { + const keys = name.split('.'); + const key = keys.pop(); + const target = keys.reduce((t, key) => key in t ? t[key] : (t[key] = {}), perf); + target[key] = Date.now(); // performance.mark(name); + }; + const measure = (mark1, mark2) => { + const getMark = (name) => { + const keys = name.split('.'); + const key = keys.pop(); + const target = keys.reduce((t, key) => key in t ? t[key] : (t[key] = {}), perf); + return target[key]; + }; + return getMark(mark2) - getMark(mark1); + }; + mark('start'); + if (!(writer instanceof BinaryWriter)) { + throw new DetailedError('invalid-argument', 'writer argument must be an instance of BinaryWriter'); + } + if (!this.info) { + // Hasn't been initialized yet. + await this._getReader(); // _getReader populates the info + } + const originalChunkSize = this._chunkSize; + // this._chunkSize = 1024 * 1024; // Read 1MB at a time to speed up IO + options = options || {}; + options.fillFactor = options.fillFactor || this.info.fillFactor || 95; + options.keepFreeSpace = options.keepFreeSpace !== false; + options.increaseMaxEntries = options.increaseMaxEntries !== false; + options.treeStatistics = options.treeStatistics || { byteLength: 0, totalEntries: 0, totalValues: 0, totalLeafs: 0, depth: 0, entriesPerNode: 0 }; + if (typeof options.allocatedBytes === 'number') { + options.treeStatistics.byteLength = options.allocatedBytes; + } + let maxEntriesPerNode = this.info.entriesPerNode; + if (options.increaseMaxEntries && maxEntriesPerNode < 255) { + // Increase nr of entries per node with 10% + maxEntriesPerNode = Math.min(255, Math.round(maxEntriesPerNode * 1.1)); + } + options.treeStatistics.entriesPerNode = maxEntriesPerNode; + // let entriesPerLeaf = Math.round(maxEntriesPerNode * (options.fillFactor / 100)); + // let entriesPerNode = entriesPerLeaf; + // How many entries does the tree have in total? + // TODO: store this in this.info.totalEntries (and in binary file) + const leafStats = { + // debugEntries: [], + totalEntries: 0, + totalValues: 0, + totalEntryBytes: 0, + totalKeyBytes: 0, + readLeafs: 0, + readEntries: 0, + writtenLeafs: 0, + writtenEntries: 0, + get averageEntryLength() { + return Math.ceil(this.totalEntryBytes / this.totalEntries); + }, + get averageKeyLength() { + return Math.ceil(this.totalKeyBytes / this.totalEntries); + }, + }; + const getKeySize = (key) => { + if (typeof key === 'number' || key instanceof Date) { + return 4; + } + if (typeof key === 'string') { + return key.length; + } + if (typeof key === 'boolean') { + return 1; + } + if (typeof key === 'bigint') { + // bigint has variable length + return bigintToBytes(key).length; + } + }; + // let leafsSeen = 0; + // console.log(`[${Date.toString()}] Starting tree rebuild`); + try { + const getLeafStartKeys = async (entriesPerLeaf) => { + mark('getLeafStartKeys.start'); + const leafStartKeys = []; + let entriesFromLastLeafStart = 0; + let leaf = await this._getFirstLeaf(); + let loop = 1; + while (leaf) { + mark(`getLeafStartKeys.loop${loop++}`); + // leafsSeen++; + // console.log(`Processing leaf with ${leaf.entries.length} entries, total=${totalEntries}`); + // leafStats.debugEntries.push(...leaf.entries); + if (leaf.entries.length === 0) { + // For leafs that were previously left empty (are now removed, see issue #5) + leaf = leaf.getNext ? await leaf.getNext() : null; + continue; + } + leafStats.totalEntries += leaf.entries.length; + leafStats.totalValues += leaf.entries.reduce((total, entry) => total + entry.totalValues, 0); + leafStats.totalEntryBytes += leaf.length; + leafStats.totalKeyBytes += leaf.entries.reduce((total, entry) => total + getKeySize(entry.key), 0); + if (leafStartKeys.length === 0 || entriesFromLastLeafStart === entriesPerLeaf) { + // This is the first leaf being processed, or last leaf entries filled whole new leaf + leafStartKeys.push(leaf.entries[0].key); + entriesFromLastLeafStart = 0; + } + if (entriesFromLastLeafStart + leaf.entries.length <= entriesPerLeaf) { + // All entries fit into current leaf + entriesFromLastLeafStart += leaf.entries.length; + } + else { + // some of the entries fit in current leaf + let cutIndex = entriesPerLeaf - entriesFromLastLeafStart; + // new leaf starts at cutIndex + let firstLeafEntry = leaf.entries[cutIndex]; + leafStartKeys.push(firstLeafEntry.key); + // How many entries for the new leaf do we have already? + entriesFromLastLeafStart = leaf.entries.length - cutIndex; + while (entriesFromLastLeafStart > entriesPerLeaf) { + // Too many for 1 leaf + cutIndex += entriesPerLeaf; + firstLeafEntry = leaf.entries[cutIndex]; + leafStartKeys.push(firstLeafEntry.key); + entriesFromLastLeafStart = leaf.entries.length - cutIndex; + } + } + // console.log(`Processed ${leafsSeen} leafs in source tree`); + leaf = leaf.getNext ? await leaf.getNext() : null; + } + mark('getLeafStartKeys.end'); + return leafStartKeys; + }; + let lastLeaf = null; + let getEntryCalls = 1; + /** + * Gets next leaf's entries + * @param n unused + */ + const getEntries = async (n) => { + if (getEntryCalls === 1) { + mark('getEntries.first'); + } + mark(`getEntries.start${getEntryCalls}`); + try { + const leaf = lastLeaf + ? lastLeaf.getNext ? await lastLeaf.getNext() : null + : await this._getFirstLeaf(); + if (leaf) { + // If leaf has extData, load it first + if (leaf.hasExtData && !leaf.extData.loaded) { + await leaf.extData.load(); + } + lastLeaf = leaf; + leafStats.readLeafs++; + leafStats.readEntries += leaf.entries.length; + if (leaf.entries.length === 0 && leaf.getNext) { + // For leafs that were previously left empty (are now removed, see issue #5) + return getEntries(n); // processes next leaf + } + return leaf.entries; + } + else { + return []; + } + } + finally { + mark(`getEntries.end${getEntryCalls++}`); + mark('getEntries.last'); // overwrites 'last' each loop + } + }; + mark('tree.createStart'); + await BinaryBPlusTree.create({ + getLeafStartKeys, + getEntries, + writer, + treeStatistics: options.treeStatistics, + fillFactor: options.fillFactor, + maxEntriesPerNode, + isUnique: this.info.isUnique, + metadataKeys: this.info.metadataKeys, + allocatedBytes: options.allocatedBytes, + keepFreeSpace: options.keepFreeSpace, + reserveSpaceForNewEntries: options.reserveSpaceForNewEntries, + }); + mark('tree.createEnd'); + options.treeStatistics.totalLeafs = leafStats.writtenLeafs; + options.treeStatistics.totalEntries = leafStats.totalEntries; + options.treeStatistics.totalValues = leafStats.totalValues; + this._chunkSize = originalChunkSize; // Reset chunk size to original + // await this._testTree(); + } + catch (err) { + throw new DetailedError('tree_rebuild_error', 'Failed to rebuild tree', err); + } + finally { + mark('end'); + // if (perf) { + // // inspect perf here + // console.log(`[perf] tree rebuild took ${measure('start', 'end')}ms`); + // console.log(`[perf] getLeafStartKeys: ${measure('getLeafStartKeys.start', 'getLeafStartKeys.end')}ms`); + // console.log(`[perf] getEntries: ${measure('getEntries.first', 'getEntries.last')}ms`); + // console.log(`[perf] tree.create: ${measure('tree.createStart', 'tree.createEnd')}ms`); + // } + } + } + static async create(options) { + const writer = options.writer; + if (typeof options.maxEntriesPerNode !== 'number') { + options.maxEntriesPerNode = 255; + } + if (typeof options.fillFactor !== 'number') { + options.fillFactor = 100; + } + const entriesPerLeaf = Math.round(options.maxEntriesPerNode * (options.fillFactor / 100)); + const entriesPerNode = entriesPerLeaf; + try { + const leafStartKeys = await options.getLeafStartKeys(entriesPerLeaf); + // Now we know how many leafs we will be building and what their first key values are + const createLeafs = leafStartKeys.length; + options.treeStatistics.totalLeafs = createLeafs; + let childLevelNodes = leafStartKeys; + const levels = []; + while (childLevelNodes.length > 1) { + // Create another level + childLevelNodes = childLevelNodes.reduce((nodes, child, index, arr) => { + const entriesLeft = arr.length - index; + let currentNode = nodes[nodes.length - 1]; + const isLast = index === arr.length - 1 // Literally the last child + || currentNode.entries.length === entriesPerNode // gt connection of this node + || (entriesLeft === 3 && currentNode.entries.length + entriesLeft > entriesPerNode); // early chop off gt connection to save entries for next node + if (isLast) { + // gt connection + const key = typeof child === 'object' && 'gtMaxKey' in child + ? child.gtMaxKey // child is node + : arr[index + 1]; // child is leaf start key + currentNode.gtMaxKey = key; + currentNode.gtChildIndex = index; + if (index < arr.length - 1) { + // More to come.. + currentNode = { entries: [], gtChildIndex: -1, gtMaxKey: null }; + nodes.push(currentNode); + } + // connections = 0; + } + else { + // lt connection + const key = typeof child === 'object' && 'gtMaxKey' in child + ? child.gtMaxKey // child is node + : arr[index + 1]; // child is leaf start key + currentNode.entries.push({ key, ltChildIndex: index }); + // connections++; + } + return nodes; + }, [{ entries: [], gtChildIndex: -1, gtMaxKey: null }]); + levels.push(childLevelNodes); + } + options.treeStatistics.depth = levels.length; + options.treeStatistics.writtenLeafs = 0; + options.treeStatistics.writtenEntries = 0; + // Now that we have the keys for each node level, we can start building the actual tree + // Do this efficiently by reusing the level keys array, reducing them in size as we go + // Write in this order: + // 1) header + // 2) all nodes, + // 3) all leafs, + // 4) all nodes again with the right child pointers (or just the pointers), + // 5) overwrite header with real data + const builder = new BinaryBPlusTreeBuilder({ + uniqueKeys: options.isUnique, + byteLength: options.allocatedBytes, + maxEntriesPerNode: options.maxEntriesPerNode, + freeBytes: options.keepFreeSpace ? 1 : 0, + metadataKeys: options.metadataKeys, + smallLeafs: WRITE_SMALL_LEAFS, + fillFactor: options.fillFactor, + }); + // Create header + let header = builder.getHeader(); + let index = header.length; + // const rootNodeIndex = index; + const leafIndexes = []; + let largestLeafLength = 0; + await writer.append(header); + // Write all node levels for the first time + // (lt/gt child index pointers won't make sense yet) + let l = levels.length; + while (l > 0) { + l--; + const nodes = levels[l]; + const writes = []; + nodes.forEach(node => { + node.index = index; //writer.length; + const bytes = builder.createNode({ + index: node.index, + entries: node.entries.map(entry => ({ key: entry.key, ltIndex: 0 })), + gtIndex: 0, + }, { addFreeSpace: options.keepFreeSpace, allowMissingChildIndexes: true }); + node.byteLength = bytes.length; + index += bytes.length; + const p = writer.append(bytes); + writes.push(p); + }); + await Promise.all(writes); + } + // Write all leafs + const newLeafEntries = []; + let prevIndex = 0; + let currentLeafIndex = 0; + let totalWrittenEntries = 0; + const writeLeaf = async (entries) => { + let emptyLeaf = false; + if (entries.length === 0 && leafStartKeys.length === 0) { + // Write an empty leaf + emptyLeaf = true; + } + // console.log(`Writing leaf with ${entries.length} entries at index ${index}, keys range: ["${entries[0].key}", "${entries[entries.length-1].key}"]`) + // assert(entries.every((entry, index, arr) => index === 0 || _isMoreOrEqual(entry.key, arr[index-1].key)), 'Leaf entries are not sorted ok'); + const i = leafIndexes.length; + // assert(emptyLeaf || _isEqual(leafStartKeys[i], entries[0].key), `first entry for leaf has wrong key, must be ${leafStartKeys[i]}!`); + leafIndexes.push(index); + const isLastLeaf = emptyLeaf || leafIndexes.length === leafStartKeys.length; + const newLeaf = builder.createLeaf({ index, prevIndex, nextIndex: isLastLeaf ? 0 : 'adjacent', entries }, { addFreeSpace: options.keepFreeSpace }); + largestLeafLength = Math.max(largestLeafLength, newLeaf.length); + prevIndex = index; + index += newLeaf.length; + totalWrittenEntries += entries.length; + return writer.append(newLeaf); + }; + const flush = async (flushAll = false) => { + const cutEntryKey = leafStartKeys[currentLeafIndex + 1]; + let entries; + if (typeof cutEntryKey === 'undefined') { + // Last batch + if (flushAll) { + // assert(newLeafEntries.length <= entriesPerLeaf, 'check logic'); + entries = newLeafEntries.splice(0); + } + else { + return; // Wait for remaining entries + } + } + else { + const cutEntryIndex = newLeafEntries.findIndex(entry => _isEqual(entry.key, cutEntryKey)); + if (cutEntryIndex === -1) { + // Not enough entries yet + // assert(!flushAll, 'check logic'); + // assert(newLeafEntries.length <= entriesPerLeaf, 'check logic!'); + return; + } + entries = newLeafEntries.splice(0, cutEntryIndex); + } + options.treeStatistics.writtenLeafs++; + options.treeStatistics.writtenEntries += entries.length; + currentLeafIndex++; + await writeLeaf(entries); + // Write more? + if (newLeafEntries.length >= entriesPerLeaf || (flushAll && newLeafEntries.length > 0)) { + await flush(flushAll); + } + }; + const processEntries = async (entries) => { + if (entries.length === 0) { + return flush(true); // done! + } + // options.treeStatistics.readEntries += entries.length; + // assert(entries.every((entry, index, arr) => index === 0 || _isMoreOrEqual(entry.key, arr[index-1].key)), 'Leaf entries are not sorted ok'); + // assert(newLeafEntries.length === 0 || _isMore(entries[0].key, newLeafEntries[newLeafEntries.length-1].key), 'adding entries will corrupt sort order'); + newLeafEntries.push(...entries); + const writePromise = flush(false); + const readNextPromise = options.getEntries(options.maxEntriesPerNode); + const [moreEntries] = await Promise.all([readNextPromise, writePromise]); + await processEntries(moreEntries); + }; + const entries = await options.getEntries(options.maxEntriesPerNode); + await processEntries(entries); + // .then(() => { + // // // DEbug tree writing + // // let debugTree = levels.map(nodes => nodes.slice()); // copy + // // debugTree.forEach((nodes, levelIndex) => { + // // debugTree[levelIndex] = nodes.map(node => { + // // return { + // // node, + // // gtChild: levelIndex === 0 + // // ? leafStartKeys[node.gtChildIndex] + // // : debugTree[levelIndex-1][node.gtChildIndex], + // // entries: node.entries.map(entry => { + // // return { + // // key: entry.key, + // // ltChild: levelIndex === 0 + // // ? leafStartKeys[entry.ltChildIndex] + // // : debugTree[levelIndex-1][entry.ltChildIndex] + // // }; + // // }) + // // }; + // // }); + // // }); + // // debugTree.reverse(); // Now top-down + // // console.error(debugTree); + // // debugTree.forEach((nodes, levelIndex) => { + // // let allEntries = nodes.map(node => `[${node.entries.map(entry => entry.key).join(',')}]`).join(' | ') + // // console.error(`node level ${levelIndex}: ${allEntries}`); + // // }); + // // console.error(`leafs: [${leafStartKeys.join(`..] | [`)}]`); + // }) + // Now adjust the header data & write free bytes + let byteLength = index; + let freeBytes = 0; + if (options.allocatedBytes > 0) { + freeBytes = options.allocatedBytes - byteLength; + byteLength = options.allocatedBytes; + } + else { + // Use 10% free space, or the largest leaf length + 10%, or requested free leaf space, whichever is the largest + freeBytes = Math.max(Math.ceil(byteLength * 0.1), Math.ceil(largestLeafLength * 1.1), Math.ceil(Math.ceil((options.reserveSpaceForNewEntries || 0) / entriesPerLeaf) * largestLeafLength * 1.1)); + // console.log(`new tree gets ${freeBytes} free bytes`); + byteLength += freeBytes; + } + // Rebuild header + builder.byteLength = byteLength; // - header.length; + builder.freeBytes = freeBytes; + header = builder.getHeader(); + options.treeStatistics.byteLength = byteLength; + options.treeStatistics.freeBytes = freeBytes; + // Append free space bytes + const bytesPerWrite = 1024 * 100; // 100KB per write seems fair? + const writeBatches = Math.ceil(builder.freeBytes / bytesPerWrite); + for (let i = 0; i < writeBatches; i++) { + const length = i + 1 < writeBatches + ? bytesPerWrite + : builder.freeBytes % bytesPerWrite; + const zeroes = new Uint8Array(length); + await writer.append(zeroes); + } + // Done appending data, close stream + await writer.end(); + // Overwrite header + const writePromises = [ + writer.write(header, 0), + ]; + // Assign all nodes' child indexes to the real file indexes + levels.forEach((nodes, index) => { + nodes.forEach(node => { + if (index === 0) { + // first level references leafs + node.gtChildIndex = leafIndexes[node.gtChildIndex]; + node.entries.forEach(entry => { + entry.ltChildIndex = leafIndexes[entry.ltChildIndex]; + }); + } + else { + // use node index on next (lower) level + node.gtChildIndex = levels[index - 1][node.gtChildIndex].index; + node.entries.forEach(entry => { + entry.ltChildIndex = levels[index - 1][entry.ltChildIndex].index; + }); + } + // Regenerate bytes + const bytes = builder.createNode({ + index: node.index, + entries: node.entries.map(entry => ({ key: entry.key, ltIndex: entry.ltChildIndex })), + gtIndex: node.gtChildIndex, + }, { addFreeSpace: options.keepFreeSpace, maxLength: node.byteLength }); + // And overwrite them in the file + const p = writer.write(bytes, node.index); + writePromises.push(p); + }); + }); + await Promise.all(writePromises); + } + catch (err) { + throw new DetailedError('tree_create_error', 'Failed to create BinaryBlusTree', err); + } + } + /** + * Creates a binary tree from a stream of entries. + * An entry stream must be a binary data stream containing only leaf entries + * a leaf entry can be created using BinaryBPlusTree.createStreamEntry(key, values) + */ + static createFromEntryStream(reader, writer, options) { + // Steps: + // 1 - loop through all entries to calculate leaf start keys + // 2 - create nodes + // 3 - create leafs + // const entriesPerLeaf = Math.round(options.maxEntriesPerNode * (options.fillFactor / 100)); + const getLeafStartKeys = async (entriesPerLeaf) => { + options.treeStatistics.totalEntries = 0; + await reader.init(); + const leafStartKeys = []; + while (true) { + options.treeStatistics.totalEntries++; + const entryIndex = reader.sourceIndex; + try { + const entryLength = await reader.getUint32(); + if (options.treeStatistics.totalEntries % entriesPerLeaf === 1) { + const key = await reader.getValue(); + // console.log(key); + leafStartKeys.push(key); + await reader.go(entryIndex + entryLength); + } + else { + // skip reading this entry's key + await reader.go(entryIndex + entryLength); + } + } + catch (err) { + if (err.code === 'EOF') { + break; + } + throw err; + } + } + await reader.go(0); // Reset + return leafStartKeys; + }; + const getEntries = async (n) => { + // read n entries + const entries = []; + reader.chunkSize = 1024 * 1024; // 1MB chunks + while (true) { + try { + // read entry_length: + const entryLength = await reader.getUint32(); + const buffer = await reader.get(entryLength - 4); // -4 because entry_length is 4 bytes + // read key: + const k = BinaryReader.readValue(buffer, 0); + const entry = new BinaryBPlusTreeLeafEntry(k.value, []); + let index = k.byteLength; + // read values_length + const totalValues = BinaryReader.readUint32(buffer, index); + index += 4; + for (let i = 0; i < totalValues; i++) { + // read value_length + const valueLength = BinaryReader.readUint32(buffer, index); + index += 4; + const val = buffer.slice(index, index + valueLength); + index += valueLength; + // val contains rp_length, rp_data, metadata + const rpLength = val[0]; // rp_length + const recordPointer = val.slice(1, 1 + rpLength); // rp_data + // metadata: + let valIndex = 1 + rpLength; + const metadata = {}; + for (let j = 0; j < options.metadataKeys.length; j++) { + const mdKey = options.metadataKeys[j]; + const mdValue = BinaryReader.readValue(val, valIndex); + metadata[mdKey] = mdValue.value; + valIndex += mdValue.byteLength; + } + const value = new BinaryBPlusTreeLeafEntryValue(recordPointer, metadata); + entry.values.push(value); + } + entries.push(entry); + if (entries.length >= n) { + break; + } + } + catch (err) { + // EOF? + if (err.code === 'EOF') { + break; + } + throw err; + } + } + return entries; + }; + return BinaryBPlusTree.create({ + getLeafStartKeys, + getEntries, + writer, + treeStatistics: options.treeStatistics, + fillFactor: options.fillFactor, + allocatedBytes: options.allocatedBytes, + isUnique: options.isUnique, + keepFreeSpace: options.keepFreeSpace, + maxEntriesPerNode: options.maxEntriesPerNode, + metadataKeys: options.metadataKeys, + }); + } +} +BinaryBPlusTree.EntryValue = BinaryBPlusTreeLeafEntryValue; +BinaryBPlusTree.TransactionOperation = BinaryBPlusTreeTransactionOperation; +//# sourceMappingURL=binary-tree.js.map \ No newline at end of file diff --git a/dist/esm/btree/binary-tree.js.map b/dist/esm/btree/binary-tree.js.map new file mode 100644 index 0000000..aa61e51 --- /dev/null +++ b/dist/esm/btree/binary-tree.js.map @@ -0,0 +1 @@ +{"version":3,"file":"binary-tree.js","sourceRoot":"","sources":["../../../src/btree/binary-tree.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/btree/binary-writer.js b/dist/esm/btree/binary-writer.js new file mode 100644 index 0000000..e81eee8 --- /dev/null +++ b/dist/esm/btree/binary-writer.js @@ -0,0 +1,180 @@ +import { writeByteLength, writeSignedNumber } from '../binary.js'; +import { BinaryBPlusTreeBuilder } from './binary-tree-builder.js'; +import { Utils } from 'acebase-core'; +const { numberToBytes, bytesToNumber } = Utils; +export class BinaryWriter { + constructor(stream, writeFn) { + this._stream = stream; + this._write = writeFn; + this._written = 0; + } + static forArray(bytes) { + let bytesWritten = 0; + const stream = { + get bytesWritten() { + return bytesWritten; + }, + write(data) { + for (let i = 0; i < data.byteLength; i++) { + bytes.push(data[i]); + } + bytesWritten += data.byteLength; + return true; // let caller know its ok to continue writing + }, + end(callback) { + callback(); + return this; + }, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + once(event, callback) { + if (event === 'drain') { + callback(); + } + return this; + }, + }; + const writer = new BinaryWriter(stream, async (data, position) => { + for (let i = bytes.length; i < position; i++) { + bytes[i] = 0; // prevent "undefined" bytes when writing to a position greater than current array length + } + for (let i = 0; i < data.byteLength; i++) { + bytes[position + i] = data[i]; + } + }); + return writer; + } + static forUint8ArrayBuilder(builder) { + let bytesWritten = 0; + const stream = { + get bytesWritten() { + return bytesWritten; + }, + write(data) { + builder.append(data); + bytesWritten += data.byteLength; + return true; // let caller know its ok to continue writing + }, + end(callback) { + callback(); + return this; + }, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + once(event, callback) { + if (event === 'drain') { + callback(); + } + return this; + }, + }; + const writer = new BinaryWriter(stream, async (data, position) => { + builder.write(data, position); + }); + return writer; + } + static forFunction(writeFn) { + const maxSimultaniousWrites = 50; + let currentPosition = 0; + let bytesWritten = 0; + let pendingWrites = 0; + const drainCallbacks = []; + let endCallback = null; + let ended = false; + const stream = { + get bytesWritten() { + return bytesWritten; + }, + write(data) { + console.assert(!ended, 'streaming was ended already!'); + if (pendingWrites === maxSimultaniousWrites) { + console.warn('Warning: you should wait for "drain" event before writing new data!'); + } + // console.assert(_pendingWrites < _maxSimultaniousWrites, 'Wait for "drain" event before writing new data!'); + pendingWrites++; + const success = () => { + bytesWritten += data.byteLength; + pendingWrites--; + if (ended && pendingWrites === 0) { + endCallback(); + } + const drainCallback = drainCallbacks.shift(); + drainCallback && drainCallback(); + }; + const fail = (err) => { + console.error(`Failed to write to stream: ${err.message}`); + success(); + }; + writeFn(data, currentPosition) + .then(success) + .catch(fail); + currentPosition += data.byteLength; + const ok = pendingWrites < maxSimultaniousWrites; + return ok; // let caller know if its ok to continue writing + }, + end(callback) { + if (ended) { + throw new Error('end can only be called once'); + } + ended = true; + endCallback = callback; + if (pendingWrites === 0) { + callback(); + } + return this; + }, + once(event, callback) { + console.assert(event === 'drain', 'Custom stream can only handle "drain" event'); + drainCallbacks.push(callback); + return this; + }, + }; + const writer = new BinaryWriter(stream, (data, position) => { + return writeFn(data, position); + }); + return writer; + } + get length() { return this._written; } + get queued() { return this._written - this._stream.bytesWritten; } + append(data) { + const buffer = data instanceof Array + ? Uint8Array.from(data) + : data; + return new Promise(resolve => { + const ok = this._stream.write(buffer); + this._written += buffer.byteLength; + if (!ok) { + this._stream.once('drain', resolve); + } + else { + resolve(); + } + }); + } + write(data, position) { + const buffer = data instanceof Array + ? Uint8Array.from(data) + : data; + return this._write(buffer, position); + } + end() { + return new Promise(resolve => { + this._stream.end(resolve); + // writer.stream.on('finish', resolve); + }); + } + static getBytes(value) { + return BinaryBPlusTreeBuilder.getKeyBytes(value); + } + static numberToBytes(number) { + return numberToBytes(number); + } + static bytesToNumber(bytes) { + return bytesToNumber(bytes); + } + static writeUint32(number, bytes, index) { + return writeByteLength(bytes, index, number); + } + static writeInt32(signedNumber, bytes, index) { + return writeSignedNumber(bytes, index, signedNumber); + } +} +//# sourceMappingURL=binary-writer.js.map \ No newline at end of file diff --git a/dist/esm/btree/binary-writer.js.map b/dist/esm/btree/binary-writer.js.map new file mode 100644 index 0000000..2d3323e --- /dev/null +++ b/dist/esm/btree/binary-writer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"binary-writer.js","sourceRoot":"","sources":["../../../src/btree/binary-writer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/btree/config.js b/dist/esm/btree/config.js new file mode 100644 index 0000000..e433d89 --- /dev/null +++ b/dist/esm/btree/config.js @@ -0,0 +1,4 @@ +export const WRITE_SMALL_LEAFS = true; +export const MAX_SMALL_LEAF_VALUE_LENGTH = 127 - 4; // -4 because value_list_length is now included in data length +export const MAX_LEAF_ENTRY_VALUES = Math.pow(2, 32) - 1; +//# sourceMappingURL=config.js.map \ No newline at end of file diff --git a/dist/esm/btree/config.js.map b/dist/esm/btree/config.js.map new file mode 100644 index 0000000..3a944df --- /dev/null +++ b/dist/esm/btree/config.js.map @@ -0,0 +1 @@ +{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/btree/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AACtC,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,8DAA8D;AAClH,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC"} \ No newline at end of file diff --git a/dist/esm/btree/entry-key-type.js b/dist/esm/btree/entry-key-type.js new file mode 100644 index 0000000..588186a --- /dev/null +++ b/dist/esm/btree/entry-key-type.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=entry-key-type.js.map \ No newline at end of file diff --git a/dist/esm/btree/entry-key-type.js.map b/dist/esm/btree/entry-key-type.js.map new file mode 100644 index 0000000..a763823 --- /dev/null +++ b/dist/esm/btree/entry-key-type.js.map @@ -0,0 +1 @@ +{"version":3,"file":"entry-key-type.js","sourceRoot":"","sources":["../../../src/btree/entry-key-type.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/esm/btree/index.js b/dist/esm/btree/index.js new file mode 100644 index 0000000..cf9ed51 --- /dev/null +++ b/dist/esm/btree/index.js @@ -0,0 +1,9 @@ +import { BinaryReader } from './binary-reader.js'; +import { BinaryBPlusTree, BlacklistingSearchOperator } from './binary-tree.js'; +import { BinaryBPlusTreeLeaf } from './binary-tree-leaf.js'; +import { BinaryBPlusTreeLeafEntry } from './binary-tree-leaf-entry.js'; +import { BinaryWriter } from './binary-writer.js'; +import { BPlusTree } from './tree.js'; +import { BPlusTreeBuilder } from './tree-builder.js'; +export { BPlusTree, BinaryBPlusTree, BinaryBPlusTreeLeaf, BinaryBPlusTreeLeafEntry, BPlusTreeBuilder, BinaryWriter, BinaryReader, BlacklistingSearchOperator, }; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/esm/btree/index.js.map b/dist/esm/btree/index.js.map new file mode 100644 index 0000000..400416e --- /dev/null +++ b/dist/esm/btree/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/btree/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EACH,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,wBAAwB,EACxB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,0BAA0B,GAC7B,CAAC"} \ No newline at end of file diff --git a/dist/esm/btree/leaf-entry-metadata.js b/dist/esm/btree/leaf-entry-metadata.js new file mode 100644 index 0000000..58eded1 --- /dev/null +++ b/dist/esm/btree/leaf-entry-metadata.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=leaf-entry-metadata.js.map \ No newline at end of file diff --git a/dist/esm/btree/leaf-entry-metadata.js.map b/dist/esm/btree/leaf-entry-metadata.js.map new file mode 100644 index 0000000..7539fe1 --- /dev/null +++ b/dist/esm/btree/leaf-entry-metadata.js.map @@ -0,0 +1 @@ +{"version":3,"file":"leaf-entry-metadata.js","sourceRoot":"","sources":["../../../src/btree/leaf-entry-metadata.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/esm/btree/leaf-entry-recordpointer.js b/dist/esm/btree/leaf-entry-recordpointer.js new file mode 100644 index 0000000..2d85e47 --- /dev/null +++ b/dist/esm/btree/leaf-entry-recordpointer.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=leaf-entry-recordpointer.js.map \ No newline at end of file diff --git a/dist/esm/btree/leaf-entry-recordpointer.js.map b/dist/esm/btree/leaf-entry-recordpointer.js.map new file mode 100644 index 0000000..4effa49 --- /dev/null +++ b/dist/esm/btree/leaf-entry-recordpointer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"leaf-entry-recordpointer.js","sourceRoot":"","sources":["../../../src/btree/leaf-entry-recordpointer.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/esm/btree/tree-builder.js b/dist/esm/btree/tree-builder.js new file mode 100644 index 0000000..d0c9b5a --- /dev/null +++ b/dist/esm/btree/tree-builder.js @@ -0,0 +1,307 @@ +import { DetailedError } from '../detailed-error.js'; +import { BPlusTree } from './tree.js'; +import { BPlusTreeLeaf } from './tree-leaf.js'; +import { BPlusTreeLeafEntry } from './tree-leaf-entry.js'; +import { BPlusTreeLeafEntryValue } from './tree-leaf-entry-value.js'; +import { BPlusTreeNode } from './tree-node.js'; +import { BPlusTreeNodeEntry } from './tree-node-entry.js'; +import { _sortCompare } from './typesafe-compare.js'; +import { _checkNewEntryArgs } from './utils.js'; +export class BPlusTreeBuilder { + /** + * @param {boolean} uniqueKeys + * @param {number} [fillFactor=100] + * @param {string[]} [metadataKeys=[]] + */ + constructor(uniqueKeys, fillFactor = 100, metadataKeys = []) { + this.uniqueKeys = uniqueKeys; + this.fillFactor = fillFactor; + this.metadataKeys = metadataKeys; + this.list = new Map(); + this.indexedValues = 0; + } + add(key, recordPointer, metadata) { + // key = _normalizeKey(key); // if (_isIntString(key)) { key = parseInt(key); } + const err = _checkNewEntryArgs(key, recordPointer, this.metadataKeys, metadata); + if (err) { + throw err; + } + const entryValue = new BPlusTreeLeafEntryValue(recordPointer, metadata); + const existing = this.list.get(key); // this.list[key] + if (this.uniqueKeys && typeof existing !== 'undefined') { + throw new DetailedError('unique-key-violation', `Cannot add duplicate key "${key}", tree must have unique keys`); + } + else if (existing) { + existing.push(entryValue); + } + else { + this.list.set(key, this.uniqueKeys //this.list[key] = + ? entryValue + : [entryValue]); + } + this.indexedValues++; + } + /** + * @param key + * @param recordPointer specific recordPointer to remove. If the tree has unique keys, this can be omitted + */ + remove(key, recordPointer) { + // key = _normalizeKey(key); // if (_isIntString(key)) { key = parseInt(key); } + const isEqual = (val1, val2) => { + if (val1 instanceof Array && val2 instanceof Array) { + return val1.every((v, i) => val2[i] === v); + } + return val1 === val2; + }; + if (this.uniqueKeys) { + this.list.delete(key); + } + else { + const entryValues = this.list.get(key); + const valIndex = entryValues.findIndex(entryValue => isEqual(entryValue.recordPointer, recordPointer)); + if (~valIndex) { + if (entryValues.length === 1) { + this.list.delete(key); + } + else { + entryValues.splice(valIndex, 1); + } + } + } + } + create(maxEntries) { + // Create a tree bottom-up with all nodes filled to the max (optionally capped to fillFactor) + const list = []; + this.list.forEach((val, key) => { + list.push({ key, val }); + }); + this.list.clear(); + this.list = null; // Make unusable + list.sort((a, b) => { + return _sortCompare(a.key, b.key); + // if (_isLess(a.key, b.key)) { return -1; } + // else if (_isMore(a.key, b.key)) { return 1; } + // return 0; + }); + //const length = Object.keys(this.list).length; + const minNodeSize = 3; //25; + const maxNodeSize = 255; + const entriesPerNode = typeof maxEntries === 'number' ? maxEntries : Math.min(maxNodeSize, Math.max(minNodeSize, Math.ceil(list.length / 10))); + const entriesPerLeaf = Math.max(minNodeSize, Math.floor(entriesPerNode * (this.fillFactor / 100))); + const minParentEntries = Math.max(1, Math.floor(entriesPerNode / 2)); + const tree = new BPlusTree(entriesPerNode, this.uniqueKeys, this.metadataKeys); + tree.fillFactor = this.fillFactor; + const nrOfLeafs = Math.max(1, Math.ceil(list.length / entriesPerLeaf)); + const parentConnections = entriesPerNode + 1; // should be +1 because the > connection + let currentLevel = 1; + let nrOfNodesAtLevel = nrOfLeafs; + let nrOfParentNodes = Math.ceil(nrOfNodesAtLevel / parentConnections); + let nodesAtLevel = []; // & { prevNode?: BPlusTreeNode; nextNode?: BPlusTreeNode; prevLeaf?: BPlusTreeLeaf; nextLeaf: BPlusTreeLeaf } + while (true) { + // Create parent nodes + const creatingLeafs = currentLevel === 1; + const parentNodes = []; + for (let i = 0; i < nrOfParentNodes; i++) { + const node = new BPlusTreeNode(tree, null); + if (i > 0) { + const prevNode = parentNodes[i - 1]; + node.prevNode = prevNode; + prevNode.nextNode = node; + } + parentNodes.push(node); + } + for (let i = 0; i < nrOfNodesAtLevel; i++) { + // Eg 500 leafs with 25 entries each, 500/25 = 20 parent nodes: + // When i is between 0 and (25-1), parent node index = 0 + // When i is between 25 and (50-1), parent index = 1 etc + // So, parentIndex = Math.floor(i / 25) + const parentIndex = Math.floor(i / parentConnections); + const parent = parentNodes[parentIndex]; + if (creatingLeafs) { + // Create leaf + const leaf = new BPlusTreeLeaf(parent); + nodesAtLevel.push(leaf); + // Setup linked list properties + const prevLeaf = nodesAtLevel[nodesAtLevel.length - 2]; + if (prevLeaf) { + leaf.prevLeaf = prevLeaf; + prevLeaf.nextLeaf = leaf; + } + // Create leaf entries + const fromIndex = i * entriesPerLeaf; + const entryKVPs = list.slice(fromIndex, fromIndex + entriesPerLeaf); + entryKVPs.forEach(kvp => { + const entry = new BPlusTreeLeafEntry(leaf, kvp.key); + entry.values = this.uniqueKeys ? [kvp.val] : kvp.val; + leaf.entries.push(entry); + }); + const isLastLeaf = Math.floor((i + 1) / parentConnections) > parentIndex + || i === nrOfNodesAtLevel - 1; + if (isLastLeaf) { + // Have parent's gtChild point to this last leaf + parent.gtChild = leaf; + if (parentNodes.length > 1 && parent.entries.length < minParentEntries) { + /* Consider this order 4 B+Tree: 3 entries per node, 4 connections + + 12 > + 4 7 10 > || > + 1 2 3 || 4 5 6 || 7 8 9 || 10 11 12 || 13 14 15 + + The last leaf (13 14 15) is the only child of its parent, its assignment to + parent.gtChild is right, but there is no entry to > compare to. In this case, we have to + move the previous leaf's parent entry to our own parent: + + 10 > + 4 7 > || 13 > + 1 2 3 || 4 5 6 || 7 8 9 || 10 11 12 || 13 14 15 + + We moved just 1 parent entry which is fine in case of an order 4 tree, floor((O-1) / 2) is the + minimum entries for a node, floor((4-1) / 2) = floor(1.5) = 1. + When the tree order is higher, it's effect on higher tree nodes becomes greater and the tree + becomes inbalanced if we do not meet the minimum entries p/node requirement. + So, we'll have to move Math.floor(entriesPerNode / 2) parent entries to our parent + */ + const nrOfParentEntries2Move = minParentEntries - parent.entries.length; + const prevParent = parent.prevNode; + for (let j = 0; j < nrOfParentEntries2Move; j++) { + const firstChild = parent.entries.length === 0 + ? leaf // In first iteration, firstLeaf === leaf === "13 14 15" + : parent.entries[0].ltChild; // In following iterations, firstLeaf === last moved leaf "10 11 12" + //const prevChild = firstChild.prevChild; + const moveEntry = prevParent.entries.pop(); // removes "10" from prevLeaf's parent + const moveLeaf = prevParent.gtChild; + prevParent.gtChild = moveEntry.ltChild; // assigns "7 8 9" leaf to prevLeaf's parent > connection + moveEntry.key = firstChild.entries[0].key; // changes the key to "13" + moveLeaf.parent = parent; // changes moving "10 11 12" leaf's parent to ours + moveEntry.ltChild = moveLeaf; // assigns "10 11 12" leaf to <13 connection + parent.entries.unshift(moveEntry); // inserts "13" entry into our parent node + moveEntry.node = parent; // changes moving entry's parent to ours + } + //console.log(`Moved ${nrOfParentEntries2Move} parent node entries`); + } + } + else { + // Create parent entry with ltChild that points to this leaf + const ltChildKey = list[fromIndex + entriesPerLeaf].key; + const parentEntry = new BPlusTreeNodeEntry(parent, ltChildKey); + parentEntry.ltChild = leaf; + parent.entries.push(parentEntry); + } + } + else { + // Nodes have already been created at the previous iteration, + // we have to create entries for parent nodes only + const node = nodesAtLevel[i]; + node.parent = parent; + // // Setup linked list properties - not needed by BPlusTreeNode itself, but used in code below + // const prevNode = nodesAtLevel[nodesAtLevel.length-2]; + // if (prevNode) { + // node.prevNode = prevNode; + // prevNode.nextNode = node; + // } + const isLastNode = Math.floor((i + 1) / parentConnections) > parentIndex + || i === nrOfNodesAtLevel - 1; + if (isLastNode) { + parent.gtChild = node; + if (parentNodes.length > 1 && parent.entries.length < minParentEntries) { + // This is not right, we have to fix it. + // See leaf code above for additional info + const nrOfParentEntries2Move = minParentEntries - parent.entries.length; + const prevParent = parent.prevNode; + for (let j = 0; j < nrOfParentEntries2Move; j++) { + const firstChild = parent.entries.length === 0 + ? node + : parent.entries[0].ltChild; + const moveEntry = prevParent.entries.pop(); + const moveNode = prevParent.gtChild; + prevParent.gtChild = moveEntry.ltChild; + let ltChild = firstChild.entries[0].ltChild; + while (!(ltChild instanceof BPlusTreeLeaf)) { + ltChild = ltChild.entries[0].ltChild; + } + // BUG in next line? Mistake discovered during TS port + moveEntry.key = ltChild.entries[0].key; //firstChild.entries[0].key; + moveNode.parent = parent; + moveEntry.ltChild = moveNode; + parent.entries.unshift(moveEntry); + moveEntry.node = parent; + } + //console.log(`Moved ${nrOfParentEntries2Move} parent node entries`); + } + } + else { + let ltChild = node.nextNode; + while (!(ltChild instanceof BPlusTreeLeaf)) { + ltChild = ltChild.entries[0].ltChild; + } + const ltChildKey = ltChild.entries[0].key; //node.gtChild.entries[node.gtChild.entries.length-1].key; //nodesAtLevel[i+1].entries[0].key; + const parentEntry = new BPlusTreeNodeEntry(parent, ltChildKey); + parentEntry.ltChild = node; + parent.entries.push(parentEntry); + } + } + } + if (nrOfLeafs === 1) { + // Very little data. Only 1 leaf + const leaf = nodesAtLevel[0]; + leaf.parent = tree; + tree.root = leaf; + break; + } + else if (nrOfParentNodes === 1) { + // Done + tree.root = parentNodes[0]; + break; + } + currentLevel++; // Level up + nodesAtLevel = parentNodes; + nrOfNodesAtLevel = nodesAtLevel.length; + nrOfParentNodes = Math.ceil(nrOfNodesAtLevel / parentConnections); + tree.depth++; + } + // // TEST the tree + // const ok = list.every(item => { + // const val = tree.find(item.key); + // if (val === null) { + // return false; + // } + // return true; + // //return !== null; + // }) + // if (!ok) { + // throw new Error(`This tree is not ok`); + // } + return tree; + } + dumpToFile(filename) { + // eslint-disable-next-line @typescript-eslint/no-var-requires + const fs = require('fs'); + fs.appendFileSync(filename, this.uniqueKeys + '\n'); + fs.appendFileSync(filename, this.fillFactor + '\n'); + for (const [key, val] of this.list) { + const json = JSON.stringify({ key, val }) + '\n'; + fs.appendFileSync(filename, json); + } + } + static fromFile(filename) { + // eslint-disable-next-line @typescript-eslint/no-var-requires + const fs = require('fs'); + const entries = fs.readFileSync(filename, 'utf8') + .split('\n') + .map(str => str.length > 0 ? JSON.parse(str) : ''); + const last = entries.pop(); // Remove last empty one (because split \n) + console.assert(last === ''); + const uniqueKeys = entries.shift() === 'true'; + const fillFactor = parseInt(entries.shift()); + const builder = new BPlusTreeBuilder(uniqueKeys, fillFactor); + // while(entries.length > 0) { + // let entry = entries.shift(); + // builder.list.set(entry.key, entry.val); + // } + for (let i = 0; i < entries.length; i++) { + builder.list.set(entries[i].key, entries[i].val); + } + return builder; + } +} +//# sourceMappingURL=tree-builder.js.map \ No newline at end of file diff --git a/dist/esm/btree/tree-builder.js.map b/dist/esm/btree/tree-builder.js.map new file mode 100644 index 0000000..d01c59e --- /dev/null +++ b/dist/esm/btree/tree-builder.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tree-builder.js","sourceRoot":"","sources":["../../../src/btree/tree-builder.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/btree/tree-leaf-entry-value.js b/dist/esm/btree/tree-leaf-entry-value.js new file mode 100644 index 0000000..a059cd6 --- /dev/null +++ b/dist/esm/btree/tree-leaf-entry-value.js @@ -0,0 +1,15 @@ +export class BPlusTreeLeafEntryValue { + /** + * @param recordPointer used to be called "value", renamed to prevent confusion + * @param metadata + */ + constructor(recordPointer, metadata) { + this.recordPointer = recordPointer; + this.metadata = metadata; + } + /** @deprecated use .recordPointer instead */ + get value() { + return this.recordPointer; + } +} +//# sourceMappingURL=tree-leaf-entry-value.js.map \ No newline at end of file diff --git a/dist/esm/btree/tree-leaf-entry-value.js.map b/dist/esm/btree/tree-leaf-entry-value.js.map new file mode 100644 index 0000000..84a6152 --- /dev/null +++ b/dist/esm/btree/tree-leaf-entry-value.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tree-leaf-entry-value.js","sourceRoot":"","sources":["../../../src/btree/tree-leaf-entry-value.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,uBAAuB;IAChC;;;OAGG;IACH,YAAmB,aAAqC,EAAS,QAA4B;QAA1E,kBAAa,GAAb,aAAa,CAAwB;QAAS,aAAQ,GAAR,QAAQ,CAAoB;IAC7F,CAAC;IAED,6CAA6C;IAC7C,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/esm/btree/tree-leaf-entry.js b/dist/esm/btree/tree-leaf-entry.js new file mode 100644 index 0000000..649a62f --- /dev/null +++ b/dist/esm/btree/tree-leaf-entry.js @@ -0,0 +1,12 @@ +import { BPlusTreeLeafEntryValue } from './tree-leaf-entry-value.js'; +export class BPlusTreeLeafEntry { + constructor(leaf, key, value) { + this.leaf = leaf; + this.key = key; + if (typeof value !== 'undefined' && !(value instanceof BPlusTreeLeafEntryValue)) { + throw new Error('value must be an instance of BPlusTreeLeafEntryValue'); + } + this.values = typeof value === 'undefined' ? [] : [value]; + } +} +//# sourceMappingURL=tree-leaf-entry.js.map \ No newline at end of file diff --git a/dist/esm/btree/tree-leaf-entry.js.map b/dist/esm/btree/tree-leaf-entry.js.map new file mode 100644 index 0000000..a456bce --- /dev/null +++ b/dist/esm/btree/tree-leaf-entry.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tree-leaf-entry.js","sourceRoot":"","sources":["../../../src/btree/tree-leaf-entry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,MAAM,OAAO,kBAAkB;IAG3B,YAAmB,IAAmB,EAAS,GAAqB,EAAE,KAA+B;QAAlF,SAAI,GAAJ,IAAI,CAAe;QAAS,QAAG,GAAH,GAAG,CAAkB;QAChE,IAAI,OAAO,KAAK,KAAK,WAAW,IAAI,CAAC,CAAC,KAAK,YAAY,uBAAuB,CAAC,EAAE;YAC7E,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;SAC3E;QACD,IAAI,CAAC,MAAM,GAAG,OAAO,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/esm/btree/tree-leaf.js b/dist/esm/btree/tree-leaf.js new file mode 100644 index 0000000..3d370b0 --- /dev/null +++ b/dist/esm/btree/tree-leaf.js @@ -0,0 +1,279 @@ +import { writeByteLength } from '../binary.js'; +import { DetailedError } from '../detailed-error.js'; +import { FLAGS } from './binary-tree-builder.js'; +import { MAX_LEAF_ENTRY_VALUES, MAX_SMALL_LEAF_VALUE_LENGTH, WRITE_SMALL_LEAFS } from './config.js'; +import { BPlusTree } from './tree.js'; +import { BPlusTreeLeafEntry } from './tree-leaf-entry.js'; +import { BPlusTreeLeafEntryValue } from './tree-leaf-entry-value.js'; +import { BPlusTreeNode } from './tree-node.js'; +import { BPlusTreeNodeEntry } from './tree-node-entry.js'; +import { _isEqual, _isMore } from './typesafe-compare.js'; +import { _appendToArray, _checkNewEntryArgs } from './utils.js'; +export class BPlusTreeLeaf { + constructor(parent) { + this.parent = parent; + this.entries = []; + this.prevLeaf = null; + this.nextLeaf = null; + } + /** + * The BPlusTree this leaf is in + */ + get tree() { + return this.parent instanceof BPlusTree ? this.parent : this.parent.tree; + } + /** + * Adds an entry to this leaf + * @param key + * @param recordPointer data to store with the key, max size is 255 + * @param {object} [metadata] data to include, must contain all keys used in BPlusTree constructor + * @returns {BPlusTreeLeafEntry} returns the added leaf entry + */ + add(key, recordPointer, metadata) { + // key = _normalizeKey(key); // if (_isIntString(key)) { key = parseInt(key); } + if (typeof recordPointer === 'string') { + // For now, allow this. Convert to byte array + console.warn(`WARNING: converting recordPointer "${recordPointer}" to byte array. This is deprecated, will fail in the future`); + const bytes = []; + for (let i = 0; i < recordPointer.length; i++) { + bytes.push(recordPointer.charCodeAt(i)); + } + recordPointer = bytes; + } + const err = _checkNewEntryArgs(key, recordPointer, this.tree.metadataKeys, metadata); + if (err) { + throw err; + } + const entryValue = new BPlusTreeLeafEntryValue(recordPointer, metadata); + // First. check if we already have an entry with this key + const entryIndex = this.entries.findIndex(entry => _isEqual(entry.key, key)); + if (entryIndex >= 0) { + if (this.tree.uniqueKeys) { + throw new DetailedError('duplicate-node-key', `Cannot insert duplicate key ${key}`); + } + const entry = this.entries[entryIndex]; + entry.values.push(entryValue); + return entry; + } + // New key, create entry + const entry = new BPlusTreeLeafEntry(this, key, entryValue); + if (this.entries.length === 0) { + this.entries.push(entry); + } + else { + // Find where to insert sorted + const insertIndex = this.entries.findIndex(otherEntry => _isMore(otherEntry.key, entry.key)); + if (insertIndex < 0) { + this.entries.push(entry); + } + else { + this.entries.splice(insertIndex, 0, entry); + } + // FInd out if there are too many entries + if (this.entries.length > this.tree.maxEntriesPerNode) { + // Split the leaf + const splitIndex = Math.ceil(this.tree.maxEntriesPerNode / 2); + const moveEntries = this.entries.splice(splitIndex); + const copyUpKey = moveEntries[0].key; + if (this.parent instanceof BPlusTree) { + // We have to create the first parent node + const tree = this.parent; + this.parent = new BPlusTreeNode(tree, null); + tree.root = this.parent; + tree.depth = 2; + const newLeaf = new BPlusTreeLeaf(this.parent); + newLeaf.entries = moveEntries; + const newEntry = new BPlusTreeNodeEntry(this.parent, copyUpKey); + newEntry.ltChild = this; + this.parent.gtChild = newLeaf; + this.parent.entries = [newEntry]; + // Update linked list pointers + newLeaf.prevLeaf = this; + if (this.nextLeaf) { + newLeaf.nextLeaf = this.nextLeaf; + newLeaf.nextLeaf.prevLeaf = newLeaf; + } + this.nextLeaf = newLeaf; + } + else { + const newLeaf = new BPlusTreeLeaf(this.parent); + newLeaf.entries = moveEntries; + this.parent.insertKey(copyUpKey, this, newLeaf); + // Update linked list pointers + newLeaf.prevLeaf = this; + if (this.nextLeaf) { + newLeaf.nextLeaf = this.nextLeaf; + newLeaf.nextLeaf.prevLeaf = newLeaf; + } + this.nextLeaf = newLeaf; + } + } + } + return entry; + } + toString() { + const str = 'Leaf: [' + this.entries.map(entry => entry.key).join(' | ') + ']'; + return str; + } + async toBinary(keepFreeSpace = false, writer) { + // See BPlusTreeNode.toBinary() for data layout + console.assert(this.entries.every((entry, index, arr) => index === 0 || _isMore(entry.key, arr[index - 1].key)), 'Leaf entries are not sorted ok'); + const bytes = []; + const startIndex = writer.length; + // byte_length: + bytes.push(0, 0, 0, 0); + // leaf_flags: + const leafFlagsIndex = bytes.length; + bytes.push(FLAGS.IS_LEAF); + // free_byte_length: + bytes.push(0, 0, 0, 0); + const references = []; + // prev_leaf_ptr: + this.prevLeaf && references.push({ name: `<${this.entries[0].key}`, target: this.prevLeaf, index: startIndex + bytes.length }); + bytes.push(0, 0, 0, 0, 0, 0); + // next_leaf_ptr: + this.nextLeaf && references.push({ name: `>${this.entries[this.entries.length - 1].key}`, target: this.nextLeaf, index: startIndex + bytes.length }); + bytes.push(0, 0, 0, 0, 0, 0); + // ext_byte_length, ext_free_byte_length: (will be removed when no ext_data is written) + const extDataHeaderIndex = bytes.length; + bytes.push(0, 0, 0, 0, // ext_byte_length + 0, 0, 0, 0); + // entries_length: + bytes.push(this.entries.length); + const entriesStartIndex = bytes.length; + const moreDataBlocks = []; + this.entries.forEach(entry => { + console.assert(entry.values.length <= MAX_LEAF_ENTRY_VALUES, 'too many leaf entry values to store in binary'); + const keyBytes = BPlusTree.getBinaryKeyData(entry.key); + bytes.push(...keyBytes); + // val_length: + const valLengthIndex = bytes.length; + if (WRITE_SMALL_LEAFS) { + bytes.push(0); + } + else { + bytes.push(0, 0, 0, 0); + } + const valueBytes = []; + const writeValue = (entryValue) => { + const { recordPointer, metadata } = entryValue; + // const startIndex = bytes.length; + // const target = valueBytes; + // value_length: + valueBytes.push(recordPointer.length); + // value_data: + valueBytes.push(...recordPointer); + // metadata: + this.tree.metadataKeys.forEach(key => { + const metadataValue = metadata[key]; + const mdBytes = BPlusTree.getBinaryKeyData(metadataValue); // metadata_value has same structure as key, so getBinaryKeyData comes in handy here + valueBytes.push(...mdBytes); + }); + }; + if (this.tree.uniqueKeys) { + // value: + writeValue(entry.values[0]); + } + else { + entry.values.forEach(entryValue => { + // value: + writeValue(entryValue); + }); + } + if (WRITE_SMALL_LEAFS && valueBytes.length > MAX_SMALL_LEAF_VALUE_LENGTH) { + // Values too big for small leafs + // Store value bytes in ext_data block + if (!this.tree.uniqueKeys) { + // value_list_length: + writeByteLength(bytes, bytes.length, entry.values.length); + } + // ext_data_ptr: + const extPointerIndex = bytes.length; + bytes.push(0, 0, 0, 0); + // update val_length: + bytes[valLengthIndex] = FLAGS.ENTRY_HAS_EXT_DATA; + // add + moreDataBlocks.push({ + pointerIndex: extPointerIndex, + bytes: valueBytes, + }); + } + else { + // update val_length: + const valLength = valueBytes.length + (this.tree.uniqueKeys ? 0 : 4); // +4 to include value_list_length bytes //bytes.length - valLengthIndex - 4; + if (WRITE_SMALL_LEAFS) { + bytes[valLengthIndex] = valLength; + } + else { + writeByteLength(bytes, valLengthIndex, valLength); + } + if (!this.tree.uniqueKeys) { + // value_list_length: + writeByteLength(bytes, bytes.length, entry.values.length); + } + // add value bytes: + _appendToArray(bytes, valueBytes); + } + }); + // Add free space + const entriesDataSize = bytes.length - entriesStartIndex; + const avgBytesPerEntry = this.entries.length === 0 ? 25 : Math.ceil(entriesDataSize / this.entries.length); + const availableEntries = this.tree.maxEntriesPerNode - this.entries.length; + const freeBytesLength = keepFreeSpace + ? Math.ceil(availableEntries * avgBytesPerEntry * 1.1) // + 10% + : 0; + for (let i = 0; i < freeBytesLength; i++) { + bytes.push(0); + } + const hasExtData = moreDataBlocks.length > 0; + if (hasExtData) { + // update leaf_flags: + bytes[leafFlagsIndex] |= FLAGS.LEAF_HAS_EXT_DATA; + } + else { + // remove ext_byte_length, ext_free_byte_length + bytes.splice(extDataHeaderIndex, 8); + } + // update byte_length: + const totalLeafSize = bytes.length; + writeByteLength(bytes, 0, totalLeafSize); + // update free_byte_length + writeByteLength(bytes, 5, freeBytesLength); + // Now, add any ext_data blocks + if (hasExtData) { + const leafEndIndex = bytes.length; + moreDataBlocks.forEach(block => { + const offset = bytes.length - leafEndIndex; // offset from leaf end index + writeByteLength(bytes, block.pointerIndex, offset); // update ext_data_ptr + // Calculate free space + const free = keepFreeSpace ? Math.ceil(block.bytes.length * 0.1) : 0; + const blockLength = block.bytes.length + free; + // ext_block_length: + writeByteLength(bytes, bytes.length, blockLength); + // ext_block_free_length: + writeByteLength(bytes, bytes.length, free); + // ext_data_ptr: (not implemented yet) + bytes.push(0, 0, 0, 0); + // data: + _appendToArray(bytes, block.bytes); + // Add free space: + for (let i = 0; i < free; i++) { + bytes.push(0); + } + }); + const extByteLength = bytes.length - leafEndIndex; + const extFreeByteLength = keepFreeSpace ? Math.ceil(extByteLength * 0.1) : 0; + // update ext_byte_length: + writeByteLength(bytes, extDataHeaderIndex, extByteLength + extFreeByteLength); + // update ext_free_byte_length: + writeByteLength(bytes, extDataHeaderIndex + 4, extFreeByteLength); + // Add free space: + for (let i = 0; i < extFreeByteLength; i++) { + bytes.push(0); + } + } + await writer.append(bytes); + return { references }; + } +} +//# sourceMappingURL=tree-leaf.js.map \ No newline at end of file diff --git a/dist/esm/btree/tree-leaf.js.map b/dist/esm/btree/tree-leaf.js.map new file mode 100644 index 0000000..bb7bb03 --- /dev/null +++ b/dist/esm/btree/tree-leaf.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tree-leaf.js","sourceRoot":"","sources":["../../../src/btree/tree-leaf.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/btree/tree-node-entry.js b/dist/esm/btree/tree-node-entry.js new file mode 100644 index 0000000..393146e --- /dev/null +++ b/dist/esm/btree/tree-node-entry.js @@ -0,0 +1,8 @@ +export class BPlusTreeNodeEntry { + constructor(node, key) { + this.node = node; + this.key = key; + this.ltChild = null; + } +} +//# sourceMappingURL=tree-node-entry.js.map \ No newline at end of file diff --git a/dist/esm/btree/tree-node-entry.js.map b/dist/esm/btree/tree-node-entry.js.map new file mode 100644 index 0000000..8100c70 --- /dev/null +++ b/dist/esm/btree/tree-node-entry.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tree-node-entry.js","sourceRoot":"","sources":["../../../src/btree/tree-node-entry.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,kBAAkB;IAG3B,YAAmB,IAAmB,EAAS,GAAqB;QAAjD,SAAI,GAAJ,IAAI,CAAe;QAAS,QAAG,GAAH,GAAG,CAAkB;QAFpE,YAAO,GAAkC,IAAI,CAAC;IAG9C,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/esm/btree/tree-node.js b/dist/esm/btree/tree-node.js new file mode 100644 index 0000000..550207f --- /dev/null +++ b/dist/esm/btree/tree-node.js @@ -0,0 +1,262 @@ +import { BPlusTreeNodeEntry } from './tree-node-entry.js'; +import { BPlusTreeLeaf } from './tree-leaf.js'; +import { BPlusTree } from './tree.js'; +import { _isEqual, _isMore } from './typesafe-compare.js'; +import { DetailedError } from '../detailed-error.js'; +import { writeByteLength, writeSignedOffset } from '../binary.js'; +export class BPlusTreeNode { + constructor(tree, parent) { + this.tree = tree; + this.parent = parent; + this.entries = []; + this.gtChild = null; + } + toString() { + let str = 'Node: [' + this.entries.map(entry => entry.key).join(' | ') + ']'; + str += ' --> '; + str += this.entries.map(entry => entry.ltChild.toString()).join(', '); + str += ', ' + this.gtChild.toString(); + return str; + } + insertKey(newKey, fromLeaf, newLeaf) { + // New key is being inserted from splitting leaf node + if (this.entries.findIndex(entry => _isEqual(entry.key, newKey)) >= 0) { + throw new DetailedError('node-key-exists', `Key ${newKey} is already present in node`); + } + const newNodeEntry = new BPlusTreeNodeEntry(this, newKey); + if (this.gtChild === fromLeaf) { + newNodeEntry.ltChild = fromLeaf; + this.gtChild = newLeaf; + this.entries.push(newNodeEntry); + } + else { + const oldNodeEntry = this.entries.find(entry => entry.ltChild === fromLeaf); + const insertIndex = this.entries.indexOf(oldNodeEntry); + newNodeEntry.ltChild = fromLeaf; + oldNodeEntry.ltChild = newLeaf; + this.entries.splice(insertIndex, 0, newNodeEntry); + } + this._checkSize(); + } + _checkSize() { + // Check if there are too many entries + if (this.entries.length > this.tree.maxEntriesPerNode) { + // Split this node + // A = [ 10, 20, 30, 40 ] becomes A = [ 10, 20 ], B = [ 40 ], C = 30 moves to parent + // B's gtChild (-) becomes A's gtChild (>=40) + // A's gtChild (>=40) becomes C's ltChild (<30) + // C's ltChild (<30) becomes A + // C's entry_index+1.ltChild (when inserted, or C's node.gtChild when appended) becomes B + const splitIndex = Math.ceil(this.tree.maxEntriesPerNode / 2); + const moveEntries = this.entries.splice(splitIndex); + const moveUpEntry = moveEntries.shift(); + const ltChild = moveUpEntry.ltChild; + moveUpEntry.ltChild = this; + const gtChild = this.gtChild; + this.gtChild = ltChild; + if (this.parent === null) { + // Create new root node + const newRoot = new BPlusTreeNode(this.tree, null); + newRoot.entries = [moveUpEntry]; + const newSibling = new BPlusTreeNode(this.tree, newRoot); + newSibling.entries = moveEntries; + moveEntries.forEach(entry => entry.ltChild.parent = newSibling); + newRoot.gtChild = newSibling; + newSibling.gtChild = gtChild; + gtChild.parent = newSibling; + this.parent = newRoot; + this.tree.root = newRoot; + this.tree.depth++; + } + else { + const newSibling = new BPlusTreeNode(this.tree, this.parent); + newSibling.entries = moveEntries; + moveEntries.forEach(entry => entry.ltChild.parent = newSibling); + newSibling.gtChild = gtChild; + gtChild.parent = newSibling; + // Find where to insert moveUp + const insertIndex = this.parent.entries.findIndex(entry => _isMore(entry.key, moveUpEntry.key)); + if (insertIndex < 0) { + // Add to the end + this.parent.entries.push(moveUpEntry); + this.parent.gtChild = newSibling; + } + else { + // Insert somewhere in between + const insertBefore = this.parent.entries[insertIndex]; + insertBefore.ltChild = newSibling; + this.parent.entries.splice(insertIndex, 0, moveUpEntry); + } + this.parent._checkSize(); // Let it check its size + } + } + } + async toBinary(keepFreeSpace, writer) { + // EBNF layout: + // data = byte_length, index_type, max_node_entries, [fill_factor], [free_byte_length], [metadata_keys], root_node + // byte_length = 4 byte number (byte count) + // data_byte_length = byte_length: NEVER INCLUDES ITS OWN BYTE SIZE OR OTHER HEADER BYTE SIZES + // index_type = 1 byte = [0, 0, has_large_ptrs, has_small_leafs, has_fill_factor, has_free_space, has_metadata, is_unique] + // max_node_entries = 1 byte number + // fill_factor = 1 byte number (max 100) + // metadata_keys = has_metadata? + // 1: metadata_length, metadata_key_count, metadata_key, [metadata_key, [metadata_key...]] + // 0: not present + // metadata_length = byte_length + // metadata_key_count = 1 byte number + // metadata_key = metadata_key_length, metadata_key_name + // metadata_key_length = 1 byte number + // metadata_key_name = [metadata_key_length] bytes (TextEncoded char codes) + // root_node = node | leaf + // node* = byte_length***, is_leaf, free_byte_length, entries_length, entries, gt_child_ptr, free_bytes, children + // is_leaf = 1 byte leaf_flags + // >=1: yes, leaf + // 0: no, it's a node + // free_byte_length = byte_length (how many bytes are free for later additions) + // entries_length = 1 byte number (max 255 entries) + // entries = entry, [entry, [entry...]] + // entry = key, lt_child_ptr + // key = key_type, key_length, key_data + // key_type = 1 byte number + // 0: UNDEFINED (equiv to sql null values) + // 1: STRING + // 2: NUMBER + // 3: BOOLEAN + // 4: DATE + // key_length = 1 byte number + // key_data = [key_length] bytes (ASCII chars when key is string) + // lt_child_ptr = offset_ptr (byte offset to node | leaf) + // gt_child_ptr = offset_ptr (byte offset to node | leaf) + // children = node, [node, [node...]] | leaf, [leaf, [leaf...]] + // leaf** = byte_length***, leaf_flags, free_byte_length, prev_leaf_ptr, next_leaf_ptr, [ext_byte_length, ext_free_byte_length], entries_length, leaf_entries, free_bytes, [ext_data] + // leaf_flags = 1 byte = [0, 0, 0, 0, 0, 0, has_ext_data, is_leaf] + // prev_leaf_ptr = offset_ptr (byte offset to leaf) + // next_leaf_ptr = offset_ptr (byte offset to leaf) + // leaf_entries = leaf_entry, [leaf_entry, [leaf_entry...]] + // leaf_entry = key, val + // offset_ptr = has_large_ptrs? + // 0: signed_number + // 1: large_signed_number + // small_offset_ptr = signed_number + // signed_number = 4 bytes, 32 bits = [negative_flag, ...bits] + // large_signed_number = 6 bytes, 48 bits = [negative_flag, ...bits] + // val = val_length, val_data + // val_length = has_small_leafs? + // 1: 1 byte number: [1 bit has_ext_data, 7 bit byte count] + // 0: 4 byte number (byte count) + // val_data = has_ext_data? + // 1: is_unique? + // 1: ext_data_ptr + // 2: value_list_length, ext_data_ptr + // 0: is_unique? + // 1: value_list + // 0: value + // ext_data_ptr = byte_length (byte offset from leaf end to ext_data_block) + // value_list = value_list_length, value, [value, [value...]] + // value_list_length = 4 byte number + // value = value_length, value_data, metadata + // value_length = 1 byte number + // value_data = [value_length] bytes data + // metadata = metadata_value{metadata_key_count} + // metadata_value = metadata_value_type, metadata_value_length, metadata_value_data + // metadata_value_type = key_type + // metadata_value_length= key_length + // metadata_value_data = key_data + // ext_data = ext_data_block, [ext_data_block, [ext_data_block]] + // ext_data_block = ext_block_length, ext_block_free_length, data (value | value_list) + // ext_block_length = data_byte_length + // ext_block_free_length= free_byte_length + // + // * Written by BPlusTreeNode.toBinary + // ** Written by BPlusTreeLeaf.toBinary + // *** including free bytes (BUT excluding size of ext_data blocks for leafs) + const bytes = []; + const startIndex = writer.length; //bytes.length; + // byte_length: + bytes.push(0, 0, 0, 0); + // is_leaf: + bytes.push(0); // (no) + // free_byte_length: + bytes.push(0, 0, 0, 0); // Now used! + // entries_length: + bytes.push(this.entries.length); + const pointers = []; // pointers refer to an offset in the binary data where nodes/leafs can be found + const references = []; // references point to an index in the binary data where pointers are to be stored + this.entries.forEach(entry => { + const keyBytes = BPlusTree.getBinaryKeyData(entry.key); + bytes.push(...keyBytes); + // lt_child_ptr: + const index = startIndex + bytes.length; + bytes.push(0, 0, 0, 0, 0, 0); + references.push({ name: `<${entry.key}`, index, target: entry.ltChild }); + }); + // gt_child_ptr: + const index = startIndex + bytes.length; + bytes.push(0, 0, 0, 0, 0, 0); + references.push({ name: `>${this.entries[this.entries.length - 1].key}`, index, target: this.gtChild }); + let freeBytes = 0; + if (keepFreeSpace) { + // Add free space + const avgEntrySize = Math.ceil(bytes.length / this.entries.length); + const freeEntries = this.tree.maxEntriesPerNode - this.entries.length; + freeBytes = freeEntries * avgEntrySize; + for (let i = 0; i < freeBytes; i++) { + bytes.push(0); + } + // update free_byte_length: + writeByteLength(bytes, 5, freeBytes); + } + // update byte_length: + writeByteLength(bytes, 0, bytes.length); + // Flush bytes, continue async + await writer.append(bytes); + // Now add children (NOTE: loops to entries.length + 1 to include gtChild!) + for (let childIndex = 0; childIndex < this.entries.length + 1; childIndex++) { + const entry = this.entries[childIndex]; + const childNode = entry ? entry.ltChild : this.gtChild; + const name = entry ? `<${entry.key}` : `>=${this.entries[this.entries.length - 1].key}`; + const index = writer.length; + const refIndex = references.findIndex(ref => ref.target === childNode); + const ref = references.splice(refIndex, 1)[0]; + const offset = index - (ref.index + 5); // index - (ref.index + 3); + // Update child_ptr + const child_ptr = writeSignedOffset([], 0, offset, true); + await writer.write(child_ptr, ref.index); // Update pointer + const child = await childNode.toBinary(keepFreeSpace, writer); // Write child + if (childNode instanceof BPlusTreeLeaf) { + // Remember location we stored this leaf, we need it later + pointers.push({ + name, + leaf: childNode, + index, + }); + } + // Add node pointers added by the child + child.pointers?.forEach(pointer => { + // pointer.index += index; // DISABLED: indexes must already be ok now we're using 1 bytes array + pointers.push(pointer); + }); + // Add unresolved references added by the child + child.references.forEach(ref => { + // ref.index += index; // DISABLED: indexes must already be ok now we're using 1 bytes array + references.push(ref); + }); + } + // Check if we can resolve any leaf references + await BPlusTreeNode.resolveBinaryReferences(writer, references, pointers); + return { references, pointers }; + } + static async resolveBinaryReferences(writer, references, pointers) { + for (let pointerIndex = 0; pointerIndex < pointers.length; pointerIndex++) { + const pointer = pointers[pointerIndex]; + let i; + while ((i = references.findIndex(ref => ref.target === pointer.leaf)) >= 0) { + const ref = references.splice(i, 1)[0]; // remove it from the references + const offset = pointer.index - ref.index; + const bytes = writeSignedOffset([], 0, offset, true); + await writer.write(bytes, ref.index); + } + } + } +} +//# sourceMappingURL=tree-node.js.map \ No newline at end of file diff --git a/dist/esm/btree/tree-node.js.map b/dist/esm/btree/tree-node.js.map new file mode 100644 index 0000000..7ec2ed8 --- /dev/null +++ b/dist/esm/btree/tree-node.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tree-node.js","sourceRoot":"","sources":["../../../src/btree/tree-node.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/btree/tree.js b/dist/esm/btree/tree.js new file mode 100644 index 0000000..0be537d --- /dev/null +++ b/dist/esm/btree/tree.js @@ -0,0 +1,523 @@ +import { Utils } from 'acebase-core'; +import { writeByteLength } from '../binary.js'; +import { DetailedError } from '../detailed-error.js'; +import { FLAGS, KEY_TYPE } from './binary-tree-builder.js'; +import { BinaryWriter } from './binary-writer.js'; +import { WRITE_SMALL_LEAFS } from './config.js'; +import { BPlusTreeLeaf } from './tree-leaf.js'; +import { _isEqual, _isLess, _isLessOrEqual, _isMore, _isMoreOrEqual, _isNotEqual } from './typesafe-compare.js'; +const { bigintToBytes, bytesToBigint, bytesToNumber, decodeString, encodeString, numberToBytes } = Utils; +export class BPlusTree { + /** + * @param maxEntriesPerNode max number of entries per tree node. Working with this instead of m for max number of children, because that makes less sense imho + * @param uniqueKeys whether the keys added must be unique + * @param metadataKeys (optional) names of metadata keys that will be included in tree + */ + constructor(maxEntriesPerNode, uniqueKeys, metadataKeys = []) { + this.maxEntriesPerNode = maxEntriesPerNode; + this.uniqueKeys = uniqueKeys; + this.metadataKeys = metadataKeys; + this.root = new BPlusTreeLeaf(this); + this.depth = 1; + this.fillFactor = 100; + } + /** + * Adds a key/value pair to the tree + * @param key + * @param value data to store with the key, max size is 255 + * @param metadata data to include, must contain all keys used in BPlusTree constructor + * @returns {BPlusTree} returns reference to this tree + */ + add(key, value, metadata) { + // key = _normalizeKey(key); // if (_isIntString(key)) { key = parseInt(key); } + // Find the leaf to insert to + let leaf; + if (this.root instanceof BPlusTreeLeaf) { + // Root is leaf node (total entries <= maxEntriesPerNode) + leaf = this.root; + } + else { + // Navigate to the right leaf to add to + leaf = this.findLeaf(key); + } + leaf.add(key, value, metadata); + return this; + } + // TODO: Enable bulk adding of keys: throw away all nodes, append/insert all keys ordered. Upon commit, cut all data into leafs, construct the nodes up onto the root + // addBulk(arr, commit = false) { + // // Adds given items in bulk and reconstructs the tree + // let leaf = this.firstLeaf(); + // while(leaf) { + // leaf = leaf.getNext() + // } + // } + /** + * Finds the relevant leaf for a key + * @param key + * @returns returns the leaf the key is in, or would be in when present + */ + findLeaf(key) { + const findLeaf = (node) => { + if (node instanceof BPlusTreeLeaf) { + return node; + } + for (let i = 0; i < node.entries.length; i++) { + const entry = node.entries[i]; + if (_isLess(key, entry.key)) { + node = entry.ltChild; + if (!node) { + return null; + } + if (node instanceof BPlusTreeLeaf) { + return node; + } + else { + return findLeaf(node); + } + } + } + // Still here? key must be >= last entry + console.assert(_isMoreOrEqual(key, node.entries[node.entries.length - 1].key)); + return findLeaf(node.gtChild); + }; + return findLeaf(this.root); + } + find(key) { + const leaf = this.findLeaf(key); + const entry = leaf.entries.find(entry => _isEqual(entry.key, key)); + if (!entry) { + return null; + } + if (this.uniqueKeys) { + return entry.values[0]; + } + else { + return entry.values; + } + } + search(op, val) { + if (['in', '!in', 'between', '!between'].includes(op) && !(val instanceof Array)) { + // val must be an array + throw new TypeError(`val must be an array when using operator ${op}`); + } + else if (val instanceof Array) { + throw new TypeError(`val cannot be an array when using operator ${op}`); + } + if (['exists', '!exists'].includes(op)) { + // These operators are a bit strange: they return results for key [undefined] (op === "!exists"), or all other keys (op === "exists") + // search("exists", ..) executes ("!=", undefined) + // search("!exists", ..) executes ("==", undefined) + op = op === 'exists' ? '!=' : '=='; + val = undefined; + } + if (val === null) { + val = undefined; + } + const results = []; + const add = (entry) => { + const obj = { key: entry.key }; + if (this.uniqueKeys) { // if (this.uniqueValues) { + // Bug discovered during TS port + obj.value = entry.values[0]; + } + else { + obj.values = entry.values; + } + results.push(obj); + }; + if (['<', '<='].includes(op)) { + let leaf = this.findLeaf(val); + while (leaf) { + for (let i = leaf.entries.length - 1; i >= 0; i--) { + const entry = leaf.entries[i]; + if (op === '<=' && _isLessOrEqual(entry.key, val)) { + add(entry); + } + else if (op === '<' && _isLess(entry.key, val)) { + add(entry); + } + } + leaf = leaf.prevLeaf; + } + } + else if (['>', '>='].includes(op)) { + let leaf = this.findLeaf(val); + while (leaf) { + for (let i = 0; i < leaf.entries.length; i++) { + const entry = leaf.entries[i]; + if (op === '>=' && _isMoreOrEqual(entry.key, val)) { + add(entry); + } + else if (op === '>' && _isMore(entry.key, val)) { + add(entry); + } + } + leaf = leaf.nextLeaf; + } + } + else if (op === '==') { + const leaf = this.findLeaf(val); + const entry = leaf.entries.find(entry => _isEqual(entry.key, val)); // entry.key === val + if (entry) { + add(entry); + } + } + else if (op === '!=') { + // Full index scan needed + let leaf = this.firstLeaf(); + while (leaf) { + for (let i = 0; i < leaf.entries.length; i++) { + const entry = leaf.entries[i]; + if (_isNotEqual(entry.key, val)) { + add(entry); + } // entry.key !== val + } + leaf = leaf.nextLeaf; + } + } + else if (op === 'in') { + const sorted = val.slice().sort(); + let searchKey = sorted.shift(); + let leaf; // = this.findLeaf(searchKey); + let trySameLeaf = false; + while (searchKey) { + if (!trySameLeaf) { + leaf = this.findLeaf(searchKey); + } + const entry = leaf.entries.find(entry => _isEqual(entry.key, val)); // entry.key === searchKey + if (!entry && trySameLeaf) { + trySameLeaf = false; + continue; + } + if (entry) { + add(entry); + } + searchKey = sorted.shift(); + trySameLeaf = true; + } + } + else if (op === '!in') { + // Full index scan needed + const keys = val; + let leaf = this.firstLeaf(); + while (leaf) { + for (let i = 0; i < leaf.entries.length; i++) { + const entry = leaf.entries[i]; + if (keys.findIndex(val => _isEqual(entry.key, val)) < 0) { + add(entry); + } //if (keys.indexOf(entry.key) < 0) { add(entry); } + } + leaf = leaf.nextLeaf; + } + } + else if (op === 'between') { + const keys = val; + let bottom = keys[0], top = keys[1]; + if (top < bottom) { + const swap = top; + top = bottom; + bottom = swap; + } + let leaf = this.findLeaf(bottom); + let stop = false; + while (!stop && leaf) { + for (let i = 0; i < leaf.entries.length; i++) { + const entry = leaf.entries[i]; + if (_isMoreOrEqual(entry.key, bottom) && _isLessOrEqual(entry.key, top)) { + add(entry); + } + if (_isMore(entry.key, top)) { + stop = true; + break; + } + } + leaf = leaf.nextLeaf; + } + } + else if (op === '!between') { + // Equal to key < bottom || key > top + const keys = val; + let bottom = keys[0], top = keys[1]; + if (top < bottom) { + const swap = top; + top = bottom; + bottom = swap; + } + // Add lower range first, lowest value < val < bottom + let leaf = this.firstLeaf(); + let stop = false; + while (leaf && !stop) { + for (let i = 0; i < leaf.entries.length; i++) { + const entry = leaf.entries[i]; + if (_isLess(entry.key, bottom)) { + add(entry); + } + else { + stop = true; + break; + } + } + leaf = leaf.nextLeaf; + } + // Now add upper range, top < val < highest value + leaf = this.findLeaf(top); + while (leaf) { + for (let i = 0; i < leaf.entries.length; i++) { + const entry = leaf.entries[i]; + if (_isMore(entry.key, top)) { + add(entry); + } + } + leaf = leaf.nextLeaf; + } + } + return results; + } + /** + * @returns {BPlusTreeLeaf} the first leaf in the tree + */ + firstLeaf() { + // Get the very first leaf + let node = this.root; + while (!(node instanceof BPlusTreeLeaf)) { + node = node.entries[0].ltChild; + } + return node; + } + /** + * @returns {BPlusTreeLeaf} the last leaf in the tree + */ + lastLeaf() { + // Get the very last leaf + let node = this.root; + while (!(node instanceof BPlusTreeLeaf)) { + node = node.gtChild; + } + return node; + } + all() { + // Get the very first leaf + let leaf = this.firstLeaf(); + // Now iterate through all the leafs + const all = []; + while (leaf) { + all.push(...leaf.entries.map(entry => entry.key)); + leaf = leaf.nextLeaf; //leaf.next(); + } + return all; + } + reverseAll() { + // Get the very last leaf + let leaf = this.lastLeaf(); + // Now iterate through all the leafs (backwards) + const all = []; + while (leaf) { + all.push(...leaf.entries.map(entry => entry.key)); + leaf = leaf.prevLeaf; + } + return all; + } + static get debugBinary() { return false; } + static addBinaryDebugString(str, byte) { + if (this.debugBinary) { + return [str, byte]; + } + else { + return byte; + } + } + static getKeyFromBinary(bytes, index) { + // key_type: + const keyType = bytes[index]; + index++; + // key_length: + const keyLength = bytes[index]; + index++; + // key_data: + let keyData = bytes.slice(index, index + keyLength); // []; + index += keyLength; + if ([KEY_TYPE.NUMBER, KEY_TYPE.BIGINT, KEY_TYPE.DATE].includes(keyType)) { + keyData = Array.from(keyData); + } + let key; + switch (keyType) { + case KEY_TYPE.UNDEFINED: { + // no need to do this: key = undefined; + break; + } + case KEY_TYPE.STRING: { + key = decodeString(keyData); // textDecoder.decode(Uint8Array.from(keyData)); + // key = keyData.reduce((k, code) => k + String.fromCharCode(code), ""); + break; + } + case KEY_TYPE.NUMBER: { + if (keyData.length < 8) { + // Append trailing 0's + if (keyData instanceof Array) { + keyData.push(...[0, 0, 0, 0, 0, 0, 0, 0].slice(keyData.length)); + } + else { + throw new Error(`Issue found during TS port: keyData is a Buffer, type is NUMBER and its length < 8, so it needs 0's padding`); + } + } + key = bytesToNumber(keyData); + break; + } + case KEY_TYPE.BIGINT: { + key = bytesToBigint(keyData); + break; + } + case KEY_TYPE.BOOLEAN: { + key = keyData[0] === 1; + break; + } + case KEY_TYPE.DATE: { + key = new Date(bytesToNumber(keyData)); + break; + } + default: { + throw new DetailedError('unknown-key-type', `Unknown key type ${keyType}`); + } + } + return { key, length: keyLength, byteLength: keyLength + 2 }; + } + static getBinaryKeyData(key) { + // TODO: Deprecate, moved to BinaryBPlusTreeBuilder.getKeyBytes + let keyBytes = []; + let keyType = KEY_TYPE.UNDEFINED; + switch (typeof key) { + case 'undefined': { + keyType = KEY_TYPE.UNDEFINED; + break; + } + case 'string': { + keyType = KEY_TYPE.STRING; + keyBytes = Array.from(encodeString(key)); // textEncoder.encode(key) + break; + } + case 'number': { + keyType = KEY_TYPE.NUMBER; + keyBytes = numberToBytes(key); + // Remove trailing 0's to reduce size for smaller and integer values + while (keyBytes[keyBytes.length - 1] === 0) { + keyBytes.pop(); + } + break; + } + case 'bigint': { + keyType = KEY_TYPE.BIGINT; + keyBytes = bigintToBytes(key); + break; + } + case 'boolean': { + keyType = KEY_TYPE.BOOLEAN; + keyBytes = [key ? 1 : 0]; + break; + } + case 'object': { + if (key instanceof Date) { + keyType = KEY_TYPE.DATE; + keyBytes = numberToBytes(key.getTime()); + } + else { + throw new DetailedError('invalid-object-key-type', 'Unsupported object key type'); + } + break; + } + default: { + throw new DetailedError('invalid-key-type', `Unsupported key type: ${typeof key}`); + } + } + const bytes = []; + // key_type: + bytes.push(keyType); + // key_length: + bytes.push(keyBytes.length); + // key_data: + bytes.push(...keyBytes); + return bytes; + } + async toBinary(keepFreeSpace = false, writer) { + // TODO: Refactor to use BinaryBPlusTreeBuilder, .getHeader() + if (!(writer instanceof BinaryWriter)) { + throw new Error('writer argument must be an instance of BinaryWriter'); + } + // Return binary data + const indexTypeFlags = (this.uniqueKeys ? FLAGS.UNIQUE_KEYS : 0) + | (this.metadataKeys.length > 0 ? FLAGS.HAS_METADATA : 0) + | (keepFreeSpace ? FLAGS.HAS_FREE_SPACE : 0) + | FLAGS.HAS_FILL_FACTOR + | (WRITE_SMALL_LEAFS ? FLAGS.HAS_SMALL_LEAFS : 0) + | FLAGS.HAS_LARGE_PTRS; + const bytes = [ + // byte_length: + 0, 0, 0, 0, + // index_type: + indexTypeFlags, + // max_node_entries: + this.maxEntriesPerNode, + // fill_factor: + this.fillFactor, + ]; + if (keepFreeSpace) { + bytes.push(0, 0, 0, 0); // free_byte_length + } + if (this.metadataKeys.length > 0) { + // metadata_keys: + const index = bytes.length; + bytes.push(0, 0, 0, 0); // metadata_length + // metadata_key_count: + bytes.push(this.metadataKeys.length); + this.metadataKeys.forEach(key => { + // metadata_key: + bytes.push(key.length); // metadata_key_length + // metadata_key_name: + for (let i = 0; i < key.length; i++) { + bytes.push(key.charCodeAt(i)); + } + }); + // update metadata_length: + const length = bytes.length - index - 4; + writeByteLength(bytes, index, length); + } + const headerLength = bytes.length; + await writer.append(bytes); + const { references } = await this.root.toBinary(keepFreeSpace, writer); + console.assert(references.length === 0, 'All references must be resolved now'); + let freeBytesLength = 0; + if (keepFreeSpace) { + // Add 10% free space + freeBytesLength = Math.ceil((writer.length - headerLength) * 0.1); + const bytesPerWrite = 1024 * 100; // 100KB per write seems fair? + const writes = Math.ceil(freeBytesLength / bytesPerWrite); + for (let i = 0; i < writes; i++) { + const length = i + 1 < writes + ? bytesPerWrite + : freeBytesLength % bytesPerWrite; + const zeroes = new Uint8Array(length); + await writer.append(zeroes); + } + } + // update byte_length: + const byteLength = writer.length; // - headerLength; + const lbytes = writeByteLength([], 0, byteLength); + await writer.write(lbytes, 0); + if (keepFreeSpace) { + // update free_byte_length: + const fbytes = writeByteLength([], 0, freeBytesLength); + await writer.write(fbytes, 7); + } + await writer.end(); + } + static get typeSafeComparison() { + return { + isMore(val1, val2) { return _isMore(val1, val2); }, + isMoreOrEqual(val1, val2) { return _isMoreOrEqual(val1, val2); }, + isLess(val1, val2) { return _isLess(val1, val2); }, + isLessOrEqual(val1, val2) { return _isLessOrEqual(val1, val2); }, + isEqual(val1, val2) { return _isEqual(val1, val2); }, + isNotEqual(val1, val2) { return _isNotEqual(val1, val2); }, + }; + } +} +//# sourceMappingURL=tree.js.map \ No newline at end of file diff --git a/dist/esm/btree/tree.js.map b/dist/esm/btree/tree.js.map new file mode 100644 index 0000000..1e1de6e --- /dev/null +++ b/dist/esm/btree/tree.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../../src/btree/tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAG7C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE7G,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;AAEzG,MAAM,OAAO,SAAS;IAgBlB;;;;OAIG;IACH,YAAmB,iBAAyB,EAAS,UAAmB,EAAS,eAAyB,EAAE;QAAzF,sBAAiB,GAAjB,iBAAiB,CAAQ;QAAS,eAAU,GAAV,UAAU,CAAS;QAAS,iBAAY,GAAZ,YAAY,CAAe;QACxG,IAAI,CAAC,IAAI,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;IAC1B,CAAC;IAED;;;;;;OAMG;IACH,GAAG,CAAC,GAAqB,EAAE,KAA0B,EAAE,QAA4B;QAC/E,+EAA+E;QAC/E,6BAA6B;QAC7B,IAAI,IAAI,CAAC;QACT,IAAI,IAAI,CAAC,IAAI,YAAY,aAAa,EAAE;YACpC,yDAAyD;YACzD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;SACpB;aACI;YACD,uCAAuC;YACvC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;SAC7B;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,qKAAqK;IACrK,iCAAiC;IACjC,4DAA4D;IAC5D,mCAAmC;IACnC,oBAAoB;IACpB,gCAAgC;IAChC,QAAQ;IACR,IAAI;IAEJ;;;;OAIG;IACH,QAAQ,CAAC,GAAqB;QAE1B,MAAM,QAAQ,GAAG,CAAC,IAAmC,EAAiB,EAAE;YACpE,IAAI,IAAI,YAAY,aAAa,EAAE;gBAC/B,OAAO,IAAI,CAAC;aACf;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAI,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE;oBACzB,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC;oBACrB,IAAI,CAAC,IAAI,EAAE;wBACP,OAAO,IAAI,CAAC;qBACf;oBACD,IAAI,IAAI,YAAY,aAAa,EAAE;wBAC/B,OAAO,IAAI,CAAC;qBACf;yBACI;wBACD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;qBACzB;iBACJ;aACJ;YACD,wCAAwC;YACxC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7E,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,GAAqB;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;SAAE;QAC5B,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAC1B;aACI;YACD,OAAO,KAAK,CAAC,MAAM,CAAC;SACvB;IACL,CAAC;IAED,MAAM,CAAC,EAAU,EAAE,GAA8C;QAC7D,IAAI,CAAC,IAAI,EAAC,KAAK,EAAC,SAAS,EAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC,EAAE;YAC3E,uBAAuB;YACvB,MAAM,IAAI,SAAS,CAAC,4CAA4C,EAAE,EAAE,CAAC,CAAC;SACzE;aACI,IAAI,GAAG,YAAY,KAAK,EAAE;YAC3B,MAAM,IAAI,SAAS,CAAC,8CAA8C,EAAE,EAAE,CAAC,CAAC;SAC3E;QACD,IAAI,CAAC,QAAQ,EAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YACnC,qIAAqI;YACrI,kDAAkD;YAClD,mDAAmD;YACnD,EAAE,GAAG,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YACnC,GAAG,GAAG,SAAS,CAAC;SACnB;QACD,IAAI,GAAG,KAAK,IAAI,EAAE;YACd,GAAG,GAAG,SAAS,CAAC;SACnB;QAED,MAAM,OAAO,GAIR,EAAE,CAAC;QAER,MAAM,GAAG,GAAG,CAAC,KAAyB,EAAE,EAAE;YACtC,MAAM,GAAG,GAAwB,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;YACpD,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,2BAA2B;gBAC9C,gCAAgC;gBAChC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aAC/B;iBACI;gBACD,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;aAC7B;YACD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC,CAAC;QACF,IAAI,CAAC,GAAG,EAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YACzB,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAyB,CAAC,CAAC;YACpD,OAAM,IAAI,EAAE;gBACR,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,EAAE,KAAK,IAAI,IAAI,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;wBAAE,GAAG,CAAC,KAAK,CAAC,CAAC;qBAAE;yBAC7D,IAAI,EAAE,KAAK,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;wBAAE,GAAG,CAAC,KAAK,CAAC,CAAC;qBAAE;iBAClE;gBACD,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;aACxB;SACJ;aACI,IAAI,CAAC,GAAG,EAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YAC9B,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAyB,CAAC,CAAC;YACpD,OAAM,IAAI,EAAE;gBACR,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,EAAE,KAAK,IAAI,IAAI,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;wBAAE,GAAG,CAAC,KAAK,CAAC,CAAC;qBAAE;yBAC7D,IAAI,EAAE,KAAK,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;wBAAE,GAAG,CAAC,KAAK,CAAC,CAAC;qBAAE;iBAClE;gBACD,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;aACxB;SACJ;aACI,IAAI,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAyB,CAAC,CAAC;YACtD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAqB;YACzF,IAAI,KAAK,EAAE;gBACP,GAAG,CAAC,KAAK,CAAC,CAAC;aACd;SACJ;aACI,IAAI,EAAE,KAAK,IAAI,EAAE;YAClB,yBAAyB;YACzB,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,OAAM,IAAI,EAAE;gBACR,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;wBAAE,GAAG,CAAC,KAAK,CAAC,CAAC;qBAAE,CAAC,oBAAoB;iBACxE;gBACD,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;aACxB;SACJ;aACI,IAAI,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,MAAM,GAAI,GAA4B,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;YAC5D,IAAI,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,CAAC,8BAA8B;YACxC,IAAI,WAAW,GAAG,KAAK,CAAC;YACxB,OAAO,SAAS,EAAE;gBACd,IAAI,CAAC,WAAW,EAAE;oBACd,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;iBACnC;gBACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,0BAA0B;gBAC9F,IAAI,CAAC,KAAK,IAAI,WAAW,EAAE;oBACvB,WAAW,GAAG,KAAK,CAAC;oBACpB,SAAS;iBACZ;gBACD,IAAI,KAAK,EAAE;oBAAE,GAAG,CAAC,KAAK,CAAC,CAAC;iBAAE;gBAC1B,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC3B,WAAW,GAAG,IAAI,CAAC;aACtB;SACJ;aACI,IAAI,EAAE,KAAK,KAAK,EAAE;YACnB,yBAAyB;YACzB,MAAM,IAAI,GAAG,GAA2B,CAAC;YACzC,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,OAAM,IAAI,EAAE;gBACR,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE;wBAAE,GAAG,CAAC,KAAK,CAAC,CAAC;qBAAE,CAAC,kDAAkD;iBAC9H;gBACD,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;aACxB;SACJ;aACI,IAAI,EAAE,KAAK,SAAS,EAAE;YACvB,MAAM,IAAI,GAAG,GAA2B,CAAC;YACzC,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,GAAG,GAAG,MAAM,EAAE;gBACd,MAAM,IAAI,GAAG,GAAG,CAAC;gBACjB,GAAG,GAAG,MAAM,CAAC;gBACb,MAAM,GAAG,IAAI,CAAC;aACjB;YACD,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,IAAI,GAAG,KAAK,CAAC;YACjB,OAAM,CAAC,IAAI,IAAI,IAAI,EAAE;gBACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;wBAAE,GAAG,CAAC,KAAK,CAAC,CAAC;qBAAE;oBACxF,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;wBAAE,IAAI,GAAG,IAAI,CAAC;wBAAC,MAAM;qBAAE;iBACvD;gBACD,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;aACxB;SACJ;aACI,IAAI,EAAE,KAAK,UAAU,EAAE;YACxB,qCAAqC;YACrC,MAAM,IAAI,GAAG,GAA2B,CAAC;YACzC,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,GAAG,GAAG,MAAM,EAAE;gBACd,MAAM,IAAI,GAAG,GAAG,CAAC;gBACjB,GAAG,GAAG,MAAM,CAAC;gBACb,MAAM,GAAG,IAAI,CAAC;aACjB;YACD,qDAAqD;YACrD,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,IAAI,IAAI,GAAG,KAAK,CAAC;YACjB,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE;gBAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE;wBAAE,GAAG,CAAC,KAAK,CAAC,CAAC;qBAAE;yBAC1C;wBAAE,IAAI,GAAG,IAAI,CAAC;wBAAC,MAAM;qBAAE;iBAC/B;gBACD,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;aACxB;YACD,iDAAiD;YACjD,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC1B,OAAO,IAAI,EAAE;gBACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;wBAAE,GAAG,CAAC,KAAK,CAAC,CAAC;qBAAE;iBAC/C;gBACD,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;aACxB;SACJ;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,SAAS;QACL,0BAA0B;QAC1B,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrB,OAAO,CAAC,CAAC,IAAI,YAAY,aAAa,CAAC,EAAE;YACrC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;SAClC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,QAAQ;QACJ,yBAAyB;QACzB,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrB,OAAO,CAAC,CAAC,IAAI,YAAY,aAAa,CAAC,EAAE;YACrC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;SACvB;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,GAAG;QACC,0BAA0B;QAC1B,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,oCAAoC;QACpC,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,OAAO,IAAI,EAAE;YACT,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAClD,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,cAAc;SACvC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,UAAU;QACN,yBAAyB;QACzB,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,gDAAgD;QAChD,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,OAAO,IAAI,EAAE;YACT,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAClD,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;SACxB;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,MAAM,KAAK,WAAW,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;IAC1C,MAAM,CAAC,oBAAoB,CAAC,GAAW,EAAE,IAAY;QACjD,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;SACtB;aACI;YACD,OAAO,IAAI,CAAC;SACf;IACL,CAAC;IACD,MAAM,CAAC,gBAAgB,CAAC,KAAwB,EAAE,KAAa;QAC3D,YAAY;QACZ,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,KAAK,EAAE,CAAC;QAER,cAAc;QACd,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/B,KAAK,EAAE,CAAC;QAER,YAAY;QACZ,IAAI,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM;QAC3D,KAAK,IAAI,SAAS,CAAC;QAEnB,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YACrE,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACjC;QAED,IAAI,GAAG,CAAC;QACR,QAAO,OAAO,EAAE;YACZ,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACrB,uCAAuC;gBACvC,MAAM;aACT;YACD,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAClB,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,gDAAgD;gBAC7E,wEAAwE;gBACxE,MAAM;aACT;YACD,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAClB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;oBACpB,sBAAsB;oBACtB,IAAI,OAAO,YAAY,KAAK,EAAE;wBAC1B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;qBAC5D;yBACI;wBACD,MAAM,IAAI,KAAK,CAAC,6GAA6G,CAAC,CAAC;qBAClI;iBACJ;gBACD,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;gBAC7B,MAAM;aACT;YACD,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAClB,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;gBAC7B,MAAM;aACT;YACD,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACnB,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACvB,MAAM;aACT;YACD,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAChB,GAAG,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;gBACvC,MAAM;aACT;YACD,OAAO,CAAC,CAAC;gBACL,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,oBAAoB,OAAO,EAAE,CAAC,CAAC;aAC9E;SACJ;QACD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,GAAG,CAAC,EAAE,CAAC;IACjE,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,GAAqB;QACzC,+DAA+D;QAC/D,IAAI,QAAQ,GAAa,EAAE,CAAC;QAC5B,IAAI,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC;QACjC,QAAO,OAAO,GAAG,EAAE;YACf,KAAK,WAAW,CAAC,CAAC;gBACd,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC;gBAC7B,MAAM;aACT;YACD,KAAK,QAAQ,CAAC,CAAC;gBACX,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC;gBAC1B,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,0BAA0B;gBACpE,MAAM;aACT;YACD,KAAK,QAAQ,CAAC,CAAC;gBACX,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC;gBAC1B,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;gBAC9B,oEAAoE;gBACpE,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAC,CAAC,CAAC,KAAK,CAAC,EAAE;oBAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;iBAAE;gBAC7D,MAAM;aACT;YACD,KAAK,QAAQ,CAAC,CAAC;gBACX,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC;gBAC1B,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;gBAC9B,MAAM;aACT;YACD,KAAK,SAAS,CAAC,CAAC;gBACZ,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;gBAC3B,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzB,MAAM;aACT;YACD,KAAK,QAAQ,CAAC,CAAC;gBACX,IAAI,GAAG,YAAY,IAAI,EAAE;oBACrB,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;oBACxB,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;iBAC3C;qBACI;oBACD,MAAM,IAAI,aAAa,CAAC,yBAAyB,EAAE,6BAA6B,CAAC,CAAC;iBACrF;gBACD,MAAM;aACT;YACD,OAAO,CAAC,CAAC;gBACL,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,yBAAyB,OAAO,GAAG,EAAE,CAAC,CAAC;aACtF;SACJ;QAED,MAAM,KAAK,GAAG,EAAE,CAAC;QAEjB,YAAY;QACZ,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEpB,cAAc;QACd,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE5B,YAAY;QACZ,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QAExB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,aAAa,GAAG,KAAK,EAAE,MAAoB;QACtD,6DAA6D;QAC7D,IAAI,CAAC,CAAC,MAAM,YAAY,YAAY,CAAC,EAAE;YACnC,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;SAC1E;QACD,qBAAqB;QACrB,MAAM,cAAc,GACd,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;cACzC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;cACvD,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;cAC1C,KAAK,CAAC,eAAe;cACrB,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;cAC/C,KAAK,CAAC,cAAc,CAAC;QAC3B,MAAM,KAAK,GAAG;YACV,eAAe;YACf,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACV,cAAc;YACd,cAAc;YACd,oBAAoB;YACpB,IAAI,CAAC,iBAAiB;YACtB,eAAe;YACf,IAAI,CAAC,UAAU;SAClB,CAAC;QACF,IAAI,aAAa,EAAE;YACf,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB;SAC9C;QACD,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9B,iBAAiB;YACjB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB;YAE1C,sBAAsB;YACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAErC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAC5B,gBAAgB;gBAChB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAsB;gBAC9C,qBAAqB;gBACrB,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;iBACjC;YACL,CAAC,CAAC,CAAC;YAEH,0BAA0B;YAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC;YACxC,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;SACzC;QAED,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC;QAClC,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QACvE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,qCAAqC,CAAC,CAAC;QAE/E,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,aAAa,EAAE;YACf,qBAAqB;YACrB,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC;YAClE,MAAM,aAAa,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,8BAA8B;YAChE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,aAAa,CAAC,CAAC;YAE1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC7B,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM;oBACzB,CAAC,CAAC,aAAa;oBACf,CAAC,CAAC,eAAe,GAAG,aAAa,CAAC;gBACtC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;gBACtC,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;aAC/B;SACJ;QAED,sBAAsB;QACtB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,kBAAkB;QACpD,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;QAClD,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE9B,IAAI,aAAa,EAAE;YACf,2BAA2B;YAC3B,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;YACvD,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;SACjC;QACD,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,MAAM,KAAK,kBAAkB;QACzB,OAAO;YACH,MAAM,CAAC,IAAa,EAAE,IAAa,IAAI,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YACpE,aAAa,CAAC,IAAa,EAAE,IAAa,IAAI,OAAO,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAClF,MAAM,CAAC,IAAa,EAAE,IAAa,IAAI,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YACpE,aAAa,CAAC,IAAa,EAAE,IAAa,IAAI,OAAO,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAClF,OAAO,CAAC,IAAa,EAAE,IAAa,IAAI,OAAO,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YACtE,UAAU,CAAC,IAAa,EAAE,IAAa,IAAI,OAAO,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;SAC/E,CAAC;IACN,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/esm/btree/tx.js b/dist/esm/btree/tx.js new file mode 100644 index 0000000..87ffd96 --- /dev/null +++ b/dist/esm/btree/tx.js @@ -0,0 +1,120 @@ +import { DetailedError } from '../detailed-error.js'; +export class TxDetailedError extends DetailedError { + constructor(code, msg, originalError) { + super(code, msg, originalError); + this.transactionErrors = null; + this.rollbackErrors = null; + } +} +export class TX { + constructor() { + this._queue = []; + this._rollbackSteps = []; + } + // TODO: refactor to async + run(action, rollback) { + console.assert(this._queue.length === 0, 'queue must be empty'); + typeof rollback === 'function' && this._rollbackSteps.push(rollback); + const p = action instanceof Promise ? action : action(); + return p.catch((err) => { + console.error(`TX.run error: ${err.message}. Initiating rollback`); + // rollback + const steps = this._rollbackSteps.map(step => step()); + return Promise.all(steps) + .then(() => { + // rollback successful + throw err; // run().catch will fire with the original error + }) + .catch(err2 => { + // rollback failed!! + console.error(`Critical: could not rollback changes. Error: ${err2.message}`); + err.rollbackError = err2; + throw err; + }); + }); + } + /** + * For parallel transactions + */ + queue(step) { + this._queue.push({ + name: step.name || `Step ${this._queue.length + 1}`, + action: step.action, + rollback: step.rollback, + state: 'idle', + error: null, + }); + } + async execute(parallel = true) { + if (!parallel) { + // Sequentially run actions in queue + const rollbackSteps = []; + let result; + while (this._queue.length > 0) { + const step = this._queue.shift(); + rollbackSteps.push(step.rollback); + try { + const prevResult = result; + result = await step.action(prevResult); + } + catch (err) { + // rollback + const actions = rollbackSteps.map(step => step()); + await Promise.all(actions) + .catch(err2 => { + // rollback failed!! + console.error(`Critical: could not rollback changes. Error: ${err2.message}`); + err.rollbackError = err2; + throw err; + }); + // rollback successful + throw err; // execute().catch will fire with the original error + } + } + return result; + } + // Run actions in parallel: + const executeStepAction = async (step, action) => { + try { + const promise = step[action](); + if (!(promise instanceof Promise)) { + throw new DetailedError('invalid-tx-step-code', `step "${step.name}" action "${action}" must return a promise`); + } + const result = await promise; + step.state = 'success'; + step.result = result; + } + catch (err) { + step.state = 'failed'; + step.error = err; + } + return step; + }; + const actions = this._queue.map(step => executeStepAction(step, 'action')); + let results = await Promise.all(actions); + // Check if they were all successful + let success = results.every(step => step.state === 'success'); + if (success) { + return; + } + // Rollback + const transactionErrors = results.filter(step => step.state === 'failed').map(result => result.error); + // console.warn(`Rolling back tx: `, transactionErrors); + const rollbackSteps = this._queue.filter(step => typeof step.rollback === 'function').map(step => executeStepAction(step, 'rollback')); // this._queue.map(step => step.state === 'failed' || typeof step.rollback !== 'function' ? null : step.rollback()); + results = await Promise.all(rollbackSteps); + // Check if rollback was successful + success = results.every(step => step.state === 'success'); + if (success) { + const err = new TxDetailedError('tx-failed', 'Tx failed, rolled back. See .info for details'); + err.transactionErrors = transactionErrors; + throw err; + } + // rollback failed!! + const err = new TxDetailedError('tx-rollback-failed', 'Critical: could not rollback failed transaction. See transactionErrors and rollbackErrors for details'); + err.transactionErrors = transactionErrors; + err.rollbackErrors = results.filter(step => step.state === 'failed').map(result => result.error); + console.error('Critical: could not rollback transaction. Errors:', err.rollbackErrors); + throw err; + } +} +//# sourceMappingURL=tx.js.map \ No newline at end of file diff --git a/dist/esm/btree/tx.js.map b/dist/esm/btree/tx.js.map new file mode 100644 index 0000000..c4df6ab --- /dev/null +++ b/dist/esm/btree/tx.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tx.js","sourceRoot":"","sources":["../../../src/btree/tx.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/btree/typesafe-compare.js b/dist/esm/btree/typesafe-compare.js new file mode 100644 index 0000000..e454830 --- /dev/null +++ b/dist/esm/btree/typesafe-compare.js @@ -0,0 +1,111 @@ +export function _getComparibleValue(val) { + if (typeof val === 'undefined' || val === null) { + val = null; + } + else if (val instanceof Date) { + val = val.getTime(); + } + return val; +} +export function _isEqual(val1, val2) { + val1 = _getComparibleValue(val1); + val2 = _getComparibleValue(val2); + if (typeof val1 !== typeof val2) { + return false; + } + return val1 === val2; +} +export function _isNotEqual(val1, val2) { + val1 = _getComparibleValue(val1); + val2 = _getComparibleValue(val2); + if (typeof val1 !== typeof val2) { + return true; + } + return val1 != val2; +} +export function _isLess(val1, val2) { + val1 = _getComparibleValue(val1); + val2 = _getComparibleValue(val2); + if (val2 === null) { + return false; + } + if (val1 === null) { + return val2 !== null; + } + if (typeof val1 !== typeof val2) { + return typeof val1 < typeof val2; + } // boolean, number (+Dates), string + return val1 < val2; +} +export function _isLessOrEqual(val1, val2) { + val1 = _getComparibleValue(val1); + val2 = _getComparibleValue(val2); + if (val1 === null) { + return true; + } + else if (val2 === null) { + return false; + } + if (typeof val1 !== typeof val2) { + return typeof val1 < typeof val2; + } // boolean, number (+Dates), string + return val1 <= val2; +} +export function _isMore(val1, val2) { + val1 = _getComparibleValue(val1); + val2 = _getComparibleValue(val2); + if (val1 === null) { + return false; + } + else if (val2 === null) { + return true; + } + if (typeof val1 !== typeof val2) { + return typeof val1 > typeof val2; + } // boolean, number (+Dates), string + return val1 > val2; +} +export function _isMoreOrEqual(val1, val2) { + val1 = _getComparibleValue(val1); + val2 = _getComparibleValue(val2); + if (val1 === null) { + return val2 === null; + } + else if (val2 === null) { + return true; + } + if (typeof val1 !== typeof val2) { + return typeof val1 > typeof val2; + } // boolean, number (+Dates), string + return val1 >= val2; +} +export function _sortCompare(val1, val2) { + val1 = _getComparibleValue(val1); + val2 = _getComparibleValue(val2); + if (val1 === null && val2 !== null) { + return -1; + } + if (val1 !== null && val2 === null) { + return 1; + } + if (typeof val1 !== typeof val2) { + // boolean, number (+Dates), string + if (typeof val1 < typeof val2) { + return -1; + } + if (typeof val1 > typeof val2) { + return 1; + } + } + if (val1 < val2) { + return -1; + } + if (val1 > val2) { + return 1; + } + return 0; +} +export function _compareBinary(val1, val2) { + return val1.length === val2.length && val1.every((byte, index) => val2[index] === byte); +} +//# sourceMappingURL=typesafe-compare.js.map \ No newline at end of file diff --git a/dist/esm/btree/typesafe-compare.js.map b/dist/esm/btree/typesafe-compare.js.map new file mode 100644 index 0000000..4334fe7 --- /dev/null +++ b/dist/esm/btree/typesafe-compare.js.map @@ -0,0 +1 @@ +{"version":3,"file":"typesafe-compare.js","sourceRoot":"","sources":["../../../src/btree/typesafe-compare.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/btree/utils.js b/dist/esm/btree/utils.js new file mode 100644 index 0000000..1ec4fd8 --- /dev/null +++ b/dist/esm/btree/utils.js @@ -0,0 +1,38 @@ +export function _checkNewEntryArgs(key, recordPointer, metadataKeys, metadata) { + const storageTypesText = 'supported types are string, number, boolean, Date and undefined'; + const isStorableType = (val) => { + return ['number', 'string', 'boolean', 'bigint', 'undefined'].includes(typeof val) || val instanceof Date; + }; + if (!isStorableType(key)) { + return new TypeError(`key contains a value that cannot be stored. ${storageTypesText}`); + } + if (!(recordPointer instanceof Array || recordPointer instanceof Uint8Array)) { + return new TypeError('recordPointer must be a byte array or Uint8Array'); + } + if (recordPointer.length > 255) { + return new Error('Unable to store recordPointers larger than 255 bytes'); // binary restriction + } + // Check if all metadata keys are present and have valid data + try { + metadataKeys && metadataKeys.forEach(key => { + if (!(key in metadata)) { + throw new TypeError(`metadata must include key "${key}"`); + } + if (!isStorableType(typeof metadata[key])) { + throw new TypeError(`metadata "${key}" contains a value that cannot be stored. ${storageTypesText}`); + } + }); + } + catch (err) { + return err; + } +} +export const _appendToArray = (targetArray, arr2) => { + const n = 255; + let start = 0; + while (start < arr2.length) { + targetArray.push(...arr2.slice(start, start + n)); + start += n; + } +}; +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/dist/esm/btree/utils.js.map b/dist/esm/btree/utils.js.map new file mode 100644 index 0000000..c7cfa87 --- /dev/null +++ b/dist/esm/btree/utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/btree/utils.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,kBAAkB,CAAC,GAAqB,EAAE,aAAqC,EAAE,YAAsB,EAAE,QAA2B;IAChJ,MAAM,gBAAgB,GAAG,iEAAiE,CAAC;IAC3F,MAAM,cAAc,GAAG,CAAC,GAAqB,EAAE,EAAE;QAC7C,OAAO,CAAC,QAAQ,EAAC,QAAQ,EAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,IAAI,GAAG,YAAY,IAAI,CAAC;IAC1G,CAAC,CAAC;IACF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;QACtB,OAAO,IAAI,SAAS,CAAC,+CAA+C,gBAAgB,EAAE,CAAC,CAAC;KAC3F;IACD,IAAI,CAAC,CAAC,aAAa,YAAY,KAAK,IAAI,aAAa,YAAY,UAAU,CAAC,EAAE;QAC1E,OAAO,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC;KAC5E;IACD,IAAI,aAAa,CAAC,MAAM,GAAG,GAAG,EAAE;QAC5B,OAAO,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC,CAAC,qBAAqB;KAClG;IACD,6DAA6D;IAC7D,IAAI;QACA,YAAY,IAAI,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACvC,IAAI,CAAC,CAAC,GAAG,IAAI,QAAQ,CAAC,EAAE;gBACpB,MAAM,IAAI,SAAS,CAAC,8BAA8B,GAAG,GAAG,CAAC,CAAC;aAC7D;YACD,IAAI,CAAC,cAAc,CAAC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;gBACvC,MAAM,IAAI,SAAS,CAAC,aAAa,GAAG,6CAA6C,gBAAgB,EAAE,CAAC,CAAC;aACxG;QACL,CAAC,CAAC,CAAC;KACN;IACD,OAAM,GAAG,EAAE;QACP,OAAO,GAAG,CAAC;KACd;AACL,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,WAAsB,EAAE,IAAe,EAAE,EAAE;IACtE,MAAM,CAAC,GAAG,GAAG,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;QACxB,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QAClD,KAAK,IAAI,CAAC,CAAC;KACd;AACL,CAAC,CAAC"} \ No newline at end of file diff --git a/dist/esm/data-index/array-index-query-hint.js b/dist/esm/data-index/array-index-query-hint.js new file mode 100644 index 0000000..fa9b856 --- /dev/null +++ b/dist/esm/data-index/array-index-query-hint.js @@ -0,0 +1,23 @@ +import { IndexQueryHint } from './query-hint.js'; +export class ArrayIndexQueryHint extends IndexQueryHint { + static get types() { + return Object.freeze({ + missingValue: 'missing', + }); + } + constructor(type, value) { + super(type, value); + } + get description() { + const val = typeof this.value === 'string' ? `"${this.value}"` : this.value; + switch (this.type) { + case ArrayIndexQueryHint.types.missingValue: { + return `Value ${val} does not occur in the index, you might want to remove it from your query`; + } + default: { + return 'Uknown hint'; + } + } + } +} +//# sourceMappingURL=array-index-query-hint.js.map \ No newline at end of file diff --git a/dist/esm/data-index/array-index-query-hint.js.map b/dist/esm/data-index/array-index-query-hint.js.map new file mode 100644 index 0000000..d576da4 --- /dev/null +++ b/dist/esm/data-index/array-index-query-hint.js.map @@ -0,0 +1 @@ +{"version":3,"file":"array-index-query-hint.js","sourceRoot":"","sources":["../../../src/data-index/array-index-query-hint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,OAAO,mBAAoB,SAAQ,cAAc;IACnD,MAAM,KAAK,KAAK;QACZ,OAAO,MAAM,CAAC,MAAM,CAAC;YACjB,YAAY,EAAE,SAAS;SAC1B,CAAC,CAAC;IACP,CAAC;IAED,YAAY,IAAe,EAAE,KAAc;QACvC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,WAAW;QACX,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5E,QAAQ,IAAI,CAAC,IAAI,EAAE;YACf,KAAK,mBAAmB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBACzC,OAAO,SAAS,GAAG,2EAA2E,CAAC;aAClG;YACD,OAAO,CAAC,CAAC;gBACL,OAAO,aAAa,CAAC;aACxB;SACJ;IACL,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/esm/data-index/array-index.js b/dist/esm/data-index/array-index.js new file mode 100644 index 0000000..1de4208 --- /dev/null +++ b/dist/esm/data-index/array-index.js @@ -0,0 +1,252 @@ +import { BlacklistingSearchOperator } from '../btree/index.js'; +import { DataIndex } from './data-index.js'; +import { VALUE_TYPES } from '../node-value-types.js'; +import { IndexQueryResults } from './query-results.js'; +import { IndexQueryStats } from './query-stats.js'; +import { ArrayIndexQueryHint } from './array-index-query-hint.js'; +/** + * An array index allows all values in an array node to be indexed and searched + */ +export class ArrayIndex extends DataIndex { + constructor(storage, path, key, options) { + if (key === '{key}') { + throw new Error('Cannot create array index on node keys'); + } + super(storage, path, key, options); + } + // get fileName() { + // return super.fileName.slice(0, -4) + '.array.idx'; + // } + get type() { + return 'array'; + } + async handleRecordUpdate(path, oldValue, newValue) { + const tmpOld = oldValue !== null && typeof oldValue === 'object' && this.key in oldValue ? oldValue[this.key] : null; + const tmpNew = newValue !== null && typeof newValue === 'object' && this.key in newValue ? newValue[this.key] : null; + let oldEntries; + if (tmpOld instanceof Array) { + // Only use unique values + oldEntries = tmpOld.reduce((unique, entry) => { + !unique.includes(entry) && unique.push(entry); + return unique; + }, []); + } + else { + oldEntries = []; + } + if (oldEntries.length === 0) { + // Add undefined entry to indicate empty array + oldEntries.push(undefined); + } + let newEntries; + if (tmpNew instanceof Array) { + // Only use unique values + newEntries = tmpNew.reduce((unique, entry) => { + !unique.includes(entry) && unique.push(entry); + return unique; + }, []); + } + else { + newEntries = []; + } + if (newEntries.length === 0) { + // Add undefined entry to indicate empty array + newEntries.push(undefined); + } + const removed = oldEntries.filter(entry => !newEntries.includes(entry)); + const added = newEntries.filter(entry => !oldEntries.includes(entry)); + const mutated = { old: {}, new: {} }; + Object.assign(mutated.old, oldValue); + Object.assign(mutated.new, newValue); + const promises = []; + removed.forEach(entry => { + mutated.old[this.key] = entry; + mutated.new[this.key] = null; + const p = super.handleRecordUpdate(path, mutated.old, mutated.new); + promises.push(p); + }); + added.forEach(entry => { + mutated.old[this.key] = null; + mutated.new[this.key] = entry; + const p = super.handleRecordUpdate(path, mutated.old, mutated.new); + promises.push(p); + }); + await Promise.all(promises); + } + build() { + return super.build({ + addCallback: (add, array, recordPointer, metadata) => { + if (!(array instanceof Array) || array.length === 0) { + // Add undefined entry to indicate empty array + add(undefined, recordPointer, metadata); + return []; + } + // index unique items only + array.reduce((unique, value) => { + !unique.includes(value) && unique.push(value); + return unique; + }, []).forEach(value => { + add(value, recordPointer, metadata); + }); + return array; + }, + valueTypes: [VALUE_TYPES.ARRAY], + }); + } + static get validOperators() { + // This is the only special index that does not use prefixed operators + // because these can also be used to query non-indexed arrays (but slower, of course..) + return ['contains', '!contains']; + } + get validOperators() { + return ArrayIndex.validOperators; + } + /** + * @param op "contains" or "!contains" + * @param val value to search for + */ + async query(op, val, options) { + if (op instanceof BlacklistingSearchOperator) { + throw new Error(`Not implemented: Can't query array index with blacklisting operator yet`); + } + if (!ArrayIndex.validOperators.includes(op)) { + throw new Error(`Array indexes can only be queried with operators ${ArrayIndex.validOperators.map(op => `"${op}"`).join(', ')}`); + } + if (options) { + this.storage.debug.warn('Not implemented: query options for array indexes are ignored'); + } + // Check cache + const cache = this.cache(op, val); + if (cache) { + // Use cached results + return cache; + } + const stats = new IndexQueryStats('array_index_query', val, true); + if ((op === 'contains' || op === '!contains') && val instanceof Array && val.length === 0) { + // Added for #135: empty compare array for contains/!contains must match all values + stats.type = 'array_index_scan'; + const results = await super.query(new BlacklistingSearchOperator((_) => [])); + stats.stop(results.length); + results.filterKey = this.key; + results.stats = stats; + // Don't cache results + return results; + } + else if (op === 'contains') { + if (val instanceof Array) { + // recipesIndex.query('contains', ['egg','bacon']) + // Get result count for each value in array + const countPromises = val.map(value => { + const wildcardIndex = typeof value !== 'string' ? -1 : ~(~value.indexOf('*') || ~value.indexOf('?')); + const valueOp = ~wildcardIndex ? 'like' : '=='; + const step = new IndexQueryStats('count', value, true); + stats.steps.push(step); + return this.count(valueOp, value) + .then(count => { + step.stop(count); + return { value, count }; + }); + }); + const counts = await Promise.all(countPromises); + // Start with the smallest result set + counts.sort((a, b) => { + if (a.count < b.count) { + return -1; + } + else if (a.count > b.count) { + return 1; + } + return 0; + }); + let results; + if (counts[0].count === 0) { + stats.stop(0); + this.storage.debug.log(`Value "${counts[0].value}" not found in index, 0 results for query ${op} ${val}`); + results = new IndexQueryResults(0); + results.filterKey = this.key; + results.stats = stats; + // Add query hints for each unknown item + counts.forEach(c => { + if (c.count === 0) { + const hint = new ArrayIndexQueryHint(ArrayIndexQueryHint.types.missingValue, c.value); + results.hints.push(hint); + } + }); + // Cache the empty result set + this.cache(op, val, results); + return results; + } + const allValues = counts.map(c => c.value); + // Query 1 value, then filter results further and further + // Start with the smallest result set + const queryValue = (value, filter) => { + const wildcardIndex = typeof value !== 'string' ? -1 : ~(~value.indexOf('*') || ~value.indexOf('?')); + const valueOp = ~wildcardIndex ? 'like' : '=='; + return super.query(valueOp, value, { filter }) + .then(results => { + stats.steps.push(results.stats); + return results; + }); + }; + let valueIndex = 0; + // let resultsPerValue = new Array(values.length); + const nextValue = async () => { + const value = allValues[valueIndex]; + const fr = await queryValue(value, results); + results = fr; + valueIndex++; + if (results.length === 0 || valueIndex === allValues.length) { + return; + } + await nextValue(); + }; + await nextValue(); + results.filterKey = this.key; + stats.stop(results.length); + results.stats = stats; + // Cache results + delete results.entryValues; // No need to cache these. Free the memory + this.cache(op, val, results); + return results; + } + else { + // Single value query + const valueOp = typeof val === 'string' && (val.includes('*') || val.includes('?')) + ? 'like' + : '=='; + const results = await super.query(valueOp, val); + stats.steps.push(results.stats); + results.stats = stats; + delete results.entryValues; + return results; + } + } + else if (op === '!contains') { + // DISABLED executing super.query('!=', val) because it returns false positives + // for arrays that "!contains" val, but does contain other values... + // Eg: an indexed array value of: ['bacon', 'egg', 'toast', 'sausage'], + // when executing index.query('!contains', 'bacon'), + // it will falsely match that record because the 2nd value 'egg' + // matches the filter ('egg' is not 'bacon') + // NEW: BlacklistingSearchOperator will take all values in the index unless + // they are blacklisted along the way. Our callback determines whether to blacklist + // an entry's values, which we'll do if its key matches val + const customOp = new BlacklistingSearchOperator(entry => { + const blacklist = val === entry.key + || (val instanceof Array && val.includes(entry.key)); + if (blacklist) { + return entry.values; + } + }); + stats.type = 'array_index_blacklist_scan'; + const results = await super.query(customOp); + stats.stop(results.length); + results.filterKey = this.key; + results.stats = stats; + // Cache results + this.cache(op, val, results); + return results; + } + } +} +//# sourceMappingURL=array-index.js.map \ No newline at end of file diff --git a/dist/esm/data-index/array-index.js.map b/dist/esm/data-index/array-index.js.map new file mode 100644 index 0000000..0ce1b8e --- /dev/null +++ b/dist/esm/data-index/array-index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"array-index.js","sourceRoot":"","sources":["../../../src/data-index/array-index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/data-index/data-index.js b/dist/esm/data-index/data-index.js new file mode 100644 index 0000000..6f3f6e0 --- /dev/null +++ b/dist/esm/data-index/data-index.js @@ -0,0 +1,1917 @@ +import { PathInfo, Utils, ID, ColorStyle, Transport } from 'acebase-core'; +import { ThreadSafe } from '../thread-safe.js'; +import { pfs } from '../promise-fs/index.js'; +import { BPlusTreeBuilder, BPlusTree, BinaryBPlusTree, BinaryWriter, BinaryReader, BlacklistingSearchOperator } from '../btree/index.js'; +import { getValueType, VALUE_TYPES } from '../node-value-types.js'; +import quickSort from '../quicksort.js'; +import { IndexQueryStats } from './query-stats.js'; +import { IndexQueryResult, IndexQueryResults } from './query-results.js'; +const { compareValues, getChildValues, numberToBytes, bytesToNumber, encodeString, decodeString } = Utils; +const DISK_BLOCK_SIZE = 4096; // use 512 for older disks +const FILL_FACTOR = 50; // leave room for inserts +const INDEX_INFO_VALUE_TYPE = { + UNDEFINED: 0, + STRING: 1, + NUMBER: 2, + BOOLEAN: 3, + ARRAY: 4, + // Maybe in the future: + // OBJECT: 5, +}; +function _createRecordPointer(wildcards, keyOrIndex) { + // binary layout: + // record_pointer = wildcards_info, key_info, DEPRECATED: record_location + // wildcards_info = wildcards_length, wildcards + // wildcards_length = 1 byte (nr of wildcard values) + // wildcards = wilcard[wildcards_length] + // wildcard = wilcard_length, wilcard_bytes + // wildcard_length = 1 byte + // wildcard_value = byte[wildcard_length] (ASCII char codes) + // key_info = key_length, key_bytes + // key_length = 1 byte + // key_bytes = byte[key_length] (ASCII char codes) + // NOT USED, DEPRECATED: + // record_location = page_nr, record_nr + // page_nr = 4 byte number + // record_nr = 2 byte number + const recordPointer = [wildcards.length]; // wildcards_length + for (let i = 0; i < wildcards.length; i++) { + const wildcard = wildcards[i]; + recordPointer.push(wildcard.length); // wildcard_length + // wildcard_bytes: + for (let j = 0; j < wildcard.length; j++) { + recordPointer.push(wildcard.charCodeAt(j)); + } + } + const key = typeof keyOrIndex === 'number' ? `[${keyOrIndex}]` : keyOrIndex; + recordPointer.push(key.length); // key_length + // key_bytes: + for (let i = 0; i < key.length; i++) { + recordPointer.push(key.charCodeAt(i)); + } + // // page_nr: + // recordPointer.push((address.pageNr >> 24) & 0xff); + // recordPointer.push((address.pageNr >> 16) & 0xff); + // recordPointer.push((address.pageNr >> 8) & 0xff); + // recordPointer.push(address.pageNr & 0xff); + // // record_nr: + // recordPointer.push((address.recordNr >> 8) & 0xff); + // recordPointer.push(address.recordNr & 0xff); + return recordPointer; +} +function _parseRecordPointer(path, recordPointer) { + if (recordPointer.length === 0) { + throw new Error('Invalid record pointer length'); + } + const wildcardsLength = recordPointer[0]; + const wildcards = []; + let index = 1; + for (let i = 0; i < wildcardsLength; i++) { + let wildcard = ''; + const length = recordPointer[index]; + for (let j = 0; j < length; j++) { + wildcard += String.fromCharCode(recordPointer[index + j + 1]); + } + wildcards.push(wildcard); + index += length + 1; + } + const keyLength = recordPointer[index]; + let key = ''; + for (let i = 0; i < keyLength; i++) { + key += String.fromCharCode(recordPointer[index + i + 1]); + } + index += keyLength + 1; + // const pageNr = recordPointer[index] << 24 | recordPointer[index+1] << 16 | recordPointer[index+2] << 8 | recordPointer[index+3]; + // index += 4; + // const recordNr = recordPointer[index] << 8 | recordPointer[index+1]; + if (wildcards.length > 0) { + let i = 0; + path = path.replace(/\*/g, () => { + const wildcard = wildcards[i]; + i++; + return wildcard; + }); + } + // return { key, pageNr, recordNr, address: new NodeAddress(`${path}/${key}`, pageNr, recordNr) }; + const keyOrIndex = key[0] === '[' && key.slice(-1) === ']' ? parseInt(key.slice(1, -1)) : key; + return { key: keyOrIndex, path: `${path}/${key}`, wildcards }; +} +export class DataIndex { + /** + * Creates a new index + */ + constructor(storage, path, key, options = {}) { + this.storage = storage; + this.state = DataIndex.STATE.INIT; + this._buildError = null; + this._cache = new Map(); + this._cacheTimeoutSettings = { + // default: 1 minute query cache + duration: 60 * 1000, + sliding: true, + }; + if (['string', 'undefined'].indexOf(typeof options.include) < 0 && !(options.include instanceof Array)) { + throw new Error(`includeKeys argument must be a string, an Array of strings, or undefined. Passed type=${typeof options.include}`); + } + if (typeof options.include === 'string') { + options.include = [options.include]; + } + const pathKeys = PathInfo.getPathKeys(path).map(key => typeof key === 'string' && key.startsWith('$') ? '*' : key); + this.path = (new PathInfo(pathKeys)).path; // path.replace(/\/\*$/, ""); // Remove optional trailing "/*" + this.key = key; + this.caseSensitive = options.caseSensitive === true; + this.textLocale = options.textLocale || 'en'; + this.textLocaleKey = options.textLocaleKey; + this.includeKeys = options.include || []; + // this.enableReverseLookup = false; + this.indexMetadataKeys = []; + this._buildError = null; + this._updateQueue = []; + this.trees = { + 'default': { + fileIndex: 0, + byteLength: 0, + class: 'BPlusTree', + version: 1, + entries: 0, + values: 0, + }, + }; + } + static get STATE() { + return { + INIT: 'init', + READY: 'ready', + BUILD: 'build', + REBUILD: 'rebuild', + ERROR: 'error', + REMOVED: 'removed', + CLOSED: 'closed', + }; + } + get allMetadataKeys() { + return this.includeKeys.concat(this.indexMetadataKeys); + } + setCacheTimeout(seconds, sliding = false) { + this._cacheTimeoutSettings = { + duration: seconds * 1000, + sliding, + }; + } + cache(op, param, results) { + const val = JSON.stringify(Transport.serialize2(param)); // Make object and array params cachable too + if (typeof results === 'undefined') { + // Get from cache + let cache; + if (this._cache.has(op) && this._cache.get(op).has(val)) { + cache = this._cache.get(op).get(val); + } + if (cache) { + cache.reads++; + if (this._cacheTimeoutSettings.sliding) { + cache.extendLife(); + } + return cache.results; + } + return null; + } + else { + // Set cache + let opCache = this._cache.get(op); + if (!opCache) { + opCache = new Map(); + this._cache.set(op, opCache); + } + // let clear = () => { + // // this.storage.debug.log(`Index ${this.description}, cache clean for ${op} "${val}"`); + // opCache.delete(val); + // } + const scheduleClear = () => { + const timeout = setTimeout(() => opCache.delete(val), this._cacheTimeoutSettings.duration); + timeout.unref && timeout.unref(); + return timeout; + }; + const cache = { + results, + added: Date.now(), + reads: 0, + timeout: scheduleClear(), + extendLife: () => { + // this.storage.debug.log(`Index ${this.description}, cache lifetime extended for ${op} "${val}". reads: ${cache.reads}`); + clearTimeout(cache.timeout); + cache.timeout = scheduleClear(); + }, + }; + opCache.set(val, cache); + // this.storage.debug.log(`Index ${this.description}, cached ${results.length} results for ${op} "${val}"`); + } + } + async delete() { + const idx = await this._getTree('exclusive'); + await idx.close(); + const filePath = this.fileName; // `${this.storage.settings.path}/${this.storage.name}.acebase/${this.fileName}`; + await pfs.rm(filePath); + this.state = DataIndex.STATE.REMOVED; + idx.release(); + } + async close() { + const idx = await this._getTree('exclusive'); + await idx.close(); + this.state = DataIndex.STATE.CLOSED; + idx.release(); + } + /** + * Reads an existing index from a file + * @param storage Used storage engine + * @param fileName + */ + static async readFromFile(storage, fileName) { + // Read an index from file + const filePath = fileName.includes('/') ? fileName : `${storage.settings.path}/${storage.name}.acebase/${fileName}`; + const fd = await pfs.open(filePath, pfs.flags.read); + try { + // Read signature + let result = await pfs.read(fd, Buffer.alloc(10)); + // Check signature + if (result.buffer.toString() !== 'ACEBASEIDX') { + throw new Error(`File "${filePath}" is not an AceBase index. If you get this error after updating acebase, delete the index file and rebuild it`); + } + // Read layout_version + result = await pfs.read(fd, Buffer.alloc(1)); + const versionNr = result.buffer[0]; + if (versionNr !== 1) { + throw new Error(`Index "${filePath}" version ${versionNr} is not supported by this version of AceBase. npm update your acebase packages`); + } + // Read header_length + result = await pfs.read(fd, Buffer.alloc(4)); + const headerLength = (result.buffer[0] << 24) | (result.buffer[1] << 16) | (result.buffer[2] << 8) | result.buffer[3]; + // Read header + result = await pfs.read(fd, Buffer.alloc(headerLength - 11)); + // Process header + const header = Uint8Array.from(result.buffer); + let index = 0; + const readKey = () => { + const keyLength = header[index]; + let keyName = ''; + index++; + for (let j = 0; j < keyLength; j++) { + keyName += String.fromCharCode(header[index + j]); + } + index += keyLength; + return keyName; + }; + const readValue = () => { + const valueType = header[index]; + index++; + let valueLength = 0; + if (valueType === INDEX_INFO_VALUE_TYPE.UNDEFINED) { + valueLength = 0; + } + else if (valueType === INDEX_INFO_VALUE_TYPE.BOOLEAN) { + // boolean has no value_length + valueLength = 1; + } + else { + valueLength = (header[index] << 8) | header[index + 1]; + index += 2; + } + let value; + if (valueType === INDEX_INFO_VALUE_TYPE.STRING) { + value = decodeString(header.slice(index, index + valueLength)); + } + else if (valueType === INDEX_INFO_VALUE_TYPE.NUMBER) { + value = bytesToNumber(header.slice(index, index + valueLength)); + } + else if (valueType === INDEX_INFO_VALUE_TYPE.BOOLEAN) { + value = header[index] === 1; + } + else if (valueType === INDEX_INFO_VALUE_TYPE.ARRAY) { + const arr = []; + for (let j = 0; j < valueLength; j++) { + arr.push(readValue()); + } + return arr; + } + // Maybe in the future: + // else if (valueType === INDEX_INFO_VALUE_TYPE.OBJECT) { + // const obj = {} as Record; + // for (let j = 0; j < valueLength; j++) { + // const prop = readKey(); + // const val = readValue() as IndexInfoPrimitiveValue; + // obj[prop] = val; + // } + // return obj; + // } + index += valueLength; + return value; + }; + const readInfo = () => { + const infoCount = header[index]; + index++; + const info = {}; + for (let i = 0; i < infoCount; i++) { + const key = readKey(); + const value = readValue(); + info[key] = value; + } + return info; + }; + const indexInfo = readInfo(); + const indexOptions = { + caseSensitive: indexInfo.cs, + textLocale: indexInfo.locale, + textLocaleKey: indexInfo.localeKey, + include: indexInfo.include, + }; + if (!(indexInfo.type in DataIndex.KnownIndexTypes)) { + throw new Error(`Unknown index type ${indexInfo.type}`); + } + const Index = DataIndex.KnownIndexTypes[indexInfo.type]; + const dataIndex = new Index(storage, indexInfo.path, indexInfo.key, indexOptions); + dataIndex._fileName = filePath; + // trees_info: + const treesCount = header[index]; + index++; + for (let i = 0; i < treesCount; i++) { + // tree_name: + const treeName = readKey(); + // treeName is "default" + const treeInfo = dataIndex.trees[treeName] = {}; + // file_index: + treeInfo.fileIndex = (header[index] << 24) | (header[index + 1] << 16) | (header[index + 2] << 8) | header[index + 3]; + index += 4; + // byte_length: + treeInfo.byteLength = (header[index] << 24) | (header[index + 1] << 16) | (header[index + 2] << 8) | header[index + 3]; + index += 4; + const info = readInfo(); + // info has: class, version, entries, values + Object.assign(treeInfo, info); //treeInfo.info = info; + } + await pfs.close(fd); + dataIndex.state = DataIndex.STATE.READY; + return dataIndex; + } + catch (err) { + storage.debug.error(err); + pfs.close(fd); + throw err; + } + } + get type() { + return 'normal'; + } + get fileName() { + if (this._fileName) { + // Set by readFromFile + return this._fileName; + } + const dir = `${this.storage.settings.path}/${this.storage.name}.acebase`; + const storagePrefix = this.storage.settings.type !== 'data' ? `[${this.storage.settings.type}]-` : ''; + const escape = (key) => key.replace(/\//g, '~').replace(/\*/g, '#'); + const escapedPath = escape(this.path); + const escapedKey = escape(this.key); + const includes = this.includeKeys.length > 0 + ? ',' + this.includeKeys.map(key => escape(key)).join(',') + : ''; + const extension = (this.type !== 'normal' ? `${this.type}.` : '') + 'idx'; + return `${dir}/${storagePrefix}${escapedPath}-${escapedKey}${includes}.${extension}`; + } + get description() { + const keyPath = `/${this.path}/*/${this.key}`; + const includedKeys = this.includeKeys.length > 0 ? '+' + this.includeKeys.join(',') : ''; + let description = `${keyPath}${includedKeys}`; + if (this.type !== 'normal') { + description += ` (${this.type})`; + } + return description; + } + _getWildcardKeys(path) { + const pathKeys = PathInfo.getPathKeys(path); + const indexKeys = PathInfo.getPathKeys(this.path); + return indexKeys.reduce((wildcards, key, i) => { + if (key === '*') { + wildcards.push(pathKeys[i]); + } + return wildcards; + }, []); + } + // _getRevLookupKey(path) { + // const key = getPathInfo(path).key; + // const wildcardKeys = this._getWildcardKeys(path); + // return `:${wildcardKeys.join(':')}${wildcardKeys.length > 0 ? ':' : ''}${key}:`; + // } + // _updateReverseLookupKey(path, oldData, newData, metadata) { + // if (!this.enableReverseLookup) { + // throw new Error(`This index does not support reverse lookups`) + // } + // function areEqual(val1, val2) { + // return val1.length === val2.length && val1.every((byte, index) => val2[index] === byte); + // } + // if (areEqual(oldData, newData)) { + // // Everything remains the same + // return; + // } + // const revLookupKey = this._getRevLookupKey(path); + // return this._updateTree(path, revLookupKey, revLookupKey, oldData, newData, metadata); + // } + _updateTree(path, oldValue, newValue, oldRecordPointer, newRecordPointer, metadata) { + const canBeIndexed = ['number', 'boolean', 'string', 'bigint'].indexOf(typeof newValue) >= 0 || newValue instanceof Date; + const operations = []; + if (oldValue !== null) { + const op = BinaryBPlusTree.TransactionOperation.remove(oldValue, oldRecordPointer); + operations.push(op); + } + if (newValue !== null && canBeIndexed) { + const op = BinaryBPlusTree.TransactionOperation.add(newValue, newRecordPointer, metadata); + operations.push(op); + } + return this._processTreeOperations(path, operations); + } + async _rebuild(idx) { + // Rebuild by writing to temp file + const newIndexFile = this.fileName + '.tmp'; + const fd = await pfs.open(newIndexFile, pfs.flags.write); + const treeStatistics = { + byteLength: 0, + totalEntries: 0, + totalValues: 0, + }; + const headerStats = { + written: false, + length: 0, + promise: null, + updateTreeLength: undefined, //Awaited>['treeLengthCallback'], + }; + const writer = async (data, index) => { + if (!headerStats.written) { + // Write header first, or wait until done + if (!headerStats.promise) { + headerStats.promise = this._writeIndexHeader(fd, treeStatistics).then(result => { + headerStats.written = true; + headerStats.length = result.length; + headerStats.updateTreeLength = result.treeLengthCallback; + }); + } + await headerStats.promise; + } + await pfs.write(fd, data, 0, data.length, headerStats.length + index); + }; + this.state = DataIndex.STATE.REBUILD; + try { + // this._fst = []; // Reset fst memory + await idx.tree.rebuild(BinaryWriter.forFunction(writer), { treeStatistics }); + await idx.close(); + await headerStats.updateTreeLength(treeStatistics.byteLength); + await pfs.close(fd); + const renameFile = async (retry = 0) => { + try { + // rename new file, overwriting the old file + await pfs.rename(newIndexFile, this.fileName); + } + catch (err) { + // Occasionally getting EPERM "operation not permitted" errors lately with Node 16. + // Fix: try again after 100ms, up to 10 times + if (err.code === 'EPERM' && retry < 10) { + await new Promise(resolve => setTimeout(resolve, 100)); + await renameFile(retry + 1); + } + throw err; + } + }; + await renameFile(); + this.state = DataIndex.STATE.READY; + idx.release(); + } + catch (err) { + this.storage.debug.error('Index rebuild error: ', err); + this.state = DataIndex.STATE.ERROR; + this._buildError = err; + idx.release(); + throw err; + } + } + async _processTreeOperations(path, operations) { + const startTime = Date.now(); + if (this._buildError) { + throw new Error('Cannot update index because there was an error building it'); + } + let idx = await this._getTree('exclusive'); + // const oldEntry = tree.find(keyValues.oldValue); + const go = async (retry = 0) => { + const opsCount = operations.length; + try { + await idx.tree.transaction(operations); + // Index updated + idx.release(); + return false; // "not rebuilt" + } + catch (err) { + // Could not update index --> leaf full? + this.storage.debug.verbose(`Could not update index ${this.description}: ${err.message}`.colorize(ColorStyle.yellow)); + if (retry > 0 && opsCount === operations.length) { + throw new Error(`DEV ERROR: unable to process operations because tree was rebuilt, and that didn't help?! --> ${err.stack}`); + } + await this._rebuild(idx); // rebuild calls idx.close() and .release() + // Process left-over operations + this.storage.debug.verbose('Index was rebuilt, retrying pending operations'); + idx = await this._getTree('exclusive'); + await go(retry + 1); + return true; // "rebuilt" + } + }; + const rebuilt = await go(); + // this.storage.debug.log(`Released update lock on index ${this.description}`.colorize(ColorStyle.blue)); + const doneTime = Date.now(); + const ms = doneTime - startTime; + const duration = ms < 5000 ? ms + 'ms' : Math.round(ms / 1000) + 's'; + this.storage.debug.verbose(`Index ${this.description} was ${rebuilt ? 'rebuilt' : 'updated'} successfully for "/${path}", took ${duration}`.colorize(ColorStyle.green)); + // Process any queued updates + return await this._processUpdateQueue(); + } + async _processUpdateQueue() { + const queue = this._updateQueue.splice(0); + if (queue.length === 0) { + return; + } + // Invalidate query cache + this._cache.clear(); // TODO: check which cache results should be adjusted intelligently + // Process all queued items + const promises = queue.map(update => { + return this._updateTree(update.path, update.oldValue, update.newValue, update.recordPointer, update.recordPointer, update.metadata) + .then(() => { + update.resolve(); // Resolve waiting promise + }) + .catch(err => { + update.reject(err); // Reject waiting promise + // Do not throw again + }); + }); + await Promise.all(promises); + } + async handleRecordUpdate(path, oldValue, newValue, indexMetadata) { + const getValues = (key, oldValue, newValue) => PathInfo.getPathKeys(key).reduce((values, key) => getChildValues(key, values.oldValue, values.newValue), { oldValue, newValue }); + const updatedKey = PathInfo.get(path).key; + if (typeof updatedKey === 'number') { + throw new Error('Not implemented: updated key is a number!'); + } + const keyValues = this.key === '{key}' + ? { oldValue: oldValue === null ? null : updatedKey, newValue: newValue === null ? null : updatedKey } + : getValues(this.key, oldValue, newValue); + const includedValues = this.includeKeys.map(key => getValues(key, oldValue, newValue)); + if (!this.caseSensitive) { + // Convert to locale aware lowercase + const allValues = [keyValues].concat(includedValues); + allValues.forEach(values => { + if (typeof values.oldValue === 'string') { + values.oldValue = values.oldValue.toLocaleLowerCase(this.textLocale); + } + if (typeof values.newValue === 'string') { + values.newValue = values.newValue.toLocaleLowerCase(this.textLocale); + } + }); + } + const keyValueChanged = compareValues(keyValues.oldValue, keyValues.newValue) !== 'identical'; + const includedValuesChanged = includedValues.some(values => compareValues(values.oldValue, values.newValue) !== 'identical'); + if (!keyValueChanged && !includedValuesChanged) { + return; + } + const wildcardKeys = this._getWildcardKeys(path); + const recordPointer = _createRecordPointer(wildcardKeys, updatedKey); + const metadata = (() => { + const obj = {}; + indexMetadata && Object.assign(obj, indexMetadata); + if (typeof newValue === 'object' && newValue !== null) { + this.includeKeys.forEach(key => obj[key] = newValue[key]); + } + return obj; + })(); + if (this.state === DataIndex.STATE.ERROR) { + throw new Error(`Cannot update index ${this.description}: it's in the error state: ${this._buildError?.stack}`); + } + else if (this.state === DataIndex.STATE.READY) { + // Invalidate query cache + this._cache.clear(); + // Update the tree + return await this._updateTree(path, keyValues.oldValue, keyValues.newValue, recordPointer, recordPointer, metadata); + } + else { + this.storage.debug.verbose(`Queueing index ${this.description} update for "/${path}"`); + // Queue the update + const update = { + path, + oldValue: keyValues.oldValue, + newValue: keyValues.newValue, + recordPointer, + metadata, + resolve: null, + reject: null, + }; + // Create a promise that resolves once the queued item has processed + const p = new Promise((resolve, reject) => { + update.resolve = resolve; + update.reject = reject; + }) + .catch(err => { + this.storage.debug.error(`Unable to process queued update for "/${path}" on index ${this.description}:`, err); + }); + this._updateQueue.push(update); + //return p; // Don't wait for p, prevents deadlock when tree is rebuilding + } + } + async _lock(mode = 'exclusive', timeout = 60000) { + return ThreadSafe.lock(this.fileName, { shared: mode === 'shared', timeout }); //, timeout: 15 * 60000 (for debugging) + } + async count(op, val) { + if (!this.caseSensitive) { + // Convert to locale aware lowercase + if (typeof val === 'string') { + val = val.toLocaleLowerCase(this.textLocale); + } + else if (val instanceof Array) { + val = val.map(val => { + if (typeof val === 'string') { + return val.toLocaleLowerCase(this.textLocale); + } + return val; + }); + } + } + const cacheKey = op + '{count}'; + const cache = this.cache(cacheKey, val); + if (cache) { + // Cached count, saves time! + return cache; + } + const idx = await this._getTree('shared'); + const result = await idx.tree.search(op, val, { count: true, keys: true, values: false }); + idx.release(); + this.cache(cacheKey, val, result.valueCount); + return result.valueCount; + } + async take(skip, take, options = {}) { + const ascending = options.ascending !== false; + const sort = options.metadataSort?.length > 0 ? options.metadataSort : []; + sort.forEach(s => { + if (!this.allMetadataKeys.includes(s.key)) { + throw new Error(`Cannot sort on metadata key ${s.key} because it is not present in index ${this.fileName}`); + } + }); + const cacheKey = JSON.stringify({ skip, take, options }); + const cache = this.cache('take', cacheKey); + if (cache) { + return cache; + } + const stats = new IndexQueryStats('take', { skip, take, ascending }, true); + const idx = await this._getTree('shared'); + const results = new IndexQueryResults(); //[]; + results.filterKey = this.key; + let skipped = 0; + let leaf = await (ascending ? idx.tree.getFirstLeaf() : idx.tree.getLastLeaf()); + do { + if (!ascending) { + leaf.entries.reverse(); + } + for (let i = 0; i < leaf.entries.length && results.length < take; i++) { + const entry = leaf.entries[i]; + const value = entry.key; + if (sort.length > 0 && entry.totalValues > 1 && skipped + entry.totalValues > skip) { + // Sort values on given metadata first + if (leaf.hasExtData && !leaf.extData.loaded) { + await leaf.extData.load(); + } + const applySort = (index, a, b) => { + const { key, ascending } = sort[index]; + if (a.metadata[key] < b.metadata[key]) { + return ascending ? -1 : 1; + } + else if (a.metadata[key] > b.metadata[key]) { + return ascending ? 1 : -1; + } + else if (index + 1 === sort.length) { + return 1; + } + return applySort(index + 1, a, b); + }; + entry.values.sort((a, b) => applySort(0, a, b)); + } + for (let j = 0; j < entry.totalValues && results.length < take; j++) { + if (skipped < skip) { + skipped++; + continue; + } + if (leaf.hasExtData && !leaf.extData.loaded) { + await leaf.extData.load(); + } + const entryValue = entry.values[j]; + const recordPointer = _parseRecordPointer(this.path, entryValue.recordPointer); + const metadata = entryValue.metadata; + const result = new IndexQueryResult(recordPointer.key, recordPointer.path, value, metadata); + results.push(result); + } + } + leaf = results.length === take + ? null + : await (ascending ? leaf.getNext?.() : leaf.getPrevious?.()); + } while (leaf); + idx.release(); + stats.stop(results.length); + results.stats = stats; + this.cache('take', cacheKey, results); + return results; + } + static get validOperators() { + return ['<', '<=', '==', '!=', '>=', '>', 'exists', '!exists', 'between', '!between', 'like', '!like', 'matches', '!matches', 'in', '!in']; + } + get validOperators() { + return DataIndex.validOperators; + } + async query(op, val, options = {}) { + if (!(op instanceof BlacklistingSearchOperator) && !DataIndex.validOperators.includes(op)) { + throw new TypeError(`Cannot use operator "${op}" to query index "${this.description}"`); + } + if (!this.caseSensitive) { + // Convert to locale aware lowercase + if (typeof val === 'string') { + val = val.toLocaleLowerCase(this.textLocale); + } + else if (val instanceof Array) { + val = val.map(val => { + if (typeof val === 'string') { + return val.toLocaleLowerCase(this.textLocale); + } + return val; + }); + } + } + const stats = new IndexQueryStats('query', { op, val }, true); + let entries; // ; + const isCacheable = !(op instanceof BlacklistingSearchOperator); + const cache = isCacheable && this.cache(op, val); + if (cache) { + entries = cache; + } + else { + const idx = await this._getTree('shared'); + const searchOptions = { + entries: true, + // filter: options.filter && options.filter.treeEntries // Don't let tree apply filter, so we can cache results before filtering ourself + }; + const result = await idx.tree.search(op, val, searchOptions); + entries = result.entries; + idx.release(); + // Cache entries + isCacheable && this.cache(op, val, entries); + } + const results = new IndexQueryResults(); + results.filterKey = this.key; + results.entryValues = []; + if (options.filter) { + const filterStep = new IndexQueryStats('filter', { + entries: entries.length, + entryValues: entries.reduce((total, entry) => total + entry.values.length, 0), + filterValues: options.filter.entryValues.length, + }, true); + stats.steps.push(filterStep); + let values = []; + const valueEntryIndexes = []; + entries.forEach(entry => { + valueEntryIndexes.push(values.length); + values = values.concat(entry.values); + }); + const filterValues = options.filter.entryValues; + // Pre-process recordPointers to speed up matching + const preProcess = (values, tree = false) => { + if (tree && values.rpTree) { + return; + } + const builder = tree ? new BPlusTreeBuilder(true, 100) : null; + for (let i = 0; i < values.length; i++) { + const val = values[i]; + let rp = val.rp || ''; + if (rp === '') { + for (let j = 0; j < val.recordPointer.length; j++) { + rp += val.recordPointer[j].toString(36); + } + val.rp = rp; + } + if (tree && !builder.list.has(rp)) { + builder.add(rp, [i]); + } + } + if (tree) { + values.rpTree = builder.create(); + } + }; + // preProcess(values); + // preProcess(filterValues); + // Loop through smallest set + const smallestSet = filterValues.length < values.length ? filterValues : values; + preProcess(smallestSet, false); + const otherSet = smallestSet === filterValues ? values : filterValues; + preProcess(otherSet, true); + // TODO: offload filtering from event loop to stay responsive + for (let i = 0; i < smallestSet.length; i++) { + const value = smallestSet[i]; + // Find in other set + let match = null; + let matchIndex; + const tree = otherSet.rpTree; + const rpEntryValue = tree.find(value.rp); + if (rpEntryValue) { + const j = rpEntryValue.recordPointer[0]; + match = smallestSet === values ? value : otherSet[j]; + matchIndex = match === value ? i : j; + } + if (match) { + const recordPointer = _parseRecordPointer(this.path, match.recordPointer); + const metadata = match.metadata; + const entry = entries[valueEntryIndexes.findIndex((entryIndex, i, arr) => i + 1 === arr.length || (entryIndex <= matchIndex && arr[i + 1] > matchIndex))]; + const result = new IndexQueryResult(recordPointer.key, recordPointer.path, entry.key, metadata); + // result.entry = entry; + results.push(result); + results.entryValues.push(match); + } + } + filterStep.stop({ results: results.length, values: results.entryValues.length }); + } + else { + // No filter, add all (unique) results + const uniqueRecordPointers = new Set(); + entries.forEach(entry => { + entry.values.forEach(value => { + const recordPointer = _parseRecordPointer(this.path, value.recordPointer); + if (!uniqueRecordPointers.has(recordPointer.path)) { + // If a single recordPointer exists in multiple entries (can happen with eg 'like' queries), + // only add the first one, ignore others (prevents duplicate results!) + uniqueRecordPointers.add(recordPointer.path); + const metadata = value.metadata; + const result = new IndexQueryResult(recordPointer.key, recordPointer.path, entry.key, metadata); + // result.entry = entry; + results.push(result); + results.entryValues.push(value); + } + }); + }); + uniqueRecordPointers.clear(); // Help GC + } + stats.stop(results.length); + results.stats = stats; + return results; + } + async build(options) { + if ([DataIndex.STATE.BUILD, DataIndex.STATE.REBUILD].includes(this.state)) { + throw new Error('Index is already being built'); + } + this.state = this.state === DataIndex.STATE.READY + ? DataIndex.STATE.REBUILD // Existing index file has to be overwritten in the last phase + : DataIndex.STATE.BUILD; + this._buildError = null; + const path = this.path; + const wildcardNames = path.match(/\*|\$[a-z0-9_]+/gi) || []; + // const hasWildcards = wildcardNames.length > 0; + const wildcardsPattern = '^' + path.replace(/\*|\$[a-z0-9_]+/gi, '([a-z0-9_]+)') + '/'; + const wildcardRE = new RegExp(wildcardsPattern, 'i'); + // let treeBuilder = new BPlusTreeBuilder(false, FILL_FACTOR, this.allMetadataKeys); //(30, false); + // let idx; // Once using binary file to write to + const tid = ID.generate(); + const keys = PathInfo.getPathKeys(path); + const indexableTypes = [VALUE_TYPES.STRING, VALUE_TYPES.NUMBER, VALUE_TYPES.BOOLEAN, VALUE_TYPES.DATETIME, VALUE_TYPES.BIGINT]; + const allowedKeyValueTypes = options && options.valueTypes + ? options.valueTypes + : indexableTypes; + this.storage.debug.log(`Index build ${this.description} started`.colorize(ColorStyle.blue)); + let indexedValues = 0; + // let addPromise; + // let flushed = false; + // const __DEV_UNIQUE_SET = new Set(); + // const __DEV_CHECK_UNIQUE = (key) => { + // if (__DEV_UNIQUE_SET.has(key)) { + // console.warn(`Duplicate key: ${key}`); + // } + // else { + // __DEV_UNIQUE_SET.add(key); + // } + // }; + const buildFile = this.fileName + '.build'; + const createBuildFile = () => { + return new Promise((resolve, reject) => { + const buildWriteStream = pfs.fs.createWriteStream(buildFile, { flags: pfs.flags.readAndAppendAndCreate }); + const streamState = { wait: false, chunks: [] }; + buildWriteStream.on('error', (err) => { + console.error(err); + reject(err); + }); + buildWriteStream.on('open', async () => { + await getAll('', 0); + // if (indexedValues === 0) { + // const err = new Error('No values found to index'); + // err.code = 'NO_DATA'; + // buildWriteStream.close(() => { + // pfs.rm(buildFile) + // .then(() => { + // reject(err); + // }) + // return reject(err); + // }); + // return; + // } + this.storage.debug.log(`done writing values to ${buildFile}`); + if (streamState.wait) { + buildWriteStream.once('drain', () => { + buildWriteStream.end(resolve); + }); + } + else { + buildWriteStream.end(resolve); + } + }); + buildWriteStream.on('drain', () => { + // Write queued chunks + const totalBytes = streamState.chunks.reduce((total, bytes) => total + bytes.length, 0); + const buffer = new Uint8Array(totalBytes); + let offset = 0; + streamState.chunks.forEach(bytes => { + buffer.set(bytes, offset); + offset += bytes.length; + }); + // Write! + streamState.chunks = []; + streamState.wait = !buildWriteStream.write(buffer, err => { + console.assert(!err, `Failed to write to stream: ${err && err.message}`); + }); + }); + const writeToStream = (bytes) => { + if (streamState.wait) { + streamState.chunks.push(bytes); + console.assert(streamState.chunks.length < 100000, 'Something going wrong here'); + } + else { + streamState.wait = !buildWriteStream.write(Buffer.from(bytes), err => { + console.assert(!err, `Failed to write to stream: ${err && err.message}`); + }); + } + }; + const isWildcardKey = (key) => typeof key === 'string' && (key === '*' || key.startsWith('$')); + const getAll = async (currentPath, keyIndex) => { + // "users/*/posts" + // --> Get all children of "users", + // --> get their "posts" children, + // --> get their children to index + let path = currentPath; + while (keys[keyIndex] && !isWildcardKey(keys[keyIndex])) { + path = PathInfo.getChildPath(path, keys[keyIndex]); // += keys[keyIndex]; + keyIndex++; + } + const isTargetNode = keyIndex === keys.length; + const getChildren = async () => { + const childKeys = []; + try { + await this.storage.getChildren(path).next(child => { + const keyOrIndex = typeof child.index === 'number' ? child.index : child.key; + if (!child.address || child.type !== VALUE_TYPES.OBJECT) { + return; // This child cannot be indexed because it is not an object with properties + } + else { + childKeys.push(keyOrIndex); + } + }); + } + catch (reason) { + // Record doesn't exist? No biggy + this.storage.debug.warn(`Could not get children of "/${path}": ${reason.message}`); + } + // Iterate through the children in batches of max n nodes + // should be determined by amount of * wildcards in index path + // If there are 0 wildcards, batch size of 500 is ok + // if there is 1 wildcard, use batch size 22 (sqrt of 500, 500^0.5), + // 2 wildcards: batch size 5 (2v500 or 500^0.25), + // 3 wildcards: batch size 2 (3v500 or 500^00.125) + // Algebra refresh: + // a = Math.pow(b, c) + // c = Math.log(a) / Math.log(b) + // b = Math.pow(a, Math.pow(0.5, c)) + // a is our max batch size, we'll use 500 + // c is our depth (nrOfWildcards) so we know this + // b is our unknown start number + const maxBatchSize = Math.round(Math.pow(500, Math.pow(0.5, wildcardNames.length))); + const batches = []; + while (childKeys.length > 0) { + const batchChildren = childKeys.splice(0, maxBatchSize); + batches.push(batchChildren); + } + while (batches.length > 0) { + const batch = batches.shift(); + await Promise.all(batch.map(async (childKey) => { + const childPath = PathInfo.getChildPath(path, childKey); + // do it + if (!isTargetNode) { + // Go deeper + return getAll(childPath, keyIndex + 1); + } + else { + // We have to index this child, get all required values for the entry + const wildcardValues = childPath.match(wildcardRE).slice(1); + const neededKeys = [this.key].concat(this.includeKeys); + const keyFilter = neededKeys.filter(key => key !== '{key}' && !wildcardNames.includes(key)); + if (this.textLocaleKey) { + keyFilter.push(this.textLocaleKey); + } + let keyValue = null; // initialize to null so we can check if it had a valid indexable value + let locale = this.textLocale; + const metadata = (() => { + // create properties for each included key, if they are not set by the loop they will still be in the metadata (which is required for B+Tree metadata) + const obj = {}; + this.includeKeys.forEach(key => obj[key] = undefined); + return obj; + })(); + const addValue = (key, value) => { + if (key === this.key) { + keyValue = value; + } + else if (key === this.textLocaleKey && typeof value === 'string') { + locale = value; + } + else { + metadata[key] = value; + } + }; + const gotNamedWildcardKeys = ['{key}'].concat(wildcardNames).filter(key => key !== '*'); + // Add special indexable key values from the current path, such as '{key}' for the current key, + // and named wildcards such as '$id'. This allows parts of the path to be indexed, or included in the index. + // + // Imagine an index on path 'users/$userId/posts/$postId/comments' + // + // - indexing on special key '{key}' allows quick lookups on a specific commentId without the need to know + // the userId or postId it belongs to: + // + // db.query('users/*/posts/*/comments').filter('{key}', '==', 'l6ukhzd6000009lgcuvm7nef'); + // + // - indexing on wildcard key '$postId' allows quick lookups on all comments of a specific postId + // without the need to know the userId it belongs to: + // + // db.query('users/*/posts/$postId/comments').filter('$postId', '==', 'l6ukv0ru000009l42rbf7hn5'); + // + // - including any of the special keys to the index allows quick filtering in queries: + // (assume key 'text' was indexed:) + // + // db.query('users/*/posts/$postId/comments') + // .filter('text', 'like', '*hello*') + // .filter('$postId', '==', 'l6ukv0ru000009l42rbf7hn5') + // + neededKeys.filter(key => gotNamedWildcardKeys.includes(key)).forEach(key => { + if (key === '{key}') { + keyValue = childKey; + } + else { + const index = wildcardNames.indexOf(key); + if (index < 0) { + throw new Error(`Requested key variable "${key}" not found in index path`); + } + const value = wildcardValues[index]; + addValue(key, value); + } + }); + const gotAllData = neededKeys.every(key => gotNamedWildcardKeys.includes(key)); + if (!gotAllData) { + // Fetch node value, we need more data + // Get child values + const keyPromises = []; + const seenKeys = gotNamedWildcardKeys.slice(); + // NEW: Use getNode to get data, enables indexing of subkeys + const { value: obj } = await this.storage.getNode(childPath, { include: keyFilter, tid }); + keyFilter.forEach(key => { + // What can be indexed? + // strings, numbers, booleans, dates, undefined + const val = PathInfo.getPathKeys(key).reduce((val, key) => typeof val === 'object' && key in val ? val[key] : undefined, obj); + if (typeof val === 'undefined') { + // Key not present + return; + } + seenKeys.push(key); + const type = getValueType(val); + if (key === this.key && !allowedKeyValueTypes.includes(type)) { + // Key value isn't allowed to be this type, mark it as null so it won't be indexed + keyValue = null; + return; + } + else if (key !== this.key && !indexableTypes.includes(type)) { + // Metadata that can't be indexed because it has the wrong type + return; + } + // Index this value + addValue(key, val); + }); + // If the key value wasn't present, set it to undefined (so it'll be indexed) + if (!seenKeys.includes(this.key)) { + keyValue = undefined; + } + await Promise.all(keyPromises); + } + const addIndexValue = (value, recordPointer, metadata) => { + if (typeof value === 'string' && value.length > 255) { + // Make sure strings are not too large to store. Use first 255 chars only + console.warn(`Truncating key value "${value}" because it is too large to index`); + value = value.slice(0, 255); + } + if (!this.caseSensitive) { + // Store lowercase key and metadata values + if (typeof value === 'string') { + value = value.toLocaleLowerCase(locale); + } + Object.keys(metadata).forEach(key => { + const value = metadata[key]; + if (typeof value === 'string') { + metadata[key] = value.toLocaleLowerCase(locale); + } + }); + } + // NEW: write value to buildStream + const bytes = [ + 0, 0, 0, 0, + 0, // processed + ]; + // key: + const keyBytes = BinaryWriter.getBytes(value); + bytes.push(...keyBytes); + // rp_length: + bytes.push(recordPointer.length); + // rp_data: + bytes.push(...recordPointer); + // metadata: + this.allMetadataKeys && this.allMetadataKeys.forEach(key => { + let metadataValue = metadata[key]; + if (typeof metadataValue === 'string' && metadataValue.length > 255) { + // Make sure strings are not too large to store. Use first 255 chars only + console.warn(`Truncating "${key}" metadata value "${metadataValue}" because it is too large to index`); + metadataValue = metadataValue.slice(0, 255); + } + const valueBytes = BinaryWriter.getBytes(metadataValue); // metadata_value + bytes.push(...valueBytes); + }); + // update entry_length: + BinaryWriter.writeUint32(bytes.length, bytes, 0); + writeToStream(bytes); + indexedValues++; + }; + if (keyValue !== null) { + // Add it to the index, using value as the index key, a record pointer as the value + // Create record pointer + const recordPointer = _createRecordPointer(wildcardValues, childKey); //, child.address); + // const entryValue = new BinaryBPlusTree.EntryValue(recordPointer, metadata) + // Add it to the index + if (options?.addCallback) { + keyValue = options.addCallback(addIndexValue, keyValue, recordPointer, metadata, { path: childPath, wildcards: wildcardValues, key: childKey, locale }); + } + else { + addIndexValue(keyValue, recordPointer, metadata); + } + this.storage.debug.log(`Indexed "/${childPath}/${this.key}" value: '${keyValue}' (${typeof keyValue})`.colorize(ColorStyle.cyan)); + } + // return addPromise; // Do we really have to wait for this? + } + })); + } + }; + return getChildren(); + }; + }); + }; + const mergeFile = `${buildFile}.merge`; + const createMergeFile = async () => { + // start by grouping the keys: + // take the first n keys in the .build file, read through the entire file + // to find other occurences of the same key. + // Group them and write to .build.n files in batches of 10.000 keys + if (indexedValues === 0) { + // Remove build file, nothing else to do + // eslint-disable-next-line @typescript-eslint/no-empty-function + return await pfs.rm(buildFile).catch(err => { }); + } + try { + const exists = await pfs.exists(mergeFile); + if (exists) { + const err = new Error('File already exists'); + err.code = 'EEXIST'; + throw err; + } + const fd = await pfs.open(buildFile, pfs.flags.readAndWrite); + const writer = BinaryWriter.forFunction(async (data, position) => { + const buffer = data instanceof Buffer ? data : Buffer.from(data); + await pfs.write(fd, buffer, 0, buffer.byteLength, position); + }); + const reader = new BinaryReader(fd, 512 * 1024); // Read 512KB chunks + await reader.init(); + // const maxKeys = 10000; // Work with max 10.000 in-memory keys at a time + const maxValues = 100000; // Max 100K in-memory values + const readNext = async () => { + // Read next from file + try { + let processed = true; + /** @type {Buffer} */ + let buffer; + /** @type {number} */ + let entryIndex; + while (processed) { + entryIndex = reader.sourceIndex; + const entryLength = await reader.getUint32(); // entry_length + if (entryLength < 4) { + throw new Error(`Invalid entry length ${entryLength} at build file index ${entryIndex}`); + } + buffer = await reader.get(entryLength - 4); + // processed: + processed = buffer[0] === 1; + } + // key: + let index = 1; + const keyValue = BinaryReader.readValue(buffer, index); + index += keyValue.byteLength; + // value: (combine rp_length, rp_data, metadata) + const len = buffer.byteLength - index; + const val = buffer.slice(index, index + len); // Buffer.from(buffer.buffer, index, len); + // console.log(`Read "${keyValue.value}" @${entryIndex} with value length ${len}`); + return { + key: keyValue.value, + value: val, + index: entryIndex, + length: buffer.byteLength + 4, + flagProcessed() { + buffer[0] = 1; + buffer = null; + return writer.write([1], this.index + 4); // flag file + }, + // flagProcessed() { + // // __DEV_CHECK_UNIQUE(this.index); + // buffer[0] = 1; // make sure the in-memory cache is also flagged + // buffer = null; // release memory if not referenced anywhere else + // return writer.write([1], this.index + 4); // flag file + // } + }; + } + catch (err) { + if (err.code === 'EOF') { + return null; + } + throw err; + } + }; + // Write batch files + let batchNr = 0; + let batchStartEntry = null; + // Find out how many written batches there are already (if process was terminated while building, we can resume) + const path = buildFile.slice(0, buildFile.lastIndexOf('/')); + const entries = await pfs.readdir(path); + let high = 0; + const checkFile = buildFile.slice(path.length + 1) + '.'; + entries.forEach(entry => { + if (typeof entry === 'string' && entry.startsWith(checkFile)) { + const match = /\.([0-9]+)$/.exec(entry); + if (!match) { + return; + } + const nr = parseInt(match[1]); + high = Math.max(high, nr); + } + }); + batchNr = high; + let more = true; + while (more) { + batchNr++; + const map = new Map(); + let processedValues = 0; + if (batchStartEntry !== null) { + // Skip already processed entries + await reader.go(batchStartEntry.index); + batchStartEntry = null; + } + let next; + while ((next = await readNext()) !== null) { + processedValues++; + const isDate = next.key instanceof Date; + const key = isDate ? next.key.getTime() : next.key; + let values = map.get(key); + if (values) { + values.push(next.value); + next.flagProcessed(); + } + else if (processedValues < maxValues) { + values = [next.value]; + if (isDate) { + values.dateKey = true; + } + map.set(key, values); + next.flagProcessed(); + } + else { + more = true; + batchStartEntry = next; + break; // Stop adding values to this batch + } + } + if (map.size === 0) { + // no entries + batchNr--; + break; + } + // sort the map keys + const sortedKeys = quickSort([...map.keys()], (a, b) => { + if (BPlusTree.typeSafeComparison.isLess(a, b)) { + return -1; + } + if (BPlusTree.typeSafeComparison.isMore(a, b)) { + return 1; + } + return 0; + }); + // write batch + const batchStream = pfs.fs.createWriteStream(`${buildFile}.${batchNr}`, { flags: pfs.flags.appendAndCreate }); + for (const key of sortedKeys) { + const values = map.get(key); + const isDateKey = values.dateKey === true; + const bytes = [ + 0, 0, 0, 0, // entry_length + ]; + // key: + let b = BinaryWriter.getBytes(isDateKey ? new Date(key) : key); + bytes.push(...b); + // // values_byte_length: + // const valuesByteLengthIndex = bytes.length; + // bytes.push(0, 0, 0, 0); + // values_length: + b = BinaryWriter.writeUint32(values.length, [0, 0, 0, 0], 0); + bytes.push(...b); + for (let j = 0; j < values.length; j++) { + const value = values[j]; + // value_length: + b = BinaryWriter.writeUint32(value.length, [0, 0, 0, 0], 0); + bytes.push(...b); + // value: + bytes.push(...value); + } + // // update values_byte_length: + // const valuesByteLength = bytes.length - valuesByteLengthIndex + // BinaryWriter.writeUint32(valuesByteLength, bytes, valuesByteLengthIndex); + // Update entry_length: + BinaryWriter.writeUint32(bytes.length, bytes, 0); + const ok = batchStream.write(Uint8Array.from(bytes)); + if (!ok) { + await new Promise(resolve => { + batchStream.once('drain', resolve); + }); + } + } + await new Promise(resolve => { + batchStream.end(resolve); + }); + } + await pfs.close(fd); // Close build file + await pfs.rm(buildFile); // Remove build file + // Now merge-sort all keys, by reading keys from each batch, + // taking the smallest value from each batch a time + const batches = batchNr; + if (batches === 0) { + // No batches -> no indexed entries + return; + } + // create write stream for merged data + const outputStream = pfs.fs.createWriteStream(mergeFile, { flags: pfs.flags.writeAndCreate }); + // const outputStream = BinaryWriter.forFunction((data, position) => { + // return pfs.write(fd, data, 0, data.byteLength, position); + // }); + // open readers for each batch file + const readers = []; + const bufferChunkSize = Math.max(10240, Math.round((10 * 1024 * 1024) / batches)); // 10MB dedicated memory to divide between readers, with a minimum of 10KB per reader + for (let i = 0; i < batches; i++) { + const reader = new BinaryReader(`${buildFile}.${i + 1}`, bufferChunkSize); + readers.push(reader); + } + await Promise.all(readers.map(reader => reader.init())); + // load entries from each batch file + let sortedEntryIndexes = []; + const entriesPerBatch = new Array(batches); + const loadEntry = async (batchIndex) => { + const reader = readers[batchIndex]; + try { + const entryLength = await reader.getUint32(); // entry_length: + const buffer = await reader.get(entryLength - 4); + // key: + const keyValue = BinaryReader.readValue(buffer, 0); + const key = keyValue.value; + const values = buffer.slice(keyValue.byteLength); //Buffer.from(buffer.buffer, keyValue.byteLength, buffer.byteLength - keyValue.byteLength); + // Check if another batch has entry with the same key + const existing = entriesPerBatch.find(entry => entry && entry.key === key); + if (existing) { + // Append values to existing + // First 4 bytes of values contains values_length + const currentValues = BinaryReader.readUint32(existing.values, 0); + const additionalValues = BinaryReader.readUint32(values, 0); + const concatenated = new Uint8Array(existing.values.byteLength + values.byteLength - 4); + concatenated.set(existing.values, 0); + concatenated.set(values.slice(4), existing.values.byteLength); + // Update values_length to total + BinaryWriter.writeUint32(currentValues + additionalValues, concatenated, 0); + existing.values = concatenated; + return loadEntry(batchIndex); + } + // Create new entry + const entry = { key, values }; + entriesPerBatch[batchIndex] = entry; + // update sortedEntryIndexes (only if it has been populated already, not when loading start values) + if (sortedEntryIndexes.length > 0) { + // remove the old entry + const oldSortEntryIndex = sortedEntryIndexes.findIndex(sortEntry => sortEntry.index === batchIndex); + sortedEntryIndexes.splice(oldSortEntryIndex, 1); + // create new entry, insert at right sorted location + // const newSortEntryIndex = sortedEntryIndexes.findIndex(sortEntry => BPlusTree.typeSafeComparison.isMore(sortEntry.key, entry.key)); + let newSortEntryIndex = oldSortEntryIndex; // The newly read value >= previous value, because they are stored sorted in the batch file + while (newSortEntryIndex < sortedEntryIndexes.length + && BPlusTree.typeSafeComparison.isMore(entry.key, sortedEntryIndexes[newSortEntryIndex].key)) { + newSortEntryIndex++; + } + const newSortEntry = { index: batchIndex, key: entry.key }; + sortedEntryIndexes.splice(newSortEntryIndex, 0, newSortEntry); + } + // return entry; + } + catch (err) { + if (err.code === 'EOF') { + // No more entries in batch file, set this batch's entry to null + entriesPerBatch[batchIndex] = null; + // remove from sortedEntryIndexes + console.assert(sortedEntryIndexes.length > 0); + const sortEntryIndex = sortedEntryIndexes.findIndex(sortEntry => sortEntry.index === batchIndex); + sortedEntryIndexes.splice(sortEntryIndex, 1); + } + else { + throw err; + } + } + }; + // load start entries from each batch file + const promises = readers.map((reader, index) => loadEntry(index)); + await Promise.all(promises); + // Populate sortedEntryIndexes + sortedEntryIndexes = entriesPerBatch.map((entry, index) => ({ index, key: entry.key })) + .sort((a, b) => { + if (BPlusTree.typeSafeComparison.isLess(a.key, b.key)) { + return -1; + } + if (BPlusTree.typeSafeComparison.isMore(a.key, b.key)) { + return 1; + } + return 0; // happens when a key had too many values (and were split into multiple batches) + }); + // write all entries + while (sortedEntryIndexes.length > 0) { + // take smallest (always at index 0 in sorted array) + const smallestDetails = sortedEntryIndexes[0]; + const batchIndex = smallestDetails.index; + const smallestEntry = entriesPerBatch[batchIndex]; + const bytes = [ + 0, 0, 0, 0, // entry_length + ]; + // key: + const keyBytes = BinaryWriter.getBytes(smallestEntry.key); + bytes.push(...keyBytes); + // update entry_length + const byteLength = bytes.length + smallestEntry.values.byteLength; + BinaryWriter.writeUint32(byteLength, bytes, 0); + // build buffer + const buffer = new Uint8Array(byteLength); + buffer.set(bytes, 0); + // values: + buffer.set(smallestEntry.values, bytes.length); + // write to stream + // console.log(`writing entry "${smallestEntry.key}"`); + // return outputStream.append(buffer) + // .then(() => { + // return loadEntry(batchIndex); + // }) + // .then(writeSmallestEntry); + const ok = outputStream.write(buffer, err => { + console.assert(!err, 'Error while writing?'); + }); + if (!ok) { + await new Promise(resolve => { + outputStream.once('drain', resolve); + }); + } + // load next entry from the batch we used + await loadEntry(batchIndex); + } + // Wait until output stream is done writing + await new Promise(resolve => { + outputStream.end(resolve); + }); + // Close all batch files + const crPromises = readers.map(reader => reader.close()); + await Promise.all(crPromises); + // Delete all batch files + const dbfPromises = []; + for (let i = 1; i <= batches; i++) { + dbfPromises.push(pfs.rm(`${buildFile}.${i}`)); + } + await Promise.all(dbfPromises); + } + catch (err) { + // EEXIST error is ok because that means the .merge file was already built + if (err?.code !== 'EEXIST') { + throw err; + } + } + }; + const startTime = Date.now(); + const lock = await this._lock('exclusive', 24 * 60 * 60 * 1000); // Allow 24hrs to build the index max + try { + try { + await createBuildFile(); + } + catch (err) { + // If the .build file already existed, use it! + if (err.code !== 'EEXIST') { + throw err; + } + } + // Done writing values to build file. + // Now we have to group all values per key, sort them. + // then create the binary B+tree. + this.storage.debug.log(`done writing build file ${buildFile}`); + await createMergeFile(); + // Open merge file for reading, index file for writing + this.storage.debug.log(`done writing merge file ${mergeFile}`); + const [readFD, writeFD] = await Promise.all([ + indexedValues === 0 ? -1 : pfs.open(mergeFile, pfs.flags.read), + pfs.open(this.fileName, pfs.flags.write), + ]); + // create index from entry stream + const treeStatistics = { + totalEntries: 0, + totalValues: 0, + }; + const headerStats = { + written: false, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + updateTreeLength: (treeByteLength) => { + throw new Error('header hasn\'t been written yet'); + }, + length: DISK_BLOCK_SIZE, + promise: undefined, + }; + const writer = BinaryWriter.forFunction(async (data, index) => { + if (!headerStats.written) { + // Write header first, or wait until done + if (!headerStats.promise) { + headerStats.promise = this._writeIndexHeader(writeFD, treeStatistics).then(async (result) => { + headerStats.written = true; + headerStats.length = result.length; + headerStats.updateTreeLength = result.treeLengthCallback; + if (this.state === DataIndex.STATE.REBUILD) { + await pfs.truncate(this.fileName, headerStats.length); + } + }); + } + await headerStats.promise; + } + await pfs.write(writeFD, data, 0, data.length, headerStats.length + index); + }); + const reader = indexedValues > 0 + ? new BinaryReader(readFD) + : new BinaryReader(async (index, length) => Buffer.from([])); + await BinaryBPlusTree.createFromEntryStream(reader, writer, { + treeStatistics, + fillFactor: FILL_FACTOR, + maxEntriesPerNode: 255, + isUnique: false, + keepFreeSpace: true, + metadataKeys: this.allMetadataKeys, + }); + await Promise.all([ + pfs.fsync(writeFD).then(() => pfs.close(writeFD)), + indexedValues > 0 && pfs.close(readFD), + ]); + if (indexedValues > 0) { + await pfs.rm(mergeFile); + } + const doneTime = Date.now(); + const duration = Math.round((doneTime - startTime) / 1000 / 60); + this.storage.debug.log(`Index ${this.description} was built successfully, took ${duration} minutes`.colorize(ColorStyle.green)); + this.state = DataIndex.STATE.READY; + } + catch (err) { + this.storage.debug.error(`Error building index ${this.description}: ${err?.message || err}`); + this.state = DataIndex.STATE.ERROR; + this._buildError = err; + throw err; + } + finally { + lock.release(); // release index lock + } + this._processUpdateQueue(); // Process updates queued during build + return this; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + test(obj, op, val) { throw new Error('test method must be overridden by subclass'); } + _getIndexHeaderBytes(treeStatistics) { + const indexEntries = treeStatistics.totalEntries; + const indexedValues = treeStatistics.totalValues; + const addNameBytes = (bytes, name) => { + // name_length: + bytes.push(name.length); + // name_data: + for (let i = 0; i < name.length; i++) { + bytes.push(name.charCodeAt(i)); + } + }; + const addValueBytes = (bytes, value) => { + let valBytes = []; + if (typeof value === 'undefined') { + // value_type: + bytes.push(INDEX_INFO_VALUE_TYPE.UNDEFINED); + // no value_length or value_data + return; + } + else if (typeof value === 'string') { + // value_type: + bytes.push(INDEX_INFO_VALUE_TYPE.STRING); + valBytes = Array.from(encodeString(value)); // textEncoder.encode(value) + } + else if (typeof value === 'number') { + // value_type: + bytes.push(INDEX_INFO_VALUE_TYPE.NUMBER); + valBytes = numberToBytes(value); + } + else if (typeof value === 'boolean') { + // value_type: + bytes.push(INDEX_INFO_VALUE_TYPE.BOOLEAN); + // no value_length + // value_data: + bytes.push(value ? 1 : 0); + // done + return; + } + else if (value instanceof Array) { + // value_type: + bytes.push(INDEX_INFO_VALUE_TYPE.ARRAY); + // value_length: + if (value.length > 0xffff) { + throw new Error('Array is too large to store. Max length is 0xffff'); + } + bytes.push((value.length >> 8) & 0xff); + bytes.push(value.length & 0xff); + // value_data: + value.forEach(val => { + addValueBytes(bytes, val); + }); + // done + return; + } + // Maybe in the future: + // else if (value !== null && typeof value === 'object') { + // // value_type: + // bytes.push(INDEX_INFO_VALUE_TYPE.OBJECT); + // // value_length: + // const keys = Object.keys(value); + // if (keys.length > 0xffff) { + // throw new Error('Object is too large to store. Max properties is 0xffff'); + // } + // bytes.push((keys.length >> 8) & 0xff); + // bytes.push(keys.length & 0xff); + // // value_data: + // keys.forEach(key => { + // const val = value[key]; + // addNameBytes(bytes, key); + // addValueBytes(bytes, val); + // }); + // // done + // return; + // } + else { + throw new Error(`Invalid value type "${typeof value}"`); + } + // value_length: + bytes.push((valBytes.length >> 8) & 0xff); + bytes.push(valBytes.length & 0xff); + // value_data: + bytes.push(...valBytes); + }; + const addInfoBytes = (bytes, obj) => { + const keys = Object.keys(obj); + // info_count: + bytes.push(keys.length); + // info, [info, [info...]] + keys.forEach(key => { + addNameBytes(bytes, key); // name + const value = obj[key]; + addValueBytes(bytes, value); + }); + }; + const header = [ + // signature: + 65, 67, 69, 66, 65, 83, 69, 73, 68, 88, + // layout_version: + 1, + // header_length: + 0, 0, 0, 0, + ]; + // info: + const indexInfo = { + type: this.type, + version: 1, + path: this.path, + key: this.key, + include: this.includeKeys, + cs: this.caseSensitive, + locale: this.textLocale, + localeKey: this.textLocaleKey, + // Don't store: + // config: this.config, + }; + addInfoBytes(header, indexInfo); + // const treeNames = Object.keys(this.trees); + // trees_info: + header.push(1); // trees_count + const treeName = 'default'; + const treeDetails = this.trees[treeName]; + // tree_info: + addNameBytes(header, treeName); // tree_name + const treeRefIndex = header.length; + header.push(0, 0, 0, 0); // file_index + header.push(0, 0, 0, 0); // byte_length + treeDetails.entries = indexEntries; + treeDetails.values = indexedValues; + const extraTreeInfo = { + class: treeDetails.class, + version: treeDetails.version, + entries: indexEntries, + values: indexedValues, + }; + addInfoBytes(header, extraTreeInfo); + // align header bytes to block size + while (header.length % DISK_BLOCK_SIZE !== 0) { + header.push(0); + } + // end of header + const headerLength = header.length; + treeDetails.fileIndex = headerLength; + // treeDetails.byteLength = binary.length; + // Update header_length: + header[11] = (headerLength >> 24) & 0xff; + header[12] = (headerLength >> 16) & 0xff; + header[13] = (headerLength >> 8) & 0xff; + header[14] = headerLength & 0xff; + // Update default tree file_index: + header[treeRefIndex] = (headerLength >> 24) & 0xff; + header[treeRefIndex + 1] = (headerLength >> 16) & 0xff; + header[treeRefIndex + 2] = (headerLength >> 8) & 0xff; + header[treeRefIndex + 3] = headerLength & 0xff; + // // Update default tree byte_length: + // header[treeRefIndex+4] = (binary.byteLength >> 24) & 0xff; + // header[treeRefIndex+5] = (binary.byteLength >> 16) & 0xff; + // header[treeRefIndex+6] = (binary.byteLength >> 8) & 0xff; + // header[treeRefIndex+7] = binary.byteLength & 0xff; + // anything else? + return { header, headerLength, treeRefIndex, treeDetails }; + } + async _writeIndexHeader(fd, treeStatistics) { + const { header, headerLength, treeRefIndex } = this._getIndexHeaderBytes(treeStatistics); + await pfs.write(fd, Buffer.from(header)); + return { + length: headerLength, + treeLengthCallback: async (treeByteLength) => { + const bytes = [ + (treeByteLength >> 24) & 0xff, + (treeByteLength >> 16) & 0xff, + (treeByteLength >> 8) & 0xff, + treeByteLength & 0xff, + ]; + // treeDetails.byteLength = treeByteLength; + await pfs.write(fd, Buffer.from(bytes), 0, bytes.length, treeRefIndex + 4); + }, + }; + } + async _writeIndex(builder) { + // Index v1 layout: + // data = header, trees_data + // header = signature, layout_version, header_length, index_info, trees_info + // signature = 10 bytes ('ACEBASEIDX') + // layout_version = 1 byte number (binary layout version) + // header_length = byte_length + // byte_length = 4 byte uint + // index_info = info_count, info, [info, [info...]] + // info_count = 1 byte number + // info = key, info_value + // key = key_length, key_name + // key_length = 1 byte number + // key_name = [key_length] bytes (ASCII encoded key name) + // info_value = value_type, [value_length], [value_data] + // value_type = 1 byte number + // 0: UNDEFINED + // 1: STRING + // 2: NUMBER + // 3: BOOLEAN + // 4: ARRAY + // value_length = value_type ? + // 0, 3: (not present) + // 1, 2, 4: 2 byte number + // value_data = value_type ? + // 0: (not present) + // 1-3: value_length bytes + // 4: info_value[value_length] + // trees_info = trees_count, tree_info, [tree_info, [tree_info...]] + // trees_count = 1 byte number + // tree_info = tree_name, file_index, byte_length, xtree_info + // tree_name = key + // file_index = 4 byte uint + // xtree_info = info_count, info, [info, [info...]] + // trees_data = tree_data, [tree_data, [tree_date...]] + // tree_data = [byte_length] bytes of data (from tree_info header) + const totalEntries = builder.list.size; + const totalValues = builder.indexedValues; + // const tree = builder.create(); + // const binary = new Uint8Array(tree.toBinary(true)); + const fd = await pfs.open(this.fileName, pfs.flags.write); + const { header, headerLength, treeRefIndex, treeDetails } = this._getIndexHeaderBytes({ totalEntries, totalValues }); + try { + await pfs.write(fd, Buffer.from(header)); + // append binary tree data + const tree = builder.create(); + const stream = pfs.fs.createWriteStream(null, { fd, autoClose: false }); + const references = []; + const writer = new BinaryWriter(stream, async (data, position) => { + references.push({ data, position }); + // return pfs.write(fd, data, 0, data.byteLength, headerLength + position); + }); + await tree.toBinary(true, writer); + // Update all references + while (references.length > 0) { + const ref = references.shift(); + await pfs.write(fd, ref.data, 0, ref.data.byteLength, headerLength + ref.position); + } + // Update default tree byte_length: + const treeByteLength = writer.length; + const bytes = [ + (treeByteLength >> 24) & 0xff, + (treeByteLength >> 16) & 0xff, + (treeByteLength >> 8) & 0xff, + treeByteLength & 0xff, + ]; + treeDetails.byteLength = treeByteLength; + await pfs.write(fd, Buffer.from(bytes), 0, bytes.length, treeRefIndex + 4); + // return pfs.write(fd, binary); + await pfs.close(fd); + } + catch (err) { + this.storage.debug.error(err); + throw err; + } + } + async _getTree(lockMode = 'exclusive') { + // File is now opened the first time it is requested, only closed when it needs to be rebuilt or removed + // This enables the tree to keep its FST state in memory. + // Also enabled "autoGrow" again, this allows the tree to grow instead of being rebuilt every time it needs + // more storage space + if ([DataIndex.STATE.ERROR, DataIndex.STATE.CLOSED, DataIndex.STATE.REMOVED].includes(this.state)) { + throw new Error(`Can't open index ${this.description} with state "${this.state}"`); + } + const lock = await this._lock(lockMode); + if (!this._idx) { + // File being opened for the first time (or after a rebuild) + const fd = await pfs.open(this.fileName, pfs.flags.readAndWrite); + const reader = async (index, length) => { + const buffer = Buffer.alloc(length); + const { bytesRead } = await pfs.read(fd, buffer, 0, length, this.trees.default.fileIndex + index); + if (bytesRead < length) { + return buffer.slice(0, bytesRead); + } + return buffer; + }; + const writer = async (data, index) => { + const buffer = data.constructor === Uint8Array + ? Buffer.from(data.buffer, data.byteOffset, data.byteLength) + : Buffer.from(data); + const result = await pfs.write(fd, buffer, 0, data.length, this.trees.default.fileIndex + index); + return result; + }; + const tree = new BinaryBPlusTree(reader, DISK_BLOCK_SIZE, writer); + tree.id = ID.generate(); // this.fileName; // For tree locking + tree.autoGrow = true; // Allow the tree to grow. DISABLE THIS IF THERE ARE MULTIPLE TREES IN THE INDEX FILE LATER! (which is not implemented yet) + this._idx = { fd, tree }; + } + return { + tree: this._idx.tree, + /** Closes the index file, does not release the lock! */ + close: async () => { + const fd = this._idx.fd; + this._idx = null; + await pfs.close(fd) + .catch(err => { + this.storage.debug.warn(`Could not close index file "${this.fileName}":`, err); + }); + }, + /** Releases the acquired tree lock */ + release() { + lock.release(); + }, + }; + } +} +//# sourceMappingURL=data-index.js.map \ No newline at end of file diff --git a/dist/esm/data-index/data-index.js.map b/dist/esm/data-index/data-index.js.map new file mode 100644 index 0000000..a25e8e9 --- /dev/null +++ b/dist/esm/data-index/data-index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"data-index.js","sourceRoot":"","sources":["../../../src/data-index/data-index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/data-index/fulltext-index-query-hint.js b/dist/esm/data-index/fulltext-index-query-hint.js new file mode 100644 index 0000000..eb32331 --- /dev/null +++ b/dist/esm/data-index/fulltext-index-query-hint.js @@ -0,0 +1,30 @@ +import { IndexQueryHint } from './query-hint.js'; +export class FullTextIndexQueryHint extends IndexQueryHint { + static get types() { + return Object.freeze({ + missingWord: 'missing', + genericWord: 'generic', + ignoredWord: 'ignored', + }); + } + constructor(type, value) { + super(type, value); + } + get description() { + switch (this.type) { + case FullTextIndexQueryHint.types.missingWord: { + return `Word "${this.value}" does not occur in the index, you might want to remove it from your query`; + } + case FullTextIndexQueryHint.types.genericWord: { + return `Word "${this.value}" is very generic and occurs many times in the index. Removing the word from your query will speed up the results and minimally impact the size of the result set`; + } + case FullTextIndexQueryHint.types.ignoredWord: { + return `Word "${this.value}" was ignored because it is either blacklisted, occurs in a stoplist, or did not match other criteria such as minimum (wildcard) word length`; + } + default: { + return 'Uknown hint'; + } + } + } +} +//# sourceMappingURL=fulltext-index-query-hint.js.map \ No newline at end of file diff --git a/dist/esm/data-index/fulltext-index-query-hint.js.map b/dist/esm/data-index/fulltext-index-query-hint.js.map new file mode 100644 index 0000000..36c971b --- /dev/null +++ b/dist/esm/data-index/fulltext-index-query-hint.js.map @@ -0,0 +1 @@ +{"version":3,"file":"fulltext-index-query-hint.js","sourceRoot":"","sources":["../../../src/data-index/fulltext-index-query-hint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,OAAO,sBAAuB,SAAQ,cAAc;IACtD,MAAM,KAAK,KAAK;QACZ,OAAO,MAAM,CAAC,MAAM,CAAC;YACjB,WAAW,EAAE,SAAS;YACtB,WAAW,EAAE,SAAS;YACtB,WAAW,EAAE,SAAS;SACzB,CAAC,CAAC;IACP,CAAC;IAED,YAAY,IAAuC,EAAE,KAAc;QAC/D,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,WAAW;QACX,QAAQ,IAAI,CAAC,IAAI,EAAE;YACf,KAAK,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC3C,OAAO,SAAS,IAAI,CAAC,KAAK,4EAA4E,CAAC;aAC1G;YACD,KAAK,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC3C,OAAO,SAAS,IAAI,CAAC,KAAK,mKAAmK,CAAC;aACjM;YACD,KAAK,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC3C,OAAO,SAAS,IAAI,CAAC,KAAK,8IAA8I,CAAC;aAC5K;YACD,OAAO,CAAC,CAAC;gBACL,OAAO,aAAa,CAAC;aACxB;SACJ;IACL,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/esm/data-index/fulltext-index.js b/dist/esm/data-index/fulltext-index.js new file mode 100644 index 0000000..93eaf11 --- /dev/null +++ b/dist/esm/data-index/fulltext-index.js @@ -0,0 +1,842 @@ +import { DataIndex } from './data-index.js'; +import { IndexQueryResults } from './query-results.js'; +import { VALUE_TYPES } from '../node-value-types.js'; +import { BlacklistingSearchOperator } from '../btree/index.js'; +import { IndexQueryStats } from './query-stats.js'; +import { FullTextIndexQueryHint } from './fulltext-index-query-hint.js'; +import unidecode from '../unidecode.js'; +class WordInfo { + constructor(word, indexes, sourceIndexes) { + this.word = word; + this.indexes = indexes; + this.sourceIndexes = sourceIndexes; + } + get occurs() { + return this.indexes.length; + } +} +// const _wordsRegex = /[\w']+/gmi; // TODO: should use a better pattern that supports non-latin characters +class TextInfo { + constructor(text, options) { + // this.text = text; // Be gone later... + this.locale = options.locale || 'en'; + const localeSettings = TextInfo.locales.get(this.locale); + let pattern = localeSettings.pattern; + if (options.pattern && options.pattern instanceof RegExp) { + pattern = options.pattern.source; + } + else if (typeof options.pattern === 'string') { + pattern = options.pattern; + } + if (options.includeChars) { + console.assert(pattern.indexOf('[') >= 0, 'pattern does not contain []'); + let insert = ''; + for (let i = 0; i < options.includeChars.length; i++) { + insert += '\\' + options.includeChars[i]; + } + let pos = -1; + while (true) { + const index = pattern.indexOf('[', pos + 1) + 1; + if (index === 0) { + break; + } + pattern = pattern.slice(0, index) + insert + pattern.slice(index); + pos = index; + } + } + let flags = localeSettings.flags; + if (typeof options.flags === 'string') { + flags = options.flags; + } + const re = new RegExp(pattern, flags); + const minLength = typeof options.minLength === 'number' ? options.minLength : 1; + const maxLength = typeof options.maxLength === 'number' ? options.maxLength : 25; + let blacklist = options.blacklist instanceof Array ? options.blacklist : []; + if (localeSettings.stoplist instanceof Array && options.useStoplist === true) { + blacklist = blacklist.concat(localeSettings.stoplist); + } + const whitelist = options.whitelist instanceof Array ? options.whitelist : []; + const words = this.words = new Map(); + this.ignored = []; + if (text === null || typeof text === 'undefined') { + return; + } + if (options.prepare) { + // Pre-process text. Allows decompression, decrypting, custom stemming etc + text = options.prepare(text, this.locale, `"${options.includeChars ?? ''}`); + } + // Unidecode text to get ASCII characters only + function safe_unidecode(str) { + // Fix for occasional multi-pass issue, copied from https://github.com/FGRibreau/node-unidecode/issues/16 + let ret; + while (str !== (ret = unidecode(str))) { + str = ret; + } + return ret; + } + text = safe_unidecode(text); + // Remove any single quotes, so "don't" will be stored as "dont", "isn't" as "isnt" etc + text = text.replace(/'/g, ''); + // Process the text + // const wordsRegex = /[\w']+/gu; + let wordIndex = 0; + while (true) { + const match = re.exec(text); + if (match === null) { + break; + } + let word = match[0]; + // TODO: use stemming such as snowball (https://www.npmjs.com/package/snowball-stemmers) + // to convert words like "having" to "have", and "cycles", "cycle", "cycling" to "cycl" + if (typeof options.stemming === 'function') { + // Let callback function perform word stemming + const stemmed = options.stemming(word, this.locale); + if (typeof stemmed !== 'string') { + // Ignore this word + if (this.ignored.indexOf(word) < 0) { + this.ignored.push(word); + } + // Do not increase wordIndex + continue; + } + word = stemmed; + } + word = word.toLocaleLowerCase(this.locale); + if (word.length < minLength || ~blacklist.indexOf(word)) { + // Word does not meet set criteria + if (!~whitelist.indexOf(word)) { + // Not whitelisted either + if (this.ignored.indexOf(word) < 0) { + this.ignored.push(word); + } + // Do not increase wordIndex + continue; + } + } + else if (word.length > maxLength) { + // Use the word, but cut it to the max length + word = word.slice(0, maxLength); + } + let wordInfo = words.get(word); + if (wordInfo) { + wordInfo.indexes.push(wordIndex); + wordInfo.sourceIndexes.push(match.index); + } + else { + wordInfo = new WordInfo(word, [wordIndex], [match.index]); + words.set(word, wordInfo); + } + wordIndex++; + } + } + static get locales() { + return { + 'default': { + pattern: '[A-Za-z0-9\']+', + flags: 'gmi', + }, + 'en': { + // English stoplist from https://gist.github.com/sebleier/554280 + stoplist: ['i', 'me', 'my', 'myself', 'we', 'our', 'ours', 'ourselves', 'you', 'your', 'yours', 'yourself', 'yourselves', 'he', 'him', 'his', 'himself', 'she', 'her', 'hers', 'herself', 'it', 'its', 'itself', 'they', 'them', 'their', 'theirs', 'themselves', 'what', 'which', 'who', 'whom', 'this', 'that', 'these', 'those', 'am', 'is', 'are', 'was', 'were', 'be', 'been', 'being', 'have', 'has', 'had', 'having', 'do', 'does', 'did', 'doing', 'a', 'an', 'the', 'and', 'but', 'if', 'or', 'because', 'as', 'until', 'while', 'of', 'at', 'by', 'for', 'with', 'about', 'against', 'between', 'into', 'through', 'during', 'before', 'after', 'above', 'below', 'to', 'from', 'up', 'down', 'in', 'out', 'on', 'off', 'over', 'under', 'again', 'further', 'then', 'once', 'here', 'there', 'when', 'where', 'why', 'how', 'all', 'any', 'both', 'each', 'few', 'more', 'most', 'other', 'some', 'such', 'no', 'nor', 'not', 'only', 'own', 'same', 'so', 'than', 'too', 'very', 's', 't', 'can', 'will', 'just', 'don', 'should', 'now'], + }, + get(locale) { + const settings = {}; + Object.assign(settings, this.default); + if (typeof this[locale] === 'undefined' && locale.indexOf('-') > 0) { + locale = locale.split('-')[1]; + } + if (typeof this[locale] === 'undefined') { + return settings; + } + Object.keys(this[locale]).forEach(key => { + settings[key] = this[locale][key]; + }); + return settings; + }, + }; + } + getWordInfo(word) { + return this.words.get(word); + } + /** + * Reconstructs an array of words in the order they were encountered + */ + toSequence() { + const arr = []; + for (const { word, indexes } of this.words.values()) { + for (const index of indexes) { + arr[index] = word; + } + } + return arr; + } + /** + * Returns all unique words in an array + */ + toArray() { + const arr = []; + for (const word of this.words.keys()) { + arr.push(word); + } + return arr; + } + get uniqueWordCount() { + return this.words.size; //.length; + } + get wordCount() { + let total = 0; + for (const wordInfo of this.words.values()) { + total += wordInfo.occurs; + } + return total; + // return this.words.reduce((total, word) => total + word.occurs, 0); + } +} +/** + * A full text index allows all words in text nodes to be indexed and searched. + * Eg: "Every word in this text must be indexed." will be indexed with every word + * and can be queried with filters 'contains' and '!contains' a word, words or pattern. + * Eg: 'contains "text"', 'contains "text indexed"', 'contains "text in*"' will all match the text above. + * This does not use a thesauris or word lists (yet), so 'contains "query"' will not match. + * Each word will be stored and searched in lowercase + */ +export class FullTextIndex extends DataIndex { + constructor(storage, path, key, options) { + if (key === '{key}') { + throw new Error('Cannot create fulltext index on node keys'); + } + super(storage, path, key, options); + // this.enableReverseLookup = true; + this.indexMetadataKeys = ['_occurs_']; //,'_indexes_' + this.config = options.config || {}; + if (this.config.localeKey) { + // localeKey is supported by all indexes now + storage.debug.warn(`fulltext index config option "localeKey" has been deprecated, as it is now supported for all indexes. Move the setting to the global index settings`); + this.textLocaleKey = this.config.localeKey; // Do use it now + } + } + // get fileName() { + // return super.fileName.slice(0, -4) + '.fulltext.idx'; + // } + get type() { + return 'fulltext'; + } + getTextInfo(val, locale) { + return new TextInfo(val, { + locale: locale ?? this.textLocale, + prepare: this.config.prepare, + stemming: this.config.transform, + blacklist: this.config.blacklist, + whitelist: this.config.whitelist, + useStoplist: this.config.useStoplist, + minLength: this.config.minLength, + maxLength: this.config.maxLength, + }); + } + test(obj, op, val) { + if (obj === null) { + return op === 'fulltext:!contains'; + } + const text = obj[this.key]; + if (typeof text === 'undefined') { + return op === 'fulltext:!contains'; + } + const locale = obj?.[this.textLocaleKey] ?? this.textLocale; + const textInfo = this.getTextInfo(text, locale); + if (op === 'fulltext:contains') { + if (~val.indexOf(' OR ')) { + // split + const tests = val.split(' OR '); + return tests.some(val => this.test(text, op, val)); + } + else if (~val.indexOf('"')) { + // Phrase(s) used. We have to make sure the words used are not only in the text, + // but also in that exact order. + const phraseRegex = /"(.+?)"/g; + const phrases = []; + while (true) { + const match = phraseRegex.exec(val); + if (match === null) { + break; + } + const phrase = match[1]; + phrases.push(phrase); + val = val.slice(0, match.index) + val.slice(match.index + match[0].length); + phraseRegex.lastIndex = 0; + } + if (val.length > 0) { + phrases.push(val); + } + return phrases.every(phrase => { + const phraseInfo = this.getTextInfo(phrase, locale); + // This was broken before TS port because WordInfo had an array of words that was not + // in the same order as the source words were. + // TODO: Thoroughly test this new code + const phraseWords = phraseInfo.toSequence(); + const occurrencesPerWord = phraseWords.map((word, i) => { + // Find word in text + const { indexes } = textInfo.words.get(word); + return indexes; + }); + const hasSequenceAtIndex = (wordIndex, occurrenceIndex) => { + const startIndex = occurrencesPerWord[wordIndex]?.[occurrenceIndex]; + return occurrencesPerWord.slice(wordIndex + 1).every((occurences, i) => { + return occurences.some((index, j) => { + if (index !== startIndex + 1) { + return false; + } + return hasSequenceAtIndex(wordIndex + i, j); + }); + }); + }; + // Find the existence of a sequence of words + // Loop: for each occurrence of the first word in text, remember its index + // Try to find second word in text with index+1 + // - found: try to find third word in text with index+2, etc (recursive) + // - not found: stop, proceed with next occurrence in main loop + return occurrencesPerWord[0].some((occurrence, i) => { + return hasSequenceAtIndex(0, i); + }); + // const indexes = phraseInfo.words.map(word => textInfo.words.indexOf(word)); + // if (indexes[0] < 0) { return false; } + // for (let i = 1; i < indexes.length; i++) { + // if (indexes[i] - indexes[i-1] !== 1) { + // return false; + // } + // } + // return true; + }); + } + else { + // test 1 or more words + const wordsInfo = this.getTextInfo(val, locale); + return wordsInfo.toSequence().every(word => { + return textInfo.words.has(word); + }); + } + } + } + async handleRecordUpdate(path, oldValue, newValue) { + let oldText = oldValue !== null && typeof oldValue === 'object' && this.key in oldValue ? oldValue[this.key] : null; + let newText = newValue !== null && typeof newValue === 'object' && this.key in newValue ? newValue[this.key] : null; + const oldLocale = oldValue?.[this.textLocaleKey] ?? this.textLocale, newLocale = newValue?.[this.textLocaleKey] ?? this.textLocale; + if (typeof oldText === 'object' && oldText instanceof Array) { + oldText = oldText.join(' '); + } + if (typeof newText === 'object' && newText instanceof Array) { + newText = newText.join(' '); + } + const oldTextInfo = this.getTextInfo(oldText, oldLocale); + const newTextInfo = this.getTextInfo(newText, newLocale); + // super._updateReverseLookupKey( + // path, + // oldText ? textEncoder.encode(oldText) : null, + // newText ? textEncoder.encode(newText) : null, + // metadata + // ); + const oldWords = oldTextInfo.toArray(); //.words.map(w => w.word); + const newWords = newTextInfo.toArray(); //.words.map(w => w.word); + const removed = oldWords.filter(word => newWords.indexOf(word) < 0); + const added = newWords.filter(word => oldWords.indexOf(word) < 0); + const changed = oldWords.filter(word => newWords.indexOf(word) >= 0).filter(word => { + const oldInfo = oldTextInfo.getWordInfo(word); + const newInfo = newTextInfo.getWordInfo(word); + return oldInfo.occurs !== newInfo.occurs || oldInfo.indexes.some((index, i) => newInfo.indexes[i] !== index); + }); + changed.forEach(word => { + // Word metadata changed. Simplest solution: remove and add again + removed.push(word); + added.push(word); + }); + const promises = []; + // TODO: Prepare operations batch, then execute 1 tree update. + // Now every word is a seperate update which is not necessary! + removed.forEach(word => { + const p = super.handleRecordUpdate(path, { [this.key]: word }, { [this.key]: null }); + promises.push(p); + }); + added.forEach(word => { + const mutated = {}; + Object.assign(mutated, newValue); + mutated[this.key] = word; + const wordInfo = newTextInfo.getWordInfo(word); + // const indexMetadata = { + // '_occurs_': wordInfo.occurs, + // '_indexes_': wordInfo.indexes.join(',') + // }; + let occurs = wordInfo.indexes.join(','); + if (occurs.length > 255) { + console.warn(`FullTextIndex ${this.description}: word "${word}" occurs too many times in "${path}/${this.key}" to store in index metadata. Truncating occurrences`); + const cutIndex = occurs.lastIndexOf(',', 255); + occurs = occurs.slice(0, cutIndex); + } + const indexMetadata = { + '_occurs_': occurs, + }; + const p = super.handleRecordUpdate(path, { [this.key]: null }, mutated, indexMetadata); + promises.push(p); + }); + await Promise.all(promises); + } + build() { + return super.build({ + addCallback: (add, text, recordPointer, metadata, env) => { + if (typeof text === 'object' && text instanceof Array) { + text = text.join(' '); + } + if (typeof text === 'undefined') { + text = ''; + } + const locale = env.locale || this.textLocale; + const textInfo = this.getTextInfo(text, locale); + if (textInfo.words.size === 0) { + this.storage.debug.warn(`No words found in "${typeof text === 'string' && text.length > 50 ? text.slice(0, 50) + '...' : text}" to fulltext index "${env.path}"`); + } + // const revLookupKey = super._getRevLookupKey(env.path); + // tree.add(revLookupKey, textEncoder.encode(text), metadata); + textInfo.words.forEach(wordInfo => { + // IDEA: To enable fast '*word' queries (starting with wildcard), we can also store + // reversed words and run reversed query 'drow*' on it. we'd have to enable storing + // multiple B+Trees in a single index file: a 'forward' tree & a 'reversed' tree + // IDEA: Following up on previous idea: being able to backtrack nodes within an index would + // help to speed up sorting queries on an indexed key, + // eg: query .take(10).filter('rating','>=', 8).sort('title') + // does not filter on key 'title', but can then use an index on 'title' for the sorting: + // it can take the results from the 'rating' index and backtrack the nodes' titles to quickly + // get a sorted top 10. We'd have to store a seperate 'backtrack' tree that uses recordPointers + // as the key, and 'title' values as recordPointers. Caveat: max string length for sorting would + // then be 255 ASCII chars, because that's the recordPointer size limit. + // The same boost can currently only be achieved by creating an index that includes 'title' in + // the index on 'rating' ==> db.indexes.create('movies', 'rating', { include: ['title'] }) + // Extend metadata with more details about the word (occurrences, positions) + // const wordMetadata = { + // '_occurs_': wordInfo.occurs, + // '_indexes_': wordInfo.indexes.join(',') + // }; + let occurs = wordInfo.indexes.join(','); + if (occurs.length > 255) { + console.warn(`FullTextIndex ${this.description}: word "${wordInfo.word}" occurs too many times to store in index metadata. Truncating occurrences`); + const cutIndex = occurs.lastIndexOf(',', 255); + occurs = occurs.slice(0, cutIndex); + } + const wordMetadata = { + '_occurs_': occurs, + }; + Object.assign(wordMetadata, metadata); + add(wordInfo.word, recordPointer, wordMetadata); + }); + return textInfo.toArray(); //words.map(info => info.word); + }, + valueTypes: [VALUE_TYPES.STRING], + }); + } + static get validOperators() { + return ['fulltext:contains', 'fulltext:!contains']; + } + get validOperators() { + return FullTextIndex.validOperators; + } + async query(op, val, options) { + if (op instanceof BlacklistingSearchOperator) { + throw new Error(`Not implemented: Can't query fulltext index with blacklisting operator yet`); + } + if (op === 'fulltext:contains' || op === 'fulltext:!contains') { + return this.contains(op, val, options); + } + else { + throw new Error(`Fulltext indexes can only be queried with operators ${FullTextIndex.validOperators.map(op => `"${op}"`).join(', ')}`); + } + } + /** + * + * @param op Operator to use, can be either "fulltext:contains" or "fulltext:!contains" + * @param val Text to search for. Can include * and ? wildcards, OR's for combined searches, and "quotes" for phrase searches + */ + async contains(op, val, options = { + phrase: false, + locale: undefined, + minimumWildcardWordLength: 2, + }) { + if (!FullTextIndex.validOperators.includes(op)) { //if (op !== 'fulltext:contains' && op !== 'fulltext:not_contains') { + throw new Error(`Fulltext indexes can only be queried with operators ${FullTextIndex.validOperators.map(op => `"${op}"`).join(', ')}`); + } + // Check cache + const cache = this.cache(op, val); + if (cache) { + // Use cached results + return Promise.resolve(cache); + } + const stats = new IndexQueryStats(options.phrase ? 'fulltext_phrase_query' : 'fulltext_query', val, true); + // const searchWordRegex = /[\w'?*]+/g; // Use TextInfo to find and transform words using index settings + const getTextInfo = (text) => { + const info = new TextInfo(text, { + locale: options.locale || this.textLocale, + prepare: this.config.prepare, + stemming: this.config.transform, + minLength: this.config.minLength, + maxLength: this.config.maxLength, + blacklist: this.config.blacklist, + whitelist: this.config.whitelist, + useStoplist: this.config.useStoplist, + includeChars: '*?', + }); + // Ignore any wildcard words that do not meet the set minimum length + // This is to safeguard the system against (possibly unwanted) very large + // result sets + const words = info.toArray(); + let i; + while (i = words.findIndex(w => /^[*?]+$/.test(w)), i >= 0) { + // Word is wildcards only. Ignore + const word = words[i]; + info.ignored.push(word); + info.words.delete(word); + } + if (options.minimumWildcardWordLength > 0) { + for (const word of words) { + const starIndex = word.indexOf('*'); + // min = 2, word = 'an*', starIndex = 2, ok! + // min = 3: starIndex < min: not ok! + if (starIndex > 0 && starIndex < options.minimumWildcardWordLength) { + info.ignored.push(word); + info.words.delete(word); + i--; + } + } + } + return info; + }; + if (val.includes(' OR ')) { + // Multiple searches in one query: 'secret OR confidential OR "don't tell"' + // TODO: chain queries instead of running simultanious? + const queries = val.split(' OR '); + const promises = queries.map(q => this.query(op, q, options)); + const resultSets = await Promise.all(promises); + stats.steps.push(...resultSets.map(results => results.stats)); + const mergeStep = new IndexQueryStats('merge_expand', { sets: resultSets.length, results: resultSets.reduce((total, set) => total + set.length, 0) }, true); + stats.steps.push(mergeStep); + const merged = resultSets[0]; + resultSets.slice(1).forEach(results => { + results.forEach(result => { + const exists = ~merged.findIndex(r => r.path === result.path); + if (!exists) { + merged.push(result); + } + }); + }); + const results = IndexQueryResults.fromResults(merged, this.key); + mergeStep.stop(results.length); + stats.stop(results.length); + results.stats = stats; + results.hints.push(...resultSets.reduce((hints, set) => { hints.push(...set.hints); return hints; }, [])); + return results; + } + if (val.includes('"')) { + // Phrase(s) used. We have to make sure the words used are not only in the text, + // but also in that exact order. + const phraseRegex = /"(.+?)"/g; + const phrases = []; + while (true) { + const match = phraseRegex.exec(val); + if (match === null) { + break; + } + const phrase = match[1]; + phrases.push(phrase); + val = val.slice(0, match.index) + val.slice(match.index + match[0].length); + phraseRegex.lastIndex = 0; + } + const phraseOptions = {}; + Object.assign(phraseOptions, options); + phraseOptions.phrase = true; + const promises = phrases.map(phrase => this.query(op, phrase, phraseOptions)); + // Check if what is left over still contains words + if (val.length > 0 && getTextInfo(val).wordCount > 0) { //(val.match(searchWordRegex) !== null) { + // Add it + const promise = this.query(op, val, options); + promises.push(promise); + } + const resultSets = await Promise.all(promises); + stats.steps.push(...resultSets.map(results => results.stats)); + // Take shortest set, only keep results that are matched in all other sets + const mergeStep = new IndexQueryStats('merge_reduce', { sets: resultSets.length, results: resultSets.reduce((total, set) => total + set.length, 0) }, true); + resultSets.length > 1 && stats.steps.push(mergeStep); + const shortestSet = resultSets.sort((a, b) => a.length < b.length ? -1 : 1)[0]; + const otherSets = resultSets.slice(1); + const matches = shortestSet.reduce((matches, match) => { + // Check if the key is present in the other result sets + const path = match.path; + const matchedInAllSets = otherSets.every(set => set.findIndex(match => match.path === path) >= 0); + if (matchedInAllSets) { + matches.push(match); + } + return matches; + }, new IndexQueryResults()); + matches.filterKey = this.key; + mergeStep.stop(matches.length); + stats.stop(matches.length); + matches.stats = stats; + matches.hints.push(...resultSets.reduce((hints, set) => { hints.push(...set.hints); return hints; }, [])); + return matches; + } + const info = getTextInfo(val); + /** + * Add ignored words to the result hints + */ + function addIgnoredWordHints(results) { + // Add hints for ignored words + info.ignored.forEach(word => { + const hint = new FullTextIndexQueryHint(FullTextIndexQueryHint.types.ignoredWord, word); + results.hints.push(hint); + }); + } + const words = info.toArray(); + if (words.length === 0) { + // Resolve with empty array + stats.stop(0); + const results = IndexQueryResults.fromResults([], this.key); + results.stats = stats; + addIgnoredWordHints(results); + return results; + } + if (op === 'fulltext:!contains') { + // NEW: Use BlacklistingSearchOperator that uses all (unique) values in the index, + // besides the ones that get blacklisted along the way by our callback function + const wordChecks = words.map(word => { + if (word.includes('*') || word.includes('?')) { + const pattern = '^' + word.replace(/\*/g, '.*').replace(/\?/g, '.') + '$'; + const re = new RegExp(pattern, 'i'); + return re; + } + return word; + }); + const customOp = new BlacklistingSearchOperator(entry => { + const blacklist = wordChecks.some(word => { + if (word instanceof RegExp) { + return word.test(entry.key); + } + return entry.key === word; + }); + if (blacklist) { + return entry.values; + } + }); + stats.type = 'fulltext_blacklist_scan'; + const results = await super.query(customOp); + stats.stop(results.length); + results.filterKey = this.key; + results.stats = stats; + addIgnoredWordHints(results); + // Cache results + this.cache(op, val, results); + return results; + } + // op === 'fulltext:contains' + // Get result count for each word + const countPromises = words.map(word => { + const wildcardIndex = ~(~word.indexOf('*') || ~word.indexOf('?')); // TODO: improve readability + const wordOp = wildcardIndex >= 0 ? 'like' : '=='; + const step = new IndexQueryStats('count', { op: wordOp, word }, true); + stats.steps.push(step); + return super.count(wordOp, word) + .then(count => { + step.stop(count); + return { word, count }; + }); + }); + const counts = await Promise.all(countPromises); + // Start with the smallest result set + counts.sort((a, b) => { + if (a.count < b.count) { + return -1; + } + else if (a.count > b.count) { + return 1; + } + return 0; + }); + let results; + if (counts[0].count === 0) { + stats.stop(0); + this.storage.debug.log(`Word "${counts[0].word}" not found in index, 0 results for query ${op} "${val}"`); + results = new IndexQueryResults(0); + results.filterKey = this.key; + results.stats = stats; + addIgnoredWordHints(results); + // Add query hints for each unknown word + counts.forEach(c => { + if (c.count === 0) { + const hint = new FullTextIndexQueryHint(FullTextIndexQueryHint.types.missingWord, c.word); + results.hints.push(hint); + } + }); + // Cache the empty result set + this.cache(op, val, results); + return results; + } + const allWords = counts.map(c => c.word); + // Sequentual method: query 1 word, then filter results further and further + // More or less performs the same as parallel, but uses less memory + // NEW: Start with the smallest result set + // OLD: Use the longest word to search with, then filter those results + // const allWords = words.slice().sort((a,b) => { + // if (a.length < b.length) { return 1; } + // else if (a.length > b.length) { return -1; } + // return 0; + // }); + const queryWord = async (word, filter) => { + const wildcardIndex = ~(~word.indexOf('*') || ~word.indexOf('?')); // TODO: improve readability + const wordOp = wildcardIndex >= 0 ? 'like' : '=='; + // const step = new IndexQueryStats('query', { op: wordOp, word }, true); + // stats.steps.push(step); + const results = await super.query(wordOp, word, { filter }); + stats.steps.push(results.stats); + // step.stop(results.length); + return results; + }; + let wordIndex = 0; + const resultsPerWord = new Array(words.length); + const nextWord = async () => { + const word = allWords[wordIndex]; + const t1 = Date.now(); + const fr = await queryWord(word, results); + const t2 = Date.now(); + this.storage.debug.log(`fulltext search for "${word}" took ${t2 - t1}ms`); + resultsPerWord[words.indexOf(word)] = fr; + results = fr; + wordIndex++; + if (results.length === 0 || wordIndex === allWords.length) { + return; + } + await nextWord(); + }; + await nextWord(); + if (options.phrase === true && allWords.length > 1) { + // Check which results have the words in the right order + const step = new IndexQueryStats('phrase_check', val, true); + stats.steps.push(step); + results = results.reduce((matches, match) => { + // the order of the resultsPerWord is in the same order as the given words, + // check if their metadata._occurs_ say the same about the indexed content + const path = match.path; + const wordMatches = resultsPerWord.map(results => { + return results.find(result => result.path === path); + }); + // Convert the _occurs_ strings to arrays we can use + wordMatches.forEach(match => { + match.metadata._occurs_ = match.metadata._occurs_.split(',').map(parseInt); + }); + const check = (wordMatchIndex, prevWordIndex) => { + const sourceIndexes = wordMatches[wordMatchIndex].metadata._occurs_; + if (typeof prevWordIndex !== 'number') { + // try with each sourceIndex of the first word + for (let i = 0; i < sourceIndexes.length; i++) { + const found = check(1, sourceIndexes[i]); + if (found) { + return true; + } + } + return false; + } + // We're in a recursive call on the 2nd+ word + if (sourceIndexes.includes(prevWordIndex + 1)) { + // This word came after the previous word, hooray! + // Proceed with next word, or report success if this was the last word to check + if (wordMatchIndex === wordMatches.length - 1) { + return true; + } + return check(wordMatchIndex + 1, prevWordIndex + 1); + } + else { + return false; + } + }; + if (check(0)) { + matches.push(match); // Keep! + } + return matches; + }, new IndexQueryResults()); + step.stop(results.length); + } + results.filterKey = this.key; + stats.stop(results.length); + results.stats = stats; + addIgnoredWordHints(results); + // Cache results + delete results.entryValues; // No need to cache these. Free the memory + this.cache(op, val, results); + return results; + // Parallel method: query all words at the same time, then combine results + // Uses more memory + // const promises = words.map(word => { + // const wildcardIndex = ~(~word.indexOf('*') || ~word.indexOf('?')); + // let wordOp; + // if (op === 'fulltext:contains') { + // wordOp = wildcardIndex >= 0 ? 'like' : '=='; + // } + // else if (op === 'fulltext:!contains') { + // wordOp = wildcardIndex >= 0 ? '!like' : '!='; + // } + // // return super.query(wordOp, word) + // return super.query(wordOp, word) + // }); + // return Promise.all(promises) + // .then(resultSets => { + // // Now only use matches that exist in all result sets + // const sortedSets = resultSets.slice().sort((a,b) => a.length < b.length ? -1 : 1) + // const shortestSet = sortedSets[0]; + // const otherSets = sortedSets.slice(1); + // let matches = shortestSet.reduce((matches, match) => { + // // Check if the key is present in the other result sets + // const path = match.path; + // const matchedInAllSets = otherSets.every(set => set.findIndex(match => match.path === path) >= 0); + // if (matchedInAllSets) { matches.push(match); } + // return matches; + // }, new IndexQueryResults()); + // if (options.phrase === true && resultSets.length > 1) { + // // Check if the words are in the right order + // console.log(`Breakpoint time`); + // matches = matches.reduce((matches, match) => { + // // the order of the resultSets is in the same order as the given words, + // // check if their metadata._indexes_ say the same about the indexed content + // const path = match.path; + // const wordMatches = resultSets.map(set => { + // return set.find(match => match.path === path); + // }); + // // Convert the _indexes_ strings to arrays we can use + // wordMatches.forEach(match => { + // // match.metadata._indexes_ = match.metadata._indexes_.split(',').map(parseInt); + // match.metadata._occurs_ = match.metadata._occurs_.split(',').map(parseInt); + // }); + // const check = (wordMatchIndex, prevWordIndex) => { + // const sourceIndexes = wordMatches[wordMatchIndex].metadata._occurs_; //wordMatches[wordMatchIndex].metadata._indexes_; + // if (typeof prevWordIndex !== 'number') { + // // try with each sourceIndex of the first word + // for (let i = 0; i < sourceIndexes.length; i++) { + // const found = check(1, sourceIndexes[i]); + // if (found) { return true; } + // } + // return false; + // } + // // We're in a recursive call on the 2nd+ word + // if (~sourceIndexes.indexOf(prevWordIndex + 1)) { + // // This word came after the previous word, hooray! + // // Proceed with next word, or report success if this was the last word to check + // if (wordMatchIndex === wordMatches.length-1) { return true; } + // return check(wordMatchIndex+1, prevWordIndex+1); + // } + // else { + // return false; + // } + // } + // if (check(0)) { + // matches.push(match); // Keep! + // } + // return matches; + // }, new IndexQueryResults()); + // } + // matches.filterKey = this.key; + // return matches; + // }); + } +} +//# sourceMappingURL=fulltext-index.js.map \ No newline at end of file diff --git a/dist/esm/data-index/fulltext-index.js.map b/dist/esm/data-index/fulltext-index.js.map new file mode 100644 index 0000000..d7b722a --- /dev/null +++ b/dist/esm/data-index/fulltext-index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"fulltext-index.js","sourceRoot":"","sources":["../../../src/data-index/fulltext-index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/data-index/geo-index.js b/dist/esm/data-index/geo-index.js new file mode 100644 index 0000000..776c319 --- /dev/null +++ b/dist/esm/data-index/geo-index.js @@ -0,0 +1,254 @@ +import { BlacklistingSearchOperator } from '../btree/index.js'; +import { VALUE_TYPES } from '../node-value-types.js'; +import { DataIndex } from './data-index.js'; +import { IndexQueryResults } from './query-results.js'; +import { IndexQueryStats } from './query-stats.js'; +import * as Geohash from '../geohash.js'; +function _getGeoRadiusPrecision(radiusM) { + if (typeof radiusM !== 'number') { + return; + } + if (radiusM < 0.01) { + return 12; + } + if (radiusM < 0.075) { + return 11; + } + if (radiusM < 0.6) { + return 10; + } + if (radiusM < 2.3) { + return 9; + } + if (radiusM < 19) { + return 8; + } + if (radiusM < 76) { + return 7; + } + if (radiusM < 610) { + return 6; + } + if (radiusM < 2400) { + return 5; + } + if (radiusM < 19500) { + return 4; + } + if (radiusM < 78700) { + return 3; + } + if (radiusM < 626000) { + return 2; + } + return 1; +} +function _getGeoHash(obj) { + if (typeof obj.lat !== 'number' || typeof obj.long !== 'number') { + return; + } + const precision = 10; //_getGeoRadiusPrecision(obj.radius); + const geohash = Geohash.encode(obj.lat, obj.long, precision); + return geohash; +} +// Calculates which hashes (of different precisions) are within the radius of a point +function _hashesInRadius(lat, lon, radiusM, precision) { + const isInCircle = (checkLat, checkLon, lat, lon, radiusM) => { + const deltaLon = checkLon - lon; + const deltaLat = checkLat - lat; + return Math.pow(deltaLon, 2) + Math.pow(deltaLat, 2) <= Math.pow(radiusM, 2); + }; + const getCentroid = (latitude, longitude, height, width) => { + const y_cen = latitude + (height / 2); + const x_cen = longitude + (width / 2); + return { x: x_cen, y: y_cen }; + }; + const convertToLatLon = (y, x, lat, lon) => { + const pi = 3.14159265359; + const r_earth = 6371000; + const lat_diff = (y / r_earth) * (180 / pi); + const lon_diff = (x / r_earth) * (180 / pi) / Math.cos(lat * pi / 180); + const final_lat = lat + lat_diff; + const final_lon = lon + lon_diff; + return { lat: final_lat, lon: final_lon }; + }; + const x = 0; + const y = 0; + const points = []; + const geohashes = []; + const gridWidths = [5009400.0, 1252300.0, 156500.0, 39100.0, 4900.0, 1200.0, 152.9, 38.2, 4.8, 1.2, 0.149, 0.0370]; + const gridHeights = [4992600.0, 624100.0, 156000.0, 19500.0, 4900.0, 609.4, 152.4, 19.0, 4.8, 0.595, 0.149, 0.0199]; + const height = gridHeights[precision - 1] / 2; + const width = gridWidths[precision - 1] / 2; + const latMoves = Math.ceil(radiusM / height); + const lonMoves = Math.ceil(radiusM / width); + for (let i = 0; i <= latMoves; i++) { + const tmpLat = y + height * i; + for (let j = 0; j < lonMoves; j++) { + const tmpLon = x + width * j; + if (isInCircle(tmpLat, tmpLon, y, x, radiusM)) { + const center = getCentroid(tmpLat, tmpLon, height, width); + points.push(convertToLatLon(center.y, center.x, lat, lon)); + points.push(convertToLatLon(-center.y, center.x, lat, lon)); + points.push(convertToLatLon(center.y, -center.x, lat, lon)); + points.push(convertToLatLon(-center.y, -center.x, lat, lon)); + } + } + } + points.forEach(point => { + const hash = Geohash.encode(point.lat, point.lon, precision); + if (geohashes.indexOf(hash) < 0) { + geohashes.push(hash); + } + }); + // Original optionally uses Georaptor compression of geohashes + // This is my simple implementation + geohashes.forEach((currentHash, index, arr) => { + const precision = currentHash.length; + const parentHash = currentHash.substr(0, precision - 1); + let hashNeighbourMatches = 0; + const removeIndexes = []; + arr.forEach((otherHash, otherIndex) => { + if (otherHash.startsWith(parentHash)) { + removeIndexes.push(otherIndex); + if (otherHash.length == precision) { + hashNeighbourMatches++; + } + } + }); + if (hashNeighbourMatches === 32) { + // All 32 areas of a less precise geohash are included. + // Replace those with the less precise parent + for (let i = removeIndexes.length - 1; i >= 0; i--) { + arr.splice(i, 1); + } + arr.splice(index, 0, parentHash); + } + }); + return geohashes; +} +export class GeoIndex extends DataIndex { + constructor(storage, path, key, options) { + if (key === '{key}') { + throw new Error('Cannot create geo index on node keys'); + } + super(storage, path, key, options); + } + // get fileName() { + // return super.fileName.slice(0, -4) + '.geo.idx'; + // } + get type() { + return 'geo'; + } + async handleRecordUpdate(path, oldValue, newValue) { + const mutated = { old: {}, new: {} }; + oldValue !== null && typeof oldValue === 'object' && Object.assign(mutated.old, oldValue); + newValue !== null && typeof newValue === 'object' && Object.assign(mutated.new, newValue); + if (mutated.old[this.key] !== null && typeof mutated.old[this.key] === 'object') { + mutated.old[this.key] = _getGeoHash(mutated.old[this.key]); + } + if (mutated.new[this.key] !== null && typeof mutated.new[this.key] === 'object') { + mutated.new[this.key] = _getGeoHash(mutated.new[this.key]); + } + super.handleRecordUpdate(path, mutated.old, mutated.new); + } + build() { + return super.build({ + addCallback: (add, obj, recordPointer, metadata) => { + if (typeof obj !== 'object') { + this.storage.debug.warn(`GeoIndex cannot index location because value "${obj}" is not an object`); + return; + } + if (typeof obj.lat !== 'number' || typeof obj.long !== 'number') { + this.storage.debug.warn(`GeoIndex cannot index location because lat (${obj.lat}) or long (${obj.long}) are invalid`); + return; + } + const geohash = _getGeoHash(obj); + add(geohash, recordPointer, metadata); + return geohash; + }, + valueTypes: [VALUE_TYPES.OBJECT], + }); + } + static get validOperators() { + return ['geo:nearby']; + } + get validOperators() { + return GeoIndex.validOperators; + } + test(obj, op, val) { + if (!this.validOperators.includes(op)) { + throw new Error(`Unsupported operator "${op}"`); + } + if (obj == null || typeof obj !== 'object') { + // No source object + return false; + } + const src = obj[this.key]; + if (typeof src !== 'object' || typeof src.lat !== 'number' || typeof src.long !== 'number') { + // source object is not geo + return false; + } + if (typeof val !== 'object' || typeof val.lat !== 'number' || typeof val.long !== 'number' || typeof val.radius !== 'number') { + // compare object is not geo with radius + return false; + } + const isInCircle = (checkLat, checkLon, lat, lon, radiusM) => { + const deltaLon = checkLon - lon; + const deltaLat = checkLat - lat; + return Math.pow(deltaLon, 2) + Math.pow(deltaLat, 2) <= Math.pow(radiusM, 2); + }; + return isInCircle(src.lat, src.long, val.lat, val.long, val.radius); + } + async query(op, val, options) { + if (op instanceof BlacklistingSearchOperator) { + throw new Error(`Not implemented: Can't query geo index with blacklisting operator yet`); + } + if (options) { + this.storage.debug.warn('Not implemented: query options for geo indexes are ignored'); + } + if (op === 'geo:nearby') { + if (val === null || typeof val !== 'object' || !('lat' in val) || !('long' in val) || !('radius' in val)) { + throw new Error(`geo nearby query expects an object with lat, long and radius properties`); + } + return this.nearby(val); + } + else { + throw new Error(`Geo indexes can only be queried with operators ${GeoIndex.validOperators.map(op => `"${op}"`).join(', ')}`); + } + } + /** + * @param op Only 'geo:nearby' is supported at the moment + */ + async nearby(val) { + const op = 'geo:nearby'; + // Check cache + const cached = this.cache(op, val); + if (cached) { + // Use cached results + return cached; + } + if (typeof val.lat !== 'number' || typeof val.long !== 'number' || typeof val.radius !== 'number') { + throw new Error('geo:nearby query must supply an object with properties .lat, .long and .radius'); + } + const stats = new IndexQueryStats('geo_nearby_query', val, true); + const precision = _getGeoRadiusPrecision(val.radius / 10); + const targetHashes = _hashesInRadius(val.lat, val.long, val.radius, precision); + stats.queries = targetHashes.length; + const promises = targetHashes.map(hash => { + return super.query('like', `${hash}*`); + }); + const resultSets = await Promise.all(promises); + // Combine all results + const results = new IndexQueryResults(); + results.filterKey = this.key; + resultSets.forEach(set => { + set.forEach(match => results.push(match)); + }); + stats.stop(results.length); + results.stats = stats; + this.cache(op, val, results); + return results; + } +} +//# sourceMappingURL=geo-index.js.map \ No newline at end of file diff --git a/dist/esm/data-index/geo-index.js.map b/dist/esm/data-index/geo-index.js.map new file mode 100644 index 0000000..322fe3f --- /dev/null +++ b/dist/esm/data-index/geo-index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"geo-index.js","sourceRoot":"","sources":["../../../src/data-index/geo-index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/data-index/index.js b/dist/esm/data-index/index.js new file mode 100644 index 0000000..c562b4b --- /dev/null +++ b/dist/esm/data-index/index.js @@ -0,0 +1,13 @@ +import { DataIndex } from './data-index.js'; +import { FullTextIndex } from './fulltext-index.js'; +import { GeoIndex } from './geo-index.js'; +import { ArrayIndex } from './array-index.js'; +export { DataIndex, FullTextIndex, GeoIndex, ArrayIndex }; +export { IndexQueryResults } from './query-results.js'; +DataIndex.KnownIndexTypes = { + normal: DataIndex, + fulltext: FullTextIndex, + geo: GeoIndex, + array: ArrayIndex, +}; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/esm/data-index/index.js.map b/dist/esm/data-index/index.js.map new file mode 100644 index 0000000..3277845 --- /dev/null +++ b/dist/esm/data-index/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/data-index/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,SAAS,CAAC,eAAe,GAAG;IACxB,MAAM,EAAE,SAAS;IACjB,QAAQ,EAAE,aAAa;IACvB,GAAG,EAAE,QAAQ;IACb,KAAK,EAAE,UAAU;CACpB,CAAC"} \ No newline at end of file diff --git a/dist/esm/data-index/options.js b/dist/esm/data-index/options.js new file mode 100644 index 0000000..e9ded40 --- /dev/null +++ b/dist/esm/data-index/options.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=options.js.map \ No newline at end of file diff --git a/dist/esm/data-index/options.js.map b/dist/esm/data-index/options.js.map new file mode 100644 index 0000000..e286995 --- /dev/null +++ b/dist/esm/data-index/options.js.map @@ -0,0 +1 @@ +{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/data-index/options.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/esm/data-index/query-hint.js b/dist/esm/data-index/query-hint.js new file mode 100644 index 0000000..478c250 --- /dev/null +++ b/dist/esm/data-index/query-hint.js @@ -0,0 +1,7 @@ +export class IndexQueryHint { + constructor(type, value) { + this.type = type; + this.value = value; + } +} +//# sourceMappingURL=query-hint.js.map \ No newline at end of file diff --git a/dist/esm/data-index/query-hint.js.map b/dist/esm/data-index/query-hint.js.map new file mode 100644 index 0000000..516a964 --- /dev/null +++ b/dist/esm/data-index/query-hint.js.map @@ -0,0 +1 @@ +{"version":3,"file":"query-hint.js","sourceRoot":"","sources":["../../../src/data-index/query-hint.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAc;IACvB,YAAmB,IAAY,EAAS,KAAc;QAAnC,SAAI,GAAJ,IAAI,CAAQ;QAAS,UAAK,GAAL,KAAK,CAAS;IAAI,CAAC;CAC9D"} \ No newline at end of file diff --git a/dist/esm/data-index/query-results.js b/dist/esm/data-index/query-results.js new file mode 100644 index 0000000..1889ba4 --- /dev/null +++ b/dist/esm/data-index/query-results.js @@ -0,0 +1,101 @@ +export class IndexQueryResult { + constructor(key, path, value, metadata) { + this.key = key; + this.path = path; + this.value = value; + this.metadata = metadata; + } +} +export class IndexQueryResults extends Array { + constructor(...args) { + super(...args); + this.hints = []; + this.stats = null; + } + static fromResults(results, filterKey) { + const arr = new IndexQueryResults(results.length); + results.forEach((result, i) => arr[i] = result); + arr.filterKey = filterKey; + return arr; + } + // /** @param {BinaryBPlusTreeLeafEntry[]} entries */ + // set treeEntries(entries) { + // this._treeEntries = entries; + // } + // /** @type {BinaryBPlusTreeLeafEntry[]} */ + // get treeEntries() { + // return this._treeEntries; + // } + // filter(callback: (result: IndexQueryResult, index: number, arr: IndexQueryResults) => boolean) { + // return super.filter(callback); + // } + filterMetadata(key, op, compare) { + if (typeof compare === 'undefined') { + compare = null; // compare with null so <, <=, > etc will get the right results + } + if (op === 'exists' || op === '!exists') { + op = op === 'exists' ? '!=' : '=='; + compare = null; + } + const filtered = this.filter(result => { + let value = key === this.filterKey ? result.value : result.metadata ? result.metadata[key] : null; + if (typeof value === 'undefined') { + value = null; // compare with null + } + if (op === '<') { + return value < compare; + } + if (op === '<=') { + return value <= compare; + } + if (op === '>') { + return value > compare; + } + if (op === '>=') { + return value >= compare; + } + if (op === '==') { + return value == compare; + } + if (op === '!=') { + return value != compare; + } + if (op === 'like' || op === '!like') { + if (typeof compare !== 'string') { + return op === '!like'; + } + const pattern = '^' + compare.replace(/\*/g, '.*').replace(/\?/g, '.') + '$'; + const re = new RegExp(pattern, 'i'); + const isLike = re.test(value); + return op === 'like' ? isLike : !isLike; + } + if (op === 'in' || op === '!in') { + const isIn = compare instanceof Array && compare.includes(value); + return op === 'in' ? isIn : !isIn; + } + if (op == 'between' || op === '!between') { + if (!(compare instanceof Array)) { + return op === '!between'; + } + let bottom = compare[0], top = compare[1]; + if (top < bottom) { + const swap = top; + top = bottom; + bottom = swap; + } + const isBetween = value >= bottom && value <= top; + return op === 'between' ? isBetween : !isBetween; + } + if (op === 'matches' || op === '!matches') { + if (!(compare instanceof RegExp)) { + return op === '!matches'; + } + const re = compare; + const isMatch = re.test(value); + return op === 'matches' ? isMatch : !isMatch; + } + }); + return IndexQueryResults.fromResults(filtered, this.filterKey); + } +} +//# sourceMappingURL=query-results.js.map \ No newline at end of file diff --git a/dist/esm/data-index/query-results.js.map b/dist/esm/data-index/query-results.js.map new file mode 100644 index 0000000..2b7cef2 --- /dev/null +++ b/dist/esm/data-index/query-results.js.map @@ -0,0 +1 @@ +{"version":3,"file":"query-results.js","sourceRoot":"","sources":["../../../src/data-index/query-results.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/data-index/query-stats.js b/dist/esm/data-index/query-stats.js new file mode 100644 index 0000000..fa6b023 --- /dev/null +++ b/dist/esm/data-index/query-stats.js @@ -0,0 +1,26 @@ +export class IndexQueryStats { + constructor(type, args, start = false) { + this.type = type; + this.args = args; + this.started = 0; + this.stopped = 0; + this.steps = []; + this.result = null; + /** + * Used by GeoIndex: amount of queries executed to get results + */ + this.queries = 1; + if (start) { + this.start(); + } + } + start() { + this.started = Date.now(); + } + stop(result = null) { + this.stopped = Date.now(); + this.result = result; + } + get duration() { return this.stopped - this.started; } +} +//# sourceMappingURL=query-stats.js.map \ No newline at end of file diff --git a/dist/esm/data-index/query-stats.js.map b/dist/esm/data-index/query-stats.js.map new file mode 100644 index 0000000..48010e4 --- /dev/null +++ b/dist/esm/data-index/query-stats.js.map @@ -0,0 +1 @@ +{"version":3,"file":"query-stats.js","sourceRoot":"","sources":["../../../src/data-index/query-stats.ts"],"names":[],"mappings":"AACA,MAAM,OAAO,eAAe;IAWxB,YAAmB,IAAY,EAAS,IAAa,EAAE,KAAK,GAAG,KAAK;QAAjD,SAAI,GAAJ,IAAI,CAAQ;QAAS,SAAI,GAAJ,IAAI,CAAS;QAV9C,YAAO,GAAG,CAAC,CAAC;QACZ,YAAO,GAAG,CAAC,CAAC;QACZ,UAAK,GAAG,EAAuB,CAAC;QAChC,WAAM,GAAG,IAAW,CAAC;QAE5B;;WAEG;QACI,YAAO,GAAG,CAAC,CAAC;QAGf,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,KAAK,EAAE,CAAC;SAChB;IACL,CAAC;IAED,KAAK;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,SAAc,IAAI;QACnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;CACzD"} \ No newline at end of file diff --git a/dist/esm/data-index/shared.js b/dist/esm/data-index/shared.js new file mode 100644 index 0000000..62fc803 --- /dev/null +++ b/dist/esm/data-index/shared.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=shared.js.map \ No newline at end of file diff --git a/dist/esm/data-index/shared.js.map b/dist/esm/data-index/shared.js.map new file mode 100644 index 0000000..e50b07e --- /dev/null +++ b/dist/esm/data-index/shared.js.map @@ -0,0 +1 @@ +{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/data-index/shared.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/esm/detailed-error.js b/dist/esm/detailed-error.js new file mode 100644 index 0000000..854b665 --- /dev/null +++ b/dist/esm/detailed-error.js @@ -0,0 +1,48 @@ +/* eslint-disable @typescript-eslint/no-this-alias */ +export class DetailedError extends Error { + /** + * + * @param code code identifying the error + * @param message user/developer friendly error message + * @param originalError optional original error thrown to enable stack debugging for caught-rethrown errors + */ + constructor(code, message, originalError = null) { + super(message); + this.code = code; + this.originalError = originalError; + } + get codes() { + const arr = []; + let err = this; + while (err) { + arr.push(err instanceof DetailedError ? err.code : 'thrown'); + err = err instanceof DetailedError ? err.originalError : null; + } + return arr; + } + get stacks() { + const arr = []; + let err = this; + while (err) { + arr.push(err.stack); + err = err instanceof DetailedError ? err.originalError : null; + } + return arr.join('\r\n-----------------\r\n'); + } + hasErrorCode(code) { + let err = this; + while (err.code !== code && err.originalError) { + err = err.originalError; + } + return err.code === code; + // TODO: Maybe just use this for simplicity: + // return this.codes.includes(code); + } + static hasErrorCode(err, code) { + if (!(err instanceof DetailedError)) { + return false; + } + return err.hasErrorCode(code); + } +} +//# sourceMappingURL=detailed-error.js.map \ No newline at end of file diff --git a/dist/esm/detailed-error.js.map b/dist/esm/detailed-error.js.map new file mode 100644 index 0000000..dbf83d3 --- /dev/null +++ b/dist/esm/detailed-error.js.map @@ -0,0 +1 @@ +{"version":3,"file":"detailed-error.js","sourceRoot":"","sources":["../../src/detailed-error.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,MAAM,OAAO,aAAc,SAAQ,KAAK;IAMpC;;;;;OAKG;IACH,YAAY,IAAY,EAAE,OAAe,EAAE,gBAAuC,IAAI;QAClF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACvC,CAAC;IAED,IAAI,KAAK;QACL,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,IAAI,GAAG,GAAU,IAAI,CAAC;QACtB,OAAM,GAAG,EAAE;YACP,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC7D,GAAG,GAAG,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;SACjE;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,IAAI,MAAM;QACN,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,IAAI,GAAG,GAAU,IAAI,CAAC;QACtB,OAAM,GAAG,EAAE;YACP,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpB,GAAG,GAAG,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;SACjE;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACjD,CAAC;IAED,YAAY,CAAC,IAAY;QACrB,IAAI,GAAG,GAAkB,IAAI,CAAC;QAC9B,OAAO,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,aAAa,EAAE;YAC3C,GAAG,GAAG,GAAG,CAAC,aAA8B,CAAC;SAC5C;QACD,OAAO,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;QACzB,4CAA4C;QAC5C,oCAAoC;IACxC,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,GAAU,EAAE,IAAY;QACxC,IAAI,CAAC,CAAC,GAAG,YAAY,aAAa,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;SAAE;QACtD,OAAO,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/esm/geohash.js b/dist/esm/geohash.js new file mode 100644 index 0000000..9e2ae8e --- /dev/null +++ b/dist/esm/geohash.js @@ -0,0 +1,199 @@ +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +/* Geohash encoding/decoding and associated functions (c) Chris Veness 2014-2016 / MIT Licence */ +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +/** + * Geohash encode, decode, bounds, neighbours. + */ +/* (Geohash-specific) Base32 map */ +const base32 = '0123456789bcdefghjkmnpqrstuvwxyz'; +/** + * Encodes latitude/longitude to geohash, either to specified precision or to automatically + * evaluated precision. + * @param lat - Latitude in degrees. + * @param lon - Longitude in degrees. + * @param precision - Number of characters in resulting + * @returns Geohash of supplied latitude/longitude. + * @example + * let geohash = encode(52.205, 0.119, 7); // geohash: 'u120fxw' + */ +export const encode = function (lat, lon, precision) { + // infer precision? + if (typeof precision == 'undefined') { + // refine geohash until it matches precision of supplied lat/lon + for (let p = 1; p <= 12; p++) { + const hash = encode(lat, lon, p); + const posn = decode(hash); + if (posn.lat == lat && posn.lon == lon) + return hash; + } + precision = 12; // set to maximum + } + lat = Number(lat); + lon = Number(lon); + precision = Number(precision); + if (isNaN(lat) || isNaN(lon) || isNaN(precision)) + throw new Error('Invalid geohash'); + let idx = 0; // index into base32 map + let bit = 0; // each char holds 5 bits + let evenBit = true; + let geohash = ''; + let latMin = -90, latMax = 90; + let lonMin = -180, lonMax = 180; + while (geohash.length < precision) { + if (evenBit) { + // bisect E-W longitude + const lonMid = (lonMin + lonMax) / 2; + if (lon >= lonMid) { + idx = idx * 2 + 1; + lonMin = lonMid; + } + else { + idx = idx * 2; + lonMax = lonMid; + } + } + else { + // bisect N-S latitude + const latMid = (latMin + latMax) / 2; + if (lat >= latMid) { + idx = idx * 2 + 1; + latMin = latMid; + } + else { + idx = idx * 2; + latMax = latMid; + } + } + evenBit = !evenBit; + if (++bit == 5) { + // 5 bits gives us a character: append it and start over + geohash += base32.charAt(idx); + bit = 0; + idx = 0; + } + } + return geohash; +}; +/** + * Decode geohash to latitude/longitude (location is approximate centre of geohash cell, + * to reasonable precision). + * @param geohash Geohash string to be converted to latitude/longitude. + * @returns (Center of) geohashed location. + * + * @example + * let latlon = decode('u120fxw'); // latlon: { lat: 52.205, lon: 0.1188 } + */ +export const decode = function (geohash) { + const b = bounds(geohash); // <-- the hard work + // now just determine the centre of the cell... + const latMin = b.sw.lat, lonMin = b.sw.lon; + const latMax = b.ne.lat, lonMax = b.ne.lon; + // cell centre + let lat = (latMin + latMax) / 2; + let lon = (lonMin + lonMax) / 2; + // round to close to centre without excessive precision: ⌊2-log10(Δ°)⌋ decimal places + lat = Number(lat.toFixed(Math.floor(2 - Math.log(latMax - latMin) / Math.LN10))); + lon = Number(lon.toFixed(Math.floor(2 - Math.log(lonMax - lonMin) / Math.LN10))); + return { lat, lon }; +}; +/** + * Returns SW/NE latitude/longitude bounds of specified cell + * @param geohash Cell that bounds are required of. + */ +export const bounds = function (geohash) { + if (geohash.length === 0) + throw new Error('Invalid geohash'); + geohash = geohash.toLowerCase(); + let evenBit = true; + let latMin = -90, latMax = 90; + let lonMin = -180, lonMax = 180; + for (let i = 0; i < geohash.length; i++) { + const chr = geohash.charAt(i); + const idx = base32.indexOf(chr); + if (idx == -1) + throw new Error('Invalid geohash'); + for (let n = 4; n >= 0; n--) { + const bitN = idx >> n & 1; + if (evenBit) { + // longitude + const lonMid = (lonMin + lonMax) / 2; + if (bitN == 1) { + lonMin = lonMid; + } + else { + lonMax = lonMid; + } + } + else { + // latitude + const latMid = (latMin + latMax) / 2; + if (bitN == 1) { + latMin = latMid; + } + else { + latMax = latMid; + } + } + evenBit = !evenBit; + } + } + const bounds = { + sw: { lat: latMin, lon: lonMin }, + ne: { lat: latMax, lon: lonMax }, + }; + return bounds; +}; +/** + * Determines adjacent cell in given direction. + * @param geohash Cell to which adjacent cell is required. + * @param direction Direction from geohash (N/S/E/W). + * @returns Geocode of adjacent cell. + * @throws Invalid + */ +export const adjacent = function (geohash, direction) { + // based on github.com/davetroy/geohash-js + geohash = geohash.toLowerCase(); + direction = direction.toLowerCase(); + if (length === 0) + throw new Error('Invalid geohash'); + if ('nsew'.indexOf(direction) == -1) + throw new Error('Invalid direction'); + const neighbour = { + n: ['p0r21436x8zb9dcf5h7kjnmqesgutwvy', 'bc01fg45238967deuvhjyznpkmstqrwx'], + s: ['14365h7k9dcfesgujnmqp0r2twvyx8zb', '238967debc01fg45kmstqrwxuvhjyznp'], + e: ['bc01fg45238967deuvhjyznpkmstqrwx', 'p0r21436x8zb9dcf5h7kjnmqesgutwvy'], + w: ['238967debc01fg45kmstqrwxuvhjyznp', '14365h7k9dcfesgujnmqp0r2twvyx8zb'], + }; + const border = { + n: ['prxz', 'bcfguvyz'], + s: ['028b', '0145hjnp'], + e: ['bcfguvyz', 'prxz'], + w: ['0145hjnp', '028b'], + }; + const lastCh = geohash.slice(-1); // last character of hash + let parent = geohash.slice(0, -1); // hash without last character + const type = geohash.length % 2; + // check for edge-cases which don't share common prefix + if (border[direction][type].indexOf(lastCh) != -1 && parent !== '') { + parent = adjacent(parent, direction); + } + // append letter for direction to parent + return parent + base32.charAt(neighbour[direction][type].indexOf(lastCh)); +}; +/** + * Returns all 8 adjacent cells to specified cell + * @param geohash Geohash neighbours are required of. + */ +export const neighbours = function (geohash) { + return { + 'n': adjacent(geohash, 'n'), + 'ne': adjacent(adjacent(geohash, 'n'), 'e'), + 'e': adjacent(geohash, 'e'), + 'se': adjacent(adjacent(geohash, 's'), 'e'), + 's': adjacent(geohash, 's'), + 'sw': adjacent(adjacent(geohash, 's'), 'w'), + 'w': adjacent(geohash, 'w'), + 'nw': adjacent(adjacent(geohash, 'n'), 'w'), + }; +}; +//# sourceMappingURL=geohash.js.map \ No newline at end of file diff --git a/dist/esm/geohash.js.map b/dist/esm/geohash.js.map new file mode 100644 index 0000000..5432366 --- /dev/null +++ b/dist/esm/geohash.js.map @@ -0,0 +1 @@ +{"version":3,"file":"geohash.js","sourceRoot":"","sources":["../../src/geohash.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/index.d.ts b/dist/esm/index.d.ts new file mode 100644 index 0000000..81a39a8 --- /dev/null +++ b/dist/esm/index.d.ts @@ -0,0 +1 @@ +export * from '../types'; diff --git a/dist/esm/index.js b/dist/esm/index.js new file mode 100644 index 0000000..8f5a0ef --- /dev/null +++ b/dist/esm/index.js @@ -0,0 +1,26 @@ +/** + ________________________________________________________________________________ + + ___ ______ + / _ \ | ___ \ + / /_\ \ ___ ___| |_/ / __ _ ___ ___ + | _ |/ __/ _ \ ___ \/ _` / __|/ _ \ + | | | | (_| __/ |_/ / (_| \__ \ __/ + \_| |_/\___\___\____/ \__,_|___/\___| + realtime database + + Copyright 2018-2022 by Ewout Stortenbeker (me@appy.one) + Published under MIT license + + See docs at https://github.com/appy-one/acebase + ________________________________________________________________________________ + +*/ +export { DataSnapshot, DataReference, DataSnapshotsArray, DataReferencesArray, EventStream, EventSubscription, PathReference, TypeMappings, ObjectCollection, ID, proxyAccess, PartialArray, } from 'acebase-core'; +export { AceBase, AceBaseLocalSettings, LocalStorageSettings, IndexedDBStorageSettings, } from './acebase-local.js'; +export { AceBaseStorageSettings } from './storage/binary/index.js'; +export { SQLiteStorageSettings } from './storage/sqlite/index.js'; +export { MSSQLStorageSettings } from './storage/mssql/index.js'; +export { CustomStorageTransaction, CustomStorageSettings, CustomStorageHelpers, ICustomStorageNode, ICustomStorageNodeMetaData, } from './storage/custom/index.js'; +export { StorageSettings, SchemaValidationError, } from './storage/index.js'; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/esm/index.js.map b/dist/esm/index.js.map new file mode 100644 index 0000000..e5b65fc --- /dev/null +++ b/dist/esm/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;EAiBE;AACF,OAAO,EACH,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,YAAY,EAQZ,gBAAgB,EAChB,EAAE,EACF,WAAW,EACX,YAAY,GACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EACH,OAAO,EACP,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,GAC3B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EACH,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,GAC7B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACH,eAAe,EAGf,qBAAqB,GACxB,MAAM,WAAW,CAAC"} \ No newline at end of file diff --git a/dist/esm/ipc/browser.js b/dist/esm/ipc/browser.js new file mode 100644 index 0000000..d47c4c0 --- /dev/null +++ b/dist/esm/ipc/browser.js @@ -0,0 +1,131 @@ +import { ID, Transport } from 'acebase-core'; +import { AceBaseIPCPeer } from './ipc.js'; +/** + * Browser tabs IPC. Database changes and events will be synchronized automatically. + * Locking of resources will be done by the election of a single locking master: + * the one with the lowest id. + */ +export class IPCPeer extends AceBaseIPCPeer { + constructor(storage) { + super(storage, ID.generate()); + this.masterPeerId = this.id; // We don't know who the master is yet... + this.ipcType = 'browser.bcc'; + // Setup process exit handler + // Monitor onbeforeunload event to say goodbye when the window is closed + window.addEventListener('beforeunload', () => { + this.exit(); + }); + // Create BroadcastChannel to allow multi-tab communication + // This allows other tabs to make changes to the database, notifying us of those changes. + if (typeof window.BroadcastChannel !== 'undefined') { + this.channel = new BroadcastChannel(`acebase:${storage.name}`); + } + else { + // Use localStorage as polyfill for Safari & iOS WebKit + const listeners = [null]; // first callback reserved for onmessage handler + const notImplemented = () => { throw new Error('Not implemented'); }; + this.channel = { + name: `acebase:${storage.name}`, + postMessage: (message) => { + const messageId = ID.generate(), key = `acebase:${storage.name}:${this.id}:${messageId}`, payload = JSON.stringify(Transport.serialize(message)); + // Store message, triggers 'storage' event in other tabs + localStorage.setItem(key, payload); + // Remove after 10ms + setTimeout(() => localStorage.removeItem(key), 10); + }, + set onmessage(handler) { listeners[0] = handler; }, + set onmessageerror(handler) { notImplemented(); }, + close() { notImplemented(); }, + addEventListener(event, callback) { + if (event !== 'message') { + notImplemented(); + } + listeners.push(callback); + }, + removeEventListener(event, callback) { + const i = listeners.indexOf(callback); + i >= 1 && listeners.splice(i, 1); + }, + dispatchEvent(event) { + listeners.forEach(callback => { + try { + callback && callback(event); + } + catch (err) { + console.error(err); + } + }); + return true; + }, + }; + // Listen for storage events to intercept possible messages + window.addEventListener('storage', event => { + const [acebase, dbname, peerId, messageId] = event.key.split(':'); + if (acebase !== 'acebase' || dbname !== storage.name || peerId === this.id || event.newValue === null) { + return; + } + const message = Transport.deserialize(JSON.parse(event.newValue)); + this.channel.dispatchEvent({ data: message }); + }); + } + // Monitor incoming messages + this.channel.addEventListener('message', async (event) => { + const message = event.data; + if (message.to && message.to !== this.id) { + // Message is for somebody else. Ignore + return; + } + storage.debug.verbose(`[BroadcastChannel] received: `, message); + if (message.type === 'hello' && message.from < this.masterPeerId) { + // This peer was created before other peer we thought was the master + this.masterPeerId = message.from; + storage.debug.log(`[BroadcastChannel] Tab ${this.masterPeerId} is the master.`); + } + else if (message.type === 'bye' && message.from === this.masterPeerId) { + // The master tab is leaving + storage.debug.log(`[BroadcastChannel] Master tab ${this.masterPeerId} is leaving`); + // Elect new master + const allPeerIds = this.peers.map(peer => peer.id).concat(this.id).filter(id => id !== this.masterPeerId); // All peers, including us, excluding the leaving master peer + this.masterPeerId = allPeerIds.sort()[0]; + storage.debug.log(`[BroadcastChannel] ${this.masterPeerId === this.id ? 'We are' : `tab ${this.masterPeerId} is`} the new master. Requesting ${this._locks.length} locks (${this._locks.filter(r => !r.granted).length} pending)`); + // Let the new master take over any locks and lock requests. + const requests = this._locks.splice(0); // Copy and clear current lock requests before granted locks are requested again. + // Request previously granted locks again + await Promise.all(requests.filter(req => req.granted).map(async (req) => { + // Prevent race conditions: if the existing lock is released or moved to parent before it was + // moved to the new master peer, we'll resolve their promises after releasing/moving the new lock + let released, movedToParent; + req.lock.release = () => { return new Promise(resolve => released = resolve); }; + req.lock.moveToParent = () => { return new Promise(resolve => movedToParent = resolve); }; + // Request lock again: + const lock = await this.lock({ path: req.lock.path, write: req.lock.forWriting, tid: req.lock.tid, comment: req.lock.comment }); + if (movedToParent) { + const newLock = await lock.moveToParent(); + movedToParent(newLock); + } + if (released) { + await lock.release(); + released(); + } + })); + // Now request pending locks again + await Promise.all(requests.filter(req => !req.granted).map(async (req) => { + await this.lock(req.request); + })); + } + return this.handleMessage(message); + }); + // // Schedule periodic "pulse" to let others know we're still around + // setInterval(() => { + // sendMessage({ from: tabId, type: 'pulse' }); + // }, 30000); + // Send hello to other peers + const helloMsg = { type: 'hello', from: this.id, data: undefined }; + this.sendMessage(helloMsg); + } + sendMessage(message) { + this.storage.debug.verbose(`[BroadcastChannel] sending: `, message); + this.channel.postMessage(message); + } +} +//# sourceMappingURL=browser.js.map \ No newline at end of file diff --git a/dist/esm/ipc/browser.js.map b/dist/esm/ipc/browser.js.map new file mode 100644 index 0000000..2f43284 --- /dev/null +++ b/dist/esm/ipc/browser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/ipc/browser.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/ipc/index.js b/dist/esm/ipc/index.js new file mode 100644 index 0000000..b40fbf8 --- /dev/null +++ b/dist/esm/ipc/index.js @@ -0,0 +1,103 @@ +import { AceBaseIPCPeer } from './ipc.js'; +import * as cluster from 'cluster'; +export { RemoteIPCPeer } from './remote.js'; +const masterPeerId = '[master]'; +/** + * Node cluster functionality - enables vertical scaling with forked processes. AceBase will enable IPC at startup, so + * any forked process will communicate database changes and events automatically. Locking of resources will be done by + * the cluster's primary (previously master) process. NOTE: if the master process dies, all peers stop working + */ +export class IPCPeer extends AceBaseIPCPeer { + constructor(storage, dbname) { + // Throw eror on PM2 clusters --> they should use an AceBase IPC server + const pm2id = process.env?.NODE_APP_INSTANCE || process.env?.pm_id; + if (typeof pm2id === 'string' && pm2id !== '0') { + throw new Error(`To use AceBase with pm2 in cluster mode, use an AceBase IPC server to enable interprocess communication.`); + } + const peerId = cluster.isMaster ? masterPeerId : cluster.worker.id.toString(); + super(storage, peerId, dbname); + this.masterPeerId = masterPeerId; + this.ipcType = 'node.cluster'; + /** Adds an event handler to a Node.js EventEmitter that is automatically removed upon IPC exit */ + const bindEventHandler = (target, event, handler) => { + target.addListener(event, handler); + this.on('exit', () => target.removeListener(event, handler)); + }; + // Setup process exit handler + bindEventHandler(process, 'SIGINT', () => { + this.exit(); + }); + if (cluster.isMaster) { + bindEventHandler(cluster, 'online', (worker) => { + // A new worker is started + // Do not add yet, wait for "hello" message - a forked process might not use the same db + bindEventHandler(worker, 'error', err => { + storage.debug.error(`Caught worker error:`, err); + }); + }); + bindEventHandler(cluster, 'exit', (worker) => { + // A worker has shut down + if (this.peers.find(peer => peer.id === worker.id.toString())) { + // Worker apparently did not have time to say goodbye, + // remove the peer ourselves + this.removePeer(worker.id.toString()); + // Send "bye" message on their behalf + this.sayGoodbye(worker.id.toString()); + } + }); + } + const handleMessage = (message) => { + if (typeof message !== 'object') { + // Ignore non-object IPC messages + return; + } + if (message.dbname !== this.dbname) { + // Ignore, message not meant for this database + return; + } + if (cluster.isMaster && message.to !== masterPeerId) { + // Message is meant for others (or all). Forward it + this.sendMessage(message); + } + if (message.to && message.to !== this.id) { + // Message is for somebody else. Ignore + return; + } + return super.handleMessage(message); + }; + if (cluster.isMaster) { + bindEventHandler(cluster, 'message', (worker, message) => handleMessage(message)); + } + else { + bindEventHandler(cluster.worker, 'message', handleMessage); + } + // if (!cluster.isMaster) { + // // Add master peer. Do we have to? + // this.addPeer(masterPeerId, false, false); + // } + // Send hello to other peers + const helloMsg = { type: 'hello', from: this.id, data: undefined }; + this.sendMessage(helloMsg); + } + sendMessage(msg) { + const message = msg; + message.dbname = this.dbname; + if (cluster.isMaster) { + // If we are the master, send the message to the target worker(s) + this.peers + .filter(p => p.id !== message.from && (!message.to || p.id === message.to)) + .forEach(peer => { + const worker = cluster.workers[peer.id]; + worker && worker.send(message); // When debugging, worker might have stopped in the meantime + }); + } + else { + // Send the message to the master who will forward it to the target worker(s) + process.send(message); + } + } + async exit(code = 0) { + await super.exit(code); + } +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/esm/ipc/index.js.map b/dist/esm/ipc/index.js.map new file mode 100644 index 0000000..cbe1555 --- /dev/null +++ b/dist/esm/ipc/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ipc/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/ipc/ipc.js b/dist/esm/ipc/ipc.js new file mode 100644 index 0000000..40e263d --- /dev/null +++ b/dist/esm/ipc/ipc.js @@ -0,0 +1,493 @@ +import { ID, SimpleEventEmitter } from 'acebase-core'; +import { NodeLocker, LOCK_STATE } from '../node-lock.js'; +export class AceBaseIPCPeerExitingError extends Error { + constructor(message) { super(`Exiting: ${message}`); } +} +/** + * Base class for Inter Process Communication, enables vertical scaling: using more CPU's on the same machine to share workload. + * These processes will have to communicate with eachother because they are reading and writing to the same database file + */ +export class AceBaseIPCPeer extends SimpleEventEmitter { + constructor(storage, id, dbname = storage.name) { + super(); + this.storage = storage; + this.id = id; + this.dbname = dbname; + this.ipcType = 'ipc'; + this.ourSubscriptions = []; + this.remoteSubscriptions = []; + this.peers = []; + this._exiting = false; + this._locks = []; + this._requests = new Map(); + this._eventsEnabled = true; + this._nodeLocker = new NodeLocker(storage.debug, storage.settings.lockTimeout); + // Setup db event listeners + storage.on('subscribe', (subscription) => { + // Subscription was added to db + storage.debug.verbose(`database subscription being added on peer ${this.id}`); + const remoteSubscription = this.remoteSubscriptions.find(sub => sub.callback === subscription.callback); + if (remoteSubscription) { + // Send ack + // return sendMessage({ type: 'subscribe_ack', from: tabId, to: remoteSubscription.for, data: { path: subscription.path, event: subscription.event } }); + return; + } + const othersAlreadyNotifying = this.ourSubscriptions.some(sub => sub.event === subscription.event && sub.path === subscription.path); + // Add subscription + this.ourSubscriptions.push(subscription); + if (othersAlreadyNotifying) { + // Same subscription as other previously added. Others already know we want to be notified + return; + } + // Request other tabs to keep us updated of this event + const message = { type: 'subscribe', from: this.id, data: { path: subscription.path, event: subscription.event } }; + this.sendMessage(message); + }); + storage.on('unsubscribe', (subscription) => { + // Subscription was removed from db + const remoteSubscription = this.remoteSubscriptions.find(sub => sub.callback === subscription.callback); + if (remoteSubscription) { + // Remove + this.remoteSubscriptions.splice(this.remoteSubscriptions.indexOf(remoteSubscription), 1); + // Send ack + // return sendMessage({ type: 'unsubscribe_ack', from: tabId, to: remoteSubscription.for, data: { path: subscription.path, event: subscription.event } }); + return; + } + this.ourSubscriptions + .filter(sub => sub.path === subscription.path && (!subscription.event || sub.event === subscription.event) && (!subscription.callback || sub.callback === subscription.callback)) + .forEach(sub => { + // Remove from our subscriptions + this.ourSubscriptions.splice(this.ourSubscriptions.indexOf(sub), 1); + // Request other tabs to stop notifying + const message = { type: 'unsubscribe', from: this.id, data: { path: sub.path, event: sub.event } }; + this.sendMessage(message); + }); + }); + } + get isMaster() { return this.masterPeerId === this.id; } + /** + * Requests the peer to shut down. Resolves once its locks are cleared and 'exit' event has been emitted. + * Has to be overridden by the IPC implementation to perform custom shutdown tasks + * @param code optional exit code (eg one provided by SIGINT event) + */ + async exit(code = 0) { + if (this._exiting) { + // Already exiting... + return this.once('exit'); + } + this._exiting = true; + this.storage.debug.warn(`Received ${this.isMaster ? 'master' : 'worker ' + this.id} process exit request`); + if (this._locks.length > 0) { + this.storage.debug.warn(`Waiting for ${this.isMaster ? 'master' : 'worker'} ${this.id} locks to clear`); + await this.once('locks-cleared'); + } + // Send "bye" + this.sayGoodbye(this.id); + this.storage.debug.warn(`${this.isMaster ? 'Master' : 'Worker ' + this.id} will now exit`); + this.emitOnce('exit', code); + } + sayGoodbye(forPeerId) { + // Send "bye" message on their behalf + const bye = { type: 'bye', from: forPeerId, data: undefined }; + this.sendMessage(bye); + } + addPeer(id, sendReply = true) { + if (this._exiting) { + return; + } + const peer = this.peers.find(w => w.id === id); + if (!peer) { + this.peers.push({ id, lastSeen: Date.now() }); + } + if (sendReply) { + // Send hello back to sender + const helloMessage = { type: 'hello', from: this.id, to: id, data: undefined }; + this.sendMessage(helloMessage); + // Send our active subscriptions through + this.ourSubscriptions.forEach(sub => { + // Request to keep us updated + const message = { type: 'subscribe', from: this.id, to: id, data: { path: sub.path, event: sub.event } }; + this.sendMessage(message); + }); + } + } + removePeer(id, ignoreUnknown = false) { + if (this._exiting) { + return; + } + const peer = this.peers.find(peer => peer.id === id); + if (!peer) { + if (!ignoreUnknown) { + throw new Error(`We are supposed to know this peer!`); + } + return; + } + this.peers.splice(this.peers.indexOf(peer), 1); + // Remove their subscriptions + const subscriptions = this.remoteSubscriptions.filter(sub => sub.for === id); + subscriptions.forEach(sub => { + // Remove & stop their subscription + this.remoteSubscriptions.splice(this.remoteSubscriptions.indexOf(sub), 1); + this.storage.subscriptions.remove(sub.path, sub.event, sub.callback); + }); + } + addRemoteSubscription(peerId, details) { + if (this._exiting) { + return; + } + // this.storage.debug.log(`remote subscription being added`); + if (this.remoteSubscriptions.some(sub => sub.for === peerId && sub.event === details.event && sub.path === details.path)) { + // We're already serving this event for the other peer. Ignore + return; + } + // Add remote subscription + const subscribeCallback = (err, path, val, previous, context) => { + // db triggered an event, send notification to remote subscriber + const eventMessage = { + type: 'event', + from: this.id, + to: peerId, + path: details.path, + event: details.event, + data: { + path, + val, + previous, + context, + }, + }; + this.sendMessage(eventMessage); + }; + this.remoteSubscriptions.push({ for: peerId, event: details.event, path: details.path, callback: subscribeCallback }); + this.storage.subscriptions.add(details.path, details.event, subscribeCallback); + } + cancelRemoteSubscription(peerId, details) { + // Other tab requests to remove previously subscribed event + const sub = this.remoteSubscriptions.find(sub => sub.for === peerId && sub.event === details.event && sub.path === details.event); + if (!sub) { + // We don't know this subscription so we weren't notifying in the first place. Ignore + return; + } + // Stop subscription + this.storage.subscriptions.remove(details.path, details.event, sub.callback); + } + async handleMessage(message) { + switch (message.type) { + case 'hello': return this.addPeer(message.from, message.to !== this.id); + case 'bye': return this.removePeer(message.from, true); + case 'subscribe': return this.addRemoteSubscription(message.from, message.data); + case 'unsubscribe': return this.cancelRemoteSubscription(message.from, message.data); + case 'event': { + if (!this._eventsEnabled) { + // IPC event handling is disabled for this client. Ignore message. + break; + } + const eventMessage = message; + const context = eventMessage.data.context || {}; + context.acebase_ipc = { type: this.ipcType, origin: eventMessage.from }; // Add IPC details + // Other peer raised an event we are monitoring + const subscriptions = this.ourSubscriptions.filter(sub => sub.event === eventMessage.event && sub.path === eventMessage.path); + subscriptions.forEach(sub => { + sub.callback(null, eventMessage.data.path, eventMessage.data.val, eventMessage.data.previous, context); + }); + break; + } + case 'lock-request': { + // Lock request sent by worker to master + if (!this.isMaster) { + throw new Error(`Workers are not supposed to receive lock requests!`); + } + const request = message; + const result = { type: 'lock-result', id: request.id, from: this.id, to: request.from, ok: true, data: undefined }; + try { + const lock = await this.lock(request.data); + result.data = { + id: lock.id, + path: lock.path, + tid: lock.tid, + write: lock.forWriting, + expires: lock.expires, + comment: lock.comment, + }; + } + catch (err) { + result.ok = false; + result.reason = err.stack || err.message || err; + } + return this.sendMessage(result); + } + case 'lock-result': { + // Lock result sent from master to worker + if (this.isMaster) { + throw new Error(`Masters are not supposed to receive results for lock requests!`); + } + const result = message; + const request = this._requests.get(result.id); + if (typeof request !== 'object') { + throw new Error(`The request must be known to us!`); + } + if (result.ok) { + request.resolve(result.data); + } + else { + request.reject(new Error(result.reason)); + } + return; + } + case 'unlock-request': { + // lock release request sent from worker to master + if (!this.isMaster) { + throw new Error(`Workers are not supposed to receive unlock requests!`); + } + const request = message; + const result = { type: 'unlock-result', id: request.id, from: this.id, to: request.from, ok: true, data: { id: request.data.id } }; + try { + const lockInfo = this._locks.find(l => l.lock?.id === request.data.id); // this._locks.get(request.data.id); + await lockInfo.lock.release(); //this.unlock(request.data.id); + } + catch (err) { + result.ok = false; + result.reason = err.stack || err.message || err; + } + return this.sendMessage(result); + } + case 'unlock-result': { + // lock release result sent from master to worker + if (this.isMaster) { + throw new Error(`Masters are not supposed to receive results for unlock requests!`); + } + const result = message; + const request = this._requests.get(result.id); + if (typeof request !== 'object') { + throw new Error(`The request must be known to us!`); + } + if (result.ok) { + request.resolve(result.data); + } + else { + request.reject(new Error(result.reason)); + } + return; + } + case 'move-lock-request': { + // move lock request sent from worker to master + if (!this.isMaster) { + throw new Error(`Workers are not supposed to receive move lock requests!`); + } + const request = message; + const result = { type: 'lock-result', id: request.id, from: this.id, to: request.from, ok: true, data: undefined }; + try { + let movedLock; + // const lock = this._locks.get(request.data.id); + const lockRequest = this._locks.find(r => r.lock?.id === request.data.id); + if (request.data.move_to === 'parent') { + movedLock = await lockRequest.lock.moveToParent(); + } + else { + throw new Error(`Unknown lock move_to "${request.data.move_to}"`); + } + // this._locks.delete(request.data.id); + // this._locks.set(movedLock.id, movedLock); + lockRequest.lock = movedLock; + result.data = { + id: movedLock.id, + path: movedLock.path, + tid: movedLock.tid, + write: movedLock.forWriting, + expires: movedLock.expires, + comment: movedLock.comment, + }; + } + catch (err) { + result.ok = false; + result.reason = err.stack || err.message || err; + } + return this.sendMessage(result); + } + case 'notification': { + // Custom notification received - raise event + return this.emit('notification', message); + } + case 'request': { + // Custom message received - raise event + return this.emit('request', message); + } + case 'result': { + // Result of custom request received - raise event + const result = message; + const request = this._requests.get(result.id); + if (typeof request !== 'object') { + throw new Error(`Result of unknown request received`); + } + if (result.ok) { + request.resolve(result.data); + } + else { + request.reject(new Error(result.reason)); + } + } + } + } + /** + * Acquires a lock. If this peer is a worker, it will request the lock from the master + * @param details + */ + async lock(details) { + if (this._exiting) { + // Peer is exiting. Do we have an existing lock with requested tid? If not, deny request. + const tidApproved = this._locks.find(l => l.tid === details.tid && l.granted); + if (!tidApproved) { + // We have no previously granted locks for this transaction. Deny. + throw new AceBaseIPCPeerExitingError('new transaction lock denied because the IPC peer is exiting'); + } + } + const removeLock = (lockDetails) => { + this._locks.splice(this._locks.indexOf(lockDetails), 1); + if (this._locks.length === 0) { + // this.storage.debug.log(`No more locks in worker ${this.id}`); + this.emit('locks-cleared'); + } + }; + if (this.isMaster) { + // Master + const lockInfo = { tid: details.tid, granted: false, request: details, lock: null }; + this._locks.push(lockInfo); + const lock = await this._nodeLocker.lock(details.path, details.tid, details.write, details.comment); + lockInfo.tid = lock.tid; + lockInfo.granted = true; + const createIPCLock = (lock) => { + return { + get id() { return lock.id; }, + get tid() { return lock.tid; }, + get path() { return lock.path; }, + get forWriting() { return lock.forWriting; }, + get expires() { return lock.expires; }, + get comment() { return lock.comment; }, + get state() { return lock.state; }, + release: async () => { + await lock.release(); + removeLock(lockInfo); + }, + moveToParent: async () => { + const parentLock = await lock.moveToParent(); + lockInfo.lock = createIPCLock(parentLock); + return lockInfo.lock; + }, + }; + }; + lockInfo.lock = createIPCLock(lock); + return lockInfo.lock; + } + else { + // Worker + const lockInfo = { tid: details.tid, granted: false, request: details, lock: null }; + this._locks.push(lockInfo); + const createIPCLock = (result) => { + lockInfo.granted = true; + lockInfo.tid = result.tid; + lockInfo.lock = { + id: result.id, + tid: result.tid, + path: result.path, + forWriting: result.write, + state: LOCK_STATE.LOCKED, + expires: result.expires, + comment: result.comment, + release: async () => { + const req = { type: 'unlock-request', id: ID.generate(), from: this.id, to: this.masterPeerId, data: { id: lockInfo.lock.id } }; + await this.request(req); + lockInfo.lock.state = LOCK_STATE.DONE; + this.storage.debug.verbose(`Worker ${this.id} released lock ${lockInfo.lock.id} (tid ${lockInfo.lock.tid}, ${lockInfo.lock.comment}, "/${lockInfo.lock.path}", ${lockInfo.lock.forWriting ? 'write' : 'read'})`); + removeLock(lockInfo); + }, + moveToParent: async () => { + const req = { type: 'move-lock-request', id: ID.generate(), from: this.id, to: this.masterPeerId, data: { id: lockInfo.lock.id, move_to: 'parent' } }; + let result; + try { + result = await this.request(req); + } + catch (err) { + // We didn't get new lock?! + lockInfo.lock.state = LOCK_STATE.DONE; + removeLock(lockInfo); + throw err; + } + lockInfo.lock = createIPCLock(result); + return lockInfo.lock; + }, + }; + // this.storage.debug.log(`Worker ${this.id} received lock ${lock.id} (tid ${lock.tid}, ${lock.comment}, "/${lock.path}", ${lock.forWriting ? 'write' : 'read'})`); + return lockInfo.lock; + }; + const req = { type: 'lock-request', id: ID.generate(), from: this.id, to: this.masterPeerId, data: details }; + let result, err; + try { + result = await this.request(req); + } + catch (e) { + err = e; + result = null; + } + if (err) { + removeLock(lockInfo); + throw err; + } + return createIPCLock(result); + } + } + async request(req) { + // Send request, return result promise + let resolve, reject; + const promise = new Promise((rs, rj) => { + resolve = (result) => { + this._requests.delete(req.id); + rs(result); + }; + reject = (err) => { + this._requests.delete(req.id); + rj(err); + }; + }); + this._requests.set(req.id, { resolve, reject, request: req }); + this.sendMessage(req); + return promise; + } + /** + * Sends a custom request to the IPC master + * @param request + * @returns + */ + sendRequest(request) { + const req = { type: 'request', from: this.id, to: this.masterPeerId, id: ID.generate(), data: request }; + return this.request(req) + .catch(err => { + this.storage.debug.error(err); + throw err; + }); + } + replyRequest(requestMessage, result) { + const reply = { type: 'result', id: requestMessage.id, ok: true, from: this.id, to: requestMessage.from, data: result }; + this.sendMessage(reply); + } + /** + * Sends a custom notification to all IPC peers + * @param notification + * @returns + */ + sendNotification(notification) { + const msg = { type: 'notification', from: this.id, data: notification }; + this.sendMessage(msg); + } + /** + * If ipc event handling is currently enabled + */ + get eventsEnabled() { return this._eventsEnabled; } + /** + * Enables or disables ipc event handling. When disabled, incoming event messages will be ignored. + */ + set eventsEnabled(enabled) { + this.storage.debug.log(`ipc events ${enabled ? 'enabled' : 'disabled'}`); + this._eventsEnabled = enabled; + } +} +//# sourceMappingURL=ipc.js.map \ No newline at end of file diff --git a/dist/esm/ipc/ipc.js.map b/dist/esm/ipc/ipc.js.map new file mode 100644 index 0000000..31abedd --- /dev/null +++ b/dist/esm/ipc/ipc.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ipc.js","sourceRoot":"","sources":["../../../src/ipc/ipc.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/ipc/remote.js b/dist/esm/ipc/remote.js new file mode 100644 index 0000000..478207c --- /dev/null +++ b/dist/esm/ipc/remote.js @@ -0,0 +1,300 @@ +import { ID } from 'acebase-core'; +import { AceBaseIPCPeer } from './ipc.js'; +import * as http from 'http'; +const ws = (() => { + try { + return require('ws'); + } + catch (err) { + // Remote IPC will not work because ws package is not installed, this will be an error if app attempts to use it. + } +})(); +const masterPeerId = '[master]'; +const WS_CLOSE_PING_TIMEOUT = 1; +const WS_CLOSE_PROCESS_EXIT = 2; +// const WS_CLOSE_UNAUTHORIZED = 3; +// const WS_CLOSE_WRONG_CLIENT = 4; +// const WS_CLOSE_SERVER_ERROR = 5; +/** + * Remote IPC using an external server. Database changes and events will be synchronized automatically. + * Locking of resources will be done by a single master that needs to be known up front. Preferably, the master + * is a process that handles no database updates itself and only manages data locking and allocation for workers. + * + * To use Remote IPC, you have to start the following processes: + * - 1 AceBase IPC Server process + * - 1 AceBase database master process (optional, used in example 1) + * - 1+ AceBase server worker processes + * + * NOTE if your IPC server will be running on a public host (not `localhost`), make sure to use `ssl` and a secret + * `token` in your IPC configuration. + * + * @example + * // IPC server process (start-ipc-server.js) + * const { AceBaseIPCServer } = require('acebase-ipc-server'); + * const server = new AceBaseIPCServer({ host: 'localhost', port: 9163 }) + * + * // Dedicated db master process (start-db-master.js) + * const { AceBase } = require('acebase'); + * const db = new AceBase('mydb', { storage: { ipc: { host: 'localhost', port: 9163, ssl: false, role: 'master' } } }); + * + * // Server worker processes (start-db-server.js) + * const { AceBaseServer } = require('acebase-server'); + * const server = new AceBaseServer('mydb', { host: 'localhost', port: 5757, storage: { ipc: { host: 'localhost', port: 9163, ssl: false, role: 'worker' } } }); + * + * // PM2 ecosystem.config.js: + * module.exports = { + * apps: [{ + * name: "AceBase IPC Server", + * script: "./start-ipc-server.js" + * }, { + * name: "AceBase database master", + * script: "./start-db-master.js" + * }, { + * name: "AceBase database server", + * script: "./start-db-server.js", + * instances: "-2", // Uses all CPUs minus 2 + * exec_mode: "cluster" // Enables PM2 load balancing, see https://pm2.keymetrics.io/docs/usage/cluster-mode/ + * }] + * } + * + * @description + * Instead of starting a dedicated db master process, you can also start 1 `AceBaseServer` with `role: "master"` manually. + * Note that the db master will also handle http requests for clients in this case, which might not be desirable because it + * also has to handle IPC master tasks for other clients. See the following example: + * + * @example + * // Another example using only 2 startup apps: + * - 1 instance: AceBase IPC server + * - Multiple instances of your app + * + * // IPC server process (start-ipc-server.js) + * const { AceBaseIPCServer } = require('acebase-ipc-server'); + * const server = new AceBaseIPCServer({ host: 'localhost', port: 9163 }) + * + * // Server worker processes (start-db-server.js) + * const { AceBaseServer } = require('acebase-server'); + * const role = process.env.NODE_APP_INSTANCE === '0' ? 'master' : 'worker'; + * const server = new AceBaseServer('mydb', { host: 'localhost', port: 5757, storage: { ipc: { host: 'localhost', port: 9163, ssl: false, role } } }); + * + * // PM2 ecosystem.config.js: + * module.exports = { + * apps: [{ + * name: "AceBase IPC Server", + * script: "./start-ipc-server.js", + * instances: 1 + * }, { + * name: "AceBase database server", + * script: "./start-db-server.js", + * instances: "-1", // Uses all CPUs minus 1 + * exec_mode: "cluster" // Enables PM2 load balancing + * }] + * } + */ +export class RemoteIPCPeer extends AceBaseIPCPeer { + constructor(storage, config) { + super(storage, config.role === 'master' ? masterPeerId : ID.generate(), config.dbname); + this.config = config; + this.queue = true; + this.pending = { in: [], out: [] }; + this.maxPayload = 100; // Initial setting, will be overridden by server config once connected + this.masterPeerId = masterPeerId; + if (typeof ws === 'undefined') { + throw new Error('ws package is not installed. To fix this, run: npm install ws'); + } + this.connect().catch(err => { + storage.debug.error(err.message); + this.exit(); + }); + } + get version() { return '1.0.0'; } + connect(options) { + return new Promise((resolve, reject) => { + let connected = false; + this.ws = new ws.WebSocket(`ws${this.config.ssl ? 's' : ''}://${this.config.host || 'localhost'}:${this.config.port}/${this.config.dbname}/connect?v=${this.version}&id=${this.id}&t=${this.config.token}`); // &role=${this.config.role} + // Handle connection success + this.ws.addEventListener('open', async ( /*event*/) => { + connected = true; + // Send any pending messages + this.pending.out.forEach(msg => { + this.ws.send(msg); + }); + this.pending.out = []; + this.queue = false; + resolve(); + }); + // // Handle unexpected response (is documented at https://github.com/websockets/ws/blob/master/doc/ws.md#event-unexpected-response but doesn't appear to be working) + // (this.ws as any).addEventListener('unexpected-response', (req: http.ClientRequest, res: http.IncomingMessage) => { + // console.error(`Invalid response: ${res.statusCode} ${res.statusMessage}`); + // let closeCode; + // switch (res.statusCode) { + // case 401: closeCode = WS_CLOSE_UNAUTHORIZED; break; + // case 409: closeCode = WS_CLOSE_WRONG_CLIENT; break; + // case 500: closeCode = WS_CLOSE_SERVER_ERROR; break; + // } + // reject(new Error(`${res.statusCode} ${res.statusMessage}`)); + // }); + // Handle connection error + this.ws.addEventListener('error', event => { + if (!connected) { + // We had no connection yet + if (event.message.includes('403')) { + reject(new Error('Cannot connect to IPC server: unauthorized')); + } + else if (event.message.includes('409')) { + reject(new Error('Cannot connect to IPC server: unsupported client version (too new or old)')); + } + else if (event.message.includes('500')) { + reject(new Error('Cannot connect to IPC server: server error')); + } + else if (typeof options?.maxRetries === 'undefined' || typeof options?.maxRetries === 'number' && options?.maxRetries > 0) { + const retryMs = 1000; // ms + this.storage.debug.error(`Unable to connect to remote IPC server (${event.message}). Trying again in ${retryMs}ms`); + const retryOptions = {}; + if (typeof typeof options?.maxRetries === 'number') { + retryOptions.maxRetries = options.maxRetries - 1; + } + const timeout = setTimeout(() => { this.connect(retryOptions); }, retryMs); + timeout.unref?.(); + } + else { + reject(event); + } + } + }); + // Send pings if connection is idle to actively monitor connectivity + let lastMessageReceived = Date.now(); + const pingInterval = setInterval(() => { + if (this._exiting) { + return; + } + const ms = Date.now() - lastMessageReceived; + if (ms > 10000) { + // Timeout if we didn't get response within 10 seconds + this.ws.close(WS_CLOSE_PING_TIMEOUT); // close event that follows will reconnect + } + else if (ms > 5000) { + // No messages received for 5s. Sending ping to trigger pong response + this.ws.send('ping'); + } + }, 500); + pingInterval.unref?.(); + // Close connection if we're exiting + process.once('exit', () => { + this.ws.close(WS_CLOSE_PROCESS_EXIT); + }); + // Handle disconnect + this.ws.addEventListener('close', ( /*event*/) => { + // Disconnected. Try reconnecting immediately + if (!connected) { + return; + } // We weren't connected yet. Don't reconnect here, retries will be executed automatically + if (this._exiting) { + return; + } + this.storage.debug.error(`Connection to remote IPC server was lost. Trying to reconnect`); + clearInterval(pingInterval); + this.storage.invalidateCache?.(true, '', true, 'ipc_ws_disconnect'); // Make sure the entire cache is invalidated (AceBase storage has such cache) + this.connect(); + }); + // Handle incoming messages + this.ws.addEventListener('message', async (event) => { + lastMessageReceived = Date.now(); + let str = event.data.toString(); + console.log(str); + if (str === 'pong') { + // We got a ping reply from the server + return; + } + else if (str.startsWith('welcome:')) { + // Welcome message with config + const config = JSON.parse(str.slice(8)); + this.maxPayload = config.maxPayload; + } + else if (str.startsWith('connect:')) { + // A new peer connected to the IPC server + // Do not add yet, wait for our own "hello" message + } + else if (str.startsWith('disconnect:')) { + // A peer has disconnected from the IPC server + const id = str.slice(11); + if (this.peers.find(peer => peer.id === id)) { + // Peer apparently did not have time to say goodbye, + // remove the peer ourselves + this.removePeer(id); + // Send "bye" message on their behalf + this.sayGoodbye(id); + } + } + else if (str.startsWith('get:')) { + // Large message we have to fetch + const msgId = str.slice(4); + try { + str = await this.fetch('GET', `/${this.config.dbname}/receive?id=${this.id}&msg=${msgId}&t=${this.config.token}`); + const msg = JSON.parse(str); + super.handleMessage(msg); + } + catch (err) { + this.storage.debug.error(`Failed to receive message ${msgId}:`, err); + } + } + else if (str.startsWith('{')) { + // Normal message + const msg = JSON.parse(str); + super.handleMessage(msg); + } + else { + // Unknown event + console.warn(`Received unknown IPC message: "${str}"`); + } + }); + }); + } + sendMessage(message) { + this.storage.debug.verbose(`[RemoteIPC] sending: `, message); + let json = JSON.stringify(message); + if (typeof message.to === 'string') { + // Send to specific peer only + json = `to:${message.to};${json}`; + } + if (this.queue) { + this.pending.out.push(json); + } + else if (json.length > this.maxPayload) { + this.fetch('POST', `/${this.dbname}/send?id=${this.id}&t=${this.config.token}`, json); + } + else { + this.ws.send(json); + } + } + async fetch(method, path, postData) { + const options = { + hostname: this.config.host || 'localhost', + port: this.config.port, + path, + method, + headers: { + 'Content-Type': 'application/json', + 'Content-Length': Buffer.byteLength(postData || ''), + }, + }; + return await new Promise((resolve, reject) => { + const req = http.request(options, (res) => { + // console.log(`STATUS: ${res.statusCode}`); + // console.log(`HEADERS: ${JSON.stringify(res.headers)}`); + res.setEncoding('utf8'); + let data = ''; + res.on('data', (chunk) => { + data += chunk; + }); + res.on('end', () => { + resolve(data); + }); + }); + req.on('error', reject); + // Write data to request body + req.write(postData); + req.end(); + }); + } +} +//# sourceMappingURL=remote.js.map \ No newline at end of file diff --git a/dist/esm/ipc/remote.js.map b/dist/esm/ipc/remote.js.map new file mode 100644 index 0000000..e8f2cac --- /dev/null +++ b/dist/esm/ipc/remote.js.map @@ -0,0 +1 @@ +{"version":3,"file":"remote.js","sourceRoot":"","sources":["../../../src/ipc/remote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,cAAc,EAAY,MAAM,OAAO,CAAC;AAEjD,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE;IACb,IAAI;QACA,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;KACxB;IACD,OAAO,GAAG,EAAE;QACR,iHAAiH;KACpH;AACL,CAAC,CAAC,EAAE,CAAC;AAaL,MAAM,YAAY,GAAG,UAAU,CAAC;AAChC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,mCAAmC;AACnC,mCAAmC;AACnC,mCAAmC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0EG;AACH,MAAM,OAAO,aAAc,SAAQ,cAAc;IAW7C,YAAY,OAAgB,EAAU,MAA6B;QAC/D,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QADrD,WAAM,GAAN,MAAM,CAAuB;QAP3D,UAAK,GAAG,IAAI,CAAC;QACb,YAAO,GAGX,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAChB,eAAU,GAAG,GAAG,CAAC,CAAC,sEAAsE;QAI5F,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QAEjC,IAAI,OAAO,EAAE,KAAK,WAAW,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;SACpF;QAED,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACvB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;IArBD,IAAY,OAAO,KAAK,OAAO,OAAO,CAAC,CAAC,CAAC;IAuBjC,OAAO,CAAC,OAAiC;QAC7C,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzC,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,cAAc,IAAI,CAAC,OAAO,OAAO,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,4BAA4B;YAEzO,4BAA4B;YAC5B,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,GAAE,SAAS,EAAE,EAAE;gBACjD,SAAS,GAAG,IAAI,CAAC;gBACjB,4BAA4B;gBAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBAC3B,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACtB,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;gBACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,OAAO,EAAE,CAAC;YACd,CAAC,CAAC,CAAC;YAEH,qKAAqK;YACrK,qHAAqH;YACrH,iFAAiF;YACjF,qBAAqB;YACrB,gCAAgC;YAChC,8DAA8D;YAC9D,8DAA8D;YAC9D,8DAA8D;YAC9D,QAAQ;YACR,mEAAmE;YACnE,MAAM;YAEN,0BAA0B;YAC1B,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;gBACtC,IAAI,CAAC,SAAS,EAAE;oBACZ,2BAA2B;oBAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;wBAC/B,MAAM,CAAC,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAC;qBACnE;yBACI,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;wBACpC,MAAM,CAAC,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC,CAAC;qBAClG;yBACI,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;wBACpC,MAAM,CAAC,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAC;qBACnE;yBACI,IAAI,OAAO,OAAO,EAAE,UAAU,KAAK,WAAW,IAAI,OAAO,OAAO,EAAE,UAAU,KAAK,QAAQ,IAAI,OAAO,EAAE,UAAU,GAAG,CAAC,EAAE;wBACvH,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,KAAK;wBAC3B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,2CAA2C,KAAK,CAAC,OAAO,sBAAsB,OAAO,IAAI,CAAC,CAAC;wBACpH,MAAM,YAAY,GAA2B,EAAE,CAAC;wBAChD,IAAI,OAAO,OAAO,OAAO,EAAE,UAAU,KAAK,QAAQ,EAAE;4BAAE,YAAY,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,GAAC,CAAC,CAAC;yBAAE;wBACvG,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;wBAC3E,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;qBACrB;yBACI;wBACD,MAAM,CAAC,KAAK,CAAC,CAAC;qBACjB;iBACJ;YACL,CAAC,CAAC,CAAC;YAEH,oEAAoE;YACpE,IAAI,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACrC,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;gBAClC,IAAI,IAAI,CAAC,QAAQ,EAAE;oBAAE,OAAO;iBAAE;gBAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,mBAAmB,CAAC;gBAC5C,IAAI,EAAE,GAAG,KAAK,EAAE;oBACZ,sDAAsD;oBACtD,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,0CAA0C;iBACnF;qBACI,IAAI,EAAE,GAAG,IAAI,EAAE;oBAChB,qEAAqE;oBACrE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBACxB;YACL,CAAC,EAAE,GAAG,CAAC,CAAC;YACR,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC;YAEvB,oCAAoC;YACpC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;gBACtB,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;YAEH,oBAAoB;YACpB,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAC,SAAS,EAAE,EAAE;gBAC5C,6CAA6C;gBAC7C,IAAI,CAAC,SAAS,EAAE;oBAAE,OAAO;iBAAE,CAAC,yFAAyF;gBACrH,IAAI,IAAI,CAAC,QAAQ,EAAE;oBAAE,OAAO;iBAAE;gBAC9B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;gBAC1F,aAAa,CAAC,YAAY,CAAC,CAAC;gBAC5B,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC,6EAA6E;gBAClJ,IAAI,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC,CAAC,CAAC;YAEH,2BAA2B;YAC3B,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE;gBAC9C,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACjC,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACjB,IAAI,GAAG,KAAK,MAAM,EAAE;oBAChB,sCAAsC;oBACtC,OAAO;iBACV;qBACI,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;oBACjC,8BAA8B;oBAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBACxC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;iBACvC;qBACI,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;oBACjC,yCAAyC;oBACzC,mDAAmD;iBACtD;qBACI,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;oBACpC,8CAA8C;oBAC9C,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACzB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;wBACzC,oDAAoD;wBACpD,4BAA4B;wBAC5B,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;wBAEpB,qCAAqC;wBACrC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;qBACvB;iBACJ;qBACI,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;oBAC7B,iCAAiC;oBACjC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC3B,IAAI;wBACA,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,eAAe,IAAI,CAAC,EAAE,QAAQ,KAAK,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;wBAClH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBAC5B,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;qBAC5B;oBACD,OAAO,GAAG,EAAE;wBACR,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;qBACxE;iBACJ;qBACI,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;oBAC1B,iBAAiB;oBACjB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC5B,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;iBAC5B;qBACI;oBACD,gBAAgB;oBAChB,OAAO,CAAC,IAAI,CAAC,kCAAkC,GAAG,GAAG,CAAC,CAAC;iBAC1D;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED,WAAW,CAAC,OAAiB;QACzB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;QAC7D,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE;YAChC,6BAA6B;YAC7B,IAAI,GAAG,MAAM,OAAO,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;SACrC;QACD,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC/B;aACI,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;YACpC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,YAAY,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;SACzF;aACI;YACD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAoB,EAAE,IAAY,EAAE,QAAiB;QAC7D,MAAM,OAAO,GAAG;YACZ,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,WAAW;YACzC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,IAAI;YACJ,MAAM;YACN,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;gBAClC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC;aACtD;SACJ,CAAC;QACF,OAAO,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACtC,4CAA4C;gBAC5C,0DAA0D;gBAC1D,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBAExB,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;oBACrB,IAAI,IAAI,KAAK,CAAC;gBAClB,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;oBACf,OAAO,CAAC,IAAI,CAAC,CAAC;gBAClB,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAExB,6BAA6B;YAC7B,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACpB,GAAG,CAAC,GAAG,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;IACP,CAAC;CAGJ"} \ No newline at end of file diff --git a/dist/esm/node-address.js b/dist/esm/node-address.js new file mode 100644 index 0000000..f1e8762 --- /dev/null +++ b/dist/esm/node-address.js @@ -0,0 +1,29 @@ +export class NodeAddress { + constructor(path) { + this.path = path; + } + toString() { + return `"/${this.path}"`; + } + /** + * Compares this address to another address + */ + equals(address) { + return this.path === address.path; + } +} +export class RemovedNodeAddress extends NodeAddress { + constructor(path) { + super(path); + } + toString() { + return `"/${this.path}" (removed)`; + } + /** + * Compares this address to another address + */ + equals(address) { + return address instanceof RemovedNodeAddress && this.path === address.path; + } +} +//# sourceMappingURL=node-address.js.map \ No newline at end of file diff --git a/dist/esm/node-address.js.map b/dist/esm/node-address.js.map new file mode 100644 index 0000000..fb106c8 --- /dev/null +++ b/dist/esm/node-address.js.map @@ -0,0 +1 @@ +{"version":3,"file":"node-address.js","sourceRoot":"","sources":["../../src/node-address.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAW;IACpB,YAA4B,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;IAAG,CAAC;IAE5C,QAAQ;QACJ,OAAO,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAoB;QACvB,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC;IACtC,CAAC;CACJ;AAED,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IAC/C,YAAY,IAAY;QACpB,KAAK,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,QAAQ;QACJ,OAAO,KAAK,IAAI,CAAC,IAAI,aAAa,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAoB;QACvB,OAAO,OAAO,YAAY,kBAAkB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC;IAC/E,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/esm/node-cache.js b/dist/esm/node-cache.js new file mode 100644 index 0000000..98a415b --- /dev/null +++ b/dist/esm/node-cache.js @@ -0,0 +1,218 @@ +// TODO: Rename to NodeInfoCache +import { NodeInfo } from './node-info.js'; +import { PathInfo } from 'acebase-core'; +// const SECOND = 1000; +const MINUTE = 60000; +const DEBUG_MODE = false; +const CACHE_TIMEOUT = DEBUG_MODE ? 5 * MINUTE : MINUTE; +export class NodeCacheEntry { + constructor(nodeInfo) { + this.nodeInfo = nodeInfo; + this.pathInfo = PathInfo.get(nodeInfo.path); + this.created = Date.now(); + this.keepAlive(); + } + keepAlive() { + this.expires = (this.updated || this.created) + NodeCache.CACHE_DURATION; + } + update(nodeInfo) { + this.nodeInfo = nodeInfo; + this.updated = Date.now(); + this.keepAlive(); + } +} +/** + * Isolated cache, this enables using multiple databases each with their own cache + */ +export class NodeCache { + constructor() { + this._cleanupTimeout = null; + this._cache = new Map(); + /** + * For announced lookups, will bind subsequent .find calls to a promise that resolves once the cache item is set + */ + this._announcements = new Map(); + // /** + // * Finds the first cached NodeInfo for the closest ancestor of a given path + // * @param {string} path + // * @returns {NodeInfo} cached info for an ancestor + // */ + // findAncestor(path) { + // while (true) { + // path = PathInfo.get(path).parentPath; + // if (path === null) { return null; } + // const entry = this.find(path); + // if (entry) { return entry; } + // } + // } + } + static get CACHE_DURATION() { return CACHE_TIMEOUT; } + has(key) { + return this._cache.has(key); + } + _assertCleanupTimeout() { + if (this._cleanupTimeout === null) { + this._cleanupTimeout = setTimeout(() => { + this.cleanup(); + this._cleanupTimeout = null; + if (this._cache.size > 0) { + this._assertCleanupTimeout(); + } + }, CACHE_TIMEOUT); + // Make sure the cleanup timeout will not delay exiting the main process + // when the event loop is empty. See discussion #13 at github. + // See https://nodejs.org/api/timers.html#timers_timeout_unref + this._cleanupTimeout.unref && this._cleanupTimeout.unref(); + } + } + announce(path) { + let announcement = this._announcements.get(path); + if (!announcement) { + announcement = { + resolve: null, + reject: null, + promise: null, + }; + announcement.promise = new Promise((resolve, reject) => { + announcement.resolve = resolve; + announcement.reject = reject; + }); + this._announcements.set(path, announcement); + } + } + /** + * Updates or adds a NodeAddress to the cache + */ + update(nodeInfo) { + if (!(nodeInfo instanceof NodeInfo)) { + // For legacy .js callers + throw new TypeError(`nodeInfo must be an instance of NodeInfo`); + } + if (nodeInfo.path === '') { + // Don't cache root address, it has to be retrieved from storage.rootAddress + return; + } + let entry = this._cache.get(nodeInfo.path); + if (entry) { + DEBUG_MODE && console.error(`CACHE UPDATE ${nodeInfo}`); + entry.update(nodeInfo); + } + else { + // New entry + DEBUG_MODE && console.error(`CACHE INSERT ${nodeInfo}`); + entry = new NodeCacheEntry(nodeInfo); + this._cache.set(nodeInfo.path, entry); + } + const announcement = this._announcements.get(nodeInfo.path); + if (announcement) { + this._announcements.delete(nodeInfo.path); + announcement.resolve(nodeInfo); + } + this._assertCleanupTimeout(); + } + /** + * Invalidates a node and (optionally) its children by removing them from cache + */ + invalidate(path, recursive, reason) { + const entry = this._cache.get(path); + const pathInfo = PathInfo.get(path); + if (entry) { + DEBUG_MODE && console.error(`CACHE INVALIDATE ${reason} => ${entry.nodeInfo}`); + this._cache.delete(path); + } + if (recursive) { + this._cache.forEach((entry, cachedPath) => { + if (pathInfo.isAncestorOf(entry.pathInfo)) { + if (typeof recursive === 'object') { + // invalidate selected child keys only + const key = entry.pathInfo.keys[pathInfo.keys.length]; + const action = recursive[key]; // recursive.find(child => child.key === key); + switch (action) { + case 'delete': + this.update(new NodeInfo({ path: cachedPath, exists: false })); + break; + case 'invalidate': + this._cache.delete(cachedPath); + break; + } + } + else { + DEBUG_MODE && console.error(`CACHE INVALIDATE ${reason} => (child) ${entry.nodeInfo}`); + this._cache.delete(cachedPath); + } + } + }); + } + } + /** + * Marks the node at path, and all its descendants as deleted + * @param path + */ + delete(path) { + const entry = this._cache.get(path); + const pathInfo = PathInfo.get(path); + DEBUG_MODE && console.error(`CACHE MARK_DELETED => ${entry.nodeInfo}`); + this.update(new NodeInfo({ path, exists: false })); + this._cache.forEach((entry, cachedPath) => { + if (pathInfo.isAncestorOf(cachedPath)) { + DEBUG_MODE && console.error(`CACHE MARK_DELETED => (child) ${entry.nodeInfo}`); + entry.nodeInfo.exists = false; + entry.nodeInfo.value = null; + delete entry.nodeInfo.type; + entry.updated = Date.now(); + entry.keepAlive(); + // this.update(new NodeInfo({ path: cachedPath, exists: false })); + } + }); + } + cleanup() { + const now = Date.now(); + const entriesBefore = this._cache.size; + this._cache.forEach((entry, path) => { + if (entry.expires <= now) { + this._cache.delete(path); + } + }); + const entriesAfter = this._cache.size; + const entriesRemoved = entriesBefore - entriesAfter; + DEBUG_MODE && console.log(`CACHE Removed ${entriesRemoved} cache entries (${entriesAfter} remain cached)`); + } + clear() { + this._cache.clear(); + } + /** + * Finds cached NodeInfo for a given path. Returns null if the info is not found in cache + * @returns returns cached info, a promise, or null + */ + find(path, checkAnnounced = false) { + if (checkAnnounced === true) { + const announcement = this._announcements.get(path); + if (announcement) { + // let resolve; + // const p = new Promise(rs => { resolve = rs; }); + // announcement.promise = announcement.promise.then(info => { + // resolve(info); + // return info; + // }); + // return p; + return announcement.promise; + } + } + let entry = this._cache.get(path) || null; + if (entry && entry.nodeInfo.path !== '') { + if (entry.expires <= Date.now()) { + // expired + this._cache.delete(path); + entry = null; + } + else { + // Increase lifetime + entry.keepAlive(); + } + } + this._assertCleanupTimeout(); + DEBUG_MODE && console.error(`CACHE FIND ${path}: ${entry ? entry.nodeInfo : 'null'}`); + return entry ? entry.nodeInfo : null; + } +} +//# sourceMappingURL=node-cache.js.map \ No newline at end of file diff --git a/dist/esm/node-cache.js.map b/dist/esm/node-cache.js.map new file mode 100644 index 0000000..d3c628b --- /dev/null +++ b/dist/esm/node-cache.js.map @@ -0,0 +1 @@ +{"version":3,"file":"node-cache.js","sourceRoot":"","sources":["../../src/node-cache.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/node-changes.js b/dist/esm/node-changes.js new file mode 100644 index 0000000..4ef7081 --- /dev/null +++ b/dist/esm/node-changes.js @@ -0,0 +1,131 @@ +const CHANGE_TYPE = Object.freeze({ + UPDATE: 'update', + DELETE: 'delete', + INSERT: 'insert', +}); +export class NodeChange { + constructor(keyOrIndex, changeType, oldValue, newValue) { + this.keyOrIndex = keyOrIndex; + this.changeType = changeType; + this.oldValue = oldValue; + this.newValue = newValue; + } + static get CHANGE_TYPE() { + return CHANGE_TYPE; + } +} +export class NodeChangeTracker { + constructor(path) { + this.path = path; + this._changes = []; + } + addDelete(keyOrIndex, oldValue) { + const change = new NodeChange(keyOrIndex, NodeChange.CHANGE_TYPE.DELETE, oldValue, null); + this._changes.push(change); + return change; + } + addUpdate(keyOrIndex, oldValue, newValue) { + const change = new NodeChange(keyOrIndex, NodeChange.CHANGE_TYPE.UPDATE, oldValue, newValue); + this._changes.push(change); + return change; + } + addInsert(keyOrIndex, newValue) { + const change = new NodeChange(keyOrIndex, NodeChange.CHANGE_TYPE.INSERT, null, newValue); + this._changes.push(change); + return change; + } + add(keyOrIndex, currentValue, newValue) { + if (currentValue === null) { + if (newValue === null) { + throw new Error(`Wrong logic for node change on "${this.path}/${keyOrIndex}" - both old and new values are null`); + } + return this.addInsert(keyOrIndex, newValue); + } + else if (newValue === null) { + return this.addDelete(keyOrIndex, currentValue); + } + else { + return this.addUpdate(keyOrIndex, currentValue, newValue); + } + } + get updates() { + return this._changes.filter(change => change.changeType === NodeChange.CHANGE_TYPE.UPDATE); + } + get deletes() { + return this._changes.filter(change => change.changeType === NodeChange.CHANGE_TYPE.DELETE); + } + get inserts() { + return this._changes.filter(change => change.changeType === NodeChange.CHANGE_TYPE.INSERT); + } + get all() { + return this._changes; + } + get totalChanges() { + return this._changes.length; + } + get(keyOrIndex) { + return this._changes.find(change => change.keyOrIndex === keyOrIndex); + } + hasChanged(keyOrIndex) { + return !!this.get(keyOrIndex); + } + get newValue() { + if (typeof this._newValue === 'object') { + return this._newValue; + } + if (typeof this._oldValue === 'undefined') { + throw new TypeError(`oldValue is not set`); + } + const newValue = {}; + Object.keys(this.oldValue).forEach(key => newValue[key] = this.oldValue[key]); + this.deletes.forEach(change => delete newValue[change.keyOrIndex]); + this.updates.forEach(change => newValue[change.keyOrIndex] = change.newValue); + this.inserts.forEach(change => newValue[change.keyOrIndex] = change.newValue); + return newValue; + } + set newValue(value) { + this._newValue = value; + } + get oldValue() { + if (typeof this._oldValue === 'object') { + return this._oldValue; + } + if (typeof this._newValue === 'undefined') { + throw new TypeError(`newValue is not set`); + } + const oldValue = {}; + Object.keys(this.newValue).forEach(key => oldValue[key] = this.newValue[key]); + this.deletes.forEach(change => oldValue[change.keyOrIndex] = change.oldValue); + this.updates.forEach(change => oldValue[change.keyOrIndex] = change.oldValue); + this.inserts.forEach(change => delete oldValue[change.keyOrIndex]); + return oldValue; + } + set oldValue(value) { + this._oldValue = value; + } + get typeChanged() { + return typeof this.oldValue !== typeof this.newValue + || (this.oldValue instanceof Array && !(this.newValue instanceof Array)) + || (this.newValue instanceof Array && !(this.oldValue instanceof Array)); + } + static create(path, oldValue, newValue) { + const changes = new NodeChangeTracker(path); + changes.oldValue = oldValue; + changes.newValue = newValue; + oldValue && typeof oldValue === 'object' && Object.keys(oldValue).forEach(key => { + if (typeof newValue === 'object' && key in newValue && newValue !== null) { + changes.add(key, oldValue[key], newValue[key]); + } + else { + changes.add(key, oldValue[key], null); + } + }); + newValue && typeof newValue === 'object' && Object.keys(newValue).forEach(key => { + if (typeof oldValue !== 'object' || !(key in oldValue) || oldValue[key] === null) { + changes.add(key, null, newValue[key]); + } + }); + return changes; + } +} +//# sourceMappingURL=node-changes.js.map \ No newline at end of file diff --git a/dist/esm/node-changes.js.map b/dist/esm/node-changes.js.map new file mode 100644 index 0000000..4e480fa --- /dev/null +++ b/dist/esm/node-changes.js.map @@ -0,0 +1 @@ +{"version":3,"file":"node-changes.js","sourceRoot":"","sources":["../../src/node-changes.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/node-errors.js b/dist/esm/node-errors.js new file mode 100644 index 0000000..0ba94df --- /dev/null +++ b/dist/esm/node-errors.js @@ -0,0 +1,5 @@ +export class NodeNotFoundError extends Error { +} +export class NodeRevisionError extends Error { +} +//# sourceMappingURL=node-errors.js.map \ No newline at end of file diff --git a/dist/esm/node-errors.js.map b/dist/esm/node-errors.js.map new file mode 100644 index 0000000..036e903 --- /dev/null +++ b/dist/esm/node-errors.js.map @@ -0,0 +1 @@ +{"version":3,"file":"node-errors.js","sourceRoot":"","sources":["../../src/node-errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAkB,SAAQ,KAAK;CAAG;AAC/C,MAAM,OAAO,iBAAkB,SAAQ,KAAK;CAAG"} \ No newline at end of file diff --git a/dist/esm/node-info.js b/dist/esm/node-info.js new file mode 100644 index 0000000..b77edb4 --- /dev/null +++ b/dist/esm/node-info.js @@ -0,0 +1,44 @@ +import { getValueTypeName } from './node-value-types.js'; +import { PathInfo } from 'acebase-core'; +export class NodeInfo { + constructor(info) { + this.path = info.path; + this.type = info.type; + this.index = info.index; + this.key = info.key; + this.exists = info.exists; + this.address = info.address; + this.value = info.value; + this.childCount = info.childCount; + if (typeof this.path === 'string' && (typeof this.key === 'undefined' && typeof this.index === 'undefined')) { + const pathInfo = PathInfo.get(this.path); + if (typeof pathInfo.key === 'number') { + this.index = pathInfo.key; + } + else { + this.key = pathInfo.key; + } + } + if (typeof this.exists === 'undefined') { + this.exists = true; + } + } + get valueType() { + return this.type; + } + get valueTypeName() { + return getValueTypeName(this.valueType); + } + toString() { + if (!this.exists) { + return `"${this.path}" doesn't exist`; + } + if (this.address) { + return `"${this.path}" is ${this.valueTypeName} stored at ${this.address.toString()}`; + } + else { + return `"${this.path}" is ${this.valueTypeName} with value ${this.value}`; + } + } +} +//# sourceMappingURL=node-info.js.map \ No newline at end of file diff --git a/dist/esm/node-info.js.map b/dist/esm/node-info.js.map new file mode 100644 index 0000000..43b0c16 --- /dev/null +++ b/dist/esm/node-info.js.map @@ -0,0 +1 @@ +{"version":3,"file":"node-info.js","sourceRoot":"","sources":["../../src/node-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGxC,MAAM,OAAO,QAAQ;IAWjB,YAAY,IAAuB;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAElC,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,KAAK,WAAW,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,EAAE;YACzG,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,OAAO,QAAQ,CAAC,GAAG,KAAK,QAAQ,EAAE;gBAClC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC;aAC7B;iBACI;gBACD,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;aAC3B;SACJ;QACD,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE;YACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACtB;IACL,CAAC;IAED,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,aAAa;QACb,OAAO,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,OAAO,IAAI,IAAI,CAAC,IAAI,iBAAiB,CAAC;SACzC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,OAAO,IAAI,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,aAAa,cAAc,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACzF;aACI;YACD,OAAO,IAAI,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,aAAa,eAAe,IAAI,CAAC,KAAK,EAAE,CAAC;SAC7E;IACL,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/esm/node-lock.js b/dist/esm/node-lock.js new file mode 100644 index 0000000..9dee6a0 --- /dev/null +++ b/dist/esm/node-lock.js @@ -0,0 +1,278 @@ +import { PathInfo, ID } from 'acebase-core'; +const DEBUG_MODE = false; +const DEFAULT_LOCK_TIMEOUT = 120; // in seconds +export const LOCK_STATE = { + PENDING: 'pending', + LOCKED: 'locked', + EXPIRED: 'expired', + DONE: 'done', +}; +export class NodeLocker { + /** + * Provides locking mechanism for nodes, ensures no simultanious read and writes happen to overlapping paths + */ + constructor(debug, lockTimeout = DEFAULT_LOCK_TIMEOUT) { + this._locks = []; + this._lastTid = 0; + this.debug = debug; + this.timeout = lockTimeout * 1000; + } + setTimeout(timeout) { + this.timeout = timeout * 1000; + } + createTid() { + return DEBUG_MODE ? ++this._lastTid : ID.generate(); + } + _allowLock(path, tid, forWriting) { + /** + * Disabled path locking because of the following issue: + * + * Process 1 requests WRITE lock on "/users/ewout", is GRANTED + * Process 2 requests READ lock on "", is DENIED (process 1 writing to a descendant) + * Process 3 requests WRITE lock on "/posts/post1", is GRANTED + * Process 1 requests READ lock on "/" because of bound events, is DENIED (3 is writing to a descendant) + * Process 3 requests READ lock on "/" because of bound events, is DENIED (1 is writing to a descendant) + * + * --> DEADLOCK! + * + * Now simply makes sure one transaction has write access at the same time, + * might change again in the future... + */ + const conflict = this._locks + .find(otherLock => { + return (otherLock.tid !== tid + && otherLock.state === LOCK_STATE.LOCKED + && (forWriting || otherLock.forWriting)); + }); + return { allow: !conflict, conflict }; + } + quit() { + return new Promise(resolve => { + if (this._locks.length === 0) { + return resolve(); + } + this._quit = resolve; + }); + } + /** + * Safely reject a pending lock, catching any unhandled promise rejections (that should not happen in the first place, obviously) + * @param lock + */ + _rejectLock(lock, err) { + this._locks.splice(this._locks.indexOf(lock), 1); // Remove from queue + clearTimeout(lock.timeout); + try { + lock.reject(err); + } + catch (err) { + console.error(`Unhandled promise rejection:`, err); + } + } + _processLockQueue() { + if (this._quit) { + // Reject all pending locks + const quitError = new Error('Quitting'); + this._locks + .filter(lock => lock.state === LOCK_STATE.PENDING) + .forEach(lock => this._rejectLock(lock, quitError)); + // Resolve quit promise if queue is empty: + if (this._locks.length === 0) { + this._quit(); + } + } + const pending = this._locks + .filter(lock => lock.state === LOCK_STATE.PENDING) + .sort((a, b) => { + // // Writes get higher priority so all reads get the most recent data + // if (a.forWriting === b.forWriting) { + // if (a.requested < b.requested) { return -1; } + // else { return 1; } + // } + // else if (a.forWriting) { return -1; } + if (a.priority && !b.priority) { + return -1; + } + else if (!a.priority && b.priority) { + return 1; + } + return a.requested - b.requested; + }); + pending.forEach(lock => { + const check = this._allowLock(lock.path, lock.tid, lock.forWriting); + lock.waitingFor = check.conflict || null; + if (check.allow) { + this.lock(lock) + .then(lock.resolve) + .catch(err => this._rejectLock(lock, err)); + } + }); + } + async lock(path, tid, forWriting = true, comment = '', options = { withPriority: false, noTimeout: false }) { + let lock, proceed; + if (path instanceof NodeLock) { + lock = path; + //lock.comment = `(retry: ${lock.comment})`; + proceed = true; + } + else if (this._locks.findIndex((l => l.tid === tid && l.state === LOCK_STATE.EXPIRED)) >= 0) { + throw new Error(`lock on tid ${tid} has expired, not allowed to continue`); + } + else if (this._quit && !options.withPriority) { + throw new Error(`Quitting`); + } + else { + DEBUG_MODE && console.error(`${forWriting ? 'write' : 'read'} lock requested on "${path}" by tid ${tid} (${comment})`); + // // Test the requested lock path + // let duplicateKeys = getPathKeys(path) + // .reduce((r, key) => { + // let i = r.findIndex(c => c.key === key); + // if (i >= 0) { r[i].count++; } + // else { r.push({ key, count: 1 }) } + // return r; + // }, []) + // .filter(c => c.count > 1) + // .map(c => c.key); + // if (duplicateKeys.length > 0) { + // console.log(`ALERT: Duplicate keys found in path "/${path}"`.colorize([ColorStyle.dim, ColorStyle.bgRed]); + // } + lock = new NodeLock(this, path, tid, forWriting, options.withPriority === true); + lock.comment = comment; + this._locks.push(lock); + const check = this._allowLock(path, tid, forWriting); + lock.waitingFor = check.conflict || null; + proceed = check.allow; + } + if (proceed) { + DEBUG_MODE && console.error(`${lock.forWriting ? 'write' : 'read'} lock ALLOWED on "${lock.path}" by tid ${lock.tid} (${lock.comment})`); + lock.state = LOCK_STATE.LOCKED; + if (typeof lock.granted === 'number') { + //debug.warn(`lock :: ALLOWING ${lock.forWriting ? "write" : "read" } lock on path "/${lock.path}" by tid ${lock.tid}; ${lock.comment}`); + } + else { + lock.granted = Date.now(); + if (options.noTimeout !== true) { + lock.expires = Date.now() + this.timeout; + //debug.warn(`lock :: GRANTED ${lock.forWriting ? "write" : "read" } lock on path "/${lock.path}" by tid ${lock.tid}; ${lock.comment}`); + let timeoutCount = 0; + const timeoutHandler = () => { + // Autorelease timeouts must only fire when there is something wrong in the + // executing (AceBase) code, eg an unhandled promise rejection causing a lock not + // to be released. To guard against programming errors, we will issue 3 warning + // messages before releasing the lock. + if (lock.state !== LOCK_STATE.LOCKED) { + return; + } + timeoutCount++; + if (timeoutCount <= 3) { + // Warn first. + this.debug.warn(`${lock.forWriting ? 'write' : 'read'} lock on path "/${lock.path}" by tid ${lock.tid} (${lock.comment}) is taking a long time to complete [${timeoutCount}]`); + lock.timeout = setTimeout(timeoutHandler, this.timeout / 4); + return; + } + this.debug.error(`lock :: ${lock.forWriting ? 'write' : 'read'} lock on path "/${lock.path}" by tid ${lock.tid} (${lock.comment}) took too long`); + lock.state = LOCK_STATE.EXPIRED; + // let allTransactionLocks = _locks.filter(l => l.tid === lock.tid).sort((a,b) => a.requested < b.requested ? -1 : 1); + // let transactionsDebug = allTransactionLocks.map(l => `${l.state} ${l.forWriting ? "WRITE" : "read"} ${l.comment}`).join("\n"); + // debug.error(transactionsDebug); + this._processLockQueue(); + }; + lock.timeout = setTimeout(timeoutHandler, this.timeout / 4); + } + } + return lock; + } + else { + // Keep pending until clashing lock(s) is/are removed + //debug.warn(`lock :: QUEUED ${lock.forWriting ? "write" : "read" } lock on path "/${lock.path}" by tid ${lock.tid}; ${lock.comment}`); + console.assert(lock.state === LOCK_STATE.PENDING); + return new Promise((resolve, reject) => { + lock.resolve = resolve; + lock.reject = reject; + }); + } + } + unlock(lockOrId, comment, processQueue = true) { + let lock, i; + if (lockOrId instanceof NodeLock) { + lock = lockOrId; + i = this._locks.indexOf(lock); + } + else { + const id = lockOrId; + i = this._locks.findIndex(l => l.id === id); + lock = this._locks[i]; + } + if (i < 0) { + const msg = `lock on "/${lock.path}" for tid ${lock.tid} wasn't found; ${comment}`; + // debug.error(`unlock :: ${msg}`); + throw new Error(msg); + } + lock.state = LOCK_STATE.DONE; + clearTimeout(lock.timeout); + this._locks.splice(i, 1); + DEBUG_MODE && console.error(`${lock.forWriting ? 'write' : 'read'} lock RELEASED on "${lock.path}" by tid ${lock.tid}`); + //debug.warn(`unlock :: RELEASED ${lock.forWriting ? "write" : "read" } lock on "/${lock.path}" for tid ${lock.tid}; ${lock.comment}; ${comment}`); + processQueue && this._processLockQueue(); + return lock; + } + list() { + return this._locks || []; + } + isAllowed(path, tid, forWriting) { + return this._allowLock(path, tid, forWriting).allow; + } +} +let lastid = 0; +export class NodeLock { + /** + * Constructor for a record lock + * @param {NodeLocker} locker + * @param {string} path + * @param {string} tid + * @param {boolean} forWriting + * @param {boolean} priority + */ + constructor(locker, path, tid, forWriting, priority = false) { + this.locker = locker; + this.path = path; + this.tid = tid; + this.forWriting = forWriting; + this.priority = priority; + this.state = LOCK_STATE.PENDING; + this.requested = Date.now(); + this.comment = ''; + this.waitingFor = null; + this.id = ++lastid; + this.history = []; + } + static get LOCK_STATE() { return LOCK_STATE; } + async release(comment) { + //return this.storage.unlock(this.path, this.tid, comment); + this.history.push({ action: 'release', path: this.path, forWriting: this.forWriting, comment }); + return this.locker.unlock(this, comment || this.comment); + } + async moveToParent() { + const parentPath = PathInfo.get(this.path).parentPath; //getPathInfo(this.path).parent; + const allowed = this.locker.isAllowed(parentPath, this.tid, this.forWriting); //_allowLock(parentPath, this.tid, this.forWriting); + if (allowed) { + DEBUG_MODE && console.error(`moveToParent ALLOWED for ${this.forWriting ? 'write' : 'read'} lock on "${this.path}" by tid ${this.tid} (${this.comment})`); + this.history.push({ path: this.path, forWriting: this.forWriting, action: 'moving to parent' }); + this.waitingFor = null; + this.path = parentPath; + // this.comment = `moved to parent: ${this.comment}`; + return this; + } + else { + // Unlock without processing the queue + DEBUG_MODE && console.error(`moveToParent QUEUED for ${this.forWriting ? 'write' : 'read'} lock on "${this.path}" by tid ${this.tid} (${this.comment})`); + this.locker.unlock(this, `moveLockToParent: ${this.comment}`, false); + // Lock parent node with priority to jump the queue + const newLock = await this.locker.lock(parentPath, this.tid, this.forWriting, this.comment, { withPriority: true }); + DEBUG_MODE && console.error(`QUEUED moveToParent ALLOWED for ${this.forWriting ? 'write' : 'read'} lock on "${this.path}" by tid ${this.tid} (${this.comment})`); + newLock.history = this.history; + newLock.history.push({ path: this.path, forWriting: this.forWriting, action: 'moving to parent through queue (priority)' }); + return newLock; + } + } +} +//# sourceMappingURL=node-lock.js.map \ No newline at end of file diff --git a/dist/esm/node-lock.js.map b/dist/esm/node-lock.js.map new file mode 100644 index 0000000..928cbc4 --- /dev/null +++ b/dist/esm/node-lock.js.map @@ -0,0 +1 @@ +{"version":3,"file":"node-lock.js","sourceRoot":"","sources":["../../src/node-lock.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/node-transaction.js b/dist/esm/node-transaction.js new file mode 100644 index 0000000..8c930c4 --- /dev/null +++ b/dist/esm/node-transaction.js @@ -0,0 +1,440 @@ +import { PathInfo } from 'acebase-core'; +const SECOND = 1000; +const MINUTE = 60000; +const DEBUG_MODE = false; +const LOCK_TIMEOUT_MS = DEBUG_MODE ? 15 * MINUTE : 90 * SECOND; +export class NodeLockIntention { + /** + * The intention to read a single node for reflection purposes (eg enumerating its children). + * While lock is granted, this prevents others to write to this node + */ + static ReadInfo() { return new ReadInfoIntention(); } + /** + * The intention to read the value of a node and its children, optionally filtered to include or exclude specific child keys/paths + * While lock is granted, this prevents others to write to this node and its (optionally filtered) child paths + * @param filter + */ + static ReadValue(filter) { return new ReadValueIntention(filter); } + /** + * The intention to update specific child values of a node. + * While lock is granted, this prevents others to read or write to this node and specified child keys + * @param keys The child keys that will be updated + */ + static UpdateNode(keys) { return new UpdateNodeIntention(keys); } + /** + * The intention to overwrite a node's value. + * While lock is granted, this prevents others to read or write to this node and its descendants + */ + static OverwriteNode() { return new OverwriteNodeIntention(); } +} +class ReadInfoIntention extends NodeLockIntention { +} +class ReadValueIntention extends NodeLockIntention { + constructor(filter) { + super(); + this.filter = filter; + } +} +class UpdateNodeIntention extends NodeLockIntention { + constructor(keys) { + super(); + this.keys = keys; + } +} +class OverwriteNodeIntention extends NodeLockIntention { +} +var NodeLockState; +(function (NodeLockState) { + NodeLockState[NodeLockState["pending"] = 0] = "pending"; + NodeLockState[NodeLockState["locked"] = 1] = "locked"; + NodeLockState[NodeLockState["released"] = 2] = "released"; + NodeLockState[NodeLockState["expired"] = 3] = "expired"; +})(NodeLockState || (NodeLockState = {})); +export class NodeLockInfo { + constructor(id, tid, path, intention) { + this.id = id; + this.tid = tid; + this.path = path; + this.pathInfo = PathInfo.get(path); + this.intention = intention; + this.state = NodeLockState.pending; + } +} +export class TransactionManager { + constructor() { + this.lastTid = 0; + this.lastLid = 0; + this.queue = []; + this.locks = []; + this.blacklisted = []; + } + // constructor() { } + async createTransaction() { + const tid = ++this.lastTid; + const transaction = new Transaction(this, tid); + // this.transactions.push(transaction); + return transaction; + } + async requestLock(request) { + if (this.blacklisted.includes(request.tid)) { + throw new Error(`Transaction ${request.tid} not allowed to continue because one or more locks timed out`); + } + const lock = new NodeLockInfo(++this.lastLid, request.tid, request.path, request.intention); + lock.requested = Date.now(); + const grantLock = () => { + lock.state = NodeLockState.locked; + lock.granted = Date.now(); + lock.expires = lock.granted + LOCK_TIMEOUT_MS; + this.locks.push(lock); + }; + // Check locks held by other transactions for conflicts, then grant lock or queue. + const allow = this.allowLock(request); + if (allow.ok) { + grantLock(); + } + else { + // Queue + let resolve, reject; + const promise = new Promise((rs, rj) => { resolve = rs; reject = rj; }); + const queuedRequest = { + lock, + queued: Date.now(), + grant() { + const i = this.queue.indexOf(this); + this.queue.splice(i, 1); + grantLock(); + resolve(); + }, + }; + this.queue.push(queuedRequest); + // Create timeout + let timeoutsFired = 0; + const timeoutHandler = () => { + timeoutsFired++; + const lock = queuedRequest.lock, tid = lock.tid, blacklisted = this.blacklisted.includes(tid), terminate = timeoutsFired === 3 || blacklisted; + console.warn(`${request.intention.constructor.name} lock on "/${request.path}" is taking a long time [${timeoutsFired}]${terminate ? '. terminating.' : ''} (id ${lock.id}, tid ${lock.tid})`); + if (terminate) { + const i = this.queue.indexOf(queuedRequest); + this.queue.splice(i, 1); + !blacklisted && this.blacklisted.push(tid); + return reject(new Error(`Lock timeout`)); + } + timeout = setTimeout(timeoutHandler, LOCK_TIMEOUT_MS / 3); + }; + let timeout = setTimeout(timeoutHandler, LOCK_TIMEOUT_MS / 3); + // Wait until we get lock + await promise; + // Disable timeout + clearTimeout(timeout); + } + return lock; + } + async releaseLock(id) { + const index = this.locks.findIndex(l => l.id === id); + if (index < 0) { + throw new Error(`Lock ${id} not found`); + } + this.locks.splice(index, 1); + this.processQueue(); + } + processQueue() { + this.queue.forEach((item /*, i, queue*/) => { + const allow = this.allowLock(item.lock); + if (allow) { + item.grant(); // item will be removed from the queue by grant callback + } + }); + } + allowLock(request) { + // Get current granted locks in other transactions + const otherLocks = this.locks.filter(lock => lock.tid !== request.tid && lock.state === NodeLockState.locked); + // Find clashing lock + const conflict = otherLocks.find(lock => this.conflicts(request, lock)); + return { ok: !conflict, conflict }; + } + testConflict(lock, request) { + const lockInfo = new NodeLockInfo(1, 1, lock.path, lock.intention); + const lockRequest = { tid: 2, path: request.path, intention: request.intention }; + const conflict = this.conflicts(lockRequest, lockInfo); + // Also test reverse outcome: + const revLockInfo = new NodeLockInfo(1, 1, request.path, request.intention); + const revLockRequest = { tid: 2, path: lock.path, intention: lock.intention }; + const reverse = this.conflicts(revLockRequest, revLockInfo); + return [conflict, reverse]; + } + // private conflictsLegacy(request: INodeLockRequest, lock: NodeLockInfo) { + // // The legacy locking allowed 1 simultanious write, and denies writes while reading. + // // So, a requested write lock always conflicts with any other granted lock + // return request.intention instanceof OverwriteNodeIntention || request.intention instanceof UpdateNodeIntention; + // } + conflicts(request, lock) { + // Returns true if the request lock conflicts with given existing lock + if (!request.pathInfo) { + request.pathInfo = PathInfo.get(request.path); + } + const requestPath = request.pathInfo; + const lockPath = lock.pathInfo; + if (request.intention instanceof ReadInfoIntention) { + // Requested lock is to read info for a specific node and/or its children for reflection purposes + if (lock.intention instanceof OverwriteNodeIntention) { + // overwrite lock on "users/ewout/address" + // deny info requests for "users/ewout" + // deny info requests for "users/ewout/address(/*)" + return requestPath.isParentOf(lockPath) || lock.path === request.path || requestPath.isDescendantOf(lockPath); + } + else if (lock.intention instanceof UpdateNodeIntention) { + // update lock on "users/ewout/address" (keys "street", "nr"): + // deny info requests for "users/ewout/address", "users/ewout/address/street(/*)", "users/ewout/address/nr(/*)" + // allow info requests for all else, eg "users/ewout/address/city" + return request.path === lock.path || (requestPath.isDescendantOf(lockPath) && lock.intention.keys.some(key => requestPath.isOnTrailOf(lockPath.child(key)))); + } + // Other lock is read lock, allowed + return false; + } + else if (request.intention instanceof ReadValueIntention) { + // Requested lock is to read the value of a specific node, optionally filtering the children + if (lock.intention instanceof ReadValueIntention || lock.intention instanceof ReadInfoIntention) { + // existing lock is for reading. No conflict + return false; + } + const checkPath = (checkPath) => { + if (lock.intention instanceof UpdateNodeIntention) { + // update lock on "users/ewout/address" (keys "street", "nr"): + // deny value request for paths "", "users", "users/ewout", "users/ewout/address", "users/ewout/address", "users/ewout/address/street(/*)", "users/ewout/address/nr(/*)" + // allow value requests for all else + return checkPath.isOnTrailOf(lockPath) || lock.intention.keys.some(key => checkPath.isOnTrailOf(lockPath.child(key))); + } + else if (lock.intention instanceof OverwriteNodeIntention) { + // overwrite lock on "users/ewout/address": + // deny value request for anything on that trail + return checkPath.isOnTrailOf(lockPath); + } + return false; + }; + let conflict = checkPath(requestPath); + if (!request.intention.filter) { + // Requested lock is unfiltered - all data will be read + } + if (conflict && request.intention.filter && !requestPath.isDescendantOf(lockPath)) { + // Requested lock is filtered - only selected data will be read + conflict = false; + if (request.intention.filter.include instanceof Array) { + // The intention has an include filter to read only specified child keys/paths + conflict = requestPath.equals(lockPath) || request.intention.filter.include.some(key => checkPath(requestPath.child(key))); + } + if (!conflict && request.intention.filter.exclude instanceof Array) { + // request intention excludes 1 or more child keys/paths. If the lock is not on any of the excluded children, it is a conflict + conflict = requestPath.equals(lockPath) || !request.intention.filter.exclude.some(key => checkPath(requestPath.child(key))); + } + if (!conflict && request.intention.filter.child_objects === false) { + // child objects will not be loaded, so if the lock is writing to requestPath/obj/... that is no problem. + const allow = lockPath.isDescendantOf(requestPath.child('*')) + || (lock.intention instanceof UpdateNodeIntention && lockPath.equals(requestPath.child('*'))); + conflict = !allow; + } + } + return conflict; + } + else if (request.intention instanceof OverwriteNodeIntention) { + // Requested lock is to overwrite a specific node + if (lock.intention instanceof UpdateNodeIntention) { + // update of "users/ewout/address" (keys "street", "nr"): + // deny overwrites on "", "users", "users/ewout", "users/ewout/address", "users/ewout/address/street(/*)", "users/ewout/address/nr(/*)" + // allow overwrite on "users/ewout/address/city" + return requestPath.equals(lockPath) || requestPath.isAncestorOf(lockPath) || lock.intention.keys.some(key => requestPath.equals(lockPath.child(key)) || requestPath.isAncestorOf(lockPath.child(key))); + } + else if (lock.intention instanceof ReadInfoIntention) { + // read info of "users/ewout/address" + // deny overwrites on "", "users", "users/ewout", "users/ewout/address(/*)" + // allow overwrites on "users/ewout/address/*/*" + return requestPath.equals(lockPath) || requestPath.isAncestorOf(lockPath) || requestPath.isChildOf(lockPath); + } + else if (lock.intention instanceof ReadValueIntention) { + // lock is read value of "users/ewout/address" + // deny requested overwrites on "", "users", "users/ewout", "users/ewout/address(/*)" + // BUT: + // allow requested overwrite on "users/ewout/address/nr" if read does NOT have "nr" in filter.include + // allow requested overwrite on "users/ewout/address/collection/key" if read does NOT have "collection", "collection/*" or "*/key" etc in filter.include + // allow requested overwrite on "users/ewout/address/street" if read has "street" in filter.exclude + // allow requested overwrite on "users/ewout/address/*/*" if read filter.child_objects === false + let conflict = requestPath.isOnTrailOf(lockPath); + if (conflict && lock.intention.filter && requestPath.isDescendantOf(lockPath)) { + conflict = false; + if (lock.intention.filter.include instanceof Array) { + conflict = lock.intention.filter.include.some(key => { + // read lock on "users/ewout/address", include ["street", "nr"] + // conflict if overwrite request equals or is descendant of "users/ewout/address/street" or "users/ewout/address/nr" + const childLockPath = lockPath.child(key); + return requestPath.equals(childLockPath) || requestPath.isDescendantOf(childLockPath); + }); + } + if (!conflict && lock.intention.filter.exclude instanceof Array) { + conflict = !lock.intention.filter.exclude.some(key => { + // read lock on "users/ewout/address", exclude ["street", "nr"] + // conflict if overwrite request equals or is descendant of "users/ewout/address/street" or "users/ewout/address/nr" + const childLockPath = lockPath.child(key); + return requestPath.equals(childLockPath) || requestPath.isDescendantOf(childLockPath); + }); + } + if (!conflict && lock.intention.filter.child_objects === false) { + // read lock on "users/ewout", no child_objects + // conflict if overwrite request is a child of "users/ewout", eg "users/ewout/address" + conflict = requestPath.isChildOf(lockPath); + } + } + return conflict; + } + else if (lock.intention instanceof OverwriteNodeIntention) { + // overwrite of "users/ewout/address" + // deny overwrites on "", "users", "users/ewout", "users/ewout/address(/*)" + return requestPath.isOnTrailOf(lockPath); + } + } + else if (request.intention instanceof UpdateNodeIntention) { + // Requested lock is to update a specific node + if (lock.intention instanceof UpdateNodeIntention) { + // update of "users/ewout/address" (keys "street", "nr"): + // deny updates on "" (key "users"), "users" (key "ewout"), "users/ewout" (key "address"), "users/ewout/address" (keys "street", "nr") + const lockedPaths = lock.intention.keys.map(key => lockPath.child(key)); + // eg: ["users/ewout/address/street", "users/ewout/address/nr"] + const overwritePaths = request.intention.keys.map(key => requestPath.child(key)); + // eg: ["users/ewout/address/city" (allow), "users/ewout/address/street" (deny)] + // or: ["users/ewout" (deny)] + return lockedPaths.some(lockPath => overwritePaths.some(overwritePath => overwritePath.isOnTrailOf(lockPath))); + } + else if (lock.intention instanceof OverwriteNodeIntention) { + // overwrite of "users/ewout/address" + // deny updates on "" (key "users"), "users" (key "ewout"), "users/ewout" (key "address"), "users/ewout/address(/*)" (any key) + const overwritePaths = request.intention.keys.map(key => requestPath.child(key)); + // eg: ["users/ewout/address/city" (deny), "users/ewout/address/street" (deny)] + // or: ["users/ewout/last_login" (allow), "users/ewout/address" (deny)] + // or: "users/ewout" (deny) + return overwritePaths.some(path => path.isOnTrailOf(lockPath)); + } + else if (lock.intention instanceof ReadInfoIntention) { + // read info of "users/ewout/address": + // deny updates on "" (key "users"), "users" (key "ewout"), "users/ewout" (key "address"), "users/ewout/address" (any key) + // allow updates on "users/ewout/address/*/*" + const overwritePaths = request.intention.keys.map(key => requestPath.child(key)); + return overwritePaths.some(path => path.equals(lockPath) || path.isAncestorOf(lockPath) || path.isChildOf(lockPath)); + } + else if (lock.intention instanceof ReadValueIntention) { + // read value lock on "users/ewout/address": + // when unfiltered: + // deny requested updates on "" (key "users"), "users" (key "ewout"), "users/ewout" (key "address"), "users/ewout/address(/*)" (any key) + const overwritePaths = request.intention.keys.map(key => requestPath.child(key)); + // eg: ["users/ewout/address/city" (deny), "users/ewout/address/street" (deny)] + // or: ["users/ewout/last_login" (allow), "users/ewout/address" (deny)] + // or: ["users/ewout"] (deny) + let conflict = overwritePaths.some(path => path.isOnTrailOf(lockPath)); + if (conflict && lock.intention.filter && !requestPath.isAncestorOf(lockPath)) { + conflict = false; + if (lock.intention.filter.include instanceof Array) { + // include ["street", "nr"]: + // deny writes on "users/ewout/address/street" and "users/ewout/address/nr" + const readPaths = lock.intention.filter.include.map(key => lockPath.child(key)); + conflict = overwritePaths.some(writePath => readPaths.some(readPath => writePath.isOnTrailOf(readPath))); + } + if (!conflict && lock.intention.filter.exclude instanceof Array) { + // exclude ["street", "nr"]: + // deny writes on "users/ewout/address/(not street or nr)" + const unreadPaths = lock.intention.filter.include.map(key => lockPath.child(key)); + conflict = !overwritePaths.every(writePath => unreadPaths.some(readPath => writePath.isOnTrailOf(readPath))); + } + if (!conflict && lock.intention.filter.child_objects === false) { + // deny writes on direct children of lockPath + conflict = !overwritePaths.every(writePath => lockPath.child('*').isAncestorOf(writePath)); + } + } + return conflict; + } + } + return false; // Should not be able to get here? + } +} +export class IPCTransactionManager extends TransactionManager { + constructor(ipc) { + super(); + this.ipc = ipc; + this.init(); + } + init() { + if (!this.ipc.isMaster) { + return; + } + this.ipc.on('request', async (request) => { + try { + if (request.type === 'transaction.create') { + const transaction = await this.createTransaction(); + const tx = { id: transaction.id }; + this.ipc.replyRequest(request, { ok: true, transaction: tx }); + } + else if (request.type === 'transaction.lock') { + const lock = await this.requestLock(request.lock); + this.ipc.replyRequest(request, { ok: true, lock }); + } + else if (request.type === 'transaction.release') { + await this.releaseLock(request.id); + this.ipc.replyRequest(request, { ok: true }); + } + } + catch (err) { + this.ipc.replyRequest(request, { ok: false, error: err.message }); + } + }); + } + async createTransaction() { + if (this.ipc.isMaster) { + return super.createTransaction(); + } + else { + const result = await this.ipc.sendRequest({ type: 'transaction.create' }); + if (!result.ok) { + throw new Error(result.error); + } + const transaction = new Transaction(this, result.transaction.id); + return transaction; + } + } + async requestLock(request) { + if (this.ipc.isMaster) { + return super.requestLock(request); + } + const result = await this.ipc.sendRequest({ type: 'transaction.lock', lock: request }); + if (!result.ok) { + throw new Error(result.error); + } + return result.lock; + } + async releaseLock(id) { + if (this.ipc.isMaster) { + return super.releaseLock(id); + } + const result = await this.ipc.sendRequest({ type: 'transaction.release', id }); + if (!result.ok) { + throw new Error(result.error); + } + } +} +export class NodeLock extends NodeLockInfo { + constructor(transaction, lockInfo) { + super(lockInfo.id, transaction.id, lockInfo.path, lockInfo.intention); + this.transaction = transaction; + } + async release() { + return this.transaction.manager.releaseLock(this.id); + } +} +export class Transaction { + constructor(manager, id) { + this.manager = manager; + this.id = id; + this.locks = []; + } + async lock(path, intention) { + const lockInfo = await this.manager.requestLock({ tid: this.id, path, intention }); + this.locks.push(lockInfo); + return new NodeLock(this, lockInfo); + } +} +//# sourceMappingURL=node-transaction.js.map \ No newline at end of file diff --git a/dist/esm/node-transaction.js.map b/dist/esm/node-transaction.js.map new file mode 100644 index 0000000..d5ad620 --- /dev/null +++ b/dist/esm/node-transaction.js.map @@ -0,0 +1 @@ +{"version":3,"file":"node-transaction.js","sourceRoot":"","sources":["../../src/node-transaction.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/node-value-types.js b/dist/esm/node-value-types.js new file mode 100644 index 0000000..535afc3 --- /dev/null +++ b/dist/esm/node-value-types.js @@ -0,0 +1,85 @@ +import { PathReference } from 'acebase-core'; +export const VALUE_TYPES = Object.freeze({ + // Native types: + OBJECT: 1, + ARRAY: 2, + NUMBER: 3, + BOOLEAN: 4, + STRING: 5, + BIGINT: 7, + // Custom types: + DATETIME: 6, + BINARY: 8, + REFERENCE: 9, // Absolute or relative path to other node + // Future: + // DOCUMENT: 10, // JSON/XML documents that are contained entirely within the stored node +}); +export function getValueTypeName(valueType) { + switch (valueType) { + case VALUE_TYPES.ARRAY: return 'array'; + case VALUE_TYPES.BINARY: return 'binary'; + case VALUE_TYPES.BOOLEAN: return 'boolean'; + case VALUE_TYPES.DATETIME: return 'date'; + case VALUE_TYPES.NUMBER: return 'number'; + case VALUE_TYPES.OBJECT: return 'object'; + case VALUE_TYPES.REFERENCE: return 'reference'; + case VALUE_TYPES.STRING: return 'string'; + case VALUE_TYPES.BIGINT: return 'bigint'; + // case VALUE_TYPES.DOCUMENT: return 'document'; + default: 'unknown'; + } +} +export function getNodeValueType(value) { + if (value instanceof Array) { + return VALUE_TYPES.ARRAY; + } + else if (value instanceof PathReference) { + return VALUE_TYPES.REFERENCE; + } + else if (value instanceof ArrayBuffer) { + return VALUE_TYPES.BINARY; + } + // TODO else if (value instanceof DataDocument) { return VALUE_TYPES.DOCUMENT; } + else if (typeof value === 'string') { + return VALUE_TYPES.STRING; + } + else if (typeof value === 'object') { + return VALUE_TYPES.OBJECT; + } + else if (typeof value === 'bigint') { + return VALUE_TYPES.BIGINT; + } + throw new Error(`Invalid value for standalone node: ${value}`); +} +export function getValueType(value) { + if (value instanceof Array) { + return VALUE_TYPES.ARRAY; + } + else if (value instanceof PathReference) { + return VALUE_TYPES.REFERENCE; + } + else if (value instanceof ArrayBuffer) { + return VALUE_TYPES.BINARY; + } + else if (value instanceof Date) { + return VALUE_TYPES.DATETIME; + } + // TODO else if (value instanceof DataDocument) { return VALUE_TYPES.DOCUMENT; } + else if (typeof value === 'string') { + return VALUE_TYPES.STRING; + } + else if (typeof value === 'object') { + return VALUE_TYPES.OBJECT; + } + else if (typeof value === 'number') { + return VALUE_TYPES.NUMBER; + } + else if (typeof value === 'boolean') { + return VALUE_TYPES.BOOLEAN; + } + else if (typeof value === 'bigint') { + return VALUE_TYPES.BIGINT; + } + throw new Error(`Unknown value type: ${value}`); +} +//# sourceMappingURL=node-value-types.js.map \ No newline at end of file diff --git a/dist/esm/node-value-types.js.map b/dist/esm/node-value-types.js.map new file mode 100644 index 0000000..07df71c --- /dev/null +++ b/dist/esm/node-value-types.js.map @@ -0,0 +1 @@ +{"version":3,"file":"node-value-types.js","sourceRoot":"","sources":["../../src/node-value-types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/node.js b/dist/esm/node.js new file mode 100644 index 0000000..a6c4138 --- /dev/null +++ b/dist/esm/node.js @@ -0,0 +1,7 @@ +import { VALUE_TYPES } from './node-value-types.js'; +export class Node { + static get VALUE_TYPES() { + return VALUE_TYPES; + } +} +//# sourceMappingURL=node.js.map \ No newline at end of file diff --git a/dist/esm/node.js.map b/dist/esm/node.js.map new file mode 100644 index 0000000..bf43b03 --- /dev/null +++ b/dist/esm/node.js.map @@ -0,0 +1 @@ +{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,OAAO,IAAI;IACb,MAAM,KAAK,WAAW;QAClB,OAAO,WAAW,CAAC;IACvB,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/esm/not-supported.js b/dist/esm/not-supported.js new file mode 100644 index 0000000..20b1bd0 --- /dev/null +++ b/dist/esm/not-supported.js @@ -0,0 +1,2 @@ +// Not supported in current environment +//# sourceMappingURL=not-supported.js.map \ No newline at end of file diff --git a/dist/esm/not-supported.js.map b/dist/esm/not-supported.js.map new file mode 100644 index 0000000..731a279 --- /dev/null +++ b/dist/esm/not-supported.js.map @@ -0,0 +1 @@ +{"version":3,"file":"not-supported.js","sourceRoot":"","sources":["../../src/not-supported.ts"],"names":[],"mappings":"AAAA,uCAAuC"} \ No newline at end of file diff --git a/dist/esm/package.json b/dist/esm/package.json new file mode 100644 index 0000000..afdd57f --- /dev/null +++ b/dist/esm/package.json @@ -0,0 +1,14 @@ +{ + "type": "module", + "types": "../types/index.d.ts", + "browser": { + "./index.js": "./browser.js", + "./ipc/index.js": "./ipc/browser.js", + "./promise-fs/index.js": "./promise-fs/browser.js", + "./storage/binary/index.js": "./not-supported.js", + "./storage/mssql/index.js": "./not-supported.js", + "./storage/sqlite/index.js": "./not-supported.js", + "./data-index/index.js": "./not-supported.js", + "./btree/index.js": "./not-supported.js" + } +} diff --git a/dist/esm/promise-fs/browser.js b/dist/esm/promise-fs/browser.js new file mode 100644 index 0000000..c523078 --- /dev/null +++ b/dist/esm/promise-fs/browser.js @@ -0,0 +1,5 @@ +export class pfs { + static get hasFileSystem() { return false; } + static get fs() { return null; } +} +//# sourceMappingURL=browser.js.map \ No newline at end of file diff --git a/dist/esm/promise-fs/browser.js.map b/dist/esm/promise-fs/browser.js.map new file mode 100644 index 0000000..02a78c4 --- /dev/null +++ b/dist/esm/promise-fs/browser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/promise-fs/browser.ts"],"names":[],"mappings":"AAAA,MAAM,OAAgB,GAAG;IACrB,MAAM,KAAK,aAAa,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;IAC5C,MAAM,KAAK,EAAE,KAAW,OAAO,IAAI,CAAC,CAAC,CAAC;CACzC"} \ No newline at end of file diff --git a/dist/esm/promise-fs/index.js b/dist/esm/promise-fs/index.js new file mode 100644 index 0000000..3574f9d --- /dev/null +++ b/dist/esm/promise-fs/index.js @@ -0,0 +1,397 @@ +import * as fs from 'fs'; +const nodeVersion = process.versions.node.split('.').reduce((v, n, i) => (v[i === 0 ? 'major' : i === 1 ? 'minor' : 'patch'] = +n, v), { major: 0, minor: 0, patch: 0 }); +export class pfs { + static get hasFileSystem() { return typeof fs === 'object' && 'open' in fs; } + static get fs() { return fs; } + static get flags() { + return { + /** @description 'a' - Open file for appending. The file is created if it does not exist. */ + get append() { return 'a'; }, + /** @description 'ax' - Like append ('a') but fails if the path exists. */ + get appendAndCreate() { return 'ax'; }, + /** @description 'a+' - Open file for reading and appending. The file is created if it does not exist. */ + get readAndAppend() { return 'a+'; }, + /** @description 'ax+' - Like readAndAppend ('a+') but fails if the path exists. */ + get readAndAppendAndCreate() { return 'ax+'; }, + /** @description 'as' - Open file for appending in synchronous mode. The file is created if it does not exist. */ + get appendSynchronous() { return 'as'; }, + /** @description 'as+' - Open file for reading and appending in synchronous mode. The file is created if it does not exist. */ + get readAndAppendSynchronous() { return 'as+'; }, + /** @description 'r' - Open file for reading. An exception occurs if the file does not exist. */ + get read() { return 'r'; }, + /** @description 'r+' - Open file for reading and writing. An exception occurs if the file does not exist.*/ + get readAndWrite() { return 'r+'; }, + /** @description 'rs+' - Open file for reading and writing in synchronous mode. Instructs the operating system to bypass the local file system cache. This is primarily useful for opening files on NFS mounts as it allows skipping the potentially stale local cache. It has a very real impact on I/O performance so using this flag is not recommended unless it is needed. This doesn't turn fs.open() or fsPromises.open() into a synchronous blocking call. If synchronous operation is desired, something like fs.openSync() should be used.*/ + get readAndWriteSynchronous() { return 'rs+'; }, + /** @description 'w' - Open file for writing. The file is created (if it does not exist) or truncated (if it exists). */ + get write() { return 'w'; }, + /** @description 'wx' - Like write ('w') but fails if the path exists. */ + get writeAndCreate() { return 'wx'; }, + /** @description 'w+' - Open file for reading and writing. The file is created (if it does not exist) or truncated (if it exists). */ + get readAndWriteAndCreateOrOverwrite() { return 'w+'; }, + /** @description 'wx+' - Like readAndWriteAndCreateOrOverwrite ('w+') but fails if the path exists. */ + get readAndWriteAndCreate() { return 'wx+'; }, + }; + } + /** + * @deprecated deprecated in Node.js since v1.0.0, don't use! + * @param path + * @returns returns a promise that resolves with a boolean indicating if the path exists + */ + static exists(path) { + return new Promise(resolve => { + fs.exists(path, exists => { + resolve(exists); + }); + }); + } + /** + * Opens a file for reading, writing or both + * @param path + * @param flags see pfs.flags, default is pfs.flags.read ('r') + * @param mode default is 0o666 + * @returns returns a promise that resolves with fd (file descriptor) + */ + static open(path, flags, mode) { + return new Promise((resolve, reject) => { + fs.open(path, flags, mode, (err, fd) => { + if (err) { + reject(err); + } + else { + resolve(fd); + } + }); + }); + } + /** + * Closes an open file + * @param fd file descriptor + * @returns returns a promise that resolves once the file has been closed + */ + static close(fd) { + return new Promise((resolve, reject) => { + fs.close(fd, (err) => { + if (err) { + reject(err); + } + else { + resolve(); + } + }); + }); + } + /** + * Writes to an open file + * @param fd file descriptor + * @param buffer buffer to write to the file + * @param offset start byte of the buffer to read from, default is 0 + * @param length amount of bytes to write, default is buffer.byteLength-offset + * @param position offset from the beginning of the file where this data should be written. If typeof position !== 'number', the data will be written at the current position + * @returns returns a Promise that resolves with an object containing the amount of bytes written and reference to the used buffer source + */ + static write(fd, buffer, offset, length, position) { + // NOTE: Changes fs.write behaviour by making offset, length and position optional + if (typeof offset === 'undefined') { + offset = 0; + } + if (typeof length === 'undefined') { + length = buffer.byteLength - offset; + } + if (typeof position === 'undefined') { + position = null; + } + return new Promise((resolve, reject) => { + fs.write(fd, buffer, offset, length, position, (err, bytesWritten, buffer) => { + if (err) { + err.args = { fd, buffer, offset, length, position }; + reject(err); + } + else { + resolve({ bytesWritten, buffer }); + } + }); + }); + } + /** + * Asynchronously writes data to a file, replacing the file if it already exists. + * @param path filename or file descriptor + * @param data string or binary data to write. if data is a buffer, encoding option is ignored + * @param options encoding to use or object specifying encoding and/or flag and mode to use. + * @param options.encoding default is 'utf8'. Not used if data is a buffer + * @param options.mode + * @param options.flag see pfs.flags, default is pfs.flags.write ('w') + * @returns {} returns a promise that resolves once the file has been written + */ + static writeFile(path, data, options) { + return new Promise((resolve, reject) => { + fs.writeFile(path, data, options, err => { + if (err) { + reject(err); + } + else { + resolve(); + } + }); + }); + } + /** + * Reads from an open file + * @param fd file descriptor + * @param buffer the buffer that the data will be written to + * @param offset the offset in the buffer to start writing at, defaults to 0 + * @param length an integer specifying the number of bytes to read, defaults to buffer.byteLength-offset + * @param position specifying where to begin reading from in the file. If position is null, data will be read from the current file position, and the file position will be updated. If position is an integer, the file position will remain unchanged. + * @returns returns a promise that resolves with the amount of bytes read and a reference to the buffer that was written to + */ + static read(fd, buffer, offset, length, position) { + // NOTE: Changes fs.read behaviour by making offset, length and position optional + if (typeof offset === 'undefined') { + offset = 0; + } + if (typeof length === 'undefined') { + length = buffer.byteLength; + } + if (typeof position === 'undefined') { + position = null; + } + return new Promise((resolve, reject) => { + fs.read(fd, buffer, offset, length, position, (err, bytesRead, buffer) => { + if (err) { + err.args = { fd, buffer, offset, length, position }; + reject(err); + } + else { + resolve({ bytesRead, buffer }); + } + }); + }); + } + /** + * Asynchronously reads the entire contents of a file. + * @param path filename or file descriptor + * @param options encoding to use or object specifying encoding and/or flag to use. 'utf8' will return the read data as a string + * @param options.encoding default is null, will return the raw buffer. + * @param options.flag see pfs.flags, default is pfs.flags.read ('r') + * @returns returns a promise that resolves with a string if an encoding was specified, or a raw buffer otherwise + */ + static readFile(path, options) { + return new Promise((resolve, reject) => { + fs.readFile(path, options, (err, data) => { + if (err) { + reject(err); + } + else { + resolve(data); + } + }); + }); + } + /** + * Truncates a file asynchronously + * @param path + * @param len byte length the file will be truncated to, default is 0. + * @returns returns a promise that resolves once the file has been truncated + */ + static truncate(path, len = 0) { + return new Promise((resolve, reject) => { + fs.truncate(path, len, (err) => { + if (err) { + reject(err); + } + else { + resolve(); + } + }); + }); + } + /** + * Truncates an open file asynchronously + * @param fd file descriptor + * @param len byte length the file will be truncated to, default is 0. + * @returns returns a promise that resolves once the file has been truncated + */ + static ftruncate(fd, len = 0) { + return new Promise((resolve, reject) => { + fs.ftruncate(fd, len, (err) => { + if (err) { + reject(err); + } + else { + resolve(); + } + }); + }); + } + /** + * Reads the contents of a directory. returns a promise that resolves with an array of names or entries + * @param path + * @param options can be a string specifying an encoding, or an object with an encoding property specifying the character encoding to use for the filenames passed to the callback. If the encoding is set to 'buffer', the filenames returned will be passed as Buffer objects. + * @param options.encoding default 'utf8' + * @param options.withFileTypes default is false + * @returns returns a promise that resolves with an array of filenames or entries, excluding directories '.' and '..'. + */ + static readdir(path, options) { + return new Promise((resolve, reject) => { + fs.readdir(path, options, (err, files) => { + if (err) { + reject(err); + } + else { + resolve(files); + } + }); + }); + } + /** + * Asynchronously creates a directory + * @param path + * @param options optional, can be an integer specifying mode (permission and sticky bits), or an object with a mode property and a recursive property indicating whether parent folders should be created. + * @param options.recursive default is false + * @param options.mode Not supported on Windows. default is 0o777 + * @returns returns a promise that resolves once the dir has been created + */ + static mkdir(path, options) { + return new Promise((resolve, reject) => { + fs.mkdir(path, options, (err) => { + if (err) { + reject(err); + } + else { + resolve(); + } + }); + }); + } + /** + * Asynchronously removes a file or symbolic link + * @param path + * @returns returns a promise that resolves once the file has been removed + */ + static unlink(path) { + return new Promise((resolve, reject) => { + fs.unlink(path, (err) => { + if (err) { + reject(err); + } + else { + resolve(); + } + }); + }); + } + /** + * (Alias for unlink) Asynchronously removes a file or symbolic link + * @param path + * @returns returns a promise that resolves once the file has been removed + */ + static rm(path) { + return this.unlink(path); + } + /** + * Asynchronously removes a file or symbolic link + * @param path + * @returns returns a promise that resolves once the file has been removed + */ + static rmdir(path, options) { + return new Promise((resolve, reject) => { + const callback = (err) => { + if (err) { + reject(err); + } + else { + resolve(); + } + }; + const hasRecursiveOption = options?.recursive === true; + if (nodeVersion.major < 12) { + // Node.js did not support options before v12 + if (hasRecursiveOption) { + throw new Error(`rmdir options not supported in NodeJS ${process.version}`); + } + fs.rmdir(path, callback); + } + else if (hasRecursiveOption && (nodeVersion.major > 14 || (nodeVersion.major === 14 && nodeVersion.minor >= 14))) { + // Node.js v14.14.0+ deprecated recursive on rmdir, now expects calls to rm instead + fs.rm(path, options, callback); + } + else { + fs.rmdir(path, options, callback); + } + }); + } + /** + * Asynchronously rename file at oldPath to the pathname provided as newPath. + * In the case that newPath already exists, it will be overwritten. If there is + * a directory at newPath, an error will be raised instead + * @param oldPath + * @param newPath + * @returns returns a promise that resolves once the file has been renamed + */ + static rename(oldPath, newPath) { + return new Promise((resolve, reject) => { + fs.rename(oldPath, newPath, (err) => { + if (err) { + reject(err); + } + else { + resolve(); + } + }); + }); + } + /** + * Asynchronous stat(2) - Get file status + * @param path A path to a file. If a URL is provided, it must use the file: + * @param options + * @param options.bigint + * @returns returns a promise that resolves with the file stats + */ + static stat(path, options) { + return new Promise((resolve, reject) => { + fs.stat(path, options, (err, stats) => { + if (err) { + reject(err); + } + else { + resolve(stats); + } + }); + }); + } + /** + * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device. + * @param fd A file descriptor + * @returns {Promise} returns a promise that resolves when all data is flushed + */ + static fsync(fd) { + return new Promise((resolve, reject) => { + fs.fsync(fd, (err) => { + if (err) { + reject(err); + } + else { + resolve(); + } + }); + }); + } + /** + * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device. + * @param fd A file descriptor + * @returns {Promise} returns a promise that resolves when all data is flushed + */ + static fdatasync(fd) { + return new Promise((resolve, reject) => { + fs.fdatasync(fd, (err) => { + if (err) { + reject(err); + } + else { + resolve(); + } + }); + }); + } +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/esm/promise-fs/index.js.map b/dist/esm/promise-fs/index.js.map new file mode 100644 index 0000000..0b24748 --- /dev/null +++ b/dist/esm/promise-fs/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/promise-fs/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAGzB,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AAEzK,MAAM,OAAgB,GAAG;IACrB,MAAM,KAAK,aAAa,KAAK,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAI,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7E,MAAM,KAAK,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;IAC9B,MAAM,KAAK,KAAK;QACZ,OAAO;YACH,4FAA4F;YAC5F,IAAI,MAAM,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC;YAC5B,0EAA0E;YAC1E,IAAI,eAAe,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;YACtC,yGAAyG;YACzG,IAAI,aAAa,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;YACpC,mFAAmF;YACnF,IAAI,sBAAsB,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;YAC9C,iHAAiH;YACjH,IAAI,iBAAiB,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;YACxC,8HAA8H;YAC9H,IAAI,wBAAwB,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;YAChD,gGAAgG;YAChG,IAAI,IAAI,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC;YAC1B,4GAA4G;YAC5G,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;YACnC,shBAAshB;YACthB,IAAI,uBAAuB,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;YAC/C,wHAAwH;YACxH,IAAI,KAAK,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC;YAC3B,yEAAyE;YACzE,IAAI,cAAc,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;YACrC,qIAAqI;YACrI,IAAI,gCAAgC,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;YACvD,sGAAsG;YACtG,IAAI,qBAAqB,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;SAChD,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,IAA+B;QACzC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;gBACrB,OAAO,CAAC,MAAM,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,CAAC,IAA+B,EAAE,KAAoB,EAAE,IAAY;QAC3E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE;gBACnC,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,CAAC,EAAE,CAAC,CAAC;iBAAE;YACzB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,EAAU;QACnB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;gBACjB,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,EAAE,CAAC;iBAAE;YACvB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAK,CAAC,EAAU,EAAE,MAAkC,EAAE,MAAc,EAAE,MAAc,EAAE,QAAgB;QACzG,kFAAkF;QAClF,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YAAE,MAAM,GAAG,CAAC,CAAC;SAAE;QAClD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YAAE,MAAM,GAAG,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC;SAAE;QAC3E,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;YAAE,QAAQ,GAAG,IAAI,CAAC;SAAE;QAEzD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE;gBACzE,IAAI,GAAG,EAAE;oBACJ,GAAW,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;oBAC7D,MAAM,CAAC,GAAG,CAAC,CAAC;iBACf;qBACI;oBAAE,OAAO,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;iBAAE;YAC/C,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,SAAS,CAAC,IAAqC,EAAE,IAAuC,EAAE,OAAqF;QAClL,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE;gBACpC,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,EAAE,CAAC;iBAAE;YACvB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,IAAI,CAAuC,EAAU,EAAE,MAAS,EAAE,MAAc,EAAE,MAAc,EAAE,QAAgB;QACrH,iFAAiF;QACjF,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YAAE,MAAM,GAAG,CAAC,CAAC;SAAE;QAClD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YAAE,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;SAAE;QAClE,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;YAAE,QAAQ,GAAG,IAAI,CAAC;SAAE;QAEzD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE;gBACrE,IAAI,GAAG,EAAE;oBACJ,GAAW,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;oBAC7D,MAAM,CAAC,GAAG,CAAC,CAAC;iBACf;qBACI;oBAAE,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;iBAAE;YAC5C,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAsC,EAAE,OAAuE;QAC3H,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;gBACrC,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,CAAC,IAAI,CAAC,CAAC;iBAAE;YAC3B,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,IAA8B,EAAE,GAAG,GAAG,CAAC;QACnD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC3B,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,EAAE,CAAC;iBAAE;YACvB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,SAAS,CAAC,EAAU,EAAE,GAAG,GAAG,CAAC;QAChC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC1B,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,EAAE,CAAC;iBAAE;YACvB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,CAAC,IAA8B,EAAE,OAA4E;QACvH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;gBACrC,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,CAAC,KAAK,CAAC,CAAC;iBAAE;YAC5B,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,CAAC,IAA8B,EAAE,OAAsD;QAC/F,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC5B,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,EAAE,CAAC;iBAAE;YACvB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,IAA+B;QACzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;gBACpB,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,EAAE,CAAC;iBAAE;YACvB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,IAA+B;QACrC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,IAA+B,EAAE,OAA2E;QACrH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,MAAM,QAAQ,GAAG,CAAC,GAAU,EAAE,EAAE;gBAC5B,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,EAAE,CAAC;iBAAE;YACvB,CAAC,CAAC;YACF,MAAM,kBAAkB,GAAG,OAAO,EAAE,SAAS,KAAK,IAAI,CAAC;YACvD,IAAI,WAAW,CAAC,KAAK,GAAG,EAAE,EAAE;gBACxB,6CAA6C;gBAC7C,IAAI,kBAAkB,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;iBAAE;gBACxG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;aAC5B;iBACI,IAAI,kBAAkB,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,KAAK,EAAE,IAAI,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE;gBAC9G,mFAAmF;gBACnF,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;aAClC;iBACI;gBACD,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;aACrC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,MAAM,CAAC,OAAkC,EAAE,OAAiC;QAC/E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAChC,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,EAAE,CAAC;iBAAE;YACvB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,CAAC,IAA8B,EAAE,OAA8B;QACtE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;gBAClC,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,CAAC,KAAK,CAAC,CAAC;iBAAE;YAC5B,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,EAAU;QACnB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;gBACjB,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,EAAE,CAAC;iBAAE;YACvB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,EAAU;QACvB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;gBACrB,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAAE;qBACpB;oBAAE,OAAO,EAAE,CAAC;iBAAE;YACvB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/esm/query.js b/dist/esm/query.js new file mode 100644 index 0000000..63b61d7 --- /dev/null +++ b/dist/esm/query.js @@ -0,0 +1,723 @@ +import { ID, PathInfo } from 'acebase-core'; +import { VALUE_TYPES } from './node-value-types.js'; +import { NodeNotFoundError } from './node-errors.js'; +import { DataIndex, FullTextIndex } from './data-index/index.js'; +import { AsyncTaskBatch } from './async-task-batch.js'; +// eslint-disable-next-line @typescript-eslint/no-empty-function +const noop = () => { }; +/** + * + * @param storage Target storage instance + * @param path Path of the object collection to perform query on + * @param query Query to execute + * @param options Additional options + * @returns Returns a promise that resolves with matching data or paths in `results` + */ +export function query(api, path, query, options = { snapshots: false, include: undefined, exclude: undefined, child_objects: undefined, eventHandler: noop }) { + // TODO: Refactor to async + if (typeof options !== 'object') { + options = {}; + } + if (typeof options.snapshots === 'undefined') { + options.snapshots = false; + } + const context = {}; + if (api.storage.settings.transactions?.log) { + context.acebase_cursor = ID.generate(); + } + const queryFilters = query.filters.map(f => ({ ...f })); + const querySort = query.order.map(s => ({ ...s })); + const sortMatches = (matches) => { + matches.sort((a, b) => { + const compare = (i) => { + const o = querySort[i]; + const trailKeys = PathInfo.getPathKeys(typeof o.key === 'number' ? `[${o.key}]` : o.key); + const left = trailKeys.reduce((val, key) => val !== null && typeof val === 'object' && key in val ? val[key] : null, a.val); + const right = trailKeys.reduce((val, key) => val !== null && typeof val === 'object' && key in val ? val[key] : null, b.val); + if (left === null) { + return right === null ? 0 : o.ascending ? -1 : 1; + } + if (right === null) { + return o.ascending ? 1 : -1; + } + // TODO: add collation options using Intl.Collator. Note this also has to be implemented in the matching engines (inclusing indexes) + // See discussion https://github.com/appy-one/acebase/discussions/27 + if (left == right) { + if (i < querySort.length - 1) { + return compare(i + 1); + } + else { + return a.path < b.path ? -1 : 1; + } // Sort by path if property values are equal + } + else if (left < right) { + return o.ascending ? -1 : 1; + } + // else if (left > right) { + return o.ascending ? 1 : -1; + // } + }; + return compare(0); + }); + }; + const loadResultsData = async (preResults, options) => { + // Limit the amount of concurrent getValue calls by batching them + if (preResults.length === 0) { + return []; + } + const maxBatchSize = 50; + const batch = new AsyncTaskBatch(maxBatchSize); + const results = []; + preResults.forEach(({ path }, index) => batch.add(async () => { + const node = await api.storage.getNode(path, options); + const val = node.value; + if (val === null) { + // Record was deleted, but index isn't updated yet? + api.storage.debug.warn(`Indexed result "/${path}" does not have a record!`); + // TODO: let index rebuild + return; + } + const result = { path, val }; + if (stepsExecuted.sorted) { + // Put the result in the same index as the preResult was + results[index] = result; + } + else { + results.push(result); + if (!stepsExecuted.skipped && results.length > query.skip + Math.abs(query.take)) { + // we can toss a value! sort, toss last one + sortMatches(results); + results.pop(); // Always toss last value, results have been sorted already + } + } + })); + await batch.finish(); + return results; + }; + const pathInfo = PathInfo.get(path); + const isWildcardPath = pathInfo.keys.some(key => key === '*' || key.toString().startsWith('$')); // path.includes('*'); + const availableIndexes = api.storage.indexes.get(path); + const usingIndexes = []; + if (isWildcardPath) { + if (availableIndexes.length === 0) { + // Wildcard paths require data to be indexed + const err = new Error(`Query on wildcard path "/${path}" requires an index`); + return Promise.reject(err); + } + if (queryFilters.length === 0) { + // Filterless query on wildcard path. Use first available index with filter on non-null key value (all results) + const index = availableIndexes.filter((index) => index.type === 'normal')[0]; + queryFilters.push({ key: index.key, op: '!=', compare: null }); + } + } + // Check if there are path specific indexes + // eg: index on "users/$uid/posts", key "$uid", including "title" (or key "title", including "$uid") + // Which are very useful for queries on "users/98sdfkb37/posts" with filter or sort on "title" + // const indexesOnPath = availableIndexes + // .map(index => { + // if (!index.path.includes('$')) { return null; } + // const pattern = '^' + index.path.replace(/(\$[a-z0-9_]+)/gi, (match, name) => `(?<${name}>[a-z0-9_]+|\\*)`) + '$'; + // const re = new RegExp(pattern, 'i'); + // const match = path.match(re); + // const canBeUsed = index.key[0] === '$' + // ? match.groups[index.key] !== '*' // Index key value MUST be present in the path + // : null !== ourFilters.find(filter => filter.key === index.key); // Index key MUST be in a filter + // if (!canBeUsed) { return null; } + // return { + // index, + // wildcards: match.groups, // eg: { "$uid": "98sdfkb37" } + // filters: Object.keys(match.groups).filter(name => match.groups[name] !== '*').length + // } + // }) + // .filter(info => info !== null) + // .sort((a, b) => { + // a.filters > b.filters ? -1 : 1 + // }); + // TODO: + // if (ourFilters.length === 0 && indexesOnPath.length > 0) { + // ourFilters = ourFilters.concat({ key: }) + // usingIndexes.push({ index: filter.index, description: filter.index.description}); + // } + queryFilters.forEach(filter => { + if (filter.index) { + // Index has been assigned already + return; + } + // // Check if there are path indexes we can use + // const pathIndexesWithKey = DataIndex.validOperators.includes(filter.op) + // ? indexesOnPath.filter(info => info.index.key === filter.key || info.index.includeKeys.includes(filter.key)) + // : []; + // Check if there are indexes on this filter key + const indexesOnKey = availableIndexes + .filter(index => index.key === filter.key) + .filter(index => { + return index.validOperators.includes(filter.op); + }); + if (indexesOnKey.length >= 1) { + // If there are multiple indexes on 1 key (happens when index includes other keys), + // we should check other .filters and .order to determine the best one to use + // TODO: Create a good strategy here... + const otherFilterKeys = queryFilters.filter(f => f !== filter).map(f => f.key); + const sortKeys = querySort.map(o => o.key).filter(key => key !== filter.key); + const beneficialIndexes = indexesOnKey.map(index => { + const availableKeys = index.includeKeys.concat(index.key); + const forOtherFilters = availableKeys.filter(key => otherFilterKeys.includes(key)); + const forSorting = availableKeys.filter(key => sortKeys.includes(key)); + const forBoth = forOtherFilters.concat(forSorting.filter(index => !forOtherFilters.includes(index))); + const points = { + filters: forOtherFilters.length, + sorting: forSorting.length * (query.take !== 0 ? forSorting.length : 1), + both: forBoth.length * forBoth.length, + get total() { + return this.filters + this.sorting + this.both; + }, + }; + return { index, points: points.total, filterKeys: forOtherFilters, sortKeys: forSorting }; + }); + // Use index with the most points + beneficialIndexes.sort((a, b) => a.points > b.points ? -1 : 1); + const bestBenificialIndex = beneficialIndexes[0]; + // Assign to this filter + filter.index = bestBenificialIndex.index; + // Assign to other filters and sorts + bestBenificialIndex.filterKeys.forEach(key => { + queryFilters.filter(f => f !== filter && f.key === key).forEach(f => { + if (!DataIndex.validOperators.includes(f.op)) { + // The used operator for this filter is invalid for use on metadata + // Probably because it is an Array/Fulltext/Geo query operator + return; + } + f.indexUsage = 'filter'; + f.index = bestBenificialIndex.index; + }); + }); + bestBenificialIndex.sortKeys.forEach(key => { + querySort.filter(s => s.key === key).forEach(s => { + s.index = bestBenificialIndex.index; + }); + }); + } + if (filter.index) { + usingIndexes.push({ index: filter.index, description: filter.index.description }); + } + }); + if (querySort.length > 0 && query.take !== 0 && queryFilters.length === 0) { + // Check if we can use assign an index to sorts in a filterless take & sort query + querySort.forEach(sort => { + if (sort.index) { + // Index has been assigned already + return; + } + sort.index = availableIndexes + .filter(index => index.key === sort.key) + .find(index => index.type === 'normal'); + // if (sort.index) { + // usingIndexes.push({ index: sort.index, description: `${sort.index.description} (for sorting)`}); + // } + }); + } + // const usingIndexes = ourFilters.map(filter => filter.index).filter(index => index); + const indexDescriptions = usingIndexes.map(index => index.description).join(', '); + usingIndexes.length > 0 && api.storage.debug.log(`Using indexes for query: ${indexDescriptions}`); + // Filters that should run on all nodes after indexed results: + const tableScanFilters = queryFilters.filter(filter => !filter.index); + // Check if there are filters that require an index to run (such as "fulltext:contains", and "geo:nearby" etc) + const specialOpsRegex = /^[a-z]+:/i; + if (tableScanFilters.some(filter => specialOpsRegex.test(filter.op))) { + const f = tableScanFilters.find(filter => specialOpsRegex.test(filter.op)); + const err = new Error(`query contains operator "${f.op}" which requires a special index that was not found on path "${path}", key "${f.key}"`); + return Promise.reject(err); + } + // Check if the filters are using valid operators + const allowedTableScanOperators = ['<', '<=', '==', '!=', '>=', '>', 'like', '!like', 'in', '!in', 'matches', '!matches', 'between', '!between', 'has', '!has', 'contains', '!contains', 'exists', '!exists']; // DISABLED "custom" because it is not fully implemented and only works locally + for (let i = 0; i < tableScanFilters.length; i++) { + const f = tableScanFilters[i]; + if (!allowedTableScanOperators.includes(f.op)) { + return Promise.reject(new Error(`query contains unknown filter operator "${f.op}" on path "${path}", key "${f.key}"`)); + } + } + // Check if the available indexes are sufficient for this wildcard query + if (isWildcardPath && tableScanFilters.length > 0) { + // There are unprocessed filters, which means the fields aren't indexed. + // We're not going to get all data of a wildcard path to query manually. + // Indexes must be created + const keys = tableScanFilters.reduce((keys, f) => { + if (keys.indexOf(f.key) < 0) { + keys.push(f.key); + } + return keys; + }, []).map(key => `"${key}"`); + const err = new Error(`This wildcard path query on "/${path}" requires index(es) on key(s): ${keys.join(', ')}. Create the index(es) and retry`); + return Promise.reject(err); + } + // Run queries on available indexes + const indexScanPromises = []; + queryFilters.forEach(filter => { + if (filter.index && filter.indexUsage !== 'filter') { + let promise = filter.index.query(filter.op, filter.compare) + .then(results => { + options.eventHandler && options.eventHandler({ name: 'stats', type: 'index_query', source: filter.index.description, stats: results.stats }); + if (results.hints.length > 0) { + options.eventHandler && options.eventHandler({ name: 'hints', type: 'index_query', source: filter.index.description, hints: results.hints }); + } + return results; + }); + // Get other filters that can be executed on these indexed results (eg filters on included keys of the index) + const resultFilters = queryFilters.filter(f => f.index === filter.index && f.indexUsage === 'filter'); + if (resultFilters.length > 0) { + // Hook into the promise + promise = promise.then(results => { + resultFilters.forEach(filter => { + const { key, op, index } = filter; + let { compare } = filter; + if (typeof compare === 'string' && !index.caseSensitive) { + compare = compare.toLocaleLowerCase(index.textLocale); + } + results = results.filterMetadata(key, op, compare); + }); + return results; + }); + } + indexScanPromises.push(promise); + } + }); + const stepsExecuted = { + filtered: queryFilters.length === 0, + skipped: query.skip === 0, + taken: query.take === 0, + sorted: querySort.length === 0, + preDataLoaded: false, + dataLoaded: false, + }; + if (queryFilters.length === 0 && query.take === 0) { + api.storage.debug.warn(`Filterless queries must use .take to limit the results. Defaulting to 100 for query on path "${path}"`); + query.take = 100; + } + if (querySort.length > 0 && querySort[0].index) { + const sortIndex = querySort[0].index; + const ascending = query.take < 0 ? !querySort[0].ascending : querySort[0].ascending; + if (queryFilters.length === 0 && querySort.slice(1).every(s => sortIndex.allMetadataKeys.includes(s.key))) { + api.storage.debug.log(`Using index for sorting: ${sortIndex.description}`); + const metadataSort = querySort.slice(1).map(s => { + s.index = sortIndex; // Assign index to skip later processing of this sort operation + return { key: s.key, ascending: s.ascending }; + }); + const promise = sortIndex.take(query.skip, Math.abs(query.take), { ascending, metadataSort }) + .then(results => { + options.eventHandler && options.eventHandler({ name: 'stats', type: 'sort_index_take', source: sortIndex.description, stats: results.stats }); + if (results.hints.length > 0) { + options.eventHandler && options.eventHandler({ name: 'hints', type: 'sort_index_take', source: sortIndex.description, hints: results.hints }); + } + return results; + }); + indexScanPromises.push(promise); + stepsExecuted.skipped = true; + stepsExecuted.taken = true; + stepsExecuted.sorted = true; + } + // else if (queryFilters.every(f => [sortIndex.key, ...sortIndex.includeKeys].includes(f.key))) { + // TODO: If an index can be used for sorting, and all filter keys are included in its metadata: query the index! + // Implement: + // sortIndex.query(ourFilters); + // etc + // } + } + return Promise.all(indexScanPromises) + .then(async (indexResultSets) => { + // Merge all results in indexResultSets, get distinct nodes + let indexedResults = []; + if (indexResultSets.length === 1) { + const resultSet = indexResultSets[0]; + indexedResults = resultSet.map(match => { + const result = { key: match.key, path: match.path, val: { [resultSet.filterKey]: match.value } }; + match.metadata && Object.assign(result.val, match.metadata); + return result; + }); + stepsExecuted.filtered = true; + } + else if (indexResultSets.length > 1) { + indexResultSets.sort((a, b) => a.length < b.length ? -1 : 1); // Sort results, shortest result set first + const shortestSet = indexResultSets[0]; + const otherSets = indexResultSets.slice(1); + indexedResults = shortestSet.reduce((results, match) => { + // Check if the key is present in the other result sets + const result = { key: match.key, path: match.path, val: { [shortestSet.filterKey]: match.value } }; + const matchedInAllSets = otherSets.every(set => set.findIndex(m => m.path === match.path) >= 0); + if (matchedInAllSets) { + match.metadata && Object.assign(result.val, match.metadata); + otherSets.forEach(set => { + const otherResult = set.find(r => r.path === result.path); + result.val[set.filterKey] = otherResult.value; + otherResult.metadata && Object.assign(result.val, otherResult.metadata); + }); + results.push(result); + } + return results; + }, []); + stepsExecuted.filtered = true; + } + if (isWildcardPath || (indexScanPromises.length > 0 && tableScanFilters.length === 0)) { + if (querySort.length === 0 || querySort.every(o => o.index)) { + // No sorting, or all sorts are on indexed keys. We can use current index results + stepsExecuted.preDataLoaded = true; + if (!stepsExecuted.sorted && querySort.length > 0) { + sortMatches(indexedResults); + } + stepsExecuted.sorted = true; + if (!stepsExecuted.skipped && query.skip > 0) { + indexedResults = query.take < 0 + ? indexedResults.slice(0, -query.skip) + : indexedResults.slice(query.skip); + } + if (!stepsExecuted.taken && query.take !== 0) { + indexedResults = query.take < 0 + ? indexedResults.slice(query.take) + : indexedResults.slice(0, query.take); + } + stepsExecuted.skipped = true; + stepsExecuted.taken = true; + if (!options.snapshots) { + return indexedResults; + } + // TODO: exclude already known key values, merge loaded with known + const childOptions = { include: options.include, exclude: options.exclude, child_objects: options.child_objects }; + return loadResultsData(indexedResults, childOptions) + .then(results => { + stepsExecuted.dataLoaded = true; + return results; + }); + } + if (options.snapshots || !stepsExecuted.sorted) { + const loadPartialResults = querySort.length > 0; + const childOptions = loadPartialResults + ? { include: querySort.map(order => order.key) } + : { include: options.include, exclude: options.exclude, child_objects: options.child_objects }; + return loadResultsData(indexedResults, childOptions) + .then(results => { + if (querySort.length > 0) { + sortMatches(results); + } + stepsExecuted.sorted = true; + if (query.skip > 0) { + results = query.take < 0 + ? results.slice(0, -query.skip) + : results.slice(query.skip); + } + if (query.take !== 0) { + results = query.take < 0 + ? results.slice(query.take) + : results.slice(0, query.take); + } + stepsExecuted.skipped = true; + stepsExecuted.taken = true; + if (options.snapshots && loadPartialResults) { + // Get the rest + return loadResultsData(results, { include: options.include, exclude: options.exclude, child_objects: options.child_objects }); + } + return results; + }); + } + else { + // No need to take further actions, return what we have now + return indexedResults; + } + } + // If we get here, this is a query on a regular path (no wildcards) with additional non-indexed filters left, + // we can get child records from a single parent. Merge index results by key + let indexKeyFilter; + if (indexedResults.length > 0) { + indexKeyFilter = indexedResults.map(result => result.key); + } + let matches = []; + let preliminaryStop = false; + const loadPartialData = querySort.length > 0; + const childOptions = loadPartialData + ? { include: querySort.map(order => order.key) } + : { include: options.include, exclude: options.exclude, child_objects: options.child_objects }; + const batch = { + promises: [], + add(promise) { + this.promises.push(promise); + if (this.promises.length >= 1000) { + return Promise.all(this.promises.splice(0)).then(_ => undefined); + } + }, + }; + try { + await api.storage.getChildren(path, { keyFilter: indexKeyFilter, async: true }).next(child => { + if (child.type !== VALUE_TYPES.OBJECT) { + return; + } + if (!child.address) { + // Currently only happens if object has no properties + // ({}, stored as a tiny_value in parent record). In that case, + // should it be matched in any query? -- That answer could be YES, when testing a property for !exists. Ignoring for now + return; + } + if (preliminaryStop) { + return false; + } + const matchNode = async () => { + const isMatch = await api.storage.matchNode(child.address.path, tableScanFilters); + if (!isMatch) { + return; + } + const childPath = child.address.path; + let result; + if (options.snapshots || querySort.length > 0) { + const node = await api.storage.getNode(childPath, childOptions); + result = { path: childPath, val: node.value }; + } + else { + result = { path: childPath }; + } + // If a maximumum number of results is requested, we can check if we can preliminary toss this result + // This keeps the memory space used limited to skip + take + // TODO: see if we can limit it to the max number of results returned (.take) + matches.push(result); + if (query.take !== 0 && matches.length > Math.abs(query.take) + query.skip) { + if (querySort.length > 0) { + // A query order has been set. If this value falls in between it can replace some other value + // matched before. + sortMatches(matches); + } + else if (query.take > 0) { + // No query order set, we can stop after 'take' + 'skip' results + preliminaryStop = true; // Flags the loop that no more nodes have to be checked + } + // const ascending = querySort.length === 0 || (query.take >= 0 ? querySort[0].ascending : !querySort[0].ascending); + // if (ascending) { + // matches.pop(); // ascending sort order, toss last value + // } + // else { + // matches.shift(); // descending, toss first value + // } + matches.pop(); // Always toss last value, results have been sorted already + } + }; + const p = batch.add(matchNode()); + if (p instanceof Promise) { + // If this returns a promise, child iteration should pause automatically + return p; + } + }); + } + catch (reason) { + // No record? + if (!(reason instanceof NodeNotFoundError)) { + api.storage.debug.warn(`Error getting child stream: ${reason}`); + } + return []; + } + // Done iterating all children, wait for all match promises to resolve + await Promise.all(batch.promises); + stepsExecuted.preDataLoaded = loadPartialData; + stepsExecuted.dataLoaded = !loadPartialData; + if (querySort.length > 0) { + sortMatches(matches); + } + stepsExecuted.sorted = true; + if (query.skip > 0) { + matches = query.take < 0 + ? matches.slice(0, -query.skip) + : matches.slice(query.skip); + } + stepsExecuted.skipped = true; + if (query.take !== 0) { + // (should not be necessary, basically it has already been done in the loop?) + matches = query.take < 0 + ? matches.slice(query.take) + : matches.slice(0, query.take); + } + stepsExecuted.taken = true; + if (!stepsExecuted.dataLoaded) { + matches = await loadResultsData(matches, { include: options.include, exclude: options.exclude, child_objects: options.child_objects }); + stepsExecuted.dataLoaded = true; + } + return matches; + }) + .then(matches => { + // Order the results + if (!stepsExecuted.sorted && querySort.length > 0) { + sortMatches(matches); + } + if (!options.snapshots) { + // Remove the loaded values from the results, because they were not requested (and aren't complete, we only have data of the sorted keys) + matches = matches.map(match => match.path); + } + // Limit result set + if (!stepsExecuted.skipped && query.skip > 0) { + matches = query.take < 0 + ? matches.slice(0, -query.skip) + : matches.slice(query.skip); + } + if (!stepsExecuted.taken && query.take !== 0) { + matches = query.take < 0 + ? matches.slice(query.take) + : matches.slice(0, query.take); + } + // NEW: Check if this is a realtime query - future updates must send query result updates + if (options.monitor === true) { + options.monitor = { add: true, change: true, remove: true }; + } + // eslint-disable-next-line @typescript-eslint/no-empty-function + let stop = async () => { }; + if (typeof options.monitor === 'object' && (options.monitor.add || options.monitor.change || options.monitor.remove)) { + // TODO: Refactor this to use 'mutations' event instead of 'notify_child_*' + const matchedPaths = options.snapshots ? matches.map(match => match.path) : matches.slice(); + const ref = api.db.ref(path); + const removeMatch = (path) => { + const index = matchedPaths.indexOf(path); + if (index < 0) { + return; + } + matchedPaths.splice(index, 1); + }; + const addMatch = (path) => { + if (matchedPaths.includes(path)) { + return; + } + matchedPaths.push(path); + }; + const stopMonitoring = () => { + api.unsubscribe(ref.path, 'child_changed', childChangedCallback); + api.unsubscribe(ref.path, 'child_added', childAddedCallback); + api.unsubscribe(ref.path, 'notify_child_removed', childRemovedCallback); + }; + stop = async () => { stopMonitoring(); }; + const childChangedCallback = async (err, path, newValue, oldValue) => { + const wasMatch = matchedPaths.includes(path); + let keepMonitoring = true; + // check if the properties we already have match filters, + // and if we have to check additional properties + const checkKeys = []; + queryFilters.forEach(f => !checkKeys.includes(f.key) && checkKeys.push(f.key)); + const seenKeys = []; + typeof oldValue === 'object' && Object.keys(oldValue).forEach(key => !seenKeys.includes(key) && seenKeys.push(key)); + typeof newValue === 'object' && Object.keys(newValue).forEach(key => !seenKeys.includes(key) && seenKeys.push(key)); + const missingKeys = []; + let isMatch = seenKeys.every(key => { + if (!checkKeys.includes(key)) { + return true; + } + const filters = queryFilters.filter(filter => filter.key === key); + return filters.every(filter => { + if (filter.index?.textLocaleKey && !seenKeys.includes(filter.index.textLocaleKey)) { + // Can't check because localeKey is missing + missingKeys.push(filter.index.textLocaleKey); + return true; // so we'll know if all others did match + } + else if (allowedTableScanOperators.includes(filter.op)) { + return api.storage.test(newValue[key], filter.op, filter.compare); + } + else { + // specific index filter + return filter.index.test(newValue, filter.op, filter.compare); + } + }); + }); + if (isMatch) { + // Matches all checked (updated) keys. BUT. Did we have all data needed? + // If it was a match before, other properties don't matter because they didn't change and won't + // change the current outcome + missingKeys.push(...checkKeys.filter(key => !seenKeys.includes(key))); + // let promise = Promise.resolve(true); + if (!wasMatch && missingKeys.length > 0) { + // We have to check if this node becomes a match + const filterQueue = queryFilters.filter(f => missingKeys.includes(f.key)); + const simpleFilters = filterQueue.filter(f => allowedTableScanOperators.includes(f.op)); + const indexFilters = filterQueue.filter(f => !allowedTableScanOperators.includes(f.op)); + if (simpleFilters.length > 0) { + isMatch = await api.storage.matchNode(path, simpleFilters); + } + if (isMatch && indexFilters.length > 0) { + // TODO: ask index what keys to load (eg: FullTextIndex might need key specified by localeKey) + const keysToLoad = indexFilters.reduce((keys, filter) => { + if (!keys.includes(filter.key)) { + keys.push(filter.key); + } + if (filter.index instanceof FullTextIndex && filter.index.config.localeKey && !keys.includes(filter.index.config.localeKey)) { + keys.push(filter.index.config.localeKey); + } + return keys; + }, []); + const node = await api.storage.getNode(path, { include: keysToLoad }); + if (node.value === null) { + return false; + } + isMatch = indexFilters.every(filter => filter.index.test(node.value, filter.op, filter.compare)); + } + } + } + if (isMatch) { + if (!wasMatch) { + addMatch(path); + } + // load missing data if snapshots are requested + if (options.snapshots) { + const loadOptions = { include: options.include, exclude: options.exclude, child_objects: options.child_objects }; + const node = await api.storage.getNode(path, loadOptions); + newValue = node.value; + } + if (wasMatch && options.monitor.change) { + keepMonitoring = options.eventHandler({ name: 'change', path, value: newValue }) !== false; + } + else if (!wasMatch && options.monitor.add) { + keepMonitoring = options.eventHandler({ name: 'add', path, value: newValue }) !== false; + } + } + else if (wasMatch) { + removeMatch(path); + if (options.monitor.remove) { + keepMonitoring = options.eventHandler({ name: 'remove', path: path, value: oldValue }) !== false; + } + } + if (keepMonitoring === false) { + stopMonitoring(); + } + }; + const childAddedCallback = (err, path, newValue) => { + const isMatch = queryFilters.every(filter => { + if (allowedTableScanOperators.includes(filter.op)) { + return api.storage.test(newValue[filter.key], filter.op, filter.compare); + } + else { + return filter.index.test(newValue, filter.op, filter.compare); + } + }); + let keepMonitoring = true; + if (isMatch) { + addMatch(path); + if (options.monitor.add) { + keepMonitoring = options.eventHandler({ name: 'add', path: path, value: options.snapshots ? newValue : null }) !== false; + } + } + if (keepMonitoring === false) { + stopMonitoring(); + } + }; + const childRemovedCallback = (err, path, newValue, oldValue) => { + let keepMonitoring = true; + removeMatch(path); + if (options.monitor.remove) { + keepMonitoring = options.eventHandler({ name: 'remove', path: path, value: options.snapshots ? oldValue : null }) !== false; + } + if (keepMonitoring === false) { + stopMonitoring(); + } + }; + if (options.monitor.add || options.monitor.change || options.monitor.remove) { + // Listen for child_changed events + api.subscribe(ref.path, 'child_changed', childChangedCallback); + } + if (options.monitor.remove) { + api.subscribe(ref.path, 'notify_child_removed', childRemovedCallback); + } + if (options.monitor.add) { + api.subscribe(ref.path, 'child_added', childAddedCallback); + } + } + return { results: matches, context, stop }; + }); +} +//# sourceMappingURL=query.js.map \ No newline at end of file diff --git a/dist/esm/query.js.map b/dist/esm/query.js.map new file mode 100644 index 0000000..e17a55b --- /dev/null +++ b/dist/esm/query.js.map @@ -0,0 +1 @@ +{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/quicksort.js b/dist/esm/quicksort.js new file mode 100644 index 0000000..7416bb9 --- /dev/null +++ b/dist/esm/quicksort.js @@ -0,0 +1,106 @@ +/** + * Faster quicksort using a stack to eliminate recursion, sorting inplace to reduce memory usage, and using insertion sort for small partition sizes. + * + * Original author unknown. + * I (Ewout Stortenbeker) isolated the fast quicksort code from benchmark (see below), ported to TypeScript and added custom sort function argument. + * + * Benchmark results at https://www.measurethat.net/Benchmarks/Show/3549/0/javascript-sorting-algorithms indicate this algorithm is at least 10x faster + * than the native sort function (tested on Chrome v101, June 2022). My own tests (using sort function callbacks) indicate it's typically 1.5x faster than + * the native sort algorithm. This difference is probably caused by the built-in sort being called with a callback function in the benchmark, all others + * with basic < and > operators, which are obviously faster than callbacks. + * + * @param arr array to sort + * @param compareFn optional compare function to use. Must return a negative value if a < b, 0 if a == b, positive number if a > b + * @returns + */ +export default function fastQuickSort(arr, compareFn = (a, b) => a - b) { + if (arr.length <= 1) { + // No sorting needed, fixes #118 + return arr; + } + const stack = []; + let entry = [ + 0, + arr.length, + 2 * Math.floor(Math.log(arr.length) / Math.log(2)), + ]; + stack.push(entry); + while (stack.length > 0) { + entry = stack.pop(); + const start = entry[0]; + const end = entry[1]; + let depth = entry[2]; + if (depth == 0) { + arr = shellSortBound(arr, start, end, compareFn); + continue; + } + depth--; + const pivot = Math.round((start + end) / 2); + const pivotNewIndex = inplaceQuickSortPartition(arr, start, end, pivot, compareFn); + if (end - pivotNewIndex > 16) { + entry = [pivotNewIndex, end, depth]; + stack.push(entry); + } + if (pivotNewIndex - start > 16) { + entry = [start, pivotNewIndex, depth]; + stack.push(entry); + } + } + arr = insertionSort(arr, compareFn); + return arr; +} +function shellSortBound(arr, start, end, compareFn) { + let inc = Math.round((start + end) / 2), i, j, t; + while (inc >= start) { + for (i = inc; i < end; i++) { + t = arr[i]; + j = i; + while (j >= inc && compareFn(arr[j - inc], t) > 0) { // arr[j - inc] > t + arr[j] = arr[j - inc]; + j -= inc; + } + arr[j] = t; + } + inc = Math.round(inc / 2.2); + } + return arr; +} +function swap(arr, a, b) { + const t = arr[a]; + arr[a] = arr[b]; + arr[b] = t; +} +// Insertion sort +function insertionSort(arr, compareFn) { + for (let i = 1, l = arr.length; i < l; i++) { + const value = arr[i]; + let j; + for (j = i - 1; j >= 0; j--) { + if (compareFn(arr[j], value) <= 0) // arr[j] <= value + break; + arr[j + 1] = arr[j]; + } + arr[j + 1] = value; + } + return arr; +} +// In place quicksort +function inplaceQuickSortPartition(arr, start, end, pivotIndex, compareFn) { + let i = start, j = end; + const pivot = arr[pivotIndex]; + while (true) { + while (compareFn(arr[i], pivot) < 0) { // arr[i] < pivot + i++; + } + j--; + while (compareFn(pivot, arr[j]) < 0) { // pivot < arr[j] + j--; + } + if (!(i < j)) { + return i; + } + swap(arr, i, j); + i++; + } +} +//# sourceMappingURL=quicksort.js.map \ No newline at end of file diff --git a/dist/esm/quicksort.js.map b/dist/esm/quicksort.js.map new file mode 100644 index 0000000..9f6e0c3 --- /dev/null +++ b/dist/esm/quicksort.js.map @@ -0,0 +1 @@ +{"version":3,"file":"quicksort.js","sourceRoot":"","sources":["../../src/quicksort.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/storage/binary/index.js b/dist/esm/storage/binary/index.js new file mode 100644 index 0000000..de7443c --- /dev/null +++ b/dist/esm/storage/binary/index.js @@ -0,0 +1,3971 @@ +import * as fs from 'fs'; +import { pfs } from '../../promise-fs/index.js'; +import { ID, PathInfo, PathReference, Utils, ColorStyle, PartialArray } from 'acebase-core'; +import { NodeChangeTracker, NodeChange } from '../../node-changes.js'; +import { BinaryNodeAddress } from './node-address.js'; +import { NodeCache } from '../../node-cache.js'; +import { BinaryNodeInfo } from './node-info.js'; +// import { NodeLock } from '../../node-lock.js'; +import { NodeNotFoundError } from '../../node-errors.js'; +import { Storage, StorageSettings } from '../index.js'; +import { VALUE_TYPES } from '../../node-value-types.js'; +import { BinaryBPlusTree, BPlusTreeBuilder, BinaryWriter } from '../../btree/index.js'; +import { Uint8ArrayBuilder } from '../../binary.js'; +import { NodeLock } from '../../node-lock.js'; +const { concatTypedArrays, bytesToNumber, bytesToBigint, numberToBytes, bigintToBytes, encodeString, decodeString, cloneObject } = Utils; +const REMOVED_CHILD_DATA_IMPLEMENTED = false; // not used yet - allows marking of deleted children without having to rewrite the whole node +export class AceBaseStorageSettings extends StorageSettings { + constructor(settings = {}) { + super(settings); + /** + * record size in bytes, defaults to 128 (recommended). Max is 65536 + * @default 128 + */ + this.recordSize = 128; + /** + * page size in records, defaults to 1024 (recommended). Max is 65536 + * @default 1024 + */ + this.pageSize = 1024; + /** + * type of database content. Determines the name of the file within the .acebase directory + */ + this.type = 'data'; + /** + * Use future FST version (not implemented yet) + */ + this.fst2 = false; + if (typeof settings.recordSize === 'number') { + this.recordSize = settings.recordSize; + } + if (typeof settings.pageSize === 'number') { + this.pageSize = settings.pageSize; + } + if (typeof settings.type === 'string') { + this.type = settings.type; + } + this.transactions = new AceBaseTransactionLogSettings(settings.transactions); + } +} +class AceBaseTransactionLogSettings { + /** + * BETA functionality - logs mutations made to a separate database file so they can be retrieved later + * for database syncing / replication. Implementing this into acebase itself will allow the current + * sync implementation in acebase-client to become better: it can simply request a mutations stream from + * the server after disconnects by passing a cursor or timestamp, instead of downloading whole nodes before + * applying local changes. This will also enable horizontal scaling: replication with remote db instances + * becomes possible. + * + * Still under development, disabled by default. See transaction-logs.spec for tests + */ + constructor(settings = {}) { + /** + * Whether transaction logging is enabled. + * @default false + */ + this.log = false; + /** + * Max age of transactions to keep in logfile. Set to 0 to disable cleaning up and keep all transactions + * @default 30 + */ + this.maxAge = 30; + /** + * Whether write operations wait for the transaction to be logged before resolving their promises. + */ + this.noWait = false; + if (typeof settings.log === 'boolean') { + this.log = settings.log; + } + if (typeof settings.maxAge === 'number') { + this.maxAge = settings.maxAge; + } + if (typeof settings.noWait === 'boolean') { + this.noWait = settings.noWait; + } + } +} +export class AceBaseStorage extends Storage { + /** + * Stores data in a binary file + */ + constructor(name, settings, env) { + console.assert(settings instanceof AceBaseStorageSettings, 'settings must be an instance of AceBaseStorageSettings'); + super(name, settings, env); + this._ready = false; + this.nodeCache = new NodeCache(); + if (settings.maxInlineValueSize > 64) { + throw new Error('maxInlineValueSize cannot be larger than 64'); // This is technically not possible because we store inline length with 6 bits: range = 0 to 2^6-1 = 0 - 63 // NOTE: lengths are stored MINUS 1, because an empty value is stored as tiny value, so "a"'s stored inline length is 0, allowing values up to 64 bytes + } + if (settings.recordSize > 65536) { + throw new Error('recordSize cannot be larger than 65536'); // Technically not possible because setting in db is 16 bits + } + if (settings.pageSize > 65536) { + throw new Error('pageSize cannot be larger than 65536'); // Technically not possible because record_nr references are 16 bits + } + this.name = name; + this.settings = settings; // uses maxInlineValueSize, recordSize & pageSize settings from file when existing db + this.stats = { + writes: 0, + reads: 0, + bytesRead: 0, + bytesWritten: 0, + }; + this.type = settings.type; + if (this.type === 'data' && settings.transactions.log === true) { + // Get/create storage for mutations logging + const txSettings = new AceBaseStorageSettings({ type: 'transaction', path: settings.path, removeVoidProperties: true, transactions: settings.transactions }); + this.txStorage = new AceBaseStorage(name, txSettings, { logLevel: 'error' }); + } + this.once('ready', () => { + this._ready = true; + }); + // Setup cluster functionality + this.ipc.on('request', async (message) => { + // Master functionality: handle requests from workers + console.assert(this.ipc.isMaster, 'Workers should not receive requests'); + const request = message.data; + const reply = (result) => { + // const reply = { type: 'result', id: message.id, ok: true, from: this.ipc.id, to: message.from, data: result }; + // this.ipc.sendMessage(reply); + this.ipc.replyRequest(message, result); + }; + try { + switch (request.type) { + // FST (free space table / allocation) requests: + case 'fst.allocate': { + const allocation = await this.FST.allocate(request.records); + return reply({ ok: true, allocation }); + } + case 'fst.release': { + this.FST.release(request.ranges); + return reply({ ok: true }); + } + // KIT (key index table) requests: + case 'kit.add': { + const index = this.KIT.getOrAdd(request.key); + return reply({ ok: true, index }); + } + // Indexing requests: + // Room for improvement: implement distributed index locks + // so they can be created & updated by any worker, instead of + // putting the master to work for this. + case 'index.create': { + const index = await this.indexes.create(request.path, request.key, request.options); + return reply({ ok: true, fileName: index.fileName }); + } + case 'index.update': { + const index = this.indexes.list().find(index => index.fileName === request.fileName); + if (!index) { + return reply({ ok: false, reason: `Index ${request.fileName} not found` }); + } + await index.handleRecordUpdate(request.path, request.oldValue, request.newValue); + return reply({ ok: true }); + } + default: { + throw new Error(`Unknown ipc request "${request.type}"`); + } + } + } + catch (err) { + reply({ ok: false, reason: err.message }); + } + }); + this.ipc.on('notification', message => { + const notification = message.data; + switch (notification.type) { + case 'kit.new_key': { + this.KIT.keys[notification.index] = notification.key; + break; + } + case 'root.update': { + return this.rootRecord.update(notification.address, false); + } + case 'cache.update': { + const nodeInfo = new BinaryNodeInfo(notification.info); + nodeInfo.address = new BinaryNodeAddress(nodeInfo.address.path, nodeInfo.address.pageNr, nodeInfo.address.recordNr); + return this.updateCache(true, nodeInfo, true); + } + case 'cache.invalidate': { + return this.invalidateCache(true, notification.path, notification.recursive, notification.reason); + } + case 'index.created': { + return this.indexes.add(notification.fileName); + } + case 'index.deleted': { + return this.indexes.remove(notification.fileName); + } + default: { + throw new Error(`Unknown ipc notification "${notification.type}"`); + } + } + }); + // const storage = this; + // TODO @appy-one move + const KIT = { + get fileIndex() { return 64; }, + get length() { return 65536 - 64; }, + bytesUsed: 0, + keys: [], + }; + this.KIT = { + get fileIndex() { return KIT.fileIndex; }, + get length() { return KIT.length; }, + get bytesUsed() { return KIT.bytesUsed; }, + get keys() { return KIT.keys; }, + getOrAdd: (key) => { + if (key.length > 15 || key.length === 1) { + return -1; + } + if (/^[0-9]+$/.test(key)) { + return -1; //storage.debug.error(`Adding KIT key "${key}"?!!`); + } + let index = KIT.keys.indexOf(key); + if (index < 0) { + if (!this.ipc.isMaster) { + // Forward request to cluster master. Response will be too late for us, but it will be cached for future calls + this.ipc.sendRequest({ type: 'kit.add', key }) + .then(result => { + KIT.keys[result.index] = key; // Add to our local array + }); + return -1; + } + index = KIT.keys.push(key) - 1; + if (this.ipc.isMaster) { + // Notify all workers + this.ipc.sendNotification({ type: 'kit.new_key', key, index }); + } + } + else { + return index; + } + this.KIT.write().catch((err) => { + // Not being able to save the new KIT to file would be a serious issue. + // Because getOrAdd is not async, there is no way we can tell caller there is a problem with the key they are using. + // On the other hand, if writing the KIT data failed (IO error), the calling code will most likely also have + // issues writing the data they needed the new key for. + throw new Error(`CRITICAL: Unable to write KIT to database file: ${err.message}`); + // this.keys.pop(); // Remove the key + // index = -1; + }); + return index; + }, + write: async () => { + if (!this.ipc.isMaster) { + throw new Error('DEV ERROR: KIT.write not allowed to run if it is a cluster worker!!'); + } + // Key Index Table starts at index 64, and is 2^16 (65536) bytes long + const data = Buffer.alloc(KIT.length); + const view = new DataView(data.buffer); + let index = 0; + for (let i = 0; i < KIT.keys.length; i++) { + const key = KIT.keys[i]; + // Now supports storage of keys with Unicode characters + const binary = encodeString(key); + const keyLength = binary.byteLength; + if (index + keyLength >= KIT.length) { + throw new Error(`Too many keys to store in KIT, size limit of ${KIT.length} has been reached; current amount of keys is ${KIT.keys.length}`); + } + // Add 1-byte key length + view.setUint8(index, keyLength); + index++; + // Add key + data.set(binary, index); + index += keyLength; + } + const bytesToWrite = Math.max(KIT.bytesUsed, index); // Determine how many bytes should be written to overwrite current KIT + KIT.bytesUsed = index; + await this.writeData(KIT.fileIndex, data, 0, bytesToWrite); + }, + load: async () => { + const data = Buffer.alloc(KIT.length); + const { bytesRead } = await pfs.read(this.file, data, 0, data.length, KIT.fileIndex).catch(err => { + this.debug.error('Error reading KIT from file: ', err); + throw err; + }); + // Interpret the read data + const view = new DataView(data.buffer, 0, bytesRead); + const keys = []; + let index = 0; + let keyLength = 0; + while ((keyLength = view.getUint8(index)) > 0) { + index++; + // Now supports Unicode keys + const buffer = new Uint8Array(data.buffer, index, keyLength); + const key = decodeString(buffer); + keys.push(key); + index += keyLength; + } + KIT.bytesUsed = index; + KIT.keys = keys; + this.debug.log(`KIT read, ${KIT.keys.length} keys indexed`.colorize(ColorStyle.bold)); + //storage.debug.log(keys); + return keys; + }, + }; + // Setup Free Space Table object and functions + const FST = { + get fileIndex() { return 65536; }, + length: 65536, + bytesUsed: 0, + pages: 0, + ranges: [], + getMaxScraps: () => { + if (!this.ipc.isMaster) { + return 10; + } + return FST.ranges.length > 7500 ? 10 : 3; + }, + }; + this.FST = { + get fileIndex() { return FST.fileIndex; }, + get length() { return FST.length; }, + get bytesUsed() { return FST.bytesUsed; }, + get pages() { return FST.pages; }, + get ranges() { return FST.ranges; }, + get maxScraps() { return FST.getMaxScraps(); }, + allocate: async (requiredRecords) => { + if (!this.ipc.isMaster) { + const result = await this.ipc.sendRequest({ type: 'fst.allocate', records: requiredRecords }); + return result.allocation; + } + if (this.isLocked(true)) { + throw new Error('database is locked'); + } + // First, try to find a range that fits all requested records sequentially + const recordsPerPage = this.settings.pageSize; + const allocation = []; + let pageAdded = false; + const ret = async (comment) => { + // console.error(`ALLOCATED ${comment}: ${allocation.map(a => `${a.pageNr},${a.recordNr}+${a.length-1}`).join('; ')}`); + await this.FST.write(pageAdded); + return allocation; + }; + let totalFree = FST.ranges.reduce((t, r) => t + r.end - r.start, 0); + while (totalFree < requiredRecords) { + // There is't enough free space, we'll have to create new page(s) + const newPageNr = FST.pages; + FST.pages++; + const newRange = { page: newPageNr, start: 0, end: recordsPerPage }; + FST.ranges.push(newRange); + totalFree += recordsPerPage; + pageAdded = true; + } + if (requiredRecords <= recordsPerPage) { + // Find exact range + let r = FST.ranges.find(r => r.end - r.start === requiredRecords); + if (r) { + allocation.push({ pageNr: r.page, recordNr: r.start, length: requiredRecords }); + const i = FST.ranges.indexOf(r); + FST.ranges.splice(i, 1); + return ret('exact_range'); + } + // Find first fitting range + r = FST.ranges.find(r => r.end - r.start > requiredRecords); + if (r) { + allocation.push({ pageNr: r.page, recordNr: r.start, length: requiredRecords }); + r.start += requiredRecords; + return ret('first_fitting'); + } + } + // If we get here, we'll have to deal with the scraps + // Check how many ranges would be needed to store record (sort from large to small) + const sortedRanges = FST.ranges.slice().sort((a, b) => { + const l1 = a.end - a.start; + const l2 = b.end - b.start; + if (l1 < l2) { + return 1; + } + if (l1 > l2) { + return -1; + } + if (a.page < b.page) { + return -1; + } + if (a.page > b.page) { + return 1; + } + return 0; + }); + const MAX_RANGES = FST.getMaxScraps(); + const test = { + ranges: [], + totalRecords: 0, + wholePages: 0, + additionalRanges: 0, + }; + for (let i = 0; test.totalRecords < requiredRecords && i < sortedRanges.length && test.additionalRanges <= MAX_RANGES; i++) { + const r = sortedRanges[i]; + test.ranges.push(r); + const nrOfRecords = r.end - r.start; + test.totalRecords += nrOfRecords; + if (nrOfRecords === recordsPerPage) { + test.wholePages++; + } + else { + test.additionalRanges++; + } + } + if (test.additionalRanges > MAX_RANGES) { + // Prevent overfragmentation, don't use more than 3 ranges + const pagesToCreate = Math.ceil(requiredRecords / recordsPerPage) - test.wholePages; + // Do use the available whole page ranges + for (let i = 0; i < test.wholePages; i++) { + const range = test.ranges[i]; + console.assert(range.start === 0 && range.end === recordsPerPage, 'Available ranges were not sorted correctly, this range MUST be a whole page!!'); + const rangeIndex = FST.ranges.indexOf(range); + FST.ranges.splice(rangeIndex, 1); + allocation.push({ pageNr: range.page, recordNr: 0, length: recordsPerPage }); + requiredRecords -= recordsPerPage; + } + // Now create remaining needed pages + for (let i = 0; i < pagesToCreate; i++) { + const newPageNr = FST.pages; + FST.pages++; + const useRecords = Math.min(requiredRecords, recordsPerPage); + allocation.push({ pageNr: newPageNr, recordNr: 0, length: useRecords }); + if (useRecords < recordsPerPage) { + FST.ranges.push({ page: newPageNr, start: useRecords, end: recordsPerPage }); + } + requiredRecords -= useRecords; + pageAdded = true; + } + } + else { + // Use the ranges found + test.ranges.forEach((r, i) => { + const length = r.end - r.start; + if (length > requiredRecords) { + console.assert(i === test.ranges.length - 1, 'DEV ERROR: This MUST be the last range or logic is not right!'); + allocation.push({ pageNr: r.page, recordNr: r.start, length: requiredRecords }); + r.start += requiredRecords; + requiredRecords = 0; + } + else { + allocation.push({ pageNr: r.page, recordNr: r.start, length }); + const rangeIndex = FST.ranges.indexOf(r); + FST.ranges.splice(rangeIndex, 1); + requiredRecords -= length; + } + }); + } + console.assert(requiredRecords === 0, 'DEV ERROR: requiredRecords MUST be zero now!'); + return ret('scraps'); + }, + release: async (ranges) => { + if (!this.ipc.isMaster) { + await this.ipc.sendRequest({ type: 'fst.release', ranges }); + return; + } + if (this.isLocked(true)) { + throw new Error('database is locked'); + } + // Add freed ranges + ranges.forEach(range => { + FST.ranges.push({ page: range.pageNr, start: range.recordNr, end: range.recordNr + range.length }); + }); + this.FST.sort(); + // Now normalize the ranges + for (let i = 0; i < FST.ranges.length; i++) { + const range = FST.ranges[i]; + let adjRange; + for (let j = i + 1; j < FST.ranges.length; j++) { + const otherRange = FST.ranges[j]; + if (otherRange.page !== range.page) { + continue; + } + if (otherRange.start === range.end) { + // This range is right before the other range + otherRange.start = range.start; + adjRange = otherRange; + break; + } + if (range.start === otherRange.end) { + // This range starts right after the other range + otherRange.end = range.end; + adjRange = otherRange; + break; + } + } + if (adjRange) { + // range has merged with adjacent one + FST.ranges.splice(i, 1); + i--; + } + } + this.FST.sort(); // Do we have to? Already sorted, right? + this.FST.write(); + }, + sort: () => { + FST.ranges.sort((a, b) => { + if (a.page < b.page) + return -1; + if (a.page > b.page) + return 1; + if (a.start < b.start) + return -1; + if (a.start > b.start) + return 1; + return 0; // Impossible! + }); + }, + write: async (updatedPageCount = false) => { + // Free Space Table starts at index 2^16 (65536), and is 2^16 (65536) bytes long. + // Each range needs 8 bytes to be stored, and the FST has 6 header bytes, so that means + // a maximum of 8191 FST ranges can be stored. If this amount is exceeded, we'll have to + // remove the smallest ranges from the FST. See https://github.com/appy-one/acebase/issues/69 + const MAX_FST_RANGES = 8191; + if (FST.ranges.length > MAX_FST_RANGES) { + // Remove smallest ranges + const n = FST.ranges.length - MAX_FST_RANGES; + const ranges = FST.ranges.slice() + .sort((a, b) => a.end - a.start < b.end - b.start ? -1 : 1) + .slice(0, n); + const totalRecords = ranges.reduce((records, range) => records + (range.end - range.start), 0); + this.debug.warn(`FST grew too big to store in the database file, removing ${n} entries for ${totalRecords} records`); + ranges.forEach(range => { + const i = FST.ranges.indexOf(range); + FST.ranges.splice(i, 1); + }); + if (FST.ranges.length > MAX_FST_RANGES) { + throw new Error('DEV ERROR: Still too many entries in the FST!'); + } + } + const data = Buffer.alloc(FST.length); + const view = new DataView(data.buffer); + // Add 4-byte page count + view.setUint32(0, FST.pages); + // Add 2-byte number of free ranges + view.setUint16(4, FST.ranges.length); + let index = 6; + for (let i = 0; i < FST.ranges.length; i++) { + const range = FST.ranges[i]; + // Add 4-byte page nr + view.setUint32(index, range.page); + // Add 2-byte start record nr, 2-byte end record nr + view.setUint16(index + 4, range.start); + view.setUint16(index + 6, range.end); + index += 8; + } + const bytesToWrite = Math.max(FST.bytesUsed, index); // Determine how many bytes should be written to overwrite current FST + FST.bytesUsed = index; + const promise = this.writeData(FST.fileIndex, data, 0, bytesToWrite).catch(err => { + this.debug.error('Error writing FST: ', err); + }); + const writes = [promise]; + if (updatedPageCount === true) { + // Update the file size + const newFileSize = this.rootRecord.fileIndex + (FST.pages * settings.pageSize * settings.recordSize); + const promise = pfs.ftruncate(this.file, newFileSize); + writes.push(promise); + } + await Promise.all(writes); + //this.debug.log(`FST saved, ${this.bytesUsed} bytes used for ${FST.ranges.length} ranges`); + }, + load: async () => { + if (!this.ipc.isMaster) { + return []; + } + const data = Buffer.alloc(FST.length); + const { bytesRead } = await pfs.read(this.file, data, 0, data.length, this.FST.fileIndex).catch(err => { + this.debug.error('Error reading FST from file'); + this.debug.error(err); + throw err; + }); + // Interpret the read data + const view = new DataView(data.buffer, 0, bytesRead); + const allocatedPages = view.getUint32(0); //new DataView(data.buffer, 0, 4).getUint32(0); + const freeRangeCount = view.getUint16(4); //new DataView(data.buffer, 4, 2).getUint16(0); + const ranges = []; + let index = 6; + for (let i = 0; i < freeRangeCount; i++) { + //let view = new DataView(data.buffer, index, 8); + const range = { + page: view.getUint32(index), + start: view.getUint16(index + 4), + end: view.getUint16(index + 6), + }; + ranges.push(range); + index += 8; + } + FST.pages = allocatedPages; + FST.bytesUsed = index; + FST.ranges = ranges; + this.debug.log(`FST read, ${allocatedPages} pages allocated, ${freeRangeCount} free ranges`.colorize(ColorStyle.bold)); + return ranges; + }, + }; + // TODO @appy-one move + const rootRecord = { + get fileIndex() { return 131072; }, + pageNr: 0, + recordNr: 0, + exists: false, + }; + this.rootRecord = { + get fileIndex() { return rootRecord.fileIndex; }, + get pageNr() { return rootRecord.pageNr; }, + get recordNr() { return rootRecord.recordNr; }, + get exists() { return rootRecord.exists; }, + get address() { + return new BinaryNodeAddress('', rootRecord.pageNr, rootRecord.recordNr); + }, + update: async (address, fromIPC = false) => { + // Root address changed + console.assert(address.path === ''); + if (address.pageNr === rootRecord.pageNr && address.recordNr === rootRecord.recordNr) { + // No need to update + return; + } + rootRecord.pageNr = address.pageNr; + rootRecord.recordNr = address.recordNr; + rootRecord.exists = true; + // this.debug.log(`Root record address updated to ${address.pageNr}, ${address.recordNr}`.colorize(ColorStyle.bold)); + if (!fromIPC) { + // Notify others + this.ipc.sendNotification({ type: 'root.update', address }); + // Save to file, or it didn't happen + const bytes = new Uint8Array(6); + const view = new DataView(bytes.buffer); + view.setUint32(0, address.pageNr); + view.setUint16(4, address.recordNr); + const bytesWritten = await this.writeData(HEADER_INDEXES.ROOT_RECORD_ADDRESS, bytes, 0, bytes.length); + this.debug.log(`Root record address updated to ${address.pageNr}, ${address.recordNr}`.colorize(ColorStyle.bold)); + } + }, + }; + const descriptor = encodeString('AceBase⚡'); + const baseIndex = descriptor.length; + const HEADER_INDEXES = { + VERSION_NR: baseIndex, + DB_LOCK: baseIndex + 1, + ROOT_RECORD_ADDRESS: baseIndex + 2, + RECORD_SIZE: baseIndex + 8, + PAGE_SIZE: baseIndex + 10, + MAX_INLINE_VALUE_SIZE: baseIndex + 12, + }; + const openDatabaseFile = async (justCreated = false) => { + const handleError = (err, txt) => { + this.debug.error(txt); + this.debug.error(err); + if (this.file) { + pfs.close(this.file).catch(err => { + // ... + }); + } + this.emit('error', err); + throw err; + }; + try { + this.file = await pfs.open(this.fileName, settings.readOnly === true ? 'r' : 'r+', 0); + } + catch (err) { + handleError(err, 'Failed to open database file'); + } + // const logfile = fs.openSync(`${this.settings.path}/${this.name}.acebase/log`, 'as'); + // this.logwrite = (action) => { + // fs.appendFile(logfile, JSON.stringify(action), () => {}); + // }; + const data = Buffer.alloc(64); + let bytesRead = 0; + try { + const result = await pfs.read(this.file, data, 0, data.length, 0); + bytesRead = result.bytesRead; + } + catch (err) { + handleError(err, 'Could not read database header'); + } + // Cast Buffer to Uint8Array + const header = new Uint8Array(data); + // Check descriptor + const hasAceBaseDescriptor = () => { + for (let i = 0; i < descriptor.length; i++) { + if (header[i] !== descriptor[i]) { + return false; + } + } + return true; + }; + if (bytesRead < 64 || !hasAceBaseDescriptor()) { + return handleError('unsupported_db', 'This is not a supported database file'); + } + // Version should be 1 + let index = descriptor.length; + if (header[index] !== 1) { + return handleError('unsupported_db', 'This database version is not supported, update your source code'); + } + index++; + // Read flags + const flagsIndex = index; + const flags = header[flagsIndex]; // flag bits: [r, r, r, r, r, r, FST2, LOCK] + const lock = { + enabled: ((flags & 0x1) > 0), + forUs: true, + }; + this.isLocked = (forUs = false) => { + return lock.enabled && lock.forUs === forUs; + }; + this.lock = async (forUs = false) => { + await pfs.write(this.file, new Uint8Array([flags | 0x1]), 0, 1, flagsIndex); + lock.enabled = true; + lock.forUs = forUs; + this.emit('locked', { forUs }); + }; + this.unlock = async () => { + await pfs.write(this.file, new Uint8Array([flags & 0xfe]), 0, 1, flagsIndex); + lock.enabled = false; + this.emit('unlocked'); + }; + this.settings.fst2 = (flags & 0x2) > 0; + if (this.settings.fst2) { + throw new Error('FST2 is not supported by this version yet'); + } + index++; + // Read root record address + const view = new DataView(header.buffer, index, 6); + rootRecord.pageNr = view.getUint32(0); + rootRecord.recordNr = view.getUint16(4); + if (!justCreated) { + rootRecord.exists = true; + } + index += 6; + // Read saved settings + this.settings.recordSize = header[index] << 8 | header[index + 1]; + this.settings.pageSize = header[index + 2] << 8 | header[index + 3]; + this.settings.maxInlineValueSize = header[index + 4] << 8 | header[index + 5]; + // Fix issue #110: (see https://github.com/appy-one/acebase/issues/110) + if (this.settings.recordSize === 0) { + this.settings.recordSize = 65536; + } + if (this.settings.pageSize === 0) { + this.settings.pageSize = 65536; + } + if (this.settings.maxInlineValueSize === 0) { + this.settings.maxInlineValueSize = 65536; + } + const intro = ColorStyle.dim; + this.debug.log(`Database "${name}" details:`.colorize(intro)); + this.debug.log('- Type: AceBase binary'.colorize(intro)); + this.debug.log(`- Record size: ${this.settings.recordSize} bytes`.colorize(intro)); + this.debug.log(`- Page size: ${this.settings.pageSize} records (${this.settings.pageSize * this.settings.recordSize} bytes)`.colorize(intro)); + this.debug.log(`- Max inline value size: ${this.settings.maxInlineValueSize} bytes`.colorize(intro)); + this.debug.log(`- Root record address: ${this.rootRecord.pageNr}, ${this.rootRecord.recordNr}`.colorize(intro)); + await this.KIT.load(); // Read Key Index Table + await this.FST.load(); // Read Free Space Table + await this.indexes.load(); // Load indexes + !justCreated && this.emitOnce('ready'); + return this.file; + }; + const createDatabaseFile = async () => { + // Create the file with 64 byte header (settings etc), KIT, FST & root record + const version = 1; + const headerBytes = 64; + const flags = 0; // When implementing settings.fst2 ? 0x2 : 0x0; + const stats = new Uint8Array([ + version, + flags, + 0, 0, 0, 0, + 0, 0, + settings.recordSize >> 8 & 0xff, + settings.recordSize & 0xff, + settings.pageSize >> 8 & 0xff, + settings.pageSize & 0xff, + settings.maxInlineValueSize >> 8 & 0xff, + settings.maxInlineValueSize & 0xff, + ]); + let header = concatTypedArrays(descriptor, stats); + const padding = new Uint8Array(headerBytes - header.byteLength); + padding.fill(0); + header = concatTypedArrays(header, padding); + // Create object Key Index Table (KIT) to allow very small record creation. + // key_index uses 2 bytes, so max 65536 keys could technically be indexed. + // Using an average key length of 7 characters, the index would become + // 7 chars + 1 delimiter * 65536 keys = 520KB. That would be total overkill. + // The table should be at most 64KB so that means approx 8192 keys can + // be indexed. With shorter keys, this will be more. With longer keys, less. + const kit = new Uint8Array(65536 - header.byteLength); + let uint8 = concatTypedArrays(header, kit); + // Create empty 64KB FST ("Free space table") + // Each FST record is 8 bytes: + // Page nr: 4 bytes + // Record start nr: 2 bytes + // Record end nr: 2 bytes + // Using a 64KB FST (minus 64B header size) allows 8184 entries: (65536-64) / 8 + // Defragmentation should kick in when FST is becoming full! + const fst = new Uint8Array(65536); + uint8 = concatTypedArrays(uint8, fst); + const dir = this.fileName.slice(0, this.fileName.lastIndexOf('/')); + if (dir !== '.') { + await pfs.mkdir(dir).catch(err => { + if (err.code !== 'EEXIST') { + throw err; + } + }); + } + await pfs.writeFile(this.fileName, Buffer.from(uint8.buffer)); + await openDatabaseFile(true); + // Now create the root record + await this.setNode('', {}); + rootRecord.exists = true; + this.emitOnce('ready'); + }; + // Open or create database + const exists = fs.existsSync(this.fileName); + if (exists) { + // Open + openDatabaseFile(false); + } + else if (settings.readOnly) { + throw new Error(`Cannot create readonly database "${name}"`); + } + else if (!this.ipc.isMaster) { + // Prevent race condition - let master process create database, poll for existance + const poll = () => { + setTimeout(async () => { + const exists = await pfs.exists(this.fileName); + if (exists) { + openDatabaseFile(); + } + else { + poll(); + } + }, 10); // Wait 10ms before trying again + }; + poll(); + } + else { + // Create new file + createDatabaseFile(); + } + this.ipc.once('exit', code => { + // Close database file + this.debug.log(`Closing db ${this.ipc.dbname}`); + pfs.close(this.file).catch(err => { + this.debug.error('Could not close database:', err); + }); + }); + } + get isReady() { return this._ready; } + get fileName() { return `${this.settings.path}/${this.name}.acebase/${this.type}.db`; } + async writeData(fileIndex, buffer, offset = 0, length = -1) { + if (this.settings.readOnly) { + const err = new Error(`Cannot write to readonly database ${this.fileName}`); + err.code = 'EPERM'; // This is what NodeJS would throw below + throw err; + } + if (buffer.constructor === Uint8Array) { //buffer instanceof Uint8Array) { + // If the passsed buffer is of type Uint8Array (which is essentially the same as Buffer), + // convert it to a Buffer instance or fs.write will FAIL. + buffer = Buffer.from(buffer.buffer, buffer.byteOffset, buffer.byteLength); + } + console.assert(buffer instanceof Buffer, 'buffer argument must be a Buffer or Uint8Array'); + if (length === -1) { + length = buffer.byteLength; + } + const { bytesWritten } = await pfs.write(this.file, buffer, offset, length, fileIndex).catch(err => { + this.debug.error('Error writing to file', err); + throw err; + }); + this.stats.writes++; + this.stats.bytesWritten += bytesWritten; + return bytesWritten; + } + /** + * + * @param fileIndex Index of the file to read + * @param buffer Buffer object, ArrayBuffer or TypedArray (Uint8Array, Int8Array, Uint16Array etc) to read data into + * @param offset byte offset in the buffer to read data into, default is 0 + * @param length total bytes to read (if omitted or -1, it will use buffer.byteLength) + * @returns returns the total bytes read + */ + async readData(fileIndex, buffer, offset = 0, length = -1) { + if (length === -1) { + length = buffer.byteLength; + } + if (buffer instanceof ArrayBuffer) { + buffer = Buffer.from(buffer); + } + else if (!(buffer instanceof Buffer) && buffer.buffer instanceof ArrayBuffer) { + // Convert a typed array such as Uint8Array to Buffer with shared memory space + buffer = Buffer.from(buffer.buffer); + if (buffer.byteOffset > 0) { + throw new Error('When using a TypedArray as buffer, its byteOffset MUST be 0.'); + } + } + try { + const { bytesRead } = await pfs.read(this.file, buffer, offset, length, fileIndex); + this.stats.reads++; + this.stats.bytesRead += bytesRead; + return bytesRead; + } + catch (err) { + this.debug.error('Error reading record', buffer, offset, length, fileIndex); + this.debug.error(err); + throw err; + } + } + /** + * Use this method to update cache, instead of through `this.nodeCache` + * @param fromIPC Whether this update came from an IPC notification to prevent infinite loop + * @param nodeInfo + * @param hasMoved set to false when reading a record's children - not because the address is actually changing + */ + updateCache(fromIPC, nodeInfo, hasMoved = true) { + this.nodeCache.update(nodeInfo); // , hasMoved + if (!fromIPC && hasMoved) { + this.ipc.sendNotification({ type: 'cache.update', info: nodeInfo }); + } + } + invalidateCache(fromIPC, path, recursive, reason) { + this.nodeCache.invalidate(path, recursive, reason); + if (!fromIPC) { + this.ipc.sendNotification({ type: 'cache.invalidate', path, recursive, reason }); + } + } + async close() { + const p1 = super.close(); + const p2 = this.txStorage && this.txStorage.close(); // Also close transaction db + await Promise.all([p1, p2]); + } + get pageByteSize() { + return this.settings.pageSize * this.settings.recordSize; + } + getRecordFileIndex(pageNr, recordNr) { + const index = this.rootRecord.fileIndex + + (pageNr * this.pageByteSize) + + (recordNr * this.settings.recordSize); + return index; + } + /** + * Repairs a broken record by removing the reference to it from the parent node. It does not overwrite the target record to prevent possibly breaking other data. + * Example: repairNode('books/l74fm4sg000009jr1iyt93a5/reviews') will remove the reference to the 'reviews' record in 'books/l74fm4sg000009jr1iyt93a5' + */ + async repairNode(targetPath, options = { + ignoreIntact: false, + markAsRemoved: true, + }) { + if (typeof options.ignoreIntact !== 'boolean') { + options.ignoreIntact = false; + } + if (typeof options.markAsRemoved !== 'boolean') { + options.markAsRemoved = true; + } + const targetPathInfo = PathInfo.get(targetPath); + const { parentPath: path, key, parent: pathInfo } = targetPathInfo; + const tid = this.createTid(); + let lock = await this.nodeLocker.lock(path, tid.toString(), true, 'fixRecord'); + try { + // Make sure cache for parent and all children is removed + this.invalidateCache(false, path, true); + // Check if the target node is really broken first + let targetNodeInfo = null; + try { + targetNodeInfo = await this.getNodeInfo(targetPath, { tid }); + } + finally { + if (targetNodeInfo) { + const msg = `Node at path "${targetPath}" is not broken: it is a(n) ${targetNodeInfo.valueTypeName} stored ${targetNodeInfo.address ? `@${targetNodeInfo.address.pageNr},${targetNodeInfo.address.recordNr}` : 'inline'}${targetNodeInfo.value ? ` with value ${targetNodeInfo.value}` : ''}`; + this.debug.warn(msg); + if (!options.ignoreIntact) { + throw new Error(msg); + } + } + } + let nodeInfo; + try { + nodeInfo = await this.getNodeInfo(path, { tid }); + } + catch (err) { + throw new Error(`Can't read parent node ${path}: ${err}`); + } + if (!nodeInfo.exists) { + throw new Error(`Node at path ${path} does not exist`); + } + else if (!nodeInfo.address) { + throw new Error(`Node at ${path} is not stored in its own record`); + } + const removedValueIndicator = '[[removed]]'; + const isArray = nodeInfo.valueType === VALUE_TYPES.ARRAY; + if (isArray && !options.markAsRemoved) { + this.debug.warn(`Node at path "${path}" is an Array, cannot remove entry at index ${key}: marking it as "${removedValueIndicator}" instead`); + options.markAsRemoved = true; + } + const nodeReader = new NodeReader(this, nodeInfo.address, lock, false); + const recordInfo = await nodeReader.readHeader(); + let childInfo; + try { + childInfo = await nodeReader.getChildInfo(key); + } + catch (err) { + throw new Error(`Can't get info about child "${key}" in node "${path}: ${err}`); + } + if (!childInfo.address) { + throw new Error(`Can't fix node "${targetPath}" because it is not stored in its own record`); + } + if (recordInfo.hasKeyIndex) { + // This node has an index for the child keys + // Easy update: update this child only + const oldKV = _serializeValue(this, targetPath, key, new InternalNodeReference(childInfo.valueType, childInfo.address), tid); + const oldVal = _getValueBytes(oldKV); + const newKV = _serializeValue(this, targetPath, key, removedValueIndicator, tid); + const newVal = _getValueBytes(newKV); + const tree = nodeReader.getChildTree(); + const oldEntryValue = new BinaryBPlusTree.EntryValue(oldVal); + const newEntryValue = new BinaryBPlusTree.EntryValue(newVal); + const op = options.markAsRemoved + ? BinaryBPlusTree.TransactionOperation.update(key, newEntryValue, oldEntryValue) + : BinaryBPlusTree.TransactionOperation.remove(key, oldEntryValue.recordPointer); + try { + await tree.transaction([op]); + } + catch (err) { + throw new Error(`Could not update tree for "${path}": ${err}`); + } + } + else { + // This is a small record. Rewrite the entire node + const mergedValue = isArray ? [] : {}; + await nodeReader.getChildStream().next(child => { + const keyOrIndex = isArray ? child.index : child.key; + if (keyOrIndex === key) { + // This is the target key to update/delete + if (options.markAsRemoved) { + mergedValue[key] = removedValueIndicator; + } + } + else if (child.address) { //(child.storedAddress || child.address) { + mergedValue[keyOrIndex] = new InternalNodeReference(child.valueType, child.address); + } + else { + mergedValue[keyOrIndex] = child.value; + } + }); + const newRecordInfo = await _writeNode(this, path, mergedValue, lock, nodeReader.recordInfo); + if (newRecordInfo !== nodeReader.recordInfo) { + // _writeNode allocated new records: its location moved and the parent has to be updated. + if (pathInfo.parent) { + lock = await lock.moveToParent(); + await this._updateNode(pathInfo.parentPath, { [pathInfo.key]: new InternalNodeReference(newRecordInfo.valueType, newRecordInfo.address) }, { merge: true, tid, _internal: true }); + } + try { + await this.FST.release(nodeReader.recordInfo.allocation.ranges); + } + catch (err) { + this.debug.error(`Could not release previously allocated ranges for "/${path}": ${err}`); + } + // throw new Error(`Node at path "/${path}" was not rewritten at the same location. Fix failed`); + } + } + this.debug.log(`Successfully fixed node at path "${targetPath}" by ${options.markAsRemoved ? `marking key "${key}" of parent node "${path}" as removed ("${removedValueIndicator}")` : `removing key "${key}" from parent node "${path}"`}`); + // Make sure cached address is removed. + this.invalidateCache(false, targetPath, true); + } + finally { + await lock.release(); + } + } + get transactionLoggingEnabled() { + return this.settings.transactions && this.settings.transactions.log === true; + } + logMutation(type, path, value, context, mutations) { + // Add to transaction log + if (!['set', 'update'].includes(type)) { + throw new TypeError('type must be either "set" or "update"'); + } + if (!this.transactionLoggingEnabled) { + throw new Error('transaction logging is not enabled on database'); + } + if (!context.acebase_cursor) { + throw new Error('context.acebase_cursor must have been set'); + } + if (mutations.list.length === 0) { + // There were no changes, nothing to log. + return; + } + if (path.startsWith('__')) { + // Don't log mutations on private paths + return; + } + if (this.type === 'data') { + return this.txStorage.logMutation(type, path, value, context, mutations); + } + else if (this.type !== 'transaction') { + throw new Error('Wrong database type'); + } + if (value === null) { + // Target path was deleted. Log the mutation on parent node: prevents 2 different delete flows and allows for uniform getMutations logic + const pathInfo = PathInfo.get(path); + type = 'update'; + path = pathInfo.parentPath; + value = { [pathInfo.key]: null }; + } + const updatedKeys = mutations.path === path + ? mutations.list.filter(ch => ch.target.length > 0 && ch.val !== null).map(ch => ch.target[0]) + : value instanceof Array ? Object.keys(value).map(key => +key) : Object.keys(value).filter(key => value[key] !== null); + const deletedKeys = mutations.path === path + ? mutations.list.filter(ch => ch.target.length === 1 && ch.val === null).map(ch => ch.target[0]) + : []; + const item = { + path, + updated: updatedKeys, + deleted: deletedKeys, + timestamp: Date.now(), + type, + value, + context, + mutations, + }; + // console.log(`Logging mutations on "/${path}": ${JSON.stringify(item.mutations)}`); + const cursor = context.acebase_cursor; + const store = async () => { + if (!this.isReady) { + await this.once('ready'); + } + try { + // const info = await this.getNodeInfo(`history/${cursor}`); + // if (info.exists) { + // throw new Error('Another transaction using the same cursor found'); + // } + await this._updateNode('history', { [cursor]: item }, { merge: true, _internal: true }); + } + catch (err) { + this.debug.error('Failed to add to transaction log: ', err); + } + }; + const promise = store(); + if (!this.settings.transactions.noWait) { + return promise.then(() => cursor); + } + return cursor; + } + /** + * Gets all mutations from a given cursor or timestamp on a given path, or on multiple paths that are relevant for given events + */ + async getMutations(filter) { + if (this.type === 'data') { + if (!this.transactionLoggingEnabled) { + throw new Error('Transaction logging is not enabled'); + } + return this.txStorage.getMutations(filter); + } + else if (this.type !== 'transaction') { + throw new Error('Wrong database type'); + } + if (!this.isReady) { + await this.once('ready'); + } + const cursor = // Use given cursor, timestamp or nothing to filter on + (filter.cursor && filter.cursor.slice(0, 8)) + || (filter.timestamp && (new Date(filter.timestamp).getTime()).toString(36).padStart(8, '0')) + || '00000000'; + const since = (typeof filter.timestamp === 'number' && filter.timestamp) + || (cursor && parseInt(cursor, 36)) + || 0; + // Check if cursor is not too old + if (since !== 0 && cursor < this.oldestValidCursor) { + throw new Error('Cursor too old'); + } + if (!filter.for || filter.for.length === 0) { + filter.for = [{ path: typeof filter.path === 'string' ? filter.path : '', events: ['value'] }]; // Use filter.path, or root node as single path + } + // Get filter paths, filter out paths that are descendants of another path + const filterPaths = filter.for.filter(t1 => { + const pathInfo = PathInfo.get(t1.path); + return !filter.for.some(t2 => pathInfo.isDescendantOf(t2.path)); + }).map(item => item.path); + const tid = this.createTid(); //ID.generate(); + const lock = await this.nodeLocker.lock('history', tid.toString(), false, 'getMutations'); + try { + let mutations = []; + const checkQueue = []; + let done; + const donePromise = new Promise(resolve => done = resolve); + let allEnumerated = false; + const hasValue = (val) => ![undefined, null].includes(val); + const hasPropertyValue = (val, prop) => hasValue(val) && typeof val === 'object' && hasValue(val[prop]); + // const filterPathInfo = PathInfo.get(filter.path || ''); + const check = async (key) => { + checkQueue.push(key); + const { value: mutation } = await this.getNode(`history/${key}`, { tid, include: ['path', 'updated', 'deleted', 'type', 'timestamp'] }); // Not including 'value' + mutation.keys = mutation.updated.concat(mutation.deleted); + const mutationPathInfo = PathInfo.get(mutation.path); + // Find the path in filter.paths on this trail, there can only be 1 (descendants were filtered out above) + const filterPath = (() => { + const path = filterPaths.find(path => mutationPathInfo.isOnTrailOf(path)); + return typeof path === 'string' ? path : null; + })(); + const filterPathInfo = filterPath === null ? null : PathInfo.get(filterPath); + const load = (() => { + /** + * When to include a mutation & what data to include. + * - mutation.path starts with __ (private path) + * - ignore + * - filterPath === null if no filter paths were on the same trail as mutation.path + * - eg: filterPaths on ["books/book1", "books/book2"], mutation.path === "books/book3" + * - ignore + * - filterPath equals mutation.path + * - eg: filterPath === mutation.path === "books/book1" + * - use entire mutation + * - filterPath is an ancestor of mutation.path + * - eg: filterPath === "books", mutation.path === "books/book1" + * - use entire mutation + * - filterPath is a descendant of mutation.path + * - eg: filterPath === "books/book1/title", mutation.path === "books" + * - ignore if mutation.type === 'update' and mutation.keys does NOT include first trailing key of filterPath (eg only book2 is updated) + * - if filterPath has wildcard (*, $var) keys, repeat following step recursively: + * - use target (trailing) data in mutation value (value/books/book1/title) or null + */ + if (mutation.path.startsWith('__')) { + return 'none'; + } + if (mutation.timestamp < since || filterPath === null) { + return 'none'; + } + if (!filterPathInfo.isDescendantOf(mutationPathInfo)) { + return 'all'; + } + if (mutation.type === 'set' || mutation.keys.concat('*').includes(filterPathInfo.keys[mutationPathInfo.keys.length]) || filterPathInfo.keys[mutationPathInfo.keys.length].toString().startsWith('$')) { + return 'target'; + } + return 'none'; + })(); + if (load !== 'none') { + const valueKey = 'value' + (load === 'target' ? (mutation.path.length === 0 ? '/' : '') + filterPath.slice(mutation.path.length) : ''); + const { value: tx } = await this.getNode(`history/${key}`, { tid, include: ['context', 'mutations', valueKey] }); + const targetPath = mutation.path; + let targetValue = tx.value, targetOp = mutation.type; + if (typeof targetValue === 'undefined') { + targetValue = null; + } + else { + // Add removed properties to the target value again + mutation.deleted.forEach(key => targetValue[key] = null); + } + for (const m of tx.mutations.list) { + if (typeof m.val === 'undefined') { + m.val = null; + } + if (typeof m.prev === 'undefined') { + m.prev = null; + } + } + if (load === 'target') { + targetOp = 'set'; + const trailKeys = filterPathInfo.keys.slice(mutationPathInfo.keys.length); + const process = (targetPath, targetValue, trailKeys) => { + const childKey = trailKeys[0]; + trailKeys = trailKeys.slice(1); + if (childKey === '*' || childKey.toString().startsWith('$')) { + // Wildcard. Process all child keys + return Object.keys(targetValue).forEach(childKey => { + process(targetPath, targetValue, [childKey, ...trailKeys]); + }); + } + targetPath = PathInfo.getChildPath(targetPath, childKey); + targetValue = targetValue !== null && childKey in targetValue ? targetValue[childKey] : null; + if (trailKeys.length === 0) { + // console.log(`Adding mutation on "${targetPath}" to history of "${filterPathInfo.path}"`) + // Check if the targeted value actually changed + const targetPathInfo = PathInfo.get(targetPath); + const hasTargetMutation = tx.mutations.list.some(m => { + const mTargetPathInfo = PathInfo.get(tx.mutations.path).child(m.target); + if (mTargetPathInfo.isAncestorOf(targetPathInfo)) { + // Mutation on higher path, check if target mutation prev and val are different + const trailKeys = targetPathInfo.keys.slice(mTargetPathInfo.keys.length); + const val = !hasValue(m.val) ? null : trailKeys.reduce((val, key) => hasPropertyValue(val, key) ? val[key] : null, m.val); + const prev = !hasValue(m.prev) ? null : trailKeys.reduce((prev, key) => hasPropertyValue(prev, key) ? prev[key] : null, m.prev); + return (val !== prev); + } + return mTargetPathInfo.isOnTrailOf(targetPathInfo); + }); + hasTargetMutation && mutations.push({ id: key, path: targetPath, type: targetOp, timestamp: mutation.timestamp, value: targetValue, context: tx.context, changes: tx.mutations }); + } + else { + process(targetPath, targetValue, trailKeys); // Deeper + } + }; + process(targetPath, targetValue, trailKeys); + } + else { + // console.log(`Adding mutation on "${targetPath}" to history of "${filterPathInfo.path}"`) + mutations.push({ id: key, path: targetPath, type: targetOp, timestamp: mutation.timestamp, value: targetValue, context: tx.context, changes: tx.mutations }); // TODO remove __mutation__: mutation + } + } + checkQueue.splice(checkQueue.indexOf(key), 1); + if (allEnumerated && checkQueue.length === 0) { + done(); + } + }; + let count = 0; + const oldestValidCursor = this.oldestValidCursor, expiredTransactions = [], inspectFurther = []; + await this.getChildren('history', { tid }) + .next(childInfo => { + const txCursor = childInfo.key.slice(0, cursor.length); + if (txCursor < oldestValidCursor) { + expiredTransactions.push(childInfo.key); + } + if (txCursor < cursor) { + return; + } + if (txCursor === cursor) { + // cuid timestamp bytes are equal - perform extra check on this mutation later to find out if we have to include it in the results + inspectFurther.push(childInfo.key); + } + count++; + check(childInfo.key); + }); + allEnumerated = true; + if (count > 0) { + await donePromise; + } + if (expiredTransactions.length > 0) { + // Remove expired transactions + const expiredUpdate = expiredTransactions.reduce((updates, key) => { + updates[key] = null; + return updates; + }, {}); + this.updateNode('history', expiredUpdate); // No need to await this, will be processed once we've released our read lock + } + if (inspectFurther.length === 1 && inspectFurther[0] === filter.cursor) { + // This is the exact cursor the caller used as filter, remove this mutation from results + const index = mutations.findIndex(m => m.id === filter.cursor); + index >= 0 && mutations.splice(index, 1); + } + else if (inspectFurther.length > 1) { + // More than one mutation was performed within the same millisecond of the used cursor filter. + // We can't reliably use the counter bytes of the cuid to check which mutation came before or after, + // because the cuid counter number rolls over (later cuid might have smaller counter), and they might + // have been generated by other threads (both using a different counter). + // Include all these mutations. + // NOTE that it is practically impossible to have more than 1 mutation in the same millisecond that + // could conflict with another because of the currently used locking mechanism - this will *probably* never + // happen. + } + // Make sure they are sorted + mutations.sort((a, b) => a.timestamp - b.timestamp); + // Toss all mutations the caller is not interested in + const hasNewKeys = (val, prev) => Object.keys(val || {}).some(key => !(key in (prev || {}))); + const hasRemovedKeys = (val, prev) => Object.keys(prev || {}).some(key => !(key in (val || {}))); + const allEventsFor = (...events) => events.concat(...events.map(e => `notify_${e}`)); + const hasEvent = (events, check) => allEventsFor(...check).some(e => events.includes(e)); + mutations = mutations.filter(item => { + // Get all changes as 'set' operations so we can compare + const changes = (() => { + const basePathInfo = PathInfo.get(item.changes.path); + if (basePathInfo.isAncestorOf(item.path)) { + // Mutation has been recorded on higher path. + // - Remove changes that are not on the requested target, caller might not have rights to read them + // - Modify relevant changes to be on target path + for (let i = 0; i < item.changes.list.length; i++) { + const ch = item.changes.list[i]; + // item.path === 'library/books/book1' + // item.changes.path === 'library/books' + // m.target === ['book1'] + // m.value === { ... } + const trailKeys = PathInfo.get(item.path).keys.slice(basePathInfo.keys.length); + // Remove mutation from list if it's not on the target + const onTarget = ch.target.every((key, index) => key === trailKeys[index]); + if (!onTarget) { + item.changes.list.splice(i, 1); + i--; + continue; + } + // Remove target keys from trail + trailKeys.splice(0, ch.target.length); + const val = !hasValue(ch.val) ? null : trailKeys.reduce((val, key) => hasPropertyValue(val, key) ? val[key] : null, ch.val); + const prev = !hasValue(ch.prev) ? null : trailKeys.reduce((prev, key) => hasPropertyValue(prev, key) ? prev[key] : null, ch.prev); + if (val === prev) { + // This mutation has no changes on target path + item.changes.list.splice(i, 1); + i--; + continue; + } + ch.val = val; + ch.prev = prev; + ch.target.push(...trailKeys); // Adjust target + } + if (item.changes.list.length === 0) { + // Skip, no changes on target path + return []; + } + } + // Return all changes as individual 'set' operations + return item.changes.list.map(m => { + const targetPathInfo = m.target.length === 0 ? basePathInfo : basePathInfo.child(m.target); + return { + id: item.id, + type: 'set', + path: targetPathInfo.path, + pathInfo: targetPathInfo, + timestamp: item.timestamp, + context: item.context, + prev: hasValue(m.prev) ? m.prev : null, + val: hasValue(m.val) ? m.val : null, + }; + }); + })(); + // Now, are any of these changes relevant to any of the requested path/event combinations? + return changes.some(ch => { + return filter.for.some(target => { + if (!ch.pathInfo.isOnTrailOf(target.path)) { + return false; + } + else if ((ch.pathInfo.equals(target.path) || ch.pathInfo.isDescendantOf(target.path)) + && hasEvent(target.events, ['value', 'child_changed', 'mutated', 'mutations'])) { + return true; + } + else if (ch.pathInfo.equals(target.path)) { + // mutation on target: value is being overwritten. + if (hasEvent(target.events, ['value', 'child_changed', 'mutated', 'mutations'])) { + return true; + } + if (hasEvent(target.events, ['child_added']) && hasNewKeys(ch.val, ch.prev)) { + return true; + } + if (hasEvent(target.events, ['child_removed']) && hasRemovedKeys(ch.val, ch.prev)) { + return true; + } + } + else if (ch.pathInfo.isDescendantOf(target.path)) { + // mutation on deeper than target path + // eg: mutation on path 'books/book1/title', child_added target on 'books' + // Events [child_changed, value, mutated, mutations] will already have returned true above + if (hasEvent(target.events, ['child_added', 'child_removed'])) { + if (!ch.pathInfo.isChildOf(target.path)) { + return false; + } + if (hasEvent(target.events, ['child_added']) && ch.prev === null) { + return true; + } + if (hasEvent(target.events, ['child_removed']) && ch.val === null) { + return true; + } + } + } + else { + // Mutation on higher than target path. + // eg mutation on path 'books/book1', child_changed on target 'books/book1/authors' + // Get values at target path + const trailKeys = PathInfo.getPathKeys(target.path).slice(ch.pathInfo.keys.length); + const prev = trailKeys.reduce((prev, key) => hasValue(prev) && hasPropertyValue(prev, key) ? prev[key] : null, ch.prev); + const val = trailKeys.reduce((val, key) => hasValue(val) && hasPropertyValue(val, key) ? val[key] : null, ch.val); + if (prev === val) { + return false; + } + if (hasEvent(target.events, ['value', 'mutated', 'mutations'])) { + return true; + } + if (hasEvent(target.events, ['child_added']) && hasNewKeys(val, prev)) { + return true; + } + if (hasEvent(target.events, ['child_removed']) && hasRemovedKeys(val, prev)) { + return true; + } + } + return false; + }); + }); + }); + return { mutations, used_cursor: filter.cursor, new_cursor: ID.generate() }; + } + finally { + lock.release(); + } + } + /** + * Gets all effective changes from a given cursor or timestamp on a given path, or on multiple paths that are relevant for given events. + * Multiple mutations will be merged so the returned changes will not have their original updating contexts and order of the original timeline. + */ + async getChanges(filter) { + const mutationsResult = await this.getMutations(filter); + const { used_cursor, new_cursor, mutations } = mutationsResult; + const hasValue = (val) => ![undefined, null].includes(val); + // Get effective changes to the target paths + const arr = mutations.reduce((all, item) => { + // 1. Add all effective mutations as 'set' operations on their target paths, removing previous 'set' mutations on the same or descendant paths + const basePathInfo = PathInfo.get(item.changes.path); + item.changes.list.forEach(m => { + const targetPathInfo = m.target.length === 0 ? basePathInfo : basePathInfo.child(m.target); + // Remove previous 'set' mutations on the same and descendant paths + all = all.filter(prev => !prev.pathInfo.equals(targetPathInfo) && !prev.pathInfo.isDescendantOf(targetPathInfo)); + all.push({ + id: item.id, + type: 'set', + path: targetPathInfo.path, + pathInfo: targetPathInfo, + timestamp: item.timestamp, + context: item.context, + prev: hasValue(m.prev) ? m.prev : null, + val: hasValue(m.val) ? m.val : null, + }); + }); + return all; + }, []).reduce((all, item) => { + // 2. Merge successive 'set' mutations on the same parent to single parent 'update's, using last used context + if (item.path === '') { + // 'set' on the root path. Don't change + all.push(item); + } + else { + const pathInfo = item.pathInfo; + const parentPath = pathInfo.parentPath; + const parentUpdate = all.find(u => u.path === parentPath); + if (!parentUpdate) { + // Create new parent update + all.push({ + id: item.id, + type: 'update', + path: parentPath, + pathInfo: pathInfo.parent, + val: { [pathInfo.key]: item.val }, + prev: { [pathInfo.key]: item.prev }, + context: item.context, + }); + } + else { + // Add this change to parent update + parentUpdate.val[pathInfo.key] = item.val; + if (parentUpdate.prev !== null) { // previous === null on very first root 'set' only + parentUpdate.prev[pathInfo.key] = item.prev; + } + parentUpdate.context = item.context; + } + } + return all; + }, []); + // Transform results to desired output + const changes = arr.map(item => ({ + id: item.id, + type: item.type, + path: item.path, + context: { acebase_cursor: item.context.acebase_cursor }, + value: item.val, + previous: item.prev, + })); + return { used_cursor, new_cursor, changes }; + } + get oldestValidCursor() { + if (this.settings.transactions.maxAge <= 0) { + return ''; + } + const msPerDay = 86400000, // 24 * 60 * 60 * 1000 + maxAgeMs = this.settings.transactions.maxAge * msPerDay, limit = Date.now() - maxAgeMs, cursor = limit.toString(36); + return cursor; + } + /** + * Enumerates all children of a given Node for reflection purposes + * @param path + * @param options optional options used by implementation for recursive calls + * @returns returns a generator object that calls .next for each child until the .next callback returns false + */ + getChildren(path, options = { + async: false, + }) { + if (typeof options.async !== 'boolean') { + options.async = false; + } + const generator = { + /** + * + * @param valueCallback callback function to run for each child. Return false to stop iterating + * @returns returns a promise that resolves with a boolean indicating if all children have been enumerated, or was canceled by the valueCallback function + */ + async next(valueCallback, useAsync = options.async) { + return start(valueCallback, useAsync); + }, + }; + const start = async (callback, isAsync = false) => { + const tid = this.createTid(); //ID.generate(); + let canceled = false; + const lock = await this.nodeLocker.lock(path, tid.toString(), false, `storage.getChildren "/${path}"`); + try { + const nodeInfo = await this.getNodeInfo(path, { tid }); + if (!nodeInfo.exists) { + throw new NodeNotFoundError(`Node "/${path}" does not exist`); + } + else if (!nodeInfo.address) { + // Node does not have its own record, so it has no children + return; + } + const reader = new NodeReader(this, nodeInfo.address, lock, true); + const nextCallback = isAsync + ? async (childInfo) => { + canceled = (await callback(childInfo)) === false; + return !canceled; + } + : (childInfo) => { + canceled = callback(childInfo) === false; + return !canceled; + }; + await reader.getChildStream({ keyFilter: options.keyFilter }) + .next(nextCallback, isAsync); + return canceled; + } + catch (err) { + if (!(err instanceof NodeNotFoundError)) { + this.debug.error(`Error getting children: ${err.stack}`); + } + throw err; + } + finally { + lock.release(); + } + }; + return generator; + } + /** + * Gets a node's value and (if supported) revision + * @param path + * @param options optional options that can limit the amount of (sub)data being loaded, and any other implementation specific options for recusrsive calls + */ + async getNode(path, options = { child_objects: true }) { + const tid = options.tid || this.createTid(); + const lock = await this.nodeLocker.lock(path, tid.toString(), false, `storage.getNode "/${path}"`); + try { + const cursor = this.transactionLoggingEnabled ? ID.generate() : undefined; + const nodeInfo = await this.getNodeInfo(path, { tid }); + let value = nodeInfo.value; + if (!nodeInfo.exists) { + value = null; + } + else if (nodeInfo.address) { + const reader = new NodeReader(this, nodeInfo.address, lock, true); + value = await reader.getValue({ + include: options.include, + exclude: options.exclude, + child_objects: options.child_objects, + }); + } + return { + revision: null, + value, + cursor, + }; + } + catch (err) { + if (err instanceof CorruptRecordError) { + // err.record points to the broken record address (path, pageNr, recordNr) + // err.key points to the property causing the issue + // To fix this, the record needs to be rewritten without the violating key + // No need to console.error here, should have already been done + // TODO: release acebase-cli with ability to do that + } + else { + this.debug.error('DEBUG THIS: getNode error:', err); + } + throw err; + } + finally { + lock.release(); + } + } + /** + * Retrieves info about a node (existence, wherabouts etc) + * @param path + * @param options optional options used by implementation for recursive calls + */ + async getNodeInfo(path, options = { + no_cache: false, + include_child_count: false, + allow_expand: false, + }) { + options.no_cache = options.no_cache === true; + options.include_child_count = options.include_child_count === true; + options.allow_expand = false; // Don't use yet! // options.allow_expand !== false; + const tid = options.tid || this.createTid(); + const getChildCount = async (nodeInfo) => { + let childCount = 0; + if ([VALUE_TYPES.ARRAY, VALUE_TYPES.OBJECT].includes(nodeInfo.valueType) && nodeInfo.address) { + // Get number of children + const childLock = await this.nodeLocker.lock(path, tid.toString(), false, `storage.getNodeInfo "/${path}"`); + try { + const childReader = new NodeReader(this, nodeInfo.address, childLock, true); + childCount = await childReader.getChildCount(); + } + finally { + childLock.release(`storage.getNodeInfo: done with path "/${path}"`); + } + } + return childCount; + }; + if (path === '') { + // Root record requires a little different strategy + const rootLock = await this.nodeLocker.lock('', tid.toString(), false, 'storage.getNodeInfo "/"'); + try { + if (!this.rootRecord.exists) { + return new BinaryNodeInfo({ path, exists: false }); + } + const info = new BinaryNodeInfo({ path, address: this.rootRecord.address, exists: true, type: VALUE_TYPES.OBJECT }); + if (options.include_child_count) { + info.childCount = await getChildCount(info); + } + return info; + } + finally { + rootLock.release(); + } + } + const allowCachedInfo = options.no_cache !== true && options.include_child_count !== true; + if (allowCachedInfo) { + // Check if the info has been cached + const cachedInfo = this.nodeCache.find(path, true); + if (cachedInfo) { + // cached, or announced + return cachedInfo; + } + } + // Cache miss. Find it by reading parent node + const pathInfo = PathInfo.get(path); + const parentPath = pathInfo.parentPath; + // Achieve a read lock on the parent node and read it + const lock = await this.nodeLocker.lock(parentPath, tid.toString(), false, `storage.getNodeInfo "/${parentPath}"`); + try { + // We have a lock, check if the lookup has been cached by another "thread" in the meantime. + let childInfo = this.nodeCache.find(path, true); + if (childInfo instanceof Promise) { + // It was previously announced, wait for it + childInfo = await childInfo; + } + if (childInfo && !options.include_child_count) { + // Return cached info + return childInfo; + } + if (!childInfo) { + // announce the lookup now + this.nodeCache.announce(path); + const parentInfo = await this.getNodeInfo(parentPath, { tid, no_cache: options.no_cache }); + if (parentInfo.exists && parentInfo.valueType === VALUE_TYPES.REFERENCE && options.allow_expand) { + // NEW (but not used yet): This is a path reference. Expand to get new parentInfo. + let pathReference; + if (parentInfo.address) { + // Must read target address to get target path + const reader = new NodeReader(this, parentInfo.address, lock, true); + pathReference = await reader.getValue(); + } + else { + // We have the path already + pathReference = parentInfo.value; + } + // TODO: implement relative path references: '../users/ewout' + const childPath = PathInfo.getChildPath(pathReference.path, pathInfo.key); + childInfo = await this.getNodeInfo(childPath, { tid, no_cache: options.no_cache }); + } + else if (!parentInfo.exists || ![VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(parentInfo.valueType) || !parentInfo.address) { + // Parent does not exist, is not an object or array, or has no children (object not stored in own address) + // so child doesn't exist + childInfo = new BinaryNodeInfo({ path, exists: false }); + } + else { + const reader = new NodeReader(this, parentInfo.address, lock, true); + childInfo = await reader.getChildInfo(pathInfo.key); + } + } + if (options.include_child_count) { + childInfo.childCount = await getChildCount(childInfo); + } + this.updateCache(false, childInfo, false); // Always cache lookups + return childInfo; + } + catch (err) { + this.debug.error('DEBUG THIS: getNodeInfo error', err); + throw err; + } + finally { + lock.release(`storage.getNodeInfo: done with path "/${parentPath}"`); + } + } + /** + * Delegates to legacy update method that handles everything + * @param options optional options used by implementation for recursive calls + * @returns Returns a new cursor if transaction logging is enabled + */ + async setNode(path, value, options = { + suppress_events: false, + context: null, + }) { + options.context = options.context || {}; + if (this.txStorage) { + options.context.acebase_cursor = ID.generate(); + } + const context = cloneObject(options.context); // copy context to prevent changes while code proceeds async + const mutations = await this._updateNode(path, value, { merge: false, tid: options.tid, suppress_events: options.suppress_events, context }); + if (this.txStorage && mutations) { + const p = this.logMutation('set', path, value, context, mutations); + if (p instanceof Promise) { + await p; + } + } + return options.context.acebase_cursor; + } + /** + * Delegates to legacy update method that handles everything + * @param options optional options used by implementation for recursive calls + * @returns Returns a new cursor if transaction logging is enabled + */ + async updateNode(path, updates, options = { + suppress_events: false, + context: null, + }) { + options.context = options.context || {}; + if (this.txStorage) { + options.context.acebase_cursor = ID.generate(); + } + const context = cloneObject(options.context); // copy context to prevent changes while code proceeds async + const mutations = await this._updateNode(path, updates, { merge: true, tid: options.tid, suppress_events: options.suppress_events, context }); + if (this.txStorage && mutations) { + const p = this.logMutation('update', path, updates, context, mutations); + if (p instanceof Promise) { + await p; + } + } + return options.context.acebase_cursor; + } + /** + * Updates or overwrite an existing node, or creates a new node. Handles storing of subnodes, + * freeing old node and subnodes allocation, updating/creation of parent nodes, and removing + * old cache entries. Triggers event notifications and index updates after the update succeeds. + * + * @param path + * @param value object with key/value pairs + * @param options optional options used by implementation for recursive calls + * @returns If transaction logging is enabled, returns a promise that resolves with the applied mutations + */ + async _updateNode(path, value, options = { + merge: true, + _internal: false, + suppress_events: false, + context: null, + }) { + // this.debug.log(`Update request for node "/${path}"`); + const tid = options.tid || this.createTid(); // ID.generate(); + const pathInfo = PathInfo.get(path); + if (value === null) { + // Deletion of node is requested. Update parent + return this._updateNode(pathInfo.parentPath, { [pathInfo.key]: null }, { merge: true, tid, suppress_events: options.suppress_events, context: options.context }); + } + if (path !== '' && this.valueFitsInline(value)) { + // Simple value, update parent instead + return this._updateNode(pathInfo.parentPath, { [pathInfo.key]: value }, { merge: true, tid, suppress_events: options.suppress_events, context: options.context }); + } + // const impact = super.getUpdateImpact(path, options.suppress_events); + // const topLock = impact.topEventPath !== path + // ? await this.nodeLocker.lock(impact.topEventPath, tid, true, '_updateNode:topLock') + // : null; + let lock = await this.nodeLocker.lock(path, tid.toString(), true, '_updateNode'); + try { + const nodeInfo = await this.getNodeInfo(path, { tid }); + if (!nodeInfo.exists && path !== '') { + // Node doesn't exist, update parent instead + lock = await lock.moveToParent(); + return await this._updateNode(pathInfo.parentPath, { [pathInfo.key]: value }, { merge: true, tid, suppress_events: options.suppress_events, context: options.context }); + } + // Exists, or root record + const merge = nodeInfo.exists && nodeInfo.address && options.merge; + const write = async () => { + if (merge) { + // Node exists already, is stored in its own record, and it must be updated (merged) + // TODO: pass current value along if we have it - to prevent _mergeNode loading it again! + return await _mergeNode(this, nodeInfo, value, lock); + } + else { + // Node doesn't exist, isn't stored in its own record, or must be overwritten + return await _createNode(this, nodeInfo, value, lock, !options._internal); + } + }; + let result; + if (options._internal) { + result = await write(); + } + else { + result = await this._writeNodeWithTracking(path, value, { + tid, + merge, + suppress_events: options.suppress_events, + context: options.context, + _customWriteFunction: write, // Will use this function instead of this._writeNode + // impact + }); + } + const { recordMoved, recordInfo, deallocate, mutations } = result; + // Update parent if the record moved + let parentUpdated = false; + if (recordMoved && pathInfo.parentPath !== null) { + lock = await lock.moveToParent(); + // console.error(`Got parent ${parentLock.forWriting ? 'WRITE' : 'read'} lock on "${pathInfo.parentPath}", tid ${lock.tid}`) + await this._updateNode(pathInfo.parentPath, { [pathInfo.key]: new InternalNodeReference(recordInfo.valueType, recordInfo.address) }, { merge: true, tid, _internal: true, context: options.context }); + parentUpdated = true; + } + if (parentUpdated && pathInfo.parentPath !== '') { + console.assert(this.nodeCache.has(pathInfo.parentPath), 'Not cached?!!'); + } + if (deallocate && deallocate.totalAddresses > 0) { + // Release record allocation marked for deallocation + deallocate.normalize(); + this.debug.verbose(`Releasing ${deallocate.totalAddresses} addresses (${deallocate.ranges.length} ranges) previously used by node "/${path}" and/or descendants: ${deallocate}`.colorize(ColorStyle.grey)); + // // TEMP check, remove loop when all is good: + // storage.nodeCache._cache.forEach((entry, path) => { + // let cachedAddress = entry.nodeInfo.address; + // if (!cachedAddress) { return; } + // const i = deallocate.addresses.findIndex(a => a.pageNr === cachedAddress.pageNr && a.recordNr === cachedAddress.recordNr); + // if (i >= 0) { + // throw new Error(`This is bad`); + // } + // }); + this.FST.release(deallocate.ranges); + } + return { + path, + list: mutations, + }; + } + // catch(err) { + // // if (err instanceof SchemaValidationError) { + // // !recursive && this.debug.error(`Schema validation error ${options.merge ? 'updating' : 'setting'} path "${path}": `, err.reason); + // // } + // if (!(err instanceof SchemaValidationError)) { + // this.debug.error(`Node.update ERROR: `, err.message); + // } + // throw err; //return false; + // } + finally { + lock.release(); + // topLock && topLock.release(); + } + } +} +const BINARY_TREE_FILL_FACTOR_50 = 50; +const BINARY_TREE_FILL_FACTOR_95 = 95; +const FLAG_WRITE_LOCK = 0x10; +const FLAG_READ_LOCK = 0x20; +const FLAG_KEY_TREE = 0x40; +const FLAG_VALUE_TYPE = 0xf; +class StorageAddressRange { + constructor(pageNr, recordNr, length) { + this.pageNr = pageNr; + this.recordNr = recordNr; + this.length = length; + } +} +class StorageAddress { + constructor(pageNr, recordNr) { + this.pageNr = pageNr; + this.recordNr = recordNr; + } +} +class NodeAllocation { + constructor(ranges) { + this.ranges = ranges; + } + get addresses() { + const addresses = []; + this.ranges.forEach(range => { + for (let i = 0; i < range.length; i++) { + const address = new StorageAddress(range.pageNr, range.recordNr + i); + addresses.push(address); + } + }); + return addresses; + } + get totalAddresses() { + return this.ranges.map(range => range.length).reduce((total, nr) => total + nr, 0); + } + toChunkTable() { + const ranges = this.ranges.map(range => new NodeChunkTableRange(0, range.pageNr, range.recordNr, range.length)); + if (ranges.length === 1 && ranges[0].length === 1) { + ranges[0].type = 0; // No CT (Chunk Table) + } + else { + ranges.forEach((range, index) => { + if (index === 0) { + range.type = 1; // 1st range CT record + } + else { + range.type = 2; // CT record with pageNr, recordNr, length + } + // TODO: Implement type 3 (contigious pages) + }); + } + return new NodeChunkTable(ranges); + } + static fromAdresses(records) { + if (records.length === 0) { + throw new Error('Cannot create allocation for 0 addresses'); + } + let range = new StorageAddressRange(records[0].pageNr, records[0].recordNr, 1); + const ranges = [range]; + for (let i = 1; i < records.length; i++) { + if (records[i].pageNr !== range.pageNr || records[i].recordNr !== range.recordNr + range.length) { + range = new StorageAddressRange(records[i].pageNr, records[i].recordNr, 1); + ranges.push(range); + } + else { + range.length++; + } + } + return new NodeAllocation(ranges); + } + toString() { + // this.normalize(); + return this.ranges.map(range => { + return `${range.pageNr},${range.recordNr}+${range.length - 1}`; + }).join('; '); + } + normalize() { + // Appends ranges + const total = this.totalAddresses; + for (let i = 0; i < this.ranges.length; i++) { + const range = this.ranges[i]; + let adjRange; + for (let j = i + 1; j < this.ranges.length; j++) { + const otherRange = this.ranges[j]; + if (otherRange.pageNr !== range.pageNr) { + continue; + } + if (otherRange.recordNr === range.recordNr + range.length) { + // This range is right before the other range + otherRange.length += range.length; + otherRange.recordNr = range.recordNr; + adjRange = otherRange; + break; + } + if (range.recordNr === otherRange.recordNr + otherRange.length) { + // This range starts right after the other range + otherRange.length += range.length; //otherRange.end = range.end; + adjRange = otherRange; + break; + } + } + if (adjRange) { + // range has merged with adjacent one + this.ranges.splice(i, 1); + i--; + } + } + console.assert(this.totalAddresses === total, 'the amount of addresses changed during normalization'); + } +} +class NodeChunkTable { + constructor(ranges) { + this.ranges = ranges; + } +} +class NodeChunkTableRange { + constructor(type, pageNr, recordNr, length) { + this.type = type; + this.pageNr = pageNr; + this.recordNr = recordNr; + this.length = length; + } +} +class RecordInfo { + constructor(path, hasKeyIndex, valueType, allocation, headerLength, lastRecordLength, bytesPerRecord, startData) { + this.path = path; + this.hasKeyIndex = hasKeyIndex; + this.valueType = valueType; + this.allocation = allocation; + this.headerLength = headerLength; + this.lastRecordLength = lastRecordLength; + this.bytesPerRecord = bytesPerRecord; + this.startData = startData; + this.lastChunkSize = -1; + this.fileIndex = -1; + this.timestamp = -1; + } + get totalByteLength() { + if (this.allocation.ranges.length === 1 && this.allocation.ranges[0].length === 1) { + // Only 1 record used for storage + return this.lastRecordLength; + } + const byteLength = (((this.allocation.totalAddresses - 1) * this.bytesPerRecord) + this.lastRecordLength) - this.headerLength; + return byteLength; + } + get address() { + const firstRange = this.allocation.ranges[0]; + return new BinaryNodeAddress(this.path, firstRange.pageNr, firstRange.recordNr); + } +} +class AdditionalDataRequest extends Error { + constructor() { super('More data needs to be loaded from the source'); } +} +class CorruptRecordError extends Error { + constructor(record, key, message) { + super(message); + this.record = record; + this.key = key; + } +} +class NodeReader { + constructor(storage, address, lock, updateCache = false, stack = {}) { + this.storage = storage; + this.address = address; + this.lock = lock; + this.updateCache = updateCache; + this.stack = stack; + this.recordInfo = null; + if (!(address instanceof BinaryNodeAddress)) { + throw new TypeError('address argument must be a BinaryNodeAddress'); + } + const key = `${address.pageNr},${address.recordNr}`; + if (key in stack) { + // Corrupted record. This can happen when locks have not been applied correctly during development, + // or if 2 separate processes accessed the database without proper inter-process communication (IPC) in place. + // If you see this happening, make sure you are not accessing this database from multiple isolated processes! + // An example could be 2+ AceBase instances on the same database files in multiple isolated processes. + // Kindly note that acebase-server does NOT support clustering YET + // If you don't want to corrupt your database, here's how: + // - DO NOT use multiple AceBase instances on a single database in your app + // Instead: use a shared AceBase instance throughout your app + // - DO NOT let multiple apps access the same database at the same time + // Instead: setup an AceBaseServer and use AceBaseClients to connect to it + // - DO NOT let multiple instances of your application (in isolated processes) access the same database at the same time + // Instead: Use NodeJS or pm2 clustering functionality to fork the process (IPC is available) + // - Do NOT run multiple AceBaseServer instances on the same database files + // Instead: Wait until AceBaseServer's cluster functionality is ready (and documented) + // See the discussion about this at https://github.com/appy-one/acebase/discussions/48 + const clash = stack[key]; + const pathInfo = PathInfo.get(address.path); + const parentAddress = stack[Object.keys(stack).find(key => stack[key].path === pathInfo.parentPath)]; + // const error = new CorruptRecordError(stack.slice(-1)[0], pathInfo.key, `Recursive read of record address ${clash.pageNr},${clash.recordNr}. Record "/${pathInfo.parentPath}" is corrupt: property "${pathInfo.key}" refers to the address belonging to path "/${clash.path}"`); + const error = new CorruptRecordError(parentAddress, pathInfo.key, `CORRUPT RECORD: key "${pathInfo.key}" in "/${parentAddress.path}" (@${parentAddress.pageNr},${parentAddress.recordNr}) refers to address @${clash.pageNr},${clash.recordNr} which was already used to read "/${clash.path}". Recursive or repeated reading has been prevented.`); + this.storage.debug.error(error.message); + throw error; + } + stack[key] = address; + this.stack = stack; + this._assertLock(); + // console.error(`NodeReader created on ${address}, tid ${lock.tid} (${lock.forWriting ? 'WRITE' : 'read'})`); + // const cache = storage.nodeCache.find(address.path); + // if (!cache) { + // console.error(`NodeReader: uncached ${address}`); // breakpoint expression: !lock.forWriting && address.path !== '' + // } + // else if (!cache.address) { + // console.error(`NodeReader: cache for ${address} = ${cache}`); + // } + // else if (!cache.address.equals(address)) { + // console.error(`NodeReader: cached address ${cache.address} does not match reading address ${address}`); + // } + } + _assertLock() { + const expired = this.storage.ipc.isMaster ? this.lock.state !== NodeLock.LOCK_STATE.LOCKED : this.lock.expires <= Date.now(); + if (expired) { + throw new Error(`No lock on node "/${this.address.path}", it may have expired`); + } + // if (this.lock.state !== NodeLock.LOCK_STATE.LOCKED) { + // throw new Error(`Node "/${this.address.path}" must be (read) locked, current state is ${this.lock.state}`); + // } + // if (this.lock.granted !== this.lockTimestamp) { + // // Lock has been renewed/changed? Will have to be read again if this happens. + // //this.recordInfo = null; + // // Don't allow this to happen + // throw new Error(`Lock on node "/${this.address.path}" has changed. This is not allowed. Debug this`); + // } + } + async getAllocation(includeChildNodes = false) { + this._assertLock(); + if (!includeChildNodes && this.recordInfo !== null) { + return this.recordInfo.allocation; + } + let allocation = null; + await this.readHeader(); + allocation = this.recordInfo.allocation; + if (!includeChildNodes) { + return [{ path: this.address.path, allocation }]; + } + const childPromises = []; + await this.getChildStream() + .next(child => { + const address = child.address; + if (address) { + // Get child Allocation + const promise = this.storage.nodeLocker.lock(child.path, this.lock.tid, false, `NodeReader:getAllocation:child "/${child.path}"`) + .then(async (childLock) => { + const reader = new NodeReader(this.storage, address, childLock, this.updateCache); + const childAllocation = await reader.getAllocation(true); + childLock.release(); + return { path: child.path, allocation: childAllocation }; + }); + childPromises.push(promise); + } + }); + const arr = await Promise.all(childPromises); + arr.forEach(result => { + allocation.ranges.push(...result.allocation.ranges); + }); + //console.log(childAllocations); + return allocation; + } + /** + * Reads all data for this node. Only do this when a stream won't do (eg if you need all data because the record contains a string) + */ + async getAllData() { + this._assertLock(); + if (this.recordInfo === null) { + await this.readHeader(); + } + const allData = new Uint8Array(this.recordInfo.totalByteLength); + let index = 0; + await this.getDataStream() + .next(({ data }) => { + allData.set(data, index); + index += data.length; + }); + return allData; + } + /** + * Gets the value stored in this record by parsing the binary data in this and any sub records + * @param options when omitted retrieves all nested data. If include is set to an array of keys it will only return those children. If exclude is set to an array of keys, those values will not be included + * @returns returns the stored object, array or string + */ + async getValue(options = { + child_objects: true, + no_cache: false, + }) { + if (typeof options.include !== 'undefined' && !(options.include instanceof Array)) { + throw new TypeError('options.include must be an array of key names'); + } + if (typeof options.exclude !== 'undefined' && !(options.exclude instanceof Array)) { + throw new TypeError('options.exclude must be an array of key names'); + } + if (['undefined', 'boolean'].indexOf(typeof options.child_objects) < 0) { + throw new TypeError('options.child_objects must be a boolean'); + } + this._assertLock(); + if (this.recordInfo === null) { + await this.readHeader(); + } + this.storage.debug.log(`Reading node "/${this.address.path}" from address ${this.address.pageNr},${this.address.recordNr}`.colorize(ColorStyle.magenta)); + switch (this.recordInfo.valueType) { + case VALUE_TYPES.STRING: { + const binary = await this.getAllData(); + const str = decodeString(binary); + return str; + } + case VALUE_TYPES.REFERENCE: { + const binary = await this.getAllData(); + const path = decodeString(binary); + return new PathReference(path); + } + case VALUE_TYPES.BINARY: { + const binary = await this.getAllData(); + return binary.buffer; + } + case VALUE_TYPES.ARRAY: + case VALUE_TYPES.OBJECT: { + // We need ALL data, including from child sub records + const isArray = this.recordInfo.valueType === VALUE_TYPES.ARRAY; + /** + * Convert include & exclude filters to PathInfo instances for easier handling + */ + const convertFilterArray = (arr) => { + const isNumber = (key) => /^[0-9]+$/.test(key); + return arr.map(path => PathInfo.get(isArray && isNumber(path) ? `[${path}]` : path)); + }; + const includeFilter = options.include ? options.include.some(item => item instanceof PathInfo) ? options.include : convertFilterArray(options.include) : []; + const excludeFilter = options.exclude ? options.exclude.some(item => item instanceof PathInfo) ? options.exclude : convertFilterArray(options.exclude) : []; + // if (isArray && isFiltered && options.include && options.include.length > 0) { + // for (let i = 0; i < options.include.length; i++) { + // // Convert indexes to numbers + // const key = options.include[i]; + // if (/^[0-9]+$/.test(key)) { options.include[i] = +key; } + // } + // } + // if (isArray && isFiltered && options.exclude && options.exclude.length > 0) { + // for (let i = 0; i < options.exclude.length; i++) { + // // Convert indexes to numbers + // const key = options.exclude[i]; + // if (/^[0-9]+$/.test(key)) { options.exclude[i] = +key; } + // } + // } + // if (isFiltered && options.include && options.include.length > 0) { + // const keyFilter = options.include + // .map(key => typeof key === 'string' && key.includes('/') ? key.slice(0, key.indexOf('/')) : key) // TODO: handle nested brackets + // .reduce((keys, key) => (keys.includes(key) || keys.push(key)) && keys, []); + // if (keyFilter.length > 0) { + // streamOptions.keyFilter = keyFilter; + // } + // } + const promises = []; + const isWildcardKey = (key) => typeof key === 'string' && (key === '*' || key[0] === '$'); + const hasWildcardInclude = includeFilter.length > 0 && includeFilter.some(pathInfo => pathInfo.keys.length === 1 && isWildcardKey(pathInfo.keys[0])); + const hasChildIncludes = includeFilter.length > 0 && includeFilter.some(pathInfo => pathInfo.keys.length === 1 && !isWildcardKey(pathInfo.keys[0])); + const isFiltered = (includeFilter.length > 0 && !hasWildcardInclude && includeFilter.some(pathInfo => pathInfo.keys.length === 1)) || (excludeFilter.length > 0 && excludeFilter.some(pathInfo => pathInfo.keys.length === 1)) || options.child_objects === false; + const obj = isArray ? isFiltered ? new PartialArray() : [] : {}; + const streamOptions = {}; + if (includeFilter.length > 0 && !hasWildcardInclude && hasChildIncludes) { + const keyFilter = includeFilter + .filter(pathInfo => !isWildcardKey(pathInfo.keys[0])) // pathInfo.keys.length === 1 && + .map(pathInfo => pathInfo.keys[0]) + .reduce((keys, key) => (keys.includes(key) || keys.push(key)) && keys, []); + if (keyFilter.length > 0) { + streamOptions.keyFilter = keyFilter; + } + } + const loadChildValue = async (child) => { + let childLock; + try { + childLock = await this.storage.nodeLocker.lock(child.address.path, this.lock.tid, false, `NodeReader.getValue:child "/${child.address.path}"`); + // Are there any relevant nested includes / excludes? + // Fixed: nested bracket (index) include/exclude handling like '[3]/name' + const childOptions = {}; + const getChildFilter = (filter) => { + return filter + .filter((pathInfo) => { + const key = pathInfo.keys[0]; + return pathInfo.keys.length > 1 && (isWildcardKey(key) || (isArray && key === child.index) || (!isArray && key === child.key)); + }) + .map(pathInfo => PathInfo.get(pathInfo.keys.slice(1))); + }; + if (includeFilter.length > 0) { + const include = getChildFilter(includeFilter); + if (include.length > 0) { + childOptions.include = include; + } + } + if (excludeFilter.length > 0) { + const exclude = getChildFilter(excludeFilter); + if (exclude.length > 0) { + childOptions.exclude = exclude; + } + } + // if (typeof options.no_cache === 'boolean') { + // childOptions.no_cache = options.no_cache; + // } + // if (options.no_cache !== true) { + // let cachedEntry = NodeCache.find(child.address.path); + // if (!cachedEntry) { + // NodeCache.update(child.address, child.valueType); // Cache its address + // } + // // else if (!cachedAddress.equals(child.address)) { + // // this.storage.debug.warn(`Using cached address to read child node "/${child.address.path}" from address ${cachedAddress.pageNr},${cachedAddress.recordNr} instead of (${child.address.pageNr},${child.address.recordNr})`.colorize(ColorStyle.magenta)); + // // child.address = cachedAddress; + // // } + // } + // this.storage.debug.log(`Reading child node "/${child.address.path}" from ${child.address.pageNr},${child.address.recordNr}`.colorize(ColorStyle.magenta)); + const reader = new NodeReader(this.storage, child.address, childLock, this.updateCache, this.stack); + const val = await reader.getValue(childOptions); + obj[isArray ? child.index : child.key] = val; + } + catch (reason) { + this.storage.debug.error('NodeReader.getValue:child error: ', reason); + throw reason; + } + finally { + childLock && childLock.release(); + } + }; + try { + await this.getChildStream(streamOptions) + .next(child => { + const keyOrIndex = isArray ? child.index : child.key; + if (options.child_objects === false && [VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(child.type)) { + // Options specify not to include any child objects + return; + } + if (includeFilter.some(pathInfo => pathInfo.keys.length === 1 && !isWildcardKey(pathInfo.keys[0])) && !includeFilter.some(pathInfo => pathInfo.keys.length === 1 && keyOrIndex === pathInfo.keys[0])) { // !options.include.find(k => typeof k === 'string' && k[0] === '*') && !streamOptions.keyFilter.includes(keyOrIndex) + // This particular child is not in the include list + return; + } + if (excludeFilter.some(pathInfo => pathInfo.keys.length === 1 && pathInfo.keys[0] === keyOrIndex)) { + // This particular child is on the exclude list + return; + } + if (child.address) { + const childValuePromise = loadChildValue(child); + promises.push(childValuePromise); + } + else if (typeof child.value !== 'undefined') { + obj[keyOrIndex] = child.value; + } + else { + if (isArray) { + throw new Error(`Value for index ${child.index} has not been set yet, find out why. Path: ${this.address.path}`); + } + else { + throw new Error(`Value for key ${child.key} has not been set yet, find out why. Path: ${this.address.path}`); + } + } + }); + // We're done reading child info + await Promise.all(promises); // Wait for any child reads to complete + return obj; + } + catch (err) { + this.storage.debug.error(err); + throw err; + } + } + default: { + throw new Error(`Unsupported record value type: ${this.recordInfo.valueType}`); + } + } + } + getDataStream() { + this._assertLock(); + const bytesPerRecord = this.storage.settings.recordSize; + const maxRecordsPerChunk = this.storage.settings.pageSize; // Reading whole pages at a time is faster, approx 130KB with default settings (1024 records of 128 bytes each) // 200: about 25KB of data when using 128 byte records + const generator = { + /** + * @param callback callback function that is called with each chunk read. Reading will stop immediately when false is returned + * @returns returns a promise that resolves when all data is read + */ + async next(callback) { + return read(callback); + }, + }; + const read = async (callback) => { + const fileIndex = this.storage.getRecordFileIndex(this.address.pageNr, this.address.recordNr); + if (this.recordInfo === null) { + await this.readHeader(); + } + const recordInfo = this.recordInfo; + // Divide all allocation ranges into chunks of maxRecordsPerChunk + const ranges = recordInfo.allocation.ranges; + const chunks = []; // nicer approach would be: const chunks = ranges.reduce((chunks, range) => { ... }, []); + let totalBytes = 0; + ranges.forEach((range, i) => { + let chunk = { + pageNr: range.pageNr, + recordNr: range.recordNr, + length: range.length, + }; + let chunkLength = (chunk.length * bytesPerRecord); + if (i === ranges.length - 1) { + chunkLength -= bytesPerRecord; + chunkLength += recordInfo.lastRecordLength; + } + totalBytes += chunkLength; + if (i === 0 && chunk.length > 1) { + // Split, first chunk contains start data only + const remaining = chunk.length - 1; + chunk.length = 1; + chunks.push(chunk); + chunk = { + pageNr: chunk.pageNr, + recordNr: chunk.recordNr + 1, + length: remaining, + }; + } + while (chunk.length > maxRecordsPerChunk) { + // Split so the chunk has maxRecordsPerChunk + const remaining = chunk.length - maxRecordsPerChunk; + chunk.length = maxRecordsPerChunk; + chunks.push(chunk); + chunk = { + pageNr: chunk.pageNr, + recordNr: chunk.recordNr + maxRecordsPerChunk, + length: remaining, + }; + } + chunks.push(chunk); + }); + const isLastChunk = chunks.length === 1; + // Run callback with the first chunk (and possibly the only chunk) already read + // TODO: Refactor to get additional data first, then run first callback + const firstChunkData = recordInfo.startData; + let headerBytesSkipped = recordInfo.bytesPerRecord - firstChunkData.length; + const { valueType, hasKeyIndex, headerLength, lastRecordLength } = recordInfo; + let proceed = firstChunkData.length === 0 || (await callback({ + data: firstChunkData, + valueType, + chunks, + chunkIndex: 0, + totalBytes, + hasKeyTree: hasKeyIndex, + fileIndex, + headerLength, + }) !== false); + if (isLastChunk) { + proceed = false; + } + let index = 1; + while (proceed) { + //this.storage.debug.log(address.path); + const chunk = chunks[index]; + let fileIndex = this.storage.getRecordFileIndex(chunk.pageNr, chunk.recordNr); + let length = chunk.length * bytesPerRecord; + if (headerBytesSkipped < recordInfo.headerLength) { + // How many more header bytes to skip? + const remainingHeaderBytes = recordInfo.headerLength - headerBytesSkipped; + const skip = Math.min(remainingHeaderBytes, length); + fileIndex += skip; + length -= skip; + headerBytesSkipped += skip; + if (length == 0) { + index++; + continue; + } + } + const isLastChunk = index + 1 === chunks.length; + if (isLastChunk) { + length -= bytesPerRecord - lastRecordLength; + } + const data = new Uint8Array(length); + const bytesRead = await this.storage.readData(fileIndex, data); + proceed = await callback({ + data, + valueType, + chunks, + chunkIndex: index, + totalBytes, + hasKeyTree: hasKeyIndex, + fileIndex, + headerLength, + }) !== false; + if (isLastChunk) { + proceed = false; + } + index++; + } + return { valueType, chunks }; + }; + return generator; + } + /** + * Starts reading this record, returns a generator that fires `.next` for each child key until the callback function returns false. The generator (.next) returns a promise that resolves when all child keys have been processed, or was cancelled because false was returned in the generator callback + * @param options optional options: keyFilter specific keys to get, offers performance and memory improvements when searching specific keys + * @returns returns a generator that is called for each child. return false from your `.next` callback to stop iterating + */ + getChildStream(options = {}) { + this._assertLock(); + let callback; + let isAsync = false; + let childCount = 0; + const generator = { + async next(cb, useAsync = false) { + callback = cb; + isAsync = useAsync; + return start(); + }, + }; + let isArray = false; + const start = async () => { + if (this.recordInfo === null) { + await this.readHeader(); + } + isArray = this.recordInfo.valueType === VALUE_TYPES.ARRAY; + if (this.recordInfo.hasKeyIndex) { + return createStreamFromBinaryTree(); + } + else if (this.recordInfo.allocation.addresses.length === 1) { + // We have all data in memory (small record) + return createStreamFromLinearData(this.recordInfo.startData, true); + } + else { + return this.getDataStream() + .next(({ data, chunks, chunkIndex }) => { + const isLastChunk = chunkIndex === chunks.length - 1; + return createStreamFromLinearData(data, isLastChunk); //, fileIndex + }); + } + }; + // Gets children from a indexed binary tree of key/value data + const createStreamFromBinaryTree = async () => { + const tree = new BinaryBPlusTree(this._treeDataReader.bind(this)); + tree.id = `path:${this.address.path}`; // Prefix to fix #168 + let canceled = false; + if (options.keyFilter) { + // Only get children for requested keys + // for (let i = 0; i < options.keyFilter.length; i++) { + // const key = options.keyFilter[i]; + // const value = await tree.find(key).catch(err => { + // console.error(`Error reading tree for node ${this.address}: ${err.message}`, err); + // throw err; + // }); + // if (value === null) { continue; /* Key not found? */ } + // const childInfo = isArray ? new NodeInfo({ path: `${this.address.path}[${key}]`, index: key }) : new NodeInfo({ path: `${this.address.path}/${key}`, key }); + // const res = getValueFromBinary(childInfo, value.recordPointer, 0); + // if (!res.skip) { + // let result = callback(childInfo, i); + // if (isAsync && result instanceof Promise) { result = await result; } + // canceled = result === false; // Keep going until callback returns false + // if (canceled) { break; } + // } + // } + // NEW: let B+Tree lookup all requested keys for drastic performance improvement, especially when all keys are new (> last key in tree) + const results = await tree.findAll(options.keyFilter, { existingOnly: true }); + let i = 0; + for (const { key, value } of results) { + const childInfo = isArray + ? new BinaryNodeInfo({ path: `${this.address.path}[${key}]`, index: key }) + : new BinaryNodeInfo({ path: `${this.address.path}/${key}`, key: key }); + const res = getValueFromBinary(childInfo, value.recordPointer, 0); + if (!res.skip) { + let result = callback(childInfo, i++); + if (isAsync && result instanceof Promise) { + result = await result; + } + canceled = result === false; // Keep going until callback returns false + if (canceled) { + break; + } + } + } + } + else { + // Loop the tree leafs, run callback for each child + let leaf = await tree.getFirstLeaf(); + while (leaf) { + const children = leaf.entries.reduce((nodes, entry) => { + const child = isArray + ? new BinaryNodeInfo({ path: `${this.address.path}[${entry.key}]`, index: entry.key }) + : new BinaryNodeInfo({ path: `${this.address.path}/${entry.key}`, key: entry.key }); + const res = getValueFromBinary(child, entry.value.recordPointer, 0); + if (!res.skip) { + nodes.push(child); + } + return nodes; + }, []); + for (let i = 0; !canceled && i < children.length; i++) { + let result = callback(children[i], i); + if (isAsync && result instanceof Promise) { + result = await result; + } + canceled = result === false; // Keep going until callback returns false + } + leaf = !canceled && leaf.getNext ? await leaf.getNext() : null; + } + } + return !canceled; + }; + // To get values from binary data: + const getValueFromBinary = (child, binary, index) => { + // const startIndex = index; + const assert = (bytes) => { + if (index + bytes > binary.length) { + throw new AdditionalDataRequest(); + } + }; + assert(2); + child.type = binary[index] >> 4; + //let value, address; + const tinyValue = binary[index] & 0xf; + const valueInfo = binary[index + 1]; + const isRemoved = child.type === 0; + const unusedDataLength = isRemoved ? valueInfo : 0; + const isTinyValue = (valueInfo & 192) === 64; + const isInlineValue = (valueInfo & 192) === 128; + const isRecordValue = (valueInfo & 192) === 192; + index += 2; + if (isRemoved) { + if (!REMOVED_CHILD_DATA_IMPLEMENTED) { + throw new Error('corrupt: removed child data isn\'t implemented yet'); + } + // NOTE: will not happen yet because record saving currently rewrites + // whole records on updating. Adding new/updated data to the end of a + // record will offer performance improvements. Rewriting a whole new record + // can then be scheduled upon x updates + assert(unusedDataLength); + index += unusedDataLength; + child.exists = false; + return { index, skip: true }; // Don't add this child + } + else if (isTinyValue) { + if (child.type === VALUE_TYPES.BOOLEAN) { + child.value = tinyValue === 1; + } + else if (child.type === VALUE_TYPES.NUMBER) { + child.value = tinyValue; + } + else if (child.type === VALUE_TYPES.BIGINT) { + child.value = BigInt(tinyValue); + } + else if (child.type === VALUE_TYPES.STRING) { + child.value = ''; + } + else if (child.type === VALUE_TYPES.ARRAY) { + child.value = []; + } + else if (child.type === VALUE_TYPES.OBJECT) { + child.value = {}; + } + else if (child.type === VALUE_TYPES.BINARY) { + child.value = new ArrayBuffer(0); + } + else if (child.type === VALUE_TYPES.REFERENCE) { + child.value = new PathReference(''); + } + else { + throw new Error(`Tiny value deserialization method missing for value type ${child.type}`); + } + } + else if (isInlineValue) { + const length = (valueInfo & 63) + 1; + assert(length); + const bytes = binary.slice(index, index + length); + if (child.type === VALUE_TYPES.NUMBER) { + child.value = bytesToNumber(bytes); + } + else if (child.type === VALUE_TYPES.BIGINT) { + child.value = bytesToBigint(bytes); + } + else if (child.type === VALUE_TYPES.STRING) { + child.value = decodeString(bytes); // textDecoder.decode(Uint8Array.from(bytes)); + } + else if (child.type === VALUE_TYPES.DATETIME) { + const time = bytesToNumber(bytes); + child.value = new Date(time); + } + //else if (type === VALUE_TYPES.ID) { value = new ID(bytes); } + else if (child.type === VALUE_TYPES.ARRAY) { + throw new Error('Inline array deserialization not implemented'); + } + else if (child.type === VALUE_TYPES.OBJECT) { + throw new Error('Inline object deserialization not implemented'); + } + else if (child.type === VALUE_TYPES.BINARY) { + child.value = new Uint8Array(bytes).buffer; + } + else if (child.type === VALUE_TYPES.REFERENCE) { + const path = decodeString(bytes); // textDecoder.decode(Uint8Array.from(bytes)); + child.value = new PathReference(path); + } + else { + throw new Error(`Inline value deserialization method missing for value type ${child.type}`); + } + index += length; + } + else if (isRecordValue) { + // Record address + assert(6); + if (typeof binary.buffer === 'undefined') { + binary = new Uint8Array(binary); + } + const view = new DataView(binary.buffer, binary.byteOffset + index, 6); + const pageNr = view.getUint32(0); + const recordNr = view.getUint16(4); + const childPath = isArray ? `${this.address.path}[${child.index}]` : this.address.path === '' ? child.key : `${this.address.path}/${child.key}`; + child.address = new BinaryNodeAddress(childPath, pageNr, recordNr); + // Cache anything that comes along + // TODO: Consider moving this to end of function so it caches small values as well + if (this.updateCache) { + this.storage.updateCache(false, child, false); + } + if (child.address && child.address.equals(this.address)) { + throw new Error('Circular reference in record data'); + } + index += 6; + } + else { + throw new Error('corrupt'); + } + //child.file.length = index - startIndex; + return { index }; + }; + // Gets children from a chunk of data, linear key/value pairs: + let incompleteData = null; + const getChildrenFromChunk = (valueType, binary) => { + if (incompleteData !== null) { + //chunkStartIndex -= incompleteData.length; + binary = concatTypedArrays(incompleteData, binary); + incompleteData = null; + } + const children = []; + if (valueType === VALUE_TYPES.OBJECT || valueType === VALUE_TYPES.ARRAY) { + isArray = valueType === VALUE_TYPES.ARRAY; + let index = 0; + const assert = (bytes) => { + if (index + bytes > binary.length) { // binary.byteOffset + ... > + throw new AdditionalDataRequest(); + } + }; + // Index child keys or array indexes + while (index < binary.length) { + const startIndex = index; + const child = new BinaryNodeInfo({}); + try { + if (isArray) { + const childIndex = childCount; // childCount is now incremented at the end of try block, to avoid missing index(es) upon TruncatedDataErrors + child.path = PathInfo.getChildPath(this.address.path, childIndex); + child.index = childIndex; + } + else { + assert(2); + const keyIndex = (binary[index] & 128) === 0 ? -1 : (binary[index] & 127) << 8 | binary[index + 1]; + if (keyIndex >= 0) { + child.key = this.storage.KIT.keys[keyIndex]; + child.path = PathInfo.getChildPath(this.address.path, child.key); + index += 2; + } + else { + const keyLength = (binary[index] & 127) + 1; + index++; + assert(keyLength); + let key = ''; + for (let i = 0; i < keyLength; i++) { + key += String.fromCharCode(binary[index + i]); + } + child.key = key; + child.path = PathInfo.getChildPath(this.address.path, key); + index += keyLength; + } + } + const res = getValueFromBinary(child, binary, index); + index = res.index; + childCount++; + if (res.skip) { + continue; + } + else if (!isArray && options.keyFilter && !options.keyFilter.includes(child.key)) { + continue; + } + else if (isArray && options.keyFilter && !options.keyFilter.includes(child.index)) { + continue; + } + children.push(child); + } + catch (err) { + if (err instanceof AdditionalDataRequest) { + incompleteData = binary.slice(startIndex); + break; + } + else { + throw err; + } + } + // next + } + } + return children; + }; + const createStreamFromLinearData = async (chunkData, isLastChunk) => { + const children = getChildrenFromChunk(this.recordInfo.valueType, chunkData); //, chunkStartIndex); + let canceled = false; + for (let i = 0; !canceled && i < children.length; i++) { + const child = children[i]; + let result = callback(child, i); + if (isAsync && result instanceof Promise) { + result = await result; + } + canceled = result === false; // Keep going until callback returns false + } + if (canceled || isLastChunk) { + return false; + } + }; + return generator; + } + /** + * Gets the number of children of this node. + * NEEDS OPTIMIZATION - currently uses getChildStream to get count, + * but this is quite heavy for the purpose + */ + async getChildCount() { + let count = 0; + await this.getChildStream() + .next(childInfo => { + count++; + return true; // next! + }); + return count; + } + /** + * Retrieves information about a specific child by key name or index + * @param key key name or index number + * @returns returns a Promise that resolves with BinaryNodeInfo of the child + */ + async getChildInfo(key) { + let childInfo = null; + await this.getChildStream({ keyFilter: [key] }) + .next(info => { + childInfo = info; + }); + if (childInfo) { + return childInfo; + } + const childPath = PathInfo.getChildPath(this.address.path, key); + return new BinaryNodeInfo({ + path: childPath, + ...(typeof key === 'string' && { key: key }), + ...(typeof key === 'number' && { index: key }), + exists: false, + }); + } + async _treeDataWriter(binary, index) { + if (binary instanceof Array) { + binary = Buffer.from(binary); + } + const length = binary.length; + const recordSize = this.storage.settings.recordSize; + const headerLength = this.recordInfo.headerLength; + const startRecord = { + nr: Math.floor((headerLength + index) / recordSize), + offset: (headerLength + index) % recordSize, + }; + const endRecord = { + nr: Math.floor((headerLength + index + length) / recordSize), + offset: (headerLength + index + length) % recordSize, + }; + const writeRecords = this.recordInfo.allocation.addresses.slice(startRecord.nr, endRecord.nr + 1); + const writeRanges = NodeAllocation.fromAdresses(writeRecords).ranges; + const writes = []; + let bOffset = 0; + for (let i = 0; i < writeRanges.length; i++) { + const range = writeRanges[i]; + let fIndex = this.storage.getRecordFileIndex(range.pageNr, range.recordNr); + let bLength = range.length * recordSize; + if (i === 0) { + fIndex += startRecord.offset; + bLength -= startRecord.offset; + } + if (bOffset + bLength > length) { + bLength = length - bOffset; + } + const p = this.storage.writeData(fIndex, binary, bOffset, bLength); + writes.push(p); + bOffset += bLength; + } + return Promise.all(writes); + } + // Translates requested data index and length to actual record data location and reads it + async _treeDataReader(index, length) { + // console.log(`...read request for index ${index}, length ${length}...`); + const recordSize = this.storage.settings.recordSize; + const headerLength = this.recordInfo.headerLength; + const startRecord = { + nr: Math.floor((headerLength + index) / recordSize), + offset: (headerLength + index) % recordSize, + }; + const endRecord = { + nr: Math.floor((headerLength + index + length) / recordSize), + offset: (headerLength + index + length) % recordSize, + }; + const readRecords = this.recordInfo.allocation.addresses.slice(startRecord.nr, endRecord.nr + 1); + if (readRecords.length === 0) { + throw new Error('Attempt to read non-existing records'); + } + const readRanges = NodeAllocation.fromAdresses(readRecords).ranges; + const reads = []; + const totalLength = (readRecords.length * recordSize) - startRecord.offset; + const binary = new Uint8Array(totalLength); + let bOffset = 0; + for (let i = 0; i < readRanges.length; i++) { + const range = readRanges[i]; + let fIndex = this.storage.getRecordFileIndex(range.pageNr, range.recordNr); + let bLength = range.length * recordSize; + if (i === 0) { + fIndex += startRecord.offset; + bLength -= startRecord.offset; + } + const p = this.storage.readData(fIndex, binary, bOffset, bLength); + reads.push(p); + bOffset += bLength; + } + await Promise.all(reads); + return Buffer.from(binary.buffer); + } + async readHeader() { + this._assertLock(); + // console.error(`NodeReader.readHeader ${this.address}, tid ${this.lock.tid}`); + const bytesPerRecord = this.storage.settings.recordSize; + const fileIndex = this.storage.getRecordFileIndex(this.address.pageNr, this.address.recordNr); + let data = new Uint8Array(bytesPerRecord); + const bytesRead = await this.storage.readData(fileIndex, data.buffer); + if (bytesRead < bytesPerRecord) { + throw new Error(`Not enough bytes read from file at index ${fileIndex}, expected ${bytesPerRecord} but got ${bytesRead}`); + } + const hasKeyIndex = (data[0] & FLAG_KEY_TREE) === FLAG_KEY_TREE; + const valueType = data[0] & FLAG_VALUE_TYPE; // Last 4-bits of first byte of read data has value type + // Read Chunk Table + let view = new DataView(data.buffer); + let offset = 1; + const firstRange = new StorageAddressRange(this.address.pageNr, this.address.recordNr, 1); + /** @type {StorageAddressRange[]} */ + const ranges = [firstRange]; + const allocation = new NodeAllocation(ranges); + let readingRecordIndex = 0; + let done = false; + while (!done) { + if (offset + 9 + 2 >= data.length) { + // Read more data (next record) + readingRecordIndex++; + const address = allocation.addresses[readingRecordIndex]; + const fileIndex = this.storage.getRecordFileIndex(address.pageNr, address.recordNr); + const moreData = new Uint8Array(bytesPerRecord); + await this.storage.readData(fileIndex, moreData.buffer); + data = concatTypedArrays(data, moreData); + view = new DataView(data.buffer); + } + const type = view.getUint8(offset); + if (type === 0) { + // No more chunks, exit + offset++; + done = true; + } + else if (type === 1) { + // First chunk is longer than the 1 record already read + firstRange.length = view.getUint16(offset + 1); + offset += 3; + } + else if (type === 2) { + // Next chunk is location somewhere else (not contigious) + const pageNr = view.getUint32(offset + 1); + const recordNr = view.getUint16(offset + 5); + const length = view.getUint16(offset + 7); + const range = new StorageAddressRange(pageNr, recordNr, length); + ranges.push(range); + offset += 9; + } + else if (type === 3) { + // NEW Next chunk is a number of contigious pages (large!) + // NOT IMPLEMENTED YET + const pageNr = view.getUint32(offset + 1); + const totalPages = view.getUint16(offset + 5); + const range = new StorageAddressRange(pageNr, 0, totalPages * this.storage.settings.pageSize); + ranges.push(range); + offset += 7; + } + else { + throw new TypeError(`Unknown chunk type ${type} while reading record at ${this.address}`); + } + } + const lastRecordDataLength = view.getUint16(offset); + offset += 2; + const headerLength = offset; + // const allocation = new NodeAllocation(ranges); + const firstRecordDataLength = ranges.length === 1 && ranges[0].length == 1 + ? lastRecordDataLength + : bytesPerRecord - headerLength; + this.recordInfo = new RecordInfo(this.address.path, hasKeyIndex, valueType, allocation, headerLength, lastRecordDataLength, bytesPerRecord, data.slice(headerLength, headerLength + firstRecordDataLength)); + return this.recordInfo; + } + getChildTree() { + if (this.recordInfo === null) { + throw new Error('record info hasn\'t been read yet'); + } + if (!this.recordInfo.hasKeyIndex) { + throw new Error('record has no key index tree'); + } + return new BinaryBPlusTree(this._treeDataReader.bind(this), 1024 * 100, // 100KB reads/writes + this._treeDataWriter.bind(this), 'record@' + this.recordInfo.address.toString()); + } +} +/** + * Merges an existing node with given updates + */ +async function _mergeNode(storage, nodeInfo, updates, lock) { + if (typeof updates !== 'object') { + throw new TypeError('updates parameter must be an object'); + } + let nodeReader = new NodeReader(storage, nodeInfo.address, lock, false); + const affectedKeys = Object.keys(updates); + const changes = new NodeChangeTracker(nodeInfo.path); + const discardAllocation = new NodeAllocation([]); + let isArray = false; + let isInternalUpdate = false; + let recordInfo = await nodeReader.readHeader(); + isArray = recordInfo.valueType === VALUE_TYPES.ARRAY; + nodeInfo.type = recordInfo.valueType; // Set in nodeInfo too, because it might be unknown + let recordMoved = false; + const done = (newRecordInfo) => { + if (newRecordInfo !== nodeReader.recordInfo) { + // release the old record allocation + discardAllocation.ranges.push(...nodeReader.recordInfo.allocation.ranges); + recordMoved = true; + } + // Necessary? + storage.updateCache(false, new BinaryNodeInfo({ path: nodeInfo.path, type: nodeInfo.type, address: newRecordInfo.address, exists: true }), recordMoved); + return { recordMoved, recordInfo: newRecordInfo, deallocate: discardAllocation }; + }; + const childValuePromises = []; + if (isArray) { + // keys to update must be integers + for (let i = 0; i < affectedKeys.length; i++) { + if (isNaN(affectedKeys[i])) { + throw new Error(`Cannot merge existing array of path "${nodeInfo.path}" with an object (properties ${Object.keys(updates).slice(0, 5).map(p => `"${p}"`).join(',')}...)`); + } + affectedKeys[i] = +affectedKeys[i]; // Now an index + } + } + const newKeys = affectedKeys.slice(); + await nodeReader.getChildStream({ keyFilter: affectedKeys }) + .next(child => { + const keyOrIndex = isArray ? child.index : child.key; + newKeys.splice(newKeys.indexOf(keyOrIndex), 1); // Remove from newKeys array, it exists already + const newValue = updates[keyOrIndex]; + // Get current value + if (child.address) { + if (newValue instanceof InternalNodeReference) { + // This update originates from a child node update, its record location changed + // so we only have to update the reference to the new location + isInternalUpdate = true; + const oldAddress = child.address; //child.storedAddress || child.address; + const currentValue = new InternalNodeReference(child.type, oldAddress); + changes.add(keyOrIndex, currentValue, newValue); + return true; // Proceed with next (there is no next, right? - this update must has have been triggered by child node that moved, the parent node only needs to update the reference to the child node) + } + // Child is stored in own record, and it is updated or deleted so we need to get + // its allocation so we can release it when updating is done + const promise = storage.nodeLocker.lock(child.address.path, lock.tid, false, `_mergeNode: read child "/${child.address.path}"`) + .then(async (childLock) => { + const childReader = new NodeReader(storage, child.address, childLock, false); + const allocation = await childReader.getAllocation(true); + childLock.release(); + discardAllocation.ranges.push(...allocation.ranges); + const currentChildValue = new InternalNodeReference(child.type, child.address); + changes.add(keyOrIndex, currentChildValue, newValue); + }); + childValuePromises.push(promise); + } + else { + changes.add(keyOrIndex, child.value, newValue); + } + }); + await Promise.all(childValuePromises); + // Check which keys we haven't seen (were not in the current node), these will be added + newKeys.forEach(key => { + const newValue = updates[key]; + if (newValue !== null) { + changes.add(key, null, newValue); + } + }); + if (changes.all.length === 0) { + storage.debug.log(`No effective changes to update node "/${nodeInfo.path}" with`.colorize(ColorStyle.yellow)); + return done(nodeReader.recordInfo); + } + if (isArray) { + // Check if resulting array is dense: every item must have a value, no gaps allowed + const getSequenceInfo = (changes) => { + const indice = changes.map(ch => ch.keyOrIndex).sort(); // sorted from low index to high index + const gaps = indice.map((_, i, arr) => i === 0 ? 0 : arr[i - 1] - arr[i]); + return { indice, hasGaps: gaps.some(g => g > 1) }; + }; + const deleteSeqInfo = getSequenceInfo(changes.deletes); + const insertSeqInfo = getSequenceInfo(changes.inserts); + let isSparse = deleteSeqInfo.hasGaps || deleteSeqInfo.hasGaps; + if (!isSparse && changes.deletes.length > 0) { + // Only allow deletes at the end of an array, check if is there's an entry with a higher index + const highestIndex = deleteSeqInfo.indice.slice(-1)[0]; + const nextEntryInfo = await nodeReader.getChildInfo(highestIndex + 1); + if (nextEntryInfo.exists) { + isSparse = true; + } + } + if (!isSparse && changes.inserts.length > 0) { + // Only allow inserts at the end of an array, check if there's an entry with a lower index + const lowestIndex = insertSeqInfo.indice[0]; + if (lowestIndex > 0) { + const prevEntryInfo = await nodeReader.getChildInfo(lowestIndex - 1); + if (!prevEntryInfo.exists) { + isSparse = true; + } + } + } + if (isSparse) { + throw new Error(`Elements cannot be inserted beyond, or removed before the end of an array. Rewrite the whole array at path "${nodeInfo.path}" or change your schema to use an object collection instead`); + } + } + const maxDebugItems = 10; + storage.debug.log(`Node "/${nodeInfo.path}" being updated:${isInternalUpdate ? ' (internal)' : ''} adding ${changes.inserts.length} keys (${changes.inserts.slice(0, maxDebugItems).map(ch => `"${ch.keyOrIndex}"`).join(',')}${changes.inserts.length > maxDebugItems ? '...' : ''}), updating ${changes.updates.length} keys (${changes.updates.slice(0, maxDebugItems).map(ch => `"${ch.keyOrIndex}"`).join(',')}${changes.updates.length > maxDebugItems ? '...' : ''}), removing ${changes.deletes.length} keys (${changes.deletes.slice(0, maxDebugItems).map(ch => `"${ch.keyOrIndex}"`).join(',')}${changes.deletes.length > maxDebugItems ? '...' : ''})`.colorize(ColorStyle.cyan)); + if (!isInternalUpdate) { + // Update cache (remove entries or mark them as deleted) + // const pathInfo = PathInfo.get(nodeInfo.path); + // const invalidatePaths = changes.all + // .filter(ch => !(ch.newValue instanceof InternalNodeReference)) + // .map(ch => { + // const childPath = pathInfo.childPath(ch.keyOrIndex); + // return { + // path: childPath, + // pathInfo: PathInfo.get(childPath), + // action: ch.changeType === NodeChange.CHANGE_TYPE.DELETE ? 'delete' : 'invalidate' + // }; + // }); + // storage.invalidateCache(false, nodeInfo.path, false, 'mergeNode'); + // invalidatePaths.forEach(item => { + // if (item.action === 'invalidate') { storage.invalidateCache(false, item.path, true, 'mergeNode'); } + // else { storage.nodeCache.delete(item.path); } + // }); + const inv = changes.all + .filter(ch => !(ch.newValue instanceof InternalNodeReference)) + .reduce((obj, ch) => { + obj[ch.keyOrIndex] = ch.changeType === NodeChange.CHANGE_TYPE.DELETE ? 'delete' : 'invalidate'; + return obj; + }, {}); + storage.invalidateCache(false, nodeInfo.path, inv, 'mergeNode'); + } + // What we need to do now is make changes to the actual record data. + // The record is either a binary B+Tree (larger records), + // or a list of key/value pairs (smaller records). + // let updatePromise; + let newRecordInfo; + if (nodeReader.recordInfo.hasKeyIndex) { + // Try to have the binary B+Tree updated. If there is not enough free space for this + // (eg, if a leaf to add to is full), we have to rebuild the whole tree and write new records + const pathInfo = PathInfo.get(nodeInfo.path); + const childPromises = []; + for (const change of changes.all) { + // changes.all.forEach(change => { + const childPath = pathInfo.childPath(change.keyOrIndex); //PathInfo.getChildPath(nodeInfo.path, change.keyOrIndex); + if (change.oldValue !== null) { + const kvp = _serializeValue(storage, childPath, change.keyOrIndex, change.oldValue, null); + if (!(kvp instanceof SerializedKeyValue)) { + throw new Error('return value must be of type SerializedKeyValue, it cannot be a Promise!'); + } + const bytes = _getValueBytes(kvp); + change.oldValue = bytes; + } + if (change.newValue !== null) { + const s = _serializeValue(storage, childPath, change.keyOrIndex, change.newValue, lock.tid); + const convert = (kvp) => { + const bytes = _getValueBytes(kvp); + change.newValue = bytes; + }; + if (s instanceof Promise) { + childPromises.push(s.then(convert)); + } + else { + convert(s); + } + } + // if (childPromises.length === 100) { + // // Too many promises. Wait before continuing? + // await Promise.all(childPromises.splice(0)); + // } + } //); + const operations = []; + let tree = nodeReader.getChildTree(); + await Promise.all(childPromises); + changes.deletes.forEach(change => { + const op = BinaryBPlusTree.TransactionOperation.remove(change.keyOrIndex, change.oldValue); + operations.push(op); + }); + changes.updates.forEach(change => { + const oldEntryValue = new BinaryBPlusTree.EntryValue(change.oldValue); + const newEntryValue = new BinaryBPlusTree.EntryValue(change.newValue); + const op = BinaryBPlusTree.TransactionOperation.update(change.keyOrIndex, newEntryValue, oldEntryValue); + operations.push(op); + }); + changes.inserts.forEach(change => { + const op = BinaryBPlusTree.TransactionOperation.add(change.keyOrIndex, change.newValue); + operations.push(op); + }); + // Changed behaviour: + // previously, if 1 operation failed, the tree was rebuilt. If any operation thereafter failed, it stopped processing + // now, processOperations() will be called after each rebuild, so all operations will be processed + const opCountsLog = [], fixHistory = []; + const processOperations = async (retry = 0) => { + if (retry > 2 && operations.length === opCountsLog[opCountsLog.length - 1]) { + // Number of pending operations did not decrease after 2 possible tree fixes + throw new Error(`DEV: Applied tree fixes did not change ${operations.length} pending operation(s) failing to execute. Debug this, check fixHistory!`); + } + opCountsLog.push(operations.length); + try { + await tree.transaction(operations); + storage.debug.log(`Updated tree for node "/${nodeInfo.path}"`.colorize(ColorStyle.green)); + return recordInfo; // We do our own cleanup, return current allocation which is always the same as nodeReader.recordInfo + } + catch (err) { + storage.debug.log(`Could not update tree for "/${nodeInfo.path}"${retry > 0 ? ` (retry ${retry})` : ''}: ${err.message}, ${err.codes}`.colorize(ColorStyle.yellow)); + if (err.hasErrorCode && err.hasErrorCode('tree-full-no-autogrow')) { + storage.debug.verbose('Tree needs more space'); + const growBytes = Math.ceil(tree.info.byteLength * 0.1); // grow 10% + const bytesRequired = tree.info.byteLength + growBytes; + fixHistory.push({ err, fix: 'grow', from: tree.info.byteLength, to: bytesRequired, growBytes }); + // Copy from original allocation to new allocation + let sourceIndex = 0; + const originalLength = tree.info.byteLength; + const reader = async (length) => { + let data; + if (sourceIndex > originalLength) { + // 0s only + data = new Uint8Array(length); + } + else { + const readLength = sourceIndex + length < originalLength ? length : originalLength - sourceIndex; + data = await nodeReader._treeDataReader(sourceIndex, readLength); + if (data.length < length) { + // Append 0s + data = concatTypedArrays(new Uint8Array(data), new Uint8Array(length - data.length)); + } + else if (data.length > length) { + // cut off unrequested bytes. TODO: check _treeDataReader logic + data = data.slice(0, length); + } + } + sourceIndex += data.byteLength; + return data; + }; + tree.info.byteLength = bytesRequired; + tree.info.freeSpace += growBytes; + await tree.writeAllocationBytes(); + recordInfo = await _write(storage, nodeInfo.path, nodeReader.recordInfo.valueType, bytesRequired, true, reader, nodeReader.recordInfo); + } + else { + // Failed to update the binary data, we need to recreate the whole tree + // console.log(err); + storage.debug.verbose('Tree needs rebuild'); + fixHistory.push({ err, fix: 'rebuild' }); + // NEW: Rebuild tree to a temp file + const tempFilepath = `${storage.settings.path}/${storage.name}.acebase/tree-${ID.generate()}.tmp`; + let bytesWritten = 0; + const fd = await pfs.open(tempFilepath, pfs.flags.readAndWriteAndCreate); + const writer = BinaryWriter.forFunction(async (data, index) => { + await pfs.write(fd, data, 0, data.length, index); + bytesWritten += data.length; + }); + await tree.rebuild(writer, { reserveSpaceForNewEntries: changes.inserts.length - changes.deletes.length }); // TODO: update changes with already processed! + // Now write the record with data read from the temp file + let readOffset = 0; + const reader = async (length) => { + const buffer = new Uint8Array(length); + const { bytesRead } = await pfs.read(fd, buffer, 0, buffer.length, readOffset); + readOffset += bytesRead; + if (bytesRead < length) { + return buffer.slice(0, bytesRead); // throw new Error(`Failed to read ${length} bytes from file, only got ${bytesRead}`); + } + return buffer; + }; + recordInfo = await _write(storage, nodeInfo.path, nodeReader.recordInfo.valueType, bytesWritten, true, reader, nodeReader.recordInfo); + // Close and remove the tmp file, don't wait for this + pfs.close(fd) + .then(() => pfs.rm(tempFilepath)) + .catch(err => { + // Error removing the file? + storage.debug.error(`Can't remove temp rebuild file ${tempFilepath}: `, err); + }); + } + if (recordInfo !== nodeReader.recordInfo) { + // release previous allocation + discardAllocation.ranges.push(...nodeReader.recordInfo.allocation.ranges); + recordMoved = true; + } + // Create new node reader and new tree + nodeReader = new NodeReader(storage, recordInfo.address, lock, false); + recordInfo = await nodeReader.readHeader(); + tree = new BinaryBPlusTree(nodeReader._treeDataReader.bind(nodeReader), 1024 * 100, // 100KB reads/writes + nodeReader._treeDataWriter.bind(nodeReader), 'record@' + nodeReader.recordInfo.address.toString()); + // // Retry remaining operations + return processOperations(retry + 1); + } + }; + newRecordInfo = await processOperations(); + } + else { + // This is a small record. In the future, it might be nice to make changes + // in the record itself, but let's just rewrite it for now. + // Record (de)allocation is managed by _writeNode + const mergedValue = isArray ? [] : {}; + await nodeReader.getChildStream() + .next(child => { + const keyOrIndex = isArray ? child.index : child.key; + if (child.address) { //(child.storedAddress || child.address) { + //mergedValue[keyOrIndex] = new InternalNodeReference(child.type, child.storedAddress || child.address); + mergedValue[keyOrIndex] = new InternalNodeReference(child.type, child.address); + } + else { + mergedValue[keyOrIndex] = child.value; + } + }); + changes.deletes.forEach(change => { + delete mergedValue[change.keyOrIndex]; + }); + changes.updates.forEach(change => { + mergedValue[change.keyOrIndex] = change.newValue; + }); + changes.inserts.forEach(change => { + mergedValue[change.keyOrIndex] = change.newValue; + }); + if (isArray) { + mergedValue.length += changes.inserts.length - changes.deletes.length; + } + // Check below has moved to more extensive test above which is done before the cache is altered - fixes an issue! + // if (isArray) { + // const isExhaustive = Object.keys(mergedValue).every((key, i) => +key === i); // test if there are gaps in the array (eg misses value at index 3) + // if (!isExhaustive) { + // throw new Error(`Elements cannot be inserted beyond, or removed before the end of an array. Rewrite the whole array at path "${nodeInfo.path}" or change your schema to use an object collection instead`); + // } + // } + newRecordInfo = await _writeNode(storage, nodeInfo.path, mergedValue, lock, nodeReader.recordInfo); + } + return done(newRecordInfo); +} +/** + * Creates or overwrites a node + */ +async function _createNode(storage, nodeInfo, newValue, lock, invalidateCache = true) { + storage.debug.log(`Node "/${nodeInfo.path}" is being ${nodeInfo.exists ? 'overwritten' : 'created'}`.colorize(ColorStyle.cyan)); + let currentAllocation = null; + if (nodeInfo.exists && nodeInfo.address) { + // Current value occupies 1 or more records we can probably reuse. + // For now, we'll allocate new records though, then free the old allocation + const nodeReader = new NodeReader(storage, nodeInfo.address, lock, false); //Node.getReader(storage, nodeInfo.address, lock); + currentAllocation = await nodeReader.getAllocation(true); + } + if (invalidateCache) { + storage.invalidateCache(false, nodeInfo.path, nodeInfo.exists, 'createNode'); // remove cache + } + const recordInfo = await _writeNode(storage, nodeInfo.path, newValue, lock); + return { recordMoved: true, recordInfo, deallocate: currentAllocation }; +} +async function _lockAndWriteNode(storage, path, value, parentTid) { + const lock = await storage.nodeLocker.lock(path, parentTid.toString(), true, `_lockAndWrite "${path}"`); + try { + const recordInfo = await _writeNode(storage, path, value, lock); + return recordInfo; + } + finally { + lock.release(); + } +} +async function _writeNode(storage, path, value, lock, currentRecordInfo) { + if (lock.path !== path || !lock.forWriting) { + throw new Error(`Cannot write to node "/${path}" because lock is on the wrong path or not for writing`); + } + const write = (valueType, buffer, keyTree = false) => { + let readOffset = 0; + const reader = (length) => { + const slice = buffer.slice(readOffset, readOffset + length); + readOffset += length; + return slice; + }; + return _write(storage, path, valueType, buffer.length, keyTree, reader, currentRecordInfo); + }; + if (typeof value === 'string') { + return write(VALUE_TYPES.STRING, encodeString(value)); + } + else if (typeof value === 'bigint') { + return write(VALUE_TYPES.BIGINT, bigintToBytes(value)); // better called "HugeInt" if it has to be stored in its own record! + } + else if (value instanceof PathReference) { + return write(VALUE_TYPES.REFERENCE, encodeString(value.path)); + } + else if (value instanceof ArrayBuffer) { + return write(VALUE_TYPES.BINARY, new Uint8Array(value)); + } + else if (typeof value !== 'object') { + throw new TypeError('Unsupported type to store in stand-alone record'); + } + // Store array or object + const childPromises = []; + const serialized = []; + const isArray = value instanceof Array; + if (isArray) { + // Store array + const isExhaustive = Object.keys(value).every((key, i) => +key === i && value[i] !== null); // Test if there are no gaps in the array + if (!isExhaustive) { + throw new Error('Cannot store arrays with missing entries'); + } + value.forEach((val, index) => { + if (typeof val === 'function') { + throw new Error(`Array at index ${index} has invalid value. Cannot store functions`); + } + const childPath = `${path}[${index}]`; + const s = _serializeValue(storage, childPath, index, val, lock.tid); + const add = (s) => { + serialized[index] = s; // Fixed: Array order getting messed up (with serialized.push after promises resolving) + }; + if (s instanceof Promise) { + childPromises.push(s.then(add)); + } + else { + add(s); + } + }); + } + else { + // Store object + Object.keys(value).forEach(key => { + // eslint-disable-next-line no-control-regex + if (/[\x00-\x08\x0b\x0c\x0e-\x1f/[\]\\]/.test(key)) { + throw new Error(`Invalid key "${key}" for object to store at path "${path}". Keys cannot contain control characters or any of the following characters: \\ / [ ]`); + } + if (key.length > 128) { + throw new Error(`Key "${key}" is too long to store for object at path "${path}". Max key length is 128`); + } + const childPath = PathInfo.getChildPath(path, key); // `${path}/${key}`; + const val = value[key]; + if (typeof val === 'function' || val === null) { + return; // Skip functions and null values + } + else if (typeof val === 'undefined') { + if (storage.settings.removeVoidProperties === true) { + delete value[key]; // Kill the property in the passed object as well, to prevent differences in stored and working values + return; + } + else { + throw new Error(`Property "${key}" has invalid value. Cannot store undefined values. Set removeVoidProperties option to true to automatically remove undefined properties`); + } + } + else { + const s = _serializeValue(storage, childPath, key, val, lock.tid); + const add = (s) => { + serialized.push(s); + }; + if (s instanceof Promise) { + childPromises.push(s.then(add)); + } + else { + add(s); + } + } + }); + } + await Promise.all(childPromises); + // Append all serialized data into 1 binary array + let result; + const minKeysPerNode = 25; + const minKeysForTreeCreation = 100; + if (true && serialized.length > minKeysForTreeCreation) { + // Create a B+tree + const fillFactor = isArray || serialized.every(kvp => typeof kvp.key === 'string' && /^[0-9]+$/.test(kvp.key)) + ? BINARY_TREE_FILL_FACTOR_50 + : BINARY_TREE_FILL_FACTOR_95; + const treeBuilder = new BPlusTreeBuilder(true, fillFactor); + serialized.forEach(kvp => { + const binaryValue = _getValueBytes(kvp); + treeBuilder.add(isArray ? kvp.index : kvp.key, binaryValue); + }); + const builder = new Uint8ArrayBuilder(); + await treeBuilder.create().toBinary(true, BinaryWriter.forUint8ArrayBuilder(builder)); + // // Test tree + // await BinaryBPlusTree.test(bytes) + result = { keyTree: true, data: builder.data }; + } + else { + const builder = new Uint8ArrayBuilder(); + serialized.forEach(kvp => { + if (!isArray) { + const keyIndex = storage.KIT.getOrAdd(kvp.key); // Gets KIT index for this key + // key_info: + if (keyIndex >= 0) { + // Cached key name + builder.writeByte(128 // key_indexed = 1 + | ((keyIndex >> 8) & 127)); + builder.writeByte(keyIndex & 255); + } + else { + // Inline key name + builder.writeByte(kvp.key.length - 1); // key_length + // key_name: + const keyBytes = encodeString(kvp.key); + builder.append(keyBytes); + } + } + // const binaryValue = _getValueBytes(kvp); + // builder.append(binaryValue); + _writeBinaryValue(kvp, builder); + }); + result = { keyTree: false, data: builder.data }; + } + // Now write the record + return write(isArray ? VALUE_TYPES.ARRAY : VALUE_TYPES.OBJECT, result.data, result.keyTree); +} +// TODO @appy-one consider converting to interface +class SerializedKeyValue { + constructor(info) { + this.key = info.key; + this.index = info.index; + this.type = info.type; + this.bool = info.bool; + this.ref = info.ref; + this.binary = info.binary; + this.record = info.record; // TODO @appy-one RENAME to address + this.bytes = info.bytes; + } +} +function _getValueBytes(kvp) { + return _writeBinaryValue(kvp).data; +} +/** + * @param builder optional builder to append data to + * @returns returns the used builder + */ +function _writeBinaryValue(kvp, builder = new Uint8ArrayBuilder(null, 64)) { + const startIndex = builder.length; + // value_type: + builder.push(kvp.type << 4); // tttt0000 + // tiny_value?: + let tinyValue = -1; + if (kvp.type === VALUE_TYPES.BOOLEAN) { + tinyValue = kvp.bool ? 1 : 0; + } + else if (kvp.type === VALUE_TYPES.NUMBER && kvp.ref >= 0 && kvp.ref <= 15 && Math.floor(kvp.ref) === kvp.ref) { + tinyValue = kvp.ref; + } + else if (kvp.type === VALUE_TYPES.BIGINT && kvp.ref >= BigInt(0) && kvp.ref <= BigInt(15)) { + tinyValue = Number(kvp.ref); + } + else if (kvp.type === VALUE_TYPES.STRING && kvp.binary && kvp.binary.length === 0) { + tinyValue = 0; + } + else if (kvp.type === VALUE_TYPES.ARRAY && kvp.ref.length === 0) { + tinyValue = 0; + } + else if (kvp.type === VALUE_TYPES.OBJECT && Object.keys(kvp.ref).length === 0) { + tinyValue = 0; + } + else if (kvp.type === VALUE_TYPES.BINARY && kvp.ref.byteLength === 0) { + tinyValue = 0; + } + if (tinyValue >= 0) { + // Tiny value + builder.data[startIndex] |= tinyValue; + builder.push(64); // 01000000 --> tiny value + // The end + } + else if (kvp.record) { + // External record + builder.push(192); // 11000000 --> record value + // Set the 6 byte record address (page_nr,record_nr) + builder.writeUint32(kvp.record.pageNr); + builder.writeUint16(kvp.record.recordNr); + } + else { + // Inline value + let data = kvp.bytes || kvp.binary; + const length = 'byteLength' in data ? data.byteLength : data.length; + builder.push(128 // 10000000 --> inline value + | (length - 1)); + if (data instanceof ArrayBuffer) { + data = new Uint8Array(data); + } + builder.append(data); + // End + } + return builder; +} +function _serializeValue(storage, path, keyOrIndex, val, parentTid) { + const missingTidMessage = 'Need to create a new record, but the parentTid is not given'; + const create = (details) => { + if (typeof keyOrIndex === 'number') { + details.index = keyOrIndex; + } + else { + details.key = keyOrIndex; + } + details.ref = val; + return new SerializedKeyValue(details); + }; + if (val instanceof Date) { + // Store as 64-bit (8 byte) signed integer. + // NOTE: 53 bits seem to the max for the Date constructor in Chrome browser, + // although higher dates can be constructed using specific year,month,day etc + // NOTE: Javascript Numbers seem to have a max "safe" value of (2^53)-1 (Number.MAX_SAFE_INTEGER), + // this is because the other 12 bits are used for sign (1 bit) and exponent. + // See https://stackoverflow.com/questions/9939760/how-do-i-convert-an-integer-to-binary-in-javascript + const ms = val.getTime(); + const bytes = numberToBytes(ms); + return create({ type: VALUE_TYPES.DATETIME, bytes }); + } + else if (val instanceof Array) { + // Create separate record for the array + if (val.length === 0) { + return create({ type: VALUE_TYPES.ARRAY, bytes: [] }); + } + console.assert(parentTid, missingTidMessage); + return _lockAndWriteNode(storage, path, val, parentTid) + .then(recordInfo => { + return create({ type: VALUE_TYPES.ARRAY, record: recordInfo.address }); + }); + } + else if (val instanceof InternalNodeReference) { + // Used internally, happens to existing external record data that is not being changed. + return create({ type: val.type, record: val.address }); + } + else if (val instanceof ArrayBuffer) { + if (val.byteLength > storage.settings.maxInlineValueSize) { + console.assert(parentTid, missingTidMessage); + return _lockAndWriteNode(storage, path, val, parentTid) + .then(recordInfo => { + return create({ type: VALUE_TYPES.BINARY, record: recordInfo.address }); + }); + } + else { + return create({ type: VALUE_TYPES.BINARY, bytes: val }); + } + } + else if (val instanceof PathReference) { + const encoded = encodeString(val.path); // textEncoder.encode(val.path); + if (encoded.length > storage.settings.maxInlineValueSize) { + // Create seperate record for this string value + console.assert(parentTid, missingTidMessage); + return _lockAndWriteNode(storage, path, val, parentTid) + .then(recordInfo => { + return create({ type: VALUE_TYPES.REFERENCE, record: recordInfo.address }); + }); + } + else { + // Small enough to store inline + return create({ type: VALUE_TYPES.REFERENCE, binary: encoded }); + } + } + else if (typeof val === 'object') { + if (Object.keys(val).length === 0) { + // Empty object (has no properties), can be stored inline + return create({ type: VALUE_TYPES.OBJECT, bytes: [] }); + } + // Create seperate record for this object + console.assert(parentTid, missingTidMessage); + return _lockAndWriteNode(storage, path, val, parentTid) + .then(recordInfo => { + return create({ type: VALUE_TYPES.OBJECT, record: recordInfo.address }); + }); + } + else if (typeof val === 'number') { + const bytes = numberToBytes(val); + return create({ type: VALUE_TYPES.NUMBER, bytes }); + } + else if (typeof val === 'bigint') { + const bytes = bigintToBytes(val); + return create({ type: VALUE_TYPES.BIGINT, bytes }); + } + else if (typeof val === 'boolean') { + return create({ type: VALUE_TYPES.BOOLEAN, bool: val }); + } + else { + // This is a string or something we don't know how to serialize + if (typeof val !== 'string') { + // Not a string, convert to one + val = val.toString(); + } + // Idea for later: Use string interning to store identical string values only once, + // using ref count to decide when to remove + const encoded = encodeString(val); // textEncoder.encode(val); + if (encoded.length > storage.settings.maxInlineValueSize) { + // Create seperate record for this string value + console.assert(parentTid, missingTidMessage); + return _lockAndWriteNode(storage, path, val, parentTid) + .then(recordInfo => { + return create({ type: VALUE_TYPES.STRING, record: recordInfo.address }); + }); + } + else { + // Small enough to store inline + return create({ type: VALUE_TYPES.STRING, binary: encoded }); + } + } +} +async function _write(storage, path, type, length, hasKeyTree, reader, currentRecordInfo) { + // Record layout: + // record := record_header, record_data + // record_header := record_info, value_type, chunk_table, last_record_len + // record_info := 4 bits = [0, FLAG_KEY_TREE, FLAG_READ_LOCK, FLAG_WRITE_LOCK] + // value_type := 4 bits number + // chunk_table := chunk_entry, [chunk_entry, [chunk_entry...]] + // chunk_entry := ct_entry_type, [ct_entry_data] + // ct_entry_type := 1 byte number, + // 0 = end of table, no entry data + // 1 = number of contigious following records (if first range with multiple records, start is current record) + // 2 = following range (start address, nr of contigious following record) + // 3 = NEW: contigious pages (start page nr, nr of contigious pages) + // + // ct_entry_data := ct_entry_type? + // 1: nr_records + // 2: start_page_nr, start_record_nr, nr_records + // 3: NEW: start_page_nr, nr_pages + // + // nr_records := 2 byte number, (actual nr - 1) + // nr_pages := 2 byte number, (actual nr - 1) + // start_page_nr := 4 byte number + // start_record_nr := 2 byte number + // last_record_len := 2 byte number + // record_data := value_type? + // OBJECT: FLAG_TREE? + // 0: object_property, [object_property, [object_property...]] + // 1: object_tree + // ARRAY: array_entry, [array_entry, [array_entry...]] + // STRING: binary_data + // BINARY: binary_data + // + // object_property := key_info, child_info + // object_tree := bplus_tree_binary + // array_entry := child_value_type, tiny_value, value_info, [value_data] + // key_info := key_indexed, key_index_or_name + // key_indexed := 1 bit + // key_index_or_name:= key_indexed? + // 0: key_length, key_name + // 1: key_index + // + // key_length := 7 bits (actual length - 1) + // key_index := 15 bits + // key_name := [key_length] byte string (ASCII) + // child_info := child_value_type, tiny_value, value_info, [value_data] + // child_value_type := 4 bits number + // tiny_value := child_value_type? + // BOOLEAN: [0000] or [0001] + // NUMBER: [0000] to [1111] (positive number between 0 and 15) + // (other): (empty string, object, array) + // + // value_info := value_location, inline_length + // value_location := 2 bits, + // [00] = DELETED (not implemented yet) + // [01] = TINY + // [10] = INLINE + // [11] = RECORD + // + // inline_length := 6 bits number (actual length - 1) + // value_data := value_location? + // INLINE: [inline_length] byte value + // RECORD: value_page_nr, value_record_nr + // + // value_page_nr := 4 byte number + // value_record_nr := 2 byte number + // + const bytesPerRecord = storage.settings.recordSize; + let headerByteLength = 0, totalBytes = 0, requiredRecords = 0, lastChunkSize = 0; + const calculateStorageNeeds = (nrOfChunks) => { + // Calculate amount of bytes and records needed + headerByteLength = 4; // Minimum length: 1 byte record_info and value_type, 1 byte CT (ct_entry_type 0), 2 bytes last_chunk_length + totalBytes = (length + headerByteLength); + requiredRecords = Math.ceil(totalBytes / bytesPerRecord); + if (requiredRecords > 1) { + // More than 1 record, header size increases + headerByteLength += 3; // Add 3 bytes: 1 byte for ct_entry_type 1, 2 bytes for nr_records + headerByteLength += (nrOfChunks - 1) * 9; // Add 9 header bytes for each additional range (1 byte ct_entry_type 2, 4 bytes start_page_nr, 2 bytes start_record_nr, 2 bytes nr_records) + // Recalc total bytes and required records + totalBytes = (length + headerByteLength); + requiredRecords = Math.ceil(totalBytes / bytesPerRecord); + } + lastChunkSize = requiredRecords === 1 ? length : totalBytes % bytesPerRecord; + if (lastChunkSize === 0 && length > 0) { + // Data perfectly fills up the last record! + // If we don't set it to bytesPerRecord, reading later will fail: 0 bytes will be read from the last record... + lastChunkSize = bytesPerRecord; + } + }; + calculateStorageNeeds(1); // Initialize with calculations for 1 contigious chunk of data + if (requiredRecords > 1) { + // In the worst case scenario, we get fragmented record space for each required record. + // Calculate with this scenario. If we claim a record too many, we'll free it again when done + const wholePages = Math.floor(requiredRecords / storage.settings.pageSize); + const remainingRecords = requiredRecords % storage.settings.pageSize; + const maxChunks = Math.max(0, wholePages) + Math.min(storage.FST.maxScraps, remainingRecords); + calculateStorageNeeds(maxChunks); + } + // Request storage space for these records + const useExistingAllocation = currentRecordInfo && currentRecordInfo.allocation.totalAddresses === requiredRecords; + const ranges = useExistingAllocation + ? currentRecordInfo.allocation.ranges + : await storage.FST.allocate(requiredRecords); + let allocation = new NodeAllocation(ranges); + !useExistingAllocation && storage.debug.verbose(`Allocated ${allocation.totalAddresses} addresses for node "/${path}": ${allocation}`.colorize(ColorStyle.grey)); + calculateStorageNeeds(allocation.ranges.length); + if (requiredRecords < allocation.totalAddresses) { + const addresses = allocation.addresses; + const deallocate = addresses.splice(requiredRecords); + storage.debug.verbose(`Requested ${deallocate.length} too many addresses to store node "/${path}", releasing them`.colorize(ColorStyle.grey)); + storage.FST.release(NodeAllocation.fromAdresses(deallocate).ranges); + allocation = NodeAllocation.fromAdresses(addresses); + calculateStorageNeeds(allocation.ranges.length); + } + // Build the binary header data + const header = new Uint8Array(headerByteLength); + const headerView = new DataView(header.buffer, 0, header.length); + header[0] = type; // value_type + if (hasKeyTree) { + header[0] |= FLAG_KEY_TREE; + } + // Add chunk table + const chunkTable = allocation.toChunkTable(); + let offset = 1; + chunkTable.ranges.forEach(range => { + headerView.setUint8(offset, range.type); + if (range.type === 0) { + return; // No additional CT data + } + else if (range.type === 1) { + headerView.setUint16(offset + 1, range.length); + offset += 3; + } + else if (range.type === 2) { + headerView.setUint32(offset + 1, range.pageNr); + headerView.setUint16(offset + 5, range.recordNr); + headerView.setUint16(offset + 7, range.length); + offset += 9; + } + else { + throw 'Unsupported range type'; + } + }); + headerView.setUint8(offset, 0); // ct_type 0 (end of CT), 1 byte + offset++; + headerView.setUint16(offset, lastChunkSize); // last_chunk_size, 2 bytes + offset += 2; + let bytesRead = 0; + const readChunk = async (length) => { + let headerBytes; + if (bytesRead < header.byteLength) { + headerBytes = header.slice(bytesRead, bytesRead + length); + bytesRead += headerBytes.byteLength; + length -= headerBytes.byteLength; + if (length === 0) { + return headerBytes; + } + } + let dataBytes = reader(length); + if (dataBytes instanceof Promise) { + dataBytes = await dataBytes; + } + if (dataBytes instanceof Array) { + dataBytes = Uint8Array.from(dataBytes); + } + else if (!(dataBytes instanceof Uint8Array)) { + throw new Error('bytes must be Uint8Array or plain byte Array'); + } + bytesRead += dataBytes.byteLength; + if (headerBytes) { + dataBytes = concatTypedArrays(headerBytes, dataBytes); + } + return dataBytes; + }; + try { + // Create and write all chunks + const bytesWritten = await chunkTable.ranges.reduce(async (promise, range) => { + const fileIndex = storage.getRecordFileIndex(range.pageNr, range.recordNr); + if (isNaN(fileIndex)) { + throw new Error('fileIndex is NaN!!'); + } + let bytesWritten = promise ? await promise : 0; + const data = await readChunk(range.length * bytesPerRecord); + bytesWritten += 'byteLength' in data ? data.byteLength : data.length; + await storage.writeData(fileIndex, data); + return bytesWritten; + }, null); + const chunks = chunkTable.ranges.length; + const address = new BinaryNodeAddress(path, allocation.ranges[0].pageNr, allocation.ranges[0].recordNr); + const nodeInfo = new BinaryNodeInfo({ path, type, exists: true, address }); + storage.updateCache(false, nodeInfo, true); // hasMoved? + storage.debug.log(`Node "/${address.path}" saved at address ${address.pageNr},${address.recordNr} - ${allocation.totalAddresses} addresses, ${bytesWritten} bytes written in ${chunks} chunk(s)`.colorize(ColorStyle.green)); + // storage.logwrite({ address: address, allocation, chunks, bytesWritten }); + let recordInfo; + if (useExistingAllocation) { + // By using the exising info, caller knows it should not release the allocation + recordInfo = currentRecordInfo; + recordInfo.allocation = allocation; // Necessary? + recordInfo.hasKeyIndex = hasKeyTree; + recordInfo.headerLength = headerByteLength; + recordInfo.lastChunkSize = lastChunkSize; + } + else { + recordInfo = new RecordInfo(address.path, hasKeyTree, type, allocation, headerByteLength, lastChunkSize, bytesPerRecord); + recordInfo.fileIndex = storage.getRecordFileIndex(address.pageNr, address.recordNr); + } + recordInfo.timestamp = Date.now(); + if (address.path === '') { + await storage.rootRecord.update(address); // Wait for this, the address update has to be written to file + } + return recordInfo; + } + catch (reason) { + // If any write failed, what do we do? + storage.debug.error(`Failed to write node "/${path}": ${reason}`); + throw reason; + } +} +class InternalNodeReference { + constructor(type, address) { + this.type = type; + this._address = address; + } + get address() { + return this._address; + } + get path() { + return this._address.path; + } + get pageNr() { + return this._address.pageNr; + } + get recordNr() { + return this._address.recordNr; + } +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/esm/storage/binary/index.js.map b/dist/esm/storage/binary/index.js.map new file mode 100644 index 0000000..adcb0db --- /dev/null +++ b/dist/esm/storage/binary/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/storage/binary/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/storage/binary/node-address.js b/dist/esm/storage/binary/node-address.js new file mode 100644 index 0000000..91aedd5 --- /dev/null +++ b/dist/esm/storage/binary/node-address.js @@ -0,0 +1,18 @@ +import { NodeAddress } from '../../node-address.js'; +export class BinaryNodeAddress extends NodeAddress { + constructor(path, pageNr, recordNr) { + super(path); + this.pageNr = pageNr; + this.recordNr = recordNr; + } + toString() { + return `"/${this.path}" @${this.pageNr},${this.recordNr}`; + } + /** + * Compares this address to another address + */ + equals(address) { + return this.path === address.path && this.pageNr === address.pageNr && this.recordNr === address.recordNr; + } +} +//# sourceMappingURL=node-address.js.map \ No newline at end of file diff --git a/dist/esm/storage/binary/node-address.js.map b/dist/esm/storage/binary/node-address.js.map new file mode 100644 index 0000000..9793293 --- /dev/null +++ b/dist/esm/storage/binary/node-address.js.map @@ -0,0 +1 @@ +{"version":3,"file":"node-address.js","sourceRoot":"","sources":["../../../../src/storage/binary/node-address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,OAAO,iBAAkB,SAAQ,WAAW;IAC9C,YACI,IAAY,EACI,MAAc,EACd,QAAgB;QAEhC,KAAK,CAAC,IAAI,CAAC,CAAC;QAHI,WAAM,GAAN,MAAM,CAAQ;QACd,aAAQ,GAAR,QAAQ,CAAQ;IAGpC,CAAC;IAED,QAAQ;QACJ,OAAO,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAA0B;QAC7B,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC;IAC9G,CAAC;CAEJ"} \ No newline at end of file diff --git a/dist/esm/storage/binary/node-info.js b/dist/esm/storage/binary/node-info.js new file mode 100644 index 0000000..83abf53 --- /dev/null +++ b/dist/esm/storage/binary/node-info.js @@ -0,0 +1,4 @@ +import { NodeInfo } from '../../node-info.js'; +export class BinaryNodeInfo extends NodeInfo { +} +//# sourceMappingURL=node-info.js.map \ No newline at end of file diff --git a/dist/esm/storage/binary/node-info.js.map b/dist/esm/storage/binary/node-info.js.map new file mode 100644 index 0000000..806e993 --- /dev/null +++ b/dist/esm/storage/binary/node-info.js.map @@ -0,0 +1 @@ +{"version":3,"file":"node-info.js","sourceRoot":"","sources":["../../../../src/storage/binary/node-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,MAAM,OAAO,cAAe,SAAQ,QAAQ;CAE3C"} \ No newline at end of file diff --git a/dist/esm/storage/context.js b/dist/esm/storage/context.js new file mode 100644 index 0000000..6020848 --- /dev/null +++ b/dist/esm/storage/context.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=context.js.map \ No newline at end of file diff --git a/dist/esm/storage/context.js.map b/dist/esm/storage/context.js.map new file mode 100644 index 0000000..360370c --- /dev/null +++ b/dist/esm/storage/context.js.map @@ -0,0 +1 @@ +{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/storage/context.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/esm/storage/create-index.js b/dist/esm/storage/create-index.js new file mode 100644 index 0000000..223cbfd --- /dev/null +++ b/dist/esm/storage/create-index.js @@ -0,0 +1,72 @@ +import { ColorStyle } from 'acebase-core'; +import { DataIndex, ArrayIndex, FullTextIndex, GeoIndex } from '../data-index/index.js'; +import { pfs } from '../promise-fs/index.js'; +/** +* Creates an index on specified path and key(s) +* @param path location of objects to be indexed. Eg: "users" to index all children of the "users" node; or "chats/*\/members" to index all members of all chats +* @param key for now - one key to index. Once our B+tree implementation supports nested trees, we can allow multiple fields +*/ +export async function createIndex(context, path, key, options) { + if (!context.storage.indexes.supported) { + throw new Error('Indexes are not supported in current environment because it requires Node.js fs'); + } + // path = path.replace(/\/\*$/, ""); // Remove optional trailing "/*" + const { ipc, debug, indexes, storage } = context; + const rebuild = options && options.rebuild === true; + const indexType = (options && options.type) || 'normal'; + let includeKeys = (options && options.include) || []; + if (typeof includeKeys === 'string') { + includeKeys = [includeKeys]; + } + const existingIndex = indexes.find(index => index.path === path && index.key === key && index.type === indexType + && index.includeKeys.length === includeKeys.length + && index.includeKeys.every((key, index) => includeKeys[index] === key)); + if (existingIndex && options.config) { + // Additional index config params are not saved to index files, apply them to the in-memory index now + existingIndex.config = options.config; + } + if (existingIndex && rebuild !== true) { + debug.log(`Index on "/${path}/*/${key}" already exists`.colorize(ColorStyle.inverse)); + return existingIndex; + } + if (!ipc.isMaster) { + // Pass create request to master + const result = await ipc.sendRequest({ type: 'index.create', path, key, options }); + if (result.ok) { + return this.add(result.fileName); + } + throw new Error(result.reason); + } + await pfs.mkdir(`${storage.settings.path}/${storage.name}.acebase`).catch(err => { + if (err.code !== 'EEXIST') { + throw err; + } + }); + const index = existingIndex || (() => { + const { include, caseSensitive, textLocale, textLocaleKey } = options; + const indexOptions = { include, caseSensitive, textLocale, textLocaleKey }; + switch (indexType) { + case 'array': return new ArrayIndex(storage, path, key, { ...indexOptions }); + case 'fulltext': return new FullTextIndex(storage, path, key, { ...indexOptions, config: options.config }); + case 'geo': return new GeoIndex(storage, path, key, { ...indexOptions }); + default: return new DataIndex(storage, path, key, { ...indexOptions }); + } + })(); + if (!existingIndex) { + indexes.push(index); + } + try { + await index.build(); + } + catch (err) { + context.debug.error(`Index build on "/${path}/*/${key}" failed: ${err.message} (code: ${err.code})`.colorize(ColorStyle.red)); + if (!existingIndex) { + // Only remove index if we added it. Build may have failed because someone tried creating the index more than once, or rebuilding it while it was building... + indexes.splice(indexes.indexOf(index), 1); + } + throw err; + } + ipc.sendNotification({ type: 'index.created', fileName: index.fileName, path, key, options }); + return index; +} +//# sourceMappingURL=create-index.js.map \ No newline at end of file diff --git a/dist/esm/storage/create-index.js.map b/dist/esm/storage/create-index.js.map new file mode 100644 index 0000000..e1cf096 --- /dev/null +++ b/dist/esm/storage/create-index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-index.js","sourceRoot":"","sources":["../../../src/storage/create-index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/storage/custom/helpers.js b/dist/esm/storage/custom/helpers.js new file mode 100644 index 0000000..626a755 --- /dev/null +++ b/dist/esm/storage/custom/helpers.js @@ -0,0 +1,64 @@ +import { PathInfo } from 'acebase-core'; +/** + * Helper functions to build custom storage classes with + */ +export class CustomStorageHelpers { + /** + * Helper function that returns a SQL where clause for all children of given path + * @param path Path to get children of + * @param columnName Name of the Path column in your SQL db, default is 'path' + * @returns Returns the SQL where clause + */ + static ChildPathsSql(path, columnName = 'path') { + const where = path === '' + ? `${columnName} <> '' AND ${columnName} NOT LIKE '%/%'` + : `(${columnName} LIKE '${path}/%' OR ${columnName} LIKE '${path}[%') AND ${columnName} NOT LIKE '${path}/%/%' AND ${columnName} NOT LIKE '${path}[%]/%' AND ${columnName} NOT LIKE '${path}[%][%'`; + return where; + } + /** + * Helper function that returns a regular expression to test if paths are children of the given path + * @param path Path to test children of + * @returns Returns regular expression to test paths with + */ + static ChildPathsRegex(path) { + return new RegExp(`^${path}(?:/[^/[]+|\\[[0-9]+\\])$`); + } + /** + * Helper function that returns a SQL where clause for all descendants of given path + * @param path Path to get descendants of + * @param columnName Name of the Path column in your SQL db, default is 'path' + * @returns Returns the SQL where clause + */ + static DescendantPathsSql(path, columnName = 'path') { + const where = path === '' + ? `${columnName} <> ''` + : `${columnName} LIKE '${path}/%' OR ${columnName} LIKE '${path}[%'`; + return where; + } + /** + * Helper function that returns a regular expression to test if paths are descendants of the given path + * @param path Path to test descendants of + * @returns Returns regular expression to test paths with + */ + static DescendantPathsRegex(path) { + return new RegExp(`^${path}(?:/[^/[]+|\\[[0-9]+\\])`); + } + /** + * PathInfo helper class. Can be used to extract keys from a given path, get parent paths, check if a path is a child or descendant of other path etc + * @example + * var pathInfo = CustomStorage.PathInfo.get('my/path/to/data'); + * pathInfo.key === 'data'; + * pathInfo.parentPath === 'my/path/to'; + * pathInfo.pathKeys; // ['my','path','to','data']; + * pathInfo.isChildOf('my/path/to') === true; + * pathInfo.isDescendantOf('my/path') === true; + * pathInfo.isParentOf('my/path/to/data/child') === true; + * pathInfo.isAncestorOf('my/path/to/data/child/grandchild') === true; + * pathInfo.childPath('child') === 'my/path/to/data/child'; + * pathInfo.childPath(0) === 'my/path/to/data[0]'; + */ + static get PathInfo() { + return PathInfo; + } +} +//# sourceMappingURL=helpers.js.map \ No newline at end of file diff --git a/dist/esm/storage/custom/helpers.js.map b/dist/esm/storage/custom/helpers.js.map new file mode 100644 index 0000000..8ec9079 --- /dev/null +++ b/dist/esm/storage/custom/helpers.js.map @@ -0,0 +1 @@ +{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../src/storage/custom/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC;;GAEG;AACH,MAAM,OAAO,oBAAoB;IAC7B;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,IAAY,EAAE,UAAU,GAAG,MAAM;QAClD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;YACrB,CAAC,CAAC,GAAG,UAAU,cAAc,UAAU,iBAAiB;YACxD,CAAC,CAAC,IAAI,UAAU,UAAU,IAAI,UAAU,UAAU,UAAU,IAAI,YAAY,UAAU,cAAc,IAAI,aAAa,UAAU,cAAc,IAAI,cAAc,UAAU,cAAc,IAAI,QAAQ,CAAC;QACxM,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,IAAY;QAC/B,OAAO,IAAI,MAAM,CAAC,IAAI,IAAI,2BAA2B,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,kBAAkB,CAAC,IAAY,EAAE,UAAU,GAAG,MAAM;QACvD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;YACrB,CAAC,CAAC,GAAG,UAAU,QAAQ;YACvB,CAAC,CAAC,GAAG,UAAU,UAAU,IAAI,UAAU,UAAU,UAAU,IAAI,KAAK,CAAC;QACzE,OAAO,KAAK,CAAC;IACjB,CAAC;IACD;;;;OAIG;IACH,MAAM,CAAC,oBAAoB,CAAC,IAAY;QACpC,OAAO,IAAI,MAAM,CAAC,IAAI,IAAI,0BAA0B,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,MAAM,KAAK,QAAQ;QACf,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/esm/storage/custom/index.js b/dist/esm/storage/custom/index.js new file mode 100644 index 0000000..2c1186b --- /dev/null +++ b/dist/esm/storage/custom/index.js @@ -0,0 +1,1202 @@ +import { ID, PathReference, PathInfo, ascii85, ColorStyle, Utils } from 'acebase-core'; +const { compareValues } = Utils; +import { NodeInfo } from '../../node-info.js'; +import { NodeLocker } from '../../node-lock.js'; +import { VALUE_TYPES } from '../../node-value-types.js'; +import { NodeNotFoundError, NodeRevisionError } from '../../node-errors.js'; +import { Storage, StorageSettings } from '../index.js'; +import { CustomStorageHelpers } from './helpers.js'; +import { NodeAddress } from '../../node-address.js'; +export { CustomStorageHelpers } from './helpers.js'; +/** Interface for metadata being stored for nodes */ +export class ICustomStorageNodeMetaData { + constructor() { + /** cuid (time sortable revision id). Nodes stored in the same operation share this id */ + this.revision = ''; + /** Number of revisions, starting with 1. Resets to 1 after deletion and recreation */ + this.revision_nr = 0; + /** Creation date/time in ms since epoch UTC */ + this.created = 0; + /** Last modification date/time in ms since epoch UTC */ + this.modified = 0; + /** Type of the node's value. 1=object, 2=array, 3=number, 4=boolean, 5=string, 6=date, 7=reserved, 8=binary, 9=reference */ + this.type = 0; + } +} +/** Interface for metadata combined with a stored value */ +export class ICustomStorageNode extends ICustomStorageNodeMetaData { + constructor() { + super(); + /** only Object, Array, large string and binary values. */ + this.value = null; + } +} +/** Enables get/set/remove operations to be wrapped in transactions to improve performance and reliability. */ +export class CustomStorageTransaction { + /** + * @param target Which path the transaction is taking place on, and whether it is a read or read/write lock. If your storage backend does not support transactions, is synchronous, or if you are able to lock resources based on path: use storage.nodeLocker to ensure threadsafe transactions + */ + constructor(target) { + this.production = false; // dev mode by default + this.target = { + get originalPath() { return target.path; }, + path: target.path, + get write() { return target.write; }, + }; + this.id = ID.generate(); + } + /** + * Returns the number of children stored in their own records. This implementation uses `childrenOf` to count, override if storage supports a quicker way. + * Eg: For SQL databases, you can implement this with a single query like `SELECT count(*) FROM nodes WHERE ${CustomStorageHelpers.ChildPathsSql(path)}` + * @param path + * @returns Returns a promise that resolves with the number of children + */ + async getChildCount(path) { + let childCount = 0; + await this.childrenOf(path, { metadata: false, value: false }, () => { childCount++; return false; }); + return childCount; + } + /** + * NOT USED YET + * Default implementation of getMultiple that executes .get for each given path. Override for custom logic + * @param paths + * @returns Returns promise with a Map of paths to nodes + */ + async getMultiple(paths) { + const map = new Map(); + await Promise.all(paths.map(path => this.get(path).then(val => map.set(path, val)))); + return map; + } + /** + * NOT USED YET + * Default implementation of setMultiple that executes .set for each given path. Override for custom logic + * @param nodes + */ + async setMultiple(nodes) { + await Promise.all(nodes.map(({ path, node }) => this.set(path, node))); + } + /** + * Default implementation of removeMultiple that executes .remove for each given path. Override for custom logic + * @param paths + */ + async removeMultiple(paths) { + await Promise.all(paths.map(path => this.remove(path))); + } + /** + * @returns {Promise} + */ + async commit() { throw new Error(`CustomStorageTransaction.rollback must be overridden by subclass`); } + /** + * Moves the transaction path to the parent node. If node locking is used, it will request a new lock + * Used internally, must not be overridden unless custom locking mechanism is required + * @param targetPath + */ + async moveToParentPath(targetPath) { + const currentPath = (this._lock && this._lock.path) || this.target.path; + if (currentPath === targetPath) { + return targetPath; // Already on the right path + } + const pathInfo = CustomStorageHelpers.PathInfo.get(targetPath); + if (pathInfo.isParentOf(currentPath)) { + if (this._lock) { + this._lock = await this._lock.moveToParent(); + } + } + else { + throw new Error(`Locking issue. Locked path "${this._lock.path}" is not a child/descendant of "${targetPath}"`); + } + this.target.path = targetPath; + return targetPath; + } +} +/** + * Allows data to be stored in a custom storage backend of your choice! Simply provide a couple of functions + * to get, set and remove data and you're done. + */ +export class CustomStorageSettings extends StorageSettings { + constructor(settings) { + super(settings); + /** + * Whether default node locking should be used. + * Set to false if your storage backend disallows multiple simultanious write transactions. + * Set to true if your storage backend does not support transactions (eg LocalStorage) or allows + * multiple simultanious write transactions (eg AceBase binary). + * @default true + */ + this.locking = true; + if (typeof settings !== 'object') { + throw new Error('settings missing'); + } + if (typeof settings.ready !== 'function') { + throw new Error(`ready must be a function`); + } + if (typeof settings.getTransaction !== 'function') { + throw new Error(`getTransaction must be a function`); + } + this.name = settings.name; + // this.info = `${this.name || 'CustomStorage'} realtime database`; + this.locking = settings.locking !== false; + if (this.locking) { + this.lockTimeout = typeof settings.lockTimeout === 'number' ? settings.lockTimeout : 120; + } + this.ready = settings.ready; + // Hijack getTransaction to add locking + const useLocking = this.locking; + const nodeLocker = useLocking ? new NodeLocker(console, this.lockTimeout) : null; + this.getTransaction = async ({ path, write }) => { + // console.log(`${write ? 'WRITE' : 'READ'} transaction requested for path "${path}"`) + const transaction = await settings.getTransaction({ path, write }); + console.assert(typeof transaction.id === 'string', `transaction id not set`); + // console.log(`Got transaction ${transaction.id} for ${write ? 'WRITE' : 'READ'} on path "${path}"`); + // Hijack rollback and commit + const rollback = transaction.rollback; + const commit = transaction.commit; + transaction.commit = async () => { + // console.log(`COMMIT ${transaction.id} for ${write ? 'WRITE' : 'READ'} on path "${path}"`); + const ret = await commit.call(transaction); + // console.log(`COMMIT DONE ${transaction.id} for ${write ? 'WRITE' : 'READ'} on path "${path}"`); + if (useLocking) { + await transaction._lock.release('commit'); + } + return ret; + }; + transaction.rollback = async (reason) => { + // const reasonText = reason instanceof Error ? reason.message : reason.toString(); + // console.error(`ROLLBACK ${transaction.id} for ${write ? 'WRITE' : 'READ'} on path "${path}":`, reason); + const ret = await rollback.call(transaction, reason); + // console.log(`ROLLBACK DONE ${transaction.id} for ${write ? 'WRITE' : 'READ'} on path "${path}"`); + if (useLocking) { + await transaction._lock.release('rollback'); + } + return ret; + }; + if (useLocking) { + // Lock the path before continuing + transaction._lock = await nodeLocker.lock(path, transaction.id, write, `${this.name}::getTransaction`); + } + return transaction; + }; + } +} +export class CustomStorageNodeAddress { + constructor(containerPath) { + this.path = containerPath; + } +} +export class CustomStorageNodeInfo extends NodeInfo { + constructor(info) { + super(info); + this.revision = info.revision; + this.revision_nr = info.revision_nr; + this.created = info.created; + this.modified = info.modified; + } +} +export class CustomStorage extends Storage { + constructor(dbname, settings, env) { + super(dbname, settings, env); + this._customImplementation = settings; + this._init(); + } + async _init() { + this.debug.log(`Database "${this.name}" details:`.colorize(ColorStyle.dim)); + this.debug.log(`- Type: CustomStorage`.colorize(ColorStyle.dim)); + this.debug.log(`- Path: ${this.settings.path}`.colorize(ColorStyle.dim)); + this.debug.log(`- Max inline value size: ${this.settings.maxInlineValueSize}`.colorize(ColorStyle.dim)); + this.debug.log(`- Autoremove undefined props: ${this.settings.removeVoidProperties}`.colorize(ColorStyle.dim)); + // Create root node if it's not there yet + await this._customImplementation.ready(); + const transaction = await this._customImplementation.getTransaction({ path: '', write: true }); + const info = await this.getNodeInfo('', { transaction }); + if (!info.exists) { + await this._writeNode('', {}, { transaction }); + } + await transaction.commit(); + if (this.indexes.supported) { + await this.indexes.load(); + } + this.emit('ready'); + } + throwImplementationError(message) { + throw new Error(`CustomStorage "${this._customImplementation.name}" ${message}`); + } + _storeNode(path, node, options) { + // serialize the value to store + const getTypedChildValue = (val) => { + if (val === null) { + throw new Error(`Not allowed to store null values. remove the property`); + } + else if (['string', 'number', 'boolean'].includes(typeof val)) { + return val; + } + else if (val instanceof Date) { + return { type: VALUE_TYPES.DATETIME, value: val.getTime() }; + } + else if (val instanceof PathReference) { + return { type: VALUE_TYPES.REFERENCE, value: val.path }; + } + else if (val instanceof ArrayBuffer) { + return { type: VALUE_TYPES.BINARY, value: ascii85.encode(val) }; + } + else if (typeof val === 'object') { + console.assert(Object.keys(val).length === 0, 'child object stored in parent can only be empty'); + return val; + } + }; + const unprocessed = `Caller should have pre-processed the value by converting it to a string`; + if (node.type === VALUE_TYPES.ARRAY && node.value instanceof Array) { + // Convert array to object with numeric properties + // NOTE: caller should have done this already + console.warn(`Unprocessed array. ${unprocessed}`); + const obj = {}; + for (let i = 0; i < node.value.length; i++) { + obj[i] = node.value[i]; + } + node.value = obj; + } + if (node.type === VALUE_TYPES.BINARY && typeof node.value !== 'string') { + console.warn(`Unprocessed binary value. ${unprocessed}`); + node.value = ascii85.encode(node.value); + } + if (node.type === VALUE_TYPES.REFERENCE && node.value instanceof PathReference) { + console.warn(`Unprocessed path reference. ${unprocessed}`); + node.value = node.value.path; + } + if ([VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(node.type)) { + const original = node.value; + node.value = {}; + // If original is an array, it'll automatically be converted to an object now + Object.keys(original).forEach(key => { + node.value[key] = getTypedChildValue(original[key]); + }); + } + return options.transaction.set(path, node); + } + _processReadNodeValue(node) { + const getTypedChildValue = (val) => { + // Typed value stored in parent record + if (val.type === VALUE_TYPES.BINARY) { + // binary stored in a parent record as a string + return ascii85.decode(val.value); + } + else if (val.type === VALUE_TYPES.DATETIME) { + // Date value stored as number + return new Date(val.value); + } + else if (val.type === VALUE_TYPES.REFERENCE) { + // Path reference stored as string + return new PathReference(val.value); + } + else { + throw new Error(`Unhandled child value type ${val.type}`); + } + }; + switch (node.type) { + case VALUE_TYPES.ARRAY: + case VALUE_TYPES.OBJECT: { + // check if any value needs to be converted + // NOTE: Arrays are stored with numeric properties + const obj = node.value; + Object.keys(obj).forEach(key => { + const item = obj[key]; + if (typeof item === 'object' && 'type' in item) { + obj[key] = getTypedChildValue(item); + } + }); + node.value = obj; + break; + } + case VALUE_TYPES.BINARY: { + node.value = ascii85.decode(node.value); + break; + } + case VALUE_TYPES.REFERENCE: { + node.value = new PathReference(node.value); + break; + } + case VALUE_TYPES.STRING: { + // No action needed + // node.value = node.value; + break; + } + default: + throw new Error(`Invalid standalone record value type`); // should never happen + } + } + async _readNode(path, options) { + // deserialize a stored value (always an object with "type", "value", "revision", "revision_nr", "created", "modified") + const node = await options.transaction.get(path); + if (node === null) { + return null; + } + if (typeof node !== 'object') { + this.throwImplementationError(`transaction.get must return an ICustomStorageNode object. Use JSON.parse if your set function stored it as a string`); + } + this._processReadNodeValue(node); + return node; + } + _getTypeFromStoredValue(val) { + let type; + if (typeof val === 'string') { + type = VALUE_TYPES.STRING; + } + else if (typeof val === 'number') { + type = VALUE_TYPES.NUMBER; + } + else if (typeof val === 'boolean') { + type = VALUE_TYPES.BOOLEAN; + } + else if (val instanceof Array) { + type = VALUE_TYPES.ARRAY; + } + else if (typeof val === 'object') { + if ('type' in val) { + const serialized = val; + type = serialized.type; + val = serialized.value; + if (type === VALUE_TYPES.DATETIME) { + val = new Date(val); + } + else if (type === VALUE_TYPES.REFERENCE) { + val = new PathReference(val); + } + } + else { + type = VALUE_TYPES.OBJECT; + } + } + else { + throw new Error(`Unknown value type`); + } + return { type, value: val }; + } + /** + * Creates or updates a node in its own record. DOES NOT CHECK if path exists in parent node, or if parent paths exist! Calling code needs to do this + */ + async _writeNode(path, value, options) { + if (!options.merge && this.valueFitsInline(value) && path !== '') { + throw new Error(`invalid value to store in its own node`); + } + else if (path === '' && (typeof value !== 'object' || value instanceof Array)) { + throw new Error(`Invalid root node value. Must be an object`); + } + // Check if the value for this node changed, to prevent recursive calls to + // perform unnecessary writes that do not change any data + if (typeof options.diff === 'undefined' && typeof options.currentValue !== 'undefined') { + const diff = compareValues(options.currentValue, value); + if (options.merge && typeof diff === 'object') { + diff.removed = diff.removed.filter(key => value[key] === null); // Only keep "removed" items that are really being removed by setting to null + } + options.diff = diff; + } + if (options.diff === 'identical') { + return; // Done! + } + const transaction = options.transaction; + // Get info about current node at path + const currentRow = options.currentValue === null + ? null // No need to load info if currentValue is null (we already know it doesn't exist) + : await this._readNode(path, { transaction }); + if (options.merge && currentRow) { + if (currentRow.type === VALUE_TYPES.ARRAY && !(value instanceof Array) && typeof value === 'object' && Object.keys(value).some(key => isNaN(parseInt(key)))) { + throw new Error(`Cannot merge existing array of path "${path}" with an object`); + } + if (value instanceof Array && currentRow.type !== VALUE_TYPES.ARRAY) { + throw new Error(`Cannot merge existing object of path "${path}" with an array`); + } + } + const revision = options.revision || ID.generate(); + const mainNode = { + type: currentRow && currentRow.type === VALUE_TYPES.ARRAY ? VALUE_TYPES.ARRAY : VALUE_TYPES.OBJECT, + value: {}, + }; + const childNodeValues = {}; + if (value instanceof Array) { + mainNode.type = VALUE_TYPES.ARRAY; + // Convert array to object with numeric properties + const obj = {}; + for (let i = 0; i < value.length; i++) { + obj[i] = value[i]; + } + value = obj; + } + else if (value instanceof PathReference) { + mainNode.type = VALUE_TYPES.REFERENCE; + mainNode.value = value.path; + } + else if (value instanceof ArrayBuffer) { + mainNode.type = VALUE_TYPES.BINARY; + mainNode.value = ascii85.encode(value); + } + else if (typeof value === 'string') { + mainNode.type = VALUE_TYPES.STRING; + mainNode.value = value; + } + const currentIsObjectOrArray = currentRow ? [VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(currentRow.type) : false; + const newIsObjectOrArray = [VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(mainNode.type); + const children = { + current: [], + new: [], + }; + let currentObject = null; + if (currentIsObjectOrArray) { + currentObject = currentRow.value; + children.current = Object.keys(currentObject); + // if (currentObject instanceof Array) { // ALWAYS FALSE BECAUSE THEY ARE STORED AS OBJECTS WITH NUMERIC PROPERTIES + // // Convert array to object with numeric properties + // const obj = {}; + // for (let i = 0; i < value.length; i++) { + // obj[i] = value[i]; + // } + // currentObject = obj; + // } + if (newIsObjectOrArray) { + mainNode.value = currentObject; + } + } + if (newIsObjectOrArray) { + // Object or array. Determine which properties can be stored in the main node, + // and which should be stored in their own nodes + if (!options.merge) { + // Check which keys are present in the old object, but not in newly given object + Object.keys(mainNode.value).forEach(key => { + if (!(key in value)) { + // Property that was in old object, is not in new value -> set to null to mark deletion! + value[key] = null; + } + }); + } + Object.keys(value).forEach(key => { + const val = value[key]; + delete mainNode.value[key]; // key is being overwritten, moved from inline to dedicated, or deleted. TODO: check if this needs to be done SQLite & MSSQL implementations too + if (val === null) { // || typeof val === 'undefined' + // This key is being removed + return; + } + else if (typeof val === 'undefined') { + if (this.settings.removeVoidProperties === true) { + delete value[key]; // Kill the property in the passed object as well, to prevent differences in stored and working values + return; + } + else { + throw new Error(`Property "${key}" has invalid value. Cannot store undefined values. Set removeVoidProperties option to true to automatically remove undefined properties`); + } + } + // Where to store this value? + if (this.valueFitsInline(val)) { + // Store in main node + mainNode.value[key] = val; + } + else { + // Store in child node + childNodeValues[key] = val; + } + }); + } + // Insert or update node + const isArray = mainNode.type === VALUE_TYPES.ARRAY; + if (currentRow) { + // update + this.debug.log(`Node "/${path}" is being ${options.merge ? 'updated' : 'overwritten'}`.colorize(ColorStyle.cyan)); + // If existing is an array or object, we have to find out which children are affected + if (currentIsObjectOrArray || newIsObjectOrArray) { + // Get current child nodes in dedicated child records + const pathInfo = PathInfo.get(path); + const keys = []; + let checkExecuted = false; + const includeChildCheck = (childPath) => { + checkExecuted = true; + if (!transaction.production && !pathInfo.isParentOf(childPath)) { + // Double check failed + this.throwImplementationError(`"${childPath}" is not a child of "${path}" - childrenOf must only check and return paths that are children`); + } + return true; + }; + const addChildPath = (childPath) => { + if (!checkExecuted) { + this.throwImplementationError(`childrenOf did not call checkCallback before addCallback`); + } + const key = PathInfo.get(childPath).key; + keys.push(key.toString()); // .toString to make sure all keys are compared as strings + return true; // Keep streaming + }; + await transaction.childrenOf(path, { metadata: false, value: false }, includeChildCheck, addChildPath); + children.current = children.current.concat(keys); + if (newIsObjectOrArray) { + if (options && options.merge) { + children.new = children.current.slice(); + } + Object.keys(value).forEach(key => { + if (!children.new.includes(key)) { + children.new.push(key); + } + }); + } + const changes = { + insert: children.new.filter(key => !children.current.includes(key)), + update: [], + delete: options && options.merge ? Object.keys(value).filter(key => value[key] === null) : children.current.filter(key => !children.new.includes(key)), + }; + changes.update = children.new.filter(key => children.current.includes(key) && !changes.delete.includes(key)); + if (isArray && options.merge && (changes.insert.length > 0 || changes.delete.length > 0)) { + // deletes or inserts of individual array entries are not allowed, unless it is the last entry: + // - deletes would cause the paths of following items to change, which is unwanted because the actual data does not change, + // eg: removing index 3 on array of size 10 causes entries with index 4 to 9 to 'move' to indexes 3 to 8 + // - inserts might introduce gaps in indexes, + // eg: adding to index 7 on an array of size 3 causes entries with indexes 3 to 6 to go 'missing' + const newArrayKeys = changes.update.concat(changes.insert); + const isExhaustive = newArrayKeys.every((k, index, arr) => arr.includes(index.toString())); + if (!isExhaustive) { + throw new Error(`Elements cannot be inserted beyond, or removed before the end of an array. Rewrite the whole array at path "${path}" or change your schema to use an object collection instead`); + } + } + // (over)write all child nodes that must be stored in their own record + const writePromises = Object.keys(childNodeValues).map(key => { + const keyOrIndex = isArray ? parseInt(key) : key; + const childDiff = typeof options.diff === 'object' ? options.diff.forChild(keyOrIndex) : undefined; + if (childDiff === 'identical') { + // console.warn(`Skipping _writeNode recursion for child "${keyOrIndex}"`); + return; // Skip + } + const childPath = pathInfo.childPath(keyOrIndex); // PathInfo.getChildPath(path, key); + const childValue = childNodeValues[keyOrIndex]; + // Pass current child value to _writeNode + const currentChildValue = typeof options.currentValue === 'undefined' // Fixing issue #20 + ? undefined + : options.currentValue !== null && typeof options.currentValue === 'object' && keyOrIndex in options.currentValue + ? options.currentValue[keyOrIndex] + : null; + return this._writeNode(childPath, childValue, { transaction, revision, merge: false, currentValue: currentChildValue, diff: childDiff }); + }); + // Delete all child nodes that were stored in their own record, but are being removed + // Also delete nodes that are being moved from a dedicated record to inline + const movingNodes = newIsObjectOrArray ? keys.filter(key => key in mainNode.value) : []; // moving from dedicated to inline value + const deleteDedicatedKeys = changes.delete.concat(movingNodes); + const deletePromises = deleteDedicatedKeys.map(key => { + const keyOrIndex = isArray ? parseInt(key) : key; + const childPath = pathInfo.childPath(keyOrIndex); + return this._deleteNode(childPath, { transaction }); + }); + const promises = writePromises.concat(deletePromises); + await Promise.all(promises); + } + // Update main node + // TODO: Check if revision should change? + const p = this._storeNode(path, { + type: mainNode.type, + value: mainNode.value, + revision: currentRow.revision, + revision_nr: currentRow.revision_nr + 1, + created: currentRow.created, + modified: Date.now(), + }, { + transaction, + }); + if (p instanceof Promise) { + return await p; + } + } + else { + // Current node does not exist, create it and any child nodes + // write all child nodes that must be stored in their own record + this.debug.log(`Node "/${path}" is being created`.colorize(ColorStyle.cyan)); + if (isArray) { + // Check if the array is "intact" (all entries have an index from 0 to the end with no gaps) + const arrayKeys = Object.keys(mainNode.value).concat(Object.keys(childNodeValues)); + const isExhaustive = arrayKeys.every((k, index, arr) => arr.includes(index.toString())); + if (!isExhaustive) { + throw new Error(`Cannot store arrays with missing entries`); + } + } + const promises = Object.keys(childNodeValues).map(key => { + const keyOrIndex = isArray ? parseInt(key) : key; + const childPath = PathInfo.getChildPath(path, keyOrIndex); + const childValue = childNodeValues[keyOrIndex]; + return this._writeNode(childPath, childValue, { transaction, revision, merge: false, currentValue: null }); + }); + // Create current node + const p = this._storeNode(path, { + type: mainNode.type, + value: mainNode.value, + revision, + revision_nr: 1, + created: Date.now(), + modified: Date.now(), + }, { + transaction, + }); + if (p instanceof Promise) { + promises.push(p); + } + await Promise.all(promises); + } + } + /** + * Deletes (dedicated) node and all subnodes without checking for existence. Use with care - all removed nodes will lose their revision stats! DOES NOT REMOVE INLINE CHILD NODES! + */ + async _deleteNode(path, options) { + const pathInfo = PathInfo.get(path); + this.debug.log(`Node "/${path}" is being deleted`.colorize(ColorStyle.cyan)); + const deletePaths = [path]; + let checkExecuted = false; + const includeDescendantCheck = (descPath) => { + checkExecuted = true; + if (!transaction.production && !pathInfo.isAncestorOf(descPath)) { + // Double check failed + this.throwImplementationError(`"${descPath}" is not a descendant of "${path}" - descendantsOf must only check and return paths that are descendants`); + } + return true; + }; + const addDescendant = (descPath) => { + if (!checkExecuted) { + this.throwImplementationError(`descendantsOf did not call checkCallback before addCallback`); + } + deletePaths.push(descPath); + return true; + }; + const transaction = options.transaction; + await transaction.descendantsOf(path, { metadata: false, value: false }, includeDescendantCheck, addDescendant); + this.debug.log(`Nodes ${deletePaths.map(p => `"/${p}"`).join(',')} are being deleted`.colorize(ColorStyle.cyan)); + return transaction.removeMultiple(deletePaths); + } + /** + * Enumerates all children of a given Node for reflection purposes + */ + getChildren(path, options = {}) { + let callback; + const generator = { + /** + * + * @param valueCallback callback function to run for each child. Return false to stop iterating + * @returns returns a promise that resolves with a boolean indicating if all children have been enumerated, or was canceled by the valueCallback function + */ + next(valueCallback) { + callback = valueCallback; + return start(); + }, + }; + const start = async () => { + const transaction = options.transaction || await this._customImplementation.getTransaction({ path, write: false }); + try { + let canceled = false; + await (async () => { + const node = await this._readNode(path, { transaction }); + if (!node) { + throw new NodeNotFoundError(`Node "/${path}" does not exist`); + } + if (![VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(node.type)) { + // No children + return; + } + const isArray = node.type === VALUE_TYPES.ARRAY; + const value = node.value; + let keys = Object.keys(value).map(key => isArray ? parseInt(key) : key); + if (options.keyFilter) { + keys = keys.filter(key => options.keyFilter.includes(key)); + } + const pathInfo = PathInfo.get(path); + keys.length > 0 && keys.every(key => { + const child = this._getTypeFromStoredValue(value[key]); + const info = new CustomStorageNodeInfo({ + path: pathInfo.childPath(key), + key: isArray ? null : key, + index: isArray ? key : null, + type: child.type, + address: null, + exists: true, + value: child.value, + revision: node.revision, + revision_nr: node.revision_nr, + created: new Date(node.created), + modified: new Date(node.modified), + }); + canceled = callback(info) === false; + return !canceled; // stop .every loop if canceled + }); + if (canceled) { + return; + } + // Go on... get other children + let checkExecuted = false; + const includeChildCheck = (childPath) => { + checkExecuted = true; + if (!transaction.production && !pathInfo.isParentOf(childPath)) { + // Double check failed + this.throwImplementationError(`"${childPath}" is not a child of "${path}" - childrenOf must only check and return paths that are children`); + } + if (options.keyFilter) { + const key = PathInfo.get(childPath).key; + return options.keyFilter.includes(key); + } + return true; + }; + const addChildNode = (childPath, node) => { + if (!checkExecuted) { + this.throwImplementationError(`childrenOf did not call checkCallback before addCallback`); + } + const key = PathInfo.get(childPath).key; + const info = new CustomStorageNodeInfo({ + path: childPath, + type: node.type, + key: isArray ? null : key, + index: isArray ? key : null, + address: new NodeAddress(childPath), + exists: true, + value: null, + revision: node.revision, + revision_nr: node.revision_nr, + created: new Date(node.created), + modified: new Date(node.modified), + }); + canceled = callback(info) === false; + return !canceled; + }; + await transaction.childrenOf(path, { metadata: true, value: false }, includeChildCheck, addChildNode); + })(); + if (!options.transaction) { + // transaction was created by us, commit + await transaction.commit(); + } + return canceled; + } + catch (err) { + if (!options.transaction) { + // transaction was created by us, rollback + await transaction.rollback(err); + } + throw err; + } + }; // start() + return generator; + } + async getNode(path, options) { + // path = path.replace(/'/g, ''); // prevent sql injection, remove single quotes + options = options || {}; + const transaction = options.transaction || await this._customImplementation.getTransaction({ path, write: false }); + try { + const node = await (async () => { + // Get path, path/* and path[* + const filtered = (options.include && options.include.length > 0) || (options.exclude && options.exclude.length > 0) || options.child_objects === false; + const pathInfo = PathInfo.get(path); + const targetNode = await this._readNode(path, { transaction }); + if (!targetNode) { + // Lookup parent node + if (path === '') { + return { value: null }; + } // path is root. There is no parent. + const lockPath = await transaction.moveToParentPath(pathInfo.parentPath); + console.assert(lockPath === pathInfo.parentPath, `transaction.moveToParentPath() did not move to the right parent path of "${path}"`); + const parentNode = await this._readNode(pathInfo.parentPath, { transaction }); + if (parentNode && [VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(parentNode.type) && pathInfo.key in parentNode.value) { + const childValueInfo = this._getTypeFromStoredValue(parentNode.value[pathInfo.key]); + return { + revision: parentNode.revision, + revision_nr: parentNode.revision_nr, + created: parentNode.created, + modified: parentNode.modified, + type: childValueInfo.type, + value: childValueInfo.value, + }; + } + return { value: null }; + } + const isArray = targetNode.type === VALUE_TYPES.ARRAY; + /** + * Convert include & exclude filters to PathInfo instances for easier handling + */ + const convertFilterArray = (arr) => { + const isNumber = (key) => /^[0-9]+$/.test(key); + return arr.map(path => PathInfo.get(isArray && isNumber(path) ? `[${path}]` : path)); + }; + const includeFilter = options.include ? convertFilterArray(options.include) : []; + const excludeFilter = options.exclude ? convertFilterArray(options.exclude) : []; + /** + * Apply include filters to prevent unwanted properties stored inline to be added. + * + * Removes properties that are not on the trail of any include filter, but were loaded because they are + * stored inline in the parent node. + * + * Example: + * data of `"users/someuser/posts/post1"`: `{ title: 'My first post', posted: (date), history: {} }` + * code: `db.ref('users/someuser').get({ include: ['posts/*\/title'] })` + * descPath: `"users/someuser/posts/post1"`, + * trailKeys: `["posts", "post1"]`, + * includeFilter[0]: `["posts", "*", "title"]` + * properties `posted` and `history` must be removed from the object + */ + const applyFiltersOnInlineData = (descPath, node) => { + if ([VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(node.type) && includeFilter.length > 0) { + const trailKeys = PathInfo.getPathKeys(descPath).slice(pathInfo.keys.length); + const checkPathInfo = new PathInfo(trailKeys); + const remove = []; + const includes = includeFilter.filter(info => info.isDescendantOf(checkPathInfo)); + if (includes.length > 0) { + const isArray = node.type === VALUE_TYPES.ARRAY; + remove.push(...Object.keys(node.value).map(key => isArray ? +key : key)); // Mark all at first + for (const info of includes) { + const targetProp = info.keys[trailKeys.length]; + if (typeof targetProp === 'string' && (targetProp === '*' || targetProp.startsWith('$'))) { + remove.splice(0); + break; + } + const index = remove.indexOf(targetProp); + index >= 0 && remove.splice(index, 1); + } + } + const hasIncludeOnChild = includeFilter.some(info => info.isChildOf(checkPathInfo)); + const hasExcludeOnChild = excludeFilter.some(info => info.isChildOf(checkPathInfo)); + if (hasExcludeOnChild && !hasIncludeOnChild) { + // do not remove children that are NOT in direct exclude filters (which includes them again) + const excludes = excludeFilter.filter(info => info.isChildOf(checkPathInfo)); + for (let i = 0; i < remove.length; i++) { + if (!excludes.find(info => info.equals(remove[i]))) { + remove.splice(i, 1); + i--; + } + } + } + // remove.length > 0 && this.debug.log(`Remove properties:`, remove); + for (const key of remove) { + delete node.value[key]; + } + } + }; + applyFiltersOnInlineData(path, targetNode); + let checkExecuted = false; + const includeDescendantCheck = (descPath, metadata) => { + checkExecuted = true; + if (!transaction.production && !pathInfo.isAncestorOf(descPath)) { + // Double check failed + this.throwImplementationError(`"${descPath}" is not a descendant of "${path}" - descendantsOf must only check and return paths that are descendants`); + } + if (!filtered) { + return true; + } + // Apply include & exclude filters + const descPathKeys = PathInfo.getPathKeys(descPath); + const trailKeys = descPathKeys.slice(pathInfo.keys.length); + const checkPathInfo = new PathInfo(trailKeys); + let include = (includeFilter.length > 0 + ? includeFilter.some(info => checkPathInfo.isOnTrailOf(info)) + : true) + && (excludeFilter.length > 0 + ? !excludeFilter.some(info => info.equals(checkPathInfo) || info.isAncestorOf(checkPathInfo)) + : true); + // Apply child_objects filter. If metadata is not loaded, we can only skip deeper descendants here - any child object that does get through will be ignored by addDescendant + if (include + && options.child_objects === false + && (pathInfo.isParentOf(descPath) && [VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(metadata ? metadata.type : -1) + || PathInfo.getPathKeys(descPath).length > pathInfo.pathKeys.length + 1)) { + include = false; + } + return include; + }; + const descRows = []; + const addDescendant = (descPath, node) => { + // console.warn(`Adding descendant "${descPath}"`); + if (!checkExecuted) { + this.throwImplementationError('descendantsOf did not call checkCallback before addCallback'); + } + if (options.child_objects === false && [VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(node.type)) { + // child objects are filtered out, but this one got through because includeDescendantCheck did not have access to its metadata, + // which is ok because doing that might drastically improve performance in client code. Skip it now. + return true; + } + // Apply include filters to prevent unwanted properties stored inline to be added + applyFiltersOnInlineData(descPath, node); + // Process the value + this._processReadNodeValue(node); + // Add node + const row = node; + row.path = descPath; + descRows.push(row); + return true; // Keep streaming + }; + await transaction.descendantsOf(path, { metadata: true, value: true }, includeDescendantCheck, addDescendant); + this.debug.log(`Read node "/${path}" and ${filtered ? '(filtered) ' : ''}descendants from ${descRows.length + 1} records`.colorize(ColorStyle.magenta)); + const result = targetNode; + const objectToArray = (obj) => { + // Convert object value to array + const arr = []; + Object.keys(obj).forEach(key => { + const index = parseInt(key); + arr[index] = obj[index]; + }); + return arr; + }; + if (targetNode.type === VALUE_TYPES.ARRAY) { + result.value = objectToArray(result.value); + } + if (targetNode.type === VALUE_TYPES.OBJECT || targetNode.type === VALUE_TYPES.ARRAY) { + // target node is an object or array + // merge with other found (child) nodes + const targetPathKeys = PathInfo.getPathKeys(path); + const value = targetNode.value; + for (let i = 0; i < descRows.length; i++) { + const otherNode = descRows[i]; + const pathKeys = PathInfo.getPathKeys(otherNode.path); + const trailKeys = pathKeys.slice(targetPathKeys.length); + let parent = value; + for (let j = 0; j < trailKeys.length; j++) { + console.assert(typeof parent === 'object', 'parent must be an object/array to have children!!'); + const key = trailKeys[j]; + const isLast = j === trailKeys.length - 1; + const nodeType = isLast + ? otherNode.type + : typeof trailKeys[j + 1] === 'number' + ? VALUE_TYPES.ARRAY + : VALUE_TYPES.OBJECT; + let nodeValue; + if (!isLast) { + nodeValue = nodeType === VALUE_TYPES.OBJECT ? {} : []; + } + else { + nodeValue = otherNode.value; + if (nodeType === VALUE_TYPES.ARRAY) { + nodeValue = objectToArray(nodeValue); + } + } + if (key in parent) { + // Merge with parent + const mergePossible = typeof parent[key] === typeof nodeValue && [VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(nodeType); + if (!mergePossible) { + // Ignore the value in the child record, see issue #20: "Assertion failed: Merging child values can only be done if existing and current values are both an array or object" + this.debug.error(`The value stored in node "${otherNode.path}" cannot be merged with the parent node, value will be ignored. This error should disappear once the target node value is updated. See issue #20 for more information`, { path, parent, key, nodeType, nodeValue }); + } + else { + Object.keys(nodeValue).forEach(childKey => { + if (childKey in parent[key]) { + this.throwImplementationError(`Custom storage merge error: child key "${childKey}" is in parent value already! Make sure the get/childrenOf/descendantsOf methods of the custom storage class return values that can be modified by AceBase without affecting the stored source`); + } + parent[key][childKey] = nodeValue[childKey]; + }); + } + } + else { + parent[key] = nodeValue; + } + parent = parent[key]; + } + } + } + else if (descRows.length > 0) { + this.throwImplementationError(`multiple records found for non-object value!`); + } + // Post process filters to remove any data that got through because they were + // not stored in dedicated records. This will happen with smaller values because + // they are stored inline in their parent node. + // eg: + // { number: 1, small_string: 'small string', bool: true, obj: {}, arr: [] } + // All properties of this object are stored inline, + // if exclude: ['obj'], or child_objects: false was passed, these will still + // have to be removed from the value + if (options.child_objects === false) { + Object.keys(result.value).forEach(key => { + if (typeof result.value[key] === 'object' && result.value[key].constructor === Object) { + // This can only happen if the object was empty + console.assert(Object.keys(result.value[key]).length === 0); + delete result.value[key]; + } + }); + } + if (options.include) { + // TODO: remove any unselected children that did get through + } + if (options.exclude) { + const process = (obj, keys) => { + if (typeof obj !== 'object') { + return; + } + const key = keys[0]; + if (key === '*') { + Object.keys(obj).forEach(k => { + process(obj[k], keys.slice(1)); + }); + } + else if (keys.length > 1) { + key in obj && process(obj[key], keys.slice(1)); + } + else { + delete obj[key]; + } + }; + options.exclude.forEach(path => { + const checkKeys = PathInfo.getPathKeys(path); + process(result.value, checkKeys); + }); + } + return result; + })(); + if (!options.transaction) { + // transaction was created by us, commit + await transaction.commit(); + } + return node; + } + catch (err) { + if (!options.transaction) { + // transaction was created by us, rollback + await transaction.rollback(err); + } + throw err; + } + } + async getNodeInfo(path, options = {}) { + options = options || {}; + const pathInfo = PathInfo.get(path); + const transaction = options.transaction || await this._customImplementation.getTransaction({ path, write: false }); + try { + const node = await this._readNode(path, { transaction }); + const info = new CustomStorageNodeInfo({ + path, + key: typeof pathInfo.key === 'string' ? pathInfo.key : null, + index: typeof pathInfo.key === 'number' ? pathInfo.key : null, + type: node ? node.type : 0, + exists: node !== null, + address: node ? new NodeAddress(path) : null, + created: node ? new Date(node.created) : null, + modified: node ? new Date(node.modified) : null, + revision: node ? node.revision : null, + revision_nr: node ? node.revision_nr : null, + }); + if (!node && path !== '') { + // Try parent node + const lockPath = await transaction.moveToParentPath(pathInfo.parentPath); + console.assert(lockPath === pathInfo.parentPath, `transaction.moveToParentPath() did not move to the right parent path of "${path}"`); + const parent = await this._readNode(pathInfo.parentPath, { transaction }); + if (parent && [VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(parent.type) && pathInfo.key in parent.value) { + // Stored in parent node + info.exists = true; + info.value = parent.value[pathInfo.key]; + info.address = null; + info.type = parent.type; + info.created = new Date(parent.created); + info.modified = new Date(parent.modified); + info.revision = parent.revision; + info.revision_nr = parent.revision_nr; + } + else { + // Parent doesn't exist, so the node we're looking for cannot exist either + info.address = null; + } + } + if (options.include_child_count) { + info.childCount = 0; + if ([VALUE_TYPES.ARRAY, VALUE_TYPES.OBJECT].includes(info.valueType) && info.address) { + // Get number of children + info.childCount = node.value ? Object.keys(node.value).length : 0; + info.childCount += await transaction.getChildCount(path); + } + } + if (!options.transaction) { + // transaction was created by us, commit + await transaction.commit(); + } + return info; + } + catch (err) { + if (!options.transaction) { + // transaction was created by us, rollback + await transaction.rollback(err); + } + throw err; + } + } + // TODO: Move to Storage base class? + async setNode(path, value, options = { suppress_events: false, context: null }) { + if (this.settings.readOnly) { + throw new Error(`Database is opened in read-only mode`); + } + const pathInfo = PathInfo.get(path); + const transaction = options.transaction || await this._customImplementation.getTransaction({ path, write: true }); + try { + if (path === '') { + if (value === null || typeof value !== 'object' || value instanceof Array || value instanceof ArrayBuffer || ('buffer' in value && value.buffer instanceof ArrayBuffer)) { + throw new Error(`Invalid value for root node: ${value}`); + } + await this._writeNodeWithTracking('', value, { merge: false, transaction, suppress_events: options.suppress_events, context: options.context }); + } + else if (typeof options.assert_revision !== 'undefined') { + const info = await this.getNodeInfo(path, { transaction }); + if (info.revision !== options.assert_revision) { + throw new NodeRevisionError(`revision '${info.revision}' does not match requested revision '${options.assert_revision}'`); + } + if (info.address && info.address.path === path && value !== null && !this.valueFitsInline(value)) { + // Overwrite node + await this._writeNodeWithTracking(path, value, { merge: false, transaction, suppress_events: options.suppress_events, context: options.context }); + } + else { + // Update parent node + const lockPath = await transaction.moveToParentPath(pathInfo.parentPath); + console.assert(lockPath === pathInfo.parentPath, `transaction.moveToParentPath() did not move to the right parent path of "${path}"`); + await this._writeNodeWithTracking(pathInfo.parentPath, { [pathInfo.key]: value }, { merge: true, transaction, suppress_events: options.suppress_events, context: options.context }); + } + } + else { + // Delegate operation to update on parent node + const lockPath = await transaction.moveToParentPath(pathInfo.parentPath); + console.assert(lockPath === pathInfo.parentPath, `transaction.moveToParentPath() did not move to the right parent path of "${path}"`); + await this.updateNode(pathInfo.parentPath, { [pathInfo.key]: value }, { transaction, suppress_events: options.suppress_events, context: options.context }); + } + if (!options.transaction) { + // transaction was created by us, commit + await transaction.commit(); + } + } + catch (err) { + if (!options.transaction) { + // transaction was created by us, rollback + await transaction.rollback(err); + } + throw err; + } + } + // TODO: Move to Storage base class? + async updateNode(path, updates, options = { suppress_events: false, context: null }) { + if (this.settings.readOnly) { + throw new Error(`Database is opened in read-only mode`); + } + if (typeof updates !== 'object') { + throw new Error(`invalid updates argument`); //. Must be a non-empty object or array + } + else if (Object.keys(updates).length === 0) { + return; // Nothing to update. Done! + } + const transaction = options.transaction || await this._customImplementation.getTransaction({ path, write: true }); + try { + // Get info about current node + const nodeInfo = await this.getNodeInfo(path, { transaction }); + const pathInfo = PathInfo.get(path); + if (nodeInfo.exists && nodeInfo.address && nodeInfo.address.path === path) { + // Node exists and is stored in its own record. + // Update it + await this._writeNodeWithTracking(path, updates, { transaction, merge: true, suppress_events: options.suppress_events, context: options.context }); + } + else if (nodeInfo.exists) { + // Node exists, but is stored in its parent node. + const pathInfo = PathInfo.get(path); + const lockPath = await transaction.moveToParentPath(pathInfo.parentPath); + console.assert(lockPath === pathInfo.parentPath, `transaction.moveToParentPath() did not move to the right parent path of "${path}"`); + await this._writeNodeWithTracking(pathInfo.parentPath, { [pathInfo.key]: updates }, { transaction, merge: true, suppress_events: options.suppress_events, context: options.context }); + } + else { + // The node does not exist, it's parent doesn't have it either. Update the parent instead + const lockPath = await transaction.moveToParentPath(pathInfo.parentPath); + console.assert(lockPath === pathInfo.parentPath, `transaction.moveToParentPath() did not move to the right parent path of "${path}"`); + await this.updateNode(pathInfo.parentPath, { [pathInfo.key]: updates }, { transaction, suppress_events: options.suppress_events, context: options.context }); + } + if (!options.transaction) { + // transaction was created by us, commit + await transaction.commit(); + } + } + catch (err) { + if (!options.transaction) { + // transaction was created by us, rollback + await transaction.rollback(err); + } + throw err; + } + } +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/esm/storage/custom/index.js.map b/dist/esm/storage/custom/index.js.map new file mode 100644 index 0000000..8bb4785 --- /dev/null +++ b/dist/esm/storage/custom/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/storage/custom/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/storage/custom/indexed-db/index.js b/dist/esm/storage/custom/indexed-db/index.js new file mode 100644 index 0000000..c14de94 --- /dev/null +++ b/dist/esm/storage/custom/indexed-db/index.js @@ -0,0 +1,73 @@ +import { SimpleCache } from 'acebase-core'; +import { CustomStorageSettings } from '../index.js'; +import { AceBase } from '../../../index.js'; +import { IndexedDBStorageSettings } from './settings.js'; +import { IndexedDBStorageTransaction } from './transaction.js'; +export function createIndexedDBInstance(dbname, init = {}) { + const settings = new IndexedDBStorageSettings(init); + // We'll create an IndexedDB with name "dbname.acebase" + const IndexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; // browser prefixes not really needed, see https://caniuse.com/#feat=indexeddb + const request = IndexedDB.open(`${dbname}.acebase`, 1); + request.onupgradeneeded = (e) => { + // create datastore + const db = request.result; + // Create "nodes" object store for metadata + db.createObjectStore('nodes', { keyPath: 'path' }); + // Create "content" object store with all data + db.createObjectStore('content'); + }; + let idb; + const readyPromise = new Promise((resolve, reject) => { + request.onsuccess = e => { + idb = request.result; + resolve(); + }; + request.onerror = e => { + reject(e); + }; + }); + const cache = new SimpleCache(typeof settings.cacheSeconds === 'number' ? settings.cacheSeconds : 60); // 60 second node cache by default + // cache.enabled = false; + const storageSettings = new CustomStorageSettings({ + name: 'IndexedDB', + locking: true, + removeVoidProperties: settings.removeVoidProperties, + maxInlineValueSize: settings.maxInlineValueSize, + lockTimeout: settings.lockTimeout, + ready() { + return readyPromise; + }, + async getTransaction(target) { + await readyPromise; + const context = { + debug: false, + db: idb, + cache, + ipc, + }; + return new IndexedDBStorageTransaction(context, target); + }, + }); + const db = new AceBase(dbname, { + logLevel: settings.logLevel, + storage: storageSettings, + sponsor: settings.sponsor, + // isolated: settings.isolated, + }); + const ipc = db.api.storage.ipc; + db.settings.ipcEvents = settings.multipleTabs === true; + ipc.on('notification', async (notification) => { + const message = notification.data; + if (typeof message !== 'object') { + return; + } + if (message.action === 'cache.invalidate') { + // console.warn(`Invalidating cache for paths`, message.paths); + for (const path of message.paths) { + cache.remove(path); + } + } + }); + return db; +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/esm/storage/custom/indexed-db/index.js.map b/dist/esm/storage/custom/indexed-db/index.js.map new file mode 100644 index 0000000..1edf3b2 --- /dev/null +++ b/dist/esm/storage/custom/indexed-db/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/storage/custom/indexed-db/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/storage/custom/indexed-db/settings.js b/dist/esm/storage/custom/indexed-db/settings.js new file mode 100644 index 0000000..f7761bf --- /dev/null +++ b/dist/esm/storage/custom/indexed-db/settings.js @@ -0,0 +1,39 @@ +import { StorageSettings } from '../../index.js'; +export class IndexedDBStorageSettings extends StorageSettings { + constructor(settings) { + super(settings); + /** + * Whether to enable cross-tab synchronization + * @default false + */ + this.multipleTabs = false; + /** + * How many seconds to keep node info in memory, to speed up IndexedDB performance. + * @default 60 + */ + this.cacheSeconds = 60; + /** + * You can turn this on if you are a sponsor + * @default false + */ + this.sponsor = false; + if (typeof settings.logLevel === 'string') { + this.logLevel = settings.logLevel; + } + if (typeof settings.multipleTabs === 'boolean') { + this.multipleTabs = settings.multipleTabs; + } + if (typeof settings.cacheSeconds === 'number') { + this.cacheSeconds = settings.cacheSeconds; + } + if (typeof settings.sponsor === 'boolean') { + this.sponsor = settings.sponsor; + } + ['type', 'ipc', 'path'].forEach((prop) => { + if (prop in settings) { + console.warn(`${prop} setting is not supported for AceBase IndexedDBStorage`); + } + }); + } +} +//# sourceMappingURL=settings.js.map \ No newline at end of file diff --git a/dist/esm/storage/custom/indexed-db/settings.js.map b/dist/esm/storage/custom/indexed-db/settings.js.map new file mode 100644 index 0000000..af040f3 --- /dev/null +++ b/dist/esm/storage/custom/indexed-db/settings.js.map @@ -0,0 +1 @@ +{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../../../src/storage/custom/indexed-db/settings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAExC,MAAM,OAAO,wBAAyB,SAAQ,eAAe;IAwBzD,YAAY,QAA2C;QACnD,KAAK,CAAC,QAAQ,CAAC,CAAC;QAnBpB;;;WAGG;QACH,iBAAY,GAAG,KAAK,CAAC;QAErB;;;WAGG;QACH,iBAAY,GAAG,EAAE,CAAC;QAElB;;;WAGG;QACH,YAAO,GAAG,KAAK,CAAC;QAIZ,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;SAAE;QACjF,IAAI,OAAO,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE;YAAE,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;SAAE;QAC9F,IAAI,OAAO,QAAQ,CAAC,YAAY,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;SAAE;QAC7F,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE;YAAE,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;SAAE;QAC/E,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrC,IAAI,IAAI,IAAI,QAAQ,EAAE;gBAClB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,wDAAwD,CAAC,CAAC;aACjF;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/esm/storage/custom/indexed-db/transaction.js b/dist/esm/storage/custom/indexed-db/transaction.js new file mode 100644 index 0000000..bbe029d --- /dev/null +++ b/dist/esm/storage/custom/indexed-db/transaction.js @@ -0,0 +1,220 @@ +import { CustomStorageHelpers, CustomStorageTransaction } from '../index.js'; +function _requestToPromise(request) { + return new Promise((resolve, reject) => { + request.onsuccess = event => { + return resolve(request.result || null); + }; + request.onerror = reject; + }); +} +export class IndexedDBStorageTransaction extends CustomStorageTransaction { + /** + * Creates a transaction object for IndexedDB usage. Because IndexedDB automatically commits + * transactions when they have not been touched for a number of microtasks (eg promises + * resolving whithout querying data), we will enqueue set and remove operations until commit + * or rollback. We'll create separate IndexedDB transactions for get operations, caching their + * values to speed up successive requests for the same data. + */ + constructor(context, target) { + super(target); + this.context = context; + this.production = true; // Improves performance, only set when all works well + this._pending = []; + } + _createTransaction(write = false) { + const tx = this.context.db.transaction(['nodes', 'content'], write ? 'readwrite' : 'readonly'); + return tx; + } + _splitMetadata(node) { + const value = node.value; + const copy = { ...node }; + delete copy.value; + const metadata = copy; + return { metadata, value }; + } + async commit() { + // console.log(`*** commit ${this._pending.length} operations ****`); + if (this._pending.length === 0) { + return; + } + const batch = this._pending.splice(0); + this.context.ipc.sendNotification({ action: 'cache.invalidate', paths: batch.map(op => op.path) }); + const tx = this._createTransaction(true); + try { + await new Promise((resolve, reject) => { + let stop = false, processed = 0; + const handleError = (err) => { + stop = true; + reject(err); + }; + const handleSuccess = () => { + if (++processed === batch.length) { + resolve(); + } + }; + batch.forEach((op, i) => { + if (stop) { + return; + } + let r1, r2; + const path = op.path; + if (op.action === 'set') { + const { metadata, value } = this._splitMetadata(op.node); + const nodeInfo = { path, metadata }; + r1 = tx.objectStore('nodes').put(nodeInfo); // Insert into "nodes" object store + r2 = tx.objectStore('content').put(value, path); // Add value to "content" object store + this.context.cache.set(path, op.node); + } + else if (op.action === 'remove') { + r1 = tx.objectStore('content').delete(path); // Remove from "content" object store + r2 = tx.objectStore('nodes').delete(path); // Remove from "nodes" data store + this.context.cache.set(path, null); + } + else { + handleError(new Error(`Unknown pending operation "${op.action}" on path "${path}" `)); + } + let succeeded = 0; + r1.onsuccess = r2.onsuccess = () => { + if (++succeeded === 2) { + handleSuccess(); + } + }; + r1.onerror = r2.onerror = handleError; + }); + }); + tx.commit && tx.commit(); + } + catch (err) { + console.error(err); + tx.abort && tx.abort(); + throw err; + } + } + async rollback(err) { + // Nothing has committed yet, so we'll leave it like that + this._pending = []; + } + async get(path) { + // console.log(`*** get "${path}" ****`); + if (this.context.cache.has(path)) { + const cache = this.context.cache.get(path); + // console.log(`Using cached node for path "${path}": `, cache); + return cache; + } + const tx = this._createTransaction(false); + const r1 = _requestToPromise(tx.objectStore('nodes').get(path)); // Get metadata from "nodes" object store + const r2 = _requestToPromise(tx.objectStore('content').get(path)); // Get content from "content" object store + try { + const results = await Promise.all([r1, r2]); + tx.commit && tx.commit(); + const info = results[0]; + if (!info) { + // Node doesn't exist + this.context.cache.set(path, null); + return null; + } + const node = info.metadata; + node.value = results[1]; + this.context.cache.set(path, node); + return node; + } + catch (err) { + console.error(`IndexedDB get error`, err); + tx.abort && tx.abort(); + throw err; + } + } + set(path, node) { + // Queue the operation until commit + this._pending.push({ action: 'set', path, node }); + } + remove(path) { + // Queue the operation until commit + this._pending.push({ action: 'remove', path }); + } + async removeMultiple(paths) { + // Queues multiple items at once, dramatically improves performance for large datasets + paths.forEach(path => { + this._pending.push({ action: 'remove', path }); + }); + } + childrenOf(path, include, checkCallback, addCallback) { + // console.log(`*** childrenOf "${path}" ****`); + return this._getChildrenOf(path, { ...include, descendants: false }, checkCallback, addCallback); + } + descendantsOf(path, include, checkCallback, addCallback) { + // console.log(`*** descendantsOf "${path}" ****`); + return this._getChildrenOf(path, { ...include, descendants: true }, checkCallback, addCallback); + } + _getChildrenOf(path, include, checkCallback, addCallback) { + // Use cursor to loop from path on + return new Promise((resolve, reject) => { + const pathInfo = CustomStorageHelpers.PathInfo.get(path); + const tx = this._createTransaction(false); + const store = tx.objectStore('nodes'); + const query = IDBKeyRange.lowerBound(path, true); + const cursor = include.metadata ? store.openCursor(query) : store.openKeyCursor(query); + cursor.onerror = e => { + tx.abort?.(); + reject(e); + }; + cursor.onsuccess = async (e) => { + const otherPath = cursor.result?.key ?? null; + let keepGoing = true; + if (otherPath === null) { + // No more results + keepGoing = false; + } + else if (!pathInfo.isAncestorOf(otherPath)) { + // Paths are sorted, no more children or ancestors to be expected! + keepGoing = false; + } + else if (include.descendants || pathInfo.isParentOf(otherPath)) { + let node; + if (include.metadata) { + const valueCursor = cursor; + const data = valueCursor.result.value; + node = data.metadata; + } + const shouldAdd = checkCallback(otherPath, node); + if (shouldAdd) { + if (include.value) { + // Load value! + if (this.context.cache.has(otherPath)) { + const cache = this.context.cache.get(otherPath); + node.value = cache.value; + } + else { + const req = tx.objectStore('content').get(otherPath); + node.value = await new Promise((resolve, reject) => { + req.onerror = e => { + resolve(null); // Value missing? + }; + req.onsuccess = e => { + resolve(req.result); + }; + }); + this.context.cache.set(otherPath, node.value === null ? null : node); + } + } + keepGoing = addCallback(otherPath, node); + } + } + if (keepGoing) { + try { + cursor.result.continue(); + } + catch (err) { + // We reached the end of the cursor? + keepGoing = false; + } + } + if (!keepGoing) { + tx.commit?.(); + resolve(); + } + }; + }); + } +} +//# sourceMappingURL=transaction.js.map \ No newline at end of file diff --git a/dist/esm/storage/custom/indexed-db/transaction.js.map b/dist/esm/storage/custom/indexed-db/transaction.js.map new file mode 100644 index 0000000..cf72c82 --- /dev/null +++ b/dist/esm/storage/custom/indexed-db/transaction.js.map @@ -0,0 +1 @@ +{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../../../src/storage/custom/indexed-db/transaction.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/storage/custom/local-storage/index.js b/dist/esm/storage/custom/local-storage/index.js new file mode 100644 index 0000000..eabafcc --- /dev/null +++ b/dist/esm/storage/custom/local-storage/index.js @@ -0,0 +1,35 @@ +import { CustomStorageSettings } from '../index.js'; +import { AceBase } from '../../../index.js'; +import { LocalStorageSettings } from './settings.js'; +import { LocalStorageTransaction } from './transaction.js'; +export { LocalStorageSettings, LocalStorageTransaction }; +export function createLocalStorageInstance(dbname, init = {}) { + const settings = new LocalStorageSettings(init); + // Determine whether to use localStorage or sessionStorage + const localStorage = settings.provider ? settings.provider : settings.temp ? window.localStorage : window.sessionStorage; + // Setup our CustomStorageSettings + const storageSettings = new CustomStorageSettings({ + name: 'LocalStorage', + locking: true, + removeVoidProperties: settings.removeVoidProperties, + maxInlineValueSize: settings.maxInlineValueSize, + ready() { + // LocalStorage is always ready + return Promise.resolve(); + }, + getTransaction(target) { + // Create an instance of our transaction class + const context = { + debug: true, + dbname, + localStorage, + }; + const transaction = new LocalStorageTransaction(context, target); + return Promise.resolve(transaction); + }, + }); + const db = new AceBase(dbname, { logLevel: settings.logLevel, storage: storageSettings, sponsor: settings.sponsor }); + db.settings.ipcEvents = settings.multipleTabs === true; + return db; +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/esm/storage/custom/local-storage/index.js.map b/dist/esm/storage/custom/local-storage/index.js.map new file mode 100644 index 0000000..2169144 --- /dev/null +++ b/dist/esm/storage/custom/local-storage/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/storage/custom/local-storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,CAAC;AAEzD,MAAM,UAAU,0BAA0B,CAAC,MAAc,EAAE,OAAsC,EAAE;IAC/F,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAEhD,0DAA0D;IAC1D,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;IAEzH,kCAAkC;IAClC,MAAM,eAAe,GAAG,IAAI,qBAAqB,CAAC;QAC9C,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,IAAI;QACb,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;QACnD,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB;QAC/C,KAAK;YACD,+BAA+B;YAC/B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7B,CAAC;QACD,cAAc,CAAC,MAAwC;YACnD,8CAA8C;YAC9C,MAAM,OAAO,GAAG;gBACZ,KAAK,EAAE,IAAI;gBACX,MAAM;gBACN,YAAY;aACf,CAAC;YACF,MAAM,WAAW,GAAG,IAAI,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACjE,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACxC,CAAC;KACJ,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACrH,EAAE,CAAC,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC;IAEvD,OAAO,EAAE,CAAC;AACd,CAAC"} \ No newline at end of file diff --git a/dist/esm/storage/custom/local-storage/interface.js b/dist/esm/storage/custom/local-storage/interface.js new file mode 100644 index 0000000..95423ac --- /dev/null +++ b/dist/esm/storage/custom/local-storage/interface.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=interface.js.map \ No newline at end of file diff --git a/dist/esm/storage/custom/local-storage/interface.js.map b/dist/esm/storage/custom/local-storage/interface.js.map new file mode 100644 index 0000000..1807e85 --- /dev/null +++ b/dist/esm/storage/custom/local-storage/interface.js.map @@ -0,0 +1 @@ +{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../../../../src/storage/custom/local-storage/interface.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/esm/storage/custom/local-storage/settings.js b/dist/esm/storage/custom/local-storage/settings.js new file mode 100644 index 0000000..3639732 --- /dev/null +++ b/dist/esm/storage/custom/local-storage/settings.js @@ -0,0 +1,37 @@ +import { StorageSettings } from '../../index.js'; +export class LocalStorageSettings extends StorageSettings { + constructor(settings) { + super(settings); + /** + * whether to use sessionStorage instead of localStorage + * @default false + */ + this.temp = false; + /** + * Whether to enable cross-tab synchronization + * @default false + */ + this.multipleTabs = false; + if (typeof settings.temp === 'boolean') { + this.temp = settings.temp; + } + if (typeof settings.provider === 'object') { + this.provider = settings.provider; + } + if (typeof settings.multipleTabs === 'boolean') { + this.multipleTabs = settings.multipleTabs; + } + if (typeof settings.logLevel === 'string') { + this.logLevel = settings.logLevel; + } + if (typeof settings.sponsor === 'boolean') { + this.sponsor = settings.sponsor; + } + ['type', 'ipc', 'path'].forEach((prop) => { + if (prop in settings) { + console.warn(`${prop} setting is not supported for AceBase LocalStorage`); + } + }); + } +} +//# sourceMappingURL=settings.js.map \ No newline at end of file diff --git a/dist/esm/storage/custom/local-storage/settings.js.map b/dist/esm/storage/custom/local-storage/settings.js.map new file mode 100644 index 0000000..5273b41 --- /dev/null +++ b/dist/esm/storage/custom/local-storage/settings.js.map @@ -0,0 +1 @@ +{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../../../src/storage/custom/local-storage/settings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAGxC,MAAM,OAAO,oBAAqB,SAAQ,eAAe;IACrD,YAAY,QAAuC;QAC/C,KAAK,CAAC,QAAQ,CAAC,CAAC;QAapB;;;WAGG;QACH,SAAI,GAAG,KAAK,CAAC;QAOb;;;WAGG;QACH,iBAAY,GAAG,KAAK,CAAC;QA3BjB,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE;YAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;SAAE;QACtE,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;SAAE;QACjF,IAAI,OAAO,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE;YAAE,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;SAAE;QAC9F,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;SAAE;QACjF,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE;YAAE,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;SAAE;QAC/E,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrC,IAAI,IAAI,IAAI,QAAQ,EAAE;gBAClB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,oDAAoD,CAAC,CAAC;aAC7E;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CA4CJ"} \ No newline at end of file diff --git a/dist/esm/storage/custom/local-storage/transaction.js b/dist/esm/storage/custom/local-storage/transaction.js new file mode 100644 index 0000000..e9546e0 --- /dev/null +++ b/dist/esm/storage/custom/local-storage/transaction.js @@ -0,0 +1,89 @@ +import { CustomStorageHelpers, CustomStorageTransaction } from '../index.js'; +// Setup CustomStorageTransaction for browser's LocalStorage +export class LocalStorageTransaction extends CustomStorageTransaction { + constructor(context, target) { + super(target); + this.context = context; + this._storageKeysPrefix = `${this.context.dbname}.acebase::`; + } + async commit() { + // All changes have already been committed. TODO: use same approach as IndexedDB + } + async rollback(err) { + // Not able to rollback changes, because we did not keep track + } + async get(path) { + // Gets value from localStorage, wrapped in Promise + const json = this.context.localStorage.getItem(this.getStorageKeyForPath(path)); + const val = JSON.parse(json); + return val; + } + async set(path, val) { + // Sets value in localStorage, wrapped in Promise + const json = JSON.stringify(val); + this.context.localStorage.setItem(this.getStorageKeyForPath(path), json); + } + async remove(path) { + // Removes a value from localStorage, wrapped in Promise + this.context.localStorage.removeItem(this.getStorageKeyForPath(path)); + } + async childrenOf(path, include, checkCallback, addCallback) { + // Streams all child paths + // Cannot query localStorage, so loop through all stored keys to find children + const pathInfo = CustomStorageHelpers.PathInfo.get(path); + for (let i = 0; i < this.context.localStorage.length; i++) { + const key = this.context.localStorage.key(i); + if (!key.startsWith(this._storageKeysPrefix)) { + continue; + } + const otherPath = this.getPathFromStorageKey(key); + if (pathInfo.isParentOf(otherPath) && checkCallback(otherPath)) { + let node; + if (include.metadata || include.value) { + const json = this.context.localStorage.getItem(key); + node = JSON.parse(json); + } + const keepGoing = addCallback(otherPath, node); + if (!keepGoing) { + break; + } + } + } + } + async descendantsOf(path, include, checkCallback, addCallback) { + // Streams all descendant paths + // Cannot query localStorage, so loop through all stored keys to find descendants + const pathInfo = CustomStorageHelpers.PathInfo.get(path); + for (let i = 0; i < this.context.localStorage.length; i++) { + const key = this.context.localStorage.key(i); + if (!key.startsWith(this._storageKeysPrefix)) { + continue; + } + const otherPath = this.getPathFromStorageKey(key); + if (pathInfo.isAncestorOf(otherPath) && checkCallback(otherPath)) { + let node; + if (include.metadata || include.value) { + const json = this.context.localStorage.getItem(key); + node = JSON.parse(json); + } + const keepGoing = addCallback(otherPath, node); + if (!keepGoing) { + break; + } + } + } + } + /** + * Helper function to get the path from a localStorage key + */ + getPathFromStorageKey(key) { + return key.slice(this._storageKeysPrefix.length); + } + /** + * Helper function to get the localStorage key for a path + */ + getStorageKeyForPath(path) { + return `${this._storageKeysPrefix}${path}`; + } +} +//# sourceMappingURL=transaction.js.map \ No newline at end of file diff --git a/dist/esm/storage/custom/local-storage/transaction.js.map b/dist/esm/storage/custom/local-storage/transaction.js.map new file mode 100644 index 0000000..48e793a --- /dev/null +++ b/dist/esm/storage/custom/local-storage/transaction.js.map @@ -0,0 +1 @@ +{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../../../src/storage/custom/local-storage/transaction.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/storage/index.js b/dist/esm/storage/index.js new file mode 100644 index 0000000..9b9bcd9 --- /dev/null +++ b/dist/esm/storage/index.js @@ -0,0 +1,2066 @@ +import { Utils, DebugLogger, PathInfo, ID, PathReference, ascii85, SimpleEventEmitter, SchemaDefinition } from 'acebase-core'; +import { VALUE_TYPES } from '../node-value-types.js'; +import { NodeRevisionError } from '../node-errors.js'; +import { NodeInfo } from '../node-info.js'; +import { IPCPeer, RemoteIPCPeer } from '../ipc/index.js'; +import { pfs } from '../promise-fs/index.js'; +// const { IPCTransactionManager } = require('./node-transaction'); +import { DataIndex } from '../data-index/index.js'; // Indexing might not be available: the browser dist bundle doesn't include it because fs is not available: browserify --i ./src/data-index.js +import { createIndex } from './indexes.js'; +const { compareValues, getChildValues, encodeString, defer } = Utils; +const DEBUG_MODE = false; +const SUPPORTED_EVENTS = ['value', 'child_added', 'child_changed', 'child_removed', 'mutated', 'mutations']; +// Add 'notify_*' event types for each event to enable data-less notifications, so data retrieval becomes optional +SUPPORTED_EVENTS.push(...SUPPORTED_EVENTS.map(event => `notify_${event}`)); +// eslint-disable-next-line @typescript-eslint/no-empty-function +const NOOP = () => { }; +export class SchemaValidationError extends Error { + constructor(reason) { + super(`Schema validation failed: ${reason}`); + this.reason = reason; + } +} +/** + * Storage Settings + */ +export class StorageSettings { + constructor(settings = {}) { + /** + * in bytes, max amount of child data to store within a parent record before moving to a dedicated record. Default is 50 + * @default 50 + */ + this.maxInlineValueSize = 50; + /** + * Instead of throwing errors on undefined values, remove the properties automatically. Default is false + * @default false + */ + this.removeVoidProperties = false; + /** + * Target path to store database files in, default is `'.'` + * @default '.' + */ + this.path = '.'; + /** + * timeout setting for read and write locks in seconds. Operations taking longer than this will be aborted. Default is 120 seconds. + * @default 120 + */ + this.lockTimeout = 120; + /** + * optional type of storage class - used by `AceBaseStorage` to create different specific db files (data, transaction, auth etc) + * @see AceBaseStorageSettings see `AceBaseStorageSettings.type` for more info + */ + this.type = 'data'; + /** + * Whether the database should be opened in readonly mode + * @default false + */ + this.readOnly = false; + if (typeof settings.maxInlineValueSize === 'number') { + this.maxInlineValueSize = settings.maxInlineValueSize; + } + if (typeof settings.removeVoidProperties === 'boolean') { + this.removeVoidProperties = settings.removeVoidProperties; + } + if (typeof settings.path === 'string') { + this.path = settings.path; + } + if (this.path.endsWith('/')) { + this.path = this.path.slice(0, -1); + } + if (typeof settings.lockTimeout === 'number') { + this.lockTimeout = settings.lockTimeout; + } + if (typeof settings.type === 'string') { + this.type = settings.type; + } + if (typeof settings.readOnly === 'boolean') { + this.readOnly = settings.readOnly; + } + if (typeof settings.ipc === 'object') { + this.ipc = settings.ipc; + } + } +} +export class Storage extends SimpleEventEmitter { + /** + * Base class for database storage, must be extended by back-end specific methods. + * Currently implemented back-ends are AceBaseStorage, SQLiteStorage, MSSQLStorage, CustomStorage + * @param name name of the database + * @param settings instance of AceBaseStorageSettings or SQLiteStorageSettings + */ + constructor(name, settings, env) { + super(); + this.name = name; + this.settings = settings; + // private _validation = new Map boolean, schema?: SchemaDefinition }>; + this._schemas = []; + this._indexes = []; + this.indexes = { + /** + * Tests if (the default storage implementation of) indexes are supported in the environment. + * They are currently only supported when running in Node.js because they use the fs filesystem. + * TODO: Implement storage specific indexes (eg in SQLite, MySQL, MSSQL, in-memory) + */ + get supported() { + return pfs?.hasFileSystem; + }, + create: (path, key, options = { + rebuild: false, + }) => { + const context = { storage: this, debug: this.debug, indexes: this._indexes, ipc: this.ipc }; + return createIndex(context, path, key, options); + }, + /** + * Returns indexes at a path, or a specific index on a key in that path + */ + get: (path, key = null) => { + if (path.includes('$')) { + // Replace $variables in path with * wildcards + const pathKeys = PathInfo.getPathKeys(path).map(key => typeof key === 'string' && key.startsWith('$') ? '*' : key); + path = (new PathInfo(pathKeys)).path; + } + return this._indexes.filter(index => index.path === path && + (key === null || key === index.key)); + }, + /** + * Returns all indexes on a target path, optionally includes indexes on child and parent paths + */ + getAll: (targetPath, options = { parentPaths: true, childPaths: true }) => { + const pathKeys = PathInfo.getPathKeys(targetPath); + return this._indexes.filter(index => { + const indexKeys = PathInfo.getPathKeys(index.path + '/*'); + // check if index is on a parent node of given path: + if (options.parentPaths && indexKeys.every((key, i) => { return key === '*' || pathKeys[i] === key; }) && [index.key].concat(...index.includeKeys).includes(pathKeys[indexKeys.length])) { + // eg: path = 'restaurants/1/location/lat', index is on 'restaurants(/*)', key 'location' + return true; + } + else if (indexKeys.length < pathKeys.length) { + // the index is on a higher path, and did not match above parent paths check + return false; + } + else if (!options.childPaths && indexKeys.length !== pathKeys.length) { + // no checking for indexes on child paths and index path has more or less keys than path + // eg: path = 'restaurants/1', index is on child path 'restaurants/*/reviews(/*)', key 'rating' + return false; + } + // check if all path's keys match the index path + // eg: path = 'restaurants/1', index is on 'restaurants(/*)', key 'name' + // or: path = 'restaurants/1', index is on 'restaurants/*/reviews(/*)', key 'rating' (and options.childPaths === true) + return pathKeys.every((key, i) => { + return [key, '*'].includes(indexKeys[i]); //key === indexKeys[i] || indexKeys[i] === '*'; + }); + }); + }, + /** + * Returns all indexes + */ + list: () => { + return this._indexes.slice(); + }, + /** + * Discovers and populates all created indexes + */ + load: async () => { + this._indexes.splice(0); + if (!pfs.hasFileSystem) { + // If pfs (fs) is not available, don't try using it + return; + } + let files = []; + try { + files = (await pfs.readdir(`${this.settings.path}/${this.name}.acebase`)); + } + catch (err) { + if (err.code !== 'ENOENT') { + // If the directory is not found, there are no file indexes. (probably not supported by used storage class) + // Only complain if error is something else + this.debug.error(err); + } + } + const promises = []; + files.forEach(fileName => { + if (!fileName.endsWith('.idx')) { + return; + } + const needsStoragePrefix = this.settings.type !== 'data'; // auth indexes need to start with "[auth]-" and have to be ignored by other storage types + const hasStoragePrefix = /^\[[a-z]+\]-/.test(fileName); + if ((!needsStoragePrefix && !hasStoragePrefix) || needsStoragePrefix && fileName.startsWith(`[${this.settings.type}]-`)) { + const p = this.indexes.add(fileName); + promises.push(p); + } + }); + await Promise.all(promises); + }, + add: async (fileName) => { + try { + const index = await DataIndex.readFromFile(this, fileName); + this._indexes.push(index); + return index; + } + catch (err) { + this.debug.error(err); + return null; + } + }, + /** + * Deletes an index from the database + */ + delete: async (fileName) => { + const index = await this.indexes.remove(fileName); + await index.delete(); + this.ipc.sendNotification({ type: 'index.deleted', fileName: index.fileName, path: index.path, keys: index.key }); + }, + /** + * Removes an index from the list. Does not delete the actual file, `delete` does that! + * @returns returns the removed index + */ + remove: async (fileName) => { + const index = this._indexes.find(index => index.fileName === fileName); + if (!index) { + throw new Error(`Index ${fileName} not found`); + } + this._indexes.splice(this._indexes.indexOf(index), 1); + return index; + }, + close: async () => { + // Close all indexes + const promises = this.indexes.list().map(index => index.close().catch(err => this.debug.error(err))); + await Promise.all(promises); + }, + }; + this._eventSubscriptions = {}; + this.subscriptions = { + /** + * Adds a subscription to a node + * @param path Path to the node to add subscription to + * @param type Type of the subscription + * @param callback Subscription callback function + */ + add: (path, type, callback) => { + if (SUPPORTED_EVENTS.indexOf(type) < 0) { + throw new TypeError(`Invalid event type "${type}"`); + } + let pathSubs = this._eventSubscriptions[path]; + if (!pathSubs) { + pathSubs = this._eventSubscriptions[path] = []; + } + // if (pathSubs.findIndex(ps => ps.type === type && ps.callback === callback)) { + // storage.debug.warn(`Identical subscription of type ${type} on path "${path}" being added`); + // } + pathSubs.push({ created: Date.now(), type, callback }); + this.emit('subscribe', { path, event: type, callback }); // Enables IPC peers to be notified + }, + /** + * Removes 1 or more subscriptions from a node + * @param path Path to the node to remove the subscription from + * @param type Type of subscription(s) to remove (optional: if omitted all types will be removed) + * @param callback Callback to remove (optional: if omitted all of the same type will be removed) + */ + remove: (path, type, callback) => { + const pathSubs = this._eventSubscriptions[path]; + if (!pathSubs) { + return; + } + const next = () => pathSubs.findIndex(ps => (type ? ps.type === type : true) && (callback ? ps.callback === callback : true)); + let i; + while ((i = next()) >= 0) { + pathSubs.splice(i, 1); + } + this.emit('unsubscribe', { path, event: type, callback }); // Enables IPC peers to be notified + }, + /** + * Checks if there are any subscribers at given path that need the node's previous value when a change is triggered + * @param path + */ + hasValueSubscribersForPath(path) { + const valueNeeded = this.getValueSubscribersForPath(path); + return !!valueNeeded; + }, + /** + * Gets all subscribers at given path that need the node's previous value when a change is triggered + * @param path + */ + getValueSubscribersForPath: (path) => { + // Subscribers that MUST have the entire previous value of a node before updating: + // - "value" events on the path itself, and any ancestor path + // - "child_added", "child_removed" events on the parent path + // - "child_changed" events on the parent path and its ancestors + // - ALL events on child/descendant paths + const pathInfo = new PathInfo(path); + const valueSubscribers = []; + Object.keys(this._eventSubscriptions).forEach(subscriptionPath => { + if (pathInfo.equals(subscriptionPath) || pathInfo.isDescendantOf(subscriptionPath)) { + // path being updated === subscriptionPath, or a child/descendant path of it + // eg path === "posts/123/title" + // and subscriptionPath is "posts/123/title", "posts/$postId/title", "posts/123", "posts/*", "posts" etc + const pathSubs = this._eventSubscriptions[subscriptionPath]; + const eventPath = PathInfo.fillVariables(subscriptionPath, path); + pathSubs + .filter(sub => !sub.type.startsWith('notify_')) // notify events don't need additional value loading + .forEach(sub => { + let dataPath = null; + if (sub.type === 'value') { // ["value", "notify_value"].includes(sub.type) + dataPath = eventPath; + } + else if (['mutated', 'mutations'].includes(sub.type) && pathInfo.isDescendantOf(eventPath)) { //["mutated", "notify_mutated"].includes(sub.type) + dataPath = path; // Only needed data is the properties being updated in the targeted path + } + else if (sub.type === 'child_changed' && path !== eventPath) { // ["child_changed", "notify_child_changed"].includes(sub.type) + const childKey = PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//, ''))[0]; + dataPath = PathInfo.getChildPath(eventPath, childKey); + } + else if (['child_added', 'child_removed'].includes(sub.type) && pathInfo.isChildOf(eventPath)) { //["child_added", "child_removed", "notify_child_added", "notify_child_removed"] + const childKey = PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//, ''))[0]; + dataPath = PathInfo.getChildPath(eventPath, childKey); + } + if (dataPath !== null && !valueSubscribers.some(s => s.type === sub.type && s.eventPath === eventPath)) { + valueSubscribers.push({ type: sub.type, eventPath, dataPath, subscriptionPath }); + } + }); + } + }); + return valueSubscribers; + }, + /** + * Gets all subscribers at given path that could possibly be invoked after a node is updated + */ + getAllSubscribersForPath: (path) => { + const pathInfo = PathInfo.get(path); + const subscribers = []; + Object.keys(this._eventSubscriptions).forEach(subscriptionPath => { + // if (pathInfo.equals(subscriptionPath) //path === subscriptionPath + // || pathInfo.isDescendantOf(subscriptionPath) + // || pathInfo.isAncestorOf(subscriptionPath) + // ) { + if (pathInfo.isOnTrailOf(subscriptionPath)) { + const pathSubs = this._eventSubscriptions[subscriptionPath]; + const eventPath = PathInfo.fillVariables(subscriptionPath, path); + pathSubs.forEach(sub => { + let dataPath = null; + if (sub.type === 'value' || sub.type === 'notify_value') { + dataPath = eventPath; + } + else if (['child_changed', 'notify_child_changed'].includes(sub.type)) { + const childKey = path === eventPath || pathInfo.isAncestorOf(eventPath) + ? '*' + : PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//, ''))[0]; + dataPath = PathInfo.getChildPath(eventPath, childKey); + } + else if (['mutated', 'mutations', 'notify_mutated', 'notify_mutations'].includes(sub.type)) { + dataPath = path; + } + else if (['child_added', 'child_removed', 'notify_child_added', 'notify_child_removed'].includes(sub.type) + && (pathInfo.isChildOf(eventPath) + || path === eventPath + || pathInfo.isAncestorOf(eventPath))) { + const childKey = path === eventPath || pathInfo.isAncestorOf(eventPath) + ? '*' + : PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//, ''))[0]; + dataPath = PathInfo.getChildPath(eventPath, childKey); //NodePath(subscriptionPath).childPath(childKey); + } + if (dataPath !== null && !subscribers.some(s => s.type === sub.type && s.eventPath === eventPath && s.subscriptionPath === subscriptionPath)) { // && subscribers.findIndex(s => s.type === sub.type && s.dataPath === dataPath) < 0 + subscribers.push({ type: sub.type, eventPath, dataPath, subscriptionPath }); + } + }); + } + }); + return subscribers; + }, + /** + * Triggers subscription events to run on relevant nodes + * @param event Event type: "value", "child_added", "child_changed", "child_removed" + * @param path Path to the node the subscription is on + * @param dataPath path to the node the value is stored + * @param oldValue old value + * @param newValue new value + * @param context context used by the client that updated this data + */ + trigger: (event, path, dataPath, oldValue, newValue, context) => { + //console.warn(`Event "${event}" triggered on node "/${path}" with data of "/${dataPath}": `, newValue); + const pathSubscriptions = this._eventSubscriptions[path] || []; + pathSubscriptions.filter(sub => sub.type === event) + .forEach(sub => { + sub.callback(null, dataPath, newValue, oldValue, context); + // if (event.startsWith('notify_')) { + // // Notify only event, run callback without data + // sub.callback(null, dataPath); + // } + // else { + // // Run callback with data + // sub.callback(null, dataPath, newValue, oldValue); + // } + }); + }, + }; + this.debug = new DebugLogger(env.logLevel, `[${name}${typeof settings.type === 'string' && settings.type !== 'data' ? `:${settings.type}` : ''}]`); // `├ ${name} ┤` // `[🧱${name}]` + // Setup IPC to allow vertical scaling (multiple threads sharing locks and data) + const ipcName = name + (typeof settings.type === 'string' ? `_${settings.type}` : ''); + if (settings.ipc) { + if (typeof settings.ipc.port !== 'number') { + throw new Error('IPC port number must be a number'); + } + if (!['master', 'worker'].includes(settings.ipc.role)) { + throw new Error(`IPC client role must be either "master" or "worker", not "${settings.ipc.role}"`); + } + const ipcSettings = Object.assign({ dbname: ipcName }, settings.ipc); + this.ipc = new RemoteIPCPeer(this, ipcSettings); + } + else { + this.ipc = new IPCPeer(this, ipcName); + } + this.ipc.once('exit', (code) => { + // We can perform any custom cleanup here: + // - storage-acebase should close the db file + // - storage-mssql / sqlite should close connection + // - indexes should close their files + if (this.indexes.supported) { + this.indexes.close(); + } + }); + this.nodeLocker = { + lock: (path, tid, write, comment) => { + return this.ipc.lock({ path, tid, write, comment }); + }, + }; + // this.transactionManager = new IPCTransactionManager(this.ipc); + this._lastTid = 0; + } // end of constructor + createTid() { + return DEBUG_MODE ? ++this._lastTid : ID.generate(); + } + async close() { + // Close the database by calling exit on the ipc channel, which will emit an 'exit' event when the database can be safely closed. + await this.ipc.exit(); + } + get path() { + return `${this.settings.path}/${this.name}.acebase`; + } + /** + * Checks if a value can be stored in a parent object, or if it should + * move to a dedicated record. Uses settings.maxInlineValueSize + * @param value + */ + valueFitsInline(value) { + if (typeof value === 'number' || typeof value === 'boolean' || value instanceof Date) { + return true; + } + else if (typeof value === 'string') { + if (value.length > this.settings.maxInlineValueSize) { + return false; + } + // if the string has unicode chars, its byte size will be bigger than value.length + const encoded = encodeString(value); + return encoded.length < this.settings.maxInlineValueSize; + } + else if (value instanceof PathReference) { + if (value.path.length > this.settings.maxInlineValueSize) { + return false; + } + // if the path has unicode chars, its byte size will be bigger than value.path.length + const encoded = encodeString(value.path); + return encoded.length < this.settings.maxInlineValueSize; + } + else if (value instanceof ArrayBuffer) { + return value.byteLength < this.settings.maxInlineValueSize; + } + else if (value instanceof Array) { + return value.length === 0; + } + else if (typeof value === 'object') { + return Object.keys(value).length === 0; + } + else { + throw new TypeError('What else is there?'); + } + } + /** + * Creates or updates a node in its own record. DOES NOT CHECK if path exists in parent node, or if parent paths exist! Calling code needs to do this + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _writeNode(path, value, options) { + throw new Error('This method must be implemented by subclass'); + } + getUpdateImpact(path, suppressEvents) { + let topEventPath = path; + let hasValueSubscribers = false; + // Get all subscriptions that should execute on the data (includes events on child nodes as well) + const eventSubscriptions = suppressEvents ? [] : this.subscriptions.getAllSubscribersForPath(path); + // Get all subscriptions for data on this or ancestor nodes, determines what data to load before processing + const valueSubscribers = suppressEvents ? [] : this.subscriptions.getValueSubscribersForPath(path); + if (valueSubscribers.length > 0) { + hasValueSubscribers = true; + const eventPaths = valueSubscribers + .map(sub => { return { path: sub.dataPath, keys: PathInfo.getPathKeys(sub.dataPath) }; }) + .sort((a, b) => { + if (a.keys.length < b.keys.length) + return -1; + else if (a.keys.length > b.keys.length) + return 1; + return 0; + }); + const first = eventPaths[0]; + topEventPath = first.path; + if (valueSubscribers.filter(sub => sub.dataPath === topEventPath).every(sub => sub.type === 'mutated' || sub.type.startsWith('notify_'))) { + // Prevent loading of all data on path, so it'll only load changing properties + hasValueSubscribers = false; + } + topEventPath = PathInfo.fillVariables(topEventPath, path); // fill in any wildcards in the subscription path + } + const indexes = this.indexes.getAll(path, { childPaths: true, parentPaths: true }) + .map(index => ({ index, keys: PathInfo.getPathKeys(index.path) })) + .sort((a, b) => { + if (a.keys.length < b.keys.length) { + return -1; + } + else if (a.keys.length > b.keys.length) { + return 1; + } + return 0; + }) + .map(obj => obj.index); + const keysFilter = []; + if (indexes.length > 0) { + indexes.sort((a, b) => { + if (typeof a._pathKeys === 'undefined') { + a._pathKeys = PathInfo.getPathKeys(a.path); + } + if (typeof b._pathKeys === 'undefined') { + b._pathKeys = PathInfo.getPathKeys(b.path); + } + if (a._pathKeys.length < b._pathKeys.length) + return -1; + else if (a._pathKeys.length > b._pathKeys.length) + return 1; + return 0; + }); + const topIndex = indexes[0]; + const topIndexPath = topIndex.path === path ? path : PathInfo.fillVariables(`${topIndex.path}/*`, path); + if (topIndexPath.length < topEventPath.length) { + // index is on a higher path than any value subscriber. + // eg: + // path = 'restaurants/1/rating' + // topEventPath = 'restaurants/1/rating' (because of 'value' event on 'restaurants/*/rating') + // topIndexPath = 'restaurants/1' (because of index on 'restaurants(/*)', key 'name', included key 'rating') + // set topEventPath to topIndexPath, but include only: + // - indexed keys on that path, + // - any additional child keys for all value event subscriptions in that path (they can never be different though?) + topEventPath = topIndexPath; + indexes.filter(index => index.path === topIndex.path).forEach(index => { + const keys = [index.key].concat(index.includeKeys); + keys.forEach(key => !keysFilter.includes(key) && keysFilter.push(key)); + }); + } + } + return { topEventPath, eventSubscriptions, valueSubscribers, hasValueSubscribers, indexes, keysFilter }; + } + /** + * Wrapper for _writeNode, handles triggering change events, index updating. + * @returns Returns a promise that resolves with an object that contains storage specific details, + * plus the applied mutations if transaction logging is enabled + */ + async _writeNodeWithTracking(path, value, options = { + merge: false, + waitForIndexUpdates: true, + suppress_events: false, + context: null, + impact: null, + }) { + options = options || {}; + if (!options.tid && !options.transaction) { + throw new Error('_writeNodeWithTracking MUST be executed with a tid OR transaction!'); + } + options.merge = options.merge === true; + // Does the value meet schema requirements? + const validation = this.validateSchema(path, value, { updates: options.merge }); + if (!validation.ok) { + throw new SchemaValidationError(validation.reason); + } + const tid = options.tid; + const transaction = options.transaction; + // Is anyone interested in the values changing on this path? + let topEventData = null; + const updateImpact = options.impact ? options.impact : this.getUpdateImpact(path, options.suppress_events); + const { topEventPath, eventSubscriptions, hasValueSubscribers, indexes } = updateImpact; + let { keysFilter } = updateImpact; + const writeNode = () => { + if (typeof options._customWriteFunction === 'function') { + return options._customWriteFunction(); + } + if (topEventData) { + // Pass loaded data to _writeNode, speeds up recursive calls + // This prevents reloading and/or overwriting of unchanged child nodes + const pathKeys = PathInfo.getPathKeys(path); + const eventPathKeys = PathInfo.getPathKeys(topEventPath); + const trailKeys = pathKeys.slice(eventPathKeys.length); + let currentValue = topEventData; + while (trailKeys.length > 0 && currentValue !== null) { + /** @type {string|number} trailKeys.shift() as string|number */ + const childKey = trailKeys.shift(); + currentValue = typeof currentValue === 'object' && childKey in currentValue ? currentValue[childKey] : null; + } + options.currentValue = currentValue; + } + return this._writeNode(path, value, options); + }; + const transactionLoggingEnabled = this.settings.transactions && this.settings.transactions.log === true; + if (eventSubscriptions.length === 0 && indexes.length === 0 && !transactionLoggingEnabled) { + // Nobody's interested in value changes. Write node without tracking + return writeNode(); + } + if (!hasValueSubscribers && options.merge === true && keysFilter.length === 0) { + // only load properties being updated + keysFilter = Object.keys(value); + if (topEventPath !== path) { + const trailPath = path.slice(topEventPath.length); + keysFilter = keysFilter.map(key => `${trailPath}/${key}`); + } + } + const eventNodeInfo = await this.getNodeInfo(topEventPath, { transaction, tid }); + let currentValue = null; + if (eventNodeInfo.exists) { + const valueOptions = { transaction, tid }; + if (keysFilter.length > 0) { + valueOptions.include = keysFilter; + } + if (topEventPath === '' && typeof valueOptions.include === 'undefined') { + this.debug.warn('WARNING: One or more value event listeners on the root node are causing the entire database value to be read to facilitate change tracking. Using "value", "notify_value", "child_changed" and "notify_child_changed" events on the root node are a bad practice because of the significant performance impact. Use "mutated" or "mutations" events instead'); + } + const node = await this.getNode(topEventPath, valueOptions); + currentValue = node.value; + } + topEventData = currentValue; + // Now proceed with node updating + const result = (await writeNode()) || {}; + // Build data for old/new comparison + let newTopEventData, modifiedData; + if (path === topEventPath) { + if (options.merge) { + if (topEventData === null) { + newTopEventData = value instanceof Array ? [] : {}; + } + else { + // Create shallow copy of previous object value + newTopEventData = topEventData instanceof Array ? [] : {}; + Object.keys(topEventData).forEach(key => { + newTopEventData[key] = topEventData[key]; + }); + } + } + else { + newTopEventData = value; + } + modifiedData = newTopEventData; + } + else { + // topEventPath is on a higher path, so we have to adjust the value deeper down + const trailPath = path.slice(topEventPath.length).replace(/^\//, ''); + const trailKeys = PathInfo.getPathKeys(trailPath); + // Create shallow copy of the original object (let unchanged properties reference existing objects) + if (topEventData === null) { + // the node didn't exist prior to the update (or was not loaded) + newTopEventData = typeof trailKeys[0] === 'number' ? [] : {}; + } + else { + newTopEventData = topEventData instanceof Array ? [] : {}; + Object.keys(topEventData).forEach(key => { + newTopEventData[key] = topEventData[key]; + }); + } + modifiedData = newTopEventData; + while (trailKeys.length > 0) { + const childKey = trailKeys.shift(); + // Create shallow copy of object at target + if (!options.merge && trailKeys.length === 0) { + modifiedData[childKey] = value; + } + else { + const original = modifiedData[childKey]; + const shallowCopy = typeof childKey === 'number' ? [...original] : { ...original }; + modifiedData[childKey] = shallowCopy; + } + modifiedData = modifiedData[childKey]; + } + } + if (options.merge) { + // Update target value with updates + Object.keys(value).forEach(key => { + modifiedData[key] = value[key]; + }); + } + // console.assert(topEventData !== newTopEventData, 'shallow copy must have been made!'); + const dataChanges = compareValues(topEventData, newTopEventData); + if (dataChanges === 'identical') { + result.mutations = []; + return result; + } + // Fix: remove null property values (https://github.com/appy-one/acebase/issues/2) + function removeNulls(obj) { + if (obj === null || typeof obj !== 'object') { + return obj; + } // Nothing to do + Object.keys(obj).forEach(prop => { + const val = obj[prop]; + if (val === null) { + delete obj[prop]; + if (obj instanceof Array) { + obj.length--; + } // Array items can only be removed from the end, + } + if (typeof val === 'object') { + removeNulls(val); + } + }); + } + removeNulls(newTopEventData); + // Trigger all index updates + // TODO: Let indexes subscribe to "mutations" event, saves a lot of work because we are preparing + // before/after copies of the relevant data here, and then the indexes go check what data changed... + const indexUpdates = []; + indexes.map(index => ({ index, keys: PathInfo.getPathKeys(index.path) })) + .sort((a, b) => { + // Deepest paths should fire first, then bubble up the tree + if (a.keys.length < b.keys.length) { + return 1; + } + else if (a.keys.length > b.keys.length) { + return -1; + } + return 0; + }) + .forEach(({ index }) => { + // Index is either on the top event path, or on a child path + // Example situation: + // path = "users/ewout/posts/1" (a post was added) + // topEventPath = "users/ewout" (a "child_changed" event was on "users") + // index.path is "users/*/posts" + // index must be called with data of "users/ewout/posts/1" + const pathKeys = PathInfo.getPathKeys(topEventPath); + const indexPathKeys = PathInfo.getPathKeys(index.path + '/*'); + const trailKeys = indexPathKeys.slice(pathKeys.length); + // let { oldValue, newValue } = updatedData; + const oldValue = topEventData; + const newValue = newTopEventData; + if (trailKeys.length === 0) { + console.assert(pathKeys.length === indexPathKeys.length, 'check logic'); + // Index is on updated path + const p = this.ipc.isMaster + ? index.handleRecordUpdate(topEventPath, oldValue, newValue) + : this.ipc.sendRequest({ type: 'index.update', path: topEventPath, oldValue, newValue }); + indexUpdates.push(p); + return; // next index + } + const getAllIndexUpdates = (path, oldValue, newValue) => { + if (oldValue === null && newValue === null) { + return []; + } + const pathKeys = PathInfo.getPathKeys(path); + const indexPathKeys = PathInfo.getPathKeys(index.path + '/*'); + const trailKeys = indexPathKeys.slice(pathKeys.length); + if (trailKeys.length === 0) { + console.assert(pathKeys.length === indexPathKeys.length, 'check logic'); + return [{ path, oldValue, newValue }]; + } + let results = []; + let trailPath = ''; + while (trailKeys.length > 0) { + const subKey = trailKeys.shift(); + if (typeof subKey === 'string' && (subKey === '*' || subKey.startsWith('$'))) { + // Recursion needed + const allKeys = oldValue === null ? [] : Object.keys(oldValue); + newValue !== null && Object.keys(newValue).forEach(key => { + if (allKeys.indexOf(key) < 0) { + allKeys.push(key); + } + }); + allKeys.forEach(key => { + const childPath = PathInfo.getChildPath(trailPath, key); + const childValues = getChildValues(key, oldValue, newValue); + const subTrailPath = PathInfo.getChildPath(path, childPath); + const childResults = getAllIndexUpdates(subTrailPath, childValues.oldValue, childValues.newValue); + results = results.concat(childResults); + }); + break; + } + else { + const values = getChildValues(subKey, oldValue, newValue); + oldValue = values.oldValue; + newValue = values.newValue; + if (oldValue === null && newValue === null) { + break; + } + trailPath = PathInfo.getChildPath(trailPath, subKey); + } + } + return results; + }; + const results = getAllIndexUpdates(topEventPath, oldValue, newValue); + results.forEach(result => { + const p = this.ipc.isMaster + ? index.handleRecordUpdate(result.path, result.oldValue, result.newValue) + : this.ipc.sendRequest({ type: 'index.update', path: result.path, oldValue: result.oldValue, newValue: result.newValue }); + indexUpdates.push(p); + }); + }); + const callSubscriberWithValues = (sub, oldValue, newValue, variables = []) => { + let trigger = true; + let type = sub.type; + if (type.startsWith('notify_')) { + type = type.slice('notify_'.length); + } + if (type === 'mutated') { + return; // Ignore here, requires different logic + } + else if (type === 'child_changed' && (oldValue === null || newValue === null)) { + trigger = false; + } + else if (type === 'value' || type === 'child_changed') { + const changes = compareValues(oldValue, newValue); + trigger = changes !== 'identical'; + } + else if (type === 'child_added') { + trigger = oldValue === null && newValue !== null; + } + else if (type === 'child_removed') { + trigger = oldValue !== null && newValue === null; + } + const pathKeys = PathInfo.getPathKeys(sub.dataPath); + variables.forEach(variable => { + // only replaces first occurrence (so multiple *'s will be processed 1 by 1) + const index = pathKeys.indexOf(variable.name); + console.assert(index >= 0, `Variable "${variable.name}" not found in subscription dataPath "${sub.dataPath}"`); + pathKeys[index] = variable.value; + }); + const dataPath = pathKeys.reduce((path, key) => PathInfo.getChildPath(path, key), ''); + trigger && this.subscriptions.trigger(sub.type, sub.subscriptionPath, dataPath, oldValue, newValue, options.context); + }; + const prepareMutationEvents = (currentPath, oldValue, newValue, compareResult) => { + const batch = []; + const result = compareResult || compareValues(oldValue, newValue); + if (result === 'identical') { + return batch; // no changes on subscribed path + } + else if (typeof result === 'string') { + // We are on a path that has an actual change + batch.push({ path: currentPath, oldValue, newValue }); + } + // else if (oldValue instanceof Array || newValue instanceof Array) { + // // Trigger mutated event on the array itself instead of on individual indexes. + // // DO convert both arrays to objects because they are sparse + // const oldObj = {}, newObj = {}; + // result.added.forEach(index => { + // oldObj[index] = null; + // newObj[index] = newValue[index]; + // }); + // result.removed.forEach(index => { + // oldObj[index] = oldValue[index]; + // newObj[index] = null; + // }); + // result.changed.forEach(index => { + // oldObj[index] = oldValue[index]; + // newObj[index] = newValue[index]; + // }); + // batch.push({ path: currentPath, oldValue: oldObj, newValue: newObj }); + // } + else { + // DISABLED array handling here, because if a client is using a cache db this will cause problems + // because individual array entries should never be modified. + // if (oldValue instanceof Array && newValue instanceof Array) { + // // Make sure any removed events on arrays will be triggered from last to first + // result.removed.sort((a,b) => a < b ? 1 : -1); + // } + result.changed.forEach(info => { + const childPath = PathInfo.getChildPath(currentPath, info.key); + const childValues = getChildValues(info.key, oldValue, newValue); + const childBatch = prepareMutationEvents(childPath, childValues.oldValue, childValues.newValue, info.change); + batch.push(...childBatch); + }); + result.added.forEach(key => { + const childPath = PathInfo.getChildPath(currentPath, key); + batch.push({ path: childPath, oldValue: null, newValue: newValue[key] }); + }); + if (oldValue instanceof Array && newValue instanceof Array) { + result.removed.sort((a, b) => a < b ? 1 : -1); + } + result.removed.forEach(key => { + const childPath = PathInfo.getChildPath(currentPath, key); + batch.push({ path: childPath, oldValue: oldValue[key], newValue: null }); + }); + } + return batch; + }; + // Add mutations to result (only if transaction logging is enabled) + if (transactionLoggingEnabled && this.settings.type !== 'transaction') { + result.mutations = (() => { + const trailPath = path.slice(topEventPath.length).replace(/^\//, ''); + const trailKeys = PathInfo.getPathKeys(trailPath); + let oldValue = topEventData, newValue = newTopEventData; + while (trailKeys.length > 0) { + const key = trailKeys.shift(); + ({ oldValue, newValue } = getChildValues(key, oldValue, newValue)); + } + const compareResults = compareValues(oldValue, newValue); + const batch = prepareMutationEvents(path, oldValue, newValue, compareResults); + const mutations = batch.map(m => ({ target: PathInfo.getPathKeys(m.path.slice(path.length)), prev: m.oldValue, val: m.newValue })); // key: PathInfo.get(m.path).key + return mutations; + })(); + } + const triggerAllEvents = () => { + // Notify all event subscriptions, should be executed with a delay + // this.debug.verbose(`Triggering events caused by ${options && options.merge ? '(merge) ' : ''}write on "${path}":`, value); + eventSubscriptions + .filter(sub => !['mutated', 'mutations', 'notify_mutated', 'notify_mutations'].includes(sub.type)) + .map(sub => { + const keys = PathInfo.getPathKeys(sub.dataPath); + return { + sub, + keys, + }; + }) + .sort((a, b) => { + // Deepest paths should fire first, then bubble up the tree + if (a.keys.length < b.keys.length) { + return 1; + } + else if (a.keys.length > b.keys.length) { + return -1; + } + return 0; + }) + .forEach(({ sub }) => { + const process = (currentPath, oldValue, newValue, variables = []) => { + const trailPath = sub.dataPath.slice(currentPath.length).replace(/^\//, ''); + const trailKeys = PathInfo.getPathKeys(trailPath); + while (trailKeys.length > 0) { + const subKey = trailKeys.shift(); + if (typeof subKey === 'string' && (subKey === '*' || subKey[0] === '$')) { + // Fire on all relevant child keys + const allKeys = oldValue === null ? [] : Object.keys(oldValue).map(key => oldValue instanceof Array ? parseInt(key) : key); + newValue !== null && Object.keys(newValue).forEach(key => { + const keyOrIndex = newValue instanceof Array ? parseInt(key) : key; + !allKeys.includes(keyOrIndex) && allKeys.push(key); + }); + allKeys.forEach(key => { + const childValues = getChildValues(key, oldValue, newValue); + const vars = variables.concat({ name: subKey, value: key }); + if (trailKeys.length === 0) { + callSubscriberWithValues(sub, childValues.oldValue, childValues.newValue, vars); + } + else { + process(PathInfo.getChildPath(currentPath, subKey), childValues.oldValue, childValues.newValue, vars); + } + }); + return; // We can stop processing + } + else { + currentPath = PathInfo.getChildPath(currentPath, subKey); + const childValues = getChildValues(subKey, oldValue, newValue); + oldValue = childValues.oldValue; + newValue = childValues.newValue; + } + } + callSubscriberWithValues(sub, oldValue, newValue, variables); + }; + if (sub.type.startsWith('notify_') && PathInfo.get(sub.eventPath).isAncestorOf(topEventPath)) { + // Notify event on a higher path than we have loaded data on + // We can trigger the notify event on the subscribed path + // Eg: + // path === 'users/ewout', updates === { name: 'Ewout Stortenbeker' } + // sub.path === 'users' or '', sub.type === 'notify_child_changed' + // => OK to trigger if dataChanges !== 'removed' and 'added' + const isOnParentPath = PathInfo.get(sub.eventPath).isParentOf(topEventPath); + const trigger = (sub.type === 'notify_value') + || (sub.type === 'notify_child_changed' && (!isOnParentPath || !['added', 'removed'].includes(dataChanges))) + || (sub.type === 'notify_child_removed' && dataChanges === 'removed' && isOnParentPath) + || (sub.type === 'notify_child_added' && dataChanges === 'added' && isOnParentPath); + trigger && this.subscriptions.trigger(sub.type, sub.subscriptionPath, sub.dataPath, null, null, options.context); + } + else { + // Subscription is on current or deeper path + process(topEventPath, topEventData, newTopEventData); + } + }); + // The only events we haven't processed now are 'mutated' events. + // They require different logic: we'll call them for all nested properties of the updated path, that + // actually did change. They do not bubble up like 'child_changed' does. + const mutationEvents = eventSubscriptions.filter(sub => ['mutated', 'mutations', 'notify_mutated', 'notify_mutations'].includes(sub.type)); + mutationEvents.forEach(sub => { + // Get the target data this subscription is interested in + let currentPath = topEventPath; + const trailPath = sub.eventPath.slice(currentPath.length).replace(/^\//, ''); + const trailKeys = PathInfo.getPathKeys(trailPath); + let oldValue = topEventData, newValue = newTopEventData; + while (trailKeys.length > 0) { + const subKey = trailKeys.shift(); + currentPath = PathInfo.getChildPath(currentPath, subKey); + const childValues = getChildValues(subKey, oldValue, newValue); + oldValue = childValues.oldValue; + newValue = childValues.newValue; + } + const batch = prepareMutationEvents(currentPath, oldValue, newValue); + if (batch.length === 0) { + return; + } + const isNotifyEvent = sub.type.startsWith('notify_'); + if (['mutated', 'notify_mutated'].includes(sub.type)) { + // Send all mutations 1 by 1 + batch.forEach((mutation, index) => { + const context = options.context; // const context = cloneObject(options.context); + // context.acebase_mutated_event = { nr: index + 1, total: batch.length }; // Add context info about number of mutations + const prevVal = isNotifyEvent ? null : mutation.oldValue; + const newVal = isNotifyEvent ? null : mutation.newValue; + this.subscriptions.trigger(sub.type, sub.subscriptionPath, mutation.path, prevVal, newVal, context); + }); + } + else if (['mutations', 'notify_mutations'].includes(sub.type)) { + // Send 1 batch with all mutations + // const oldValues = isNotifyEvent ? null : batch.map(m => ({ target: PathInfo.getPathKeys(mutation.path.slice(sub.subscriptionPath.length)), val: m.oldValue })); // batch.reduce((obj, mutation) => (obj[mutation.path.slice(sub.subscriptionPath.length).replace(/^\//, '') || '.'] = mutation.oldValue, obj), {}); + // const newValues = isNotifyEvent ? null : batch.map(m => ({ target: PathInfo.getPathKeys(mutation.path.slice(sub.subscriptionPath.length)), val: m.newValue })) //batch.reduce((obj, mutation) => (obj[mutation.path.slice(sub.subscriptionPath.length).replace(/^\//, '') || '.'] = mutation.newValue, obj), {}); + const values = isNotifyEvent ? null : batch.map(m => ({ target: PathInfo.getPathKeys(m.path.slice(sub.subscriptionPath.length)), prev: m.oldValue, val: m.newValue })); + this.subscriptions.trigger(sub.type, sub.subscriptionPath, sub.subscriptionPath, null, values, options.context); + } + }); + }; + // Wait for all index updates to complete + if (options.waitForIndexUpdates === false) { + indexUpdates.splice(0); // Remove all index update promises, so we don't wait for them to resolve + } + await Promise.all(indexUpdates); + defer(triggerAllEvents); // Delayed execution + return result; + } + /** + * Enumerates all children of a given Node for reflection purposes + * @param path + * @param options optional options used by implementation for recursive calls + * @returns returns a generator object that calls .next for each child until the .next callback returns false + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + getChildren(path, options) { + throw new Error('This method must be implemented by subclass'); + } + /** + * @deprecated Use `getNode` instead + * Gets a node's value by delegating to getNode, returning only the value + * @param path + * @param options optional options that can limit the amount of (sub)data being loaded, and any other implementation specific options for recusrsive calls + */ + async getNodeValue(path, options = {}) { + const node = await this.getNode(path, options); + return node.value; + } + /** + * Gets a node's value and (if supported) revision + * @param path + * @param options optional options that can limit the amount of (sub)data being loaded, and any other implementation specific options for recusrsive calls + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + getNode(path, options) { + throw new Error('This method must be implemented by subclass'); + } + /** + * Retrieves info about a node (existence, wherabouts etc) + * @param {string} path + * @param {object} [options] optional options used by implementation for recursive calls + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + getNodeInfo(path, options) { + throw new Error('This method must be implemented by subclass'); + } + /** + * Creates or overwrites a node. Delegates to updateNode on a parent if + * path is not the root. + * @param path + * @param value + * @param options optional options used by implementation for recursive calls + * @returns Returns a new cursor if transaction logging is enabled + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + setNode(path, value, options) { + throw new Error('This method must be implemented by subclass'); + } + /** + * Updates a node by merging an existing node with passed updates object, + * or creates it by delegating to updateNode on the parent path. + * @param path + * @param updates object with key/value pairs + * @returns Returns a new cursor if transaction logging is enabled + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + updateNode(path, updates, options) { + throw new Error('This method must be implemented by subclass'); + } + /** + * Updates a node by getting its value, running a callback function that transforms + * the current value and returns the new value to be stored. Assures the read value + * does not change while the callback runs, or runs the callback again if it did. + * @param path + * @param callback function that transforms current value and returns the new value to be stored. Can return a Promise + * @param options optional options used by implementation for recursive calls + * @returns Returns a new cursor if transaction logging is enabled + */ + async transactNode(path, callback, options = { no_lock: false, suppress_events: false, context: null }) { + const useFakeLock = options && options.no_lock === true; + const tid = this.createTid(); + const lock = useFakeLock + ? { tid, release: NOOP } // Fake lock, we'll use revision checking & retrying instead + : await this.nodeLocker.lock(path, tid, true, 'transactNode'); + try { + let changed = false; + const changeCallback = () => { changed = true; }; + if (useFakeLock) { + // Monitor value changes + this.subscriptions.add(path, 'notify_value', changeCallback); + } + const node = await this.getNode(path, { tid }); + const checkRevision = node.revision; + let newValue; + try { + newValue = callback(node.value); + if (newValue instanceof Promise) { + newValue = await newValue.catch(err => { + this.debug.error(`Error in transaction callback: ${err.message}`); + }); + } + } + catch (err) { + this.debug.error(`Error in transaction callback: ${err.message}`); + } + if (typeof newValue === 'undefined') { + // Callback did not return value. Cancel transaction + return; + } + // asserting revision is only needed when no_lock option was specified + if (useFakeLock) { + this.subscriptions.remove(path, 'notify_value', changeCallback); + } + if (changed) { + throw new NodeRevisionError('Node changed'); + } + const cursor = await this.setNode(path, newValue, { assert_revision: checkRevision, tid: lock.tid, suppress_events: options.suppress_events, context: options.context }); + return cursor; + } + catch (err) { + if (err instanceof NodeRevisionError) { + // try again + console.warn(`node value changed, running again. Error: ${err.message}`); + return this.transactNode(path, callback, options); + } + else { + throw err; + } + } + finally { + lock.release(); + } + } + /** + * Checks if a node's value matches the passed criteria + * @param path + * @param criteria criteria to test + * @param options optional options used by implementation for recursive calls + * @returns returns a promise that resolves with a boolean indicating if it matched the criteria + */ + async matchNode(path, criteria, options) { + const tid = options?.tid ?? ID.generate(); + const checkNode = async (path, criteria) => { + if (criteria.length === 0) { + return Promise.resolve(true); // No criteria, so yes... It matches! + } + const criteriaKeys = criteria.reduce((keys, cr) => { + let key = cr.key; + if (typeof key === 'string' && key.includes('/')) { + // Descendant key criterium, use child key only (eg 'address' of 'address/city') + key = key.slice(0, key.indexOf('/')); + } + if (keys.indexOf(key) < 0) { + keys.push(key); + } + return keys; + }, []); + const unseenKeys = criteriaKeys.slice(); + let isMatch = true; + const delayedMatchPromises = []; + try { + await this.getChildren(path, { tid, keyFilter: criteriaKeys }).next(childInfo => { + const keyOrIndex = childInfo.key ?? childInfo.index; + unseenKeys.includes(keyOrIndex) && unseenKeys.splice(unseenKeys.indexOf(childInfo.key), 1); + const keyCriteria = criteria + .filter(cr => cr.key === keyOrIndex) + .map(cr => ({ op: cr.op, compare: cr.compare })); + const keyResult = keyCriteria.length > 0 ? checkChild(childInfo, keyCriteria) : { isMatch: true, promises: [] }; + isMatch = keyResult.isMatch; + if (isMatch) { + delayedMatchPromises.push(...keyResult.promises); + const childCriteria = criteria + .filter(cr => typeof cr.key === 'string' && cr.key.startsWith(`${typeof keyOrIndex === 'number' ? `[${keyOrIndex}]` : keyOrIndex}/`)) + .map(cr => { + const key = cr.key.slice(cr.key.indexOf('/') + 1); + return { key, op: cr.op, compare: cr.compare }; + }); + if (childCriteria.length > 0) { + const childPath = PathInfo.getChildPath(path, childInfo.key); + const childPromise = checkNode(childPath, childCriteria) + .then(isMatch => ({ isMatch })); + delayedMatchPromises.push(childPromise); + } + } + if (!isMatch || unseenKeys.length === 0) { + return false; // Stop iterating + } + }); + if (isMatch) { + const results = await Promise.all(delayedMatchPromises); + isMatch = results.every(res => res.isMatch); + } + if (!isMatch) { + return false; + } + // Now, also check keys that weren't found in the node. (a criterium may be "!exists") + isMatch = unseenKeys.every(keyOrIndex => { + const childInfo = new NodeInfo({ + ...(typeof keyOrIndex === 'number' && { index: keyOrIndex }), + ...(typeof keyOrIndex === 'string' && { key: keyOrIndex }), + exists: false, + }); + const childCriteria = criteria + .filter(cr => typeof cr.key === 'string' && cr.key.startsWith(`${typeof keyOrIndex === 'number' ? `[${keyOrIndex}]` : keyOrIndex}/`)) + .map(cr => ({ op: cr.op, compare: cr.compare })); + if (childCriteria.length > 0 && !checkChild(childInfo, childCriteria).isMatch) { + return false; + } + const keyCriteria = criteria + .filter(cr => cr.key === keyOrIndex) + .map(cr => ({ op: cr.op, compare: cr.compare })); + if (keyCriteria.length === 0) { + return true; // There were only child criteria, and they matched (otherwise we wouldn't be here) + } + const result = checkChild(childInfo, keyCriteria); + return result.isMatch; + }); + return isMatch; + } + catch (err) { + this.debug.error(`Error matching on "${path}": `, err); + throw err; + } + }; // checkNode + /** + * + * @param child + * @param criteria criteria to test + */ + const checkChild = (child, criteria) => { + const promises = []; + const isMatch = criteria.every(f => { + let proceed = true; + if (f.op === '!exists' || (f.op === '==' && (typeof f.compare === 'undefined' || f.compare === null))) { + proceed = !child.exists; + } + else if (f.op === 'exists' || (f.op === '!=' && (typeof f.compare === 'undefined' || f.compare === null))) { + proceed = child.exists; + } + else if ((f.op === 'contains' || f.op === '!contains') && f.compare instanceof Array && f.compare.length === 0) { + // Added for #135: empty compare array for contains/!contains must match all values + proceed = true; + } + else if (!child.exists) { + proceed = false; + } + else { + if (child.address) { + if (child.valueType === VALUE_TYPES.OBJECT && ['has', '!has'].indexOf(f.op) >= 0) { + const op = f.op === 'has' ? 'exists' : '!exists'; + const p = checkNode(child.path, [{ key: f.compare, op }]) + .then(isMatch => { + return { key: child.key, isMatch }; + }); + promises.push(p); + proceed = true; + } + else if (child.valueType === VALUE_TYPES.ARRAY && ['contains', '!contains'].indexOf(f.op) >= 0) { + // TODO: refactor to use child stream + const p = this.getNode(child.path, { tid }) + .then(({ value: arr }) => { + // const i = arr.indexOf(f.compare); + // return { key: child.key, isMatch: (i >= 0 && f.op === "contains") || (i < 0 && f.op === "!contains") }; + const isMatch = f.op === 'contains' + // "contains" + ? f.compare instanceof Array + ? f.compare.every(val => arr.includes(val)) // Match if ALL of the passed values are in the array + : arr.includes(f.compare) + // "!contains" + : f.compare instanceof Array + ? !f.compare.some(val => arr.includes(val)) // DON'T match if ANY of the passed values is in the array + : !arr.includes(f.compare); + return { key: child.key, isMatch }; + }); + promises.push(p); + proceed = true; + } + else if (child.valueType === VALUE_TYPES.STRING) { + const p = this.getNode(child.path, { tid }) + .then(node => { + return { key: child.key, isMatch: this.test(node.value, f.op, f.compare) }; + }); + promises.push(p); + proceed = true; + } + else { + proceed = false; + } + } + else if (child.type === VALUE_TYPES.OBJECT && ['has', '!has'].indexOf(f.op) >= 0) { + const has = f.compare in child.value; + proceed = (has && f.op === 'has') || (!has && f.op === '!has'); + } + else if (child.type === VALUE_TYPES.ARRAY && ['contains', '!contains'].indexOf(f.op) >= 0) { + const contains = child.value.indexOf(f.compare) >= 0; + proceed = (contains && f.op === 'contains') || (!contains && f.op === '!contains'); + } + else { + let ret = this.test(child.value, f.op, f.compare); + if (ret instanceof Promise) { + promises.push(ret); + ret = true; + } + proceed = ret; + } + } + return proceed; + }); // fs.every + return { isMatch, promises }; + }; // checkChild + return checkNode(path, criteria); + } + test(val, op, compare) { + if (op === '<') { + return val < compare; + } + if (op === '<=') { + return val <= compare; + } + if (op === '==') { + return val === compare; + } + if (op === '!=') { + return val !== compare; + } + if (op === '>') { + return val > compare; + } + if (op === '>=') { + return val >= compare; + } + if (op === 'in') { + return compare.indexOf(val) >= 0; + } + if (op === '!in') { + return compare.indexOf(val) < 0; + } + if (op === 'like' || op === '!like') { + const pattern = '^' + compare.replace(/[-[\]{}()+.,\\^$|#\s]/g, '\\$&').replace(/\?/g, '.').replace(/\*/g, '.*?') + '$'; + const re = new RegExp(pattern, 'i'); + const isMatch = re.test(val.toString()); + return op === 'like' ? isMatch : !isMatch; + } + if (op === 'matches') { + return compare.test(val.toString()); + } + if (op === '!matches') { + return !compare.test(val.toString()); + } + if (op === 'between') { + return val >= compare[0] && val <= compare[1]; + } + if (op === '!between') { + return val < compare[0] || val > compare[1]; + } + if (op === 'has' || op === '!has') { + const has = typeof val === 'object' && compare in val; + return op === 'has' ? has : !has; + } + if (op === 'contains' || op === '!contains') { + // TODO: rename to "includes"? + const includes = typeof val === 'object' && val instanceof Array && val.includes(compare); + return op === 'contains' ? includes : !includes; + } + return false; + } + /** + * Export a specific path's data to a stream + * @param path + * @param write function that writes to a stream, or stream object that has a write method that (optionally) returns a promise the export needs to wait for before continuing + * @returns returns a promise that resolves once all data is exported + */ + async exportNode(path, writeFn, options = { format: 'json', type_safe: true }) { + if (options?.format !== 'json') { + throw new Error('Only json output is currently supported'); + } + const write = typeof writeFn !== 'function' + ? writeFn.write.bind(writeFn) // Using the "old" stream argument. Use its write method for backward compatibility + : writeFn; + const stringifyValue = (type, val) => { + const escape = (str) => str + .replace(/\\/g, '\\\\') // forward slashes + .replace(/"/g, '\\"') // quotes + .replace(/\r/g, '\\r') // carriage return + .replace(/\n/g, '\\n') // line feed + .replace(/\t/g, '\\t') // tabs + .replace(/[\u0000-\u001f]/g, // other control characters + // other control characters + ch => `\\u${ch.charCodeAt(0).toString(16).padStart(4, '0')}`); + if (type === VALUE_TYPES.DATETIME) { + val = `"${val.toISOString()}"`; + if (options.type_safe) { + val = `{".type":"date",".val":${val}}`; // Previously: "Date" + } + } + else if (type === VALUE_TYPES.STRING) { + val = `"${escape(val)}"`; + } + else if (type === VALUE_TYPES.ARRAY) { + val = '[]'; + } + else if (type === VALUE_TYPES.OBJECT) { + val = '{}'; + } + else if (type === VALUE_TYPES.BINARY) { + val = `"${escape(ascii85.encode(val))}"`; // TODO: use base64 instead, no escaping needed + if (options.type_safe) { + val = `{".type":"binary",".val":${val}}`; // Previously: "Buffer" + } + } + else if (type === VALUE_TYPES.REFERENCE) { + val = `"${val.path}"`; + if (options.type_safe) { + val = `{".type":"reference",".val":${val}}`; // Previously: "PathReference" + } + } + else if (type === VALUE_TYPES.BIGINT) { + // Unfortnately, JSON.parse does not support 0n bigint json notation + val = `"${val}"`; + if (options.type_safe) { + val = `{".type":"bigint",".val":${val}}`; + } + } + return val; + }; + let objStart = '', objEnd = ''; + const nodeInfo = await this.getNodeInfo(path); + if (!nodeInfo.exists) { + return write('null'); + } + else if (nodeInfo.type === VALUE_TYPES.OBJECT) { + objStart = '{'; + objEnd = '}'; + } + else if (nodeInfo.type === VALUE_TYPES.ARRAY) { + objStart = '['; + objEnd = ']'; + } + else { + // Node has no children, get and export its value + const node = await this.getNode(path); + const val = stringifyValue(nodeInfo.type, node.value); + return write(val); + } + if (objStart) { + const p = write(objStart); + if (p instanceof Promise) { + await p; + } + } + let output = '', outputCount = 0; + const pending = []; + await this.getChildren(path) + .next(childInfo => { + if (childInfo.address) { + // Export child recursively + pending.push(childInfo); + } + else { + if (outputCount++ > 0) { + output += ','; + } + if (typeof childInfo.key === 'string') { + output += `"${childInfo.key}":`; + } + output += stringifyValue(childInfo.type, childInfo.value); + } + }); + if (output) { + const p = write(output); + if (p instanceof Promise) { + await p; + } + } + while (pending.length > 0) { + const childInfo = pending.shift(); + let output = outputCount++ > 0 ? ',' : ''; + const key = typeof childInfo.index === 'number' ? childInfo.index : childInfo.key; + if (typeof key === 'string') { + output += `"${key}":`; + } + if (output) { + const p = write(output); + if (p instanceof Promise) { + await p; + } + } + await this.exportNode(PathInfo.getChildPath(path, key), write, options); + } + if (objEnd) { + const p = write(objEnd); + if (p instanceof Promise) { + await p; + } + } + } + /** + * Import a specific path's data from a stream + * @param path + * @param read read function that streams a new chunk of data + * @returns returns a promise that resolves once all data is imported + */ + async importNode(path, read, options = { format: 'json', method: 'set' }) { + const chunkSize = 256 * 1024; // 256KB + const maxQueueBytes = 1024 * 1024; // 1MB + const state = { + data: '', + index: 0, + offset: 0, + queue: [], + queueStartByte: 0, + timesFlushed: 0, + get processedBytes() { + return this.offset + this.index; + }, + }; + const readNextChunk = async (append = false) => { + let data = await read(chunkSize); + if (data === null) { + if (state.data) { + throw new Error(`Unexpected EOF at index ${state.offset + state.data.length}`); + } + else { + throw new Error('Unable to read data from stream'); + } + } + else if (typeof data === 'object') { + data = Utils.decodeString(data); + } + if (append) { + state.data += data; + } + else { + state.offset += state.data.length; + state.data = data; + state.index = 0; + } + }; + const readBytes = async (length) => { + let str = ''; + if (state.index + length >= state.data.length) { + str = state.data.slice(state.index); + length -= str.length; + await readNextChunk(); + } + str += state.data.slice(state.index, state.index + length); + state.index += length; + return str; + }; + const assertBytes = async (length) => { + if (state.index + length > state.data.length) { + await readNextChunk(true); + } + if (state.index + length > state.data.length) { + throw new Error('Not enough data available from stream'); + } + }; + const consumeToken = async (token) => { + // const str = state.data.slice(state.index, state.index + token.length); + const str = await readBytes(token.length); + if (str !== token) { + throw new Error(`Unexpected character "${str[0]}" at index ${state.offset + state.index}, expected "${token}"`); + } + }; + const consumeSpaces = async () => { + const spaces = [' ', '\t', '\r', '\n']; + while (true) { + if (state.index >= state.data.length) { + await readNextChunk(); + } + if (spaces.includes(state.data[state.index])) { + state.index++; + } + else { + break; + } + } + }; + /** + * Reads number of bytes from the stream but does not consume them + */ + const peekBytes = async (length) => { + await assertBytes(length); + const index = state.index; + return state.data.slice(index, index + length); + }; + /** + * Tries to detect what type of value to expect, but does not read it + * @returns + */ + const peekValueType = async () => { + await consumeSpaces(); + const ch = await peekBytes(1); + switch (ch) { + case '"': return 'string'; + case '{': return 'object'; + case '[': return 'array'; + case 'n': return 'null'; + case 'u': return 'undefined'; + case 't': + case 'f': + return 'boolean'; + default: { + if (ch === '-' || (ch >= '0' && ch <= '9')) { + return 'number'; + } + throw new Error(`Unknown value at index ${state.offset + state.index}`); + } + } + }; + /** + * Reads a string from the stream at current index. Expects current character to be " + */ + const readString = async () => { + await consumeToken('"'); + let str = ''; + let i = state.index; + // Read until next (unescaped) quote + while (state.data[i] !== '"' || state.data[i - 1] === '\\') { + i++; + if (i >= state.data.length) { + str += state.data.slice(state.index); + await readNextChunk(); + i = 0; + } + } + str += state.data.slice(state.index, i); + state.index = i + 1; + return unescape(str); + }; + const readBoolean = async () => { + if (state.data[state.index] === 't') { + await consumeToken('true'); + } + else if (state.data[state.index] === 'f') { + await consumeToken('false'); + } + throw new Error(`Expected true or false at index ${state.offset + state.index}`); + }; + const readNumber = async () => { + let str = ''; + let i = state.index; + // Read until non-number character is encountered + const nrChars = ['-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', 'e', 'b', 'f', 'x', 'o', 'n']; // b: 0b110101, x: 0x3a, o: 0o01, n: 29723n, e: 10e+23, f: ? + while (nrChars.includes(state.data[i])) { + i++; + if (i >= state.data.length) { + str += state.data.slice(state.index); + await readNextChunk(); + i = 0; + } + } + str += state.data.slice(state.index, i); + state.index = i; + const nr = str.endsWith('n') ? BigInt(str.slice(0, -1)) : str.includes('.') ? parseFloat(str) : parseInt(str); + return nr; + }; + const readValue = async () => { + await consumeSpaces(); + const type = await peekValueType(); + const value = await (() => { + switch (type) { + case 'string': return readString(); + case 'object': return {}; + case 'array': return []; + case 'number': return readNumber(); + case 'null': return null; + case 'undefined': return undefined; + case 'boolean': return readBoolean(); + } + })(); + return { type, value }; + }; + const unescape = (str) => str.replace(/\\n/g, '\n').replace(/\\"/g, '"'); + const getTypeSafeValue = (path, obj) => { + const type = obj['.type']; + let val = obj['.val']; + switch (type) { + case 'Date': + case 'date': { + val = new Date(val); + break; + } + case 'Buffer': + case 'binary': { + val = unescape(val); + if (val.startsWith('<~')) { + // Ascii85 encoded + val = ascii85.decode(val); + } + else { + // base64 not implemented yet + throw new Error(`Import error: Unexpected encoding for value for value at path "/${path}"`); + } + break; + } + case 'PathReference': + case 'reference': { + val = new PathReference(val); + break; + } + case 'bigint': { + val = BigInt(val); + break; + } + default: + throw new Error(`Import error: Unsupported type "${type}" for value at path "/${path}"`); + } + return val; + }; + const context = { acebase_import_id: ID.generate() }; + const childOptions = { suppress_events: options.suppress_events, context }; + /** + * Work in progress (not used yet): queue nodes to store to improve performance + */ + const enqueue = async (target, value) => { + state.queue.push({ target, value }); + if (state.processedBytes >= state.queueStartByte + maxQueueBytes) { + // Flush queue, group queued (set) items as update operations on their parents + const operations = state.queue.reduce((updates, item) => { + // Optimization idea: find all data we know is complete, add that as 1 set if method !== 'merge' + // Example: queue is something like [ + // "users/user1": {}, + // "users/user1/email": "user@example.com" + // "users/user1/addresses": {}, + // "users/user1/addresses/address1": {}, + // "users/user1/addresses/address1/city": "Amsterdam", + // "users/user1/addresses/address2": {}, // We KNOW "users/user1/addresses/address1" is not coming back + // "users/user1/addresses/address2/city": "Berlin", + // "users/user2": {} // <-- We KNOW "users/user1" is not coming back! + //] + if (item.target.path === path) { + // This is the import target. If method is 'set' and this is the first flush, add it as 'set' operation. + // Use 'update' in all other cases + updates.push({ op: options.method === 'set' && state.timesFlushed === 0 ? 'set' : 'update', ...item }); + } + else { + // Find parent to merge with + const parent = updates.find(other => other.target.isParentOf(item.target)); + if (parent) { + parent.value[item.target.key] = item.value; + } + else { + // Parent not found. If method is 'merge', use 'update', otherwise use or 'set' + updates.push({ op: options.method === 'merge' ? 'update' : 'set', ...item }); + } + } + return updates; + }, []); + // Fresh state + state.queueStartByte = state.processedBytes; + state.queue = []; + state.timesFlushed++; + // Execute db updates + } + if (target.path === path) { + // This is the import target. If method === 'set' + } + }; + const importObject = async (target) => { + await consumeToken('{'); + await consumeSpaces(); + const nextChar = await peekBytes(1); + if (nextChar === '}') { + state.index++; + return this.setNode(target.path, {}, childOptions); + } + let childCount = 0; + let obj = {}; + let flushedBefore = false; + const flushObject = async () => { + let p; + if (!flushedBefore) { + flushedBefore = true; + p = this.setNode(target.path, obj, childOptions); + } + else if (Object.keys(obj).length > 0) { + p = this.updateNode(target.path, obj, childOptions); + } + obj = {}; + if (p) { + await p; + } + }; + const promises = []; + while (true) { + await consumeSpaces(); + const property = await readString(); // readPropertyName(); + await consumeSpaces(); + await consumeToken(':'); + await consumeSpaces(); + const { value, type } = await readValue(); + obj[property] = value; + childCount++; + if (['object', 'array'].includes(type)) { + // Flush current imported value before proceeding with object/array child + promises.push(flushObject()); + if (type === 'object') { + // Import child object/array + await importObject(target.child(property)); + } + else { + await importArray(target.child(property)); + } + } + // What comes next? End of object ('}') or new property (',')? + await consumeSpaces(); + const nextChar = await peekBytes(1); + if (nextChar === '}') { + // Done importing this object + state.index++; + break; + } + // Assume comma now + await consumeToken(','); + } + const isTypedValue = childCount === 2 && '.type' in obj && '.val' in obj; + if (isTypedValue) { + // This is a value that was exported with type safety. + // Do not store as object, but convert to original value + // Note that this is done regardless of options.type_safe + const val = getTypeSafeValue(target.path, obj); + return this.setNode(target.path, val, childOptions); + } + promises.push(flushObject()); + await Promise.all(promises); + }; + const importArray = async (target) => { + await consumeToken('['); + await consumeSpaces(); + const nextChar = await peekBytes(1); + if (nextChar === ']') { + state.index++; + return this.setNode(target.path, [], childOptions); + } + let flushedBefore = false; + let arr = []; + let updates = {}; + const flushArray = async () => { + let p; + if (!flushedBefore) { + // Store array + flushedBefore = true; + p = this.setNode(target.path, arr, childOptions); + arr = null; // GC + } + else if (Object.keys(updates).length > 0) { + // Flush updates + p = this.updateNode(target.path, updates, childOptions); + updates = {}; + } + if (p) { + await p; + } + }; + const pushChild = (value, index) => { + if (flushedBefore) { + updates[index] = value; + } + else { + arr.push(value); + } + }; + const promises = []; + let index = 0; + while (true) { + await consumeSpaces(); + const { value, type } = await readValue(); + pushChild(value, index); + if (['object', 'array'].includes(type)) { + // Flush current imported value before proceeding with object/array child + promises.push(flushArray()); // No need to await now + if (type === 'object') { + // Import child object/array + await importObject(target.child(index)); + } + else { + await importArray(target.child(index)); + } + } + // What comes next? End of array (']') or new property (',')? + await consumeSpaces(); + const nextChar = await peekBytes(1); + if (nextChar === ']') { + // Done importing this array + state.index++; + break; + } + // Assume comma now + await consumeToken(','); + index++; + } + promises.push(flushArray()); + await Promise.all(promises); + }; + const start = async () => { + const { value, type } = await readValue(); + if (['object', 'array'].includes(type)) { + // Object or array value, has not been read yet + const target = PathInfo.get(path); + if (type === 'object') { + await importObject(target); + } + else { + await importArray(target); + } + } + else { + // Simple value + await this.setNode(path, value, childOptions); + } + }; + return start(); + } + /** + * Adds, updates or removes a schema definition to validate node values before they are stored at the specified path + * @param path target path to enforce the schema on, can include wildcards. Eg: 'users/*\/posts/*' or 'users/$uid/posts/$postid' + * @param schema schema type definitions. When null value is passed, a previously set schema is removed. + */ + setSchema(path, schema) { + if (typeof schema === 'undefined') { + throw new TypeError('schema argument must be given'); + } + if (schema === null) { + // Remove previously set schema on path + const i = this._schemas.findIndex(s => s.path === path); + i >= 0 && this._schemas.splice(i, 1); + return; + } + // Parse schema, add or update it + const definition = new SchemaDefinition(schema); + const item = this._schemas.find(s => s.path === path); + if (item) { + item.schema = definition; + } + else { + this._schemas.push({ path, schema: definition }); + this._schemas.sort((a, b) => { + const ka = PathInfo.getPathKeys(a.path), kb = PathInfo.getPathKeys(b.path); + if (ka.length === kb.length) { + return 0; + } + return ka.length < kb.length ? -1 : 1; + }); + } + } + /** + * Gets currently active schema definition for the specified path + */ + getSchema(path) { + const item = this._schemas.find(item => item.path === path); + return item ? { path, schema: item.schema.source, text: item.schema.text } : null; + } + /** + * Gets all currently active schema definitions + */ + getSchemas() { + return this._schemas.map(item => ({ path: item.path, schema: item.schema.source, text: item.schema.text })); + } + /** + * Validates the schemas of the node being updated and its children + * @param path path being written to + * @param value the new value, or updates to current value + * @example + * // define schema for each tag of each user post: + * db.schema.set( + * 'users/$uid/posts/$postId/tags/$tagId', + * { name: 'string', 'link_id?': 'number' } + * ); + * + * // Insert that will fail: + * db.ref('users/352352/posts/572245').set({ + * text: 'this is my post', + * tags: { sometag: 'deny this' } // <-- sometag must be typeof object + * }); + * + * // Insert that will fail: + * db.ref('users/352352/posts/572245').set({ + * text: 'this is my post', + * tags: { + * tag1: { name: 'firstpost', link_id: 234 }, + * tag2: { name: 'newbie' }, + * tag3: { title: 'Not allowed' } // <-- title property not allowed + * } + * }); + * + * // Update that fails if post does not exist: + * db.ref('users/352352/posts/572245/tags/tag1').update({ + * name: 'firstpost' + * }); // <-- post is missing property text + */ + validateSchema(path, value, options = { updates: false }) { + let result = { ok: true }; + const pathInfo = PathInfo.get(path); + this._schemas.filter(s => pathInfo.isOnTrailOf(s.path)).every(s => { + if (pathInfo.isDescendantOf(s.path)) { + // Given check path is a descendant of this schema definition's path + const ancestorPath = PathInfo.fillVariables(s.path, path); + const trailKeys = pathInfo.keys.slice(PathInfo.getPathKeys(s.path).length); + result = s.schema.check(ancestorPath, value, options.updates, trailKeys); + return result.ok; + } + // Given check path is on schema definition's path or on a higher path + const trailKeys = PathInfo.getPathKeys(s.path).slice(pathInfo.keys.length); + const partial = options.updates === true && trailKeys.length === 0; + const check = (path, value, trailKeys) => { + if (trailKeys.length === 0) { + // Check this node + return s.schema.check(path, value, partial); + } + else if (value === null) { + return { ok: true }; // Not at the end of trail, but nothing more to check + } + const key = trailKeys[0]; + if (typeof key === 'string' && (key === '*' || key[0] === '$')) { + // Wildcard. Check each key in value recursively + if (value === null || typeof value !== 'object') { + // Can't check children, because there are none. This is + // possible if another rule permits the value at current path + // to be something else than an object. + return { ok: true }; + } + let result; + Object.keys(value).every(childKey => { + const childPath = PathInfo.getChildPath(path, childKey); + const childValue = value[childKey]; + result = check(childPath, childValue, trailKeys.slice(1)); + return result.ok; + }); + return result; + } + else { + const childPath = PathInfo.getChildPath(path, key); + const childValue = value[key]; + return check(childPath, childValue, trailKeys.slice(1)); + } + }; + result = check(path, value, trailKeys); + return result.ok; + }); + return result; + } +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/esm/storage/index.js.map b/dist/esm/storage/index.js.map new file mode 100644 index 0000000..a0e1476 --- /dev/null +++ b/dist/esm/storage/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAA0D,MAAM,cAAc,CAAC;AACtL,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,mEAAmE;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC,CAAC,8IAA8I;AACzL,OAAO,EAAE,WAAW,EAAsB,MAAM,WAAW,CAAC;AAG5D,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;AAErE,MAAM,UAAU,GAAG,KAAK,CAAC;AACzB,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAC,aAAa,EAAC,eAAe,EAAC,eAAe,EAAC,SAAS,EAAC,WAAW,CAAC,CAAC;AACvG,kHAAkH;AAClH,gBAAgB,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC;AAE3E,gEAAgE;AAChE,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AACtB,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC5C,YAAmB,MAAc;QAC7B,KAAK,CAAC,6BAA6B,MAAM,EAAE,CAAC,CAAC;QAD9B,WAAM,GAAN,MAAM,CAAQ;IAEjC,CAAC;CACJ;AA4CD;;GAEG;AACH,MAAM,OAAO,eAAe;IAgDxB,YAAY,WAAqC,EAAE;QA9CnD;;;WAGG;QACH,uBAAkB,GAAG,EAAE,CAAC;QAExB;;;WAGG;QACH,yBAAoB,GAAG,KAAK,CAAC;QAE7B;;;WAGG;QACH,SAAI,GAAG,GAAG,CAAC;QAEX;;;WAGG;QACH,gBAAW,GAAG,GAAG,CAAC;QAElB;;;WAGG;QACH,SAAI,GAAG,MAAM,CAAC;QAEd;;;WAGG;QACH,aAAQ,GAAG,KAAK,CAAC;QAab,IAAI,OAAO,QAAQ,CAAC,kBAAkB,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,kBAAkB,GAAI,QAAQ,CAAC,kBAAkB,CAAC;SAAE;QAChH,IAAI,OAAO,QAAQ,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAAE,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC,oBAAoB,CAAC;SAAE;QACtH,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;SAAE;QACrE,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SAAE;QACpE,IAAI,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;SAAE;QAC1F,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;SAAE;QACrE,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE;YAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;SAAE;QAClF,IAAI,OAAO,QAAQ,CAAC,GAAG,KAAK,QAAQ,EAAE;YAAE,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;SAAE;IACtE,CAAC;CACJ;AAUD,MAAM,OAAO,OAAQ,SAAQ,kBAAkB;IAkB3C;;;;;OAKG;IACH,YAAmB,IAAY,EAAS,QAAyB,EAAE,GAAe;QAC9E,KAAK,EAAE,CAAC;QADO,SAAI,GAAJ,IAAI,CAAQ;QAAS,aAAQ,GAAR,QAAQ,CAAiB;QATjE,2HAA2H;QACnH,aAAQ,GAAsD,EAAE,CAAC;QA+CjE,aAAQ,GAAgB,EAAE,CAAC;QAC5B,YAAO,GAAG;YACb;;;;eAIG;YACH,IAAI,SAAS;gBACT,OAAO,GAAG,EAAE,aAAa,CAAC;YAC9B,CAAC;YAED,MAAM,EAAE,CACJ,IAAY,EACZ,GAAW,EACX,UAA8B;gBAC1B,OAAO,EAAE,KAAK;aACjB,EACH,EAAE;gBACA,MAAM,OAAO,GAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC5G,OAAO,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YACpD,CAAC;YAED;;eAEG;YACH,GAAG,EAAE,CAAC,IAAY,EAAE,MAAc,IAAI,EAAE,EAAE;gBACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;oBACpB,8CAA8C;oBAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACnH,IAAI,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;iBACxC;gBACD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAChC,KAAK,CAAC,IAAI,KAAK,IAAI;oBACnB,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,CACtC,CAAC;YACN,CAAC;YAED;;eAEG;YACH,MAAM,EAAE,CAAC,UAAkB,EAAE,OAAO,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE;gBAC9E,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBAClD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;oBAChC,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;oBAC1D,oDAAoD;oBACpD,IAAI,OAAO,CAAC,WAAW,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,OAAO,GAAG,KAAK,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAW,CAAC,EAAE;wBAC/L,yFAAyF;wBACzF,OAAO,IAAI,CAAC;qBACf;yBACI,IAAI,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE;wBACzC,4EAA4E;wBAC5E,OAAO,KAAK,CAAC;qBAChB;yBACI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE;wBAClE,wFAAwF;wBACxF,+FAA+F;wBAC/F,OAAO,KAAK,CAAC;qBAChB;oBACD,gDAAgD;oBAChD,wEAAwE;oBACxE,sHAAsH;oBACtH,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;wBAC7B,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,+CAA+C;oBAC7F,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;YACP,CAAC;YAED;;eAEG;YACH,IAAI,EAAE,GAAG,EAAE;gBACP,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,CAAC;YAED;;eAEG;YACH,IAAI,EAAE,KAAK,IAAI,EAAE;gBACb,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;oBACpB,mDAAmD;oBACnD,OAAO;iBACV;gBACD,IAAI,KAAK,GAAG,EAAc,CAAC;gBAC3B,IAAI;oBACA,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,UAAU,CAAC,CAAa,CAAC;iBACzF;gBACD,OAAM,GAAG,EAAE;oBACP,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;wBACvB,2GAA2G;wBAC3G,2CAA2C;wBAC3C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;qBACzB;iBACJ;gBACD,MAAM,QAAQ,GAAG,EAAwB,CAAC;gBAC1C,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;oBACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;wBAAE,OAAO;qBAAE;oBAC3C,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,0FAA0F;oBACpJ,MAAM,gBAAgB,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACvD,IAAI,CAAC,CAAC,kBAAkB,IAAI,CAAC,gBAAgB,CAAC,IAAI,kBAAkB,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,EAAE;wBACrH,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;wBACrC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACpB;gBACL,CAAC,CAAC,CAAC;gBACH,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAChC,CAAC;YAED,GAAG,EAAE,KAAK,EAAE,QAAgB,EAAE,EAAE;gBAC5B,IAAI;oBACA,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAC3D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,OAAO,KAAK,CAAC;iBAChB;gBACD,OAAM,GAAG,EAAE;oBACP,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACtB,OAAO,IAAI,CAAC;iBACf;YACL,CAAC;YAED;;eAEG;YACH,MAAM,EAAE,KAAK,EAAE,QAAgB,EAAE,EAAE;gBAC/B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAClD,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;gBACrB,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;YACtH,CAAC;YAED;;;eAGG;YACH,MAAM,EAAE,KAAK,EAAE,QAAgB,EAAE,EAAE;gBAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;gBACvE,IAAI,CAAC,KAAK,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,SAAS,QAAQ,YAAY,CAAC,CAAC;iBAAE;gBAC/D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtD,OAAO,KAAK,CAAC;YACjB,CAAC;YAED,KAAK,EAAE,KAAK,IAAI,EAAE;gBACd,oBAAoB;gBACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACrG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAChC,CAAC;SAEJ,CAAC;QAGM,wBAAmB,GAAG,EAAkG,CAAC;QAC1H,kBAAa,GAAG;YACnB;;;;;eAKG;YACH,GAAG,EAAE,CAAC,IAAY,EAAE,IAAY,EAAE,QAA8B,EAAE,EAAE;gBAChE,IAAI,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;oBACpC,MAAM,IAAI,SAAS,CAAC,uBAAuB,IAAI,GAAG,CAAC,CAAC;iBACvD;gBACD,IAAI,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBAC9C,IAAI,CAAC,QAAQ,EAAE;oBAAE,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;iBAAE;gBAClE,gFAAgF;gBAChF,kGAAkG;gBAClG,IAAI;gBACJ,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACvD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,mCAAmC;YAChG,CAAC;YAED;;;;;eAKG;YACH,MAAM,EAAE,CAAC,IAAY,EAAE,IAAa,EAAE,QAA+B,EAAE,EAAE;gBACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBAChD,IAAI,CAAC,QAAQ,EAAE;oBAAE,OAAO;iBAAE;gBAC1B,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CACvC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CACnF,CAAC;gBACF,IAAI,CAAC,CAAC;gBACN,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE;oBACtB,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;iBACzB;gBACD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,mCAAmC;YAClG,CAAC;YAED;;;eAGG;YACH,0BAA0B,CAAC,IAAY;gBACnC,MAAM,WAAW,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;gBAC1D,OAAO,CAAC,CAAC,WAAW,CAAC;YACzB,CAAC;YAED;;;eAGG;YACH,0BAA0B,EAAE,CAAC,IAAY,EAAE,EAAE;gBACzC,kFAAkF;gBAClF,8DAA8D;gBAC9D,8DAA8D;gBAC9D,iEAAiE;gBACjE,0CAA0C;gBAC1C,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,gBAAgB,GAAG,EAA4F,CAAC;gBACtH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;oBAC7D,IAAI,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE;wBAChF,4EAA4E;wBAC5E,gCAAgC;wBAChC,wGAAwG;wBACxG,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;wBAC5D,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;wBACjE,QAAQ;6BACH,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,oDAAoD;6BACnG,OAAO,CAAC,GAAG,CAAC,EAAE;4BACX,IAAI,QAAQ,GAAG,IAAI,CAAC;4BACpB,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,EAAE,+CAA+C;gCACvE,QAAQ,GAAG,SAAS,CAAC;6BACxB;iCACI,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,EAAE,kDAAkD;gCAC5I,QAAQ,GAAG,IAAI,CAAC,CAAC,wEAAwE;6BAC5F;iCACI,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,IAAI,IAAI,KAAK,SAAS,EAAE,EAAE,+DAA+D;gCAC1H,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCAC1F,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;6BACzD;iCACI,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,gFAAgF;gCAC7K,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCAC1F,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;6BACzD;4BAED,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,EAAE;gCACpG,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC;6BACpF;wBACL,CAAC,CAAC,CAAC;qBACV;gBACL,CAAC,CAAC,CAAC;gBACH,OAAO,gBAAgB,CAAC;YAC5B,CAAC;YAED;;eAEG;YACH,wBAAwB,EAAE,CAAC,IAAY,EAAE,EAAE;gBACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,WAAW,GAAG,EAA4F,CAAC;gBACjH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;oBAC7D,oEAAoE;oBACpE,mDAAmD;oBACnD,iDAAiD;oBACjD,MAAM;oBACN,IAAI,QAAQ,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE;wBACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;wBAC5D,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;wBAEjE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;4BACnB,IAAI,QAAQ,GAAG,IAAI,CAAC;4BACpB,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE;gCACrD,QAAQ,GAAG,SAAS,CAAC;6BACxB;iCACI,IAAI,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gCACnE,MAAM,QAAQ,GAAG,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC;oCACnE,CAAC,CAAC,GAAG;oCACL,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCAC/E,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;6BACzD;iCACI,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gCACxF,QAAQ,GAAG,IAAI,CAAC;6BACnB;iCACI,IACD,CAAC,aAAa,EAAE,eAAe,EAAE,oBAAoB,EAAE,sBAAsB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;mCAC9F,CACC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC;uCAC1B,IAAI,KAAK,SAAS;uCAClB,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CACtC,EACH;gCACE,MAAM,QAAQ,GAAG,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC;oCACnE,CAAC,CAAC,GAAG;oCACL,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCAC/E,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,iDAAiD;6BAC3G;4BACD,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,gBAAgB,KAAK,gBAAgB,CAAC,EAAE,EAAE,oFAAoF;gCAChO,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC;6BAC/E;wBACL,CAAC,CAAC,CAAC;qBACN;gBACL,CAAC,CAAC,CAAC;gBACH,OAAO,WAAW,CAAC;YACvB,CAAC;YAED;;;;;;;;eAQG;YACH,OAAO,EAAE,CAAC,KAAa,EAAE,IAAY,EAAE,QAAgB,EAAE,QAAa,EAAE,QAAa,EAAE,OAAY,EAAE,EAAE;gBACnG,wGAAwG;gBACxG,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC/D,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC;qBAC9C,OAAO,CAAC,GAAG,CAAC,EAAE;oBACX,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;oBAC9D,qCAAqC;oBACrC,sDAAsD;oBACtD,oCAAoC;oBACpC,IAAI;oBACJ,SAAS;oBACT,gCAAgC;oBAChC,wDAAwD;oBACxD,IAAI;gBACJ,CAAC,CAAC,CAAC;YACX,CAAC;SACJ,CAAC;QApWE,IAAI,CAAC,KAAK,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,IAAI,GAAG,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,iCAAiC;QAErL,gFAAgF;QAChF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtF,IAAI,QAAQ,CAAC,GAAG,EAAE;YACd,IAAI,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACvC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;aACvD;YACD,IAAI,CAAC,CAAC,QAAQ,EAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAClD,MAAM,IAAI,KAAK,CAAC,6DAA6D,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;aACtG;YACD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;YACrE,IAAI,CAAC,GAAG,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;SACnD;aACI;YACD,IAAI,CAAC,GAAG,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SACzC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACnC,0CAA0C;YAC1C,6CAA6C;YAC7C,mDAAmD;YACnD,qCAAqC;YACrC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;gBACxB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;aACxB;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,GAAG;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBAChC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YACxD,CAAC;SACJ,CAAC;QACF,iEAAiE;QACjE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IAEtB,CAAC,CAAC,qBAAqB;IAlDvB,SAAS;QACL,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;IACxD,CAAC;IA8XD,KAAK,CAAC,KAAK;QACP,iIAAiI;QACjI,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,UAAU,CAAC;IACxD,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,KAAU;QACtB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,YAAY,IAAI,EAAE;YAClF,OAAO,IAAI,CAAC;SACf;aACI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAChC,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE;gBAAE,OAAO,KAAK,CAAC;aAAE;YACtE,kFAAkF;YAClF,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YACpC,OAAO,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;SAC5D;aACI,IAAI,KAAK,YAAY,aAAa,EAAE;YACrC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE;gBAAE,OAAO,KAAK,CAAC;aAAE;YAC3E,qFAAqF;YACrF,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzC,OAAO,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;SAC5D;aACI,IAAI,KAAK,YAAY,WAAW,EAAE;YACnC,OAAO,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;SAC9D;aACI,IAAI,KAAK,YAAY,KAAK,EAAE;YAC7B,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;SAC7B;aACI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAChC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;SAC1C;aACI;YACD,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;SAC9C;IACL,CAAC;IAED;;OAEG;IACH,6DAA6D;IACnD,UAAU,CAAC,IAAY,EAAE,KAAU,EAAE,OAA6B;QACxE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACnE,CAAC;IAED,eAAe,CAAC,IAAY,EAAE,cAAuB;QACjD,IAAI,YAAY,GAAG,IAAI,CAAC;QACxB,IAAI,mBAAmB,GAAG,KAAK,CAAC;QAEhC,iGAAiG;QACjG,MAAM,kBAAkB,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAEnG,2GAA2G;QAC3G,MAAM,gBAAgB,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;QACnG,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,mBAAmB,GAAG,IAAI,CAAC;YAC3B,MAAM,UAAU,GAAG,gBAAgB;iBAC9B,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;iBACxF,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAE;gBACV,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,CAAC,CAAC;qBACxC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,CAAC;gBACjD,OAAO,CAAC,CAAC;YACb,CAAC,CAAC,CAAC;YACP,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC5B,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC;YAC1B,IAAI,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE;gBACtI,8EAA8E;gBAC9E,mBAAmB,GAAG,KAAK,CAAC;aAC/B;YACD,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,iDAAiD;SAC/G;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;aAC7E,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACjE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACX,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;gBAAE,OAAO,CAAC,CAAC,CAAC;aAAE;iBAC5C,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;gBAAE,OAAO,CAAC,CAAC;aAAE;YACrD,OAAO,CAAC,CAAC;QACb,CAAC,CAAC;aACD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAA6D,CAAC;QAEvF,MAAM,UAAU,GAAG,EAAc,CAAC;QAClC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAE;gBACjB,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,WAAW,EAAE;oBAAE,CAAC,CAAC,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;iBAAE;gBACvF,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,WAAW,EAAE;oBAAE,CAAC,CAAC,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;iBAAE;gBACvF,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM;oBAAE,OAAO,CAAC,CAAC,CAAC;qBAClD,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM;oBAAE,OAAO,CAAC,CAAC;gBAC3D,OAAO,CAAC,CAAC;YACb,CAAC,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC;YACxG,IAAI,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE;gBAC3C,uDAAuD;gBACvD,MAAM;gBACN,qCAAqC;gBACrC,kGAAkG;gBAClG,iHAAiH;gBACjH,sDAAsD;gBACtD,+BAA+B;gBAC/B,mHAAmH;gBACnH,YAAY,GAAG,YAAY,CAAC;gBAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBAClE,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBACnD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3E,CAAC,CAAC,CAAC;aACN;SACJ;QACD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IAC5G,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,sBAAsB,CAAC,IAAY,EAAE,KAAU,EAAE,UAUlD;QACD,KAAK,EAAE,KAAK;QACZ,mBAAmB,EAAE,IAAI;QACzB,eAAe,EAAE,KAAK;QACtB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,IAAI;KACf;QACG,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;SAAE;QACpI,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC;QAEvC,2CAA2C;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAChF,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;YAChB,MAAM,IAAI,qBAAqB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;SACtD;QAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACxB,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QAExC,4DAA4D;QAC5D,IAAI,YAAY,GAAQ,IAAI,CAAC;QAC7B,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;QAC3G,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC;QACxF,IAAI,EAAE,UAAU,EAAE,GAAG,YAAY,CAAC;QAElC,MAAM,SAAS,GAAG,GAAG,EAAE;YACnB,IAAI,OAAO,OAAO,CAAC,oBAAoB,KAAK,UAAU,EAAE;gBACpD,OAAO,OAAO,CAAC,oBAAoB,EAAE,CAAC;aACzC;YACD,IAAI,YAAY,EAAE;gBACd,4DAA4D;gBAC5D,sEAAsE;gBACtE,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;gBACzD,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBACvD,IAAI,YAAY,GAAG,YAAY,CAAC;gBAChC,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,KAAK,IAAI,EAAE;oBAClD,+DAA+D;oBAC/D,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;oBACnC,YAAY,GAAG,OAAO,YAAY,KAAK,QAAQ,IAAI,QAAQ,IAAI,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;iBAC/G;gBACD,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC;aACvC;YACD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC,CAAC;QAEF,MAAM,yBAAyB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,KAAK,IAAI,CAAC;QACxG,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,yBAAyB,EAAE;YACvF,oEAAoE;YACpE,OAAO,SAAS,EAAE,CAAC;SACtB;QAED,IAAI,CAAC,mBAAmB,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3E,qCAAqC;YACrC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,YAAY,KAAK,IAAI,EAAE;gBACvB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAClD,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,IAAI,GAAG,EAAE,CAAC,CAAC;aAC7D;SACJ;QAED,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;QACjF,IAAI,YAAY,GAAG,IAAI,CAAC;QACxB,IAAI,aAAa,CAAC,MAAM,EAAE;YACtB,MAAM,YAAY,GAAsG,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;YAC7I,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvB,YAAY,CAAC,OAAO,GAAG,UAAU,CAAC;aACrC;YACD,IAAI,YAAY,KAAK,EAAE,IAAI,OAAO,YAAY,CAAC,OAAO,KAAK,WAAW,EAAE;gBACpE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,6VAA6V,CAAC,CAAC;aAClX;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YAC5D,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;SAC7B;QAED,YAAY,GAAG,YAAY,CAAC;QAE5B,iCAAiC;QACjC,MAAM,MAAM,GAAG,CAAC,MAAM,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC;QAEzC,oCAAoC;QACpC,IAAI,eAAoB,EAAE,YAAiB,CAAC;QAC5C,IAAI,IAAI,KAAK,YAAY,EAAE;YACvB,IAAI,OAAO,CAAC,KAAK,EAAE;gBACf,IAAI,YAAY,KAAK,IAAI,EAAE;oBACvB,eAAe,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACtD;qBACI;oBACD,+CAA+C;oBAC/C,eAAe,GAAG,YAAY,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1D,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;wBACpC,eAAe,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;oBAC7C,CAAC,CAAC,CAAC;iBACN;aACJ;iBACI;gBACD,eAAe,GAAG,KAAK,CAAC;aAC3B;YACD,YAAY,GAAG,eAAe,CAAC;SAClC;aACI;YACD,+EAA+E;YAC/E,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACrE,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAClD,mGAAmG;YACnG,IAAI,YAAY,KAAK,IAAI,EAAE;gBACvB,gEAAgE;gBAChE,eAAe,GAAG,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChE;iBACI;gBACD,eAAe,GAAG,YAAY,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1D,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBACpC,eAAe,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;gBAC7C,CAAC,CAAC,CAAC;aACN;YACD,YAAY,GAAG,eAAe,CAAC;YAC/B,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzB,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;gBACnC,0CAA0C;gBAC1C,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC1C,YAAY,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;iBAClC;qBACI;oBACD,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;oBACxC,MAAM,WAAW,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;oBACnF,YAAY,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC;iBACxC;gBACD,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;aACzC;SACJ;QAED,IAAI,OAAO,CAAC,KAAK,EAAE;YACf,mCAAmC;YACnC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAC7B,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;SACN;QAED,yFAAyF;QAEzF,MAAM,WAAW,GAAG,aAAa,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QACjE,IAAI,WAAW,KAAK,WAAW,EAAE;YAC7B,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC;YACtB,OAAO,MAAM,CAAC;SACjB;QAED,kFAAkF;QAClF,SAAS,WAAW,CAAC,GAAwB;YACzC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBAAE,OAAO,GAAG,CAAC;aAAE,CAAC,gBAAgB;YAC7E,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAC5B,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;gBACtB,IAAI,GAAG,KAAK,IAAI,EAAE;oBACd,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;oBACjB,IAAI,GAAG,YAAY,KAAK,EAAE;wBAAE,GAAG,CAAC,MAAM,EAAE,CAAC;qBAAE,CAAC,gDAAgD;iBAC/F;gBACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;oBAAE,WAAW,CAAC,GAAG,CAAC,CAAC;iBAAE;YACtD,CAAC,CAAC,CAAC;QACP,CAAC;QACD,WAAW,CAAC,eAAe,CAAC,CAAC;QAE7B,4BAA4B;QAC5B,iGAAiG;QACjG,oGAAoG;QACpG,MAAM,YAAY,GAAG,EAAwB,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACpE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACX,2DAA2D;YAC3D,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;gBAAE,OAAO,CAAC,CAAC;aAAE;iBAC3C,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;gBAAE,OAAO,CAAC,CAAC,CAAC;aAAE;YACtD,OAAO,CAAC,CAAC;QACb,CAAC,CAAC;aACD,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;YACnB,4DAA4D;YAE5D,qBAAqB;YACrB,kDAAkD;YAClD,wEAAwE;YACxE,gCAAgC;YAChC,0DAA0D;YAE1D,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YACpD,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;YAC9D,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACvD,4CAA4C;YAC5C,MAAM,QAAQ,GAAG,YAAY,CAAC;YAC9B,MAAM,QAAQ,GAAG,eAAe,CAAC;YACjC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;gBACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;gBACxE,2BAA2B;gBAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ;oBACvB,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC;oBAC5D,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC7F,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACrB,OAAO,CAAC,aAAa;aACxB;YACD,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,QAAa,EAAE,QAAa,EAAE,EAAE;gBACtE,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,EAAE;oBACxC,OAAO,EAAE,CAAC;iBACb;gBACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;gBAC9D,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACvD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;oBACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;oBACxE,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;iBACzC;gBAED,IAAI,OAAO,GAAG,EAAW,CAAC;gBAC1B,IAAI,SAAS,GAAG,EAAE,CAAC;gBACnB,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;oBACjC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;wBAC1E,mBAAmB;wBACnB,MAAM,OAAO,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAC/D,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;4BACrD,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gCAC1B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;6BACrB;wBACL,CAAC,CAAC,CAAC;wBACH,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;4BAClB,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;4BACxD,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;4BAC5D,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;4BAC5D,MAAM,YAAY,GAAG,kBAAkB,CAAC,YAAY,EAAE,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;4BAClG,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;wBAC3C,CAAC,CAAC,CAAC;wBACH,MAAM;qBACT;yBACI;wBACD,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;wBAC1D,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;wBAC3B,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;wBAC3B,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,EAAE;4BACxC,MAAM;yBACT;wBACD,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;qBACxD;iBACJ;gBACD,OAAO,OAAO,CAAC;YACnB,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,kBAAkB,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACrE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACrB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ;oBACvB,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;oBACzE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC9H,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEP,MAAM,wBAAwB,GAAG,CAC7B,GAAwE,EACxE,QAAa,EACb,QAAa,EACb,YAA6D,EAAE,EACjE,EAAE;YACA,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;YACpB,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;gBAC5B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;aACvC;YACD,IAAI,IAAI,KAAK,SAAS,EAAE;gBACpB,OAAO,CAAC,wCAAwC;aACnD;iBACI,IAAI,IAAI,KAAK,eAAe,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,CAAC,EAAE;gBAC3E,OAAO,GAAG,KAAK,CAAC;aACnB;iBACI,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,eAAe,EAAE;gBACnD,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAClD,OAAO,GAAG,OAAO,KAAK,WAAW,CAAC;aACrC;iBACI,IAAI,IAAI,KAAK,aAAa,EAAE;gBAC7B,OAAO,GAAG,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,CAAC;aACpD;iBACI,IAAI,IAAI,KAAK,eAAe,EAAE;gBAC/B,OAAO,GAAG,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,CAAC;aACpD;YAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACpD,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBACzB,4EAA4E;gBAC5E,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE,aAAa,QAAQ,CAAC,IAAI,yCAAyC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;gBAC/G,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;YACrC,CAAC,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAS,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9F,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACzH,CAAC,CAAC;QAEF,MAAM,qBAAqB,GAAG,CAC1B,WAAmB,EACnB,QAAa,EACb,QAAa,EACb,aAAoC,EACtC,EAAE;YACA,MAAM,KAAK,GAAG,EAAmF,CAAC;YAClG,MAAM,MAAM,GAAG,aAAa,IAAI,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAClE,IAAI,MAAM,KAAK,WAAW,EAAE;gBACxB,OAAO,KAAK,CAAC,CAAC,gCAAgC;aACjD;iBACI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBACjC,6CAA6C;gBAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;aACzD;YACD,qEAAqE;YACrE,qFAAqF;YACrF,mEAAmE;YACnE,sCAAsC;YACtC,sCAAsC;YACtC,gCAAgC;YAChC,2CAA2C;YAC3C,UAAU;YACV,wCAAwC;YACxC,2CAA2C;YAC3C,gCAAgC;YAChC,UAAU;YACV,wCAAwC;YACxC,2CAA2C;YAC3C,2CAA2C;YAC3C,UAAU;YACV,6EAA6E;YAC7E,IAAI;iBACC;gBACD,iGAAiG;gBACjG,6DAA6D;gBAC7D,gEAAgE;gBAChE,qFAAqF;gBACrF,oDAAoD;gBACpD,IAAI;gBACJ,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBAC1B,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC/D,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;oBACjE,MAAM,UAAU,GAAG,qBAAqB,CAAC,SAAS,EAAE,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC7G,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;gBAC9B,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBACvB,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;oBAC1D,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC7E,CAAC,CAAC,CAAC;gBACH,IAAI,QAAQ,YAAY,KAAK,IAAI,QAAQ,YAAY,KAAK,EAAE;oBACxD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBACjD;gBACD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBACzB,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;oBAC1D,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7E,CAAC,CAAC,CAAC;aACN;YACD,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC;QAEF,mEAAmE;QACnE,IAAI,yBAAyB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,aAAa,EAAE;YACnE,MAAM,CAAC,SAAS,GAAG,CAAC,GAAG,EAAE;gBACrB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACrE,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBAClD,IAAI,QAAQ,GAAG,YAAY,EAAE,QAAQ,GAAG,eAAe,CAAC;gBACxD,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzB,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;oBAC9B,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;iBACtE;gBACD,MAAM,cAAc,GAAG,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBACzD,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;gBAC9E,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,gCAAgC;gBACpK,OAAO,SAAS,CAAC;YACrB,CAAC,CAAC,EAAE,CAAC;SACR;QAED,MAAM,gBAAgB,GAAG,GAAG,EAAE;YAC1B,kEAAkE;YAClE,6HAA6H;YAC7H,kBAAkB;iBACb,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAC,WAAW,EAAC,gBAAgB,EAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;iBAC9F,GAAG,CAAC,GAAG,CAAC,EAAE;gBACP,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAChD,OAAO;oBACH,GAAG;oBACH,IAAI;iBACP,CAAC;YACN,CAAC,CAAC;iBACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACf,2DAA2D;gBACvD,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;oBAAE,OAAO,CAAC,CAAC;iBAAE;qBAC3C,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;oBAAE,OAAO,CAAC,CAAC,CAAC;iBAAE;gBACtD,OAAO,CAAC,CAAC;YACb,CAAC,CAAC;iBACD,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;gBACjB,MAAM,OAAO,GAAG,CAAC,WAAmB,EAAE,QAAa,EAAE,QAAa,EAAE,YAA6D,EAAE,EAAE,EAAE;oBACnI,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAC5E,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;oBAClD,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;wBACzB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;wBACjC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE;4BACzE,kCAAkC;4BAC9B,MAAM,OAAO,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CACrE,QAAQ,YAAY,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAClD,CAAC;4BACF,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gCACrD,MAAM,UAAU,GAAG,QAAQ,YAAY,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gCACnE,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BACvD,CAAC,CAAC,CAAC;4BACH,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gCAClB,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;gCAC5D,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;gCAC5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;oCACxB,wBAAwB,CAAC,GAAG,EAAE,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;iCACnF;qCACI;oCACD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;iCACzG;4BACL,CAAC,CAAC,CAAC;4BACH,OAAO,CAAC,yBAAyB;yBACpC;6BACI;4BACD,WAAW,GAAG,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;4BACzD,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;4BAC/D,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;4BAChC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;yBACnC;qBACJ;oBACD,wBAAwB,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;gBACjE,CAAC,CAAC;gBAEF,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE;oBAC9F,4DAA4D;oBAC5D,yDAAyD;oBACzD,MAAM;oBACN,qEAAqE;oBACrE,kEAAkE;oBAClE,4DAA4D;oBACxD,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;oBAC5E,MAAM,OAAO,GACb,CAAC,GAAG,CAAC,IAAI,KAAK,cAAc,CAAC;2BAC1B,CAAC,GAAG,CAAC,IAAI,KAAK,sBAAsB,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,OAAO,EAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,WAAqB,CAAC,CAAC,CAAC;2BAClH,CAAC,GAAG,CAAC,IAAI,KAAK,sBAAsB,IAAI,WAAW,KAAK,SAAS,IAAI,cAAc,CAAC;2BACpF,CAAC,GAAG,CAAC,IAAI,KAAK,oBAAoB,IAAI,WAAW,KAAK,OAAO,IAAI,cAAc,CAAC,CAAC;oBACpF,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;iBACpH;qBACI;oBACL,4CAA4C;oBACxC,OAAO,CAAC,YAAY,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;iBACxD;YACL,CAAC,CAAC,CAAC;YAEP,iEAAiE;YACjE,oGAAoG;YACpG,wEAAwE;YACxE,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3I,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACzB,yDAAyD;gBACzD,IAAI,WAAW,GAAG,YAAY,CAAC;gBAC/B,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC7E,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBAClD,IAAI,QAAQ,GAAG,YAAY,EAAE,QAAQ,GAAG,eAAe,CAAC;gBACxD,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;oBACjC,WAAW,GAAG,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;oBACzD,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;oBAC/D,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;oBAChC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;iBACnC;gBAED,MAAM,KAAK,GAAG,qBAAqB,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBACrE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;oBACpB,OAAO;iBACV;gBACD,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBACrD,IAAI,CAAC,SAAS,EAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACjD,4BAA4B;oBAC5B,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;wBAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,gDAAgD;wBACjF,wHAAwH;wBACxH,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBACzD,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBACxD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;oBACxG,CAAC,CAAC,CAAC;iBACN;qBACI,IAAI,CAAC,WAAW,EAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBAC1D,kCAAkC;oBAClC,sTAAsT;oBACtT,oTAAoT;oBACpT,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBACvK,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;iBACnH;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAEF,yCAAyC;QACzC,IAAI,OAAO,CAAC,mBAAmB,KAAK,KAAK,EAAE;YACvC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,yEAAyE;SACpG;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAChC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,oBAAoB;QAC7C,OAAO,MAAM,CAAC;IAClB,CAAC;IAGD;;;;;OAKG;IACH,6DAA6D;IAC7D,WAAW,CAAC,IAAY,EAAE,OAazB;QACG,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACnE,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,UAAwC,EAAE;QACvE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACH,6DAA6D;IAC7D,OAAO,CAAC,IAAY,EAAE,OAAsC;QACxD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACnE,CAAC;IAED;;;;OAIG;IACH,6DAA6D;IAC7D,WAAW,CAAC,IAAY,EAAE,OAcxB;QACE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACnE,CAAC;IAED;;;;;;;OAOG;IACH,6DAA6D;IAC7D,OAAO,CAAC,IAAY,EAAE,KAAU,EAAE,OAiBhC;QACE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACnE,CAAC;IAED;;;;;;OAMG;IACH,6DAA6D;IAC7D,UAAU,CAAC,IAAY,EAAE,OAAe,EAAE,OAiBxC;QACE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACnE,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,QAA6B,EAAE,UAe3D,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;QAC1D,MAAM,WAAW,GAAG,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAY,CAAC;QACvC,MAAM,IAAI,GAAG,WAAW;YACpB,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,4DAA4D;YACrF,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAElE,IAAI;YACA,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,cAAc,GAAG,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACjD,IAAI,WAAW,EAAE;gBACb,wBAAwB;gBACxB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;aAChE;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;YACpC,IAAI,QAAQ,CAAC;YACb,IAAI;gBACA,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAChC,IAAI,QAAQ,YAAY,OAAO,EAAE;oBAC7B,QAAQ,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;wBAClC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,kCAAkC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;oBACtE,CAAC,CAAC,CAAC;iBACN;aACJ;YACD,OAAO,GAAG,EAAE;gBACR,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,kCAAkC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;aACrE;YACD,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;gBACjC,oDAAoD;gBACpD,OAAO;aACV;YACD,sEAAsE;YACtE,IAAI,WAAW,EAAE;gBACb,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;aACnE;YACD,IAAI,OAAO,EAAE;gBACT,MAAM,IAAI,iBAAiB,CAAC,cAAc,CAAC,CAAC;aAC/C;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,eAAe,EAAE,aAAa,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YACzK,OAAO,MAAM,CAAC;SACjB;QACD,OAAO,GAAG,EAAE;YACR,IAAI,GAAG,YAAY,iBAAiB,EAAE;gBAClC,YAAY;gBACZ,OAAO,CAAC,IAAI,CAAC,6CAA6C,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACzE,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;aACrD;iBACI;gBACD,MAAM,GAAG,CAAC;aACb;SACJ;gBACO;YACJ,IAAI,CAAC,OAAO,EAAE,CAAC;SAClB;IACL,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,QAAmE,EAAE,OAKlG;QAEG,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,KAAK,EAAE,IAAY,EAAE,QAAoE,EAAE,EAAE;YAC3G,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;gBACvB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,qCAAqC;aACtE;YACD,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;gBAC9C,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;gBACjB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;oBAC9C,gFAAgF;oBAChF,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;iBACxC;gBACD,IAAK,IAAc,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBACjC,IAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBAC7B;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC,EAAE,EAAyB,CAAC,CAAC;YAC9B,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;YAExC,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,MAAM,oBAAoB,GAAG,EAAqC,CAAC;YACnE,IAAI;gBACA,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;oBAC5E,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC;oBACnD,UAAoB,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,CAAE,UAAoB,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;oBAEjH,MAAM,WAAW,GAAG,QAAQ;yBACvB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,UAAU,CAAC;yBACnC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAErD,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAqC,EAAE,CAAC;oBACnJ,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;oBAC5B,IAAI,OAAO,EAAE;wBACT,oBAAoB,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;wBAEjD,MAAM,aAAa,GAAG,QAAQ;6BACzB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,QAAQ,IAAI,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;6BACpI,GAAG,CAAC,EAAE,CAAC,EAAE;4BACN,MAAM,GAAG,GAAI,EAAE,CAAC,GAAc,CAAC,KAAK,CAAE,EAAE,CAAC,GAAc,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;4BAC1E,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC;wBACnD,CAAC,CAAC,CAAC;wBAEP,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;4BAC1B,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;4BAC7D,MAAM,YAAY,GAClB,SAAS,CAAC,SAAS,EAAE,aAAa,CAAC;iCAC9B,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;4BACpC,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;yBAC3C;qBACJ;oBACD,IAAI,CAAC,OAAO,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;wBACrC,OAAO,KAAK,CAAC,CAAC,iBAAiB;qBAClC;gBACL,CAAC,CAAC,CAAC;gBAEH,IAAI,OAAO,EAAE;oBACT,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;oBACxD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;iBAC/C;gBACD,IAAI,CAAC,OAAO,EAAE;oBAAE,OAAO,KAAK,CAAC;iBAAE;gBAE/B,sFAAsF;gBACtF,OAAO,GAAI,UAAgC,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;oBAE3D,MAAM,SAAS,GAAG,IAAI,QAAQ,CAAC;wBAC3B,GAAG,CAAC,OAAO,UAAU,KAAK,QAAQ,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;wBAC5D,GAAG,CAAC,OAAO,UAAU,KAAK,QAAQ,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;wBAC1D,MAAM,EAAE,KAAK;qBAChB,CAAC,CAAC;oBAEH,MAAM,aAAa,GAAG,QAAQ;yBACzB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,QAAQ,IAAI,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;yBACpI,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAErD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,OAAO,EAAE;wBAC3E,OAAO,KAAK,CAAC;qBAChB;oBAED,MAAM,WAAW,GAAG,QAAQ;yBACvB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,UAAU,CAAC;yBACnC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAErD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;wBAC1B,OAAO,IAAI,CAAC,CAAC,mFAAmF;qBACnG;oBAED,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;oBAClD,OAAO,MAAM,CAAC,OAAO,CAAC;gBAC1B,CAAC,CAAC,CAAC;gBACH,OAAO,OAAO,CAAC;aAClB;YACD,OAAO,GAAG,EAAE;gBACR,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,IAAI,KAAK,EAAE,GAAG,CAAC,CAAC;gBACvD,MAAM,GAAG,CAAC;aACb;QACL,CAAC,CAAC,CAAC,YAAY;QAEf;;;;WAIG;QACH,MAAM,UAAU,GAAG,CAAC,KAAe,EAAE,QAA4D,EAAE,EAAE;YACjG,MAAM,QAAQ,GAAG,EAAqC,CAAC;YACvD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBAC/B,IAAI,OAAO,GAAG,IAAI,CAAC;gBACnB,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,EAAE;oBACnG,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;iBAC3B;qBACI,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,EAAE;oBACvG,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;iBAC1B;qBACI,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,IAAI,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,YAAY,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC5G,mFAAmF;oBACnF,OAAO,GAAG,IAAI,CAAC;iBAClB;qBACI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;oBACpB,OAAO,GAAG,KAAK,CAAC;iBACnB;qBACI;oBACD,IAAI,KAAK,CAAC,OAAO,EAAE;wBACf,IAAI,KAAK,CAAC,SAAS,KAAK,WAAW,CAAC,MAAM,IAAI,CAAC,KAAK,EAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;4BAC7E,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;4BACjD,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;iCACpD,IAAI,CAAC,OAAO,CAAC,EAAE;gCACZ,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC;4BACvC,CAAC,CAAC,CAAC;4BACP,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BACjB,OAAO,GAAG,IAAI,CAAC;yBAClB;6BACI,IAAI,KAAK,CAAC,SAAS,KAAK,WAAW,CAAC,KAAK,IAAI,CAAC,UAAU,EAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;4BAC3F,qCAAqC;4BACrC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC;iCACtC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE;gCACzB,oCAAoC;gCACpC,0GAA0G;gCAEtG,MAAM,OAAO,GACb,CAAC,CAAC,EAAE,KAAK,UAAU;oCACf,aAAa;oCACb,CAAC,CAAC,CAAC,CAAC,OAAO,YAAY,KAAK;wCACxB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,qDAAqD;wCACjG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;oCAE7B,cAAc;oCACd,CAAC,CAAC,CAAC,CAAC,OAAO,YAAY,KAAK;wCACxB,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,0DAA0D;wCACtG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gCAEnC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC;4BACvC,CAAC,CAAC,CAAC;4BACP,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BACjB,OAAO,GAAG,IAAI,CAAC;yBAClB;6BACI,IAAI,KAAK,CAAC,SAAS,KAAK,WAAW,CAAC,MAAM,EAAE;4BAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC;iCACtC,IAAI,CAAC,IAAI,CAAC,EAAE;gCACT,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;4BAC/E,CAAC,CAAC,CAAC;4BACP,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BACjB,OAAO,GAAG,IAAI,CAAC;yBAClB;6BACI;4BACD,OAAO,GAAG,KAAK,CAAC;yBACnB;qBACJ;yBACI,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,MAAM,IAAI,CAAC,KAAK,EAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;wBAC7E,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC;wBACrC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;qBAClE;yBACI,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,KAAK,IAAI,CAAC,UAAU,EAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;wBACtF,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBACrD,OAAO,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;qBACtF;yBACI;wBACD,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;wBAClD,IAAI,GAAG,YAAY,OAAO,EAAE;4BACxB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BACnB,GAAG,GAAG,IAAI,CAAC;yBACd;wBACD,OAAO,GAAG,GAAG,CAAC;qBACjB;iBACJ;gBACD,OAAO,OAAO,CAAC;YACnB,CAAC,CAAC,CAAC,CAAC,WAAW;YAEf,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC,aAAa;QAEhB,OAAO,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,CAAC,GAAQ,EAAE,EAAU,EAAE,OAAY;QACnC,IAAI,EAAE,KAAK,GAAG,EAAE;YAAE,OAAO,GAAG,GAAG,OAAO,CAAC;SAAE;QACzC,IAAI,EAAE,KAAK,IAAI,EAAE;YAAE,OAAO,GAAG,IAAI,OAAO,CAAC;SAAE;QAC3C,IAAI,EAAE,KAAK,IAAI,EAAE;YAAE,OAAO,GAAG,KAAK,OAAO,CAAC;SAAE;QAC5C,IAAI,EAAE,KAAK,IAAI,EAAE;YAAE,OAAO,GAAG,KAAK,OAAO,CAAC;SAAE;QAC5C,IAAI,EAAE,KAAK,GAAG,EAAE;YAAE,OAAO,GAAG,GAAG,OAAO,CAAC;SAAE;QACzC,IAAI,EAAE,KAAK,IAAI,EAAE;YAAE,OAAO,GAAG,IAAI,OAAO,CAAC;SAAE;QAC3C,IAAI,EAAE,KAAK,IAAI,EAAE;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAAE;QACtD,IAAI,EAAE,KAAK,KAAK,EAAE;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SAAE;QACtD,IAAI,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,OAAO,EAAE;YACjC,MAAM,OAAO,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC;YACxH,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACpC,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxC,OAAO,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;SAC7C;QACD,IAAI,EAAE,KAAK,SAAS,EAAE;YAClB,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;SACvC;QACD,IAAI,EAAE,KAAK,UAAU,EAAE;YACnB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;SACxC;QACD,IAAI,EAAE,KAAK,SAAS,EAAE;YAClB,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;SACjD;QACD,IAAI,EAAE,KAAK,UAAU,EAAE;YACnB,OAAO,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;SAC/C;QACD,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,MAAM,EAAE;YAC/B,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,IAAI,GAAG,CAAC;YACtD,OAAO,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;SACpC;QACD,IAAI,EAAE,KAAK,UAAU,IAAI,EAAE,KAAK,WAAW,EAAE;YACzC,8BAA8B;YAC9B,MAAM,QAAQ,GAAG,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC1F,OAAO,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;SACnD;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,OAA0F,EAAE,OAAO,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE;QACpK,IAAI,OAAO,EAAE,MAAM,KAAK,MAAM,EAAE;YAC5B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;SAC9D;QACD,MAAM,KAAK,GAA0C,OAAO,OAAO,KAAK,UAAU;YAC9E,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,mFAAmF;YACjH,CAAC,CAAC,OAAO,CAAC;QAEd,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,GAAQ,EAAE,EAAE;YAC9C,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;iBAC9B,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAS,kBAAkB;iBACjD,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAW,SAAS;iBACxC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAU,kBAAkB;iBACjD,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAU,YAAY;iBAC3C,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAU,OAAO;iBACtC,OAAO,CAAC,kBAAkB,EAAK,2BAA2B;YACvD,AAD4B,2BAA2B;YACvD,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAC/D,CAAC;YAEN,IAAI,IAAI,KAAK,WAAW,CAAC,QAAQ,EAAE;gBAC/B,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC;gBAC/B,IAAI,OAAO,CAAC,SAAS,EAAE;oBACnB,GAAG,GAAG,0BAA0B,GAAG,GAAG,CAAC,CAAC,qBAAqB;iBAChE;aACJ;iBACI,IAAI,IAAI,KAAK,WAAW,CAAC,MAAM,EAAE;gBAClC,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;aAC5B;iBACI,IAAI,IAAI,KAAK,WAAW,CAAC,KAAK,EAAE;gBACjC,GAAG,GAAG,IAAI,CAAC;aACd;iBACI,IAAI,IAAI,KAAK,WAAW,CAAC,MAAM,EAAE;gBAClC,GAAG,GAAG,IAAI,CAAC;aACd;iBACI,IAAI,IAAI,KAAK,WAAW,CAAC,MAAM,EAAE;gBAClC,GAAG,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,+CAA+C;gBACzF,IAAI,OAAO,CAAC,SAAS,EAAE;oBACnB,GAAG,GAAG,4BAA4B,GAAG,GAAG,CAAC,CAAC,uBAAuB;iBACpE;aACJ;iBACI,IAAI,IAAI,KAAK,WAAW,CAAC,SAAS,EAAE;gBACrC,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC;gBACtB,IAAI,OAAO,CAAC,SAAS,EAAE;oBACnB,GAAG,GAAG,+BAA+B,GAAG,GAAG,CAAC,CAAC,8BAA8B;iBAC9E;aACJ;iBACI,IAAI,IAAI,KAAK,WAAW,CAAC,MAAM,EAAE;gBAClC,oEAAoE;gBACpE,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC;gBACjB,IAAI,OAAO,CAAC,SAAS,EAAE;oBACnB,GAAG,GAAG,4BAA4B,GAAG,GAAG,CAAC;iBAC5C;aACJ;YACD,OAAO,GAAG,CAAC;QACf,CAAC,CAAC;QAEF,IAAI,QAAQ,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC;SACxB;aACI,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,CAAC,MAAM,EAAE;YAAE,QAAQ,GAAG,GAAG,CAAC;YAAC,MAAM,GAAG,GAAG,CAAC;SAAE;aAC3E,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,CAAC,KAAK,EAAE;YAAE,QAAQ,GAAG,GAAG,CAAC;YAAC,MAAM,GAAG,GAAG,CAAC;SAAE;aAC1E;YACD,iDAAiD;YACjD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACtD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;SACrB;QAED,IAAI,QAAQ,EAAE;YACV,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC1B,IAAI,CAAC,YAAY,OAAO,EAAE;gBAAE,MAAM,CAAC,CAAC;aAAE;SACzC;QAED,IAAI,MAAM,GAAG,EAAE,EAAE,WAAW,GAAG,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,EAAgB,CAAC;QACjC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;aACvB,IAAI,CAAC,SAAS,CAAC,EAAE;YACd,IAAI,SAAS,CAAC,OAAO,EAAE;gBACvB,2BAA2B;gBACvB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC3B;iBACI;gBACD,IAAI,WAAW,EAAE,GAAG,CAAC,EAAE;oBAAE,MAAM,IAAI,GAAG,CAAC;iBAAE;gBACzC,IAAI,OAAO,SAAS,CAAC,GAAG,KAAK,QAAQ,EAAE;oBAAE,MAAM,IAAI,IAAI,SAAS,CAAC,GAAG,IAAI,CAAC;iBAAE;gBAC3E,MAAM,IAAI,cAAc,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;aAC7D;QACL,CAAC,CAAC,CAAC;QACP,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YACxB,IAAI,CAAC,YAAY,OAAO,EAAE;gBAAE,MAAM,CAAC,CAAC;aAAE;SACzC;QAED,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACvB,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,MAAM,GAAG,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC;YAClF,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBAAE,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC;aAAE;YACvD,IAAI,MAAM,EAAE;gBACR,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;gBACxB,IAAI,CAAC,YAAY,OAAO,EAAE;oBAAE,MAAM,CAAC,CAAC;iBAAE;aACzC;YACD,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;SAC3E;QAED,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YACxB,IAAI,CAAC,YAAY,OAAO,EAAE;gBAAE,MAAM,CAAC,CAAC;aAAE;SACzC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CACZ,IAAY,EACZ,IAA+F,EAC/F,UAYK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;QAEtC,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,QAAQ;QACtC,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM;QACzC,MAAM,KAAK,GAAG;YACV,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,EAA6C;YACpD,cAAc,EAAE,CAAC;YACjB,YAAY,EAAE,CAAC;YACf,IAAI,cAAc;gBACd,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;YACpC,CAAC;SACJ,CAAC;QACF,MAAM,aAAa,GAAG,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,EAAE;YAC3C,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC;YACjC,IAAI,IAAI,KAAK,IAAI,EAAE;gBACf,IAAI,KAAK,CAAC,IAAI,EAAE;oBACZ,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;iBAClF;qBACI;oBACD,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;iBACtD;aACJ;iBACI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;gBAC/B,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;aACnC;YACD,IAAI,MAAM,EAAE;gBACR,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC;aACtB;iBACI;gBACD,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;gBAClC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;gBAClB,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;aACnB;QACL,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;YACvC,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;gBAC3C,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACpC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC;gBACrB,MAAM,aAAa,EAAE,CAAC;aACzB;YACD,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;YAC3D,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC;YACtB,OAAO,GAAG,CAAC;QACf,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;YACzC,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;gBAC1C,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;aAC7B;YACD,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;gBAC1C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;aAC5D;QACL,CAAC,CAAC;QACF,MAAM,YAAY,GAAG,KAAK,EAAE,KAAa,EAAE,EAAE;YACzC,yEAAyE;YACzE,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,GAAG,KAAK,KAAK,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,eAAe,KAAK,GAAG,CAAC,CAAC;aAAE;QAC3I,CAAC,CAAC;QACF,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;YAC7B,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACvC,OAAO,IAAI,EAAE;gBACT,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;oBAClC,MAAM,aAAa,EAAE,CAAC;iBACzB;gBACD,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;oBAC1C,KAAK,CAAC,KAAK,EAAE,CAAC;iBACjB;qBACI;oBACD,MAAM;iBACT;aACJ;QACL,CAAC,CAAC;QACF;;WAEG;QACH,MAAM,SAAS,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;YACvC,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;YAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;QACnD,CAAC,CAAC;QACF;;;WAGG;QACH,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;YAC7B,MAAM,aAAa,EAAE,CAAC;YACtB,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC;YAC9B,QAAQ,EAAE,EAAE;gBACR,KAAK,GAAG,CAAC,CAAC,OAAO,QAAQ,CAAC;gBAC1B,KAAK,GAAG,CAAC,CAAC,OAAO,QAAQ,CAAC;gBAC1B,KAAK,GAAG,CAAC,CAAC,OAAO,OAAO,CAAC;gBACzB,KAAK,GAAG,CAAC,CAAC,OAAO,MAAM,CAAC;gBACxB,KAAK,GAAG,CAAC,CAAC,OAAO,WAAW,CAAC;gBAC7B,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG;oBACJ,OAAO,SAAS,CAAC;gBACrB,OAAO,CAAC,CAAC;oBACL,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE;wBACxC,OAAO,QAAQ,CAAC;qBACnB;oBACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;iBAC3E;aACJ;QACL,CAAC,CAAC;QAEF;;WAEG;QACH,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;YAC1B,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;YACxB,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;YACpB,oCAAoC;YACpC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,GAAC,CAAC,CAAC,KAAK,IAAI,EAAE;gBACtD,CAAC,EAAE,CAAC;gBACJ,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;oBACxB,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACrC,MAAM,aAAa,EAAE,CAAC;oBACtB,CAAC,GAAG,CAAC,CAAC;iBACT;aACJ;YACD,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACxC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YACpB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;YAC3B,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE;gBACjC,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;aAC9B;iBACI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE;gBACtC,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;aAC/B;YACD,MAAM,IAAI,KAAK,CAAC,mCAAmC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QACrF,CAAC,CAAC;QACF,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;YAC1B,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;YACpB,iDAAiD;YACjD,MAAM,OAAO,GAAG,CAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,CAAC,CAAC,CAAC,4DAA4D;YACvJ,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;gBACpC,CAAC,EAAE,CAAC;gBACJ,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;oBACxB,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACrC,MAAM,aAAa,EAAE,CAAC;oBACtB,CAAC,GAAG,CAAC,CAAC;iBACT;aACJ;YACD,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACxC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;YAChB,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC9G,OAAO,EAAE,CAAC;QACd,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;YACzB,MAAM,aAAa,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE;gBACtB,QAAQ,IAAI,EAAE;oBACV,KAAK,QAAQ,CAAC,CAAC,OAAO,UAAU,EAAE,CAAC;oBACnC,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;oBACzB,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;oBACxB,KAAK,QAAQ,CAAC,CAAC,OAAO,UAAU,EAAE,CAAC;oBACnC,KAAK,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC;oBACzB,KAAK,WAAW,CAAC,CAAC,OAAO,SAAS,CAAC;oBACnC,KAAK,SAAS,CAAC,CAAC,OAAO,WAAW,EAAE,CAAC;iBACxC;YACL,CAAC,CAAC,EAAE,CAAC;YACL,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC3B,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjF,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,GAAQ,EAAE,EAAE;YAChD,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;YAC1B,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;YACtB,QAAQ,IAAI,EAAE;gBACV,KAAK,MAAM,CAAC;gBACZ,KAAK,MAAM,CAAC,CAAC;oBACT,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;oBACpB,MAAM;iBACT;gBACD,KAAK,QAAQ,CAAC;gBACd,KAAK,QAAQ,CAAC,CAAC;oBACX,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;oBACpB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;wBACtB,kBAAkB;wBAClB,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;qBAC7B;yBACI;wBACD,6BAA6B;wBAC7B,MAAM,IAAI,KAAK,CAAC,mEAAmE,IAAI,GAAG,CAAC,CAAC;qBAC/F;oBACD,MAAM;iBACT;gBACD,KAAK,eAAe,CAAC;gBACrB,KAAK,WAAW,CAAC,CAAC;oBACd,GAAG,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;oBAC7B,MAAM;iBACT;gBACD,KAAK,QAAQ,CAAC,CAAC;oBACX,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;oBAClB,MAAM;iBACT;gBACD;oBACI,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,yBAAyB,IAAI,GAAG,CAAC,CAAC;aAChG;YACD,OAAO,GAAG,CAAC;QACf,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,EAAE,iBAAiB,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;QACrD,MAAM,YAAY,GAAG,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC;QAE3E;;WAEG;QACH,MAAM,OAAO,GAAG,KAAK,EAAE,MAAgB,EAAE,KAAU,EAAE,EAAE;YACnD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YACpC,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,cAAc,GAAG,aAAa,EAAE;gBAC9D,8EAA8E;gBAC9E,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;oBACpD,gGAAgG;oBAChG,qCAAqC;oBACrC,uBAAuB;oBACvB,4CAA4C;oBAC5C,iCAAiC;oBACjC,0CAA0C;oBAC1C,wDAAwD;oBACxD,yGAAyG;oBACzG,qDAAqD;oBACrD,uEAAuE;oBACvE,GAAG;oBACH,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;wBAC3B,wGAAwG;wBACxG,kCAAkC;wBAClC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;qBAC1G;yBACI;wBACD,4BAA4B;wBAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;wBAC3E,IAAI,MAAM,EAAE;4BACR,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;yBAC9C;6BACI;4BACD,+EAA+E;4BAC/E,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;yBAChF;qBACJ;oBACD,OAAO,OAAO,CAAC;gBACnB,CAAC,EAAE,EAA2D,CAAC,CAAC;gBAEhE,cAAc;gBACd,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;gBAC5C,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;gBACjB,KAAK,CAAC,YAAY,EAAE,CAAC;gBAErB,qBAAqB;aAGxB;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;gBACtB,iDAAiD;aAEpD;QACL,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,KAAK,EAAE,MAAgB,EAAE,EAAE;YAC5C,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,aAAa,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,QAAQ,KAAK,GAAG,EAAE;gBAClB,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;aACtD;YACD,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,IAAI,GAAG,GAAG,EAAyB,CAAC;YACpC,IAAI,aAAa,GAAG,KAAK,CAAC;YAC1B,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;gBAC3B,IAAI,CAAC,CAAC;gBACN,IAAI,CAAC,aAAa,EAAE;oBAChB,aAAa,GAAG,IAAI,CAAC;oBACrB,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;iBACpD;qBACI,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;iBACvD;gBACD,GAAG,GAAG,EAAE,CAAC;gBACT,IAAI,CAAC,EAAE;oBAAE,MAAM,CAAC,CAAC;iBAAE;YACvB,CAAC,CAAC;YACF,MAAM,QAAQ,GAAG,EAAE,CAAC;YACpB,OAAO,IAAI,EAAE;gBACT,MAAM,aAAa,EAAE,CAAC;gBACtB,MAAM,QAAQ,GAAG,MAAM,UAAU,EAAE,CAAC,CAAC,sBAAsB;gBAC3D,MAAM,aAAa,EAAE,CAAC;gBACtB,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;gBACxB,MAAM,aAAa,EAAE,CAAC;gBACtB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;gBAC1C,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;gBACtB,UAAU,EAAE,CAAC;gBACb,IAAI,CAAC,QAAQ,EAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;oBACnC,yEAAyE;oBACzE,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;oBAE7B,IAAI,IAAI,KAAK,QAAQ,EAAE;wBACnB,4BAA4B;wBAC5B,MAAM,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;qBAC9C;yBACI;wBACD,MAAM,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;qBAC7C;iBACJ;gBAED,8DAA8D;gBAC9D,MAAM,aAAa,EAAE,CAAC;gBACtB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,QAAQ,KAAK,GAAG,EAAE;oBAClB,6BAA6B;oBAC7B,KAAK,CAAC,KAAK,EAAE,CAAC;oBACd,MAAM;iBACT;gBACD,mBAAmB;gBACnB,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;aAC3B;YACD,MAAM,YAAY,GAAG,UAAU,KAAK,CAAC,IAAI,OAAO,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC;YACzE,IAAI,YAAY,EAAE;gBACd,sDAAsD;gBACtD,wDAAwD;gBACxD,yDAAyD;gBACzD,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;aACvD;YACD,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7B,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,KAAK,EAAE,MAAgB,EAAE,EAAE;YAC3C,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,aAAa,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,QAAQ,KAAK,GAAG,EAAE;gBAClB,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;aACtD;YACD,IAAI,aAAa,GAAG,KAAK,CAAC;YAC1B,IAAI,GAAG,GAAG,EAAW,CAAC;YACtB,IAAI,OAAO,GAAG,EAAyB,CAAC;YACxC,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;gBAC1B,IAAI,CAAC,CAAC;gBACN,IAAI,CAAC,aAAa,EAAE;oBAChB,cAAc;oBACd,aAAa,GAAG,IAAI,CAAC;oBACrB,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;oBACjD,GAAG,GAAG,IAAI,CAAC,CAAC,KAAK;iBACpB;qBACI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;oBACtC,gBAAgB;oBAChB,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;oBACxD,OAAO,GAAG,EAAE,CAAC;iBAChB;gBACD,IAAI,CAAC,EAAE;oBAAE,MAAM,CAAC,CAAC;iBAAE;YACvB,CAAC,CAAC;YACF,MAAM,SAAS,GAAG,CAAC,KAAU,EAAE,KAAa,EAAE,EAAE;gBAC5C,IAAI,aAAa,EAAE;oBACf,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;iBAC1B;qBACI;oBACD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACnB;YACL,CAAC,CAAC;YAEF,MAAM,QAAQ,GAAG,EAAE,CAAC;YACpB,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,OAAO,IAAI,EAAE;gBACT,MAAM,aAAa,EAAE,CAAC;gBACtB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;gBAC1C,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACxB,IAAI,CAAC,QAAQ,EAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;oBACnC,yEAAyE;oBACzE,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,uBAAuB;oBAEpD,IAAI,IAAI,KAAK,QAAQ,EAAE;wBACnB,4BAA4B;wBAC5B,MAAM,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;qBAC3C;yBACI;wBACD,MAAM,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;qBAC1C;iBACJ;gBAED,6DAA6D;gBAC7D,MAAM,aAAa,EAAE,CAAC;gBACtB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,QAAQ,KAAK,GAAG,EAAE;oBAClB,4BAA4B;oBAC5B,KAAK,CAAC,KAAK,EAAE,CAAC;oBACd,MAAM;iBACT;gBACD,mBAAmB;gBACnB,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;gBACxB,KAAK,EAAE,CAAC;aACX;YAED,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YAC5B,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;YACrB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;YAC1C,IAAI,CAAC,QAAQ,EAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACnC,+CAA+C;gBAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClC,IAAI,IAAI,KAAK,QAAQ,EAAE;oBACnB,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;iBAC9B;qBACI;oBACD,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;iBAC7B;aACJ;iBACI;gBACD,eAAe;gBACf,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;aACjD;QACL,CAAC,CAAC;QACF,OAAO,KAAK,EAAE,CAAC;IACnB,CAAC;IAGD;;;;OAIG;IACH,SAAS,CAAC,IAAY,EAAE,MAAqB;QACzC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YAC/B,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;SACxD;QACD,IAAI,MAAM,KAAK,IAAI,EAAE;YACjB,uCAAuC;YACvC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YACxD,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,OAAO;SACV;QACD,iCAAiC;QACjC,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACtD,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;SAC5B;aACI;YACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;YACjD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACxB,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC3E,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,EAAE;oBAAE,OAAO,CAAC,CAAC;iBAAE;gBAC1C,OAAO,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,IAAY;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACtF,CAAC;IAED;;OAEG;IACH,UAAU;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAE,CAAC;IACjH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,cAAc,CAAC,IAAY,EAAE,KAAU,EAAE,UAKjC,EAAE,OAAO,EAAE,KAAK,EAAE;QAEtB,IAAI,MAAM,GAAuB,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACrB,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAC/B,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACR,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;gBACrC,oEAAoE;gBAChE,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC1D,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC3E,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBACzE,OAAO,MAAM,CAAC,EAAE,CAAC;aACpB;YAED,sEAAsE;YACtE,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;YACnE,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,KAAU,EAAE,SAA+B,EAAsB,EAAE;gBAC5F,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;oBACxB,kBAAkB;oBAClB,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;iBAC/C;qBACI,IAAI,KAAK,KAAK,IAAI,EAAE;oBACrB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,qDAAqD;iBAC7E;gBACD,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE;oBAC5D,gDAAgD;oBAChD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;wBAC7C,wDAAwD;wBACxD,6DAA6D;wBAC7D,uCAAuC;wBACvC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;qBACvB;oBACD,IAAI,MAAM,CAAC;oBACX,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;wBAChC,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;wBACxD,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;wBACnC,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC1D,OAAO,MAAM,CAAC,EAAE,CAAC;oBACrB,CAAC,CAAC,CAAC;oBACH,OAAO,MAAM,CAAC;iBACjB;qBACI;oBACD,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBACnD,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC9B,OAAO,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3D;YACL,CAAC,CAAC;YACF,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YACvC,OAAO,MAAM,CAAC,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ"} \ No newline at end of file diff --git a/dist/esm/storage/indexes.js b/dist/esm/storage/indexes.js new file mode 100644 index 0000000..e497afc --- /dev/null +++ b/dist/esm/storage/indexes.js @@ -0,0 +1,2 @@ +export { createIndex } from './create-index.js'; +//# sourceMappingURL=indexes.js.map \ No newline at end of file diff --git a/dist/esm/storage/indexes.js.map b/dist/esm/storage/indexes.js.map new file mode 100644 index 0000000..b2ab9bb --- /dev/null +++ b/dist/esm/storage/indexes.js.map @@ -0,0 +1 @@ +{"version":3,"file":"indexes.js","sourceRoot":"","sources":["../../../src/storage/indexes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAsB,MAAM,gBAAgB,CAAC"} \ No newline at end of file diff --git a/dist/esm/storage/mssql/index.js b/dist/esm/storage/mssql/index.js new file mode 100644 index 0000000..a216d80 --- /dev/null +++ b/dist/esm/storage/mssql/index.js @@ -0,0 +1,1128 @@ +import { ID, PathReference, PathInfo, ascii85, ColorStyle } from 'acebase-core'; +import { Storage, StorageSettings } from '../index.js'; +import { NodeInfo } from '../../node-info.js'; +import { VALUE_TYPES } from '../../node-value-types.js'; +import { NodeNotFoundError, NodeRevisionError } from '../../node-errors.js'; +import { pfs } from '../../promise-fs/index.js'; +import { NodeAddress } from '../../node-address.js'; +export class MSSQLNodeAddress extends NodeAddress { + constructor(containerPath) { + super(containerPath); + } +} +export class MSSQLNodeInfo extends NodeInfo { + constructor(info) { + super(info); + this.revision = info.revision; + this.revision_nr = info.revision_nr; + this.created = info.created; + this.modified = info.modified; + } +} +export class MSSQLStorageSettings extends StorageSettings { + constructor(options) { + super(options); + /** + * Driver to use, 'tedious' by default. If you want to use Microsoft's native V8 + * driver on Windows, make sure to add msnodesqlv8 to your project dependencies + */ + this.driver = 'tedious'; + /** + * Server name, default is `'localhost'` + * @default 'localhost' + */ + this.server = 'localhost'; + /** + * Server port, default is `1433` + * @default 1433 + */ + this.port = 1433; + /** + * A boolean determining whether or not the connection will be encrypted. (default: `true`) + * @default true + */ + this.encrypt = true; + /** + * Name of the app to identify connection in SQL server manager + */ + this.appName = 'AceBase'; + /** + * default is `60000`ms (60s) + */ + this.connectionTimeout = 60000; + /** + * default is `300000`ms (5m) + */ + this.requestTimeout = 300000; + /** + * default is `10` + */ + this.maxConnections = 10; + /** + * default is `0` + */ + this.minConnections = 0; + /** + * default is `30000`ms (30s) + */ + this.idleTimeout = 300000; + /** + * Whether to use Windows authentication. + * @default false + */ + this.trustedConnection = false; + this.driver = options.driver === 'native' ? 'native' : 'tedious'; + this.domain = options.domain; + this.user = options.user; + this.password = options.password; + this.server = options.server || 'localhost'; + this.port = typeof options.port === 'number' ? options.port : 1433; + this.database = options.database; + this.instance = options.instance; + this.encrypt = typeof options.encrypt === 'boolean' ? options.encrypt : true; + this.appName = 'AceBase'; + this.connectionTimeout = typeof options.connectionTimeout === 'number' ? options.connectionTimeout : 60 * 1000; // 60 seconds + this.requestTimeout = typeof options.requestTimeout === 'number' ? options.requestTimeout : 5 * 60 * 1000; // 5 minutes + this.maxConnections = typeof options.maxConnections === 'number' ? options.maxConnections : 10; + this.minConnections = typeof options.minConnections === 'number' ? options.minConnections : 0; + this.idleTimeout = typeof options.idleTimeout === 'number' ? options.idleTimeout : 30 * 1000; // 30s + this.trustedConnection = options.trustedConnection === true; + if (this.trustedConnection && this.driver !== 'native') { + throw new Error(`Cannot use trusted connection (windows authentication) when not using the native driver`); + } + } +} +export class MSSQLStorage extends Storage { + /** + * @param name database name + * @param settings settings to connect to a SQL Server database + */ + constructor(name, settings, env) { + settings = new MSSQLStorageSettings(settings); + super(name, settings, env); + // Lazy load MSSQL so it is only `require`d once MSSQLStorage is actually requested + if (this.settings.driver === 'native') { + // Use Microsft native V8 driver + try { + this.mssql = require('mssql/msnodesqlv8'); + } + catch (err) { + throw new Error(`Native driver for MSSQL not found. To use Microsoft's native V8 MSSQL driver, add msnodesqlv8 to your project dependencies: npm i msnodesqlv8 (also add mssql package)`); + } + } + // Use default tedious driver + try { + this.mssql = require('mssql'); + } + catch (err) { + throw new Error(`MSSQL not found. To use MSSQL as storage, add mssql to your project dependencies: npm i mssql`); + } + this.init(); + } + async init() { + const path = `${this.settings.path}/${this.name}.acebase`; + const exists = await pfs.exists(path); + if (!exists) { + try { + await pfs.mkdir(path); + } + catch (err) { + console.error(`Cannot create dir "${path}": ${err}`); + throw err; + } + } + // connect + const settings = this.settings; + this._db = new this.mssql.ConnectionPool({ + domain: settings.domain, + user: settings.user, + password: settings.password, + server: settings.server, + port: settings.port, + database: settings.database, + options: { + encrypt: settings.encrypt, + appName: settings.appName, + abortTransactionOnError: true, + instanceName: settings.instance, + // native setting: + trustedConnection: settings.trustedConnection, + }, + connectionTimeout: settings.connectionTimeout, + requestTimeout: settings.requestTimeout, + pool: { + max: settings.maxConnections, + min: settings.minConnections, + idleTimeoutMillis: settings.idleTimeout, + }, + }); + try { + await this._db.connect(); + this.rootRecord = null; + // create tables that don't exist yet + const tables = { + settings: { + create: 'CREATE TABLE settings (name VARCHAR(50) NOT NULL PRIMARY KEY, value NVARCHAR(250))', + rows: [{ name: 'db_schema_version', value: '1' }], + }, + nodes: { + create: `CREATE TABLE nodes ( + path NVARCHAR(1000) NOT NULL PRIMARY KEY, + type TINYINT NOT NULL, -- node type (1=object, 2=array, 5=string, 8=binary, 9=reference) + text_value NVARCHAR(MAX), -- when type is string or reference (> max inline value length?) + binary_value VARBINARY(MAX), -- when type is binary + json_value NVARCHAR(MAX), -- when type is object, only simple/small value children are here (no objects, arrays, large strings) + + created BIGINT NOT NULL, -- creation timestamp + modified BIGINT NOT NULL, -- modification timestamp + revision_nr INT NOT NULL, -- nr of times the node's value was updated + revision CHAR(24) NOT NULL -- revision id that is shared with all nested nodes that were updated at the same time, should be time sortable so could be considered as a "transaction timestamp" + )`, + rows: [{ + path: '', + type: VALUE_TYPES.OBJECT, + json_value: '{}', + created: Date.now(), + modified: Date.now(), + revision_nr: 0, + revision: ID.generate(), + }], + }, + logs: { + create: `CREATE TABLE logs ( + id INT IDENTITY(1,1) NOT NULL PRIMARY KEY, + action VARCHAR(25) NOT NULL, + success BIT NOT NULL, + error NVARCHAR(MAX), + date BIGINT, + details NVARCHAR(MAX) + )`, + rows: [{ action: 'db_created', success: 1, date: Date.now() }], + }, + }; + const rows = await this._get(`SELECT TABLE_NAME AS name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'`); + rows.forEach((row) => { + delete tables[row.name]; + }); + // Create tables that didn't exist + const promises = Object.keys(tables).map(async (name) => { + // Create table + const sql = tables[name].create; + const result = await this._exec(sql); + // Insert initialization data + if (tables[name].rows) { + const rows = tables[name].rows; + const promises = rows.map(async (row) => { + const keys = Object.keys(row); + // let values = keys.map(key => row[key]).map(val => typeof val === 'number' ? val : `'${val.toString()}'`); + // let sql = `INSERT INTO ${name} (${keys.join(',')}) VALUES (${values.join(',')})`; + const sql = `INSERT INTO ${name} (${keys.join(',')}) VALUES (${keys.map(key => '@' + key).join(',')})`; + const params = keys.reduce((obj, key) => { obj[key] = row[key]; return obj; }, {}); + await this._exec(sql, params); + }); + await Promise.all(promises); + } + // Run action callback + await tables[name].action?.(); + }); + await Promise.all(promises); + // Get root record info + this.rootRecord = await this.getNodeInfo(''); + this.debug.log(`Database "${this.name}" details:`.colorize(ColorStyle.dim)); + this.debug.log(`- Type: MSSQL`.colorize(ColorStyle.dim)); + this.debug.log(`- Server: ${this.settings.server}:${this.settings.port}`.colorize(ColorStyle.dim)); + this.debug.log(`- Database: ${this.settings.database}`.colorize(ColorStyle.dim)); + this.debug.log(`- Max inline value size: ${this.settings.maxInlineValueSize}`.colorize(ColorStyle.dim)); + // Load indexes + await this.indexes.load(); + this.emit('ready'); + } + catch (err) { + this.debug.error(`Error initializing MSSQL database: ${err.message}`); + this.emit('error', err); + } + } + _executeRequest(request, sql, params) { + const mssql = this.mssql; + Object.keys(params ?? {}).forEach(name => { + const value = params[name]; + if (value === null) { + sql = sql.replace(new RegExp(`@${name}`, 'g'), 'null'); + delete params[name]; + return; + } + const type = (() => { + switch (typeof value) { + case 'string': return mssql.NVarChar; + case 'number': return mssql.BigInt; + case 'object': { + if (value instanceof ArrayBuffer || value instanceof Buffer) { + return mssql.VarBinary(value.byteLength); + } + else { + throw new Error(`Unknown object parameter`); + } + } + default: + throw new Error(`Unknown parameter type`); + } + })(); + request.input(name, type, value); + }); + return request.query(sql); + } + async _get(sql, params) { + const request = new this.mssql.Request(this._db); + const result = await this._executeRequest(request, sql, params); + return result.recordset; + } + async _getOne(sql, params) { + const rows = await this._get(sql, params); + return rows[0]; + } + async _exec(sql, params) { + const request = new this.mssql.Request(this._db); + const result = await this._executeRequest(request, sql, params); + return result; //.rowsAffected; + } + /** + * @param sql + * @param params + * @param callback function to call for every row until it returns false + * @returns Resolves once all rows have been processed, or callback returned false + */ + _each(sql, params = {}, callback) { + // stream + const request = new this.mssql.Request(this._db); + request.stream = true; + return new Promise((resolve, reject) => { + let totalRows = 0; + let canceled = false; + request.on('row', (row) => { + // Emitted for each row in a recordset + if (canceled) { + return; // Just in case we do get more records after cancelation + } + totalRows++; + canceled = callback(row) === false; + if (canceled) { + request.cancel(); + resolve({ rows: totalRows, canceled: true }); + } + }); + request.on('error', (err) => { + // May be emitted multiple times + if (err.code !== 'ECANCEL') { + reject(err); + } + }); + request.on('done', (result) => { + // Always emitted as the last one + resolve({ rows: totalRows, canceled: false }); + }); + this._executeRequest(request, sql, params); + }); + } + _createTransaction() { + const queue = []; + const mssql = this.mssql; + const run = async () => { + const results = []; + // create and run transaction + const transaction = new mssql.Transaction(this._db); + try { + await transaction.begin(); + const exec = (sql, params) => { + const request = new mssql.Request(transaction); + return this._executeRequest(request, sql, params); + }; + for (const statement of queue) { + const result = await exec(statement.sql, statement.params); + results.push(result); + } + await transaction.commit(); + return results; + } + catch (err) { + // Any error will have triggered automatic rollback because we have specified this + // in the connection + const ourErr = new Error(`Error in statement #${results.length} (${queue[results.length].sql}): ${err.message}`); + ourErr.inner = err; + throw ourErr; + } + }; // run + return { + add(sql, params) { + queue.push({ sql, params }); + }, + run, + }; + } + _getTypeFromStoredValue(val) { + let type; + if (typeof val === 'string') { + type = VALUE_TYPES.STRING; + } + else if (typeof val === 'number') { + type = VALUE_TYPES.NUMBER; + } + else if (typeof val === 'boolean') { + type = VALUE_TYPES.BOOLEAN; + } + else if (val instanceof Array) { + type = VALUE_TYPES.ARRAY; + } + else if (typeof val === 'object') { + if ('type' in val) { + type = val.type; + val = val.value; + if (type === VALUE_TYPES.DATETIME) { + val = new Date(val); + } + else if (type === VALUE_TYPES.REFERENCE) { + val = new PathReference(val); + } + } + else { + type = VALUE_TYPES.OBJECT; + } + } + else { + throw new Error(`Unknown value type`); + } + return { type, value: val }; + } + _createJSON(obj) { + Object.keys(obj).forEach(key => { + let child = obj[key]; + if (child instanceof Date) { + child = { type: VALUE_TYPES.DATETIME, value: child.getTime() }; + } + else if (child instanceof PathReference) { + child = { type: VALUE_TYPES.REFERENCE, value: child.path }; + } + else if (child instanceof ArrayBuffer) { + child = { type: VALUE_TYPES.BINARY, value: ascii85.encode(child) }; + } + else if (typeof child === 'object') { + child = this._createJSON(child); + } + obj[key] = child; + }); + return JSON.stringify(obj); + } + _deserializeJSON(type, json) { + let value = JSON.parse(json); + // Check if there any typed values stored in object's children that need deserializing + Object.keys(value).forEach(key => { + const val = value[key]; + if (typeof val === 'object' && 'type' in val) { + // Typed value stored in parent record + if (val.type === VALUE_TYPES.BINARY) { + // binary stored in a parent record as a string + value[key] = ascii85.decode(val.value); + } + else if (val.type === VALUE_TYPES.DATETIME) { + // Date value stored as number + value[key] = new Date(val.value); + } + else if (val.type === VALUE_TYPES.REFERENCE) { + // Path reference stored as string + value[key] = new PathReference(val.value); + } + else { + throw new Error(`Unhandled child value type ${val.type}`); + } + } + }); + if (type === VALUE_TYPES.ARRAY) { + // Convert object { 0: (...), 1: (...) } to array + const arr = []; + Object.keys(value).forEach(index => { + arr[parseInt(index)] = value[index]; + }); + value = arr; + } + return value; + } + /** + * Creates or updates a node in its own record. DOES NOT CHECK if path exists in parent node, or if parent paths exist! Calling code needs to do this + */ + async _writeNode(path, value, options = { + merge: false, + revision: null, + transaction: null, + }) { + if (this.valueFitsInline(value)) { + throw new Error(`invalid value to store in its own node`); + } + // Setup transaction + const transaction = options.transaction || this._createTransaction(); + // Get info about current node at path + const currentRow = await this._getOne(`SELECT path, type, text_value, binary_value, json_value, revision, revision_nr FROM nodes WHERE path = @path`, { path }); // OR path LIKE '${path}/*' OR path LIKE '${path}[%' + const newRevision = (options && options.revision) || ID.generate(); + const mainNode = { + type: VALUE_TYPES.OBJECT, + value: {}, + storageType: 'json', + }; + const childNodeValues = {}; + if (value instanceof Array) { + mainNode.type = VALUE_TYPES.ARRAY; + // Convert array to object with numeric properties + const obj = {}; + for (let i = 0; i < value.length; i++) { + obj[i] = value[i]; + } + value = obj; + } + else if (value instanceof PathReference) { + mainNode.type = VALUE_TYPES.REFERENCE; + mainNode.value = value.path; + mainNode.storageType = 'text'; + } + else if (value instanceof ArrayBuffer) { + mainNode.type = VALUE_TYPES.BINARY; + mainNode.value = Buffer.from(value); + mainNode.storageType = 'binary'; + } + else if (typeof value === 'string') { + mainNode.type = VALUE_TYPES.STRING; + mainNode.value = value; + mainNode.storageType = 'text'; + } + const currentIsObjectOrArray = currentRow ? [VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(currentRow.type) : false; + const newIsObjectOrArray = [VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(mainNode.type); + const children = { + current: [], + new: [], + }; + let currentObject = null; + if (currentIsObjectOrArray) { + currentObject = this._deserializeJSON(currentRow.type, currentRow.json_value); + children.current = Object.keys(currentObject); + if (newIsObjectOrArray) { + mainNode.value = currentObject; + } + } + if (newIsObjectOrArray) { + // Object or array. Determine which properties can be stored in the main node, + // and which should be stored in their own nodes + // children.new = options.merge ? children.current : []; + Object.keys(value).forEach(key => { + const val = value[key]; + delete mainNode.value[key]; // key is being overwritten, moved from inline to dedicated, or deleted. + if (val === null) { // || typeof val === 'undefined' + // This key is being removed + return; + } + // Where to store this value? + if (this.valueFitsInline(val)) { + // Store in main node + mainNode.value[key] = val; + } + else { + // Store in child node + childNodeValues[key] = val; + } + }); + } + // Insert or update node + if (currentRow) { + // update + this.debug.log(`Node "/${path}" is being ${options.merge ? 'updated' : 'overwritten'}`.colorize(ColorStyle.cyan)); + const updateMainNode = () => { + const sql = `UPDATE nodes SET type = @type, text_value = @text_value, binary_value = @binary_value, json_value = @json_value, modified = @modified, revision_nr = revision_nr + 1, revision = @revision + WHERE path = @path`; + const params = { + path: path, + type: mainNode.type, + text_value: mainNode.storageType === 'text' ? mainNode.value : null, + binary_value: mainNode.storageType === 'binary' ? mainNode.value : null, + json_value: mainNode.storageType === 'json' ? this._createJSON(mainNode.value) : null, + modified: Date.now(), + // revision_nr: existingDetails.revision_nr + 1, + revision: newRevision, + }; + // if (transaction) { + transaction.add(sql, params); + // } + // else { + // return this._exec(sql, params); + // } + }; + // If existing is an array or object, we have to find out which children are affected + if (currentIsObjectOrArray || newIsObjectOrArray) { + // Get current child nodes in dedicated child records + let childRows = []; + if (currentIsObjectOrArray) { + const where = path === '' + ? `path <> '' AND path NOT LIKE '%/%'` + : `(path LIKE '${path}/%' OR path LIKE '${path}[%') AND path NOT LIKE '${path}/%/%' AND path NOT LIKE '${path}[%]/%' AND path NOT LIKE '${path}[%][%'`; + // TODO: add parent_path to nodes table to make query easier and faster? + childRows = await this._get(`SELECT path FROM nodes WHERE ${where}`); + } + const keys = childRows.map(row => PathInfo.get(row.path).key); + children.current = children.current.concat(keys); + if (newIsObjectOrArray) { + if (options && options.merge) { + children.new = children.current.slice(); + } + Object.keys(value).forEach(key => { + if (!children.new.includes(key)) { + children.new.push(key); + } + }); + } + // TODO: convert changes to details about changed values for change tracking + const changes = { + insert: children.new.filter(key => !children.current.includes(key)), + update: children.new.filter(key => children.current.includes(key)), + delete: options && options.merge ? Object.keys(value).filter(key => value[key] === null) : children.current.filter(key => !children.new.includes(key)), + }; + // (over)write all child nodes that must be stored in their own record + const childUpdatePromises = Object.keys(childNodeValues).map(key => { + const childPath = PathInfo.getChildPath(path, key); + const childValue = childNodeValues[key]; + return this._writeNode(childPath, childValue, { revision: newRevision, merge: false, transaction }); // return this._writeNode(childPath, childValue, { revision: newRevision, merge: false, transaction }); + }); + // Delete all child nodes that were stored in their own record, but are being removed + // Also delete nodes that are being moved from a dedicated record to inline + const movingNodes = keys.filter(key => key in mainNode.value); // moving from dedicated to inline value + const deleteDedicatedKeys = changes.delete.concat(movingNodes); + // const deletePromises = deleteDedicatedKeys.map(key => { + deleteDedicatedKeys.forEach(key => { + const childPath = PathInfo.getChildPath(path, key); + this._deleteNode(childPath, { transaction }); // return this._deleteNode(childPath, { transaction }); + }); + updateMainNode(); + await Promise.all(childUpdatePromises); + } + else { + // The current and/or new node is not an object/array + updateMainNode(); + } + } + else { + // Current node does not exist, create it and any child nodes + // write all child nodes that must be stored in their own record + this.debug.log(`Node "/${path}" is being created`.colorize(ColorStyle.cyan)); + const childCreatePromises = Object.keys(childNodeValues).map(key => { + const childPath = PathInfo.getChildPath(path, key); + const childValue = childNodeValues[key]; + return this._writeNode(childPath, childValue, { revision: newRevision, merge: false, transaction }); // return this._writeNode(childPath, childValue, { revision: newRevision, merge: false }); + }); + await Promise.all(childCreatePromises); + // Create current node + const sql = `INSERT INTO nodes (path, type, text_value, binary_value, json_value, created, modified, revision_nr, revision) + VALUES (@path, @type, @text_value, @binary_value, @json_value, @created, @modified, @revision_nr, @revision)`; + const params = { + path: path, + type: mainNode.type, + text_value: mainNode.storageType === 'text' ? mainNode.value : null, + binary_value: mainNode.storageType === 'binary' ? mainNode.value : null, + json_value: mainNode.storageType === 'json' ? this._createJSON(mainNode.value) : null, + created: Date.now(), + modified: Date.now(), + revision_nr: 0, + revision: newRevision, + }; + transaction.add(sql, params); // return this._exec(sql, params); + } + if (!options.transaction) { + // Our transaction, we can run it now! + try { + await transaction.run(); + } + catch (err) { + console.error(err); + throw err; + } + } + } + /** + * Deletes (dedicated) node and all subnodes without checking for existence. Use with care - all removed nodes will lose their revision stats! DOES NOT REMOVE INLINE CHILD NODES! + */ + _deleteNode(path, options = { transaction: null }) { + const where = path === '' ? '' : `WHERE path = '${path}' OR path LIKE '${path}/%' OR path LIKE '${path}[%'`; + const sql = `DELETE FROM nodes ${where}`; + if (options && options.transaction) { + options.transaction.add(sql); + } + else { + return this._exec(sql); + } + } + /** + * Enumerates all children of a given Node for reflection purposes + */ + getChildren(path, options = {}) { + let callback; + const generator = { + /** + * @param valueCallback callback function to run for each child. Return false to stop iterating + * @returns returns a promise that resolves with a boolean indicating if all children have been enumerated, or was canceled by the valueCallback function + */ + next(valueCallback) { + callback = valueCallback; + return start(); + }, + }; + const start = async () => { + let canceled = false; + const tid = (options && options.tid) || ID.generate(); + const lock = await this.nodeLocker.lock(path, tid.toString(), false, 'getChildren'); + try { + const row = await this._getOne(`SELECT type, json_value, revision, revision_nr, created, modified FROM nodes WHERE path = @path`, { path: path }); + if (!row) { + throw new NodeNotFoundError(`Node "/${path}" does not exist`); + } + if (![VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(row.type)) { + // No children + return false; //resolve(false); + } + const isArray = row.type === VALUE_TYPES.ARRAY; + const value = JSON.parse(row.json_value); + let keys = Object.keys(value); + if (options.keyFilter) { + keys = keys.filter(key => options.keyFilter.includes(key)); + } + const pathInfo = PathInfo.get(path); + keys.length > 0 && keys.every(key => { + const child = this._getTypeFromStoredValue(value[key]); + const info = new MSSQLNodeInfo({ + path: pathInfo.childPath(key), + ...(!isArray && { key }), + ...(isArray && { index: parseInt(key) }), + type: child.type, + address: null, + exists: true, + value: child.value, + revision: row.revision, + revision_nr: row.revision_nr, + created: parseInt(row.created), + modified: parseInt(row.modified), + }); + canceled = callback(info) === false; + return !canceled; // stop .every loop if canceled + }); + if (canceled) { + return; //resolve(true); + } + // Go on... query other children + const where = path === '' + ? `path <> '' AND instr(path,'/')=0 AND instr(path,'[')=0` // AND path NOT LIKE '%/%' AND path NOT LIKE '%[%' + : `path LIKE '${path}${isArray ? '[' : '/'}%' AND path NOT LIKE '${path}${isArray ? '[' : '/'}%/%' AND path NOT LIKE '${path}${isArray ? '[' : '/'}%[%'`; + const q = `SELECT path, type, revision, revision_nr, created, modified FROM nodes WHERE ${where}`; + await this._each(q, null, row => { + const key = PathInfo.get(row.path).key; + if (options.keyFilter && !options.keyFilter.includes(key)) { + return; + } + const info = new MSSQLNodeInfo({ + path: row.path, + type: row.type, + ...(!isArray && { key: key }), + ...(isArray && { index: key }), + address: new MSSQLNodeAddress(row.path), + exists: true, + value: null, + revision: row.revision, + revision_nr: row.revision_nr, + created: parseInt(row.created), + modified: parseInt(row.modified), // parseInt because bigint is returned as string + }); + canceled = callback(info) === false; + return !canceled; // stop ._each loop if canceled + }); + } + finally { + lock.release(); + } + return canceled; + }; // start() + return generator; + } + async getNode(path, options = { child_objects: true }) { + // path = path.replace(/'/g, ''); // prevent sql injection, remove single quotes + const tid = (options && options.tid) || ID.generate(); + let lock = await this.nodeLocker.lock(path, tid.toString(), false, 'getNode'); + try { + // Get path, path/* and path[* + let where = ''; + if (path === '') { + if (options && options.child_objects === false) { + where = `WHERE path='' OR type NOT IN (${VALUE_TYPES.OBJECT},${VALUE_TYPES.ARRAY})`; + } + } + else if (options && options.child_objects === false) { + where = `WHERE path='${path}' OR ((path LIKE '${path}/%' OR path LIKE '${path}[%') AND type NOT IN (${VALUE_TYPES.OBJECT},${VALUE_TYPES.ARRAY}))`; + } + else { + where = `WHERE path = '${path}' OR path LIKE '${path}/%' OR path LIKE '${path}[%'`; + } + let rows; + let filtered = false; + if (options && (options.include || options.exclude || options.child_objects === false)) { + // A data filter is requested. + // Building a where statement for this is impossible because we'd need regular expressions to filter paths (because LIKE 'users/%/posts' will also falsely match 'users/ewout/archive/posts') + // Get all paths unfiltered, then filter them manually + filtered = true; + rows = await this._get(`SELECT path, type FROM nodes ${where}`); + const paths = [path]; + const includeCheck = options.include + ? new RegExp('^' + options.include.map(p => `(?:${p.toString().replace(/\*/g, '[^/\\[]+')})`).join('|') + '(?:$|[/\\[])') + : null; + const excludeCheck = options.exclude + ? new RegExp('^' + options.exclude.map(p => `(?:${p.toString().replace(/\*/g, '[^/\\[]+')})`).join('|') + '(?:$|[/\\[])') + : null; + for (let i = 0; i < rows.length; i++) { + const row = rows[i]; + if (row.path === path) { + continue; // No need to check the main path... + } + let checkPath = row.path.slice(path.length); + if (checkPath[0] === '/') { + checkPath = checkPath.slice(1); + } + const match = (includeCheck ? includeCheck.test(checkPath) : true) + && (excludeCheck ? !excludeCheck.test(checkPath) : true) + && (options.child_objects === false ? row.type !== VALUE_TYPES.OBJECT && !/[/[]/.test(checkPath) : true); + if (match) { + paths.push(row.path); + } + } + // Now query with all paths that met the requirement + rows = await this._get(`SELECT path, type, text_value, binary_value, json_value, revision FROM nodes WHERE path IN (${paths.map(p => `'${p}'`).join(',')})`); + } + else { + // No filtering + rows = await this._get(`SELECT path, type, text_value, binary_value, json_value, revision FROM nodes ${where}`); + } + if (rows.length === 0) { + // Lookup parent node + lock = await lock.moveToParent(); + if (path === '') { + return null; + } // path is root. There is no parent. + const pathInfo = PathInfo.get(path); + const parentRow = await this._getOne(`SELECT type, json_value, revision FROM nodes WHERE path = '${pathInfo.parentPath}'`); + const result = { + revision: parentRow ? parentRow.revision : null, + value: null, + }; + if (!parentRow) { + return result; + } // parent node doesn't exist + if (![VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(parentRow.type)) { + return result; + } // parent node is not an object + // WARNING: parentRow.json_value might be big!! + // TODO: create JSON streamer if json_value length becomes larger than 10KB? + const val = this._deserializeJSON(parentRow.type, parentRow.json_value); + if (!(pathInfo.key in val)) { + return result; + } // parent does not have a child with requested key + result.value = val[pathInfo.key]; + return result; + } + this.debug.log(`Read node "/${path}" and ${filtered ? '(filtered) ' : ''}children from ${rows.length} records`.colorize(ColorStyle.magenta)); + const targetPathKeys = PathInfo.getPathKeys(path); + const targetRow = rows.find(row => row.path === path); + const result = { + revision: targetRow ? targetRow.revision : null, + value: null, + }; + if (targetRow.type === VALUE_TYPES.OBJECT || targetRow.type === VALUE_TYPES.ARRAY) { + // target node is an object or array + const value = this._deserializeJSON(targetRow.type, targetRow.json_value); + // merge with other found (child) records + for (let i = 0; i < rows.length; i++) { + const otherRow = rows[i]; + if (otherRow === targetRow) { + continue; + } + const pathKeys = PathInfo.getPathKeys(otherRow.path); + const trailKeys = pathKeys.slice(targetPathKeys.length); + let parent = value; + for (let j = 0; j < trailKeys.length; j++) { + console.assert(typeof parent === 'object', 'parent must be an object/array to have children!!'); + const key = trailKeys[j]; + const isLast = j === trailKeys.length - 1; + const nodeType = isLast + ? otherRow.type + : typeof trailKeys[j + 1] === 'number' + ? VALUE_TYPES.ARRAY + : VALUE_TYPES.OBJECT; + let nodeValue; + if (!isLast) { + nodeValue = nodeType === VALUE_TYPES.OBJECT ? {} : []; + } + else if (nodeType === VALUE_TYPES.OBJECT || nodeType === VALUE_TYPES.ARRAY) { + nodeValue = this._deserializeJSON(otherRow.type, otherRow.json_value); + } + else if (nodeType === VALUE_TYPES.REFERENCE) { + nodeValue = new PathReference(otherRow.text_value); + } + else if (nodeType === VALUE_TYPES.BINARY) { + nodeValue = otherRow.binary_value; + } + else { + nodeValue = otherRow.text_value; + } + if (key in parent) { + // Merge with parent + console.assert(typeof parent[key] === typeof nodeValue && [VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(nodeType), 'Merging child values can only be done if existing and current values are both an array or object'); + Object.keys(nodeValue).forEach(childKey => { + console.assert(!(childKey in parent[key]), 'child key is in parent value already?! HOW?!'); + parent[key][childKey] = nodeValue[childKey]; + }); + } + else { + parent[key] = nodeValue; + } + parent = parent[key]; + } + } + result.value = value; + } + else if (rows.length > 1) { + throw new Error(`more than 1 record found for non-object value!`); + } + else if (targetRow.type === VALUE_TYPES.REFERENCE) { + result.value = new PathReference(targetRow.text_value); + } + else if (targetRow.type === VALUE_TYPES.BINARY) { + // BLOBs are returned as Uint8Array by MSSQL3 + const val = targetRow.binary_value; + result.value = val.buffer.slice(val.byteOffset, val.byteOffset + val.byteLength); + } + else { + result.value = targetRow.text_value; + } + // Post process filters to remove any data that got though because they were + // not stored in dedicated records. This will happen with smaller values because + // they are stored inline in their parent node. + // eg: + // { number: 1, small_string: 'small string', bool: true, obj: {}, arr: [] } + // All properties of this object are stored inline, + // if exclude: ['obj'], or child_objects: false was passed, these will still + // have to be removed from the value + if (options.child_objects === false) { + Object.keys(result.value).forEach(key => { + if (typeof result.value[key] === 'object' && result.value[key].constructor === Object) { + // This can only happen if the object was empty + console.assert(Object.keys(result.value[key]).length === 0); + delete result.value[key]; + } + }); + } + if (options.exclude) { + const process = (obj, keys) => { + if (typeof obj !== 'object') { + return; + } + const key = keys[0]; + if (key === '*') { + Object.keys(obj).forEach(k => { + process(obj[k], keys.slice(1)); + }); + } + else if (keys.length > 1) { + key in obj && process(obj[key], keys.slice(1)); + } + else { + delete obj[key]; + } + }; + options.exclude.forEach(path => { + const checkKeys = typeof path === 'number' ? [path] : PathInfo.getPathKeys(path); + process(result.value, checkKeys); + }); + } + return result; + } + finally { + lock.release(); + } + } + async getNodeInfo(path, options = {}) { + const lookupNode = async (path) => { + const rows = await this._get(`SELECT type, text_value, binary_value, json_value, created, modified, revision, revision_nr FROM nodes WHERE path=@path`, { path }); + if (rows.length === 0) { + return null; + } + const row = rows[0]; + let value = null; + if (row.type === VALUE_TYPES.OBJECT || row.type === VALUE_TYPES.ARRAY) { + value = JSON.parse(row.json_value); + } + else if (row.type === VALUE_TYPES.BINARY) { + // BLOBs are returned as Uint8Array by MSSQL + const val = row.binary_value; + value = val.buffer.slice(val.byteOffset, val.byteOffset + val.byteLength); + } + else { + value = row.text_value; + } + return { + path, + type: row.type, + value, + created: row.created, + modified: row.modified, + revision: row.revision, + revision_nr: row.revision_nr, + }; + }; + const pathInfo = PathInfo.get(path); + const tid = (options && options.tid) || ID.generate(); + let lock = await this.nodeLocker.lock(path, tid.toString(), false, 'getNodeInfo'); + try { + const node = await lookupNode(path); + const info = new MSSQLNodeInfo({ + path, + key: typeof pathInfo.key === 'string' ? pathInfo.key : null, + index: typeof pathInfo.key === 'number' ? pathInfo.key : null, + type: node ? node.type : 0, + exists: node !== null, + address: node ? new MSSQLNodeAddress(path) : null, + created: node ? parseInt(node.created) : null, + modified: node ? parseInt(node.modified) : null, + revision: node ? node.revision : null, + revision_nr: node ? node.revision_nr : null, + }); + // info.created = node ? new Date(node.created) : null; + // info.modified = node ? new Date(node.modified) : null; + // info.revision = node ? node.revision : null; + // info.revision_nr = node ? node.revision_nr : null; + if (node || path === '') { + return info; + } + // Try parent node + lock = await lock.moveToParent(); + const parent = await lookupNode(pathInfo.parentPath); + if (parent && [VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(parent.type) && pathInfo.key in parent.value) { + // Stored in parent node + info.exists = true; + info.value = parent.value[pathInfo.key]; + info.address = null; // pathInfo.parentPath; //new SqlNodeAddress(pathInfo.parentPath); + switch (typeof info.value) { + case 'string': { + info.type = VALUE_TYPES.STRING; + break; + } + case 'number': { + info.type = VALUE_TYPES.NUMBER; + break; + } + case 'boolean': { + info.type = VALUE_TYPES.BOOLEAN; + break; + } + case 'object': { + // Only allowed if type is REFERENCE, DATETIME, empty ARRAY, empty OBJECT + info.type = info.value.type; + info.value = info.value.value; + if (info.type === VALUE_TYPES.DATETIME) { + info.value = new Date(info.value); // Convert number to Date + } + break; + } + } + info.created = parseInt(parent.created); + info.modified = parseInt(parent.modified); + info.revision = parent.revision; + info.revision_nr = parent.revision_nr; + } + else { + // Parent doesn't exist, so the node we're looking for cannot exist either + info.address = null; + } + return info; + } + finally { + lock.release(); + } + } + async setNode(path, value, options = { + suppress_events: false, + context: null, + }) { + if (this.settings.readOnly) { + throw new Error(`Database is opened in read-only mode`); + } + const pathInfo = PathInfo.get(path); + const tid = (options && options.tid) || ID.generate(); + let lock = await this.nodeLocker.lock(path, tid.toString(), true, 'setNode'); + try { + if (path === '') { + if (value === null || typeof value !== 'object' || value instanceof Array || value instanceof ArrayBuffer || ('buffer' in value && value.buffer instanceof ArrayBuffer)) { + throw new Error(`Invalid value for root node: ${value}`); + } + await this._writeNodeWithTracking('', value, { merge: false, tid, suppress_events: options.suppress_events, context: options.context }); + } + else if (options && typeof options.assert_revision !== 'undefined') { + const info = await this.getNodeInfo(path, { tid: lock.tid }); + if (info.revision !== options.assert_revision) { + throw new NodeRevisionError(`revision '${info.revision}' does not match requested revision '${options.assert_revision}'`); + } + if (info.address && info.address.path === path && !this.valueFitsInline(value)) { + // Overwrite node + await this._writeNodeWithTracking(path, value, { merge: false, tid, suppress_events: options.suppress_events, context: options.context }); + } + else { + // Update parent node + lock = await lock.moveToParent(); + await this._writeNodeWithTracking(pathInfo.parentPath, { [pathInfo.key]: value }, { merge: true, tid, suppress_events: options.suppress_events, context: options.context }); + } + } + else { + // Delegate operation to update on parent node + lock = await lock.moveToParent(); + return this.updateNode(pathInfo.parentPath, { [pathInfo.key]: value }, { tid, suppress_events: options.suppress_events, context: options.context }); + } + } + finally { + lock.release(); + } + } + async updateNode(path, updates, options = { + suppress_events: false, + context: null, + }) { + if (this.settings.readOnly) { + throw new Error(`Database is opened in read-only mode`); + } + if (typeof updates !== 'object') { // || Object.keys(updates).length === 0 + throw new Error(`invalid updates argument`); //. Must be a non-empty object or array + } + const tid = (options && options.tid) || ID.generate(); + let lock = await this.nodeLocker.lock(path, tid.toString(), true, 'updateNode'); + try { + // Get info about current node + const nodeInfo = await this.getNodeInfo(path, { tid: lock.tid }); + const pathInfo = PathInfo.get(path); + if (nodeInfo.exists && nodeInfo.address && nodeInfo.address.path === path) { + // Node exists and is stored in its own record. + // Update it + await this._writeNodeWithTracking(path, updates, { merge: true, tid, suppress_events: options.suppress_events, context: options.context }); + } + else if (nodeInfo.exists) { + // Node exists, but is stored in its parent node. + const pathInfo = PathInfo.get(path); + lock = await lock.moveToParent(); + await this._writeNodeWithTracking(pathInfo.parentPath, { [pathInfo.key]: updates }, { merge: true, tid, suppress_events: options.suppress_events, context: options.context }); + } + else { + // The node does not exist, it's parent doesn't have it either. Update the parent instead + lock = await lock.moveToParent(); + await this.updateNode(pathInfo.parentPath, { [pathInfo.key]: updates }, { tid, suppress_events: options.suppress_events, context: options.context }); + } + } + finally { + lock.release(); + } + } +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/esm/storage/mssql/index.js.map b/dist/esm/storage/mssql/index.js.map new file mode 100644 index 0000000..813ed8e --- /dev/null +++ b/dist/esm/storage/mssql/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/storage/mssql/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/storage/sqlite/index.js b/dist/esm/storage/sqlite/index.js new file mode 100644 index 0000000..f82d144 --- /dev/null +++ b/dist/esm/storage/sqlite/index.js @@ -0,0 +1,1114 @@ +import { ID, PathReference, PathInfo, ascii85, ColorStyle } from 'acebase-core'; +import { Storage, StorageSettings } from '../index.js'; +import { NodeInfo } from '../../node-info.js'; +import { VALUE_TYPES } from '../../node-value-types.js'; +import { NodeNotFoundError, NodeRevisionError } from '../../node-errors.js'; +import { pfs } from '../../promise-fs/index.js'; +import { ThreadSafe } from '../../thread-safe.js'; +import { NodeAddress } from '../../node-address.js'; +export class SQLiteNodeAddress extends NodeAddress { + constructor(containerPath) { + super(containerPath); + } +} +export class SQLiteNodeInfo extends NodeInfo { + constructor(info) { + super(info); + // this.address = null; // ? + this.revision = info.revision; + this.revision_nr = info.revision_nr; + this.created = info.created; + this.modified = info.modified; + } +} +export class SQLiteStorageSettings extends StorageSettings { + constructor(options) { + super(options); + options = options || {}; + } +} +export class SQLiteStorage extends Storage { + /** + * @param name database name + * @param settings + */ + constructor(name, settings, env) { + settings = new SQLiteStorageSettings(settings); + super(name, settings, env); + // Lazy load sqlite3 so it is only `require`d once SQLiteStorage is actually requested + try { + // eslint-disable-next-line @typescript-eslint/no-var-requires + this.sqlite = require('sqlite3').verbose(); + } + catch (err) { + throw new Error(`sqlite3 not found. To use SQLite as storage, add sqlite3 to your project dependencies: npm i sqlite3`); + } + this.init(); + } + _get(sql, params) { + const stack = new Error('').stack; + return new Promise((resolve, reject) => { + this._db.all(sql, params || {}, (err, rows) => { + if (err) { + err.stack = stack; + err.statement = sql; + err.params = params; + return reject(err); + } + resolve(rows); + }); + }); + } + _getOne(sql, params) { + const stack = new Error('').stack; + return new Promise((resolve, reject) => { + this._db.get(sql, params || {}, (err, row) => { + if (err) { + err.stack = stack; + err.statement = sql; + err.params = params; + return reject(err); + } + resolve(row); + }); + }); + } + _exec(sql, params) { + const stack = new Error('').stack; + return new Promise((resolve, reject) => { + this._db.run(sql, params || {}, (err) => { + if (err) { + err.stack = stack; + err.statement = sql; + err.params = params; + return reject(err); + } + resolve(this); + }); + }); + } + /** + * @param sql + * @param params + * @param callback function to call for every row until it returns false + * @returns Resolves once all rows have been processed, or callback returned false + */ + _each(sql, params = {}, callback) { + return new Promise((resolve, reject) => { + const take = 100; + let skip = 0; + let totalRows = 0; + const nextBatch = async () => { + try { + const batchSql = `${sql} LIMIT ${take} OFFSET ${skip}`; + const rows = await this._get(batchSql, params); + let cancel = false; + let i = 0; + while (i < rows.length && !cancel) { + const proceed = callback(rows[i]); + cancel = proceed === false; + i++; + } + if (cancel || rows.length < take) { + // Done + resolve({ rows: totalRows + i, canceled: cancel }); + } + else { + totalRows += rows.length; + skip += take; + nextBatch(); + } + } + catch (err) { + reject(err); + } + }; + nextBatch(); + }); + } + _createTransaction() { + const queue = []; + const sqlite = this.sqlite; + const run = async () => { + // Use dedicated connection for transactions, so other statements being executed won't end up in our transaction + if (!this._transactionConnection) { + this._transactionConnection = new sqlite.Database(`${this.settings.path}/${this.name}.acebase/data.sqlite`, sqlite.OPEN_READWRITE); + } + // Create and run batch + const results = []; + const lock = await ThreadSafe.lock('sqlite_transaction', { critical: false, timeout: 30000 }) // only let 1 transaction be performed at a time, to prevent SQLITE_BUSY errors + .catch(err => { + throw new Error(`could not get lock to perform transaction on sqlite database: ${err.message}`); + }); + const db = this._transactionConnection; + const exec = (sql, params) => { + return new Promise((resolve, reject) => { + const callback = function (err) { + if (err) { + return reject(err); + } + resolve(this); + }; + const args = [sql, callback]; + params && args.splice(1, 0, params); + db.run(...args); + }); + }; + try { + await exec('BEGIN IMMEDIATE'); + for (const statement of queue) { + const result = await exec(statement.sql, statement.params); + results.push(result); + } + await exec('COMMIT'); + } + catch (err) { + if (results.length > 0) { + // Only issue rollback if 1 or more statements succeeded + await exec('ROLLBACK'); + } + if (err.contains('SQLITE_BUSY')) { + // Other process is currently writing, retry + return run(); + } + else { + throw new Error(`${err} in statement #${results.length} (${queue[results.length].sql})`); + } + } + finally { + lock.release(); + } + // Return all results + return results; + }; + return { + add(sql, params) { + queue.push({ sql, params }); + }, + run, + }; + } + async init() { + const sqlite = this.sqlite; + try { + const path = `${this.settings.path}/${this.name}.acebase`; + try { + await pfs.mkdir(path); + } + catch (err) { + if (err.code !== 'EEXIST') { + console.error(`Cannot create dir "${path}": ${err}`); + throw err; + } + } + this._db = new sqlite.Database(`${path}/data.sqlite`, sqlite.OPEN_CREATE | sqlite.OPEN_READWRITE); + this.rootRecord = null; //new NodeInfo({ path: '', exists: false, address: null }); + // create tables that don't exist yet + const tables = { + settings: { + create: 'CREATE TABLE settings (name TEXT PRIMARY KEY, value TEXT) WITHOUT ROWID', + rows: [{ name: 'db_schema_version', value: '1' }], + }, + nodes: { + create: `CREATE TABLE nodes ( + path TEXT PRIMARY KEY, + type INTEGER NOT NULL, -- node type (1=object, 2=array, 5=string, 8=binary, 9=reference) + text_value TEXT, -- when type is string or reference (> max inline value length?) + binary_value BLOB, -- when type is binary + json_value TEXT, -- when type is object, only simple/small value children are here (no objects, arrays, large strings) + + created INTEGER NOT NULL, -- creation timestamp + modified INTEGER NOT NULL, -- modification timestamp + revision_nr INTEGER NOT NULL, -- nr of times the node's value was updated + revision TEXT NOT NULL -- revision id that is shared with all nested nodes that were updated at the same time, should be time sortable so could be considered as a "transaction timestamp" + ) WITHOUT ROWID`, + rows: [{ + path: '', + type: VALUE_TYPES.OBJECT, + json_value: '{}', + created: Date.now(), + modified: Date.now(), + revision_nr: 0, + revision: ID.generate(), + }], + }, + // history: { + // create: `CREATE TABLE history ( + // path TEXT NOT NULL, + // action TEXT NOT NULL, -- insert, set, update, delete + // time INTEGER NOT NULL, + // revision_nr INTEGER NOT NULL, -- affected revision + // revision TEXT NOT NULL + // )` + // }, + // indexes: { + // create: `CREATE TABLE indexes ( -- TODO + // name TEXT NOT NULL PRIMARY KEY, + // path TEXT NOT NULL, + // type TEXT NOT NULL, + // key TEXT NOT NULL, + // included_keys TEXT, + // table_name TEXT NOT NULL, + // created INTEGER NOT NULL, + // updated INTEGER NOT NULL, + // stats_entries INTEGER NOT NULL, + // stats_values INTEGER NOT NULL + // ) WITHOUT ROWID`, + // action() { + // // load created indexes + // } + // }, + logs: { + create: `CREATE TABLE logs ( + action TEXT NOT NULL, + success TINYINT NOT NULL, + error TEXT, date INTEGER, + details TEXT + )`, + rows: [{ action: 'db_created', success: 1, date: Date.now() }], + }, + }; + const rows = await this._get(`SELECT name FROM sqlite_master WHERE type='table'`); + rows.forEach((row) => { + delete tables[row.name]; + }); + // Create tables that didn't exist + const promises = Object.keys(tables).map(async (name) => { + // Create table + const sql = tables[name].create; + await this._exec(sql); + // Insert initialization data + if (tables[name].rows) { + const rows = tables[name].rows; + const promises = rows.map(async (row) => { + const keys = Object.keys(row); + // let values = keys.map(key => row[key]).map(val => typeof val === 'number' ? val : `'${val.toString()}'`); + // let sql = `INSERT INTO ${name} (${keys.join(',')}) VALUES (${values.join(',')})`; + const sql = `INSERT INTO ${name} (${keys.join(',')}) VALUES (${keys.map(key => '$' + key).join(',')})`; + const params = keys.reduce((obj, key) => { obj['$' + key] = row[key]; return obj; }, {}); + await this._exec(sql, params); + }); + await Promise.all(promises); + } + // Run action callback + await tables[name].action?.(); + }); + await Promise.all(promises); + // Get root record info + this.rootRecord = await this.getNodeInfo(''); + this.debug.log(`Database "${this.name}" details:`.colorize(ColorStyle.dim)); + this.debug.log(`- Type: SQLite`.colorize(ColorStyle.dim)); + this.debug.log(`- Max inline value size: ${this.settings.maxInlineValueSize}`.colorize(ColorStyle.dim)); + // Load indexes + await this.indexes.load(); + this.emit('ready'); + } + catch (err) { + this.emit('error', err); + } + } + _getTypeFromStoredValue(val) { + let type; + if (typeof val === 'string') { + type = VALUE_TYPES.STRING; + } + else if (typeof val === 'number') { + type = VALUE_TYPES.NUMBER; + } + else if (typeof val === 'boolean') { + type = VALUE_TYPES.BOOLEAN; + } + else if (val instanceof Array) { + type = VALUE_TYPES.ARRAY; + } + else if (typeof val === 'object') { + if ('type' in val) { + type = val.type; + val = val.value; + if (type === VALUE_TYPES.DATETIME) { + val = new Date(val); + } + else if (type === VALUE_TYPES.REFERENCE) { + val = new PathReference(val); + } + } + else { + type = VALUE_TYPES.OBJECT; + } + } + else { + throw new Error(`Unknown value type`); + } + return { type, value: val }; + } + _createJSON(obj) { + Object.keys(obj).forEach(key => { + let child = obj[key]; + if (child instanceof Date) { + child = { type: VALUE_TYPES.DATETIME, value: child.getTime() }; + } + else if (child instanceof PathReference) { + child = { type: VALUE_TYPES.REFERENCE, value: child.path }; + } + else if (child instanceof ArrayBuffer) { + child = { type: VALUE_TYPES.BINARY, value: ascii85.encode(child) }; + } + else if (typeof child === 'object') { + child = this._createJSON(child); + } + obj[key] = child; + }); + return JSON.stringify(obj); + } + _deserializeJSON(type, json) { + let value = JSON.parse(json); + // Check if there any typed values stored in object's children that need deserializing + Object.keys(value).forEach(key => { + const val = value[key]; + if (typeof val === 'object' && 'type' in val) { + // Typed value stored in parent record + if (val.type === VALUE_TYPES.BINARY) { + // binary stored in a parent record as a string + value[key] = ascii85.decode(val.value); + } + else if (val.type === VALUE_TYPES.DATETIME) { + // Date value stored as number + value[key] = new Date(val.value); + } + else if (val.type === VALUE_TYPES.REFERENCE) { + // Path reference stored as string + value[key] = new PathReference(val.value); + } + else { + throw new Error(`Unhandled child value type ${val.type}`); + } + } + }); + if (type === VALUE_TYPES.ARRAY) { + // Convert object { 0: (...), 1: (...) } to array + const arr = []; + Object.keys(value).forEach(index => { + arr[parseInt(index)] = value[index]; + }); + value = arr; + } + return value; + } + /** + * Creates or updates a node in its own record. DOES NOT CHECK if path exists in parent node, or if parent paths exist! Calling code needs to do this + */ + async _writeNode(path, value, options = { + merge: false, + revision: null, + transaction: null, + }) { + if (this.valueFitsInline(value)) { + throw new Error(`invalid value to store in its own node`); + } + // Setup transaction + const transaction = options.transaction || this._createTransaction(); + // Get info about current node at path + const currentRow = await this._getOne(`SELECT path, type, text_value, binary_value, json_value, revision, revision_nr FROM nodes WHERE path = $path`, { $path: path }); // OR path LIKE '${path}/*' OR path LIKE '${path}[%' + const newRevision = (options && options.revision) || ID.generate(); + const mainNode = { + type: VALUE_TYPES.OBJECT, + value: {}, + storageType: 'json', + }; + const childNodeValues = {}; + if (value instanceof Array) { + mainNode.type = VALUE_TYPES.ARRAY; + // Convert array to object with numeric properties + const obj = {}; + for (let i = 0; i < value.length; i++) { + obj[i] = value[i]; + } + value = obj; + } + else if (value instanceof PathReference) { + mainNode.type = VALUE_TYPES.REFERENCE; + mainNode.value = value.path; + mainNode.storageType = 'text'; + } + else if (value instanceof ArrayBuffer) { + mainNode.type = VALUE_TYPES.BINARY; + mainNode.value = Buffer.from(value); + mainNode.storageType = 'binary'; + } + else if (typeof value === 'string') { + mainNode.type = VALUE_TYPES.STRING; + mainNode.value = value; + mainNode.storageType = 'text'; + } + const currentIsObjectOrArray = currentRow ? [VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(currentRow.type) : false; + const newIsObjectOrArray = [VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(mainNode.type); + const children = { + current: [], + new: [], + }; + let currentObject = null; + if (currentIsObjectOrArray) { + currentObject = this._deserializeJSON(currentRow.type, currentRow.json_value); + children.current = Object.keys(currentObject); + if (newIsObjectOrArray) { + mainNode.value = currentObject; + } + } + if (newIsObjectOrArray) { + // Object or array. Determine which properties can be stored in the main node, + // and which should be stored in their own nodes + // children.new = options.merge ? children.current : []; + Object.keys(value).forEach(key => { + const val = value[key]; + delete mainNode.value[key]; // key is being overwritten, moved from inline to dedicated, or deleted. + if (val === null) { // || typeof val === 'undefined' + // This key is being removed + return; + } + // Where to store this value? + if (this.valueFitsInline(val)) { + // Store in main node + mainNode.value[key] = val; + } + else { + // Store in child node + childNodeValues[key] = val; + } + }); + } + // Insert or update node + if (currentRow) { + // update + this.debug.log(`Node "/${path}" is being ${options.merge ? 'updated' : 'overwritten'}`.colorize(ColorStyle.cyan)); + const updateMainNode = () => { + const sql = `UPDATE nodes SET type = $type, text_value = $text_value, binary_value = $binary_value, json_value = $json_value, modified = $modified, revision_nr = revision_nr + 1, revision = $revision + WHERE path = $path`; + const params = { + $path: path, + $type: mainNode.type, + $text_value: mainNode.storageType === 'text' ? mainNode.value : null, + $binary_value: mainNode.storageType === 'binary' ? mainNode.value : null, + $json_value: mainNode.storageType === 'json' ? this._createJSON(mainNode.value) : null, + $modified: Date.now(), + // $revision_nr: existingDetails.revision_nr + 1, + $revision: newRevision, + }; + // if (transaction) { + transaction.add(sql, params); + // } + // else { + // return this._exec(sql, params); + // } + }; + // If existing is an array or object, we have to find out which children are affected + if (currentIsObjectOrArray || newIsObjectOrArray) { + // Track changes in properties: + // const oldObject = currentIsObjectOrArray + // ? this._deserializeJSON(currentRow.type, currentRow.json_value) + // : null; + // const children = { + // old: currentIsObjectOrArray + // ? Object.keys(oldObject) + // : [], + // new: newIsObjectOrArray + // ? Object.keys(value).filter(key => value[key] !== null && typeof value[key] !== 'undefined') + // : [] + // }; + // Get current child nodes in dedicated child records + let childRows = []; + if (currentIsObjectOrArray) { + const where = path === '' + ? `path <> '' AND path NOT LIKE '%/%'` + : `(path LIKE '${path}/%' OR path LIKE '${path}[%') AND path NOT LIKE '${path}/%/%' AND path NOT LIKE '${path}[%]/%' AND path NOT LIKE '${path}[%][%'`; + // TODO: add parent_path to nodes table to make query easier and faster? + childRows = await this._get(`SELECT path FROM nodes WHERE ${where}`); + } + const keys = childRows.map(row => PathInfo.get(row.path).key); + // = childRows.map(row => PathInfo.get(row.path)) + // .filter(info => info.parentPath === path) + // .map(info => info.key); + children.current = children.current.concat(keys); + if (newIsObjectOrArray) { + if (options && options.merge) { + children.new = children.current.slice(); + } + Object.keys(value).forEach(key => { + if (!children.new.includes(key)) { + children.new.push(key); + } + }); + } + // TODO: convert changes to details about changed values for change tracking + const changes = { + insert: children.new.filter(key => !children.current.includes(key)), + update: children.new.filter(key => children.current.includes(key)), + delete: options && options.merge ? Object.keys(value).filter(key => value[key] === null) : children.current.filter(key => !children.new.includes(key)), + }; + // (over)write all child nodes that must be stored in their own record + const childUpdatePromises = Object.keys(childNodeValues).map(key => { + const childPath = PathInfo.getChildPath(path, key); + const childValue = childNodeValues[key]; + return this._writeNode(childPath, childValue, { revision: newRevision, merge: false, transaction }); // return this._writeNode(childPath, childValue, { revision: newRevision, merge: false, transaction }); + }); + // Delete all child nodes that were stored in their own record, but are being removed + // Also delete nodes that are being moved from a dedicated record to inline + const movingNodes = keys.filter(key => key in mainNode.value); // moving from dedicated to inline value + const deleteDedicatedKeys = changes.delete.concat(movingNodes); + // const deletePromises = deleteDedicatedKeys.map(key => { + deleteDedicatedKeys.forEach(key => { + const childPath = PathInfo.getChildPath(path, key); + this._deleteNode(childPath, { transaction }); // return this._deleteNode(childPath, { transaction }); + }); + // const promises = updatePromises.concat(deletePromises); + // promises.push(updateMainNode(transaction)); + updateMainNode(); + // return Promise.all(promises) + // .then(() => { + // return changes; + // }) + await Promise.all(childUpdatePromises); + } + else { + // The current and/or new node is not an object/array + updateMainNode(); + } + } + else { + // Current node does not exist, create it and any child nodes + // write all child nodes that must be stored in their own record + this.debug.log(`Node "/${path}" is being created`.colorize(ColorStyle.cyan)); + const childCreatePromises = Object.keys(childNodeValues).map(async (key) => { + const childPath = PathInfo.getChildPath(path, key); + const childValue = childNodeValues[key]; + await this._writeNode(childPath, childValue, { revision: newRevision, merge: false, transaction }); // return this._writeNode(childPath, childValue, { revision: newRevision, merge: false }); + }); + await Promise.all(childCreatePromises); + // Create current node + const sql = `INSERT INTO nodes (path, type, text_value, binary_value, json_value, created, modified, revision_nr, revision) + VALUES ($path, $type, $text_value, $binary_value, $json_value, $created, $modified, $revision_nr, $revision)`; + const params = { + $path: path, + $type: mainNode.type, + $text_value: mainNode.storageType === 'text' ? mainNode.value : null, + $binary_value: mainNode.storageType === 'binary' ? mainNode.value : null, + $json_value: mainNode.storageType === 'json' ? this._createJSON(mainNode.value) : null, + $created: Date.now(), + $modified: Date.now(), + $revision_nr: 0, + $revision: newRevision, + }; + transaction.add(sql, params); // return this._exec(sql, params); + // return transaction.run() + // .then(results => { + // console.log(`Transaction successful!`, results); + // }) + // .catch(err => { + // console.error(err); + // throw err; + // }) + } + if (!options.transaction) { + // Our transaction, we can run it now! + try { + await transaction.run(); + } + catch (err) { + console.error(err); + throw err; + } + } + } + /** + * Deletes (dedicated) node and all subnodes without checking for existence. Use with care - all removed nodes will lose their revision stats! DOES NOT REMOVE INLINE CHILD NODES! + */ + _deleteNode(path, options = { transaction: null }) { + const where = path === '' ? '' : `WHERE path = '${path}' OR path LIKE '${path}/%' OR path LIKE '${path}[%'`; + const sql = `DELETE FROM nodes ${where}`; + if (options && options.transaction) { + options.transaction.add(sql); + } + else { + return this._exec(sql); + } + } + /** + * Enumerates all children of a given Node for reflection purposes + */ + getChildren(path, options = {}) { + let callback; //, resolve, reject; + const generator = { + /** + * + * @param valueCallback callback function to run for each child. Return false to stop iterating + * @returns returns a promise that resolves with a boolean indicating if all children have been enumerated, or was canceled by the valueCallback function + */ + next(valueCallback) { + callback = valueCallback; + return start(); + }, + }; + const start = async () => { + let canceled = false; + const tid = (options && options.tid) || ID.generate(); + const lock = await this.nodeLocker.lock(path, tid.toString(), false, 'getChildren'); + try { + const row = await this._getOne(`SELECT type, json_value, revision, revision_nr, created, modified FROM nodes WHERE path = $path`, { $path: path }); + if (!row) { + throw new NodeNotFoundError(`Node "/${path}" does not exist`); + } + if (![VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(row.type)) { + // No children + return false; + } + const isArray = row.type === VALUE_TYPES.ARRAY; + const value = JSON.parse(row.json_value); + let keys = Object.keys(value); + if (options.keyFilter) { + keys = keys.filter(key => options.keyFilter.includes(key)); + } + const pathInfo = PathInfo.get(path); + keys.length > 0 && keys.every(key => { + const child = this._getTypeFromStoredValue(value[key]); + const info = new SQLiteNodeInfo({ + path: pathInfo.childPath(key), + ...(!isArray && { key }), + ...(isArray && { index: parseInt(key) }), + type: child.type, + address: null, + exists: true, + value: child.value, + revision: row.revision, + revision_nr: row.revision_nr, + created: row.created, + modified: row.modified, + }); + canceled = callback(info) === false; + return !canceled; // stop .every loop if canceled + }); + if (canceled) { + return true; + } + // Go on... query other children + const where = path === '' + ? `path <> '' AND instr(path,'/')=0 AND instr(path,'[')=0` // AND path NOT LIKE '%/%' AND path NOT LIKE '%[%' + : `path LIKE '${path}${isArray ? '[' : '/'}%' AND path NOT LIKE '${path}${isArray ? '[' : '/'}%/%' AND path NOT LIKE '${path}${isArray ? '[' : '/'}%[%'`; + const q = `SELECT path, type, revision, revision_nr, created, modified FROM nodes WHERE ${where}`; + await this._each(q, null, row => { + const key = PathInfo.get(row.path).key; + if (options.keyFilter && !options.keyFilter.includes(key)) { + return true; + } + const info = new SQLiteNodeInfo({ + path: row.path, + type: row.type, + ...(!isArray && { key: key }), + ...(isArray && { index: key }), + address: new SQLiteNodeAddress(row.path), + exists: true, + value: null, + revision: row.revision, + revision_nr: row.revision_nr, + created: row.created, + modified: row.modified, + }); + canceled = callback(info) === false; + return !canceled; // stop ._each loop if canceled + }); + return canceled; + } + finally { + lock.release(); + } + }; // start() + return generator; + } + async getNode(path, options = { child_objects: true }) { + // path = path.replace(/'/g, ''); // prevent sql injection, remove single quotes + const tid = (options && options.tid) || ID.generate(); + let lock = await this.nodeLocker.lock(path, tid.toString(), false, 'getNode'); + try { + // Get path, path/* and path[* + let where = ''; + if (path === '') { + if (options && options.child_objects === false) { + where = `WHERE path='' OR type NOT IN (${VALUE_TYPES.OBJECT},${VALUE_TYPES.ARRAY})`; + } + } + else if (options && options.child_objects === false) { + where = `WHERE path='${path}' OR ((path LIKE '${path}/%' OR path LIKE '${path}[%') AND type NOT IN (${VALUE_TYPES.OBJECT},${VALUE_TYPES.ARRAY}))`; + } + else { + where = `WHERE path = '${path}' OR path LIKE '${path}/%' OR path LIKE '${path}[%'`; + } + let filtered = false; + let childRows; + if (options && (options.include || options.exclude || options.child_objects === false)) { + // A data filter is requested. + // Building a where statement for this is impossible because we'd need regular expressions to filter paths (because LIKE 'users/%/posts' will also falsely match 'users/ewout/archive/posts') + // Get all paths unfiltered, then filter them manually + filtered = true; + const rows = await this._get(`SELECT path, type FROM nodes ${where}`); + const paths = [path]; + const includeCheck = options.include + ? new RegExp('^' + options.include.map(p => `(?:${p.toString().replace(/\*/g, '[^/\\[]+')})`).join('|') + '(?:$|[/\\[])') + : null; + const excludeCheck = options.exclude + ? new RegExp('^' + options.exclude.map(p => `(?:${p.toString().replace(/\*/g, '[^/\\[]+')})`).join('|') + '(?:$|[/\\[])') + : null; + for (let i = 0; i < rows.length; i++) { + const row = rows[i]; + if (row.path === path) { + continue; // No need to check the main path... + } + let checkPath = row.path.slice(path.length); + if (checkPath[0] === '/') { + checkPath = checkPath.slice(1); + } + const match = (includeCheck ? includeCheck.test(checkPath) : true) + && (excludeCheck ? !excludeCheck.test(checkPath) : true) + && (options.child_objects === false ? row.type !== VALUE_TYPES.OBJECT && !/[/[]/.test(checkPath) : true); + if (match) { + paths.push(row.path); + } + } + // Now query with all paths that met the requirement + childRows = await this._get(`SELECT path, type, text_value, binary_value, json_value, revision FROM nodes WHERE path IN (${paths.map(p => `'${p}'`).join(',')})`); + } + else { + // No filtering + childRows = await this._get(`SELECT path, type, text_value, binary_value, json_value, revision FROM nodes ${where}`); + } + if (childRows.length === 0) { + // Lookup parent node + if (path === '') { + return { revision: null, value: null }; + } // path is root. There is no parent. + lock = await lock.moveToParent(); + const pathInfo = PathInfo.get(path); + const parentRow = await this._getOne(`SELECT type, json_value, revision FROM nodes WHERE path = '${pathInfo.parentPath}'`); + const result = { + revision: parentRow ? parentRow.revision : null, + value: null, + }; + if (!parentRow) { + return result; + } // parent node doesn't exist + if (![VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(parentRow.type)) { + return result; + } // parent node is not an object + // WARNING: parentRow.json_value might be big!! + // TODO: create JSON streamer if json_value length becomes larger than 10KB? + const val = this._deserializeJSON(parentRow.type, parentRow.json_value); + if (!(pathInfo.key in val)) { + return result; + } // parent does not have a child with requested key + result.value = val[pathInfo.key]; + return result; + } + this.debug.log(`Read node "/${path}" and ${filtered ? '(filtered) ' : ''}children from ${childRows.length} records`.colorize(ColorStyle.magenta)); + const targetPathKeys = PathInfo.getPathKeys(path); + const targetRow = childRows.find(row => row.path === path); + const result = { + revision: targetRow ? targetRow.revision : null, + value: null, + }; + if (targetRow.type === VALUE_TYPES.OBJECT || targetRow.type === VALUE_TYPES.ARRAY) { + // target node is an object or array + const value = this._deserializeJSON(targetRow.type, targetRow.json_value); + // merge with other found (child) records + for (let i = 0; i < childRows.length; i++) { + const otherRow = childRows[i]; + if (otherRow === targetRow) { + continue; + } + const pathKeys = PathInfo.getPathKeys(otherRow.path); + const trailKeys = pathKeys.slice(targetPathKeys.length); + let parent = value; + for (let j = 0; j < trailKeys.length; j++) { + console.assert(typeof parent === 'object', 'parent must be an object/array to have children!!'); + const key = trailKeys[j]; + const isLast = j === trailKeys.length - 1; + const nodeType = isLast + ? otherRow.type + : typeof trailKeys[j + 1] === 'number' + ? VALUE_TYPES.ARRAY + : VALUE_TYPES.OBJECT; + let nodeValue; + if (!isLast) { + nodeValue = nodeType === VALUE_TYPES.OBJECT ? {} : []; + } + else if (nodeType === VALUE_TYPES.OBJECT || nodeType === VALUE_TYPES.ARRAY) { + nodeValue = this._deserializeJSON(otherRow.type, otherRow.json_value); + } + else if (nodeType === VALUE_TYPES.REFERENCE) { + nodeValue = new PathReference(otherRow.text_value); + } + else if (nodeType === VALUE_TYPES.BINARY) { + nodeValue = otherRow.binary_value; + } + else { + nodeValue = otherRow.text_value; + } + if (key in parent) { + // Merge with parent + console.assert(typeof parent[key] === typeof nodeValue && [VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(nodeType), 'Merging child values can only be done if existing and current values are both an array or object'); + Object.keys(nodeValue).forEach(childKey => { + console.assert(!(childKey in parent[key]), 'child key is in parent value already?! HOW?!'); + parent[key][childKey] = nodeValue[childKey]; + }); + } + else { + parent[key] = nodeValue; + } + parent = parent[key]; + } + } + result.value = value; + } + else if (childRows.length > 1) { + throw new Error(`more than 1 record found for non-object value!`); + } + else if (targetRow.type === VALUE_TYPES.REFERENCE) { + result.value = new PathReference(targetRow.text_value); + } + else if (targetRow.type === VALUE_TYPES.BINARY) { + // BLOBs are returned as Uint8Array by SQLite3 + const val = targetRow.binary_value; + result.value = val.buffer.slice(val.byteOffset, val.byteOffset + val.byteLength); + } + else { + result.value = targetRow.text_value; + } + // Post process filters to remove any data that got though because they were + // not stored in dedicated records. This will happen with smaller values because + // they are stored inline in their parent node. + // eg: + // { number: 1, small_string: 'small string', bool: true, obj: {}, arr: [] } + // All properties of this object are stored inline, + // if exclude: ['obj'], or child_objects: false was passed, these will still + // have to be removed from the value + if (options.child_objects === false) { + Object.keys(result.value).forEach(key => { + if (typeof result.value[key] === 'object' && result.value[key].constructor === Object) { + // This can only happen if the object was empty + console.assert(Object.keys(result.value[key]).length === 0); + delete result.value[key]; + } + }); + } + if (options.exclude) { + const process = (obj, keys) => { + if (typeof obj !== 'object') { + return; + } + const key = keys[0]; + if (key === '*') { + Object.keys(obj).forEach(k => { + process(obj[k], keys.slice(1)); + }); + } + else if (keys.length > 1) { + key in obj && process(obj[key], keys.slice(1)); + } + else { + delete obj[key]; + } + }; + options.exclude.forEach(path => { + const checkKeys = typeof path === 'number' ? [path] : PathInfo.getPathKeys(path); + process(result.value, checkKeys); + }); + } + return result; + } + finally { + lock.release(); + } + } + async getNodeInfo(path, options = {}) { + // path = path.replace(/'/g, ''); // prevent sql injection, remove single quotes + const lookupNode = async (path) => { + const rows = await this._get(`SELECT type, text_value, binary_value, json_value, created, modified, revision, revision_nr FROM nodes WHERE path='${path}'`); + if (rows.length === 0) { + return null; + } + const row = rows[0]; + let value = null; + if (row.type === VALUE_TYPES.OBJECT || row.type === VALUE_TYPES.ARRAY) { + value = JSON.parse(row.json_value); + } + else if (row.type === VALUE_TYPES.BINARY) { + // BLOBs are returned as Uint8Array by SQLite3 + const val = row.binary_value; + value = val.buffer.slice(val.byteOffset, val.byteOffset + val.byteLength); + } + else { + value = row.text_value; + } + return { + path, + type: row.type, + value, + created: row.created, + modified: row.modified, + revision: row.revision, + revision_nr: row.revision_nr, + }; + }; + const pathInfo = PathInfo.get(path); + const tid = (options && options.tid) || ID.generate(); + let lock = await this.nodeLocker.lock(path, tid.toString(), false, 'getNodeInfo'); + try { + const node = await lookupNode(path); + const info = new SQLiteNodeInfo({ + path, + key: typeof pathInfo.key === 'string' ? pathInfo.key : null, + index: typeof pathInfo.key === 'number' ? pathInfo.key : null, + type: node ? node.type : 0, + exists: node !== null, + address: node ? new SQLiteNodeAddress(path) : null, + created: node ? parseInt(node.created) : null, + modified: node ? parseInt(node.modified) : null, + revision: node ? node.revision : null, + revision_nr: node ? node.revision_nr : null, + }); + // info.created = node ? new Date(node.created) : null; + // info.modified = node ? new Date(node.modified) : null; + // info.revision = node ? node.revision : null; + // info.revision_nr = node ? node.revision_nr : null; + if (node || path === '') { + return info; + } + // Try parent node + lock = await lock.moveToParent(); + const parent = await lookupNode(pathInfo.parentPath); + if (parent && [VALUE_TYPES.OBJECT, VALUE_TYPES.ARRAY].includes(parent.type) && pathInfo.key in parent.value) { + // Stored in parent node + info.exists = true; + info.value = parent.value[pathInfo.key]; + info.address = null; + switch (typeof info.value) { + case 'string': { + info.type = VALUE_TYPES.STRING; + break; + } + case 'number': { + info.type = VALUE_TYPES.NUMBER; + break; + } + case 'boolean': { + info.type = VALUE_TYPES.BOOLEAN; + break; + } + case 'object': { + // Only allowed if type is REFERENCE, DATETIME, empty ARRAY, empty OBJECT + info.type = info.value.type; + info.value = info.value.value; + if (info.type === VALUE_TYPES.DATETIME) { + info.value = new Date(info.value); // Convert number to Date + } + break; + } + } + info.created = parseInt(parent.created); + info.modified = parseInt(parent.modified); + info.revision = parent.revision; + info.revision_nr = parent.revision_nr; + } + else { + // Parent doesn't exist, so the node we're looking for cannot exist either + info.address = null; + } + return info; + } + finally { + lock.release(); + } + } + async setNode(path, value, options = { + suppress_events: false, + context: null, + }) { + if (this.settings.readOnly) { + throw new Error(`Database is opened in read-only mode`); + } + const pathInfo = PathInfo.get(path); + const tid = (options && options.tid) || ID.generate(); + let lock = await this.nodeLocker.lock(path, tid.toString(), true, 'setNode'); + try { + if (path === '') { + if (value === null || typeof value !== 'object' || value instanceof Array || value instanceof ArrayBuffer || ('buffer' in value && value.buffer instanceof ArrayBuffer)) { + throw new Error(`Invalid value for root node: ${value}`); + } + await this._writeNodeWithTracking('', value, { merge: false, tid, suppress_events: options.suppress_events, context: options.context }); + } + else if (options && typeof options.assert_revision !== 'undefined') { + const info = await this.getNodeInfo(path, { tid: lock.tid }); + if (info.revision !== options.assert_revision) { + throw new NodeRevisionError(`revision '${info.revision}' does not match requested revision '${options.assert_revision}'`); + } + if (info.address && info.address.path === path && !this.valueFitsInline(value)) { + // Overwrite node + await this._writeNodeWithTracking(path, value, { merge: false, tid, suppress_events: options.suppress_events, context: options.context }); + } + else { + // Update parent node + lock = await lock.moveToParent(); + await this._writeNodeWithTracking(pathInfo.parentPath, { [pathInfo.key]: value }, { merge: true, tid, suppress_events: options.suppress_events, context: options.context }); + } + } + else { + // Delegate operation to update on parent node + lock = await lock.moveToParent(); + return this.updateNode(pathInfo.parentPath, { [pathInfo.key]: value }, { tid, suppress_events: options.suppress_events, context: options.context }); + } + } + finally { + lock.release(); + } + } + async updateNode(path, updates, options = { + suppress_events: false, + context: null, + }) { + if (this.settings.readOnly) { + throw new Error(`Database is opened in read-only mode`); + } + if (typeof updates !== 'object') { // || Object.keys(updates).length === 0 + throw new Error(`invalid updates argument`); //. Must be a non-empty object or array + } + const tid = (options && options.tid) || ID.generate(); + let lock = await this.nodeLocker.lock(path, tid.toString(), true, 'updateNode'); + try { + // Get info about current node + const nodeInfo = await this.getNodeInfo(path, { tid: lock.tid }); + const pathInfo = PathInfo.get(path); + if (nodeInfo.exists && nodeInfo.address && nodeInfo.address.path === path) { + // Node exists and is stored in its own record. + // Update it + await this._writeNodeWithTracking(path, updates, { merge: true, tid, suppress_events: options.suppress_events, context: options.context }); + } + else if (nodeInfo.exists) { + // Node exists, but is stored in its parent node. + const pathInfo = PathInfo.get(path); + lock = await lock.moveToParent(); + await this._writeNodeWithTracking(pathInfo.parentPath, { [pathInfo.key]: updates }, { merge: true, tid, suppress_events: options.suppress_events, context: options.context }); + } + else { + // The node does not exist, it's parent doesn't have it either. Update the parent instead + lock = await lock.moveToParent(); + await this.updateNode(pathInfo.parentPath, { [pathInfo.key]: updates }, { tid, suppress_events: options.suppress_events, context: options.context }); + } + } + finally { + lock.release(); + } + } +} +module.exports = { + SQLiteNodeAddress, + SQLiteNodeInfo, + SQLiteStorage, + SQLiteStorageSettings, +}; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/esm/storage/sqlite/index.js.map b/dist/esm/storage/sqlite/index.js.map new file mode 100644 index 0000000..7fa33ab --- /dev/null +++ b/dist/esm/storage/sqlite/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/storage/sqlite/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/thread-safe.js b/dist/esm/thread-safe.js new file mode 100644 index 0000000..77528f1 --- /dev/null +++ b/dist/esm/thread-safe.js @@ -0,0 +1,176 @@ +import { SimpleEventEmitter } from 'acebase-core'; +/** Set to true to add stack traces to achieved locks (performance impact!) */ +const DEBUG_MODE = false; +const _lockTimeoutMsg = 'Lock "${name}" timed out! lock.release() was not called in a timely fashion'; +const _lockWaitTimeoutMsg = 'Lock "${name}" wait time expired, failed to lock target'; +const _threadSafeLocks = new Map(); +export class ThreadSafe { + /** + * + * @param target Target object to lock. Do not use object references! + * @param options Locking options + * @returns returns a lock + */ + static lock(target, options = { timeout: 60000 * 15, critical: true, name: 'unnamed lock', shared: false }) { + if (typeof options !== 'object') { + options = {}; + } + if (typeof options.timeout !== 'number') { + options.timeout = 60 * 1000; + } + if (typeof options.critical !== 'boolean') { + options.critical = true; + } + if (typeof options.name !== 'string') { + options.name = typeof target === 'string' ? target : 'unnamed lock'; + } + if (typeof options.shared !== 'boolean') { + options.shared = false; + } + if (options.shared) { + // TODO: Implement + // console.warn('shared locking not implemented yet, using exclusive lock'); + } + let lock = _threadSafeLocks.get(target); + const timeoutHandler = (critical) => { + console.error(_lockTimeoutMsg.replace('${name}', lock.name)); + // Copy lock object so we can alter the original's release method to throw an exception + const copy = Object.assign({}, lock); + const originalName = lock.name; + lock.release = () => { + throw new Error(`Cannot release lock "${originalName}" because it timed out earlier`); + }; + lock = copy; + if (critical) { + // cancel any queued requests + _threadSafeLocks.delete(target); + lock._queue.forEach(item => { + clearTimeout(item.waitTimeout); + item.reject(new Error(`Could not achieve lock because the current lock ("${lock.name}") was not released in time (and lock is flagged critical)`)); + }); + } + else { + next(); + } + }; + const next = () => { + clearTimeout(lock._timeout); + if (lock._queue.length === 0) { + return _threadSafeLocks.delete(target); + } + const item = lock._queue.shift(); + clearTimeout(item.waitTimeout); + lock._timeout = setTimeout(timeoutHandler, item.options.timeout, item.options.critical); + lock.target = item.options.target || target; + lock.achieved = new Date(); + lock.name = item.options.name; + lock.stack = DEBUG_MODE ? (new Error()).stack : 'not available'; + item.resolve(lock); + }; + if (!lock) { + // Create lock + lock = { + target: options.target || target, + achieved: new Date(), + release() { + next(); + }, + name: options.name, + stack: DEBUG_MODE ? (new Error()).stack : 'not available', + _timeout: setTimeout(timeoutHandler, options.timeout, options.critical), + _queue: [], + }; + _threadSafeLocks.set(target, lock); + return Promise.resolve(lock); + } + else { + // Add to queue + return new Promise((resolve, reject) => { + const waitTimeout = setTimeout(() => { + lock._queue.splice(lock._queue.indexOf(item), 1); + if (lock._queue.length === 0) { + _threadSafeLocks.delete(target); + } + reject(_lockWaitTimeoutMsg.replace('${name}', options.name)); + }, options.timeout); + const item = { resolve, reject, waitTimeout, options }; + lock._queue.push(item); + }); + } + } +} +/** + * New locking mechasnism that supports exclusive or shared locking + */ +export class ThreadSafeLock2 extends SimpleEventEmitter { + constructor(target, shared) { + super(); + this.target = target; + this.shares = 0; + this.queue = []; + this._shared = shared; + this.achieved = new Date(); + } + get shared() { return this._shared; } + release() { + if (this.shared && this.shares > 0) { + this.shares--; + } + else if (this.queue.length > 0) { + const next = this.queue.shift(); + this._shared = next.shared; + next.grant(); + if (next.shared) { + // Also grant other pending shared requests + while (this.queue.length > 0 && this.queue[0].shared) { + this.queue.shift().grant(); + } + } + } + else { + // No more shares, no queue: this lock can be now be released entirely + this.emitOnce('released'); + } + } + async request(shared) { + if (this.shared && shared) { + // Grant! + this.shares++; + } + else { + // Add to queue, wait until granted + let grant; + const promise = new Promise(resolve => { grant = resolve; }); + this.queue.push({ shared, grant }); + await promise; + } + } +} +const locks2 = new Map(); +export class ThreadSafe2 { + /** + * + * @param target Target to lock. Preferably use unique strings, don't use object references unless you know what you are doing + * @param options Locking options + * @returns returns a lock + */ + static async lock(target, shared = false) { + // const timeout = 60 * 1000; + if (!locks2.has(target)) { + // New lock + const lock = new ThreadSafeLock2(target, shared); + locks2.set(target, lock); + lock.once('released', () => { + locks2.delete(target); + }); + return lock; + } + else { + // Existing lock + const lock = locks2.get(target); + await lock.request(shared); + return lock; + } + } +} +//# sourceMappingURL=thread-safe.js.map \ No newline at end of file diff --git a/dist/esm/thread-safe.js.map b/dist/esm/thread-safe.js.map new file mode 100644 index 0000000..34ab514 --- /dev/null +++ b/dist/esm/thread-safe.js.map @@ -0,0 +1 @@ +{"version":3,"file":"thread-safe.js","sourceRoot":"","sources":["../../src/thread-safe.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/unidecode-module.js b/dist/esm/unidecode-module.js new file mode 100644 index 0000000..84b5af0 --- /dev/null +++ b/dist/esm/unidecode-module.js @@ -0,0 +1 @@ +//# sourceMappingURL=unidecode-module.js.map \ No newline at end of file diff --git a/dist/esm/unidecode-module.js.map b/dist/esm/unidecode-module.js.map new file mode 100644 index 0000000..3e9789e --- /dev/null +++ b/dist/esm/unidecode-module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"unidecode-module.js","sourceRoot":"","sources":["../../src/unidecode-module.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/esm/unidecode.js b/dist/esm/unidecode.js new file mode 100644 index 0000000..260265b --- /dev/null +++ b/dist/esm/unidecode.js @@ -0,0 +1,4 @@ +// Ugly workaround to import an untyped commonjs module for usage in typescript +import * as unidecode from 'unidecode'; // declared in unidecode-module.ts +export default unidecode; +//# sourceMappingURL=unidecode.js.map \ No newline at end of file diff --git a/dist/esm/unidecode.js.map b/dist/esm/unidecode.js.map new file mode 100644 index 0000000..a862951 --- /dev/null +++ b/dist/esm/unidecode.js.map @@ -0,0 +1 @@ +{"version":3,"file":"unidecode.js","sourceRoot":"","sources":["../../src/unidecode.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,OAAO,KAAK,SAAS,MAAM,WAAW,CAAC,CAAC,kCAAkC;AAC1E,eAAe,SAAiD,CAAC"} \ No newline at end of file diff --git a/dist/types/api-local.d.ts b/dist/types/api-local.d.ts index 76c30c5..30bf23c 100644 --- a/dist/types/api-local.d.ts +++ b/dist/types/api-local.d.ts @@ -1,4 +1,4 @@ -import { AceBaseBase, IStreamLike, Api, EventSubscriptionCallback, ReflectionType, StreamReadFunction, StreamWriteFunction, TransactionLogFilter, LoggingLevel, Query, QueryOptions } from 'acebase-core'; +import { AceBaseBase, IStreamLike, Api, EventSubscriptionCallback, IReflectionNodeInfo, IReflectionChildrenInfo, StreamReadFunction, StreamWriteFunction, TransactionLogFilter, LoggingLevel, Query, QueryOptions } from 'acebase-core'; import { Storage } from './storage'; import { CreateIndexOptions } from './storage/indexes'; import { AceBaseLocalSettings } from '.'; @@ -114,32 +114,8 @@ export declare class LocalApi extends Api { * Deletes an existing index from the database */ deleteIndex(filePath: string): Promise; - reflect(path: string, type: ReflectionType, args: any): Promise<{ - more: boolean; - list: { - key: string | number; - type: string; - value: any; - address?: any; - }[]; - } | { - key: string | number; - exists: boolean; - type: string; - value: any; - address: any; - children: { - more: boolean; - list: { - key: string | number; - type: string; - value: any; - address?: any; - }[]; - } | { - count: number; - }; - }>; + reflect(path: string, type: 'children', args: any): Promise; + reflect(path: string, type: 'info', args: any): Promise; export(path: string, stream: StreamWriteFunction | IStreamLike, options?: { format: string; type_safe: boolean; diff --git a/dist/types/api-local.d.ts.map b/dist/types/api-local.d.ts.map index 7b9a71e..dd3b49b 100644 --- a/dist/types/api-local.d.ts.map +++ b/dist/types/api-local.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"api-local.d.ts","sourceRoot":"","sources":["../../src/api-local.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"api-local.d.ts","sourceRoot":"","sources":["../../src/api-local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE,yBAAyB,EAC7C,mBAAmB,EAAE,uBAAuB,EAC5D,kBAAkB,EAAE,mBAAmB,EAAE,oBAAoB,EAC7D,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAO5D,OAAO,EAAE,OAAO,EAAc,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,GAAG,CAAC;AAEzC,qBAAa,QAAS,SAAQ,GAAG;IAEtB,EAAE,EAAE,WAAW,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;gBAElB,MAAM,QAAY,EAAE,IAAI,EAAE;QAAE,EAAE,EAAE,WAAW,CAAC;QAAC,QAAQ,EAAE,oBAAoB,CAAA;KAAE,EAAE,aAAa,EAAE,MAAM,GAAG;IA6B7G,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG;IAIzB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,yBAAyB;IAI1E,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,yBAAyB;IAI9E;;;;;OAKG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,GAAE;QACzC;;;WAGG;QACH,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B;;;WAGG;QACH,OAAO,CAAC,EAAE,GAAG,CAAC;KAIjB;;;IAKD;;;OAGG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAE;QAC9C;;;WAGG;QACH,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B;;;WAGG;QACH,OAAO,CAAC,EAAE,GAAG,CAAC;KAIjB;;;IAKD,IAAI,yBAAyB,YAE5B;IAED;;;;OAIG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAC9B;;WAEG;QACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB;;WAEG;QACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB;;WAEG;QACH,aAAa,CAAC,EAAE,OAAO,CAAC;KAC3B;;;;;;;IAeD;;;;;OAKG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,YAAY,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,GAAE;QACpF;;;WAGG;QACH,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B;;;WAGG;QACH,OAAO,CAAC,EAAE,GAAG,CAAC;KAIjB;;;IAKK,MAAM,CAAC,IAAI,EAAE,MAAM;IA4BzB;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,GAAE,YAAmC,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAK/G;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB;IAIlE;;OAEG;IACG,UAAU;IAIhB;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM;IAIlC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,uBAAuB,CAAC;IACpF,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAsF5E,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,WAAW,EAAE,OAAO,GAAE;QACrE,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,OAAO,CAAC;KAItB;IAID,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,GAAE;QACpD,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,EAAE,OAAO,CAAC;QACzB,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;KAKtC;IAIK,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;IAI5D,SAAS,CAAC,IAAI,EAAE,MAAM;;;;;IAItB,UAAU;;;;;IAIV,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO;IAIhE;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,oBAAoB;;;;;;;;;;;;;IAO/C;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,oBAAoB;;;;;;;;;;;CAMhD"} \ No newline at end of file diff --git a/dist/types/btree/binary-pointer.d.ts b/dist/types/btree/binary-pointer.d.ts new file mode 100644 index 0000000..49cfb36 --- /dev/null +++ b/dist/types/btree/binary-pointer.d.ts @@ -0,0 +1,7 @@ +import { BPlusTreeLeaf } from './tree-leaf'; +export declare type BinaryPointer = { + name: string; + leaf: BPlusTreeLeaf; + index: number; +}; +//# sourceMappingURL=binary-pointer.d.ts.map \ No newline at end of file diff --git a/dist/types/btree/binary-pointer.d.ts.map b/dist/types/btree/binary-pointer.d.ts.map new file mode 100644 index 0000000..6280e9c --- /dev/null +++ b/dist/types/btree/binary-pointer.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"binary-pointer.d.ts","sourceRoot":"","sources":["../../../src/btree/binary-pointer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,oBAAY,aAAa,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAA;CAChB,CAAA"} \ No newline at end of file diff --git a/dist/types/btree/binary-reference.d.ts b/dist/types/btree/binary-reference.d.ts new file mode 100644 index 0000000..a2ea567 --- /dev/null +++ b/dist/types/btree/binary-reference.d.ts @@ -0,0 +1,8 @@ +import { BPlusTreeLeaf } from './tree-leaf'; +import { BPlusTreeNode } from './tree-node'; +export declare type BinaryReference = { + name: string; + target: BPlusTreeNode | BPlusTreeLeaf; + index: number; +}; +//# sourceMappingURL=binary-reference.d.ts.map \ No newline at end of file diff --git a/dist/types/btree/binary-reference.d.ts.map b/dist/types/btree/binary-reference.d.ts.map new file mode 100644 index 0000000..bb7351c --- /dev/null +++ b/dist/types/btree/binary-reference.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"binary-reference.d.ts","sourceRoot":"","sources":["../../../src/btree/binary-reference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,oBAAY,eAAe,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,GAAG,aAAa,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;CACjB,CAAA"} \ No newline at end of file diff --git a/dist/types/btree/tree-leaf.d.ts b/dist/types/btree/tree-leaf.d.ts index 4b7fdd1..af6d83a 100644 --- a/dist/types/btree/tree-leaf.d.ts +++ b/dist/types/btree/tree-leaf.d.ts @@ -1,3 +1,4 @@ +import { BinaryReference } from './binary-reference'; import { BinaryWriter } from './binary-writer'; import { NodeEntryKeyType } from './entry-key-type'; import { LeafEntryMetaData } from './leaf-entry-metadata'; @@ -24,11 +25,7 @@ export declare class BPlusTreeLeaf { add(key: NodeEntryKeyType, recordPointer: number[] | Uint8Array | string, metadata?: LeafEntryMetaData): BPlusTreeLeafEntry; toString(): string; toBinary(keepFreeSpace: boolean, writer: BinaryWriter): Promise<{ - references: { - name: string; - target: BPlusTreeLeaf; - index: number; - }[]; + references: BinaryReference[]; }>; } //# sourceMappingURL=tree-leaf.d.ts.map \ No newline at end of file diff --git a/dist/types/btree/tree-leaf.d.ts.map b/dist/types/btree/tree-leaf.d.ts.map index 51fceb1..961b51a 100644 --- a/dist/types/btree/tree-leaf.d.ts.map +++ b/dist/types/btree/tree-leaf.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"tree-leaf.d.ts","sourceRoot":"","sources":["../../../src/btree/tree-leaf.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAK5C,qBAAa,aAAa;IAMH,MAAM,EAAE,SAAS,GAAG,aAAa;IAJpD,OAAO,EAAE,kBAAkB,EAAE,CAAM;IACnC,QAAQ,EAAE,aAAa,CAAQ;IAC/B,QAAQ,EAAE,aAAa,CAAQ;gBAEZ,MAAM,EAAE,SAAS,GAAG,aAAa;IAGpD;;OAEG;IACH,IAAI,IAAI,IAAI,SAAS,CAEpB;IAED;;;;;;OAMG;IACH,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IAyFtG,QAAQ;IAKF,QAAQ,CAAC,aAAa,SAAQ,EAAE,MAAM,EAAE,YAAY;;;;;;;CAyM7D"} \ No newline at end of file +{"version":3,"file":"tree-leaf.d.ts","sourceRoot":"","sources":["../../../src/btree/tree-leaf.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAK5C,qBAAa,aAAa;IAMH,MAAM,EAAE,SAAS,GAAG,aAAa;IAJpD,OAAO,EAAE,kBAAkB,EAAE,CAAM;IACnC,QAAQ,EAAE,aAAa,CAAQ;IAC/B,QAAQ,EAAE,aAAa,CAAQ;gBAEZ,MAAM,EAAE,SAAS,GAAG,aAAa;IAGpD;;OAEG;IACH,IAAI,IAAI,IAAI,SAAS,CAEpB;IAED;;;;;;OAMG;IACH,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IAyFtG,QAAQ;IAKF,QAAQ,CAAC,aAAa,SAAQ,EAAE,MAAM,EAAE,YAAY;;;CAyM7D"} \ No newline at end of file diff --git a/dist/types/btree/tree-node.d.ts b/dist/types/btree/tree-node.d.ts index c10548d..725281f 100644 --- a/dist/types/btree/tree-node.d.ts +++ b/dist/types/btree/tree-node.d.ts @@ -3,16 +3,8 @@ import { BPlusTreeLeaf } from './tree-leaf'; import { BPlusTree } from './tree'; import { NodeEntryKeyType } from './entry-key-type'; import { BinaryWriter } from './binary-writer'; -declare type BinaryPointer = { - name: string; - leaf: BPlusTreeLeaf; - index: number; -}; -declare type BinaryReference = { - name: string; - target: BPlusTreeNode | BPlusTreeLeaf; - index: number; -}; +import { BinaryPointer } from './binary-pointer'; +import { BinaryReference } from './binary-reference'; export declare class BPlusTreeNode { tree: BPlusTree; parent: BPlusTreeNode; @@ -28,5 +20,4 @@ export declare class BPlusTreeNode { }>; static resolveBinaryReferences(writer: BinaryWriter, references: BinaryReference[], pointers: BinaryPointer[]): Promise; } -export {}; //# sourceMappingURL=tree-node.d.ts.map \ No newline at end of file diff --git a/dist/types/btree/tree-node.d.ts.map b/dist/types/btree/tree-node.d.ts.map index 062246a..f8ceeb8 100644 --- a/dist/types/btree/tree-node.d.ts.map +++ b/dist/types/btree/tree-node.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"tree-node.d.ts","sourceRoot":"","sources":["../../../src/btree/tree-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,aAAK,aAAa,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,aAAK,eAAe,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,GAAG,aAAa,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;CACjB,CAAA;AAED,qBAAa,aAAa;IAIH,IAAI,EAAE,SAAS;IAAS,MAAM,EAAE,aAAa;IAHhE,OAAO,EAAE,kBAAkB,EAAE,CAAM;IACnC,OAAO,EAAE,aAAa,GAAG,aAAa,CAAQ;gBAE3B,IAAI,EAAE,SAAS,EAAS,MAAM,EAAE,aAAa;IAGhE,QAAQ;IAQR,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa;IAuBnF,OAAO,CAAC,UAAU;IAyDZ,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY;;;;WA+K9C,uBAAuB,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE;CAYtH"} \ No newline at end of file +{"version":3,"file":"tree-node.d.ts","sourceRoot":"","sources":["../../../src/btree/tree-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,qBAAa,aAAa;IAIH,IAAI,EAAE,SAAS;IAAS,MAAM,EAAE,aAAa;IAHhE,OAAO,EAAE,kBAAkB,EAAE,CAAM;IACnC,OAAO,EAAE,aAAa,GAAG,aAAa,CAAQ;gBAE3B,IAAI,EAAE,SAAS,EAAS,MAAM,EAAE,aAAa;IAGhE,QAAQ;IAQR,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa;IAuBnF,OAAO,CAAC,UAAU;IAyDZ,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY;;;;WA+K9C,uBAAuB,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE;CAYtH"} \ No newline at end of file diff --git a/dist/types/btree/typesafe-compare.d.ts b/dist/types/btree/typesafe-compare.d.ts index c93b3fd..21e559a 100644 --- a/dist/types/btree/typesafe-compare.d.ts +++ b/dist/types/btree/typesafe-compare.d.ts @@ -6,6 +6,6 @@ export declare function _isLess(val1: unknown, val2: unknown): boolean; export declare function _isLessOrEqual(val1: unknown, val2: unknown): boolean; export declare function _isMore(val1: unknown, val2: unknown): boolean; export declare function _isMoreOrEqual(val1: unknown, val2: unknown): boolean; -export declare function _sortCompare(val1: unknown, val2: unknown): 1 | 0 | -1; +export declare function _sortCompare(val1: unknown, val2: unknown): 1 | -1 | 0; export declare function _compareBinary(val1: Uint8Array | Buffer | number[], val2: Uint8Array | Buffer | number[]): boolean; //# sourceMappingURL=typesafe-compare.d.ts.map \ No newline at end of file diff --git a/dist/types/storage/index.d.ts b/dist/types/storage/index.d.ts index 8f95ec8..cf31bf0 100644 --- a/dist/types/storage/index.d.ts +++ b/dist/types/storage/index.d.ts @@ -1,4 +1,4 @@ -import { DebugLogger, SimpleEventEmitter, DataRetrievalOptions, ISchemaCheckResult, LoggingLevel } from 'acebase-core'; +import { Utils, DebugLogger, SimpleEventEmitter, DataRetrievalOptions, ISchemaCheckResult, LoggingLevel } from 'acebase-core'; import { NodeInfo } from '../node-info'; import { IPCPeer, RemoteIPCPeer } from '../ipc'; import { DataIndex } from '../data-index'; @@ -436,7 +436,7 @@ export declare class Storage extends SimpleEventEmitter { * @param read read function that streams a new chunk of data * @returns returns a promise that resolves once all data is imported */ - importNode(path: string, read: (bytes: number) => string | ArrayBufferView | Promise, options?: Partial<{ + importNode(path: string, read: (bytes: number) => string | Utils.TypedArrayLike | Promise, options?: Partial<{ format: 'json'; /** * How to store the imported data: 'set' and 'update' will use the same logic as when calling 'set' or 'update' on the target, diff --git a/dist/types/storage/index.d.ts.map b/dist/types/storage/index.d.ts.map index 7f3aa62..0eb2ebc 100644 --- a/dist/types/storage/index.d.ts.map +++ b/dist/types/storage/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file From 1b1e2398708a532d11a8f01b9caa0bf8c89fa7be Mon Sep 17 00:00:00 2001 From: Ewout Stortenbeker Date: Mon, 7 Nov 2022 11:51:38 +0100 Subject: [PATCH 10/14] export throwing browser classes --- src/btree/browser.ts | 10 ++++++++++ src/data-index/browser.ts | 18 ++++++++++++++++++ src/ipc/browser.ts | 6 ++++++ src/not-supported.ts | 4 +++- src/storage/binary/browser.ts | 10 ++++++++++ src/storage/mssql/browser.ts | 10 ++++++++++ src/storage/sqlite/browser.ts | 10 ++++++++++ 7 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 src/btree/browser.ts create mode 100644 src/data-index/browser.ts create mode 100644 src/storage/binary/browser.ts create mode 100644 src/storage/mssql/browser.ts create mode 100644 src/storage/sqlite/browser.ts diff --git a/src/btree/browser.ts b/src/btree/browser.ts new file mode 100644 index 0000000..6b81ec7 --- /dev/null +++ b/src/btree/browser.ts @@ -0,0 +1,10 @@ +import { NotSupported } from '../not-supported'; + +/** + * Not supported in browser context + */ +export class BPlusTree extends NotSupported {} +/** + * Not supported in browser context + */ +export class BinaryBPlusTree extends NotSupported {} diff --git a/src/data-index/browser.ts b/src/data-index/browser.ts new file mode 100644 index 0000000..2e0bea8 --- /dev/null +++ b/src/data-index/browser.ts @@ -0,0 +1,18 @@ +import { NotSupported } from '../not-supported'; + +/** + * Not supported in browser context + */ +export class DataIndex extends NotSupported {} +/** + * Not supported in browser context + */ +export class FullTextIndex extends NotSupported {} +/** + * Not supported in browser context + */ +export class GeoIndex extends NotSupported {} +/** + * Not supported in browser context + */ +export class ArrayIndex extends NotSupported {} diff --git a/src/ipc/browser.ts b/src/ipc/browser.ts index 321431f..7ec14ab 100644 --- a/src/ipc/browser.ts +++ b/src/ipc/browser.ts @@ -1,6 +1,7 @@ import { ID, Transport } from 'acebase-core'; import { AceBaseIPCPeer, IAceBaseIPCLock, IHelloMessage, IMessage } from './ipc'; import { Storage } from '../storage'; +import { NotSupported } from '../not-supported'; type MessageEventCallback = (event: MessageEvent) => any; @@ -156,3 +157,8 @@ export class IPCPeer extends AceBaseIPCPeer { } } + +/** + * Not supported in browser context + */ +export class RemoteIPCPeer extends NotSupported {} diff --git a/src/not-supported.ts b/src/not-supported.ts index dc696ce..d0912a8 100644 --- a/src/not-supported.ts +++ b/src/not-supported.ts @@ -1 +1,3 @@ -// Not supported in current environment \ No newline at end of file +export class NotSupported { + constructor(context = 'browser') { throw new Error(`This feature is not supported in ${context} context`); } +} diff --git a/src/storage/binary/browser.ts b/src/storage/binary/browser.ts new file mode 100644 index 0000000..ba6c858 --- /dev/null +++ b/src/storage/binary/browser.ts @@ -0,0 +1,10 @@ +import { NotSupported } from '../../not-supported'; + +/** + * Not supported in browser context + */ +export class AceBaseStorageSettings extends NotSupported {} +/** + * Not supported in browser context + */ +export class AceBaseStorage extends NotSupported {} diff --git a/src/storage/mssql/browser.ts b/src/storage/mssql/browser.ts new file mode 100644 index 0000000..329d729 --- /dev/null +++ b/src/storage/mssql/browser.ts @@ -0,0 +1,10 @@ +import { NotSupported } from '../../not-supported'; + +/** + * Not supported in browser context + */ +export class MSSQLStorageSettings extends NotSupported {} +/** + * Not supported in browser context + */ +export class MSSQLStorage extends NotSupported {} diff --git a/src/storage/sqlite/browser.ts b/src/storage/sqlite/browser.ts new file mode 100644 index 0000000..448b655 --- /dev/null +++ b/src/storage/sqlite/browser.ts @@ -0,0 +1,10 @@ +import { NotSupported } from '../../not-supported'; + +/** + * Not supported in browser context + */ +export class SQLiteStorageSettings extends NotSupported {} +/** + * Not supported in browser context + */ +export class SQLiteStorage extends NotSupported {} From d6e6f1e802290dfd418b06a385c4d0e46b0f3b09 Mon Sep 17 00:00:00 2001 From: Ewout Stortenbeker Date: Mon, 7 Nov 2022 11:52:55 +0100 Subject: [PATCH 11/14] use browser files --- create-package-files | 20 ++++++++++---------- package.json | 31 ++++++++++++------------------- 2 files changed, 22 insertions(+), 29 deletions(-) diff --git a/create-package-files b/create-package-files index 51aaec5..0138d56 100644 --- a/create-package-files +++ b/create-package-files @@ -9,11 +9,11 @@ cat >dist/cjs/package.json <dist/esm/package.json < Date: Mon, 7 Nov 2022 11:53:31 +0100 Subject: [PATCH 12/14] import and require --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 08fe237..d36a5d2 100644 --- a/README.md +++ b/README.md @@ -2208,7 +2208,6 @@ The TypeScript sources are compiled to both CommonJS and ESM module systems. The | Statement | Module system | Target | |--------------------------------------------|---------------|--------| | import { AceBase } from 'acebase' | ESM | ES2020 | -| import { AceBase } from 'acebase/commonjs' | CommonJS | ES2017 | | const { AceBase } = require('acebase') | CommonJS | ES2017 | See https://github.com/appy-one/acebase/discussions/98 for more info. From 75201008f3eff9259084566cee52fd3b2e74e195 Mon Sep 17 00:00:00 2001 From: Ewout Stortenbeker Date: Mon, 7 Nov 2022 11:58:38 +0100 Subject: [PATCH 13/14] bump acebase-core to v1.24.0 --- package-lock.json | 590 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 2 +- 2 files changed, 588 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 08108b4..82212c9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,90 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "@eslint/eslintrc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", @@ -113,6 +197,15 @@ "fastq": "^1.6.0" } }, + "@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/jasmine": { "version": "3.7.4", "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.7.4.tgz", @@ -125,12 +218,24 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, "@types/node": { "version": "14.14.37", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz", "integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==", "dev": true }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, "@types/ws": { "version": "8.2.2", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz", @@ -264,9 +369,9 @@ } }, "acebase-core": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/acebase-core/-/acebase-core-1.23.0.tgz", - "integrity": "sha512-OB/YFjyG9QX+7Rj4ZImxCVD7q683ifTgQtJHdtLbNv7pTH9MA6H5dZ6dCC9MrytT6XMouO7hXA7HpKtrOx8vXg==" + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/acebase-core/-/acebase-core-1.24.0.tgz", + "integrity": "sha512-tHFVHJZDVVZSqXsuRvI/CMbcbQtulPHH/Ng6RRdfB+fPCk5tC+DrHa/X0nDfx4fzyQLVLFqp/sFErzowJwhHQw==" }, "acorn": { "version": "7.4.1", @@ -336,6 +441,12 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true + }, "asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -647,6 +758,32 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, + "camelcase": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.0.tgz", + "integrity": "sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ==", + "dev": true + }, + "camelcase-keys": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-8.0.2.tgz", + "integrity": "sha512-qMKdlOfsjlezMqxkUGGMaWWs17i2HoL15tM+wtx8ld4nLrUwU58TFdvyGOz/piNP842KeO8yXvggVQSdQ828NA==", + "dev": true, + "requires": { + "camelcase": "^7.0.0", + "map-obj": "^4.3.0", + "quick-lru": "^6.1.1", + "type-fest": "^2.13.0" + }, + "dependencies": { + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true + } + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -832,6 +969,36 @@ "ms": "2.1.2" } }, + "decamelize": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", + "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true + } + } + }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -961,6 +1128,15 @@ } } }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, "es-abstract": { "version": "1.19.4", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.4.tgz", @@ -1228,6 +1404,16 @@ "to-regex-range": "^5.0.1" } }, + "find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "requires": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + } + }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -1250,6 +1436,17 @@ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "dev": true }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1341,6 +1538,18 @@ "slash": "^3.0.0" } }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -1422,6 +1631,23 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "hosted-git-info": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", + "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", + "dev": true + } + } + }, "htmlescape": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", @@ -1462,6 +1688,12 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1526,6 +1758,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, "is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -1620,6 +1858,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true + }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -1707,6 +1951,12 @@ "integrity": "sha512-DH3oYDS/AUvvr22+xUBW62m1Xoy7tUlY1tsxKEJvl5JeJ7q8zd1K5bUwiOxdH+erj6l2vAMM3hV25Xs9/WrmuQ==", "dev": true }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -1716,6 +1966,12 @@ "argparse": "^2.0.1" } }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -1728,12 +1984,34 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, "labeled-stream-splicer": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", @@ -1754,6 +2032,21 @@ "type-check": "~0.4.0" } }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "locate-path": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.1.tgz", + "integrity": "sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==", + "dev": true, + "requires": { + "p-locate": "^6.0.0" + } + }, "lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", @@ -1775,6 +2068,12 @@ "yallist": "^4.0.0" } }, + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true + }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -1786,6 +2085,34 @@ "safe-buffer": "^5.1.2" } }, + "meow": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-11.0.0.tgz", + "integrity": "sha512-Cl0yeeIrko6d94KpUo1M+0X1sB14ikoaqlIGuTH1fW4I+E3+YljL54/hb/BWmVfrV9tTV9zU04+xjw08Fh2WkA==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.2", + "camelcase-keys": "^8.0.2", + "decamelize": "^6.0.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^4.0.1", + "read-pkg-up": "^9.1.0", + "redent": "^4.0.0", + "trim-newlines": "^4.0.2", + "type-fest": "^3.1.0", + "yargs-parser": "^21.1.1" + }, + "dependencies": { + "type-fest": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.1.0.tgz", + "integrity": "sha512-StmrZmK3eD9mDF9Vt7UhqthrDSk66O9iYl5t5a0TSoVkHjl0XZx/xuc/BRz4urAXXGHOY5OLsE0RdJFIApSFmw==", + "dev": true + } + } + }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -1820,6 +2147,12 @@ } } }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -1847,6 +2180,17 @@ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + } + }, "mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", @@ -1888,6 +2232,18 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "normalize-package-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", + "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", + "dev": true, + "requires": { + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -1947,6 +2303,24 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "requires": { + "p-limit": "^4.0.0" + } + }, "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -1984,12 +2358,30 @@ "safe-buffer": "^5.1.1" } }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, "path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true }, + "path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -2103,6 +2495,12 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "quick-lru": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.1.tgz", + "integrity": "sha512-S27GBT+F0NTRiehtbrgaSE1idUAJ5bX8dPAQTdylEyNlrdcH5X4Lz7Edz3DYzecbsCluD5zO8ZNEe04z3D3u6Q==", + "dev": true + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -2131,6 +2529,66 @@ "readable-stream": "^2.0.2" } }, + "read-pkg": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", + "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^2.0.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz", + "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", + "dev": true, + "requires": { + "find-up": "^6.3.0", + "read-pkg": "^7.1.0", + "type-fest": "^2.5.0" + }, + "dependencies": { + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true + } + } + }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -2163,6 +2621,16 @@ } } }, + "redent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", + "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", + "dev": true, + "requires": { + "indent-string": "^5.0.0", + "strip-indent": "^4.0.0" + } + }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -2328,6 +2796,38 @@ } } }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true + }, "stream-browserify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", @@ -2434,6 +2934,15 @@ "ansi-regex": "^5.0.1" } }, + "strip-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", + "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", + "dev": true, + "requires": { + "min-indent": "^1.0.1" + } + }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -2533,6 +3042,53 @@ "is-number": "^7.0.0" } }, + "trim-newlines": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.0.2.tgz", + "integrity": "sha512-GJtWyq9InR/2HRiLZgpIKv+ufIKrVrvjQWEj7PxAXNc5dwbNJkqhAUoAGgzRmULAnoOM5EIpveYd3J2VeSAIew==", + "dev": true + }, + "tsc-esm-fix": { + "version": "2.20.5", + "resolved": "https://registry.npmjs.org/tsc-esm-fix/-/tsc-esm-fix-2.20.5.tgz", + "integrity": "sha512-W6tNhQkygqU2CDaNOaAwNjAtcuKH3ZIMUJy1Vk0Dt8zLp1aAaEBc3yNIt/+mK+kfmA4Xj+zdE6o2U44hfJGoQw==", + "dev": true, + "requires": { + "@types/fs-extra": "^9.0.13", + "fs-extra": "^10.1.0", + "globby": "^13.1.2", + "json5": "^2.2.1", + "meow": "^11.0.0", + "tslib": "^2.4.0" + }, + "dependencies": { + "globby": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", + "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + } + } + }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -2617,6 +3173,12 @@ "resolved": "https://registry.npmjs.org/unidecode/-/unidecode-0.1.8.tgz", "integrity": "sha1-77swFTi8RSRqmsjFWdcvAVMFBT4=" }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -2678,6 +3240,16 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", @@ -2743,6 +3315,18 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true } } } diff --git a/package.json b/package.json index 7dc4444..0436d0c 100644 --- a/package.json +++ b/package.json @@ -91,7 +91,7 @@ "author": "Ewout Stortenbeker (http://appy.one)", "license": "MIT", "dependencies": { - "acebase-core": "^1.23.0", + "acebase-core": "^1.24.0", "unidecode": "^0.1.8" }, "devDependencies": { From e69fc8d0657ef8cc0168eac94b9e4a7628c116c2 Mon Sep 17 00:00:00 2001 From: Ewout Stortenbeker Date: Mon, 7 Nov 2022 12:06:46 +0100 Subject: [PATCH 14/14] chore: build --- dist/browser.js | 164 ++++++++++++++++----- dist/browser.min.js | 2 +- dist/cjs/btree/browser.js | 17 +++ dist/cjs/btree/browser.js.map | 1 + dist/cjs/data-index/browser.js | 29 ++++ dist/cjs/data-index/browser.js.map | 1 + dist/cjs/ipc/browser.js | 9 +- dist/cjs/ipc/browser.js.map | 2 +- dist/cjs/not-supported.js | 8 +- dist/cjs/not-supported.js.map | 2 +- dist/cjs/package.json | 10 +- dist/cjs/storage/binary/browser.js | 17 +++ dist/cjs/storage/binary/browser.js.map | 1 + dist/cjs/storage/mssql/browser.js | 17 +++ dist/cjs/storage/mssql/browser.js.map | 1 + dist/cjs/storage/sqlite/browser.js | 17 +++ dist/cjs/storage/sqlite/browser.js.map | 1 + dist/esm/btree/browser.js | 12 ++ dist/esm/btree/browser.js.map | 1 + dist/esm/data-index/browser.js | 22 +++ dist/esm/data-index/browser.js.map | 1 + dist/esm/ipc/browser.js | 6 + dist/esm/ipc/browser.js.map | 2 +- dist/esm/not-supported.js | 4 +- dist/esm/not-supported.js.map | 2 +- dist/esm/package.json | 10 +- dist/esm/storage/binary/browser.js | 12 ++ dist/esm/storage/binary/browser.js.map | 1 + dist/esm/storage/mssql/browser.js | 12 ++ dist/esm/storage/mssql/browser.js.map | 1 + dist/esm/storage/sqlite/browser.js | 12 ++ dist/esm/storage/sqlite/browser.js.map | 1 + dist/types/btree/browser.d.ts | 12 ++ dist/types/btree/browser.d.ts.map | 1 + dist/types/data-index/browser.d.ts | 22 +++ dist/types/data-index/browser.d.ts.map | 1 + dist/types/ipc/browser.d.ts | 6 + dist/types/ipc/browser.d.ts.map | 2 +- dist/types/not-supported.d.ts | 3 + dist/types/not-supported.d.ts.map | 2 +- dist/types/storage/binary/browser.d.ts | 12 ++ dist/types/storage/binary/browser.d.ts.map | 1 + dist/types/storage/mssql/browser.d.ts | 12 ++ dist/types/storage/mssql/browser.d.ts.map | 1 + dist/types/storage/sqlite/browser.d.ts | 12 ++ dist/types/storage/sqlite/browser.d.ts.map | 1 + 46 files changed, 432 insertions(+), 54 deletions(-) create mode 100644 dist/cjs/btree/browser.js create mode 100644 dist/cjs/btree/browser.js.map create mode 100644 dist/cjs/data-index/browser.js create mode 100644 dist/cjs/data-index/browser.js.map create mode 100644 dist/cjs/storage/binary/browser.js create mode 100644 dist/cjs/storage/binary/browser.js.map create mode 100644 dist/cjs/storage/mssql/browser.js create mode 100644 dist/cjs/storage/mssql/browser.js.map create mode 100644 dist/cjs/storage/sqlite/browser.js create mode 100644 dist/cjs/storage/sqlite/browser.js.map create mode 100644 dist/esm/btree/browser.js create mode 100644 dist/esm/btree/browser.js.map create mode 100644 dist/esm/data-index/browser.js create mode 100644 dist/esm/data-index/browser.js.map create mode 100644 dist/esm/storage/binary/browser.js create mode 100644 dist/esm/storage/binary/browser.js.map create mode 100644 dist/esm/storage/mssql/browser.js create mode 100644 dist/esm/storage/mssql/browser.js.map create mode 100644 dist/esm/storage/sqlite/browser.js create mode 100644 dist/esm/storage/sqlite/browser.js.map create mode 100644 dist/types/btree/browser.d.ts create mode 100644 dist/types/btree/browser.d.ts.map create mode 100644 dist/types/data-index/browser.d.ts create mode 100644 dist/types/data-index/browser.d.ts.map create mode 100644 dist/types/storage/binary/browser.d.ts create mode 100644 dist/types/storage/binary/browser.d.ts.map create mode 100644 dist/types/storage/mssql/browser.d.ts create mode 100644 dist/types/storage/mssql/browser.d.ts.map create mode 100644 dist/types/storage/sqlite/browser.d.ts create mode 100644 dist/types/storage/sqlite/browser.d.ts.map diff --git a/dist/browser.js b/dist/browser.js index 4314294..79176d1 100644 --- a/dist/browser.js +++ b/dist/browser.js @@ -194,7 +194,6 @@ exports.AceBaseBase = AceBaseBase; },{"./data-reference":8,"./debug":10,"./optional-observable":14,"./simple-colors":21,"./simple-event-emitter":22,"./type-mappings":25}],2:[function(require,module,exports){ "use strict"; -/* eslint-disable @typescript-eslint/no-unused-vars */ Object.defineProperty(exports, "__esModule", { value: true }); exports.Api = void 0; class NotImplementedError extends Error { @@ -3090,7 +3089,7 @@ class ObservableShim { } exports.ObservableShim = ObservableShim; -},{"rxjs":53}],15:[function(require,module,exports){ +},{"rxjs":57}],15:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PartialArray = void 0; @@ -4164,13 +4163,13 @@ class EventStream { constructor(eventPublisherCallback) { const subscribers = []; let noMoreSubscribersCallback; - let activationState; - const _stoppedState = 'stopped (no more subscribers)'; + let activationState; // TODO: refactor to string only: STATE_INIT, STATE_STOPPED, STATE_ACTIVATED, STATE_CANCELED + const STATE_STOPPED = 'stopped (no more subscribers)'; this.subscribe = (callback, activationCallback) => { if (typeof callback !== 'function') { throw new TypeError('callback must be a function'); } - else if (activationState === _stoppedState) { + else if (activationState === STATE_STOPPED) { throw new Error('stream can\'t be used anymore because all subscribers were stopped'); } const sub = { @@ -4201,7 +4200,7 @@ class EventStream { let ret; if (subscribers.length === 0) { ret = noMoreSubscribersCallback === null || noMoreSubscribersCallback === void 0 ? void 0 : noMoreSubscribersCallback(); - activationState = _stoppedState; + activationState = STATE_STOPPED; } return Promise.resolve(ret); }; @@ -5357,7 +5356,7 @@ function defer(fn) { exports.defer = defer; }).call(this)}).call(this,require("buffer").Buffer) -},{"./partial-array":15,"./path-reference":17,"./process":18,"buffer":53}],27:[function(require,module,exports){ +},{"./partial-array":15,"./path-reference":17,"./process":18,"buffer":57}],27:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BrowserAceBase = void 0; @@ -5404,7 +5403,7 @@ class BrowserAceBase extends acebase_local_1.AceBase { } exports.BrowserAceBase = BrowserAceBase; -},{"./acebase-local":28,"./storage/custom/indexed-db":45}],28:[function(require,module,exports){ +},{"./acebase-local":28,"./storage/custom/indexed-db":47}],28:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AceBase = exports.AceBaseLocalSettings = exports.IndexedDBStorageSettings = exports.LocalStorageSettings = void 0; @@ -5490,7 +5489,7 @@ class AceBase extends acebase_core_1.AceBaseBase { } exports.AceBase = AceBase; -},{"./api-local":29,"./storage/binary":39,"./storage/custom/indexed-db/settings":46,"./storage/custom/local-storage":48,"acebase-core":12}],29:[function(require,module,exports){ +},{"./api-local":29,"./storage/binary":43,"./storage/custom/indexed-db/settings":48,"./storage/custom/local-storage":50,"acebase-core":12}],29:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LocalApi = void 0; @@ -5787,7 +5786,7 @@ class LocalApi extends acebase_core_1.Api { } exports.LocalApi = LocalApi; -},{"./node-value-types":38,"./query":41,"./storage/binary":39,"./storage/custom":44,"./storage/mssql":39,"./storage/sqlite":39,"acebase-core":12}],30:[function(require,module,exports){ +},{"./node-value-types":39,"./query":42,"./storage/binary":43,"./storage/custom":46,"./storage/mssql":55,"./storage/sqlite":56,"acebase-core":12}],30:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AsyncTaskBatch = void 0; @@ -5947,12 +5946,43 @@ var storage_1 = require("./storage"); Object.defineProperty(exports, "StorageSettings", { enumerable: true, get: function () { return storage_1.StorageSettings; } }); Object.defineProperty(exports, "SchemaValidationError", { enumerable: true, get: function () { return storage_1.SchemaValidationError; } }); -},{"./acebase-browser":27,"./acebase-local":28,"./storage":51,"./storage/binary":39,"./storage/custom":44,"./storage/mssql":39,"./storage/sqlite":39,"acebase-core":12}],32:[function(require,module,exports){ +},{"./acebase-browser":27,"./acebase-local":28,"./storage":53,"./storage/binary":43,"./storage/custom":46,"./storage/mssql":55,"./storage/sqlite":56,"acebase-core":12}],32:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.IPCPeer = void 0; +exports.ArrayIndex = exports.GeoIndex = exports.FullTextIndex = exports.DataIndex = void 0; +const not_supported_1 = require("../not-supported"); +/** + * Not supported in browser context + */ +class DataIndex extends not_supported_1.NotSupported { +} +exports.DataIndex = DataIndex; +/** + * Not supported in browser context + */ +class FullTextIndex extends not_supported_1.NotSupported { +} +exports.FullTextIndex = FullTextIndex; +/** + * Not supported in browser context + */ +class GeoIndex extends not_supported_1.NotSupported { +} +exports.GeoIndex = GeoIndex; +/** + * Not supported in browser context + */ +class ArrayIndex extends not_supported_1.NotSupported { +} +exports.ArrayIndex = ArrayIndex; + +},{"../not-supported":40}],33:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.RemoteIPCPeer = exports.IPCPeer = void 0; const acebase_core_1 = require("acebase-core"); const ipc_1 = require("./ipc"); +const not_supported_1 = require("../not-supported"); /** * Browser tabs IPC. Database changes and events will be synchronized automatically. * Locking of resources will be done by the election of a single locking master: @@ -6082,8 +6112,14 @@ class IPCPeer extends ipc_1.AceBaseIPCPeer { } } exports.IPCPeer = IPCPeer; +/** + * Not supported in browser context + */ +class RemoteIPCPeer extends not_supported_1.NotSupported { +} +exports.RemoteIPCPeer = RemoteIPCPeer; -},{"./ipc":33,"acebase-core":12}],33:[function(require,module,exports){ +},{"../not-supported":40,"./ipc":34,"acebase-core":12}],34:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AceBaseIPCPeer = exports.AceBaseIPCPeerExitingError = void 0; @@ -6582,7 +6618,7 @@ class AceBaseIPCPeer extends acebase_core_1.SimpleEventEmitter { } exports.AceBaseIPCPeer = AceBaseIPCPeer; -},{"../node-lock":37,"acebase-core":12}],34:[function(require,module,exports){ +},{"../node-lock":38,"acebase-core":12}],35:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RemovedNodeAddress = exports.NodeAddress = void 0; @@ -6617,7 +6653,7 @@ class RemovedNodeAddress extends NodeAddress { } exports.RemovedNodeAddress = RemovedNodeAddress; -},{}],35:[function(require,module,exports){ +},{}],36:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NodeRevisionError = exports.NodeNotFoundError = void 0; @@ -6628,7 +6664,7 @@ class NodeRevisionError extends Error { } exports.NodeRevisionError = NodeRevisionError; -},{}],36:[function(require,module,exports){ +},{}],37:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NodeInfo = void 0; @@ -6677,7 +6713,7 @@ class NodeInfo { } exports.NodeInfo = NodeInfo; -},{"./node-value-types":38,"acebase-core":12}],37:[function(require,module,exports){ +},{"./node-value-types":39,"acebase-core":12}],38:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NodeLock = exports.NodeLocker = exports.LOCK_STATE = void 0; @@ -6961,7 +6997,7 @@ class NodeLock { } exports.NodeLock = NodeLock; -},{"acebase-core":12}],38:[function(require,module,exports){ +},{"acebase-core":12}],39:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getValueType = exports.getNodeValueType = exports.getValueTypeName = exports.VALUE_TYPES = void 0; @@ -7053,10 +7089,16 @@ function getValueType(value) { } exports.getValueType = getValueType; -},{"acebase-core":12}],39:[function(require,module,exports){ -// Not supported in current environment +},{"acebase-core":12}],40:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.NotSupported = void 0; +class NotSupported { + constructor(context = 'browser') { throw new Error(`This feature is not supported in ${context} context`); } +} +exports.NotSupported = NotSupported; -},{}],40:[function(require,module,exports){ +},{}],41:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.pfs = void 0; @@ -7066,7 +7108,7 @@ class pfs { } exports.pfs = pfs; -},{}],41:[function(require,module,exports){ +},{}],42:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.query = void 0; @@ -7796,7 +7838,25 @@ function query(api, path, query, options = { snapshots: false, include: undefine } exports.query = query; -},{"./async-task-batch":30,"./data-index":39,"./node-errors":35,"./node-value-types":38,"acebase-core":12}],42:[function(require,module,exports){ +},{"./async-task-batch":30,"./data-index":32,"./node-errors":36,"./node-value-types":39,"acebase-core":12}],43:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AceBaseStorage = exports.AceBaseStorageSettings = void 0; +const not_supported_1 = require("../../not-supported"); +/** + * Not supported in browser context + */ +class AceBaseStorageSettings extends not_supported_1.NotSupported { +} +exports.AceBaseStorageSettings = AceBaseStorageSettings; +/** + * Not supported in browser context + */ +class AceBaseStorage extends not_supported_1.NotSupported { +} +exports.AceBaseStorage = AceBaseStorage; + +},{"../../not-supported":40}],44:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createIndex = void 0; @@ -7873,7 +7933,7 @@ async function createIndex(context, path, key, options) { } exports.createIndex = createIndex; -},{"../data-index":39,"../promise-fs":40,"acebase-core":12}],43:[function(require,module,exports){ +},{"../data-index":32,"../promise-fs":41,"acebase-core":12}],45:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CustomStorageHelpers = void 0; @@ -7942,7 +8002,7 @@ class CustomStorageHelpers { } exports.CustomStorageHelpers = CustomStorageHelpers; -},{"acebase-core":12}],44:[function(require,module,exports){ +},{"acebase-core":12}],46:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CustomStorage = exports.CustomStorageNodeInfo = exports.CustomStorageNodeAddress = exports.CustomStorageSettings = exports.CustomStorageTransaction = exports.ICustomStorageNode = exports.ICustomStorageNodeMetaData = exports.CustomStorageHelpers = void 0; @@ -9156,7 +9216,7 @@ class CustomStorage extends index_1.Storage { } exports.CustomStorage = CustomStorage; -},{"../../node-address":34,"../../node-errors":35,"../../node-info":36,"../../node-lock":37,"../../node-value-types":38,"../index":51,"./helpers":43,"acebase-core":12}],45:[function(require,module,exports){ +},{"../../node-address":35,"../../node-errors":36,"../../node-info":37,"../../node-lock":38,"../../node-value-types":39,"../index":53,"./helpers":45,"acebase-core":12}],47:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createIndexedDBInstance = void 0; @@ -9234,7 +9294,7 @@ function createIndexedDBInstance(dbname, init = {}) { } exports.createIndexedDBInstance = createIndexedDBInstance; -},{"..":44,"../../..":31,"./settings":46,"./transaction":47,"acebase-core":12}],46:[function(require,module,exports){ +},{"..":46,"../../..":31,"./settings":48,"./transaction":49,"acebase-core":12}],48:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IndexedDBStorageSettings = void 0; @@ -9278,7 +9338,7 @@ class IndexedDBStorageSettings extends __1.StorageSettings { } exports.IndexedDBStorageSettings = IndexedDBStorageSettings; -},{"../..":51}],47:[function(require,module,exports){ +},{"../..":53}],49:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IndexedDBStorageTransaction = void 0; @@ -9505,7 +9565,7 @@ class IndexedDBStorageTransaction extends __1.CustomStorageTransaction { } exports.IndexedDBStorageTransaction = IndexedDBStorageTransaction; -},{"..":44}],48:[function(require,module,exports){ +},{"..":46}],50:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createLocalStorageInstance = exports.LocalStorageTransaction = exports.LocalStorageSettings = void 0; @@ -9546,7 +9606,7 @@ function createLocalStorageInstance(dbname, init = {}) { } exports.createLocalStorageInstance = createLocalStorageInstance; -},{"..":44,"../../..":31,"./settings":49,"./transaction":50}],49:[function(require,module,exports){ +},{"..":46,"../../..":31,"./settings":51,"./transaction":52}],51:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LocalStorageSettings = void 0; @@ -9588,7 +9648,7 @@ class LocalStorageSettings extends __1.StorageSettings { } exports.LocalStorageSettings = LocalStorageSettings; -},{"../..":51}],50:[function(require,module,exports){ +},{"../..":53}],52:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LocalStorageTransaction = void 0; @@ -9682,7 +9742,7 @@ class LocalStorageTransaction extends __1.CustomStorageTransaction { } exports.LocalStorageTransaction = LocalStorageTransaction; -},{"..":44}],51:[function(require,module,exports){ +},{"..":46}],53:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Storage = exports.StorageSettings = exports.SchemaValidationError = void 0; @@ -11753,14 +11813,50 @@ class Storage extends acebase_core_1.SimpleEventEmitter { } exports.Storage = Storage; -},{"../data-index":39,"../ipc":32,"../node-errors":35,"../node-info":36,"../node-value-types":38,"../promise-fs":40,"./indexes":52,"acebase-core":12}],52:[function(require,module,exports){ +},{"../data-index":32,"../ipc":33,"../node-errors":36,"../node-info":37,"../node-value-types":39,"../promise-fs":41,"./indexes":54,"acebase-core":12}],54:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createIndex = void 0; var create_index_1 = require("./create-index"); Object.defineProperty(exports, "createIndex", { enumerable: true, get: function () { return create_index_1.createIndex; } }); -},{"./create-index":42}],53:[function(require,module,exports){ +},{"./create-index":44}],55:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MSSQLStorage = exports.MSSQLStorageSettings = void 0; +const not_supported_1 = require("../../not-supported"); +/** + * Not supported in browser context + */ +class MSSQLStorageSettings extends not_supported_1.NotSupported { +} +exports.MSSQLStorageSettings = MSSQLStorageSettings; +/** + * Not supported in browser context + */ +class MSSQLStorage extends not_supported_1.NotSupported { +} +exports.MSSQLStorage = MSSQLStorage; + +},{"../../not-supported":40}],56:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SQLiteStorage = exports.SQLiteStorageSettings = void 0; +const not_supported_1 = require("../../not-supported"); +/** + * Not supported in browser context + */ +class SQLiteStorageSettings extends not_supported_1.NotSupported { +} +exports.SQLiteStorageSettings = SQLiteStorageSettings; +/** + * Not supported in browser context + */ +class SQLiteStorage extends not_supported_1.NotSupported { +} +exports.SQLiteStorage = SQLiteStorage; + +},{"../../not-supported":40}],57:[function(require,module,exports){ },{}]},{},[31])(31) }); diff --git a/dist/browser.min.js b/dist/browser.min.js index ee1c4cb..9499f00 100644 --- a/dist/browser.min.js +++ b/dist/browser.min.js @@ -1 +1 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.acebase=f()}})((function(){var define,module,exports;return function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,(function(r){var n=e[i][1][r];return o(n||r)}),p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i{this._ready=true}))}async ready(callback){if(!this._ready){await new Promise((resolve=>this.on("ready",resolve)))}callback===null||callback===void 0?void 0:callback()}get isReady(){return this._ready}setObservable(ObservableImpl){(0,optional_observable_1.setObservable)(ObservableImpl)}ref(path){return new data_reference_1.DataReference(this,path)}get root(){return this.ref("")}query(path){const ref=new data_reference_1.DataReference(this,path);return new data_reference_1.DataReferenceQuery(ref)}get indexes(){return{get:()=>this.api.getIndexes(),create:(path,key,options)=>this.api.createIndex(path,key,options),delete:async filePath=>this.api.deleteIndex(filePath)}}get schema(){return{get:path=>this.api.getSchema(path),set:(path,schema)=>this.api.setSchema(path,schema),all:()=>this.api.getSchemas(),check:(path,value,isUpdate)=>this.api.validateSchema(path,value,isUpdate)}}}exports.AceBaseBase=AceBaseBase},{"./data-reference":8,"./debug":10,"./optional-observable":14,"./simple-colors":21,"./simple-event-emitter":22,"./type-mappings":25}],2:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Api=void 0;class NotImplementedError extends Error{constructor(name){super(`${name} is not implemented`)}}class Api{constructor(){}stats(options){throw new NotImplementedError("stats")}subscribe(path,event,callback,settings){throw new NotImplementedError("subscribe")}unsubscribe(path,event,callback){throw new NotImplementedError("unsubscribe")}update(path,updates,options){throw new NotImplementedError("update")}set(path,value,options){throw new NotImplementedError("set")}get(path,options){throw new NotImplementedError("get")}transaction(path,callback,options){throw new NotImplementedError("transaction")}exists(path){throw new NotImplementedError("exists")}query(path,query,options){throw new NotImplementedError("query")}reflect(path,type,args){throw new NotImplementedError("reflect")}export(path,write,options){throw new NotImplementedError("export")}import(path,read,options){throw new NotImplementedError("import")}createIndex(path,key,options){throw new NotImplementedError("createIndex")}getIndexes(){throw new NotImplementedError("getIndexes")}deleteIndex(filePath){throw new NotImplementedError("deleteIndex")}setSchema(path,schema){throw new NotImplementedError("setSchema")}getSchema(path){throw new NotImplementedError("getSchema")}getSchemas(){throw new NotImplementedError("getSchemas")}validateSchema(path,value,isUpdate){throw new NotImplementedError("validateSchema")}getMutations(filter){throw new NotImplementedError("getMutations")}getChanges(filter){throw new NotImplementedError("getChanges")}}exports.Api=Api},{}],3:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ascii85=void 0;function c(input,length,result){const b=[0,0,0,0,0];for(let i=0;i";return ret}exports.ascii85={encode:function(arr){if(arr instanceof ArrayBuffer){arr=new Uint8Array(arr,0,arr.byteLength)}return encode(arr)},decode:function(input){if(!input.startsWith("<~")||!input.endsWith("~>")){throw new Error("Invalid input string")}input=input.substr(2,input.length-4);const n=input.length,r=[],b=[0,0,0,0,0];let t,x,y,d;for(let i=0;i>>=8;y=t&255;t>>>=8;r.push(t>>>8,t&255,y,x);for(let j=d;j<5;++j,r.pop());i+=4}const data=new Uint8Array(r);return data.buffer.slice(data.byteOffset,data.byteOffset+data.byteLength)}}},{}],4:[function(require,module,exports){"use strict";var _a,_b;Object.defineProperty(exports,"__esModule",{value:true});const pad_1=require("../pad");const env=typeof window==="object"?window:self,globalCount=Object.keys(env).length,mimeTypesLength=(_b=(_a=navigator.mimeTypes)===null||_a===void 0?void 0:_a.length)!==null&&_b!==void 0?_b:0,clientId=(0,pad_1.default)((mimeTypesLength+navigator.userAgent.length).toString(36)+globalCount.toString(36),4);function fingerprint(){return clientId}exports.default=fingerprint},{"../pad":6}],5:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});const fingerprint_1=require("./fingerprint");const pad_1=require("./pad");let c=0;const blockSize=4,base=36,discreteValues=Math.pow(base,blockSize);function randomBlock(){return(0,pad_1.default)((Math.random()*discreteValues<<0).toString(base),blockSize)}function safeCounter(){c=ct2[i]===key))}static isAncestor(ancestor,other){return ancestor.lengthother[i]===key))}static isDescendant(descendant,other){return descendant.length>other.length&&other.every(((key,i)=>descendant[i]===key))}}const isProxy=Symbol("isProxy");class LiveDataProxy{static async create(ref,options){var _a;ref=new data_reference_1.DataReference(ref.db,ref.path);let cache,loaded=false;let latestCursor=options===null||options===void 0?void 0:options.cursor;let proxy;const proxyId=id_1.ID.generate();const clientSubscriptions=[];const clientEventEmitter=new simple_event_emitter_1.SimpleEventEmitter;clientEventEmitter.on("cursor",(cursor=>latestCursor=cursor));clientEventEmitter.on("error",(err=>{console.error(err.message,err.details)}));const applyChange=(keys,newValue)=>{if(keys.length===0){cache=newValue;return true}const allowCreation=false;if(allowCreation){cache=typeof keys[0]==="number"?[]:{}}let target=cache;const trailKeys=keys.slice();while(trailKeys.length>1){const key=trailKeys.shift();if(!(key in target)){if(allowCreation){target[key]=typeof key==="number"?[]:{}}else{return false}}target=target[key]}const prop=trailKeys.shift();if(newValue===null){target instanceof Array?target.splice(prop,1):delete target[prop]}else{target[prop]=newValue}return true};const syncFallback=async()=>{if(!loaded){return}await reload()};const subscription=ref.on("mutations",{syncFallback:syncFallback}).subscribe((async snap=>{var _a;if(!loaded){return}const context=snap.context();const isRemote=((_a=context.acebase_proxy)===null||_a===void 0?void 0:_a.id)!==proxyId;if(!isRemote){return}const mutations=snap.val(false);const proceed=mutations.every((mutation=>{if(!applyChange(mutation.target,mutation.val)){return false}const changeRef=mutation.target.reduce(((ref,key)=>ref.child(key)),ref);const changeSnap=new data_snapshot_1.DataSnapshot(changeRef,mutation.val,false,mutation.prev,snap.context());clientEventEmitter.emit("mutation",{snapshot:changeSnap,isRemote:isRemote});return true}));if(proceed){clientEventEmitter.emit("cursor",context.acebase_cursor);localMutationsEmitter.emit("mutations",{origin:"remote",snap:snap})}else{console.warn(`Cached value of live data proxy on "${ref.path}" appears outdated, will be reloaded`);await reload()}}));let processPromise=Promise.resolve();const mutationQueue=[];const transactions=[];const pushLocalMutations=async()=>{const mutations=[];for(let i=0,m=mutationQueue[0];iRelativeNodeTarget.areEqual(t.target,m.target)||RelativeNodeTarget.isAncestor(t.target,m.target)))){mutationQueue.splice(i,1);i--;mutations.push(m)}}if(mutations.length===0){return}mutations.forEach((mutation=>{mutation.value=(0,utils_1.cloneObject)(getTargetValue(cache,mutation.target))}));process_1.default.nextTick((()=>{const context={acebase_proxy:{id:proxyId,source:"update"}};mutations.forEach((mutation=>{const mutationRef=mutation.target.reduce(((ref,key)=>ref.child(key)),ref);const mutationSnap=new data_snapshot_1.DataSnapshot(mutationRef,mutation.value,false,mutation.previous,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false})}));const snap=new data_snapshot_1.MutationsDataSnapshot(ref,mutations.map((m=>({target:m.target,val:m.value,prev:m.previous}))),context);localMutationsEmitter.emit("mutations",{origin:"local",snap:snap})}));processPromise=mutations.reduce(((mutations,m,i,arr)=>{if(!arr.some((other=>RelativeNodeTarget.isAncestor(other.target,m.target)))){mutations.push(m)}return mutations}),[]).reduce(((updates,m)=>{const target=m.target;if(target.length===0){updates.push({ref:ref,target:target,value:cache,type:"set",previous:m.previous})}else{const parentTarget=target.slice(0,-1);const key=target.slice(-1)[0];const parentRef=parentTarget.reduce(((ref,key)=>ref.child(key)),ref);const parentUpdate=updates.find((update=>update.ref.path===parentRef.path));const cacheValue=getTargetValue(cache,target);const prevValue=m.previous;if(parentUpdate){parentUpdate.value[key]=cacheValue;parentUpdate.previous[key]=prevValue}else{updates.push({ref:parentRef,target:parentTarget,value:{[key]:cacheValue},type:"update",previous:{[key]:prevValue}})}}return updates}),[]).reduce((async(promise,update)=>{const context={acebase_proxy:{id:proxyId,source:update.type}};await promise;await update.ref.context(context)[update.type](update.value).catch((err=>{clientEventEmitter.emit("error",{source:"update",message:`Error processing update of "/${ref.path}"`,details:err});const context={acebase_proxy:{id:proxyId,source:"update-rollback"}};const mutations=[];if(update.type==="set"){setTargetValue(cache,update.target,update.previous);const mutationSnap=new data_snapshot_1.DataSnapshot(update.ref,update.previous,false,update.value,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false});mutations.push({target:update.target,val:update.previous,prev:update.value})}else{Object.keys(update.previous).forEach((key=>{setTargetValue(cache,update.target.concat(key),update.previous[key]);const mutationSnap=new data_snapshot_1.DataSnapshot(update.ref.child(key),update.previous[key],false,update.value[key],context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false});mutations.push({target:update.target.concat(key),val:update.previous[key],prev:update.value[key]})}))}mutations.forEach((m=>{const mutationRef=m.target.reduce(((ref,key)=>ref.child(key)),ref);const mutationSnap=new data_snapshot_1.DataSnapshot(mutationRef,m.val,false,m.prev,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false})}));const snap=new data_snapshot_1.MutationsDataSnapshot(update.ref,mutations,context);localMutationsEmitter.emit("mutations",{origin:"local",snap:snap})}));if(update.ref.cursor){clientEventEmitter.emit("cursor",update.ref.cursor)}}),processPromise);await processPromise};let syncInProgress=false;const syncPromises=[];const syncCompleted=()=>{let resolve;const promise=new Promise((rs=>resolve=rs));syncPromises.push({resolve:resolve});return promise};let processQueueTimeout=null;const scheduleSync=()=>{if(!processQueueTimeout){processQueueTimeout=setTimeout((async()=>{syncInProgress=true;processQueueTimeout=null;await pushLocalMutations();syncInProgress=false;syncPromises.splice(0).forEach((p=>p.resolve()))}),0)}};const flagOverwritten=target=>{if(!mutationQueue.find((m=>RelativeNodeTarget.areEqual(m.target,target)))){mutationQueue.push({target:target,previous:(0,utils_1.cloneObject)(getTargetValue(cache,target))})}scheduleSync()};const localMutationsEmitter=new simple_event_emitter_1.SimpleEventEmitter;const addOnChangeHandler=(target,callback)=>{const isObject=val=>val!==null&&typeof val==="object";const mutationsHandler=async details=>{var _a;const{snap:snap,origin:origin}=details;const context=snap.context();const causedByOurProxy=((_a=context.acebase_proxy)===null||_a===void 0?void 0:_a.id)===proxyId;if(details.origin==="remote"&&causedByOurProxy){console.error("DEV ISSUE: mutationsHandler was called from remote event originating from our own proxy");return}const mutations=snap.val(false).filter((mutation=>mutation.target.slice(0,target.length).every(((key,i)=>target[i]===key))));if(mutations.length===0){return}let newValue,previousValue;const singleMutation=mutations.find((m=>m.target.length<=target.length));if(singleMutation){const trailKeys=target.slice(singleMutation.target.length);newValue=trailKeys.reduce(((val,key)=>!isObject(val)||!(key in val)?null:val[key]),singleMutation.val);previousValue=trailKeys.reduce(((val,key)=>!isObject(val)||!(key in val)?null:val[key]),singleMutation.prev)}else{const currentValue=getTargetValue(cache,target);newValue=(0,utils_1.cloneObject)(currentValue);previousValue=(0,utils_1.cloneObject)(newValue);mutations.forEach((mutation=>{const trailKeys=mutation.target.slice(target.length);for(let i=0,val=newValue,prev=previousValue;i{let keepSubscription=true;try{keepSubscription=false!==callback(Object.freeze(newValue),Object.freeze(previousValue),!causedByOurProxy,context)}catch(err){clientEventEmitter.emit("error",{source:origin==="remote"?"remote_update":"local_update",message:"Error running subscription callback",details:err})}if(keepSubscription===false){stop()}}))};localMutationsEmitter.on("mutations",mutationsHandler);const stop=()=>{localMutationsEmitter.off("mutations").off("mutations",mutationsHandler);clientSubscriptions.splice(clientSubscriptions.findIndex((cs=>cs.stop===stop)),1)};clientSubscriptions.push({target:target,stop:stop});return{stop:stop}};const handleFlag=(flag,target,args)=>{if(flag==="write"){return flagOverwritten(target)}else if(flag==="onChange"){return addOnChangeHandler(target,args.callback)}else if(flag==="subscribe"||flag==="observe"){const subscribe=subscriber=>{const currentValue=getTargetValue(cache,target);subscriber.next(currentValue);const subscription=addOnChangeHandler(target,(value=>{subscriber.next(value)}));return function unsubscribe(){subscription.stop()}};if(flag==="subscribe"){return subscribe}const Observable=(0,optional_observable_1.getObservable)();return new Observable(subscribe)}else if(flag==="transaction"){const hasConflictingTransaction=transactions.some((t=>RelativeNodeTarget.areEqual(target,t.target)||RelativeNodeTarget.isAncestor(target,t.target)||RelativeNodeTarget.isDescendant(target,t.target)));if(hasConflictingTransaction){return Promise.reject(new Error("Cannot start transaction because it conflicts with another transaction"))}return new Promise((async resolve=>{const hasPendingMutations=mutationQueue.some((m=>RelativeNodeTarget.areEqual(target,m.target)||RelativeNodeTarget.isAncestor(target,m.target)));if(hasPendingMutations){if(!syncInProgress){scheduleSync()}await syncCompleted()}const tx={target:target,status:"started",transaction:null};transactions.push(tx);tx.transaction={get status(){return tx.status},get completed(){return tx.status!=="started"},get mutations(){return mutationQueue.filter((m=>RelativeNodeTarget.areEqual(tx.target,m.target)||RelativeNodeTarget.isAncestor(tx.target,m.target)))},get hasMutations(){return this.mutations.length>0},async commit(){if(this.completed){throw new Error(`Transaction has completed already (status '${tx.status}')`)}tx.status="finished";transactions.splice(transactions.indexOf(tx),1);if(syncInProgress){await syncCompleted()}scheduleSync();await syncCompleted()},rollback(){if(this.completed){throw new Error(`Transaction has completed already (status '${tx.status}')`)}tx.status="canceled";const mutations=[];for(let i=0;i{if(m.target.length===0){cache=m.previous}else{setTargetValue(cache,m.target,m.previous)}}));transactions.splice(transactions.indexOf(tx),1)}};resolve(tx.transaction)}))}};const snap=await ref.get({cache_mode:"allow",cache_cursor:options===null||options===void 0?void 0:options.cursor});if(snap.context().acebase_origin!=="cache"){clientEventEmitter.emit("cursor",(_a=ref.cursor)!==null&&_a!==void 0?_a:null)}loaded=true;cache=snap.val();if(cache===null&&typeof(options===null||options===void 0?void 0:options.defaultValue)!=="undefined"){cache=options.defaultValue;const context={acebase_proxy:{id:proxyId,source:"default"}};await ref.context(context).set(cache)}proxy=createProxy({root:{ref:ref,get cache(){return cache}},target:[],id:proxyId,flag:handleFlag});const assertProxyAvailable=()=>{if(proxy===null){throw new Error("Proxy was destroyed")}};const reload=async()=>{assertProxyAvailable();mutationQueue.splice(0);const snap=await ref.get({allow_cache:false});const oldVal=cache,newVal=snap.val();cache=newVal;const mutations=(0,utils_1.getMutations)(oldVal,newVal);if(mutations.length===0){return}const context=snap.context();context.acebase_proxy={id:proxyId,source:"reload"};mutations.forEach((m=>{const targetRef=getTargetRef(ref,m.target);const newSnap=new data_snapshot_1.DataSnapshot(targetRef,m.val,m.val===null,m.prev,context);clientEventEmitter.emit("mutation",{snapshot:newSnap,isRemote:true})}));const mutationsSnap=new data_snapshot_1.MutationsDataSnapshot(ref,mutations,context);localMutationsEmitter.emit("mutations",{origin:"local",snap:mutationsSnap})};return{async destroy(){await processPromise;const promises=[subscription.stop(),...clientSubscriptions.map((cs=>cs.stop()))];await Promise.all(promises);["cursor","mutation","error"].forEach((event=>clientEventEmitter.off(event)));cache=null;proxy=null},stop(){this.destroy()},get value(){assertProxyAvailable();return proxy},get hasValue(){assertProxyAvailable();return cache!==null},set value(val){assertProxyAvailable();if(val!==null&&typeof val==="object"&&val[isProxy]){val=val.valueOf()}flagOverwritten([]);cache=val},get ref(){return ref},get cursor(){return latestCursor},reload:reload,onMutation(callback){assertProxyAvailable();clientEventEmitter.off("mutation");clientEventEmitter.on("mutation",(({snapshot:snapshot,isRemote:isRemote})=>{try{callback(snapshot,isRemote)}catch(err){clientEventEmitter.emit("error",{source:"mutation_callback",message:"Error in dataproxy onMutation callback",details:err})}}))},onError(callback){assertProxyAvailable();clientEventEmitter.off("error");clientEventEmitter.on("error",(err=>{try{callback(err)}catch(err){console.error(`Error in dataproxy onError callback: ${err.message}`)}}))},on(event,callback){clientEventEmitter.on(event,callback)},off(event,callback){clientEventEmitter.off(event,callback)}}}}exports.LiveDataProxy=LiveDataProxy;function getTargetValue(obj,target){let val=obj;for(const key of target){val=typeof val==="object"&&val!==null&&key in val?val[key]:null}return val}function setTargetValue(obj,target,value){if(target.length===0){throw new Error("Cannot update root target, caller must do that itself!")}const targetObject=target.slice(0,-1).reduce(((obj,key)=>obj[key]),obj);const prop=target.slice(-1)[0];if(value===null||typeof value==="undefined"){targetObject instanceof Array?targetObject.splice(prop,1):delete targetObject[prop]}else{targetObject[prop]=value}}function getTargetRef(ref,target){const path=path_info_1.PathInfo.get(ref.path).childPath(target);return new data_reference_1.DataReference(ref.db,path)}function createProxy(context){const targetRef=getTargetRef(context.root.ref,context.target);const childProxies=[];const handler={get(target,prop,receiver){target=getTargetValue(context.root.cache,context.target);if(typeof prop==="symbol"){if(prop.toString()===Symbol.iterator.toString()){prop="values"}else if(prop.toString()===isProxy.toString()){return true}else{return Reflect.get(target,prop,receiver)}}if(prop==="valueOf"){return function valueOf(){return target}}if(target===null||typeof target!=="object"){throw new Error(`Cannot read property "${prop}" of ${target}. Value of path "/${targetRef.path}" is not an object (anymore)`)}if(target instanceof Array&&typeof prop==="string"&&/^[0-9]+$/.test(prop)){prop=parseInt(prop)}const value=target[prop];if(value===null){delete target[prop];return}const childProxy=childProxies.find((proxy=>proxy.prop===prop));if(childProxy){if(childProxy.typeof===typeof value){return childProxy.value}childProxies.splice(childProxies.indexOf(childProxy),1)}const proxifyChildValue=prop=>{const value=target[prop];const childProxy=childProxies.find((child=>child.prop===prop));if(childProxy){if(childProxy.typeof===typeof value){return childProxy.value}childProxies.splice(childProxies.indexOf(childProxy),1)}if(typeof value!=="object"){return value}const newChildProxy=createProxy({root:context.root,target:context.target.concat(prop),id:context.id,flag:context.flag});childProxies.push({typeof:typeof value,prop:prop,value:newChildProxy});return newChildProxy};const unproxyValue=value=>value!==null&&typeof value==="object"&&value[isProxy]?value.getTarget():value;if(["string","number","boolean"].includes(typeof value)||value instanceof Date||value instanceof path_reference_1.PathReference||value instanceof ArrayBuffer||typeof value==="object"&&"buffer"in value){return value}const isArray=target instanceof Array;if(prop==="toString"){return function toString(){return`[LiveDataProxy for "${targetRef.path}"]`}}if(typeof value==="undefined"){if(prop==="push"){return function push(item){const childRef=targetRef.push();context.flag("write",context.target.concat(childRef.key));target[childRef.key]=item;return childRef.key}}if(prop==="getTarget"){return function(warn=true){warn&&console.warn("Use getTarget with caution - any changes will not be synchronized!");return target}}if(prop==="getRef"){return function getRef(){const ref=getTargetRef(context.root.ref,context.target);return ref}}if(prop==="forEach"){return function forEach(callback){const keys=Object.keys(target);let stop=false;for(let i=0;!stop&&iproxifyChildValue(key)));if(sortFn){arr.sort(sortFn)}return arr}}if(prop==="onChanged"){return function onChanged(callback){return context.flag("onChange",context.target,{callback:callback})}}if(prop==="subscribe"){return function subscribe(){return context.flag("subscribe",context.target)}}if(prop==="getObservable"){return function getObservable(){return context.flag("observe",context.target)}}if(prop==="getOrderedCollection"){return function getOrderedCollection(orderProperty,orderIncrement){return new OrderedCollectionProxy(this,orderProperty,orderIncrement)}}if(prop==="startTransaction"){return function startTransaction(){return context.flag("transaction",context.target)}}if(prop==="remove"&&!isArray){return function remove(){if(context.target.length===0){throw new Error("Can't remove proxy root value")}const parent=getTargetValue(context.root.cache,context.target.slice(0,-1));const key=context.target.slice(-1)[0];context.flag("write",context.target);delete parent[key]}}return}else if(typeof value==="function"){if(isArray){const writeArray=action=>{context.flag("write",context.target);return action()};const cleanArrayValues=values=>values.map((value=>{value=unproxyValue(value);removeVoidProperties(value);return value}));if(prop==="push"){return function push(...items){items=cleanArrayValues(items);return writeArray((()=>target.push(...items)))}}if(prop==="pop"){return function pop(){return writeArray((()=>target.pop()))}}if(prop==="splice"){return function splice(start,deleteCount,...items){items=cleanArrayValues(items);return writeArray((()=>target.splice(start,deleteCount,...items)))}}if(prop==="shift"){return function shift(){return writeArray((()=>target.shift()))}}if(prop==="unshift"){return function unshift(...items){items=cleanArrayValues(items);return writeArray((()=>target.unshift(...items)))}}if(prop==="sort"){return function sort(compareFn){return writeArray((()=>target.sort(compareFn)))}}if(prop==="reverse"){return function reverse(){return writeArray((()=>target.reverse()))}}if(["indexOf","lastIndexOf"].includes(prop)){return function indexOf(item,start){if(item!==null&&typeof item==="object"&&item[isProxy]){item=item.getTarget(false)}return target[prop](item,start)}}if(["forEach","every","some","filter","map"].includes(prop)){return function iterate(callback){return target[prop](((value,i)=>callback(proxifyChildValue(i),i,proxy)))}}if(["reduce","reduceRight"].includes(prop)){return function reduce(callback,initialValue){return target[prop](((prev,value,i)=>callback(prev,proxifyChildValue(i),i,proxy)),initialValue)}}if(["find","findIndex"].includes(prop)){return function find(callback){let value=target[prop](((value,i)=>callback(proxifyChildValue(i),i,proxy)));if(prop==="find"&&value){const index=target.indexOf(value);value=proxifyChildValue(index)}return value}}if(["values","entries","keys"].includes(prop)){return function*generator(){for(let i=0;itypeof key==="number"))){context.flag("write",context.target.slice(0,context.target.findIndex((key=>typeof key==="number"))))}else if(target instanceof Array){context.flag("write",context.target)}else{context.flag("write",context.target.concat(prop))}if(value===null){delete target[prop]}else{removeVoidProperties(value);target[prop]=value}return true},deleteProperty(target,prop){target=getTargetValue(context.root.cache,context.target);if(target===null){throw new Error(`Cannot delete property ${prop.toString()} of null`)}if(typeof prop==="symbol"){return Reflect.deleteProperty(target,prop)}if(!(prop in target)){return true}context.flag("write",context.target.concat(prop));delete target[prop];return true},ownKeys(target){target=getTargetValue(context.root.cache,context.target);return Reflect.ownKeys(target)},has(target,prop){target=getTargetValue(context.root.cache,context.target);return Reflect.has(target,prop)},getOwnPropertyDescriptor(target,prop){target=getTargetValue(context.root.cache,context.target);const descriptor=Reflect.getOwnPropertyDescriptor(target,prop);if(descriptor){descriptor.configurable=true}return descriptor},getPrototypeOf(target){target=getTargetValue(context.root.cache,context.target);return Reflect.getPrototypeOf(target)}};const proxy=new Proxy({},handler);return proxy}function removeVoidProperties(obj){if(typeof obj!=="object"){return}Object.keys(obj).forEach((key=>{const val=obj[key];if(val===null||typeof val==="undefined"){delete obj[key]}else if(typeof val==="object"){removeVoidProperties(val)}}))}function proxyAccess(proxiedValue){if(typeof proxiedValue!=="object"||!proxiedValue[isProxy]){throw new Error("Given value is not proxied. Make sure you are referencing the value through the live data proxy.")}return proxiedValue}exports.proxyAccess=proxyAccess;class OrderedCollectionProxy{constructor(collection,orderProperty="order",orderIncrement=10){this.collection=collection;this.orderProperty=orderProperty;this.orderIncrement=orderIncrement;if(typeof collection!=="object"||!collection[isProxy]){throw new Error("Collection is not proxied")}if(collection.valueOf()instanceof Array){throw new Error("Collection is an array, not an object collection")}if(!Object.keys(collection).every((key=>typeof collection[key]==="object"))){throw new Error("Collection has non-object children")}const ok=Object.keys(collection).every((key=>typeof collection[key][orderProperty]==="number"));if(!ok){const keys=Object.keys(collection);for(let i=0;i{const subscription=this.getObservable().subscribe((()=>{const newArray=this.getArray();subscriber.next(newArray)}));return function unsubscribe(){subscription.unsubscribe()}}))}getArray(){const arr=proxyAccess(this.collection).toArray(((a,b)=>a[this.orderProperty]-b[this.orderProperty]));return arr}add(newItem,index,from){const item=newItem;const arr=this.getArray();let minOrder=Number.POSITIVE_INFINITY,maxOrder=Number.NEGATIVE_INFINITY;for(let i=0;ithis.collection[key]===item));if(!fromKey){throw new Error("item not found in collection")}if(from===index){return{key:fromKey,index:index}}if(Math.abs(from-index)===1){const otherItem=arr[index];const otherOrder=otherItem[this.orderProperty];otherItem[this.orderProperty]=item[this.orderProperty];item[this.orderProperty]=otherOrder;return{key:fromKey,index:index}}else{arr.splice(from,1)}}if(typeof index!=="number"||index>=arr.length){index=arr.length;item[this.orderProperty]=arr.length==0?0:maxOrder+this.orderIncrement}else if(index===0){item[this.orderProperty]=arr.length==0?0:minOrder-this.orderIncrement}else{const orders=arr.map((item=>item[this.orderProperty]));const gap=orders[index]-orders[index-1];if(gap>1){item[this.orderProperty]=orders[index]-Math.floor(gap/2)}else{arr.splice(index,0,item);for(let i=0;ithis.collection[key]===item));if(!key){throw new Error("Cannot find target object to delete")}this.collection[key]=null;return{key:key,index:index}}move(fromIndex,toIndex){const arr=this.getArray();return this.add(arr[fromIndex],toIndex,fromIndex)}sort(sortFn){const arr=this.getArray();arr.sort(sortFn);for(let i=0;i{newContext[key]=context[key]}))}this[_private].context=newContext;return this}else if(typeof context==="undefined"){console.warn("Use snap.context() instead of snap.ref.context() to get updating context in event callbacks");return currentContext}else{throw new Error("Invalid context argument")}}get cursor(){return this[_private].cursor}set cursor(value){var _a;this[_private].cursor=value;(_a=this.onCursor)===null||_a===void 0?void 0:_a.call(this,value)}get path(){return this[_private].path}get key(){const key=this[_private].key;return typeof key==="number"?`[${key}]`:key}get index(){const key=this[_private].key;if(typeof key!=="number"){throw new Error(`"${key}" is not a number`)}return key}get parent(){const currentPath=path_info_1.PathInfo.fillVariables2(this.path,this.vars);const info=path_info_1.PathInfo.get(currentPath);if(info.parentPath===null){return null}return new DataReference(this.db,info.parentPath).context(this[_private].context)}get vars(){return this[_private].vars}child(childPath){childPath=typeof childPath==="number"?childPath:childPath.replace(/^\/|\/$/g,"");const currentPath=path_info_1.PathInfo.fillVariables2(this.path,this.vars);const targetPath=path_info_1.PathInfo.getChildPath(currentPath,childPath);return new DataReference(this.db,targetPath).context(this[_private].context)}async set(value,onComplete){try{if(this.isWildcardPath){throw new Error(`Cannot set the value of wildcard path "/${this.path}"`)}if(this.parent===null){throw new Error("Cannot set the root object. Use update, or set individual child properties")}if(typeof value==="undefined"){throw new TypeError(`Cannot store undefined value in "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}value=this.db.types.serialize(this.path,value);const{cursor:cursor}=await this.db.api.set(this.path,value,{context:this[_private].context});this.cursor=cursor;if(typeof onComplete==="function"){try{onComplete(null,this)}catch(err){console.error("Error in onComplete callback:",err)}}}catch(err){if(typeof onComplete==="function"){try{onComplete(err,this)}catch(err){console.error("Error in onComplete callback:",err)}}else{throw err}}return this}async update(updates,onComplete){try{if(this.isWildcardPath){throw new Error(`Cannot update the value of wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}if(typeof updates!=="object"||updates instanceof Array||updates instanceof ArrayBuffer||updates instanceof Date){await this.set(updates)}else if(Object.keys(updates).length===0){console.warn(`update called on path "/${this.path}", but there is nothing to update`)}else{updates=this.db.types.serialize(this.path,updates);const{cursor:cursor}=await this.db.api.update(this.path,updates,{context:this[_private].context});this.cursor=cursor}if(typeof onComplete==="function"){try{onComplete(null,this)}catch(err){console.error("Error in onComplete callback:",err)}}}catch(err){if(typeof onComplete==="function"){try{onComplete(err,this)}catch(err){console.error("Error in onComplete callback:",err)}}else{throw err}}return this}async transaction(callback){if(this.isWildcardPath){throw new Error(`Cannot start a transaction on wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}let throwError;const cb=currentValue=>{currentValue=this.db.types.deserialize(this.path,currentValue);const snap=new data_snapshot_1.DataSnapshot(this,currentValue);let newValue;try{newValue=callback(snap)}catch(err){throwError=err;return}if(newValue instanceof Promise){return newValue.then((val=>this.db.types.serialize(this.path,val))).catch((err=>{throwError=err;return}))}else{return this.db.types.serialize(this.path,newValue)}};const{cursor:cursor}=await this.db.api.transaction(this.path,cb,{context:this[_private].context});this.cursor=cursor;if(throwError){throw throwError}return this}on(event,callback,cancelCallback){if(this.path===""&&["value","child_changed"].includes(event)){console.warn("WARNING: Listening for value and child_changed events on the root node is a bad practice. These events require loading of all data (value event), or potentially lots of data (child_changed event) each time they are fired")}let eventPublisher=null;const eventStream=new subscription_1.EventStream((publisher=>{eventPublisher=publisher}));const cb={event:event,stream:eventStream,userCallback:typeof callback==="function"&&callback,ourCallback:(err,path,newValue,oldValue,eventContext)=>{if(err){this.db.debug.error(`Error getting data for event ${event} on path "${path}"`,err);return}const ref=this.db.ref(path);ref[_private].vars=path_info_1.PathInfo.extractVariables(this.path,path);let callbackObject;if(event.startsWith("notify_")){callbackObject=ref.context(eventContext||{})}else{const values={previous:this.db.types.deserialize(path,oldValue),current:this.db.types.deserialize(path,newValue)};if(event==="child_removed"){callbackObject=new data_snapshot_1.DataSnapshot(ref,values.previous,true,values.previous,eventContext)}else if(event==="mutations"){callbackObject=new data_snapshot_1.MutationsDataSnapshot(ref,values.current,eventContext)}else{const isRemoved=event==="mutated"&&values.current===null;callbackObject=new data_snapshot_1.DataSnapshot(ref,values.current,isRemoved,values.previous,eventContext)}}eventPublisher.publish(callbackObject);if(eventContext===null||eventContext===void 0?void 0:eventContext.acebase_cursor){this.cursor=eventContext.acebase_cursor}}};this[_private].callbacks.push(cb);const subscribe=()=>{if(typeof callback==="function"){eventStream.subscribe(callback,((activated,cancelReason)=>{if(!activated){cancelCallback&&cancelCallback(cancelReason)}}))}const advancedOptions=typeof callback==="object"?callback:{newOnly:!callback};if(typeof advancedOptions.newOnly!=="boolean"){advancedOptions.newOnly=false}if(this.isWildcardPath){advancedOptions.newOnly=true}const cancelSubscription=err=>{const callbacks=this[_private].callbacks;callbacks.splice(callbacks.indexOf(cb),1);this.db.api.unsubscribe(this.path,event,cb.ourCallback);this.db.debug.error(`Subscription "${event}" on path "/${this.path}" canceled because of an error: ${err.message}`);eventPublisher.cancel(err.message)};const authorized=this.db.api.subscribe(this.path,event,cb.ourCallback,{newOnly:advancedOptions.newOnly,cancelCallback:cancelSubscription,syncFallback:advancedOptions.syncFallback});const allSubscriptionsStoppedCallback=()=>{const callbacks=this[_private].callbacks;callbacks.splice(callbacks.indexOf(cb),1);return this.db.api.unsubscribe(this.path,event,cb.ourCallback)};if(authorized instanceof Promise){authorized.then((()=>{eventPublisher.start(allSubscriptionsStoppedCallback)})).catch(cancelSubscription)}else{eventPublisher.start(allSubscriptionsStoppedCallback)}if(!advancedOptions.newOnly){if(event==="value"){this.get((snap=>{eventPublisher.publish(snap)}))}else if(event==="child_added"){this.get((snap=>{const val=snap.val();if(val===null||typeof val!=="object"){return}Object.keys(val).forEach((key=>{const childSnap=new data_snapshot_1.DataSnapshot(this.child(key),val[key]);eventPublisher.publish(childSnap)}))}))}else if(event==="notify_child_added"){const step=100,limit=step;let skip=0;const more=async()=>{const children=await this.db.api.reflect(this.path,"children",{limit:limit,skip:skip});children.list.forEach((child=>{const childRef=this.child(child.key);eventPublisher.publish(childRef)}));if(children.more){skip+=step;more()}};more()}}};if(this.db.isReady){subscribe()}else{this.db.ready(subscribe)}return eventStream}off(event,callback){const subscriptions=this[_private].callbacks;const stopSubs=subscriptions.filter((sub=>(!event||sub.event===event)&&(!callback||sub.userCallback===callback)));if(stopSubs.length===0){this.db.debug.warn(`Can't find event subscriptions to stop (path: "${this.path}", event: ${event||"(any)"}, callback: ${callback})`)}stopSubs.forEach((sub=>{sub.stream.stop()}));return this}get(optionsOrCallback,callback){if(!this.db.isReady){const promise=this.db.ready().then((()=>this.get(optionsOrCallback,callback)));return typeof optionsOrCallback!=="function"&&typeof callback!=="function"?promise:undefined}callback=typeof optionsOrCallback==="function"?optionsOrCallback:typeof callback==="function"?callback:undefined;if(this.isWildcardPath){const error=new Error(`Cannot get value of wildcard path "/${this.path}". Use .query() instead`);if(typeof callback==="function"){throw error}return Promise.reject(error)}const options=new DataRetrievalOptions(typeof optionsOrCallback==="object"?optionsOrCallback:{cache_mode:"allow"});const promise=this.db.api.get(this.path,options).then((result=>{var _a;const isNewApiResult="context"in result&&"value"in result;if(!isNewApiResult){console.warn("AceBase api.get method returned an old response value. Update your acebase or acebase-client package");result={value:result,context:{}}}const value=this.db.types.deserialize(this.path,result.value);const snapshot=new data_snapshot_1.DataSnapshot(this,value,undefined,undefined,result.context);if((_a=result.context)===null||_a===void 0?void 0:_a.acebase_cursor){this.cursor=result.context.acebase_cursor}return snapshot}));if(callback){promise.then(callback).catch((err=>{console.error("Uncaught error:",err)}));return}else{return promise}}once(event,options){if(event==="value"&&!this.isWildcardPath){return this.get(options)}return new Promise((resolve=>{const callback=snap=>{this.off(event,callback);resolve(snap)};this.on(event,callback)}))}push(value,onComplete){if(this.isWildcardPath){const error=new Error(`Cannot push to wildcard path "/${this.path}"`);if(typeof value==="undefined"||typeof onComplete==="function"){throw error}return Promise.reject(error)}const id=id_1.ID.generate();const ref=this.child(id);ref[_private].pushed=true;if(typeof value!=="undefined"){return ref.set(value,onComplete).then((()=>ref))}else{return ref}}async remove(){if(this.isWildcardPath){throw new Error(`Cannot remove wildcard path "/${this.path}". Use query().remove instead`)}if(this.parent===null){throw new Error("Cannot remove the root node")}return this.set(null)}async exists(){if(this.isWildcardPath){throw new Error(`Cannot check wildcard path "/${this.path}" existence`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.exists(this.path)}get isWildcardPath(){return this.path.indexOf("*")>=0||this.path.indexOf("$")>=0}query(){return new DataReferenceQuery(this)}async count(){const info=await this.reflect("info",{child_count:true});return info.children.count}async reflect(type,args){if(this.isWildcardPath){throw new Error(`Cannot reflect on wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.reflect(this.path,type,args)}async export(write,options={format:"json",type_safe:true}){if(this.isWildcardPath){throw new Error(`Cannot export wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}const writeFn=typeof write==="function"?write:write.write.bind(write);return this.db.api.export(this.path,writeFn,options)}async import(read,options={format:"json",suppress_events:false}){if(this.isWildcardPath){throw new Error(`Cannot import to wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.import(this.path,read,options)}proxy(options){const isOptionsArg=typeof options==="object"&&(typeof options.cursor!=="undefined"||typeof options.defaultValue!=="undefined");if(typeof options!=="undefined"&&!isOptionsArg){this.db.debug.warn("Warning: live data proxy is being initialized with a deprecated method signature. Use ref.proxy(options) instead of ref.proxy(defaultValue)");options={defaultValue:options}}return data_proxy_1.LiveDataProxy.create(this,options)}observe(options){if(options){throw new Error("observe does not support data retrieval options yet")}if(this.isWildcardPath){throw new Error(`Cannot observe wildcard path "/${this.path}"`)}const Observable=(0,optional_observable_1.getObservable)();return new Observable((observer=>{let cache,resolved=false;let promise=this.get(options).then((snap=>{resolved=true;cache=snap.val();observer.next(cache)}));const updateCache=snap=>{if(!resolved){promise=promise.then((()=>updateCache(snap)));return}const mutatedPath=snap.ref.path;if(mutatedPath===this.path){cache=snap.val();return observer.next(cache)}const trailKeys=path_info_1.PathInfo.getPathKeys(mutatedPath).slice(path_info_1.PathInfo.getPathKeys(this.path).length);let target=cache;while(trailKeys.length>1){const key=trailKeys.shift();if(!(key in target)){target[key]=typeof trailKeys[0]==="number"?[]:{}}target=target[key]}const prop=trailKeys.shift();const newValue=snap.val();if(newValue===null){target instanceof Array&&typeof prop==="number"?target.splice(prop,1):delete target[prop]}else{target[prop]=newValue}observer.next(cache)};this.on("mutated",updateCache);return()=>{this.off("mutated",updateCache)}}))}async forEach(callbackOrOptions,callback){let options;if(typeof callbackOrOptions==="function"){callback=callbackOrOptions}else{options=callbackOrOptions}if(typeof callback!=="function"){throw new TypeError("No callback function given")}const info=await this.reflect("children",{limit:0,skip:0});const summary={canceled:false,total:info.list.length,processed:0};for(let i=0;ithis.get(optionsOrCallback,callback)));return typeof optionsOrCallback!=="function"&&typeof callback!=="function"?promise:undefined}callback=typeof optionsOrCallback==="function"?optionsOrCallback:typeof callback==="function"?callback:undefined;const options=new QueryDataRetrievalOptions(typeof optionsOrCallback==="object"?optionsOrCallback:{snapshots:true,cache_mode:"allow"});options.allow_cache=options.cache_mode!=="bypass";options.eventHandler=ev=>{if(!this[_private].events[ev.name]){return false}const listeners=this[_private].events[ev.name];if(typeof listeners!=="object"||listeners.length===0){return false}if(["add","change","remove"].includes(ev.name)){const ref=new DataReference(this.ref.db,ev.path);const eventData={name:ev.name};if(options.snapshots&&ev.name!=="remove"){const val=db.types.deserialize(ev.path,ev.value);eventData.snapshot=new data_snapshot_1.DataSnapshot(ref,val,false)}else{eventData.ref=ref}ev=eventData}listeners.forEach((callback=>{try{callback(ev)}catch(e){}}))};options.monitor={add:false,change:false,remove:false};if(this[_private].events){if(this[_private].events["add"]&&this[_private].events["add"].length>0){options.monitor.add=true}if(this[_private].events["change"]&&this[_private].events["change"].length>0){options.monitor.change=true}if(this[_private].events["remove"]&&this[_private].events["remove"].length>0){options.monitor.remove=true}}this.stop();const db=this.ref.db;return db.api.query(this.ref.path,this[_private],options).catch((err=>{throw new Error(err)})).then((res=>{const{stop:stop}=res;let{results:results,context:context}=res;this.stop=async()=>{await stop()};if(!("results"in res&&"context"in res)){console.warn("Query results missing context. Update your acebase and/or acebase-client packages");results=res,context={}}if(options.snapshots){const snaps=results.map((result=>{const val=db.types.deserialize(result.path,result.val);return new data_snapshot_1.DataSnapshot(db.ref(result.path),val,false,undefined,context)}));return DataSnapshotsArray.from(snaps)}else{const refs=results.map((path=>db.ref(path)));return DataReferencesArray.from(refs)}})).then((results=>{callback&&callback(results);return results}))}async stop(){}getRefs(callback){return this.get({snapshots:false},callback)}find(){return this.get({snapshots:false})}async count(){const refs=await this.find();return refs.length}async exists(){const originalTake=this[_private].take;const p=this.take(1).find();this.take(originalTake);const refs=await p;return refs.length!==0}async remove(callback){const refs=await this.find();const parentUpdates=refs.reduce(((parents,ref)=>{const parent=parents[ref.parent.path];if(!parent){parents[ref.parent.path]=[ref]}else{parent.push(ref)}return parents}),{});const db=this.ref.db;const promises=Object.keys(parentUpdates).map((async parentPath=>{const updates=refs.reduce(((updates,ref)=>{updates[ref.key]=null;return updates}),{});const ref=db.ref(parentPath);try{await ref.update(updates);return{ref:ref,success:true}}catch(error){return{ref:ref,success:false,error:error}}}));const results=await Promise.all(promises);callback&&callback(results);return results}on(event,callback){if(!this[_private].events[event]){this[_private].events[event]=[]}this[_private].events[event].push(callback);return this}off(event,callback){if(typeof event==="undefined"){this[_private].events={};return this}if(!this[_private].events[event]){return this}if(typeof callback==="undefined"){delete this[_private].events[event];return this}const index=this[_private].events[event].indexOf(callback);if(!~index){return this}this[_private].events[event].splice(index,1);return this}async forEach(callbackOrOptions,callback){let options;if(typeof callbackOrOptions==="function"){callback=callbackOrOptions}else{options=callbackOrOptions}if(typeof callback!=="function"){throw new TypeError("No callback function given")}const refs=await this.find();const summary={canceled:false,total:refs.length,processed:0};for(let i=0;iarr[i]=snap));return arr}getValues(){return this.map((snap=>snap.val()))}}exports.DataSnapshotsArray=DataSnapshotsArray;class DataReferencesArray extends Array{static from(refs){const arr=new DataReferencesArray(refs.length);refs.forEach(((ref,i)=>arr[i]=ref));return arr}getPaths(){return this.map((ref=>ref.path))}}exports.DataReferencesArray=DataReferencesArray},{"./data-proxy":7,"./data-snapshot":9,"./id":11,"./optional-observable":14,"./path-info":16,"./subscription":23}],9:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.MutationsDataSnapshot=exports.DataSnapshot=void 0;const path_info_1=require("./path-info");function getChild(snapshot,path,previous=false){if(!snapshot.exists()){return null}let child=previous?snapshot.previous():snapshot.val();if(typeof path==="number"){return child[path]}path_info_1.PathInfo.getPathKeys(path).every((key=>{child=child[key];return typeof child!=="undefined"}));return child||null}function getChildren(snapshot){if(!snapshot.exists()){return[]}const value=snapshot.val();if(value instanceof Array){return new Array(value.length).map(((v,i)=>i))}if(typeof value==="object"){return Object.keys(value)}return[]}class DataSnapshot{constructor(ref,value,isRemoved=false,prevValue,context){this.ref=ref;this.val=()=>value;this.previous=()=>prevValue;this.exists=()=>{if(isRemoved){return false}return value!==null&&typeof value!=="undefined"};this.context=()=>context||{}}exists(){return false}static for(ref,value){return new DataSnapshot(ref,value)}child(path){const val=getChild(this,path,false);const prev=getChild(this,path,true);return new DataSnapshot(this.ref.child(path),val,false,prev)}hasChild(path){return getChild(this,path)!==null}hasChildren(){return getChildren(this).length>0}numChildren(){return getChildren(this).length}forEach(callback){const value=this.val();const prev=this.previous();return getChildren(this).every((key=>{const snap=new DataSnapshot(this.ref.child(key),value[key],false,prev[key]);return callback(snap)}))}get key(){return this.ref.key}}exports.DataSnapshot=DataSnapshot;class MutationsDataSnapshot extends DataSnapshot{constructor(ref,mutations,context){super(ref,mutations,false,undefined,context);this.previous=()=>{throw new Error("Iterate values to get previous values for each mutation")};this.val=(warn=true)=>{if(warn){console.warn("Unless you know what you are doing, it is best not to use the value of a mutations snapshot directly. Use child methods and forEach to iterate the mutations instead")}return mutations}}forEach(callback){const mutations=this.val();return mutations.every((mutation=>{const ref=mutation.target.reduce(((ref,key)=>ref.child(key)),this.ref);const snap=new DataSnapshot(ref,mutation.val,false,mutation.prev);return callback(snap)}))}child(index){if(typeof index!=="number"){throw new Error("child index must be a number")}const mutation=this.val()[index];const ref=mutation.target.reduce(((ref,key)=>ref.child(key)),this.ref);return new DataSnapshot(ref,mutation.val,false,mutation.prev)}}exports.MutationsDataSnapshot=MutationsDataSnapshot},{"./path-info":16}],10:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DebugLogger=void 0;const process_1=require("./process");const noop=()=>{};class DebugLogger{constructor(level="log",prefix=""){this.level=level;this.prefix=prefix;this.setLevel(level)}setLevel(level){const prefix=this.prefix?this.prefix+" %s":"";this.verbose=["verbose"].includes(level)?prefix?console.log.bind(console,prefix):console.log.bind(console):noop;this.log=["verbose","log"].includes(level)?prefix?console.log.bind(console,prefix):console.log.bind(console):noop;this.warn=["verbose","log","warn"].includes(level)?prefix?console.warn.bind(console,prefix):console.warn.bind(console):noop;this.error=["verbose","log","warn","error"].includes(level)?prefix?console.error.bind(console,prefix):console.error.bind(console):noop;this.write=text=>{const isRunKit=typeof process_1.default!=="undefined"&&process_1.default.env&&typeof process_1.default.env.RUNKIT_ENDPOINT_PATH==="string";if(text&&isRunKit){text.split("\n").forEach((line=>console.log(line)))}else{console.log(text)}}}}exports.DebugLogger=DebugLogger},{"./process":18}],11:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ID=void 0;const cuid_1=require("./cuid");let timeBias=0;class ID{static set timeBias(bias){if(typeof bias!=="number"){return}timeBias=bias}static generate(){return(0,cuid_1.default)(timeBias).slice(1)}}exports.ID=ID},{"./cuid":5}],12:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObjectCollection=exports.PartialArray=exports.SchemaDefinition=exports.Colorize=exports.ColorStyle=exports.SimpleEventEmitter=exports.SimpleCache=exports.ascii85=exports.PathInfo=exports.Utils=exports.TypeMappings=exports.Transport=exports.EventSubscription=exports.EventPublisher=exports.EventStream=exports.PathReference=exports.ID=exports.DebugLogger=exports.OrderedCollectionProxy=exports.proxyAccess=exports.MutationsDataSnapshot=exports.DataSnapshot=exports.DataReferencesArray=exports.DataSnapshotsArray=exports.QueryDataRetrievalOptions=exports.DataRetrievalOptions=exports.DataReferenceQuery=exports.DataReference=exports.Api=exports.AceBaseBaseSettings=exports.AceBaseBase=void 0;var acebase_base_1=require("./acebase-base");Object.defineProperty(exports,"AceBaseBase",{enumerable:true,get:function(){return acebase_base_1.AceBaseBase}});Object.defineProperty(exports,"AceBaseBaseSettings",{enumerable:true,get:function(){return acebase_base_1.AceBaseBaseSettings}});var api_1=require("./api");Object.defineProperty(exports,"Api",{enumerable:true,get:function(){return api_1.Api}});var data_reference_1=require("./data-reference");Object.defineProperty(exports,"DataReference",{enumerable:true,get:function(){return data_reference_1.DataReference}});Object.defineProperty(exports,"DataReferenceQuery",{enumerable:true,get:function(){return data_reference_1.DataReferenceQuery}});Object.defineProperty(exports,"DataRetrievalOptions",{enumerable:true,get:function(){return data_reference_1.DataRetrievalOptions}});Object.defineProperty(exports,"QueryDataRetrievalOptions",{enumerable:true,get:function(){return data_reference_1.QueryDataRetrievalOptions}});Object.defineProperty(exports,"DataSnapshotsArray",{enumerable:true,get:function(){return data_reference_1.DataSnapshotsArray}});Object.defineProperty(exports,"DataReferencesArray",{enumerable:true,get:function(){return data_reference_1.DataReferencesArray}});var data_snapshot_1=require("./data-snapshot");Object.defineProperty(exports,"DataSnapshot",{enumerable:true,get:function(){return data_snapshot_1.DataSnapshot}});Object.defineProperty(exports,"MutationsDataSnapshot",{enumerable:true,get:function(){return data_snapshot_1.MutationsDataSnapshot}});var data_proxy_1=require("./data-proxy");Object.defineProperty(exports,"proxyAccess",{enumerable:true,get:function(){return data_proxy_1.proxyAccess}});Object.defineProperty(exports,"OrderedCollectionProxy",{enumerable:true,get:function(){return data_proxy_1.OrderedCollectionProxy}});var debug_1=require("./debug");Object.defineProperty(exports,"DebugLogger",{enumerable:true,get:function(){return debug_1.DebugLogger}});var id_1=require("./id");Object.defineProperty(exports,"ID",{enumerable:true,get:function(){return id_1.ID}});var path_reference_1=require("./path-reference");Object.defineProperty(exports,"PathReference",{enumerable:true,get:function(){return path_reference_1.PathReference}});var subscription_1=require("./subscription");Object.defineProperty(exports,"EventStream",{enumerable:true,get:function(){return subscription_1.EventStream}});Object.defineProperty(exports,"EventPublisher",{enumerable:true,get:function(){return subscription_1.EventPublisher}});Object.defineProperty(exports,"EventSubscription",{enumerable:true,get:function(){return subscription_1.EventSubscription}});exports.Transport=require("./transport");var type_mappings_1=require("./type-mappings");Object.defineProperty(exports,"TypeMappings",{enumerable:true,get:function(){return type_mappings_1.TypeMappings}});exports.Utils=require("./utils");var path_info_1=require("./path-info");Object.defineProperty(exports,"PathInfo",{enumerable:true,get:function(){return path_info_1.PathInfo}});var ascii85_1=require("./ascii85");Object.defineProperty(exports,"ascii85",{enumerable:true,get:function(){return ascii85_1.ascii85}});var simple_cache_1=require("./simple-cache");Object.defineProperty(exports,"SimpleCache",{enumerable:true,get:function(){return simple_cache_1.SimpleCache}});var simple_event_emitter_1=require("./simple-event-emitter");Object.defineProperty(exports,"SimpleEventEmitter",{enumerable:true,get:function(){return simple_event_emitter_1.SimpleEventEmitter}});var simple_colors_1=require("./simple-colors");Object.defineProperty(exports,"ColorStyle",{enumerable:true,get:function(){return simple_colors_1.ColorStyle}});Object.defineProperty(exports,"Colorize",{enumerable:true,get:function(){return simple_colors_1.Colorize}});var schema_1=require("./schema");Object.defineProperty(exports,"SchemaDefinition",{enumerable:true,get:function(){return schema_1.SchemaDefinition}});var partial_array_1=require("./partial-array");Object.defineProperty(exports,"PartialArray",{enumerable:true,get:function(){return partial_array_1.PartialArray}});const object_collection_1=require("./object-collection");Object.defineProperty(exports,"ObjectCollection",{enumerable:true,get:function(){return object_collection_1.ObjectCollection}})},{"./acebase-base":1,"./api":2,"./ascii85":3,"./data-proxy":7,"./data-reference":8,"./data-snapshot":9,"./debug":10,"./id":11,"./object-collection":13,"./partial-array":15,"./path-info":16,"./path-reference":17,"./schema":19,"./simple-cache":20,"./simple-colors":21,"./simple-event-emitter":22,"./subscription":23,"./transport":24,"./type-mappings":25,"./utils":26}],13:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObjectCollection=void 0;const id_1=require("./id");class ObjectCollection{static from(array){const collection={};array.forEach((child=>{collection[id_1.ID.generate()]=child}));return collection}}exports.ObjectCollection=ObjectCollection},{"./id":11}],14:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObservableShim=exports.setObservable=exports.getObservable=void 0;let _observable;function getObservable(){if(_observable){return _observable}if(typeof window!=="undefined"&&window.Observable){_observable=window.Observable;return _observable}try{const{Observable:Observable}=require("rxjs");if(!Observable){throw new Error("not loaded")}_observable=Observable;return Observable}catch(err){throw new Error("RxJS Observable could not be loaded. If you are using a browser build, add it to AceBase using db.setObservable. For node.js builds, add it to your project with: npm i rxjs")}}exports.getObservable=getObservable;function setObservable(Observable){if(Observable==="shim"){console.warn("Using AceBase's simple Observable shim. Only use this if you know what you're doing.");Observable=ObservableShim}_observable=Observable}exports.setObservable=setObservable;class ObservableShim{constructor(create){this._active=false;this._subscribers=[];this._create=create}subscribe(subscriber){if(!this._active){const next=value=>{this._subscribers.forEach((s=>{try{s(value)}catch(err){console.error("Error in subscriber callback:",err)}}))};const observer={next:next};this._cleanup=this._create(observer);this._active=true}this._subscribers.push(subscriber);const unsubscribe=()=>{this._subscribers.splice(this._subscribers.indexOf(subscriber),1);if(this._subscribers.length===0){this._active=false;this._cleanup()}};const subscription={unsubscribe:unsubscribe};return subscription}}exports.ObservableShim=ObservableShim},{rxjs:53}],15:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.PartialArray=void 0;class PartialArray{constructor(sparseArray){if(sparseArray instanceof Array){for(let i=0;ikey.startsWith("[")?parseInt(key.slice(1,-1)):key))}class PathInfo{constructor(path){if(typeof path==="string"){this.keys=getPathKeys(path)}else if(path instanceof Array){this.keys=path}this.path=this.keys.reduce(((path,key,i)=>i===0?`${key}`:typeof key==="string"?`${path}/${key}`:`${path}[${key}]`),"")}static get(path){return new PathInfo(path)}static getChildPath(path,childKey){return PathInfo.get(path).child(childKey).path}static getPathKeys(path){return getPathKeys(path)}get key(){return this.keys.length===0?null:this.keys.slice(-1)[0]}get parent(){if(this.keys.length==0){return null}const parentKeys=this.keys.slice(0,-1);return new PathInfo(parentKeys)}get parentPath(){return this.keys.length===0?null:this.parent.path}child(childKey){if(typeof childKey==="string"){childKey=getPathKeys(childKey)}return new PathInfo(this.keys.concat(childKey))}childPath(childKey){return this.child(childKey).path}get pathKeys(){return this.keys}static extractVariables(varPath,fullPath){if(!varPath.includes("*")&&!varPath.includes("$")){return[]}const keys=getPathKeys(varPath);const pathKeys=getPathKeys(fullPath);let count=0;const variables={get length(){return count}};keys.forEach(((key,index)=>{const pathKey=pathKeys[index];if(key==="*"){variables[count++]=pathKey}else if(typeof key==="string"&&key[0]==="$"){variables[count++]=pathKey;variables[key]=pathKey;const varName=key.slice(1);if(typeof variables[varName]==="undefined"){variables[varName]=pathKey}}}));return variables}static fillVariables(varPath,fullPath){if(varPath.indexOf("*")<0&&varPath.indexOf("$")<0){return varPath}const keys=getPathKeys(varPath);const pathKeys=getPathKeys(fullPath);const merged=keys.map(((key,index)=>{if(key===pathKeys[index]||index>=pathKeys.length){return key}else if(typeof key==="string"&&(key==="*"||key[0]==="$")){return pathKeys[index]}else{throw new Error(`Path "${fullPath}" cannot be used to fill variables of path "${varPath}" because they do not match`)}}));let mergedPath="";merged.forEach((key=>{if(typeof key==="number"){mergedPath+=`[${key}]`}else{if(mergedPath.length>0){mergedPath+="/"}mergedPath+=key}}));return mergedPath}static fillVariables2(varPath,vars){if(typeof vars!=="object"||Object.keys(vars).length===0){return varPath}const pathKeys=getPathKeys(varPath);let n=0;const targetPath=pathKeys.reduce(((path,key)=>{if(typeof key==="string"&&(key==="*"||key.startsWith("$"))){return PathInfo.getChildPath(path,vars[n++])}else{return PathInfo.getChildPath(path,key)}}),"");return targetPath}equals(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path===other.path){return true}if(this.keys.length!==other.keys.length){return false}return this.keys.every(((key,index)=>{const otherKey=other.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isAncestorOf(descendantPath){const descendant=descendantPath instanceof PathInfo?descendantPath:new PathInfo(descendantPath);if(descendant.path===""||this.path===descendant.path){return false}if(this.path===""){return true}if(this.keys.length>=descendant.keys.length){return false}return this.keys.every(((key,index)=>{const otherKey=descendant.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isDescendantOf(ancestorPath){const ancestor=ancestorPath instanceof PathInfo?ancestorPath:new PathInfo(ancestorPath);if(this.path===""||this.path===ancestor.path){return false}if(ancestorPath===""){return true}if(ancestor.keys.length>=this.keys.length){return false}return ancestor.keys.every(((key,index)=>{const otherKey=this.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isOnTrailOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path.length===0||other.path.length===0){return true}if(this.path===other.path){return true}return this.pathKeys.every(((key,index)=>{if(index>=other.keys.length){return true}const otherKey=other.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isChildOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path===""){return false}return this.parent.equals(other)}isParentOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(other.path===""){return false}return this.equals(other.parent)}}exports.PathInfo=PathInfo},{}],17:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.PathReference=void 0;class PathReference{constructor(path){this.path=path}}exports.PathReference=PathReference},{}],18:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default={nextTick(fn){setTimeout(fn,0)}}},{}],19:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SchemaDefinition=void 0;function parse(definition){let pos=0;function consumeSpaces(){let c;while(c=definition[pos],[" ","\r","\n","\t"].includes(c)){pos++}}function consumeCharacter(c){if(definition[pos]!==c){throw new Error(`Unexpected character at position ${pos}. Expected: '${c}', found '${definition[pos]}'`)}pos++}function readProperty(){consumeSpaces();const prop={name:"",optional:false,wildcard:false};let c;while(c=definition[pos],c==="_"||c==="$"||c>="a"&&c<="z"||c>="A"&&c<="Z"||prop.name.length>0&&c>="0"&&c<="9"||prop.name.length===0&&c==="*"){prop.name+=c;pos++}if(prop.name.length===0){throw new Error(`Property name expected at position ${pos}, found: ${definition.slice(pos,pos+10)}..`)}if(definition[pos]==="?"){prop.optional=true;pos++}if(prop.name==="*"||prop.name[0]==="$"){prop.optional=true;prop.wildcard=true}consumeSpaces();consumeCharacter(":");return prop}function readType(){consumeSpaces();let type={typeOf:"any"},c;let name="";while(c=definition[pos],c>="a"&&c<="z"||c>="A"&&c<="Z"){name+=c;pos++}if(name.length===0){if(definition[pos]==="*"){consumeCharacter("*");type.typeOf="any"}else if(["'",'"',"`"].includes(definition[pos])){type.typeOf="string";type.value="";const quote=definition[pos];consumeCharacter(quote);while(c=definition[pos],c&&c!==quote){type.value+=c;pos++}consumeCharacter(quote)}else if(definition[pos]>="0"&&definition[pos]<="9"){type.typeOf="number";let nr="";while(c=definition[pos],c==="."||c==="n"||c>="0"&&c<="9"){nr+=c;pos++}if(nr.endsWith("n")){type.value=BigInt(nr)}else if(nr.includes(".")){type.value=parseFloat(nr)}else{type.value=parseInt(nr)}}else if(definition[pos]==="{"){consumeCharacter("{");type.typeOf="object";type.instanceOf=Object;type.children=[];while(true){const prop=readProperty();const types=readTypes();type.children.push({name:prop.name,optional:prop.optional,wildcard:prop.wildcard,types:types});consumeSpaces();if(definition[pos]==="}"){break}consumeCharacter(",")}consumeCharacter("}")}else if(definition[pos]==="/"){consumeCharacter("/");let pattern="",flags="";while(c=definition[pos],c!=="/"||pattern.endsWith("\\")){pattern+=c;pos++}consumeCharacter("/");while(c=definition[pos],["g","i","m","s","u","y","d"].includes(c)){flags+=c;pos++}type.typeOf="string";type.matches=new RegExp(pattern,flags)}else{throw new Error(`Expected a type definition at position ${pos}, found character '${definition[pos]}'`)}}else if(["string","number","boolean","bigint","undefined","String","Number","Boolean","BigInt"].includes(name)){type.typeOf=name.toLowerCase()}else if(name==="Object"||name==="object"){type.typeOf="object";type.instanceOf=Object}else if(name==="Date"){type.typeOf="object";type.instanceOf=Date}else if(name==="Binary"||name==="binary"){type.typeOf="object";type.instanceOf=ArrayBuffer}else if(name==="any"){type.typeOf="any"}else if(name==="null"){type.typeOf="object";type.value=null}else if(name==="Array"){consumeCharacter("<");type.typeOf="object";type.instanceOf=Array;type.genericTypes=readTypes();consumeCharacter(">")}else if(["true","false"].includes(name)){type.typeOf="boolean";type.value=name==="true"}else{throw new Error(`Unknown type at position ${pos}: "${type}"`)}consumeSpaces();while(definition[pos]==="["){consumeCharacter("[");consumeCharacter("]");type={typeOf:"object",instanceOf:Array,genericTypes:[type]}}return type}function readTypes(){consumeSpaces();const types=[readType()];while(definition[pos]==="|"){consumeCharacter("|");types.push(readType());consumeSpaces()}return types}return readType()}function checkObject(path,properties,obj,partial){const invalidProperties=properties.find((prop=>prop.name==="*"||prop.name[0]==="$"))?[]:Object.keys(obj).filter((key=>![null,undefined].includes(obj[key])&&!properties.find((prop=>prop.name===key))));if(invalidProperties.length>0){return{ok:false,reason:`Object at path "${path}" cannot have propert${invalidProperties.length===1?"y":"ies"} ${invalidProperties.map((p=>`"${p}"`)).join(", ")}`}}function checkProperty(property){const hasValue=![null,undefined].includes(obj[property.name]);if(!property.optional&&(partial?obj[property.name]===null:!hasValue)){return{ok:false,reason:`Property at path "${path}/${property.name}" is not optional`}}if(hasValue&&property.types.length===1){return checkType(`${path}/${property.name}`,property.types[0],obj[property.name],false)}if(hasValue&&!property.types.some((type=>checkType(`${path}/${property.name}`,type,obj[property.name],false).ok))){return{ok:false,reason:`Property at path "${path}/${property.name}" does not match any of ${property.types.length} allowed types`}}return{ok:true}}const namedProperties=properties.filter((prop=>!prop.wildcard));const failedProperty=namedProperties.find((prop=>!checkProperty(prop).ok));if(failedProperty){const reason=checkProperty(failedProperty).reason;return{ok:false,reason:reason}}const wildcardProperty=properties.find((prop=>prop.wildcard));if(!wildcardProperty){return{ok:true}}const wildcardChildKeys=Object.keys(obj).filter((key=>!namedProperties.find((prop=>prop.name===key))));let result={ok:true};for(let i=0;i0){if(type.typeOf!=="object"){return{ok:false,reason:`path "${path}" must be typeof ${type.typeOf}`}}if(!type.children){return ok}const childKey=trailKeys[0];let property=type.children.find((prop=>prop.name===childKey));if(!property){property=type.children.find((prop=>prop.name==="*"||prop.name[0]==="$"))}if(!property){return{ok:false,reason:`Object at path "${path}" cannot have property "${childKey}"`}}if(property.optional&&value===null&&trailKeys.length===1){return ok}let result;property.types.some((type=>{const childPath=typeof childKey==="number"?`${path}[${childKey}]`:`${path}/${childKey}`;result=checkType(childPath,type,value,partial,trailKeys.slice(1));return result.ok}));return result}if(value===null){return ok}if(type.instanceOf===Object&&(typeof value!=="object"||value instanceof Array||value instanceof Date)){return{ok:false,reason:`path "${path}" must be an object collection`}}if(type.instanceOf&&(typeof value!=="object"||value.constructor!==type.instanceOf)){return{ok:false,reason:`path "${path}" must be an instance of ${type.instanceOf.name}`}}if("value"in type&&value!==type.value){return{ok:false,reason:`path "${path}" must be value: ${type.value}`}}if(typeof value!==type.typeOf){return{ok:false,reason:`path "${path}" must be typeof ${type.typeOf}`}}if(type.instanceOf===Array&&type.genericTypes&&!value.every((v=>type.genericTypes.some((t=>checkType(path,t,v,false).ok))))){return{ok:false,reason:`every array value of path "${path}" must match one of the specified types`}}if(type.typeOf==="object"&&type.children){return checkObject(path,type.children,value,partial)}if(type.matches&&!type.matches.test(value)){return{ok:false,reason:`path "${path}" must match regular expression /${type.matches.source}/${type.matches.flags}`}}return ok}function getConstructorType(val){switch(val){case String:return"string";case Number:return"number";case Boolean:return"boolean";case Date:return"Date";case BigInt:return"bigint";case Array:throw new Error("Schema error: Array cannot be used without a type. Use string[] or Array instead");default:throw new Error(`Schema error: unknown type used: ${val.name}`)}}class SchemaDefinition{constructor(definition){this.source=definition;if(typeof definition==="object"){const toTS=obj=>"{"+Object.keys(obj).map((key=>{let val=obj[key];if(val===undefined){val="undefined"}else if(val instanceof RegExp){val=`/${val.source}/${val.flags}`}else if(typeof val==="object"){val=toTS(val)}else if(typeof val==="function"){val=getConstructorType(val)}else if(!["string","number","boolean","bigint"].includes(typeof val)){throw new Error(`Type definition for key "${key}" must be a string, number, boolean, bigint, object, regular expression, or one of these classes: String, Number, Boolean, Date, BigInt`)}return`${key}:${val}`})).join(",")+"}";this.text=toTS(definition)}else if(typeof definition==="string"){this.text=definition}else{throw new Error("Type definiton must be a string or an object")}this.type=parse(this.text)}check(path,value,partial,trailKeys){return checkType(path,this.type,value,partial,trailKeys)}}exports.SchemaDefinition=SchemaDefinition},{}],20:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SimpleCache=void 0;const utils_1=require("./utils");const calculateExpiryTime=expirySeconds=>expirySeconds>0?Date.now()+expirySeconds*1e3:Infinity;class SimpleCache{constructor(options){var _a;this.enabled=true;if(typeof options==="number"){options={expirySeconds:options}}options.cloneValues=options.cloneValues!==false;if(typeof options.expirySeconds!=="number"&&typeof options.maxEntries!=="number"){throw new Error("Either expirySeconds or maxEntries must be specified")}this.options=options;this.cache=new Map;const interval=setInterval((()=>{this.cleanUp()}),60*1e3);(_a=interval.unref)===null||_a===void 0?void 0:_a.call(interval)}get size(){return this.cache.size}has(key){if(!this.enabled){return false}return this.cache.has(key)}get(key){if(!this.enabled){return null}const entry=this.cache.get(key);if(!entry){return null}entry.expires=calculateExpiryTime(this.options.expirySeconds);entry.accessed=Date.now();return this.options.cloneValues?(0,utils_1.cloneObject)(entry.value):entry.value}set(key,value){if(this.options.maxEntries>0&&this.cache.size>=this.options.maxEntries&&!this.cache.has(key)){let oldest=null;const now=Date.now();for(const[key,entry]of this.cache.entries()){if(entry.expires<=now){this.cache.delete(key);oldest=null;break}if(!oldest||entry.accessed{if(entry.expires<=now){this.cache.delete(key)}}))}}exports.SimpleCache=SimpleCache},{"./utils":26}],21:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Colorize=exports.SetColorsEnabled=exports.ColorsSupported=exports.ColorStyle=void 0;const process_1=require("./process");const FontCode={bold:1,dim:2,italic:3,underline:4,inverse:7,hidden:8,strikethrough:94};const ColorCode={black:30,red:31,green:32,yellow:33,blue:34,magenta:35,cyan:36,white:37,grey:90,brightRed:91};const BgColorCode={bgBlack:40,bgRed:41,bgGreen:42,bgYellow:43,bgBlue:44,bgMagenta:45,bgCyan:46,bgWhite:47,bgGrey:100,bgBrightRed:101};const ResetCode={all:0,color:39,background:49,bold:22,dim:22,italic:23,underline:24,inverse:27,hidden:28,strikethrough:29};var ColorStyle;(function(ColorStyle){ColorStyle["reset"]="reset";ColorStyle["bold"]="bold";ColorStyle["dim"]="dim";ColorStyle["italic"]="italic";ColorStyle["underline"]="underline";ColorStyle["inverse"]="inverse";ColorStyle["hidden"]="hidden";ColorStyle["strikethrough"]="strikethrough";ColorStyle["black"]="black";ColorStyle["red"]="red";ColorStyle["green"]="green";ColorStyle["yellow"]="yellow";ColorStyle["blue"]="blue";ColorStyle["magenta"]="magenta";ColorStyle["cyan"]="cyan";ColorStyle["grey"]="grey";ColorStyle["bgBlack"]="bgBlack";ColorStyle["bgRed"]="bgRed";ColorStyle["bgGreen"]="bgGreen";ColorStyle["bgYellow"]="bgYellow";ColorStyle["bgBlue"]="bgBlue";ColorStyle["bgMagenta"]="bgMagenta";ColorStyle["bgCyan"]="bgCyan";ColorStyle["bgWhite"]="bgWhite";ColorStyle["bgGrey"]="bgGrey"})(ColorStyle=exports.ColorStyle||(exports.ColorStyle={}));function ColorsSupported(){if(typeof process_1.default==="undefined"||!process_1.default.stdout||!process_1.default.env||!process_1.default.platform||process_1.default.platform==="browser"){return false}if(process_1.default.platform==="win32"){return true}const env=process_1.default.env;if(env.COLORTERM){return true}if(env.TERM==="dumb"){return false}if(env.CI||env.TEAMCITY_VERSION){return!!env.TRAVIS}if(["iTerm.app","HyperTerm","Hyper","MacTerm","Apple_Terminal","vscode"].includes(env.TERM_PROGRAM)){return true}if(/^xterm-256|^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(env.TERM)){return true}return false}exports.ColorsSupported=ColorsSupported;let _enabled=ColorsSupported();function SetColorsEnabled(enabled){_enabled=ColorsSupported()&&enabled}exports.SetColorsEnabled=SetColorsEnabled;function Colorize(str,style){if(!_enabled){return str}const openCodes=[],closeCodes=[];const addStyle=style=>{if(style===ColorStyle.reset){openCodes.push(ResetCode.all)}else if(style in FontCode){openCodes.push(FontCode[style]);closeCodes.push(ResetCode[style])}else if(style in ColorCode){openCodes.push(ColorCode[style]);closeCodes.push(ResetCode.color)}else if(style in BgColorCode){openCodes.push(BgColorCode[style]);closeCodes.push(ResetCode.background)}};if(style instanceof Array){style.forEach(addStyle)}else{addStyle(style)}const open=openCodes.map((code=>"["+code+"m")).join("");const close=closeCodes.map((code=>"["+code+"m")).join("");return str.split("\n").map((line=>open+line+close)).join("\n")}exports.Colorize=Colorize;String.prototype.colorize=function(style){return Colorize(this,style)}},{"./process":18}],22:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SimpleEventEmitter=void 0;function runCallback(callback,data){try{callback(data)}catch(err){console.error("Error in subscription callback",err)}}class SimpleEventEmitter{constructor(){this._subscriptions=[];this._oneTimeEvents=new Map}on(event,callback){if(this._oneTimeEvents.has(event)){return runCallback(callback,this._oneTimeEvents.get(event))}this._subscriptions.push({event:event,callback:callback,once:false});return this}off(event,callback){this._subscriptions=this._subscriptions.filter((s=>s.event!==event||callback&&s.callback!==callback));return this}once(event,callback){return new Promise((resolve=>{const ourCallback=data=>{resolve(data);callback===null||callback===void 0?void 0:callback(data)};if(this._oneTimeEvents.has(event)){runCallback(ourCallback,this._oneTimeEvents.get(event))}else{this._subscriptions.push({event:event,callback:ourCallback,once:true})}}))}emit(event,data){if(this._oneTimeEvents.has(event)){throw new Error(`Event "${event}" was supposed to be emitted only once`)}for(let i=0;i{if(this._internal.state==="active"){return resolve()}else if(this._internal.state==="canceled"&&!callback){return reject(new Error(this._internal.cancelReason))}const noop=()=>{};this._internal.activatePromises.push({resolve:resolve,reject:callback?noop:reject})}))}_setActivationState(activated,cancelReason){this._internal.cancelReason=cancelReason;this._internal.state=activated?"active":"canceled";while(this._internal.activatePromises.length>0){const p=this._internal.activatePromises.shift();if(activated){p.callback&&p.callback(true);p.resolve&&p.resolve()}else{p.callback&&p.callback(false,cancelReason);p.reject&&p.reject(cancelReason)}}}}exports.EventSubscription=EventSubscription;class EventPublisher{constructor(publish,start,cancel){this.publish=publish;this.start=start;this.cancel=cancel}}exports.EventPublisher=EventPublisher;class EventStream{constructor(eventPublisherCallback){const subscribers=[];let noMoreSubscribersCallback;let activationState;const _stoppedState="stopped (no more subscribers)";this.subscribe=(callback,activationCallback)=>{if(typeof callback!=="function"){throw new TypeError("callback must be a function")}else if(activationState===_stoppedState){throw new Error("stream can't be used anymore because all subscribers were stopped")}const sub={callback:callback,activationCallback:function(activated,cancelReason){activationCallback===null||activationCallback===void 0?void 0:activationCallback(activated,cancelReason);this.subscription._setActivationState(activated,cancelReason)},subscription:new EventSubscription((function stop(){subscribers.splice(subscribers.indexOf(this),1);return checkActiveSubscribers()}))};subscribers.push(sub);if(typeof activationState!=="undefined"){if(activationState===true){activationCallback===null||activationCallback===void 0?void 0:activationCallback(true);sub.subscription._setActivationState(true)}else if(typeof activationState==="string"){activationCallback===null||activationCallback===void 0?void 0:activationCallback(false,activationState);sub.subscription._setActivationState(false,activationState)}}return sub.subscription};const checkActiveSubscribers=()=>{let ret;if(subscribers.length===0){ret=noMoreSubscribersCallback===null||noMoreSubscribersCallback===void 0?void 0:noMoreSubscribersCallback();activationState=_stoppedState}return Promise.resolve(ret)};this.unsubscribe=callback=>{const remove=callback?subscribers.filter((sub=>sub.callback===callback)):subscribers;remove.forEach((sub=>{const i=subscribers.indexOf(sub);subscribers.splice(i,1)}));checkActiveSubscribers()};this.stop=()=>{subscribers.splice(0);checkActiveSubscribers()};const publish=val=>{subscribers.forEach((sub=>{try{sub.callback(val)}catch(err){console.error(`Error running subscriber callback: ${err.message}`)}}));if(subscribers.length===0){checkActiveSubscribers()}return subscribers.length>0};const start=allSubscriptionsStoppedCallback=>{activationState=true;noMoreSubscribersCallback=allSubscriptionsStoppedCallback;subscribers.forEach((sub=>{var _a;(_a=sub.activationCallback)===null||_a===void 0?void 0:_a.call(sub,true)}))};const cancel=reason=>{activationState=reason;subscribers.forEach((sub=>{var _a;(_a=sub.activationCallback)===null||_a===void 0?void 0:_a.call(sub,false,reason||new Error("unknown reason"))}));subscribers.splice(0)};const publisher=new EventPublisher(publish,start,cancel);eventPublisherCallback(publisher)}}exports.EventStream=EventStream},{}],24:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.deserialize2=exports.serialize2=exports.serialize=exports.detectSerializeVersion=exports.deserialize=void 0;const path_reference_1=require("./path-reference");const utils_1=require("./utils");const ascii85_1=require("./ascii85");const path_info_1=require("./path-info");const partial_array_1=require("./partial-array");const deserialize=data=>{if(data.map===null||typeof data.map==="undefined"){if(typeof data.val==="undefined"){throw new Error("serialized value must have a val property")}return data.val}const deserializeValue=(type,val)=>{if(type==="date"){return new Date(val)}else if(type==="binary"){return ascii85_1.ascii85.decode(val)}else if(type==="reference"){return new path_reference_1.PathReference(val)}else if(type==="regexp"){return new RegExp(val.pattern,val.flags)}else if(type==="array"){return new partial_array_1.PartialArray(val)}else if(type==="bigint"){return BigInt(val)}return val};if(typeof data.map==="string"){return deserializeValue(data.map,data.val)}Object.keys(data.map).forEach((path=>{const type=data.map[path];const keys=path_info_1.PathInfo.getPathKeys(path);let parent=data;let key="val";let val=data.val;keys.forEach((k=>{key=k;parent=val;val=val[key]}));parent[key]=deserializeValue(type,val)}));return data.val};exports.deserialize=deserialize;const detectSerializeVersion=data=>{if(typeof data!=="object"||data===null){return 2}if("map"in data&&"val"in data){return 1}else if("val"in data){if(Object.keys(data).length>1){return 2}return 1}return 2};exports.detectSerializeVersion=detectSerializeVersion;const serialize=obj=>{var _a;if(obj===null||typeof obj!=="object"||obj instanceof Date||obj instanceof ArrayBuffer||obj instanceof path_reference_1.PathReference||obj instanceof RegExp){const ser=(0,exports.serialize)({value:obj});return{map:(_a=ser.map)===null||_a===void 0?void 0:_a.value,val:ser.val.value}}obj=(0,utils_1.cloneObject)(obj);const process=(obj,mappings,prefix)=>{if(obj instanceof partial_array_1.PartialArray){mappings[prefix]="array"}Object.keys(obj).forEach((key=>{const val=obj[key];const path=prefix.length===0?key:`${prefix}/${key}`;if(typeof val==="bigint"){obj[key]=val.toString();mappings[path]="bigint"}else if(val instanceof Date){obj[key]=val.toISOString();mappings[path]="date"}else if(val instanceof ArrayBuffer){obj[key]=ascii85_1.ascii85.encode(val);mappings[path]="binary"}else if(val instanceof path_reference_1.PathReference){obj[key]=val.path;mappings[path]="reference"}else if(val instanceof RegExp){obj[key]={pattern:val.source,flags:val.flags};mappings[path]="regexp"}else if(typeof val==="object"&&val!==null){process(val,mappings,path)}}))};const mappings={};process(obj,mappings,"");const serialized={val:obj};if(Object.keys(mappings).length>0){serialized.map=mappings}return serialized};exports.serialize=serialize;const serialize2=obj=>{const getSerializedValue=val=>{if(typeof val==="bigint"){return{".type":"bigint",".val":val.toString()}}else if(val instanceof Date){return{".type":"date",".val":val.toISOString()}}else if(val instanceof ArrayBuffer){return{".type":"binary",".val":ascii85_1.ascii85.encode(val)}}else if(val instanceof path_reference_1.PathReference){return{".type":"reference",".val":val.path}}else if(val instanceof RegExp){return{".type":"regexp",".val":`/${val.source}/${val.flags}`}}else if(typeof val==="object"&&val!==null){if(val instanceof Array){const copy=[];for(let i=0;i{if(typeof data!=="object"||data===null){return data}if(typeof data[".type"]==="undefined"){if(data instanceof Array){const copy=[];const arr=data;for(let i=0;i{const mkeys=path_info_1.PathInfo.getPathKeys(mpath);if(mkeys.length!==keys.length){return false}return mkeys.every(((mkey,index)=>{if(mkey==="*"||typeof mkey==="string"&&mkey[0]==="$"){return true}return mkey===keys[index]}))}));const mapping=mappings[mappedPath];return mapping}function map(mappings,path){const targetPath=path_info_1.PathInfo.get(path).parentPath;if(targetPath===null){return}return get(mappings,targetPath)}function mapDeep(mappings,entryPath){entryPath=entryPath.replace(/^\/|\/$/g,"");const pathInfo=path_info_1.PathInfo.get(entryPath);const startPath=pathInfo.parentPath;const keys=startPath?path_info_1.PathInfo.getPathKeys(startPath):[];const matches=Object.keys(mappings).reduce(((m,mpath)=>{const mkeys=path_info_1.PathInfo.getPathKeys(mpath);if(mkeys.length{if(index>=keys.length){return false}else if(mkey==="*"||typeof mkey==="string"&&mkey[0]==="$"||mkey===keys[index]){return true}else{isMatch=false;return false}}))}if(isMatch){const mapping=mappings[mpath];m.push({path:mpath,type:mapping})}return m}),[]);return matches}function process(db,mappings,path,obj,action){if(obj===null||typeof obj!=="object"){return obj}const keys=path_info_1.PathInfo.getPathKeys(path);const m=mapDeep(mappings,path);const changes=[];m.sort(((a,b)=>path_info_1.PathInfo.getPathKeys(a.path).length>path_info_1.PathInfo.getPathKeys(b.path).length?-1:1));m.forEach((mapping=>{const mkeys=path_info_1.PathInfo.getPathKeys(mapping.path);mkeys.push("*");const mTrailKeys=mkeys.slice(keys.length);if(mTrailKeys.length===0){const vars=path_info_1.PathInfo.extractVariables(mapping.path,path);const ref=new data_reference_1.DataReference(db,path,vars);if(action==="serialize"){obj=mapping.type.serialize(obj,ref)}else if(action==="deserialize"){const snap=new data_snapshot_1.DataSnapshot(ref,obj);obj=mapping.type.deserialize(snap)}return}const process=(parentPath,parent,keys)=>{if(obj===null||typeof obj!=="object"){return obj}const key=keys[0];let children=[];if(key==="*"||typeof key==="string"&&key[0]==="$"){if(parent instanceof Array){children=parent.map(((val,index)=>({key:index,val:val})))}else{children=Object.keys(parent).map((k=>({key:k,val:parent[k]})))}}else{const child=parent[key];if(typeof child==="object"){children.push({key:key,val:child})}}children.forEach((child=>{const childPath=path_info_1.PathInfo.getChildPath(parentPath,child.key);const vars=path_info_1.PathInfo.extractVariables(mapping.path,childPath);const ref=new data_reference_1.DataReference(db,childPath,vars);if(keys.length===1){if(action==="serialize"){changes.push({parent:parent,key:child.key,original:parent[child.key]});parent[child.key]=mapping.type.serialize(child.val,ref)}else if(action==="deserialize"){const snap=new data_snapshot_1.DataSnapshot(ref,child.val);parent[child.key]=mapping.type.deserialize(snap)}}else{process(childPath,child.val,keys.slice(1))}}))};process(path,obj,mTrailKeys)}));if(action==="serialize"){obj=(0,utils_1.cloneObject)(obj);if(changes.length>0){changes.forEach((change=>{change.parent[change.key]=change.original}))}}return obj}const _mappings=Symbol("mappings");class TypeMappings{constructor(db){this.db=db;this[_mappings]={}}get mappings(){return this[_mappings]}map(path){return map(this[_mappings],path)}bind(path,type,options={}){if(typeof path!=="string"){throw new TypeError("path must be a string")}if(typeof type!=="function"){throw new TypeError("constructor must be a function")}if(typeof options.serializer==="undefined"){}else if(typeof options.serializer==="string"){if(typeof type.prototype[options.serializer]==="function"){options.serializer=type.prototype[options.serializer]}else{throw new TypeError(`${type.name}.prototype.${options.serializer} is not a function, cannot use it as serializer`)}}else if(typeof options.serializer!=="function"){throw new TypeError(`serializer for class ${type.name} must be a function, or the name of a prototype method`)}if(typeof options.creator==="undefined"){if(typeof type.create==="function"){options.creator=type.create}}else if(typeof options.creator==="string"){if(typeof type[options.creator]==="function"){options.creator=type[options.creator]}else{throw new TypeError(`${type.name}.${options.creator} is not a function, cannot use it as creator`)}}else if(typeof options.creator!=="function"){throw new TypeError(`creator for class ${type.name} must be a function, or the name of a static method`)}path=path.replace(/^\/|\/$/g,"");this[_mappings][path]={db:this.db,type:type,creator:options.creator,serializer:options.serializer,deserialize(snap){let obj;if(this.creator){obj=this.creator.call(this.type,snap)}else{obj=new this.type(snap)}return obj},serialize(obj,ref){if(this.serializer){obj=this.serializer.call(obj,ref,obj)}else if(obj&&typeof obj.serialize==="function"){obj=obj.serialize(ref,obj)}return obj}}}serialize(path,obj){return process(this.db,this[_mappings],path,obj,"serialize")}deserialize(path,obj){return process(this.db,this[_mappings],path,obj,"deserialize")}}exports.TypeMappings=TypeMappings},{"./data-reference":8,"./data-snapshot":9,"./path-info":16,"./utils":26}],26:[function(require,module,exports){(function(Buffer){(function(){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.defer=exports.getChildValues=exports.getMutations=exports.compareValues=exports.ObjectDifferences=exports.valuesAreEqual=exports.cloneObject=exports.concatTypedArrays=exports.decodeString=exports.encodeString=exports.bytesToBigint=exports.bigintToBytes=exports.bytesToNumber=exports.numberToBytes=void 0;const path_reference_1=require("./path-reference");const process_1=require("./process");const partial_array_1=require("./partial-array");function numberToBytes(number){const bytes=new Uint8Array(8);const view=new DataView(bytes.buffer);view.setFloat64(0,number);return new Array(...bytes)}exports.numberToBytes=numberToBytes;function bytesToNumber(bytes){const length=Array.isArray(bytes)?bytes.length:bytes.byteLength;if(length!==8){throw new TypeError("must be 8 bytes")}const bin=new Uint8Array(bytes);const view=new DataView(bin.buffer);const nr=view.getFloat64(0);return nr}exports.bytesToNumber=bytesToNumber;const big={zero:BigInt(0),one:BigInt(1),two:BigInt(2),eight:BigInt(8),ff:BigInt(255)};function bigintToBytes(number){if(typeof number!=="bigint"){throw new Error("number must be a bigint")}const bytes=[];const negative=number>big.eight}while(number!==(negative?-big.one:big.zero));bytes.reverse();if(negative?bytes[0]<128:bytes[0]>=128){bytes.unshift(negative?255:0)}return bytes}exports.bigintToBytes=bigintToBytes;function bytesToBigint(bytes){const negative=bytes[0]>=128;let number=big.zero;for(let b of bytes){if(negative){b=~b&255}number=(number<128){if((code&55296)===55296){const nextCode=str.charCodeAt(i+1);if((nextCode&56320)!==56320){throw new Error("follow-up utf-16 character does not start with 0xDC00")}i++;const p1=code&1023;const p2=nextCode&1023;code=65536|p1<<10|p2}if(code<2048){const b1=192|code>>6&31;const b2=128|code&63;arr.push(b1,b2)}else if(code<65536){const b1=224|code>>12&15;const b2=128|code>>6&63;const b3=128|code&63;arr.push(b1,b2,b3)}else if(code<2097152){const b1=240|code>>18&7;const b2=128|code>>12&63;const b3=128|code>>6&63;const b4=128|code&63;arr.push(b1,b2,b3,b4)}else{throw new Error(`Cannot convert character ${str.charAt(i)} (code ${code}) to utf-8`)}}else{arr.push(code<128?code:63)}}return new Uint8Array(arr)}}exports.encodeString=encodeString;function decodeString(buffer){if(typeof TextDecoder!=="undefined"){const decoder=new TextDecoder;if(buffer instanceof Uint8Array){return decoder.decode(buffer)}const buf=Uint8Array.from(buffer);return decoder.decode(buf)}else if(typeof Buffer==="function"){if(buffer instanceof Array){buffer=Uint8Array.from(buffer)}if(!(buffer instanceof Buffer)&&"buffer"in buffer&&buffer.buffer instanceof ArrayBuffer){const typedArray=buffer;buffer=Buffer.from(typedArray.buffer,typedArray.byteOffset,typedArray.byteLength)}if(!(buffer instanceof Buffer)){throw new Error("Unsupported buffer argument")}return buffer.toString("utf-8")}else{if(!(buffer instanceof Uint8Array)&&"buffer"in buffer&&buffer["buffer"]instanceof ArrayBuffer){const typedArray=buffer;buffer=new Uint8Array(typedArray.buffer,typedArray.byteOffset,typedArray.byteLength)}if(buffer instanceof Buffer||buffer instanceof Array||buffer instanceof Uint8Array){let str="";for(let i=0;i128){if((code&240)===240){const b1=code,b2=buffer[i+1],b3=buffer[i+2],b4=buffer[i+3];code=(b1&7)<<18|(b2&63)<<12|(b3&63)<<6|b4&63;i+=3}else if((code&224)===224){const b1=code,b2=buffer[i+1],b3=buffer[i+2];code=(b1&15)<<12|(b2&63)<<6|b3&63;i+=2}else if((code&192)===192){const b1=code,b2=buffer[i+1];code=(b1&31)<<6|b2&63;i++}else{throw new Error("invalid utf-8 data")}}if(code>=65536){code^=65536;const p1=55296|code>>10;const p2=56320|code&1023;str+=String.fromCharCode(p1);str+=String.fromCharCode(p2)}else{str+=String.fromCharCode(code)}}return str}else{throw new Error("Unsupported buffer argument")}}}exports.decodeString=decodeString;function concatTypedArrays(a,b){const c=new a.constructor(a.length+b.length);c.set(a);c.set(b,a.length);return c}exports.concatTypedArrays=concatTypedArrays;function cloneObject(original,stack){var _a;if(((_a=original===null||original===void 0?void 0:original.constructor)===null||_a===void 0?void 0:_a.name)==="DataSnapshot"){throw new TypeError(`Object to clone is a DataSnapshot (path "${original.ref.path}")`)}const checkAndFixTypedArray=obj=>{if(obj!==null&&typeof obj==="object"&&typeof obj.constructor==="function"&&typeof obj.constructor.name==="string"&&["Buffer","Uint8Array","Int8Array","Uint16Array","Int16Array","Uint32Array","Int32Array","BigUint64Array","BigInt64Array"].includes(obj.constructor.name)){obj=obj.buffer.slice(obj.byteOffset,obj.byteOffset+obj.byteLength)}return obj};original=checkAndFixTypedArray(original);if(typeof original!=="object"||original===null||original instanceof Date||original instanceof ArrayBuffer||original instanceof path_reference_1.PathReference||original instanceof RegExp){return original}const cloneValue=val=>{if(stack.indexOf(val)>=0){throw new ReferenceError("object contains a circular reference")}val=checkAndFixTypedArray(val);if(val===null||val instanceof Date||val instanceof ArrayBuffer||val instanceof path_reference_1.PathReference||val instanceof RegExp){return val}else if(typeof val==="object"){stack.push(val);val=cloneObject(val,stack);stack.pop();return val}else{return val}};if(typeof stack==="undefined"){stack=[original]}const clone=original instanceof Array?[]:original instanceof partial_array_1.PartialArray?new partial_array_1.PartialArray:{};Object.keys(original).forEach((key=>{const val=original[key];if(typeof val==="function"){return}clone[key]=cloneValue(val)}));return clone}exports.cloneObject=cloneObject;const isTypedArray=val=>typeof val==="object"&&["ArrayBuffer","Buffer","Uint8Array","Uint16Array","Uint32Array","Int8Array","Int16Array","Int32Array"].includes(val.constructor.name);function valuesAreEqual(val1,val2){if(val1===val2){return true}if(typeof val1!==typeof val2){return false}if(typeof val1==="object"||typeof val2==="object"){if(val1===null||val2===null){return false}if(val1 instanceof path_reference_1.PathReference||val2 instanceof path_reference_1.PathReference){return val1 instanceof path_reference_1.PathReference&&val2 instanceof path_reference_1.PathReference&&val1.path===val2.path}if(val1 instanceof Date||val2 instanceof Date){return val1 instanceof Date&&val2 instanceof Date&&val1.getTime()===val2.getTime()}if(val1 instanceof Array||val2 instanceof Array){return val1 instanceof Array&&val2 instanceof Array&&val1.length===val2.length&&val1.every(((item,i)=>valuesAreEqual(val1[i],val2[i])))}if(isTypedArray(val1)||isTypedArray(val2)){if(!isTypedArray(val1)||!isTypedArray(val2)||val1.byteLength===val2.byteLength){return false}const typed1=val1 instanceof ArrayBuffer?new Uint8Array(val1):new Uint8Array(val1.buffer,val1.byteOffset,val1.byteLength),typed2=val2 instanceof ArrayBuffer?new Uint8Array(val2):new Uint8Array(val2.buffer,val2.byteOffset,val2.byteLength);return typed1.every(((val,i)=>typed2[i]===val))}const keys1=Object.keys(val1),keys2=Object.keys(val2);return keys1.length===keys2.length&&keys1.every((key=>keys2.includes(key)))&&keys1.every((key=>valuesAreEqual(val1[key],val2[key])))}return false}exports.valuesAreEqual=valuesAreEqual;class ObjectDifferences{constructor(added,removed,changed){this.added=added;this.removed=removed;this.changed=changed}forChild(key){if(this.added.includes(key)){return"added"}if(this.removed.includes(key)){return"removed"}const changed=this.changed.find((ch=>ch.key===key));return changed?changed.change:"identical"}}exports.ObjectDifferences=ObjectDifferences;function compareValues(oldVal,newVal,sortedResults=false){const voids=[undefined,null];if(oldVal===newVal){return"identical"}else if(voids.indexOf(oldVal)>=0&&voids.indexOf(newVal)<0){return"added"}else if(voids.indexOf(oldVal)<0&&voids.indexOf(newVal)>=0){return"removed"}else if(typeof oldVal!==typeof newVal){return"changed"}else if(isTypedArray(oldVal)||isTypedArray(newVal)){if(!isTypedArray(oldVal)||!isTypedArray(newVal)){return"changed"}const typed1=oldVal instanceof Uint8Array?oldVal:oldVal instanceof ArrayBuffer?new Uint8Array(oldVal):new Uint8Array(oldVal.buffer,oldVal.byteOffset,oldVal.byteLength);const typed2=newVal instanceof Uint8Array?newVal:newVal instanceof ArrayBuffer?new Uint8Array(newVal):new Uint8Array(newVal.buffer,newVal.byteOffset,newVal.byteLength);return typed1.byteLength===typed2.byteLength&&typed1.every(((val,i)=>typed2[i]===val))?"identical":"changed"}else if(oldVal instanceof Date||newVal instanceof Date){return oldVal instanceof Date&&newVal instanceof Date&&oldVal.getTime()===newVal.getTime()?"identical":"changed"}else if(oldVal instanceof path_reference_1.PathReference||newVal instanceof path_reference_1.PathReference){return oldVal instanceof path_reference_1.PathReference&&newVal instanceof path_reference_1.PathReference&&oldVal.path===newVal.path?"identical":"changed"}else if(typeof oldVal==="object"){const isArray=oldVal instanceof Array;const getKeys=obj=>{let keys=Object.keys(obj).filter((key=>!voids.includes(obj[key])));if(isArray){keys=keys.map((v=>parseInt(v)))}return keys};const oldKeys=getKeys(oldVal);const newKeys=getKeys(newVal);const removedKeys=oldKeys.filter((key=>!newKeys.includes(key)));const addedKeys=newKeys.filter((key=>!oldKeys.includes(key)));const changedKeys=newKeys.reduce(((changed,key)=>{if(oldKeys.includes(key)){const val1=oldVal[key];const val2=newVal[key];const c=compareValues(val1,val2);if(c!=="identical"){changed.push({key:key,change:c})}}return changed}),[]);if(addedKeys.length===0&&removedKeys.length===0&&changedKeys.length===0){return"identical"}else{return new ObjectDifferences(addedKeys,removedKeys,sortedResults?changedKeys.sort(((a,b)=>a.key{switch(compareResult){case"identical":return[];case"changed":return[{target:target,prev:prev,val:val}];case"added":return[{target:target,prev:null,val:val}];case"removed":return[{target:target,prev:prev,val:null}];default:{let changes=[];compareResult.added.forEach((key=>changes.push({target:target.concat(key),prev:null,val:val[key]})));compareResult.removed.forEach((key=>changes.push({target:target.concat(key),prev:prev[key],val:null})));compareResult.changed.forEach((item=>{const childChanges=process(target.concat(item.key),item.change,prev[item.key],val[item.key]);changes=changes.concat(childChanges)}));return changes}}};const compareResult=compareValues(oldVal,newVal,sortedResults);return process([],compareResult,oldVal,newVal)}exports.getMutations=getMutations;function getChildValues(childKey,oldValue,newValue){oldValue=oldValue===null?null:oldValue[childKey];if(typeof oldValue==="undefined"){oldValue=null}newValue=newValue===null?null:newValue[childKey];if(typeof newValue==="undefined"){newValue=null}return{oldValue:oldValue,newValue:newValue}}exports.getChildValues=getChildValues;function defer(fn){process_1.default.nextTick(fn)}exports.defer=defer}).call(this)}).call(this,require("buffer").Buffer)},{"./partial-array":15,"./path-reference":17,"./process":18,buffer:53}],27:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.BrowserAceBase=void 0;const acebase_local_1=require("./acebase-local");const indexed_db_1=require("./storage/custom/indexed-db");const deprecatedConstructorError=`Using AceBase constructor in the browser to use localStorage is deprecated!\nSwitch to:\nIndexedDB implementation (FASTER, MORE RELIABLE):\n let db = AceBase.WithIndexedDB(name, settings)\nOr, new LocalStorage implementation:\n let db = AceBase.WithLocalStorage(name, settings)\nOr, write your own CustomStorage adapter:\n let myCustomStorage = new CustomStorageSettings({ ... });\n let db = new AceBase(name, { storage: myCustomStorage })`;class BrowserAceBase extends acebase_local_1.AceBase{constructor(name,settings){if(typeof settings!=="object"||typeof settings.storage!=="object"){throw new Error(deprecatedConstructorError)}super(name,settings);this.settings.ipcEvents=settings.multipleTabs===true}static WithIndexedDB(dbname,init={}){return(0,indexed_db_1.createIndexedDBInstance)(dbname,init)}}exports.BrowserAceBase=BrowserAceBase},{"./acebase-local":28,"./storage/custom/indexed-db":45}],28:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AceBase=exports.AceBaseLocalSettings=exports.IndexedDBStorageSettings=exports.LocalStorageSettings=void 0;const acebase_core_1=require("acebase-core");const binary_1=require("./storage/binary");const api_local_1=require("./api-local");const local_storage_1=require("./storage/custom/local-storage");Object.defineProperty(exports,"LocalStorageSettings",{enumerable:true,get:function(){return local_storage_1.LocalStorageSettings}});const settings_1=require("./storage/custom/indexed-db/settings");Object.defineProperty(exports,"IndexedDBStorageSettings",{enumerable:true,get:function(){return settings_1.IndexedDBStorageSettings}});class AceBaseLocalSettings extends acebase_core_1.AceBaseBaseSettings{constructor(options={}){super(options);if(options.storage){this.storage=options.storage;if(options.ipc){this.storage.ipc=options.ipc}if(options.transactions){this.storage.transactions=options.transactions}}}}exports.AceBaseLocalSettings=AceBaseLocalSettings;class AceBase extends acebase_core_1.AceBaseBase{constructor(dbname,init={}){const settings=new AceBaseLocalSettings(init);super(dbname,settings);const apiSettings={db:this,settings:settings};this.api=new api_local_1.LocalApi(dbname,apiSettings,(()=>{this.emit("ready")}));this.recovery={repairNode:async(path,options)=>{if(this.api.storage instanceof binary_1.AceBaseStorage){await this.api.storage.repairNode(path,options)}else if(!this.api.storage.repairNode){throw new Error(`repairNode is not supported with chosen storage engine`)}}}}async close(){await this.api.storage.close()}get settings(){const ipc=this.api.storage.ipc,debug=this.debug;return{get logLevel(){return debug.level},set logLevel(level){debug.setLevel(level)},get ipcEvents(){return ipc.eventsEnabled},set ipcEvents(enabled){ipc.eventsEnabled=enabled}}}static WithLocalStorage(dbname,settings={}){const db=(0,local_storage_1.createLocalStorageInstance)(dbname,settings);return db}static WithIndexedDB(dbname,init={}){throw new Error(`IndexedDB storage can only be used in browser contexts`)}}exports.AceBase=AceBase},{"./api-local":29,"./storage/binary":39,"./storage/custom/indexed-db/settings":46,"./storage/custom/local-storage":48,"acebase-core":12}],29:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.LocalApi=void 0;const acebase_core_1=require("acebase-core");const binary_1=require("./storage/binary");const sqlite_1=require("./storage/sqlite");const mssql_1=require("./storage/mssql");const custom_1=require("./storage/custom");const node_value_types_1=require("./node-value-types");const query_1=require("./query");class LocalApi extends acebase_core_1.Api{constructor(dbname="default",init,readyCallback){super();this.db=init.db;const storageEnv={logLevel:init.settings.logLevel};if(typeof init.settings.storage==="object"){if(sqlite_1.SQLiteStorageSettings&&init.settings.storage instanceof sqlite_1.SQLiteStorageSettings){this.storage=new sqlite_1.SQLiteStorage(dbname,init.settings.storage,storageEnv)}else if(mssql_1.MSSQLStorageSettings&&init.settings.storage instanceof mssql_1.MSSQLStorageSettings){this.storage=new mssql_1.MSSQLStorage(dbname,init.settings.storage,storageEnv)}else if(custom_1.CustomStorageSettings&&init.settings.storage instanceof custom_1.CustomStorageSettings){this.storage=new custom_1.CustomStorage(dbname,init.settings.storage,storageEnv)}else{const storageSettings=init.settings.storage instanceof binary_1.AceBaseStorageSettings?init.settings.storage:new binary_1.AceBaseStorageSettings(init.settings.storage);this.storage=new binary_1.AceBaseStorage(dbname,storageSettings,storageEnv)}}else{this.storage=new binary_1.AceBaseStorage(dbname,new binary_1.AceBaseStorageSettings,storageEnv)}this.storage.on("ready",readyCallback)}async stats(options){return this.storage.stats}subscribe(path,event,callback){this.storage.subscriptions.add(path,event,callback)}unsubscribe(path,event,callback){this.storage.subscriptions.remove(path,event,callback)}async set(path,value,options={suppress_events:false,context:null}){const cursor=await this.storage.setNode(path,value,{suppress_events:options.suppress_events,context:options.context});return Object.assign({},cursor&&{cursor:cursor})}async update(path,updates,options={suppress_events:false,context:null}){const cursor=await this.storage.updateNode(path,updates,{suppress_events:options.suppress_events,context:options.context});return Object.assign({},cursor&&{cursor:cursor})}get transactionLoggingEnabled(){return this.storage.settings.transactions&&this.storage.settings.transactions.log===true}async get(path,options){if(!options){options={}}if(typeof options.include!=="undefined"&&!(options.include instanceof Array)){throw new TypeError(`options.include must be an array of key names`)}if(typeof options.exclude!=="undefined"&&!(options.exclude instanceof Array)){throw new TypeError(`options.exclude must be an array of key names`)}if(["undefined","boolean"].indexOf(typeof options.child_objects)<0){throw new TypeError(`options.child_objects must be a boolean`)}const node=await this.storage.getNode(path,options);return{value:node.value,context:{acebase_cursor:node.cursor},cursor:node.cursor}}async transaction(path,callback,options={suppress_events:false,context:null}){const cursor=await this.storage.transactNode(path,callback,{suppress_events:options.suppress_events,context:options.context});return Object.assign({},cursor&&{cursor:cursor})}async exists(path){const nodeInfo=await this.storage.getNodeInfo(path);return nodeInfo.exists}async query(path,query,options={snapshots:false}){const results=await(0,query_1.query)(this,path,query,options);return results}createIndex(path,key,options){return this.storage.indexes.create(path,key,options)}async getIndexes(){return this.storage.indexes.list()}async deleteIndex(filePath){return this.storage.indexes.delete(filePath)}async reflect(path,type,args){args=args||{};const getChildren=async(path,limit=50,skip=0,from=null)=>{if(typeof limit==="string"){limit=parseInt(limit)}if(typeof skip==="string"){skip=parseInt(skip)}if(["null","undefined"].includes(from)){from=null}const children=[];let n=0,stop=false,more=false;await this.storage.getChildren(path).next((childInfo=>{if(stop){more=true;return false}n++;const include=from!==null?childInfo.key>from:skip===0||n>skip;if(include){children.push(Object.assign({key:typeof childInfo.key==="string"?childInfo.key:childInfo.index,type:childInfo.valueTypeName,value:childInfo.value},typeof childInfo.address==="object"&&"pageNr"in childInfo.address&&{address:{pageNr:childInfo.address.pageNr,recordNr:childInfo.address.recordNr}}))}stop=limit>0&&children.length===limit})).catch((err=>{}));return{more:more,list:children}};switch(type){case"children":{const result=await getChildren(path,args.limit,args.skip,args.from);return result}case"info":{const info={key:"",exists:false,type:"unknown",value:undefined,address:undefined,children:{count:0,more:false,list:[]}};const nodeInfo=await this.storage.getNodeInfo(path,{include_child_count:args.child_count===true});info.key=typeof nodeInfo.key!=="undefined"?nodeInfo.key:nodeInfo.index;info.exists=nodeInfo.exists;info.type=nodeInfo.exists?nodeInfo.valueTypeName:undefined;info.value=nodeInfo.value;info.address=typeof nodeInfo.address==="object"&&"pageNr"in nodeInfo.address?{pageNr:nodeInfo.address.pageNr,recordNr:nodeInfo.address.recordNr}:undefined;const isObjectOrArray=nodeInfo.exists&&nodeInfo.address&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(nodeInfo.type);if(args.child_count===true){info.children={count:isObjectOrArray?nodeInfo.childCount:0}}else if(typeof args.child_limit==="number"&&args.child_limit>0){if(isObjectOrArray){info.children=await getChildren(path,args.child_limit,args.child_skip,args.child_from)}}return info}}}export(path,stream,options={format:"json",type_safe:true}){return this.storage.exportNode(path,stream,options)}import(path,read,options={format:"json",suppress_events:false,method:"set"}){return this.storage.importNode(path,read,options)}async setSchema(path,schema){return this.storage.setSchema(path,schema)}async getSchema(path){return this.storage.getSchema(path)}async getSchemas(){return this.storage.getSchemas()}async validateSchema(path,value,isUpdate){return this.storage.validateSchema(path,value,{updates:isUpdate})}async getMutations(filter){if(typeof this.storage.getMutations!=="function"){throw new Error("Used storage type does not support getMutations")}if(typeof filter!=="object"){throw new Error("No filter specified")}if(typeof filter.cursor!=="string"&&typeof filter.timestamp!=="number"){throw new Error("No cursor or timestamp given")}return this.storage.getMutations(filter)}async getChanges(filter){if(typeof this.storage.getChanges!=="function"){throw new Error("Used storage type does not support getChanges")}if(typeof filter!=="object"){throw new Error("No filter specified")}if(typeof filter.cursor!=="string"&&typeof filter.timestamp!=="number"){throw new Error("No cursor or timestamp given")}return this.storage.getChanges(filter)}}exports.LocalApi=LocalApi},{"./node-value-types":38,"./query":41,"./storage/binary":39,"./storage/custom":44,"./storage/mssql":39,"./storage/sqlite":39,"acebase-core":12}],30:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AsyncTaskBatch=void 0;class AsyncTaskBatch{constructor(limit=1e3,options){this.limit=limit;this.options=options;this.added=0;this.scheduled=[];this.running=0;this.results=[];this.done=false}async execute(task,index){var _a,_b;try{this.running++;const result=await task();this.results[index]=result;this.running--;if(this.running===0&&this.scheduled.length===0){this.done=true;(_a=this.doneCallback)===null||_a===void 0?void 0:_a.call(this,this.results)}else if(this.scheduled.length>0){const next=this.scheduled.shift();this.execute(next.task,next.index)}}catch(err){this.done=true;(_b=this.errorCallback)===null||_b===void 0?void 0:_b.call(this,err)}}add(task){var _a;if(this.done){throw new Error(`Cannot add to a batch that has already finished. Use wait option and start batch processing manually if you are adding tasks in an async loop`)}const index=this.added++;if(((_a=this.options)===null||_a===void 0?void 0:_a.wait)!==true&&this.running{this.doneCallback=resolve;this.errorCallback=reject}));return this.results}}exports.AsyncTaskBatch=AsyncTaskBatch},{}],31:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SchemaValidationError=exports.StorageSettings=exports.ICustomStorageNodeMetaData=exports.ICustomStorageNode=exports.CustomStorageHelpers=exports.CustomStorageSettings=exports.CustomStorageTransaction=exports.MSSQLStorageSettings=exports.SQLiteStorageSettings=exports.AceBaseStorageSettings=exports.IndexedDBStorageSettings=exports.LocalStorageSettings=exports.AceBaseLocalSettings=exports.AceBase=exports.PartialArray=exports.proxyAccess=exports.ID=exports.ObjectCollection=exports.TypeMappings=exports.PathReference=exports.EventSubscription=exports.EventStream=exports.DataReferencesArray=exports.DataSnapshotsArray=exports.DataReference=exports.DataSnapshot=void 0;const acebase_core_1=require("acebase-core");Object.defineProperty(exports,"DataReference",{enumerable:true,get:function(){return acebase_core_1.DataReference}});Object.defineProperty(exports,"DataSnapshot",{enumerable:true,get:function(){return acebase_core_1.DataSnapshot}});Object.defineProperty(exports,"EventSubscription",{enumerable:true,get:function(){return acebase_core_1.EventSubscription}});Object.defineProperty(exports,"PathReference",{enumerable:true,get:function(){return acebase_core_1.PathReference}});Object.defineProperty(exports,"TypeMappings",{enumerable:true,get:function(){return acebase_core_1.TypeMappings}});Object.defineProperty(exports,"ID",{enumerable:true,get:function(){return acebase_core_1.ID}});Object.defineProperty(exports,"proxyAccess",{enumerable:true,get:function(){return acebase_core_1.proxyAccess}});Object.defineProperty(exports,"DataSnapshotsArray",{enumerable:true,get:function(){return acebase_core_1.DataSnapshotsArray}});Object.defineProperty(exports,"ObjectCollection",{enumerable:true,get:function(){return acebase_core_1.ObjectCollection}});Object.defineProperty(exports,"DataReferencesArray",{enumerable:true,get:function(){return acebase_core_1.DataReferencesArray}});Object.defineProperty(exports,"EventStream",{enumerable:true,get:function(){return acebase_core_1.EventStream}});Object.defineProperty(exports,"PartialArray",{enumerable:true,get:function(){return acebase_core_1.PartialArray}});const acebase_local_1=require("./acebase-local");const acebase_browser_1=require("./acebase-browser");Object.defineProperty(exports,"AceBase",{enumerable:true,get:function(){return acebase_browser_1.BrowserAceBase}});const custom_1=require("./storage/custom");const acebase={AceBase:acebase_browser_1.BrowserAceBase,AceBaseLocalSettings:acebase_local_1.AceBaseLocalSettings,DataReference:acebase_core_1.DataReference,DataSnapshot:acebase_core_1.DataSnapshot,EventSubscription:acebase_core_1.EventSubscription,PathReference:acebase_core_1.PathReference,TypeMappings:acebase_core_1.TypeMappings,CustomStorageSettings:custom_1.CustomStorageSettings,CustomStorageTransaction:custom_1.CustomStorageTransaction,CustomStorageHelpers:custom_1.CustomStorageHelpers,ID:acebase_core_1.ID,proxyAccess:acebase_core_1.proxyAccess,DataSnapshotsArray:acebase_core_1.DataSnapshotsArray};window.acebase=acebase;window.AceBase=acebase_browser_1.BrowserAceBase;exports.default=acebase;var acebase_local_2=require("./acebase-local");Object.defineProperty(exports,"AceBaseLocalSettings",{enumerable:true,get:function(){return acebase_local_2.AceBaseLocalSettings}});Object.defineProperty(exports,"LocalStorageSettings",{enumerable:true,get:function(){return acebase_local_2.LocalStorageSettings}});Object.defineProperty(exports,"IndexedDBStorageSettings",{enumerable:true,get:function(){return acebase_local_2.IndexedDBStorageSettings}});var binary_1=require("./storage/binary");Object.defineProperty(exports,"AceBaseStorageSettings",{enumerable:true,get:function(){return binary_1.AceBaseStorageSettings}});var sqlite_1=require("./storage/sqlite");Object.defineProperty(exports,"SQLiteStorageSettings",{enumerable:true,get:function(){return sqlite_1.SQLiteStorageSettings}});var mssql_1=require("./storage/mssql");Object.defineProperty(exports,"MSSQLStorageSettings",{enumerable:true,get:function(){return mssql_1.MSSQLStorageSettings}});var custom_2=require("./storage/custom");Object.defineProperty(exports,"CustomStorageTransaction",{enumerable:true,get:function(){return custom_2.CustomStorageTransaction}});Object.defineProperty(exports,"CustomStorageSettings",{enumerable:true,get:function(){return custom_2.CustomStorageSettings}});Object.defineProperty(exports,"CustomStorageHelpers",{enumerable:true,get:function(){return custom_2.CustomStorageHelpers}});Object.defineProperty(exports,"ICustomStorageNode",{enumerable:true,get:function(){return custom_2.ICustomStorageNode}});Object.defineProperty(exports,"ICustomStorageNodeMetaData",{enumerable:true,get:function(){return custom_2.ICustomStorageNodeMetaData}});var storage_1=require("./storage");Object.defineProperty(exports,"StorageSettings",{enumerable:true,get:function(){return storage_1.StorageSettings}});Object.defineProperty(exports,"SchemaValidationError",{enumerable:true,get:function(){return storage_1.SchemaValidationError}})},{"./acebase-browser":27,"./acebase-local":28,"./storage":51,"./storage/binary":39,"./storage/custom":44,"./storage/mssql":39,"./storage/sqlite":39,"acebase-core":12}],32:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.IPCPeer=void 0;const acebase_core_1=require("acebase-core");const ipc_1=require("./ipc");class IPCPeer extends ipc_1.AceBaseIPCPeer{constructor(storage){super(storage,acebase_core_1.ID.generate());this.masterPeerId=this.id;this.ipcType="browser.bcc";window.addEventListener("beforeunload",(()=>{this.exit()}));if(typeof window.BroadcastChannel!=="undefined"){this.channel=new BroadcastChannel(`acebase:${storage.name}`)}else{const listeners=[null];const notImplemented=()=>{throw new Error("Not implemented")};this.channel={name:`acebase:${storage.name}`,postMessage:message=>{const messageId=acebase_core_1.ID.generate(),key=`acebase:${storage.name}:${this.id}:${messageId}`,payload=JSON.stringify(acebase_core_1.Transport.serialize(message));localStorage.setItem(key,payload);setTimeout((()=>localStorage.removeItem(key)),10)},set onmessage(handler){listeners[0]=handler},set onmessageerror(handler){notImplemented()},close(){notImplemented()},addEventListener(event,callback){if(event!=="message"){notImplemented()}listeners.push(callback)},removeEventListener(event,callback){const i=listeners.indexOf(callback);i>=1&&listeners.splice(i,1)},dispatchEvent(event){listeners.forEach((callback=>{try{callback&&callback(event)}catch(err){console.error(err)}}));return true}};window.addEventListener("storage",(event=>{const[acebase,dbname,peerId,messageId]=event.key.split(":");if(acebase!=="acebase"||dbname!==storage.name||peerId===this.id||event.newValue===null){return}const message=acebase_core_1.Transport.deserialize(JSON.parse(event.newValue));this.channel.dispatchEvent({data:message})}))}this.channel.addEventListener("message",(async event=>{const message=event.data;if(message.to&&message.to!==this.id){return}storage.debug.verbose(`[BroadcastChannel] received: `,message);if(message.type==="hello"&&message.frompeer.id)).concat(this.id).filter((id=>id!==this.masterPeerId));this.masterPeerId=allPeerIds.sort()[0];storage.debug.log(`[BroadcastChannel] ${this.masterPeerId===this.id?"We are":`tab ${this.masterPeerId} is`} the new master. Requesting ${this._locks.length} locks (${this._locks.filter((r=>!r.granted)).length} pending)`);const requests=this._locks.splice(0);await Promise.all(requests.filter((req=>req.granted)).map((async req=>{let released,movedToParent;req.lock.release=()=>new Promise((resolve=>released=resolve));req.lock.moveToParent=()=>new Promise((resolve=>movedToParent=resolve));const lock=await this.lock({path:req.lock.path,write:req.lock.forWriting,tid:req.lock.tid,comment:req.lock.comment});if(movedToParent){const newLock=await lock.moveToParent();movedToParent(newLock)}if(released){await lock.release();released()}})));await Promise.all(requests.filter((req=>!req.granted)).map((async req=>{await this.lock(req.request)})))}return this.handleMessage(message)}));const helloMsg={type:"hello",from:this.id,data:undefined};this.sendMessage(helloMsg)}sendMessage(message){this.storage.debug.verbose(`[BroadcastChannel] sending: `,message);this.channel.postMessage(message)}}exports.IPCPeer=IPCPeer},{"./ipc":33,"acebase-core":12}],33:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AceBaseIPCPeer=exports.AceBaseIPCPeerExitingError=void 0;const acebase_core_1=require("acebase-core");const node_lock_1=require("../node-lock");class AceBaseIPCPeerExitingError extends Error{constructor(message){super(`Exiting: ${message}`)}}exports.AceBaseIPCPeerExitingError=AceBaseIPCPeerExitingError;class AceBaseIPCPeer extends acebase_core_1.SimpleEventEmitter{constructor(storage,id,dbname=storage.name){super();this.storage=storage;this.id=id;this.dbname=dbname;this.ipcType="ipc";this.ourSubscriptions=[];this.remoteSubscriptions=[];this.peers=[];this._exiting=false;this._locks=[];this._requests=new Map;this._eventsEnabled=true;this._nodeLocker=new node_lock_1.NodeLocker(storage.debug,storage.settings.lockTimeout);storage.on("subscribe",(subscription=>{storage.debug.verbose(`database subscription being added on peer ${this.id}`);const remoteSubscription=this.remoteSubscriptions.find((sub=>sub.callback===subscription.callback));if(remoteSubscription){return}const othersAlreadyNotifying=this.ourSubscriptions.some((sub=>sub.event===subscription.event&&sub.path===subscription.path));this.ourSubscriptions.push(subscription);if(othersAlreadyNotifying){return}const message={type:"subscribe",from:this.id,data:{path:subscription.path,event:subscription.event}};this.sendMessage(message)}));storage.on("unsubscribe",(subscription=>{const remoteSubscription=this.remoteSubscriptions.find((sub=>sub.callback===subscription.callback));if(remoteSubscription){this.remoteSubscriptions.splice(this.remoteSubscriptions.indexOf(remoteSubscription),1);return}this.ourSubscriptions.filter((sub=>sub.path===subscription.path&&(!subscription.event||sub.event===subscription.event)&&(!subscription.callback||sub.callback===subscription.callback))).forEach((sub=>{this.ourSubscriptions.splice(this.ourSubscriptions.indexOf(sub),1);const message={type:"unsubscribe",from:this.id,data:{path:sub.path,event:sub.event}};this.sendMessage(message)}))}))}get isMaster(){return this.masterPeerId===this.id}async exit(code=0){if(this._exiting){return this.once("exit")}this._exiting=true;this.storage.debug.warn(`Received ${this.isMaster?"master":"worker "+this.id} process exit request`);if(this._locks.length>0){this.storage.debug.warn(`Waiting for ${this.isMaster?"master":"worker"} ${this.id} locks to clear`);await this.once("locks-cleared")}this.sayGoodbye(this.id);this.storage.debug.warn(`${this.isMaster?"Master":"Worker "+this.id} will now exit`);this.emitOnce("exit",code)}sayGoodbye(forPeerId){const bye={type:"bye",from:forPeerId,data:undefined};this.sendMessage(bye)}addPeer(id,sendReply=true){if(this._exiting){return}const peer=this.peers.find((w=>w.id===id));if(!peer){this.peers.push({id:id,lastSeen:Date.now()})}if(sendReply){const helloMessage={type:"hello",from:this.id,to:id,data:undefined};this.sendMessage(helloMessage);this.ourSubscriptions.forEach((sub=>{const message={type:"subscribe",from:this.id,to:id,data:{path:sub.path,event:sub.event}};this.sendMessage(message)}))}}removePeer(id,ignoreUnknown=false){if(this._exiting){return}const peer=this.peers.find((peer=>peer.id===id));if(!peer){if(!ignoreUnknown){throw new Error(`We are supposed to know this peer!`)}return}this.peers.splice(this.peers.indexOf(peer),1);const subscriptions=this.remoteSubscriptions.filter((sub=>sub.for===id));subscriptions.forEach((sub=>{this.remoteSubscriptions.splice(this.remoteSubscriptions.indexOf(sub),1);this.storage.subscriptions.remove(sub.path,sub.event,sub.callback)}))}addRemoteSubscription(peerId,details){if(this._exiting){return}if(this.remoteSubscriptions.some((sub=>sub.for===peerId&&sub.event===details.event&&sub.path===details.path))){return}const subscribeCallback=(err,path,val,previous,context)=>{const eventMessage={type:"event",from:this.id,to:peerId,path:details.path,event:details.event,data:{path:path,val:val,previous:previous,context:context}};this.sendMessage(eventMessage)};this.remoteSubscriptions.push({for:peerId,event:details.event,path:details.path,callback:subscribeCallback});this.storage.subscriptions.add(details.path,details.event,subscribeCallback)}cancelRemoteSubscription(peerId,details){const sub=this.remoteSubscriptions.find((sub=>sub.for===peerId&&sub.event===details.event&&sub.path===details.event));if(!sub){return}this.storage.subscriptions.remove(details.path,details.event,sub.callback)}async handleMessage(message){switch(message.type){case"hello":return this.addPeer(message.from,message.to!==this.id);case"bye":return this.removePeer(message.from,true);case"subscribe":return this.addRemoteSubscription(message.from,message.data);case"unsubscribe":return this.cancelRemoteSubscription(message.from,message.data);case"event":{if(!this._eventsEnabled){break}const eventMessage=message;const context=eventMessage.data.context||{};context.acebase_ipc={type:this.ipcType,origin:eventMessage.from};const subscriptions=this.ourSubscriptions.filter((sub=>sub.event===eventMessage.event&&sub.path===eventMessage.path));subscriptions.forEach((sub=>{sub.callback(null,eventMessage.data.path,eventMessage.data.val,eventMessage.data.previous,context)}));break}case"lock-request":{if(!this.isMaster){throw new Error(`Workers are not supposed to receive lock requests!`)}const request=message;const result={type:"lock-result",id:request.id,from:this.id,to:request.from,ok:true,data:undefined};try{const lock=await this.lock(request.data);result.data={id:lock.id,path:lock.path,tid:lock.tid,write:lock.forWriting,expires:lock.expires,comment:lock.comment}}catch(err){result.ok=false;result.reason=err.stack||err.message||err}return this.sendMessage(result)}case"lock-result":{if(this.isMaster){throw new Error(`Masters are not supposed to receive results for lock requests!`)}const result=message;const request=this._requests.get(result.id);if(typeof request!=="object"){throw new Error(`The request must be known to us!`)}if(result.ok){request.resolve(result.data)}else{request.reject(new Error(result.reason))}return}case"unlock-request":{if(!this.isMaster){throw new Error(`Workers are not supposed to receive unlock requests!`)}const request=message;const result={type:"unlock-result",id:request.id,from:this.id,to:request.from,ok:true,data:{id:request.data.id}};try{const lockInfo=this._locks.find((l=>{var _a;return((_a=l.lock)===null||_a===void 0?void 0:_a.id)===request.data.id}));await lockInfo.lock.release()}catch(err){result.ok=false;result.reason=err.stack||err.message||err}return this.sendMessage(result)}case"unlock-result":{if(this.isMaster){throw new Error(`Masters are not supposed to receive results for unlock requests!`)}const result=message;const request=this._requests.get(result.id);if(typeof request!=="object"){throw new Error(`The request must be known to us!`)}if(result.ok){request.resolve(result.data)}else{request.reject(new Error(result.reason))}return}case"move-lock-request":{if(!this.isMaster){throw new Error(`Workers are not supposed to receive move lock requests!`)}const request=message;const result={type:"lock-result",id:request.id,from:this.id,to:request.from,ok:true,data:undefined};try{let movedLock;const lockRequest=this._locks.find((r=>{var _a;return((_a=r.lock)===null||_a===void 0?void 0:_a.id)===request.data.id}));if(request.data.move_to==="parent"){movedLock=await lockRequest.lock.moveToParent()}else{throw new Error(`Unknown lock move_to "${request.data.move_to}"`)}lockRequest.lock=movedLock;result.data={id:movedLock.id,path:movedLock.path,tid:movedLock.tid,write:movedLock.forWriting,expires:movedLock.expires,comment:movedLock.comment}}catch(err){result.ok=false;result.reason=err.stack||err.message||err}return this.sendMessage(result)}case"notification":{return this.emit("notification",message)}case"request":{return this.emit("request",message)}case"result":{const result=message;const request=this._requests.get(result.id);if(typeof request!=="object"){throw new Error(`Result of unknown request received`)}if(result.ok){request.resolve(result.data)}else{request.reject(new Error(result.reason))}}}}async lock(details){if(this._exiting){const tidApproved=this._locks.find((l=>l.tid===details.tid&&l.granted));if(!tidApproved){throw new AceBaseIPCPeerExitingError("new transaction lock denied because the IPC peer is exiting")}}const removeLock=lockDetails=>{this._locks.splice(this._locks.indexOf(lockDetails),1);if(this._locks.length===0){this.emit("locks-cleared")}};if(this.isMaster){const lockInfo={tid:details.tid,granted:false,request:details,lock:null};this._locks.push(lockInfo);const lock=await this._nodeLocker.lock(details.path,details.tid,details.write,details.comment);lockInfo.tid=lock.tid;lockInfo.granted=true;const createIPCLock=lock=>({get id(){return lock.id},get tid(){return lock.tid},get path(){return lock.path},get forWriting(){return lock.forWriting},get expires(){return lock.expires},get comment(){return lock.comment},get state(){return lock.state},release:async()=>{await lock.release();removeLock(lockInfo)},moveToParent:async()=>{const parentLock=await lock.moveToParent();lockInfo.lock=createIPCLock(parentLock);return lockInfo.lock}});lockInfo.lock=createIPCLock(lock);return lockInfo.lock}else{const lockInfo={tid:details.tid,granted:false,request:details,lock:null};this._locks.push(lockInfo);const createIPCLock=result=>{lockInfo.granted=true;lockInfo.tid=result.tid;lockInfo.lock={id:result.id,tid:result.tid,path:result.path,forWriting:result.write,state:node_lock_1.LOCK_STATE.LOCKED,expires:result.expires,comment:result.comment,release:async()=>{const req={type:"unlock-request",id:acebase_core_1.ID.generate(),from:this.id,to:this.masterPeerId,data:{id:lockInfo.lock.id}};await this.request(req);lockInfo.lock.state=node_lock_1.LOCK_STATE.DONE;this.storage.debug.verbose(`Worker ${this.id} released lock ${lockInfo.lock.id} (tid ${lockInfo.lock.tid}, ${lockInfo.lock.comment}, "/${lockInfo.lock.path}", ${lockInfo.lock.forWriting?"write":"read"})`);removeLock(lockInfo)},moveToParent:async()=>{const req={type:"move-lock-request",id:acebase_core_1.ID.generate(),from:this.id,to:this.masterPeerId,data:{id:lockInfo.lock.id,move_to:"parent"}};let result;try{result=await this.request(req)}catch(err){lockInfo.lock.state=node_lock_1.LOCK_STATE.DONE;removeLock(lockInfo);throw err}lockInfo.lock=createIPCLock(result);return lockInfo.lock}};return lockInfo.lock};const req={type:"lock-request",id:acebase_core_1.ID.generate(),from:this.id,to:this.masterPeerId,data:details};let result,err;try{result=await this.request(req)}catch(e){err=e;result=null}if(err){removeLock(lockInfo);throw err}return createIPCLock(result)}}async request(req){let resolve,reject;const promise=new Promise(((rs,rj)=>{resolve=result=>{this._requests.delete(req.id);rs(result)};reject=err=>{this._requests.delete(req.id);rj(err)}}));this._requests.set(req.id,{resolve:resolve,reject:reject,request:req});this.sendMessage(req);return promise}sendRequest(request){const req={type:"request",from:this.id,to:this.masterPeerId,id:acebase_core_1.ID.generate(),data:request};return this.request(req).catch((err=>{this.storage.debug.error(err);throw err}))}replyRequest(requestMessage,result){const reply={type:"result",id:requestMessage.id,ok:true,from:this.id,to:requestMessage.from,data:result};this.sendMessage(reply)}sendNotification(notification){const msg={type:"notification",from:this.id,data:notification};this.sendMessage(msg)}get eventsEnabled(){return this._eventsEnabled}set eventsEnabled(enabled){this.storage.debug.log(`ipc events ${enabled?"enabled":"disabled"}`);this._eventsEnabled=enabled}}exports.AceBaseIPCPeer=AceBaseIPCPeer},{"../node-lock":37,"acebase-core":12}],34:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.RemovedNodeAddress=exports.NodeAddress=void 0;class NodeAddress{constructor(path){this.path=path}toString(){return`"/${this.path}"`}equals(address){return this.path===address.path}}exports.NodeAddress=NodeAddress;class RemovedNodeAddress extends NodeAddress{constructor(path){super(path)}toString(){return`"/${this.path}" (removed)`}equals(address){return address instanceof RemovedNodeAddress&&this.path===address.path}}exports.RemovedNodeAddress=RemovedNodeAddress},{}],35:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.NodeRevisionError=exports.NodeNotFoundError=void 0;class NodeNotFoundError extends Error{}exports.NodeNotFoundError=NodeNotFoundError;class NodeRevisionError extends Error{}exports.NodeRevisionError=NodeRevisionError},{}],36:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.NodeInfo=void 0;const node_value_types_1=require("./node-value-types");const acebase_core_1=require("acebase-core");class NodeInfo{constructor(info){this.path=info.path;this.type=info.type;this.index=info.index;this.key=info.key;this.exists=info.exists;this.address=info.address;this.value=info.value;this.childCount=info.childCount;if(typeof this.path==="string"&&(typeof this.key==="undefined"&&typeof this.index==="undefined")){const pathInfo=acebase_core_1.PathInfo.get(this.path);if(typeof pathInfo.key==="number"){this.index=pathInfo.key}else{this.key=pathInfo.key}}if(typeof this.exists==="undefined"){this.exists=true}}get valueType(){return this.type}get valueTypeName(){return(0,node_value_types_1.getValueTypeName)(this.valueType)}toString(){if(!this.exists){return`"${this.path}" doesn't exist`}if(this.address){return`"${this.path}" is ${this.valueTypeName} stored at ${this.address.toString()}`}else{return`"${this.path}" is ${this.valueTypeName} with value ${this.value}`}}}exports.NodeInfo=NodeInfo},{"./node-value-types":38,"acebase-core":12}],37:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.NodeLock=exports.NodeLocker=exports.LOCK_STATE=void 0;const acebase_core_1=require("acebase-core");const DEBUG_MODE=false;const DEFAULT_LOCK_TIMEOUT=120;exports.LOCK_STATE={PENDING:"pending",LOCKED:"locked",EXPIRED:"expired",DONE:"done"};class NodeLocker{constructor(debug,lockTimeout=DEFAULT_LOCK_TIMEOUT){this._locks=[];this._lastTid=0;this.debug=debug;this.timeout=lockTimeout*1e3}setTimeout(timeout){this.timeout=timeout*1e3}createTid(){return DEBUG_MODE?++this._lastTid:acebase_core_1.ID.generate()}_allowLock(path,tid,forWriting){const conflict=this._locks.find((otherLock=>otherLock.tid!==tid&&otherLock.state===exports.LOCK_STATE.LOCKED&&(forWriting||otherLock.forWriting)));return{allow:!conflict,conflict:conflict}}quit(){return new Promise((resolve=>{if(this._locks.length===0){return resolve()}this._quit=resolve}))}_rejectLock(lock,err){this._locks.splice(this._locks.indexOf(lock),1);clearTimeout(lock.timeout);try{lock.reject(err)}catch(err){console.error(`Unhandled promise rejection:`,err)}}_processLockQueue(){if(this._quit){const quitError=new Error("Quitting");this._locks.filter((lock=>lock.state===exports.LOCK_STATE.PENDING)).forEach((lock=>this._rejectLock(lock,quitError)));if(this._locks.length===0){this._quit()}}const pending=this._locks.filter((lock=>lock.state===exports.LOCK_STATE.PENDING)).sort(((a,b)=>{if(a.priority&&!b.priority){return-1}else if(!a.priority&&b.priority){return 1}return a.requested-b.requested}));pending.forEach((lock=>{const check=this._allowLock(lock.path,lock.tid,lock.forWriting);lock.waitingFor=check.conflict||null;if(check.allow){this.lock(lock).then(lock.resolve).catch((err=>this._rejectLock(lock,err)))}}))}async lock(path,tid,forWriting=true,comment="",options={withPriority:false,noTimeout:false}){let lock,proceed;if(path instanceof NodeLock){lock=path;proceed=true}else if(this._locks.findIndex((l=>l.tid===tid&&l.state===exports.LOCK_STATE.EXPIRED))>=0){throw new Error(`lock on tid ${tid} has expired, not allowed to continue`)}else if(this._quit&&!options.withPriority){throw new Error(`Quitting`)}else{DEBUG_MODE&&console.error(`${forWriting?"write":"read"} lock requested on "${path}" by tid ${tid} (${comment})`);lock=new NodeLock(this,path,tid,forWriting,options.withPriority===true);lock.comment=comment;this._locks.push(lock);const check=this._allowLock(path,tid,forWriting);lock.waitingFor=check.conflict||null;proceed=check.allow}if(proceed){DEBUG_MODE&&console.error(`${lock.forWriting?"write":"read"} lock ALLOWED on "${lock.path}" by tid ${lock.tid} (${lock.comment})`);lock.state=exports.LOCK_STATE.LOCKED;if(typeof lock.granted==="number"){}else{lock.granted=Date.now();if(options.noTimeout!==true){lock.expires=Date.now()+this.timeout;let timeoutCount=0;const timeoutHandler=()=>{if(lock.state!==exports.LOCK_STATE.LOCKED){return}timeoutCount++;if(timeoutCount<=3){this.debug.warn(`${lock.forWriting?"write":"read"} lock on path "/${lock.path}" by tid ${lock.tid} (${lock.comment}) is taking a long time to complete [${timeoutCount}]`);lock.timeout=setTimeout(timeoutHandler,this.timeout/4);return}this.debug.error(`lock :: ${lock.forWriting?"write":"read"} lock on path "/${lock.path}" by tid ${lock.tid} (${lock.comment}) took too long`);lock.state=exports.LOCK_STATE.EXPIRED;this._processLockQueue()};lock.timeout=setTimeout(timeoutHandler,this.timeout/4)}}return lock}else{console.assert(lock.state===exports.LOCK_STATE.PENDING);return new Promise(((resolve,reject)=>{lock.resolve=resolve;lock.reject=reject}))}}unlock(lockOrId,comment,processQueue=true){let lock,i;if(lockOrId instanceof NodeLock){lock=lockOrId;i=this._locks.indexOf(lock)}else{const id=lockOrId;i=this._locks.findIndex((l=>l.id===id));lock=this._locks[i]}if(i<0){const msg=`lock on "/${lock.path}" for tid ${lock.tid} wasn't found; ${comment}`;throw new Error(msg)}lock.state=exports.LOCK_STATE.DONE;clearTimeout(lock.timeout);this._locks.splice(i,1);DEBUG_MODE&&console.error(`${lock.forWriting?"write":"read"} lock RELEASED on "${lock.path}" by tid ${lock.tid}`);processQueue&&this._processLockQueue();return lock}list(){return this._locks||[]}isAllowed(path,tid,forWriting){return this._allowLock(path,tid,forWriting).allow}}exports.NodeLocker=NodeLocker;let lastid=0;class NodeLock{constructor(locker,path,tid,forWriting,priority=false){this.locker=locker;this.path=path;this.tid=tid;this.forWriting=forWriting;this.priority=priority;this.state=exports.LOCK_STATE.PENDING;this.requested=Date.now();this.comment="";this.waitingFor=null;this.id=++lastid;this.history=[]}static get LOCK_STATE(){return exports.LOCK_STATE}async release(comment){this.history.push({action:"release",path:this.path,forWriting:this.forWriting,comment:comment});return this.locker.unlock(this,comment||this.comment)}async moveToParent(){const parentPath=acebase_core_1.PathInfo.get(this.path).parentPath;const allowed=this.locker.isAllowed(parentPath,this.tid,this.forWriting);if(allowed){DEBUG_MODE&&console.error(`moveToParent ALLOWED for ${this.forWriting?"write":"read"} lock on "${this.path}" by tid ${this.tid} (${this.comment})`);this.history.push({path:this.path,forWriting:this.forWriting,action:"moving to parent"});this.waitingFor=null;this.path=parentPath;return this}else{DEBUG_MODE&&console.error(`moveToParent QUEUED for ${this.forWriting?"write":"read"} lock on "${this.path}" by tid ${this.tid} (${this.comment})`);this.locker.unlock(this,`moveLockToParent: ${this.comment}`,false);const newLock=await this.locker.lock(parentPath,this.tid,this.forWriting,this.comment,{withPriority:true});DEBUG_MODE&&console.error(`QUEUED moveToParent ALLOWED for ${this.forWriting?"write":"read"} lock on "${this.path}" by tid ${this.tid} (${this.comment})`);newLock.history=this.history;newLock.history.push({path:this.path,forWriting:this.forWriting,action:"moving to parent through queue (priority)"});return newLock}}}exports.NodeLock=NodeLock},{"acebase-core":12}],38:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.getValueType=exports.getNodeValueType=exports.getValueTypeName=exports.VALUE_TYPES=void 0;const acebase_core_1=require("acebase-core");exports.VALUE_TYPES=Object.freeze({OBJECT:1,ARRAY:2,NUMBER:3,BOOLEAN:4,STRING:5,BIGINT:7,DATETIME:6,BINARY:8,REFERENCE:9});function getValueTypeName(valueType){switch(valueType){case exports.VALUE_TYPES.ARRAY:return"array";case exports.VALUE_TYPES.BINARY:return"binary";case exports.VALUE_TYPES.BOOLEAN:return"boolean";case exports.VALUE_TYPES.DATETIME:return"date";case exports.VALUE_TYPES.NUMBER:return"number";case exports.VALUE_TYPES.OBJECT:return"object";case exports.VALUE_TYPES.REFERENCE:return"reference";case exports.VALUE_TYPES.STRING:return"string";case exports.VALUE_TYPES.BIGINT:return"bigint";default:"unknown"}}exports.getValueTypeName=getValueTypeName;function getNodeValueType(value){if(value instanceof Array){return exports.VALUE_TYPES.ARRAY}else if(value instanceof acebase_core_1.PathReference){return exports.VALUE_TYPES.REFERENCE}else if(value instanceof ArrayBuffer){return exports.VALUE_TYPES.BINARY}else if(typeof value==="string"){return exports.VALUE_TYPES.STRING}else if(typeof value==="object"){return exports.VALUE_TYPES.OBJECT}else if(typeof value==="bigint"){return exports.VALUE_TYPES.BIGINT}throw new Error(`Invalid value for standalone node: ${value}`)}exports.getNodeValueType=getNodeValueType;function getValueType(value){if(value instanceof Array){return exports.VALUE_TYPES.ARRAY}else if(value instanceof acebase_core_1.PathReference){return exports.VALUE_TYPES.REFERENCE}else if(value instanceof ArrayBuffer){return exports.VALUE_TYPES.BINARY}else if(value instanceof Date){return exports.VALUE_TYPES.DATETIME}else if(typeof value==="string"){return exports.VALUE_TYPES.STRING}else if(typeof value==="object"){return exports.VALUE_TYPES.OBJECT}else if(typeof value==="number"){return exports.VALUE_TYPES.NUMBER}else if(typeof value==="boolean"){return exports.VALUE_TYPES.BOOLEAN}else if(typeof value==="bigint"){return exports.VALUE_TYPES.BIGINT}throw new Error(`Unknown value type: ${value}`)}exports.getValueType=getValueType},{"acebase-core":12}],39:[function(require,module,exports){},{}],40:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.pfs=void 0;class pfs{static get hasFileSystem(){return false}static get fs(){return null}}exports.pfs=pfs},{}],41:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.query=void 0;const acebase_core_1=require("acebase-core");const node_value_types_1=require("./node-value-types");const node_errors_1=require("./node-errors");const data_index_1=require("./data-index");const async_task_batch_1=require("./async-task-batch");const noop=()=>{};function query(api,path,query,options={snapshots:false,include:undefined,exclude:undefined,child_objects:undefined,eventHandler:noop}){var _a;if(typeof options!=="object"){options={}}if(typeof options.snapshots==="undefined"){options.snapshots=false}const context={};if((_a=api.storage.settings.transactions)===null||_a===void 0?void 0:_a.log){context.acebase_cursor=acebase_core_1.ID.generate()}const queryFilters=query.filters.map((f=>Object.assign({},f)));const querySort=query.order.map((s=>Object.assign({},s)));const sortMatches=matches=>{matches.sort(((a,b)=>{const compare=i=>{const o=querySort[i];const trailKeys=acebase_core_1.PathInfo.getPathKeys(typeof o.key==="number"?`[${o.key}]`:o.key);const left=trailKeys.reduce(((val,key)=>val!==null&&typeof val==="object"&&key in val?val[key]:null),a.val);const right=trailKeys.reduce(((val,key)=>val!==null&&typeof val==="object"&&key in val?val[key]:null),b.val);if(left===null){return right===null?0:o.ascending?-1:1}if(right===null){return o.ascending?1:-1}if(left==right){if(i{if(preResults.length===0){return[]}const maxBatchSize=50;const batch=new async_task_batch_1.AsyncTaskBatch(maxBatchSize);const results=[];preResults.forEach((({path:path},index)=>batch.add((async()=>{const node=await api.storage.getNode(path,options);const val=node.value;if(val===null){api.storage.debug.warn(`Indexed result "/${path}" does not have a record!`);return}const result={path:path,val:val};if(stepsExecuted.sorted){results[index]=result}else{results.push(result);if(!stepsExecuted.skipped&&results.length>query.skip+Math.abs(query.take)){sortMatches(results);results.pop()}}}))));await batch.finish();return results};const pathInfo=acebase_core_1.PathInfo.get(path);const isWildcardPath=pathInfo.keys.some((key=>key==="*"||key.toString().startsWith("$")));const availableIndexes=api.storage.indexes.get(path);const usingIndexes=[];if(isWildcardPath){if(availableIndexes.length===0){const err=new Error(`Query on wildcard path "/${path}" requires an index`);return Promise.reject(err)}if(queryFilters.length===0){const index=availableIndexes.filter((index=>index.type==="normal"))[0];queryFilters.push({key:index.key,op:"!=",compare:null})}}queryFilters.forEach((filter=>{if(filter.index){return}const indexesOnKey=availableIndexes.filter((index=>index.key===filter.key)).filter((index=>index.validOperators.includes(filter.op)));if(indexesOnKey.length>=1){const otherFilterKeys=queryFilters.filter((f=>f!==filter)).map((f=>f.key));const sortKeys=querySort.map((o=>o.key)).filter((key=>key!==filter.key));const beneficialIndexes=indexesOnKey.map((index=>{const availableKeys=index.includeKeys.concat(index.key);const forOtherFilters=availableKeys.filter((key=>otherFilterKeys.includes(key)));const forSorting=availableKeys.filter((key=>sortKeys.includes(key)));const forBoth=forOtherFilters.concat(forSorting.filter((index=>!forOtherFilters.includes(index))));const points={filters:forOtherFilters.length,sorting:forSorting.length*(query.take!==0?forSorting.length:1),both:forBoth.length*forBoth.length,get total(){return this.filters+this.sorting+this.both}};return{index:index,points:points.total,filterKeys:forOtherFilters,sortKeys:forSorting}}));beneficialIndexes.sort(((a,b)=>a.points>b.points?-1:1));const bestBenificialIndex=beneficialIndexes[0];filter.index=bestBenificialIndex.index;bestBenificialIndex.filterKeys.forEach((key=>{queryFilters.filter((f=>f!==filter&&f.key===key)).forEach((f=>{if(!data_index_1.DataIndex.validOperators.includes(f.op)){return}f.indexUsage="filter";f.index=bestBenificialIndex.index}))}));bestBenificialIndex.sortKeys.forEach((key=>{querySort.filter((s=>s.key===key)).forEach((s=>{s.index=bestBenificialIndex.index}))}))}if(filter.index){usingIndexes.push({index:filter.index,description:filter.index.description})}}));if(querySort.length>0&&query.take!==0&&queryFilters.length===0){querySort.forEach((sort=>{if(sort.index){return}sort.index=availableIndexes.filter((index=>index.key===sort.key)).find((index=>index.type==="normal"))}))}const indexDescriptions=usingIndexes.map((index=>index.description)).join(", ");usingIndexes.length>0&&api.storage.debug.log(`Using indexes for query: ${indexDescriptions}`);const tableScanFilters=queryFilters.filter((filter=>!filter.index));const specialOpsRegex=/^[a-z]+:/i;if(tableScanFilters.some((filter=>specialOpsRegex.test(filter.op)))){const f=tableScanFilters.find((filter=>specialOpsRegex.test(filter.op)));const err=new Error(`query contains operator "${f.op}" which requires a special index that was not found on path "${path}", key "${f.key}"`);return Promise.reject(err)}const allowedTableScanOperators=["<","<=","==","!=",">=",">","like","!like","in","!in","matches","!matches","between","!between","has","!has","contains","!contains","exists","!exists"];for(let i=0;i0){const keys=tableScanFilters.reduce(((keys,f)=>{if(keys.indexOf(f.key)<0){keys.push(f.key)}return keys}),[]).map((key=>`"${key}"`));const err=new Error(`This wildcard path query on "/${path}" requires index(es) on key(s): ${keys.join(", ")}. Create the index(es) and retry`);return Promise.reject(err)}const indexScanPromises=[];queryFilters.forEach((filter=>{if(filter.index&&filter.indexUsage!=="filter"){let promise=filter.index.query(filter.op,filter.compare).then((results=>{options.eventHandler&&options.eventHandler({name:"stats",type:"index_query",source:filter.index.description,stats:results.stats});if(results.hints.length>0){options.eventHandler&&options.eventHandler({name:"hints",type:"index_query",source:filter.index.description,hints:results.hints})}return results}));const resultFilters=queryFilters.filter((f=>f.index===filter.index&&f.indexUsage==="filter"));if(resultFilters.length>0){promise=promise.then((results=>{resultFilters.forEach((filter=>{const{key:key,op:op,index:index}=filter;let{compare:compare}=filter;if(typeof compare==="string"&&!index.caseSensitive){compare=compare.toLocaleLowerCase(index.textLocale)}results=results.filterMetadata(key,op,compare)}));return results}))}indexScanPromises.push(promise)}}));const stepsExecuted={filtered:queryFilters.length===0,skipped:query.skip===0,taken:query.take===0,sorted:querySort.length===0,preDataLoaded:false,dataLoaded:false};if(queryFilters.length===0&&query.take===0){api.storage.debug.warn(`Filterless queries must use .take to limit the results. Defaulting to 100 for query on path "${path}"`);query.take=100}if(querySort.length>0&&querySort[0].index){const sortIndex=querySort[0].index;const ascending=query.take<0?!querySort[0].ascending:querySort[0].ascending;if(queryFilters.length===0&&querySort.slice(1).every((s=>sortIndex.allMetadataKeys.includes(s.key)))){api.storage.debug.log(`Using index for sorting: ${sortIndex.description}`);const metadataSort=querySort.slice(1).map((s=>{s.index=sortIndex;return{key:s.key,ascending:s.ascending}}));const promise=sortIndex.take(query.skip,Math.abs(query.take),{ascending:ascending,metadataSort:metadataSort}).then((results=>{options.eventHandler&&options.eventHandler({name:"stats",type:"sort_index_take",source:sortIndex.description,stats:results.stats});if(results.hints.length>0){options.eventHandler&&options.eventHandler({name:"hints",type:"sort_index_take",source:sortIndex.description,hints:results.hints})}return results}));indexScanPromises.push(promise);stepsExecuted.skipped=true;stepsExecuted.taken=true;stepsExecuted.sorted=true}}return Promise.all(indexScanPromises).then((async indexResultSets=>{let indexedResults=[];if(indexResultSets.length===1){const resultSet=indexResultSets[0];indexedResults=resultSet.map((match=>{const result={key:match.key,path:match.path,val:{[resultSet.filterKey]:match.value}};match.metadata&&Object.assign(result.val,match.metadata);return result}));stepsExecuted.filtered=true}else if(indexResultSets.length>1){indexResultSets.sort(((a,b)=>a.length{const result={key:match.key,path:match.path,val:{[shortestSet.filterKey]:match.value}};const matchedInAllSets=otherSets.every((set=>set.findIndex((m=>m.path===match.path))>=0));if(matchedInAllSets){match.metadata&&Object.assign(result.val,match.metadata);otherSets.forEach((set=>{const otherResult=set.find((r=>r.path===result.path));result.val[set.filterKey]=otherResult.value;otherResult.metadata&&Object.assign(result.val,otherResult.metadata)}));results.push(result)}return results}),[]);stepsExecuted.filtered=true}if(isWildcardPath||indexScanPromises.length>0&&tableScanFilters.length===0){if(querySort.length===0||querySort.every((o=>o.index))){stepsExecuted.preDataLoaded=true;if(!stepsExecuted.sorted&&querySort.length>0){sortMatches(indexedResults)}stepsExecuted.sorted=true;if(!stepsExecuted.skipped&&query.skip>0){indexedResults=query.take<0?indexedResults.slice(0,-query.skip):indexedResults.slice(query.skip)}if(!stepsExecuted.taken&&query.take!==0){indexedResults=query.take<0?indexedResults.slice(query.take):indexedResults.slice(0,query.take)}stepsExecuted.skipped=true;stepsExecuted.taken=true;if(!options.snapshots){return indexedResults}const childOptions={include:options.include,exclude:options.exclude,child_objects:options.child_objects};return loadResultsData(indexedResults,childOptions).then((results=>{stepsExecuted.dataLoaded=true;return results}))}if(options.snapshots||!stepsExecuted.sorted){const loadPartialResults=querySort.length>0;const childOptions=loadPartialResults?{include:querySort.map((order=>order.key))}:{include:options.include,exclude:options.exclude,child_objects:options.child_objects};return loadResultsData(indexedResults,childOptions).then((results=>{if(querySort.length>0){sortMatches(results)}stepsExecuted.sorted=true;if(query.skip>0){results=query.take<0?results.slice(0,-query.skip):results.slice(query.skip)}if(query.take!==0){results=query.take<0?results.slice(query.take):results.slice(0,query.take)}stepsExecuted.skipped=true;stepsExecuted.taken=true;if(options.snapshots&&loadPartialResults){return loadResultsData(results,{include:options.include,exclude:options.exclude,child_objects:options.child_objects})}return results}))}else{return indexedResults}}let indexKeyFilter;if(indexedResults.length>0){indexKeyFilter=indexedResults.map((result=>result.key))}let matches=[];let preliminaryStop=false;const loadPartialData=querySort.length>0;const childOptions=loadPartialData?{include:querySort.map((order=>order.key))}:{include:options.include,exclude:options.exclude,child_objects:options.child_objects};const batch={promises:[],add(promise){this.promises.push(promise);if(this.promises.length>=1e3){return Promise.all(this.promises.splice(0)).then((_=>undefined))}}};try{await api.storage.getChildren(path,{keyFilter:indexKeyFilter,async:true}).next((child=>{if(child.type!==node_value_types_1.VALUE_TYPES.OBJECT){return}if(!child.address){return}if(preliminaryStop){return false}const matchNode=async()=>{const isMatch=await api.storage.matchNode(child.address.path,tableScanFilters);if(!isMatch){return}const childPath=child.address.path;let result;if(options.snapshots||querySort.length>0){const node=await api.storage.getNode(childPath,childOptions);result={path:childPath,val:node.value}}else{result={path:childPath}}matches.push(result);if(query.take!==0&&matches.length>Math.abs(query.take)+query.skip){if(querySort.length>0){sortMatches(matches)}else if(query.take>0){preliminaryStop=true}matches.pop()}};const p=batch.add(matchNode());if(p instanceof Promise){return p}}))}catch(reason){if(!(reason instanceof node_errors_1.NodeNotFoundError)){api.storage.debug.warn(`Error getting child stream: ${reason}`)}return[]}await Promise.all(batch.promises);stepsExecuted.preDataLoaded=loadPartialData;stepsExecuted.dataLoaded=!loadPartialData;if(querySort.length>0){sortMatches(matches)}stepsExecuted.sorted=true;if(query.skip>0){matches=query.take<0?matches.slice(0,-query.skip):matches.slice(query.skip)}stepsExecuted.skipped=true;if(query.take!==0){matches=query.take<0?matches.slice(query.take):matches.slice(0,query.take)}stepsExecuted.taken=true;if(!stepsExecuted.dataLoaded){matches=await loadResultsData(matches,{include:options.include,exclude:options.exclude,child_objects:options.child_objects});stepsExecuted.dataLoaded=true}return matches})).then((matches=>{if(!stepsExecuted.sorted&&querySort.length>0){sortMatches(matches)}if(!options.snapshots){matches=matches.map((match=>match.path))}if(!stepsExecuted.skipped&&query.skip>0){matches=query.take<0?matches.slice(0,-query.skip):matches.slice(query.skip)}if(!stepsExecuted.taken&&query.take!==0){matches=query.take<0?matches.slice(query.take):matches.slice(0,query.take)}if(options.monitor===true){options.monitor={add:true,change:true,remove:true}}let stop=async()=>{};if(typeof options.monitor==="object"&&(options.monitor.add||options.monitor.change||options.monitor.remove)){const matchedPaths=options.snapshots?matches.map((match=>match.path)):matches.slice();const ref=api.db.ref(path);const removeMatch=path=>{const index=matchedPaths.indexOf(path);if(index<0){return}matchedPaths.splice(index,1)};const addMatch=path=>{if(matchedPaths.includes(path)){return}matchedPaths.push(path)};const stopMonitoring=()=>{api.unsubscribe(ref.path,"child_changed",childChangedCallback);api.unsubscribe(ref.path,"child_added",childAddedCallback);api.unsubscribe(ref.path,"notify_child_removed",childRemovedCallback)};stop=async()=>{stopMonitoring()};const childChangedCallback=async(err,path,newValue,oldValue)=>{const wasMatch=matchedPaths.includes(path);let keepMonitoring=true;const checkKeys=[];queryFilters.forEach((f=>!checkKeys.includes(f.key)&&checkKeys.push(f.key)));const seenKeys=[];typeof oldValue==="object"&&Object.keys(oldValue).forEach((key=>!seenKeys.includes(key)&&seenKeys.push(key)));typeof newValue==="object"&&Object.keys(newValue).forEach((key=>!seenKeys.includes(key)&&seenKeys.push(key)));const missingKeys=[];let isMatch=seenKeys.every((key=>{if(!checkKeys.includes(key)){return true}const filters=queryFilters.filter((filter=>filter.key===key));return filters.every((filter=>{var _a;if(((_a=filter.index)===null||_a===void 0?void 0:_a.textLocaleKey)&&!seenKeys.includes(filter.index.textLocaleKey)){missingKeys.push(filter.index.textLocaleKey);return true}else if(allowedTableScanOperators.includes(filter.op)){return api.storage.test(newValue[key],filter.op,filter.compare)}else{return filter.index.test(newValue,filter.op,filter.compare)}}))}));if(isMatch){missingKeys.push(...checkKeys.filter((key=>!seenKeys.includes(key))));if(!wasMatch&&missingKeys.length>0){const filterQueue=queryFilters.filter((f=>missingKeys.includes(f.key)));const simpleFilters=filterQueue.filter((f=>allowedTableScanOperators.includes(f.op)));const indexFilters=filterQueue.filter((f=>!allowedTableScanOperators.includes(f.op)));if(simpleFilters.length>0){isMatch=await api.storage.matchNode(path,simpleFilters)}if(isMatch&&indexFilters.length>0){const keysToLoad=indexFilters.reduce(((keys,filter)=>{if(!keys.includes(filter.key)){keys.push(filter.key)}if(filter.index instanceof data_index_1.FullTextIndex&&filter.index.config.localeKey&&!keys.includes(filter.index.config.localeKey)){keys.push(filter.index.config.localeKey)}return keys}),[]);const node=await api.storage.getNode(path,{include:keysToLoad});if(node.value===null){return false}isMatch=indexFilters.every((filter=>filter.index.test(node.value,filter.op,filter.compare)))}}}if(isMatch){if(!wasMatch){addMatch(path)}if(options.snapshots){const loadOptions={include:options.include,exclude:options.exclude,child_objects:options.child_objects};const node=await api.storage.getNode(path,loadOptions);newValue=node.value}if(wasMatch&&options.monitor.change){keepMonitoring=options.eventHandler({name:"change",path:path,value:newValue})!==false}else if(!wasMatch&&options.monitor.add){keepMonitoring=options.eventHandler({name:"add",path:path,value:newValue})!==false}}else if(wasMatch){removeMatch(path);if(options.monitor.remove){keepMonitoring=options.eventHandler({name:"remove",path:path,value:oldValue})!==false}}if(keepMonitoring===false){stopMonitoring()}};const childAddedCallback=(err,path,newValue)=>{const isMatch=queryFilters.every((filter=>{if(allowedTableScanOperators.includes(filter.op)){return api.storage.test(newValue[filter.key],filter.op,filter.compare)}else{return filter.index.test(newValue,filter.op,filter.compare)}}));let keepMonitoring=true;if(isMatch){addMatch(path);if(options.monitor.add){keepMonitoring=options.eventHandler({name:"add",path:path,value:options.snapshots?newValue:null})!==false}}if(keepMonitoring===false){stopMonitoring()}};const childRemovedCallback=(err,path,newValue,oldValue)=>{let keepMonitoring=true;removeMatch(path);if(options.monitor.remove){keepMonitoring=options.eventHandler({name:"remove",path:path,value:options.snapshots?oldValue:null})!==false}if(keepMonitoring===false){stopMonitoring()}};if(options.monitor.add||options.monitor.change||options.monitor.remove){api.subscribe(ref.path,"child_changed",childChangedCallback)}if(options.monitor.remove){api.subscribe(ref.path,"notify_child_removed",childRemovedCallback)}if(options.monitor.add){api.subscribe(ref.path,"child_added",childAddedCallback)}}return{results:matches,context:context,stop:stop}}))}exports.query=query},{"./async-task-batch":30,"./data-index":39,"./node-errors":35,"./node-value-types":38,"acebase-core":12}],42:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createIndex=void 0;const acebase_core_1=require("acebase-core");const data_index_1=require("../data-index");const promise_fs_1=require("../promise-fs");async function createIndex(context,path,key,options){if(!context.storage.indexes.supported){throw new Error("Indexes are not supported in current environment because it requires Node.js fs")}const{ipc:ipc,debug:debug,indexes:indexes,storage:storage}=context;const rebuild=options&&options.rebuild===true;const indexType=options&&options.type||"normal";let includeKeys=options&&options.include||[];if(typeof includeKeys==="string"){includeKeys=[includeKeys]}const existingIndex=indexes.find((index=>index.path===path&&index.key===key&&index.type===indexType&&index.includeKeys.length===includeKeys.length&&index.includeKeys.every(((key,index)=>includeKeys[index]===key))));if(existingIndex&&options.config){existingIndex.config=options.config}if(existingIndex&&rebuild!==true){debug.log(`Index on "/${path}/*/${key}" already exists`.colorize(acebase_core_1.ColorStyle.inverse));return existingIndex}if(!ipc.isMaster){const result=await ipc.sendRequest({type:"index.create",path:path,key:key,options:options});if(result.ok){return this.add(result.fileName)}throw new Error(result.reason)}await promise_fs_1.pfs.mkdir(`${storage.settings.path}/${storage.name}.acebase`).catch((err=>{if(err.code!=="EEXIST"){throw err}}));const index=existingIndex||(()=>{const{include:include,caseSensitive:caseSensitive,textLocale:textLocale,textLocaleKey:textLocaleKey}=options;const indexOptions={include:include,caseSensitive:caseSensitive,textLocale:textLocale,textLocaleKey:textLocaleKey};switch(indexType){case"array":return new data_index_1.ArrayIndex(storage,path,key,Object.assign({},indexOptions));case"fulltext":return new data_index_1.FullTextIndex(storage,path,key,Object.assign(Object.assign({},indexOptions),{config:options.config}));case"geo":return new data_index_1.GeoIndex(storage,path,key,Object.assign({},indexOptions));default:return new data_index_1.DataIndex(storage,path,key,Object.assign({},indexOptions))}})();if(!existingIndex){indexes.push(index)}try{await index.build()}catch(err){context.debug.error(`Index build on "/${path}/*/${key}" failed: ${err.message} (code: ${err.code})`.colorize(acebase_core_1.ColorStyle.red));if(!existingIndex){indexes.splice(indexes.indexOf(index),1)}throw err}ipc.sendNotification({type:"index.created",fileName:index.fileName,path:path,key:key,options:options});return index}exports.createIndex=createIndex},{"../data-index":39,"../promise-fs":40,"acebase-core":12}],43:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.CustomStorageHelpers=void 0;const acebase_core_1=require("acebase-core");class CustomStorageHelpers{static ChildPathsSql(path,columnName="path"){const where=path===""?`${columnName} <> '' AND ${columnName} NOT LIKE '%/%'`:`(${columnName} LIKE '${path}/%' OR ${columnName} LIKE '${path}[%') AND ${columnName} NOT LIKE '${path}/%/%' AND ${columnName} NOT LIKE '${path}[%]/%' AND ${columnName} NOT LIKE '${path}[%][%'`;return where}static ChildPathsRegex(path){return new RegExp(`^${path}(?:/[^/[]+|\\[[0-9]+\\])$`)}static DescendantPathsSql(path,columnName="path"){const where=path===""?`${columnName} <> ''`:`${columnName} LIKE '${path}/%' OR ${columnName} LIKE '${path}[%'`;return where}static DescendantPathsRegex(path){return new RegExp(`^${path}(?:/[^/[]+|\\[[0-9]+\\])`)}static get PathInfo(){return acebase_core_1.PathInfo}}exports.CustomStorageHelpers=CustomStorageHelpers},{"acebase-core":12}],44:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.CustomStorage=exports.CustomStorageNodeInfo=exports.CustomStorageNodeAddress=exports.CustomStorageSettings=exports.CustomStorageTransaction=exports.ICustomStorageNode=exports.ICustomStorageNodeMetaData=exports.CustomStorageHelpers=void 0;const acebase_core_1=require("acebase-core");const{compareValues:compareValues}=acebase_core_1.Utils;const node_info_1=require("../../node-info");const node_lock_1=require("../../node-lock");const node_value_types_1=require("../../node-value-types");const node_errors_1=require("../../node-errors");const index_1=require("../index");const helpers_1=require("./helpers");const node_address_1=require("../../node-address");var helpers_2=require("./helpers");Object.defineProperty(exports,"CustomStorageHelpers",{enumerable:true,get:function(){return helpers_2.CustomStorageHelpers}});class ICustomStorageNodeMetaData{constructor(){this.revision="";this.revision_nr=0;this.created=0;this.modified=0;this.type=0}}exports.ICustomStorageNodeMetaData=ICustomStorageNodeMetaData;class ICustomStorageNode extends ICustomStorageNodeMetaData{constructor(){super();this.value=null}}exports.ICustomStorageNode=ICustomStorageNode;class CustomStorageTransaction{constructor(target){this.production=false;this.target={get originalPath(){return target.path},path:target.path,get write(){return target.write}};this.id=acebase_core_1.ID.generate()}async getChildCount(path){let childCount=0;await this.childrenOf(path,{metadata:false,value:false},(()=>{childCount++;return false}));return childCount}async getMultiple(paths){const map=new Map;await Promise.all(paths.map((path=>this.get(path).then((val=>map.set(path,val))))));return map}async setMultiple(nodes){await Promise.all(nodes.map((({path:path,node:node})=>this.set(path,node))))}async removeMultiple(paths){await Promise.all(paths.map((path=>this.remove(path))))}async commit(){throw new Error(`CustomStorageTransaction.rollback must be overridden by subclass`)}async moveToParentPath(targetPath){const currentPath=this._lock&&this._lock.path||this.target.path;if(currentPath===targetPath){return targetPath}const pathInfo=helpers_1.CustomStorageHelpers.PathInfo.get(targetPath);if(pathInfo.isParentOf(currentPath)){if(this._lock){this._lock=await this._lock.moveToParent()}}else{throw new Error(`Locking issue. Locked path "${this._lock.path}" is not a child/descendant of "${targetPath}"`)}this.target.path=targetPath;return targetPath}}exports.CustomStorageTransaction=CustomStorageTransaction;class CustomStorageSettings extends index_1.StorageSettings{constructor(settings){super(settings);this.locking=true;if(typeof settings!=="object"){throw new Error("settings missing")}if(typeof settings.ready!=="function"){throw new Error(`ready must be a function`)}if(typeof settings.getTransaction!=="function"){throw new Error(`getTransaction must be a function`)}this.name=settings.name;this.locking=settings.locking!==false;if(this.locking){this.lockTimeout=typeof settings.lockTimeout==="number"?settings.lockTimeout:120}this.ready=settings.ready;const useLocking=this.locking;const nodeLocker=useLocking?new node_lock_1.NodeLocker(console,this.lockTimeout):null;this.getTransaction=async({path:path,write:write})=>{const transaction=await settings.getTransaction({path:path,write:write});console.assert(typeof transaction.id==="string",`transaction id not set`);const rollback=transaction.rollback;const commit=transaction.commit;transaction.commit=async()=>{const ret=await commit.call(transaction);if(useLocking){await transaction._lock.release("commit")}return ret};transaction.rollback=async reason=>{const ret=await rollback.call(transaction,reason);if(useLocking){await transaction._lock.release("rollback")}return ret};if(useLocking){transaction._lock=await nodeLocker.lock(path,transaction.id,write,`${this.name}::getTransaction`)}return transaction}}}exports.CustomStorageSettings=CustomStorageSettings;class CustomStorageNodeAddress{constructor(containerPath){this.path=containerPath}}exports.CustomStorageNodeAddress=CustomStorageNodeAddress;class CustomStorageNodeInfo extends node_info_1.NodeInfo{constructor(info){super(info);this.revision=info.revision;this.revision_nr=info.revision_nr;this.created=info.created;this.modified=info.modified}}exports.CustomStorageNodeInfo=CustomStorageNodeInfo;class CustomStorage extends index_1.Storage{constructor(dbname,settings,env){super(dbname,settings,env);this._customImplementation=settings;this._init()}async _init(){this.debug.log(`Database "${this.name}" details:`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Type: CustomStorage`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Path: ${this.settings.path}`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Max inline value size: ${this.settings.maxInlineValueSize}`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Autoremove undefined props: ${this.settings.removeVoidProperties}`.colorize(acebase_core_1.ColorStyle.dim));await this._customImplementation.ready();const transaction=await this._customImplementation.getTransaction({path:"",write:true});const info=await this.getNodeInfo("",{transaction:transaction});if(!info.exists){await this._writeNode("",{},{transaction:transaction})}await transaction.commit();if(this.indexes.supported){await this.indexes.load()}this.emit("ready")}throwImplementationError(message){throw new Error(`CustomStorage "${this._customImplementation.name}" ${message}`)}_storeNode(path,node,options){const getTypedChildValue=val=>{if(val===null){throw new Error(`Not allowed to store null values. remove the property`)}else if(["string","number","boolean"].includes(typeof val)){return val}else if(val instanceof Date){return{type:node_value_types_1.VALUE_TYPES.DATETIME,value:val.getTime()}}else if(val instanceof acebase_core_1.PathReference){return{type:node_value_types_1.VALUE_TYPES.REFERENCE,value:val.path}}else if(val instanceof ArrayBuffer){return{type:node_value_types_1.VALUE_TYPES.BINARY,value:acebase_core_1.ascii85.encode(val)}}else if(typeof val==="object"){console.assert(Object.keys(val).length===0,"child object stored in parent can only be empty");return val}};const unprocessed=`Caller should have pre-processed the value by converting it to a string`;if(node.type===node_value_types_1.VALUE_TYPES.ARRAY&&node.value instanceof Array){console.warn(`Unprocessed array. ${unprocessed}`);const obj={};for(let i=0;i{node.value[key]=getTypedChildValue(original[key])}))}return options.transaction.set(path,node)}_processReadNodeValue(node){const getTypedChildValue=val=>{if(val.type===node_value_types_1.VALUE_TYPES.BINARY){return acebase_core_1.ascii85.decode(val.value)}else if(val.type===node_value_types_1.VALUE_TYPES.DATETIME){return new Date(val.value)}else if(val.type===node_value_types_1.VALUE_TYPES.REFERENCE){return new acebase_core_1.PathReference(val.value)}else{throw new Error(`Unhandled child value type ${val.type}`)}};switch(node.type){case node_value_types_1.VALUE_TYPES.ARRAY:case node_value_types_1.VALUE_TYPES.OBJECT:{const obj=node.value;Object.keys(obj).forEach((key=>{const item=obj[key];if(typeof item==="object"&&"type"in item){obj[key]=getTypedChildValue(item)}}));node.value=obj;break}case node_value_types_1.VALUE_TYPES.BINARY:{node.value=acebase_core_1.ascii85.decode(node.value);break}case node_value_types_1.VALUE_TYPES.REFERENCE:{node.value=new acebase_core_1.PathReference(node.value);break}case node_value_types_1.VALUE_TYPES.STRING:{break}default:throw new Error(`Invalid standalone record value type`)}}async _readNode(path,options){const node=await options.transaction.get(path);if(node===null){return null}if(typeof node!=="object"){this.throwImplementationError(`transaction.get must return an ICustomStorageNode object. Use JSON.parse if your set function stored it as a string`)}this._processReadNodeValue(node);return node}_getTypeFromStoredValue(val){let type;if(typeof val==="string"){type=node_value_types_1.VALUE_TYPES.STRING}else if(typeof val==="number"){type=node_value_types_1.VALUE_TYPES.NUMBER}else if(typeof val==="boolean"){type=node_value_types_1.VALUE_TYPES.BOOLEAN}else if(val instanceof Array){type=node_value_types_1.VALUE_TYPES.ARRAY}else if(typeof val==="object"){if("type"in val){const serialized=val;type=serialized.type;val=serialized.value;if(type===node_value_types_1.VALUE_TYPES.DATETIME){val=new Date(val)}else if(type===node_value_types_1.VALUE_TYPES.REFERENCE){val=new acebase_core_1.PathReference(val)}}else{type=node_value_types_1.VALUE_TYPES.OBJECT}}else{throw new Error(`Unknown value type`)}return{type:type,value:val}}async _writeNode(path,value,options){if(!options.merge&&this.valueFitsInline(value)&&path!==""){throw new Error(`invalid value to store in its own node`)}else if(path===""&&(typeof value!=="object"||value instanceof Array)){throw new Error(`Invalid root node value. Must be an object`)}if(typeof options.diff==="undefined"&&typeof options.currentValue!=="undefined"){const diff=compareValues(options.currentValue,value);if(options.merge&&typeof diff==="object"){diff.removed=diff.removed.filter((key=>value[key]===null))}options.diff=diff}if(options.diff==="identical"){return}const transaction=options.transaction;const currentRow=options.currentValue===null?null:await this._readNode(path,{transaction:transaction});if(options.merge&¤tRow){if(currentRow.type===node_value_types_1.VALUE_TYPES.ARRAY&&!(value instanceof Array)&&typeof value==="object"&&Object.keys(value).some((key=>isNaN(parseInt(key))))){throw new Error(`Cannot merge existing array of path "${path}" with an object`)}if(value instanceof Array&¤tRow.type!==node_value_types_1.VALUE_TYPES.ARRAY){throw new Error(`Cannot merge existing object of path "${path}" with an array`)}}const revision=options.revision||acebase_core_1.ID.generate();const mainNode={type:currentRow&¤tRow.type===node_value_types_1.VALUE_TYPES.ARRAY?node_value_types_1.VALUE_TYPES.ARRAY:node_value_types_1.VALUE_TYPES.OBJECT,value:{}};const childNodeValues={};if(value instanceof Array){mainNode.type=node_value_types_1.VALUE_TYPES.ARRAY;const obj={};for(let i=0;i{if(!(key in value)){value[key]=null}}))}Object.keys(value).forEach((key=>{const val=value[key];delete mainNode.value[key];if(val===null){return}else if(typeof val==="undefined"){if(this.settings.removeVoidProperties===true){delete value[key];return}else{throw new Error(`Property "${key}" has invalid value. Cannot store undefined values. Set removeVoidProperties option to true to automatically remove undefined properties`)}}if(this.valueFitsInline(val)){mainNode.value[key]=val}else{childNodeValues[key]=val}}))}const isArray=mainNode.type===node_value_types_1.VALUE_TYPES.ARRAY;if(currentRow){this.debug.log(`Node "/${path}" is being ${options.merge?"updated":"overwritten"}`.colorize(acebase_core_1.ColorStyle.cyan));if(currentIsObjectOrArray||newIsObjectOrArray){const pathInfo=acebase_core_1.PathInfo.get(path);const keys=[];let checkExecuted=false;const includeChildCheck=childPath=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isParentOf(childPath)){this.throwImplementationError(`"${childPath}" is not a child of "${path}" - childrenOf must only check and return paths that are children`)}return true};const addChildPath=childPath=>{if(!checkExecuted){this.throwImplementationError(`childrenOf did not call checkCallback before addCallback`)}const key=acebase_core_1.PathInfo.get(childPath).key;keys.push(key.toString());return true};await transaction.childrenOf(path,{metadata:false,value:false},includeChildCheck,addChildPath);children.current=children.current.concat(keys);if(newIsObjectOrArray){if(options&&options.merge){children.new=children.current.slice()}Object.keys(value).forEach((key=>{if(!children.new.includes(key)){children.new.push(key)}}))}const changes={insert:children.new.filter((key=>!children.current.includes(key))),update:[],delete:options&&options.merge?Object.keys(value).filter((key=>value[key]===null)):children.current.filter((key=>!children.new.includes(key)))};changes.update=children.new.filter((key=>children.current.includes(key)&&!changes.delete.includes(key)));if(isArray&&options.merge&&(changes.insert.length>0||changes.delete.length>0)){const newArrayKeys=changes.update.concat(changes.insert);const isExhaustive=newArrayKeys.every(((k,index,arr)=>arr.includes(index.toString())));if(!isExhaustive){throw new Error(`Elements cannot be inserted beyond, or removed before the end of an array. Rewrite the whole array at path "${path}" or change your schema to use an object collection instead`)}}const writePromises=Object.keys(childNodeValues).map((key=>{const keyOrIndex=isArray?parseInt(key):key;const childDiff=typeof options.diff==="object"?options.diff.forChild(keyOrIndex):undefined;if(childDiff==="identical"){return}const childPath=pathInfo.childPath(keyOrIndex);const childValue=childNodeValues[keyOrIndex];const currentChildValue=typeof options.currentValue==="undefined"?undefined:options.currentValue!==null&&typeof options.currentValue==="object"&&keyOrIndex in options.currentValue?options.currentValue[keyOrIndex]:null;return this._writeNode(childPath,childValue,{transaction:transaction,revision:revision,merge:false,currentValue:currentChildValue,diff:childDiff})}));const movingNodes=newIsObjectOrArray?keys.filter((key=>key in mainNode.value)):[];const deleteDedicatedKeys=changes.delete.concat(movingNodes);const deletePromises=deleteDedicatedKeys.map((key=>{const keyOrIndex=isArray?parseInt(key):key;const childPath=pathInfo.childPath(keyOrIndex);return this._deleteNode(childPath,{transaction:transaction})}));const promises=writePromises.concat(deletePromises);await Promise.all(promises)}const p=this._storeNode(path,{type:mainNode.type,value:mainNode.value,revision:currentRow.revision,revision_nr:currentRow.revision_nr+1,created:currentRow.created,modified:Date.now()},{transaction:transaction});if(p instanceof Promise){return await p}}else{this.debug.log(`Node "/${path}" is being created`.colorize(acebase_core_1.ColorStyle.cyan));if(isArray){const arrayKeys=Object.keys(mainNode.value).concat(Object.keys(childNodeValues));const isExhaustive=arrayKeys.every(((k,index,arr)=>arr.includes(index.toString())));if(!isExhaustive){throw new Error(`Cannot store arrays with missing entries`)}}const promises=Object.keys(childNodeValues).map((key=>{const keyOrIndex=isArray?parseInt(key):key;const childPath=acebase_core_1.PathInfo.getChildPath(path,keyOrIndex);const childValue=childNodeValues[keyOrIndex];return this._writeNode(childPath,childValue,{transaction:transaction,revision:revision,merge:false,currentValue:null})}));const p=this._storeNode(path,{type:mainNode.type,value:mainNode.value,revision:revision,revision_nr:1,created:Date.now(),modified:Date.now()},{transaction:transaction});if(p instanceof Promise){promises.push(p)}await Promise.all(promises)}}async _deleteNode(path,options){const pathInfo=acebase_core_1.PathInfo.get(path);this.debug.log(`Node "/${path}" is being deleted`.colorize(acebase_core_1.ColorStyle.cyan));const deletePaths=[path];let checkExecuted=false;const includeDescendantCheck=descPath=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isAncestorOf(descPath)){this.throwImplementationError(`"${descPath}" is not a descendant of "${path}" - descendantsOf must only check and return paths that are descendants`)}return true};const addDescendant=descPath=>{if(!checkExecuted){this.throwImplementationError(`descendantsOf did not call checkCallback before addCallback`)}deletePaths.push(descPath);return true};const transaction=options.transaction;await transaction.descendantsOf(path,{metadata:false,value:false},includeDescendantCheck,addDescendant);this.debug.log(`Nodes ${deletePaths.map((p=>`"/${p}"`)).join(",")} are being deleted`.colorize(acebase_core_1.ColorStyle.cyan));return transaction.removeMultiple(deletePaths)}getChildren(path,options={}){let callback;const generator={next(valueCallback){callback=valueCallback;return start()}};const start=async()=>{const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:false});try{let canceled=false;await(async()=>{const node=await this._readNode(path,{transaction:transaction});if(!node){throw new node_errors_1.NodeNotFoundError(`Node "/${path}" does not exist`)}if(![node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(node.type)){return}const isArray=node.type===node_value_types_1.VALUE_TYPES.ARRAY;const value=node.value;let keys=Object.keys(value).map((key=>isArray?parseInt(key):key));if(options.keyFilter){keys=keys.filter((key=>options.keyFilter.includes(key)))}const pathInfo=acebase_core_1.PathInfo.get(path);keys.length>0&&keys.every((key=>{const child=this._getTypeFromStoredValue(value[key]);const info=new CustomStorageNodeInfo({path:pathInfo.childPath(key),key:isArray?null:key,index:isArray?key:null,type:child.type,address:null,exists:true,value:child.value,revision:node.revision,revision_nr:node.revision_nr,created:new Date(node.created),modified:new Date(node.modified)});canceled=callback(info)===false;return!canceled}));if(canceled){return}let checkExecuted=false;const includeChildCheck=childPath=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isParentOf(childPath)){this.throwImplementationError(`"${childPath}" is not a child of "${path}" - childrenOf must only check and return paths that are children`)}if(options.keyFilter){const key=acebase_core_1.PathInfo.get(childPath).key;return options.keyFilter.includes(key)}return true};const addChildNode=(childPath,node)=>{if(!checkExecuted){this.throwImplementationError(`childrenOf did not call checkCallback before addCallback`)}const key=acebase_core_1.PathInfo.get(childPath).key;const info=new CustomStorageNodeInfo({path:childPath,type:node.type,key:isArray?null:key,index:isArray?key:null,address:new node_address_1.NodeAddress(childPath),exists:true,value:null,revision:node.revision,revision_nr:node.revision_nr,created:new Date(node.created),modified:new Date(node.modified)});canceled=callback(info)===false;return!canceled};await transaction.childrenOf(path,{metadata:true,value:false},includeChildCheck,addChildNode)})();if(!options.transaction){await transaction.commit()}return canceled}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}};return generator}async getNode(path,options){options=options||{};const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:false});try{const node=await(async()=>{const filtered=options.include&&options.include.length>0||options.exclude&&options.exclude.length>0||options.child_objects===false;const pathInfo=acebase_core_1.PathInfo.get(path);const targetNode=await this._readNode(path,{transaction:transaction});if(!targetNode){if(path===""){return{value:null}}const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);const parentNode=await this._readNode(pathInfo.parentPath,{transaction:transaction});if(parentNode&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(parentNode.type)&&pathInfo.key in parentNode.value){const childValueInfo=this._getTypeFromStoredValue(parentNode.value[pathInfo.key]);return{revision:parentNode.revision,revision_nr:parentNode.revision_nr,created:parentNode.created,modified:parentNode.modified,type:childValueInfo.type,value:childValueInfo.value}}return{value:null}}const isArray=targetNode.type===node_value_types_1.VALUE_TYPES.ARRAY;const convertFilterArray=arr=>{const isNumber=key=>/^[0-9]+$/.test(key);return arr.map((path=>acebase_core_1.PathInfo.get(isArray&&isNumber(path)?`[${path}]`:path)))};const includeFilter=options.include?convertFilterArray(options.include):[];const excludeFilter=options.exclude?convertFilterArray(options.exclude):[];const applyFiltersOnInlineData=(descPath,node)=>{if([node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(node.type)&&includeFilter.length>0){const trailKeys=acebase_core_1.PathInfo.getPathKeys(descPath).slice(pathInfo.keys.length);const checkPathInfo=new acebase_core_1.PathInfo(trailKeys);const remove=[];const includes=includeFilter.filter((info=>info.isDescendantOf(checkPathInfo)));if(includes.length>0){const isArray=node.type===node_value_types_1.VALUE_TYPES.ARRAY;remove.push(...Object.keys(node.value).map((key=>isArray?+key:key)));for(const info of includes){const targetProp=info.keys[trailKeys.length];if(typeof targetProp==="string"&&(targetProp==="*"||targetProp.startsWith("$"))){remove.splice(0);break}const index=remove.indexOf(targetProp);index>=0&&remove.splice(index,1)}}const hasIncludeOnChild=includeFilter.some((info=>info.isChildOf(checkPathInfo)));const hasExcludeOnChild=excludeFilter.some((info=>info.isChildOf(checkPathInfo)));if(hasExcludeOnChild&&!hasIncludeOnChild){const excludes=excludeFilter.filter((info=>info.isChildOf(checkPathInfo)));for(let i=0;iinfo.equals(remove[i])))){remove.splice(i,1);i--}}}for(const key of remove){delete node.value[key]}}};applyFiltersOnInlineData(path,targetNode);let checkExecuted=false;const includeDescendantCheck=(descPath,metadata)=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isAncestorOf(descPath)){this.throwImplementationError(`"${descPath}" is not a descendant of "${path}" - descendantsOf must only check and return paths that are descendants`)}if(!filtered){return true}const descPathKeys=acebase_core_1.PathInfo.getPathKeys(descPath);const trailKeys=descPathKeys.slice(pathInfo.keys.length);const checkPathInfo=new acebase_core_1.PathInfo(trailKeys);let include=(includeFilter.length>0?includeFilter.some((info=>checkPathInfo.isOnTrailOf(info))):true)&&(excludeFilter.length>0?!excludeFilter.some((info=>info.equals(checkPathInfo)||info.isAncestorOf(checkPathInfo))):true);if(include&&options.child_objects===false&&(pathInfo.isParentOf(descPath)&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(metadata?metadata.type:-1)||acebase_core_1.PathInfo.getPathKeys(descPath).length>pathInfo.pathKeys.length+1)){include=false}return include};const descRows=[];const addDescendant=(descPath,node)=>{if(!checkExecuted){this.throwImplementationError("descendantsOf did not call checkCallback before addCallback")}if(options.child_objects===false&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(node.type)){return true}applyFiltersOnInlineData(descPath,node);this._processReadNodeValue(node);const row=node;row.path=descPath;descRows.push(row);return true};await transaction.descendantsOf(path,{metadata:true,value:true},includeDescendantCheck,addDescendant);this.debug.log(`Read node "/${path}" and ${filtered?"(filtered) ":""}descendants from ${descRows.length+1} records`.colorize(acebase_core_1.ColorStyle.magenta));const result=targetNode;const objectToArray=obj=>{const arr=[];Object.keys(obj).forEach((key=>{const index=parseInt(key);arr[index]=obj[index]}));return arr};if(targetNode.type===node_value_types_1.VALUE_TYPES.ARRAY){result.value=objectToArray(result.value)}if(targetNode.type===node_value_types_1.VALUE_TYPES.OBJECT||targetNode.type===node_value_types_1.VALUE_TYPES.ARRAY){const targetPathKeys=acebase_core_1.PathInfo.getPathKeys(path);const value=targetNode.value;for(let i=0;i{if(childKey in parent[key]){this.throwImplementationError(`Custom storage merge error: child key "${childKey}" is in parent value already! Make sure the get/childrenOf/descendantsOf methods of the custom storage class return values that can be modified by AceBase without affecting the stored source`)}parent[key][childKey]=nodeValue[childKey]}))}}else{parent[key]=nodeValue}parent=parent[key]}}}else if(descRows.length>0){this.throwImplementationError(`multiple records found for non-object value!`)}if(options.child_objects===false){Object.keys(result.value).forEach((key=>{if(typeof result.value[key]==="object"&&result.value[key].constructor===Object){console.assert(Object.keys(result.value[key]).length===0);delete result.value[key]}}))}if(options.include){}if(options.exclude){const process=(obj,keys)=>{if(typeof obj!=="object"){return}const key=keys[0];if(key==="*"){Object.keys(obj).forEach((k=>{process(obj[k],keys.slice(1))}))}else if(keys.length>1){key in obj&&process(obj[key],keys.slice(1))}else{delete obj[key]}};options.exclude.forEach((path=>{const checkKeys=acebase_core_1.PathInfo.getPathKeys(path);process(result.value,checkKeys)}))}return result})();if(!options.transaction){await transaction.commit()}return node}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}async getNodeInfo(path,options={}){options=options||{};const pathInfo=acebase_core_1.PathInfo.get(path);const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:false});try{const node=await this._readNode(path,{transaction:transaction});const info=new CustomStorageNodeInfo({path:path,key:typeof pathInfo.key==="string"?pathInfo.key:null,index:typeof pathInfo.key==="number"?pathInfo.key:null,type:node?node.type:0,exists:node!==null,address:node?new node_address_1.NodeAddress(path):null,created:node?new Date(node.created):null,modified:node?new Date(node.modified):null,revision:node?node.revision:null,revision_nr:node?node.revision_nr:null});if(!node&&path!==""){const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);const parent=await this._readNode(pathInfo.parentPath,{transaction:transaction});if(parent&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(parent.type)&&pathInfo.key in parent.value){info.exists=true;info.value=parent.value[pathInfo.key];info.address=null;info.type=parent.type;info.created=new Date(parent.created);info.modified=new Date(parent.modified);info.revision=parent.revision;info.revision_nr=parent.revision_nr}else{info.address=null}}if(options.include_child_count){info.childCount=0;if([node_value_types_1.VALUE_TYPES.ARRAY,node_value_types_1.VALUE_TYPES.OBJECT].includes(info.valueType)&&info.address){info.childCount=node.value?Object.keys(node.value).length:0;info.childCount+=await transaction.getChildCount(path)}}if(!options.transaction){await transaction.commit()}return info}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}async setNode(path,value,options={suppress_events:false,context:null}){if(this.settings.readOnly){throw new Error(`Database is opened in read-only mode`)}const pathInfo=acebase_core_1.PathInfo.get(path);const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:true});try{if(path===""){if(value===null||typeof value!=="object"||value instanceof Array||value instanceof ArrayBuffer||"buffer"in value&&value.buffer instanceof ArrayBuffer){throw new Error(`Invalid value for root node: ${value}`)}await this._writeNodeWithTracking("",value,{merge:false,transaction:transaction,suppress_events:options.suppress_events,context:options.context})}else if(typeof options.assert_revision!=="undefined"){const info=await this.getNodeInfo(path,{transaction:transaction});if(info.revision!==options.assert_revision){throw new node_errors_1.NodeRevisionError(`revision '${info.revision}' does not match requested revision '${options.assert_revision}'`)}if(info.address&&info.address.path===path&&value!==null&&!this.valueFitsInline(value)){await this._writeNodeWithTracking(path,value,{merge:false,transaction:transaction,suppress_events:options.suppress_events,context:options.context})}else{const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this._writeNodeWithTracking(pathInfo.parentPath,{[pathInfo.key]:value},{merge:true,transaction:transaction,suppress_events:options.suppress_events,context:options.context})}}else{const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this.updateNode(pathInfo.parentPath,{[pathInfo.key]:value},{transaction:transaction,suppress_events:options.suppress_events,context:options.context})}if(!options.transaction){await transaction.commit()}}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}async updateNode(path,updates,options={suppress_events:false,context:null}){if(this.settings.readOnly){throw new Error(`Database is opened in read-only mode`)}if(typeof updates!=="object"){throw new Error(`invalid updates argument`)}else if(Object.keys(updates).length===0){return}const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:true});try{const nodeInfo=await this.getNodeInfo(path,{transaction:transaction});const pathInfo=acebase_core_1.PathInfo.get(path);if(nodeInfo.exists&&nodeInfo.address&&nodeInfo.address.path===path){await this._writeNodeWithTracking(path,updates,{transaction:transaction,merge:true,suppress_events:options.suppress_events,context:options.context})}else if(nodeInfo.exists){const pathInfo=acebase_core_1.PathInfo.get(path);const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this._writeNodeWithTracking(pathInfo.parentPath,{[pathInfo.key]:updates},{transaction:transaction,merge:true,suppress_events:options.suppress_events,context:options.context})}else{const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this.updateNode(pathInfo.parentPath,{[pathInfo.key]:updates},{transaction:transaction,suppress_events:options.suppress_events,context:options.context})}if(!options.transaction){await transaction.commit()}}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}}exports.CustomStorage=CustomStorage},{"../../node-address":34,"../../node-errors":35,"../../node-info":36,"../../node-lock":37,"../../node-value-types":38,"../index":51,"./helpers":43,"acebase-core":12}],45:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createIndexedDBInstance=void 0;const acebase_core_1=require("acebase-core");const __1=require("..");const __2=require("../../..");const settings_1=require("./settings");const transaction_1=require("./transaction");function createIndexedDBInstance(dbname,init={}){const settings=new settings_1.IndexedDBStorageSettings(init);const IndexedDB=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;const request=IndexedDB.open(`${dbname}.acebase`,1);request.onupgradeneeded=e=>{const db=request.result;db.createObjectStore("nodes",{keyPath:"path"});db.createObjectStore("content")};let idb;const readyPromise=new Promise(((resolve,reject)=>{request.onsuccess=e=>{idb=request.result;resolve()};request.onerror=e=>{reject(e)}}));const cache=new acebase_core_1.SimpleCache(typeof settings.cacheSeconds==="number"?settings.cacheSeconds:60);const storageSettings=new __1.CustomStorageSettings({name:"IndexedDB",locking:true,removeVoidProperties:settings.removeVoidProperties,maxInlineValueSize:settings.maxInlineValueSize,lockTimeout:settings.lockTimeout,ready(){return readyPromise},async getTransaction(target){await readyPromise;const context={debug:false,db:idb,cache:cache,ipc:ipc};return new transaction_1.IndexedDBStorageTransaction(context,target)}});const db=new __2.AceBase(dbname,{logLevel:settings.logLevel,storage:storageSettings,sponsor:settings.sponsor});const ipc=db.api.storage.ipc;db.settings.ipcEvents=settings.multipleTabs===true;ipc.on("notification",(async notification=>{const message=notification.data;if(typeof message!=="object"){return}if(message.action==="cache.invalidate"){for(const path of message.paths){cache.remove(path)}}}));return db}exports.createIndexedDBInstance=createIndexedDBInstance},{"..":44,"../../..":31,"./settings":46,"./transaction":47,"acebase-core":12}],46:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.IndexedDBStorageSettings=void 0;const __1=require("../..");class IndexedDBStorageSettings extends __1.StorageSettings{constructor(settings){super(settings);this.multipleTabs=false;this.cacheSeconds=60;this.sponsor=false;if(typeof settings.logLevel==="string"){this.logLevel=settings.logLevel}if(typeof settings.multipleTabs==="boolean"){this.multipleTabs=settings.multipleTabs}if(typeof settings.cacheSeconds==="number"){this.cacheSeconds=settings.cacheSeconds}if(typeof settings.sponsor==="boolean"){this.sponsor=settings.sponsor}["type","ipc","path"].forEach((prop=>{if(prop in settings){console.warn(`${prop} setting is not supported for AceBase IndexedDBStorage`)}}))}}exports.IndexedDBStorageSettings=IndexedDBStorageSettings},{"../..":51}],47:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.IndexedDBStorageTransaction=void 0;const __1=require("..");function _requestToPromise(request){return new Promise(((resolve,reject)=>{request.onsuccess=event=>resolve(request.result||null);request.onerror=reject}))}class IndexedDBStorageTransaction extends __1.CustomStorageTransaction{constructor(context,target){super(target);this.context=context;this.production=true;this._pending=[]}_createTransaction(write=false){const tx=this.context.db.transaction(["nodes","content"],write?"readwrite":"readonly");return tx}_splitMetadata(node){const value=node.value;const copy=Object.assign({},node);delete copy.value;const metadata=copy;return{metadata:metadata,value:value}}async commit(){if(this._pending.length===0){return}const batch=this._pending.splice(0);this.context.ipc.sendNotification({action:"cache.invalidate",paths:batch.map((op=>op.path))});const tx=this._createTransaction(true);try{await new Promise(((resolve,reject)=>{let stop=false,processed=0;const handleError=err=>{stop=true;reject(err)};const handleSuccess=()=>{if(++processed===batch.length){resolve()}};batch.forEach(((op,i)=>{if(stop){return}let r1,r2;const path=op.path;if(op.action==="set"){const{metadata:metadata,value:value}=this._splitMetadata(op.node);const nodeInfo={path:path,metadata:metadata};r1=tx.objectStore("nodes").put(nodeInfo);r2=tx.objectStore("content").put(value,path);this.context.cache.set(path,op.node)}else if(op.action==="remove"){r1=tx.objectStore("content").delete(path);r2=tx.objectStore("nodes").delete(path);this.context.cache.set(path,null)}else{handleError(new Error(`Unknown pending operation "${op.action}" on path "${path}" `))}let succeeded=0;r1.onsuccess=r2.onsuccess=()=>{if(++succeeded===2){handleSuccess()}};r1.onerror=r2.onerror=handleError}))}));tx.commit&&tx.commit()}catch(err){console.error(err);tx.abort&&tx.abort();throw err}}async rollback(err){this._pending=[]}async get(path){if(this.context.cache.has(path)){const cache=this.context.cache.get(path);return cache}const tx=this._createTransaction(false);const r1=_requestToPromise(tx.objectStore("nodes").get(path));const r2=_requestToPromise(tx.objectStore("content").get(path));try{const results=await Promise.all([r1,r2]);tx.commit&&tx.commit();const info=results[0];if(!info){this.context.cache.set(path,null);return null}const node=info.metadata;node.value=results[1];this.context.cache.set(path,node);return node}catch(err){console.error(`IndexedDB get error`,err);tx.abort&&tx.abort();throw err}}set(path,node){this._pending.push({action:"set",path:path,node:node})}remove(path){this._pending.push({action:"remove",path:path})}async removeMultiple(paths){paths.forEach((path=>{this._pending.push({action:"remove",path:path})}))}childrenOf(path,include,checkCallback,addCallback){return this._getChildrenOf(path,Object.assign(Object.assign({},include),{descendants:false}),checkCallback,addCallback)}descendantsOf(path,include,checkCallback,addCallback){return this._getChildrenOf(path,Object.assign(Object.assign({},include),{descendants:true}),checkCallback,addCallback)}_getChildrenOf(path,include,checkCallback,addCallback){return new Promise(((resolve,reject)=>{const pathInfo=__1.CustomStorageHelpers.PathInfo.get(path);const tx=this._createTransaction(false);const store=tx.objectStore("nodes");const query=IDBKeyRange.lowerBound(path,true);const cursor=include.metadata?store.openCursor(query):store.openKeyCursor(query);cursor.onerror=e=>{var _a;(_a=tx.abort)===null||_a===void 0?void 0:_a.call(tx);reject(e)};cursor.onsuccess=async e=>{var _a,_b,_c;const otherPath=(_b=(_a=cursor.result)===null||_a===void 0?void 0:_a.key)!==null&&_b!==void 0?_b:null;let keepGoing=true;if(otherPath===null){keepGoing=false}else if(!pathInfo.isAncestorOf(otherPath)){keepGoing=false}else if(include.descendants||pathInfo.isParentOf(otherPath)){let node;if(include.metadata){const valueCursor=cursor;const data=valueCursor.result.value;node=data.metadata}const shouldAdd=checkCallback(otherPath,node);if(shouldAdd){if(include.value){if(this.context.cache.has(otherPath)){const cache=this.context.cache.get(otherPath);node.value=cache.value}else{const req=tx.objectStore("content").get(otherPath);node.value=await new Promise(((resolve,reject)=>{req.onerror=e=>{resolve(null)};req.onsuccess=e=>{resolve(req.result)}}));this.context.cache.set(otherPath,node.value===null?null:node)}}keepGoing=addCallback(otherPath,node)}}if(keepGoing){try{cursor.result.continue()}catch(err){keepGoing=false}}if(!keepGoing){(_c=tx.commit)===null||_c===void 0?void 0:_c.call(tx);resolve()}}}))}}exports.IndexedDBStorageTransaction=IndexedDBStorageTransaction},{"..":44}],48:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createLocalStorageInstance=exports.LocalStorageTransaction=exports.LocalStorageSettings=void 0;const __1=require("..");const __2=require("../../..");const settings_1=require("./settings");Object.defineProperty(exports,"LocalStorageSettings",{enumerable:true,get:function(){return settings_1.LocalStorageSettings}});const transaction_1=require("./transaction");Object.defineProperty(exports,"LocalStorageTransaction",{enumerable:true,get:function(){return transaction_1.LocalStorageTransaction}});function createLocalStorageInstance(dbname,init={}){const settings=new settings_1.LocalStorageSettings(init);const localStorage=settings.provider?settings.provider:settings.temp?window.localStorage:window.sessionStorage;const storageSettings=new __1.CustomStorageSettings({name:"LocalStorage",locking:true,removeVoidProperties:settings.removeVoidProperties,maxInlineValueSize:settings.maxInlineValueSize,ready(){return Promise.resolve()},getTransaction(target){const context={debug:true,dbname:dbname,localStorage:localStorage};const transaction=new transaction_1.LocalStorageTransaction(context,target);return Promise.resolve(transaction)}});const db=new __2.AceBase(dbname,{logLevel:settings.logLevel,storage:storageSettings,sponsor:settings.sponsor});db.settings.ipcEvents=settings.multipleTabs===true;return db}exports.createLocalStorageInstance=createLocalStorageInstance},{"..":44,"../../..":31,"./settings":49,"./transaction":50}],49:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.LocalStorageSettings=void 0;const __1=require("../..");class LocalStorageSettings extends __1.StorageSettings{constructor(settings){super(settings);this.temp=false;this.multipleTabs=false;if(typeof settings.temp==="boolean"){this.temp=settings.temp}if(typeof settings.provider==="object"){this.provider=settings.provider}if(typeof settings.multipleTabs==="boolean"){this.multipleTabs=settings.multipleTabs}if(typeof settings.logLevel==="string"){this.logLevel=settings.logLevel}if(typeof settings.sponsor==="boolean"){this.sponsor=settings.sponsor}["type","ipc","path"].forEach((prop=>{if(prop in settings){console.warn(`${prop} setting is not supported for AceBase LocalStorage`)}}))}}exports.LocalStorageSettings=LocalStorageSettings},{"../..":51}],50:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.LocalStorageTransaction=void 0;const __1=require("..");class LocalStorageTransaction extends __1.CustomStorageTransaction{constructor(context,target){super(target);this.context=context;this._storageKeysPrefix=`${this.context.dbname}.acebase::`}async commit(){}async rollback(err){}async get(path){const json=this.context.localStorage.getItem(this.getStorageKeyForPath(path));const val=JSON.parse(json);return val}async set(path,val){const json=JSON.stringify(val);this.context.localStorage.setItem(this.getStorageKeyForPath(path),json)}async remove(path){this.context.localStorage.removeItem(this.getStorageKeyForPath(path))}async childrenOf(path,include,checkCallback,addCallback){const pathInfo=__1.CustomStorageHelpers.PathInfo.get(path);for(let i=0;i`notify_${event}`)));const NOOP=()=>{};class SchemaValidationError extends Error{constructor(reason){super(`Schema validation failed: ${reason}`);this.reason=reason}}exports.SchemaValidationError=SchemaValidationError;class StorageSettings{constructor(settings={}){this.maxInlineValueSize=50;this.removeVoidProperties=false;this.path=".";this.lockTimeout=120;this.type="data";this.readOnly=false;if(typeof settings.maxInlineValueSize==="number"){this.maxInlineValueSize=settings.maxInlineValueSize}if(typeof settings.removeVoidProperties==="boolean"){this.removeVoidProperties=settings.removeVoidProperties}if(typeof settings.path==="string"){this.path=settings.path}if(this.path.endsWith("/")){this.path=this.path.slice(0,-1)}if(typeof settings.lockTimeout==="number"){this.lockTimeout=settings.lockTimeout}if(typeof settings.type==="string"){this.type=settings.type}if(typeof settings.readOnly==="boolean"){this.readOnly=settings.readOnly}if(typeof settings.ipc==="object"){this.ipc=settings.ipc}}}exports.StorageSettings=StorageSettings;class Storage extends acebase_core_1.SimpleEventEmitter{constructor(name,settings,env){super();this.name=name;this.settings=settings;this._schemas=[];this._indexes=[];this.indexes={get supported(){return promise_fs_1.pfs===null||promise_fs_1.pfs===void 0?void 0:promise_fs_1.pfs.hasFileSystem},create:(path,key,options={rebuild:false})=>{const context={storage:this,debug:this.debug,indexes:this._indexes,ipc:this.ipc};return(0,indexes_1.createIndex)(context,path,key,options)},get:(path,key=null)=>{if(path.includes("$")){const pathKeys=acebase_core_1.PathInfo.getPathKeys(path).map((key=>typeof key==="string"&&key.startsWith("$")?"*":key));path=new acebase_core_1.PathInfo(pathKeys).path}return this._indexes.filter((index=>index.path===path&&(key===null||key===index.key)))},getAll:(targetPath,options={parentPaths:true,childPaths:true})=>{const pathKeys=acebase_core_1.PathInfo.getPathKeys(targetPath);return this._indexes.filter((index=>{const indexKeys=acebase_core_1.PathInfo.getPathKeys(index.path+"/*");if(options.parentPaths&&indexKeys.every(((key,i)=>key==="*"||pathKeys[i]===key))&&[index.key].concat(...index.includeKeys).includes(pathKeys[indexKeys.length])){return true}else if(indexKeys.length[key,"*"].includes(indexKeys[i])))}))},list:()=>this._indexes.slice(),load:async()=>{this._indexes.splice(0);if(!promise_fs_1.pfs.hasFileSystem){return}let files=[];try{files=await promise_fs_1.pfs.readdir(`${this.settings.path}/${this.name}.acebase`)}catch(err){if(err.code!=="ENOENT"){this.debug.error(err)}}const promises=[];files.forEach((fileName=>{if(!fileName.endsWith(".idx")){return}const needsStoragePrefix=this.settings.type!=="data";const hasStoragePrefix=/^\[[a-z]+\]-/.test(fileName);if(!needsStoragePrefix&&!hasStoragePrefix||needsStoragePrefix&&fileName.startsWith(`[${this.settings.type}]-`)){const p=this.indexes.add(fileName);promises.push(p)}}));await Promise.all(promises)},add:async fileName=>{try{const index=await data_index_1.DataIndex.readFromFile(this,fileName);this._indexes.push(index);return index}catch(err){this.debug.error(err);return null}},delete:async fileName=>{const index=await this.indexes.remove(fileName);await index.delete();this.ipc.sendNotification({type:"index.deleted",fileName:index.fileName,path:index.path,keys:index.key})},remove:async fileName=>{const index=this._indexes.find((index=>index.fileName===fileName));if(!index){throw new Error(`Index ${fileName} not found`)}this._indexes.splice(this._indexes.indexOf(index),1);return index},close:async()=>{const promises=this.indexes.list().map((index=>index.close().catch((err=>this.debug.error(err)))));await Promise.all(promises)}};this._eventSubscriptions={};this.subscriptions={add:(path,type,callback)=>{if(SUPPORTED_EVENTS.indexOf(type)<0){throw new TypeError(`Invalid event type "${type}"`)}let pathSubs=this._eventSubscriptions[path];if(!pathSubs){pathSubs=this._eventSubscriptions[path]=[]}pathSubs.push({created:Date.now(),type:type,callback:callback});this.emit("subscribe",{path:path,event:type,callback:callback})},remove:(path,type,callback)=>{const pathSubs=this._eventSubscriptions[path];if(!pathSubs){return}const next=()=>pathSubs.findIndex((ps=>(type?ps.type===type:true)&&(callback?ps.callback===callback:true)));let i;while((i=next())>=0){pathSubs.splice(i,1)}this.emit("unsubscribe",{path:path,event:type,callback:callback})},hasValueSubscribersForPath(path){const valueNeeded=this.getValueSubscribersForPath(path);return!!valueNeeded},getValueSubscribersForPath:path=>{const pathInfo=new acebase_core_1.PathInfo(path);const valueSubscribers=[];Object.keys(this._eventSubscriptions).forEach((subscriptionPath=>{if(pathInfo.equals(subscriptionPath)||pathInfo.isDescendantOf(subscriptionPath)){const pathSubs=this._eventSubscriptions[subscriptionPath];const eventPath=acebase_core_1.PathInfo.fillVariables(subscriptionPath,path);pathSubs.filter((sub=>!sub.type.startsWith("notify_"))).forEach((sub=>{let dataPath=null;if(sub.type==="value"){dataPath=eventPath}else if(["mutated","mutations"].includes(sub.type)&&pathInfo.isDescendantOf(eventPath)){dataPath=path}else if(sub.type==="child_changed"&&path!==eventPath){const childKey=acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}else if(["child_added","child_removed"].includes(sub.type)&&pathInfo.isChildOf(eventPath)){const childKey=acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}if(dataPath!==null&&!valueSubscribers.some((s=>s.type===sub.type&&s.eventPath===eventPath))){valueSubscribers.push({type:sub.type,eventPath:eventPath,dataPath:dataPath,subscriptionPath:subscriptionPath})}}))}}));return valueSubscribers},getAllSubscribersForPath:path=>{const pathInfo=acebase_core_1.PathInfo.get(path);const subscribers=[];Object.keys(this._eventSubscriptions).forEach((subscriptionPath=>{if(pathInfo.isOnTrailOf(subscriptionPath)){const pathSubs=this._eventSubscriptions[subscriptionPath];const eventPath=acebase_core_1.PathInfo.fillVariables(subscriptionPath,path);pathSubs.forEach((sub=>{let dataPath=null;if(sub.type==="value"||sub.type==="notify_value"){dataPath=eventPath}else if(["child_changed","notify_child_changed"].includes(sub.type)){const childKey=path===eventPath||pathInfo.isAncestorOf(eventPath)?"*":acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}else if(["mutated","mutations","notify_mutated","notify_mutations"].includes(sub.type)){dataPath=path}else if(["child_added","child_removed","notify_child_added","notify_child_removed"].includes(sub.type)&&(pathInfo.isChildOf(eventPath)||path===eventPath||pathInfo.isAncestorOf(eventPath))){const childKey=path===eventPath||pathInfo.isAncestorOf(eventPath)?"*":acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}if(dataPath!==null&&!subscribers.some((s=>s.type===sub.type&&s.eventPath===eventPath&&s.subscriptionPath===subscriptionPath))){subscribers.push({type:sub.type,eventPath:eventPath,dataPath:dataPath,subscriptionPath:subscriptionPath})}}))}}));return subscribers},trigger:(event,path,dataPath,oldValue,newValue,context)=>{const pathSubscriptions=this._eventSubscriptions[path]||[];pathSubscriptions.filter((sub=>sub.type===event)).forEach((sub=>{sub.callback(null,dataPath,newValue,oldValue,context)}))}};this.debug=new acebase_core_1.DebugLogger(env.logLevel,`[${name}${typeof settings.type==="string"&&settings.type!=="data"?`:${settings.type}`:""}]`);const ipcName=name+(typeof settings.type==="string"?`_${settings.type}`:"");if(settings.ipc){if(typeof settings.ipc.port!=="number"){throw new Error("IPC port number must be a number")}if(!["master","worker"].includes(settings.ipc.role)){throw new Error(`IPC client role must be either "master" or "worker", not "${settings.ipc.role}"`)}const ipcSettings=Object.assign({dbname:ipcName},settings.ipc);this.ipc=new ipc_1.RemoteIPCPeer(this,ipcSettings)}else{this.ipc=new ipc_1.IPCPeer(this,ipcName)}this.ipc.once("exit",(code=>{if(this.indexes.supported){this.indexes.close()}}));this.nodeLocker={lock:(path,tid,write,comment)=>this.ipc.lock({path:path,tid:tid,write:write,comment:comment})};this._lastTid=0}createTid(){return DEBUG_MODE?++this._lastTid:acebase_core_1.ID.generate()}async close(){await this.ipc.exit()}get path(){return`${this.settings.path}/${this.name}.acebase`}valueFitsInline(value){if(typeof value==="number"||typeof value==="boolean"||value instanceof Date){return true}else if(typeof value==="string"){if(value.length>this.settings.maxInlineValueSize){return false}const encoded=encodeString(value);return encoded.lengththis.settings.maxInlineValueSize){return false}const encoded=encodeString(value.path);return encoded.length0){hasValueSubscribers=true;const eventPaths=valueSubscribers.map((sub=>({path:sub.dataPath,keys:acebase_core_1.PathInfo.getPathKeys(sub.dataPath)}))).sort(((a,b)=>{if(a.keys.lengthb.keys.length)return 1;return 0}));const first=eventPaths[0];topEventPath=first.path;if(valueSubscribers.filter((sub=>sub.dataPath===topEventPath)).every((sub=>sub.type==="mutated"||sub.type.startsWith("notify_")))){hasValueSubscribers=false}topEventPath=acebase_core_1.PathInfo.fillVariables(topEventPath,path)}const indexes=this.indexes.getAll(path,{childPaths:true,parentPaths:true}).map((index=>({index:index,keys:acebase_core_1.PathInfo.getPathKeys(index.path)}))).sort(((a,b)=>{if(a.keys.lengthb.keys.length){return 1}return 0})).map((obj=>obj.index));const keysFilter=[];if(indexes.length>0){indexes.sort(((a,b)=>{if(typeof a._pathKeys==="undefined"){a._pathKeys=acebase_core_1.PathInfo.getPathKeys(a.path)}if(typeof b._pathKeys==="undefined"){b._pathKeys=acebase_core_1.PathInfo.getPathKeys(b.path)}if(a._pathKeys.lengthb._pathKeys.length)return 1;return 0}));const topIndex=indexes[0];const topIndexPath=topIndex.path===path?path:acebase_core_1.PathInfo.fillVariables(`${topIndex.path}/*`,path);if(topIndexPath.lengthindex.path===topIndex.path)).forEach((index=>{const keys=[index.key].concat(index.includeKeys);keys.forEach((key=>!keysFilter.includes(key)&&keysFilter.push(key)))}))}}return{topEventPath:topEventPath,eventSubscriptions:eventSubscriptions,valueSubscribers:valueSubscribers,hasValueSubscribers:hasValueSubscribers,indexes:indexes,keysFilter:keysFilter}}async _writeNodeWithTracking(path,value,options={merge:false,waitForIndexUpdates:true,suppress_events:false,context:null,impact:null}){options=options||{};if(!options.tid&&!options.transaction){throw new Error("_writeNodeWithTracking MUST be executed with a tid OR transaction!")}options.merge=options.merge===true;const validation=this.validateSchema(path,value,{updates:options.merge});if(!validation.ok){throw new SchemaValidationError(validation.reason)}const tid=options.tid;const transaction=options.transaction;let topEventData=null;const updateImpact=options.impact?options.impact:this.getUpdateImpact(path,options.suppress_events);const{topEventPath:topEventPath,eventSubscriptions:eventSubscriptions,hasValueSubscribers:hasValueSubscribers,indexes:indexes}=updateImpact;let{keysFilter:keysFilter}=updateImpact;const writeNode=()=>{if(typeof options._customWriteFunction==="function"){return options._customWriteFunction()}if(topEventData){const pathKeys=acebase_core_1.PathInfo.getPathKeys(path);const eventPathKeys=acebase_core_1.PathInfo.getPathKeys(topEventPath);const trailKeys=pathKeys.slice(eventPathKeys.length);let currentValue=topEventData;while(trailKeys.length>0&¤tValue!==null){const childKey=trailKeys.shift();currentValue=typeof currentValue==="object"&&childKey in currentValue?currentValue[childKey]:null}options.currentValue=currentValue}return this._writeNode(path,value,options)};const transactionLoggingEnabled=this.settings.transactions&&this.settings.transactions.log===true;if(eventSubscriptions.length===0&&indexes.length===0&&!transactionLoggingEnabled){return writeNode()}if(!hasValueSubscribers&&options.merge===true&&keysFilter.length===0){keysFilter=Object.keys(value);if(topEventPath!==path){const trailPath=path.slice(topEventPath.length);keysFilter=keysFilter.map((key=>`${trailPath}/${key}`))}}const eventNodeInfo=await this.getNodeInfo(topEventPath,{transaction:transaction,tid:tid});let currentValue=null;if(eventNodeInfo.exists){const valueOptions={transaction:transaction,tid:tid};if(keysFilter.length>0){valueOptions.include=keysFilter}if(topEventPath===""&&typeof valueOptions.include==="undefined"){this.debug.warn('WARNING: One or more value event listeners on the root node are causing the entire database value to be read to facilitate change tracking. Using "value", "notify_value", "child_changed" and "notify_child_changed" events on the root node are a bad practice because of the significant performance impact. Use "mutated" or "mutations" events instead')}const node=await this.getNode(topEventPath,valueOptions);currentValue=node.value}topEventData=currentValue;const result=await writeNode()||{};let newTopEventData,modifiedData;if(path===topEventPath){if(options.merge){if(topEventData===null){newTopEventData=value instanceof Array?[]:{}}else{newTopEventData=topEventData instanceof Array?[]:{};Object.keys(topEventData).forEach((key=>{newTopEventData[key]=topEventData[key]}))}}else{newTopEventData=value}modifiedData=newTopEventData}else{const trailPath=path.slice(topEventPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);if(topEventData===null){newTopEventData=typeof trailKeys[0]==="number"?[]:{}}else{newTopEventData=topEventData instanceof Array?[]:{};Object.keys(topEventData).forEach((key=>{newTopEventData[key]=topEventData[key]}))}modifiedData=newTopEventData;while(trailKeys.length>0){const childKey=trailKeys.shift();if(!options.merge&&trailKeys.length===0){modifiedData[childKey]=value}else{const original=modifiedData[childKey];const shallowCopy=typeof childKey==="number"?[...original]:Object.assign({},original);modifiedData[childKey]=shallowCopy}modifiedData=modifiedData[childKey]}}if(options.merge){Object.keys(value).forEach((key=>{modifiedData[key]=value[key]}))}const dataChanges=compareValues(topEventData,newTopEventData);if(dataChanges==="identical"){result.mutations=[];return result}function removeNulls(obj){if(obj===null||typeof obj!=="object"){return obj}Object.keys(obj).forEach((prop=>{const val=obj[prop];if(val===null){delete obj[prop];if(obj instanceof Array){obj.length--}}if(typeof val==="object"){removeNulls(val)}}))}removeNulls(newTopEventData);const indexUpdates=[];indexes.map((index=>({index:index,keys:acebase_core_1.PathInfo.getPathKeys(index.path)}))).sort(((a,b)=>{if(a.keys.lengthb.keys.length){return-1}return 0})).forEach((({index:index})=>{const pathKeys=acebase_core_1.PathInfo.getPathKeys(topEventPath);const indexPathKeys=acebase_core_1.PathInfo.getPathKeys(index.path+"/*");const trailKeys=indexPathKeys.slice(pathKeys.length);const oldValue=topEventData;const newValue=newTopEventData;if(trailKeys.length===0){console.assert(pathKeys.length===indexPathKeys.length,"check logic");const p=this.ipc.isMaster?index.handleRecordUpdate(topEventPath,oldValue,newValue):this.ipc.sendRequest({type:"index.update",path:topEventPath,oldValue:oldValue,newValue:newValue});indexUpdates.push(p);return}const getAllIndexUpdates=(path,oldValue,newValue)=>{if(oldValue===null&&newValue===null){return[]}const pathKeys=acebase_core_1.PathInfo.getPathKeys(path);const indexPathKeys=acebase_core_1.PathInfo.getPathKeys(index.path+"/*");const trailKeys=indexPathKeys.slice(pathKeys.length);if(trailKeys.length===0){console.assert(pathKeys.length===indexPathKeys.length,"check logic");return[{path:path,oldValue:oldValue,newValue:newValue}]}let results=[];let trailPath="";while(trailKeys.length>0){const subKey=trailKeys.shift();if(typeof subKey==="string"&&(subKey==="*"||subKey.startsWith("$"))){const allKeys=oldValue===null?[]:Object.keys(oldValue);newValue!==null&&Object.keys(newValue).forEach((key=>{if(allKeys.indexOf(key)<0){allKeys.push(key)}}));allKeys.forEach((key=>{const childPath=acebase_core_1.PathInfo.getChildPath(trailPath,key);const childValues=getChildValues(key,oldValue,newValue);const subTrailPath=acebase_core_1.PathInfo.getChildPath(path,childPath);const childResults=getAllIndexUpdates(subTrailPath,childValues.oldValue,childValues.newValue);results=results.concat(childResults)}));break}else{const values=getChildValues(subKey,oldValue,newValue);oldValue=values.oldValue;newValue=values.newValue;if(oldValue===null&&newValue===null){break}trailPath=acebase_core_1.PathInfo.getChildPath(trailPath,subKey)}}return results};const results=getAllIndexUpdates(topEventPath,oldValue,newValue);results.forEach((result=>{const p=this.ipc.isMaster?index.handleRecordUpdate(result.path,result.oldValue,result.newValue):this.ipc.sendRequest({type:"index.update",path:result.path,oldValue:result.oldValue,newValue:result.newValue});indexUpdates.push(p)}))}));const callSubscriberWithValues=(sub,oldValue,newValue,variables=[])=>{let trigger=true;let type=sub.type;if(type.startsWith("notify_")){type=type.slice("notify_".length)}if(type==="mutated"){return}else if(type==="child_changed"&&(oldValue===null||newValue===null)){trigger=false}else if(type==="value"||type==="child_changed"){const changes=compareValues(oldValue,newValue);trigger=changes!=="identical"}else if(type==="child_added"){trigger=oldValue===null&&newValue!==null}else if(type==="child_removed"){trigger=oldValue!==null&&newValue===null}const pathKeys=acebase_core_1.PathInfo.getPathKeys(sub.dataPath);variables.forEach((variable=>{const index=pathKeys.indexOf(variable.name);console.assert(index>=0,`Variable "${variable.name}" not found in subscription dataPath "${sub.dataPath}"`);pathKeys[index]=variable.value}));const dataPath=pathKeys.reduce(((path,key)=>acebase_core_1.PathInfo.getChildPath(path,key)),"");trigger&&this.subscriptions.trigger(sub.type,sub.subscriptionPath,dataPath,oldValue,newValue,options.context)};const prepareMutationEvents=(currentPath,oldValue,newValue,compareResult)=>{const batch=[];const result=compareResult||compareValues(oldValue,newValue);if(result==="identical"){return batch}else if(typeof result==="string"){batch.push({path:currentPath,oldValue:oldValue,newValue:newValue})}else{result.changed.forEach((info=>{const childPath=acebase_core_1.PathInfo.getChildPath(currentPath,info.key);const childValues=getChildValues(info.key,oldValue,newValue);const childBatch=prepareMutationEvents(childPath,childValues.oldValue,childValues.newValue,info.change);batch.push(...childBatch)}));result.added.forEach((key=>{const childPath=acebase_core_1.PathInfo.getChildPath(currentPath,key);batch.push({path:childPath,oldValue:null,newValue:newValue[key]})}));if(oldValue instanceof Array&&newValue instanceof Array){result.removed.sort(((a,b)=>a{const childPath=acebase_core_1.PathInfo.getChildPath(currentPath,key);batch.push({path:childPath,oldValue:oldValue[key],newValue:null})}))}return batch};if(transactionLoggingEnabled&&this.settings.type!=="transaction"){result.mutations=(()=>{const trailPath=path.slice(topEventPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);let oldValue=topEventData,newValue=newTopEventData;while(trailKeys.length>0){const key=trailKeys.shift();({oldValue:oldValue,newValue:newValue}=getChildValues(key,oldValue,newValue))}const compareResults=compareValues(oldValue,newValue);const batch=prepareMutationEvents(path,oldValue,newValue,compareResults);const mutations=batch.map((m=>({target:acebase_core_1.PathInfo.getPathKeys(m.path.slice(path.length)),prev:m.oldValue,val:m.newValue})));return mutations})()}const triggerAllEvents=()=>{eventSubscriptions.filter((sub=>!["mutated","mutations","notify_mutated","notify_mutations"].includes(sub.type))).map((sub=>{const keys=acebase_core_1.PathInfo.getPathKeys(sub.dataPath);return{sub:sub,keys:keys}})).sort(((a,b)=>{if(a.keys.lengthb.keys.length){return-1}return 0})).forEach((({sub:sub})=>{const process=(currentPath,oldValue,newValue,variables=[])=>{const trailPath=sub.dataPath.slice(currentPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);while(trailKeys.length>0){const subKey=trailKeys.shift();if(typeof subKey==="string"&&(subKey==="*"||subKey[0]==="$")){const allKeys=oldValue===null?[]:Object.keys(oldValue).map((key=>oldValue instanceof Array?parseInt(key):key));newValue!==null&&Object.keys(newValue).forEach((key=>{const keyOrIndex=newValue instanceof Array?parseInt(key):key;!allKeys.includes(keyOrIndex)&&allKeys.push(key)}));allKeys.forEach((key=>{const childValues=getChildValues(key,oldValue,newValue);const vars=variables.concat({name:subKey,value:key});if(trailKeys.length===0){callSubscriberWithValues(sub,childValues.oldValue,childValues.newValue,vars)}else{process(acebase_core_1.PathInfo.getChildPath(currentPath,subKey),childValues.oldValue,childValues.newValue,vars)}}));return}else{currentPath=acebase_core_1.PathInfo.getChildPath(currentPath,subKey);const childValues=getChildValues(subKey,oldValue,newValue);oldValue=childValues.oldValue;newValue=childValues.newValue}}callSubscriberWithValues(sub,oldValue,newValue,variables)};if(sub.type.startsWith("notify_")&&acebase_core_1.PathInfo.get(sub.eventPath).isAncestorOf(topEventPath)){const isOnParentPath=acebase_core_1.PathInfo.get(sub.eventPath).isParentOf(topEventPath);const trigger=sub.type==="notify_value"||sub.type==="notify_child_changed"&&(!isOnParentPath||!["added","removed"].includes(dataChanges))||sub.type==="notify_child_removed"&&dataChanges==="removed"&&isOnParentPath||sub.type==="notify_child_added"&&dataChanges==="added"&&isOnParentPath;trigger&&this.subscriptions.trigger(sub.type,sub.subscriptionPath,sub.dataPath,null,null,options.context)}else{process(topEventPath,topEventData,newTopEventData)}}));const mutationEvents=eventSubscriptions.filter((sub=>["mutated","mutations","notify_mutated","notify_mutations"].includes(sub.type)));mutationEvents.forEach((sub=>{let currentPath=topEventPath;const trailPath=sub.eventPath.slice(currentPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);let oldValue=topEventData,newValue=newTopEventData;while(trailKeys.length>0){const subKey=trailKeys.shift();currentPath=acebase_core_1.PathInfo.getChildPath(currentPath,subKey);const childValues=getChildValues(subKey,oldValue,newValue);oldValue=childValues.oldValue;newValue=childValues.newValue}const batch=prepareMutationEvents(currentPath,oldValue,newValue);if(batch.length===0){return}const isNotifyEvent=sub.type.startsWith("notify_");if(["mutated","notify_mutated"].includes(sub.type)){batch.forEach(((mutation,index)=>{const context=options.context;const prevVal=isNotifyEvent?null:mutation.oldValue;const newVal=isNotifyEvent?null:mutation.newValue;this.subscriptions.trigger(sub.type,sub.subscriptionPath,mutation.path,prevVal,newVal,context)}))}else if(["mutations","notify_mutations"].includes(sub.type)){const values=isNotifyEvent?null:batch.map((m=>({target:acebase_core_1.PathInfo.getPathKeys(m.path.slice(sub.subscriptionPath.length)),prev:m.oldValue,val:m.newValue})));this.subscriptions.trigger(sub.type,sub.subscriptionPath,sub.subscriptionPath,null,values,options.context)}}))};if(options.waitForIndexUpdates===false){indexUpdates.splice(0)}await Promise.all(indexUpdates);defer(triggerAllEvents);return result}getChildren(path,options){throw new Error("This method must be implemented by subclass")}async getNodeValue(path,options={}){const node=await this.getNode(path,options);return node.value}getNode(path,options){throw new Error("This method must be implemented by subclass")}getNodeInfo(path,options){throw new Error("This method must be implemented by subclass")}setNode(path,value,options){throw new Error("This method must be implemented by subclass")}updateNode(path,updates,options){throw new Error("This method must be implemented by subclass")}async transactNode(path,callback,options={no_lock:false,suppress_events:false,context:null}){const useFakeLock=options&&options.no_lock===true;const tid=this.createTid();const lock=useFakeLock?{tid:tid,release:NOOP}:await this.nodeLocker.lock(path,tid,true,"transactNode");try{let changed=false;const changeCallback=()=>{changed=true};if(useFakeLock){this.subscriptions.add(path,"notify_value",changeCallback)}const node=await this.getNode(path,{tid:tid});const checkRevision=node.revision;let newValue;try{newValue=callback(node.value);if(newValue instanceof Promise){newValue=await newValue.catch((err=>{this.debug.error(`Error in transaction callback: ${err.message}`)}))}}catch(err){this.debug.error(`Error in transaction callback: ${err.message}`)}if(typeof newValue==="undefined"){return}if(useFakeLock){this.subscriptions.remove(path,"notify_value",changeCallback)}if(changed){throw new node_errors_1.NodeRevisionError("Node changed")}const cursor=await this.setNode(path,newValue,{assert_revision:checkRevision,tid:lock.tid,suppress_events:options.suppress_events,context:options.context});return cursor}catch(err){if(err instanceof node_errors_1.NodeRevisionError){console.warn(`node value changed, running again. Error: ${err.message}`);return this.transactNode(path,callback,options)}else{throw err}}finally{lock.release()}}async matchNode(path,criteria,options){var _a;const tid=(_a=options===null||options===void 0?void 0:options.tid)!==null&&_a!==void 0?_a:acebase_core_1.ID.generate();const checkNode=async(path,criteria)=>{if(criteria.length===0){return Promise.resolve(true)}const criteriaKeys=criteria.reduce(((keys,cr)=>{let key=cr.key;if(typeof key==="string"&&key.includes("/")){key=key.slice(0,key.indexOf("/"))}if(keys.indexOf(key)<0){keys.push(key)}return keys}),[]);const unseenKeys=criteriaKeys.slice();let isMatch=true;const delayedMatchPromises=[];try{await this.getChildren(path,{tid:tid,keyFilter:criteriaKeys}).next((childInfo=>{var _a;const keyOrIndex=(_a=childInfo.key)!==null&&_a!==void 0?_a:childInfo.index;unseenKeys.includes(keyOrIndex)&&unseenKeys.splice(unseenKeys.indexOf(childInfo.key),1);const keyCriteria=criteria.filter((cr=>cr.key===keyOrIndex)).map((cr=>({op:cr.op,compare:cr.compare})));const keyResult=keyCriteria.length>0?checkChild(childInfo,keyCriteria):{isMatch:true,promises:[]};isMatch=keyResult.isMatch;if(isMatch){delayedMatchPromises.push(...keyResult.promises);const childCriteria=criteria.filter((cr=>typeof cr.key==="string"&&cr.key.startsWith(`${typeof keyOrIndex==="number"?`[${keyOrIndex}]`:keyOrIndex}/`))).map((cr=>{const key=cr.key.slice(cr.key.indexOf("/")+1);return{key:key,op:cr.op,compare:cr.compare}}));if(childCriteria.length>0){const childPath=acebase_core_1.PathInfo.getChildPath(path,childInfo.key);const childPromise=checkNode(childPath,childCriteria).then((isMatch=>({isMatch:isMatch})));delayedMatchPromises.push(childPromise)}}if(!isMatch||unseenKeys.length===0){return false}}));if(isMatch){const results=await Promise.all(delayedMatchPromises);isMatch=results.every((res=>res.isMatch))}if(!isMatch){return false}isMatch=unseenKeys.every((keyOrIndex=>{const childInfo=new node_info_1.NodeInfo(Object.assign(Object.assign(Object.assign({},typeof keyOrIndex==="number"&&{index:keyOrIndex}),typeof keyOrIndex==="string"&&{key:keyOrIndex}),{exists:false}));const childCriteria=criteria.filter((cr=>typeof cr.key==="string"&&cr.key.startsWith(`${typeof keyOrIndex==="number"?`[${keyOrIndex}]`:keyOrIndex}/`))).map((cr=>({op:cr.op,compare:cr.compare})));if(childCriteria.length>0&&!checkChild(childInfo,childCriteria).isMatch){return false}const keyCriteria=criteria.filter((cr=>cr.key===keyOrIndex)).map((cr=>({op:cr.op,compare:cr.compare})));if(keyCriteria.length===0){return true}const result=checkChild(childInfo,keyCriteria);return result.isMatch}));return isMatch}catch(err){this.debug.error(`Error matching on "${path}": `,err);throw err}};const checkChild=(child,criteria)=>{const promises=[];const isMatch=criteria.every((f=>{let proceed=true;if(f.op==="!exists"||f.op==="=="&&(typeof f.compare==="undefined"||f.compare===null)){proceed=!child.exists}else if(f.op==="exists"||f.op==="!="&&(typeof f.compare==="undefined"||f.compare===null)){proceed=child.exists}else if((f.op==="contains"||f.op==="!contains")&&f.compare instanceof Array&&f.compare.length===0){proceed=true}else if(!child.exists){proceed=false}else{if(child.address){if(child.valueType===node_value_types_1.VALUE_TYPES.OBJECT&&["has","!has"].indexOf(f.op)>=0){const op=f.op==="has"?"exists":"!exists";const p=checkNode(child.path,[{key:f.compare,op:op}]).then((isMatch=>({key:child.key,isMatch:isMatch})));promises.push(p);proceed=true}else if(child.valueType===node_value_types_1.VALUE_TYPES.ARRAY&&["contains","!contains"].indexOf(f.op)>=0){const p=this.getNode(child.path,{tid:tid}).then((({value:arr})=>{const isMatch=f.op==="contains"?f.compare instanceof Array?f.compare.every((val=>arr.includes(val))):arr.includes(f.compare):f.compare instanceof Array?!f.compare.some((val=>arr.includes(val))):!arr.includes(f.compare);return{key:child.key,isMatch:isMatch}}));promises.push(p);proceed=true}else if(child.valueType===node_value_types_1.VALUE_TYPES.STRING){const p=this.getNode(child.path,{tid:tid}).then((node=>({key:child.key,isMatch:this.test(node.value,f.op,f.compare)})));promises.push(p);proceed=true}else{proceed=false}}else if(child.type===node_value_types_1.VALUE_TYPES.OBJECT&&["has","!has"].indexOf(f.op)>=0){const has=f.compare in child.value;proceed=has&&f.op==="has"||!has&&f.op==="!has"}else if(child.type===node_value_types_1.VALUE_TYPES.ARRAY&&["contains","!contains"].indexOf(f.op)>=0){const contains=child.value.indexOf(f.compare)>=0;proceed=contains&&f.op==="contains"||!contains&&f.op==="!contains"}else{let ret=this.test(child.value,f.op,f.compare);if(ret instanceof Promise){promises.push(ret);ret=true}proceed=ret}}return proceed}));return{isMatch:isMatch,promises:promises}};return checkNode(path,criteria)}test(val,op,compare){if(op==="<"){return val"){return val>compare}if(op===">="){return val>=compare}if(op==="in"){return compare.indexOf(val)>=0}if(op==="!in"){return compare.indexOf(val)<0}if(op==="like"||op==="!like"){const pattern="^"+compare.replace(/[-[\]{}()+.,\\^$|#\s]/g,"\\$&").replace(/\?/g,".").replace(/\*/g,".*?")+"$";const re=new RegExp(pattern,"i");const isMatch=re.test(val.toString());return op==="like"?isMatch:!isMatch}if(op==="matches"){return compare.test(val.toString())}if(op==="!matches"){return!compare.test(val.toString())}if(op==="between"){return val>=compare[0]&&val<=compare[1]}if(op==="!between"){return valcompare[1]}if(op==="has"||op==="!has"){const has=typeof val==="object"&&compare in val;return op==="has"?has:!has}if(op==="contains"||op==="!contains"){const includes=typeof val==="object"&&val instanceof Array&&val.includes(compare);return op==="contains"?includes:!includes}return false}async exportNode(path,writeFn,options={format:"json",type_safe:true}){if((options===null||options===void 0?void 0:options.format)!=="json"){throw new Error("Only json output is currently supported")}const write=typeof writeFn!=="function"?writeFn.write.bind(writeFn):writeFn;const stringifyValue=(type,val)=>{const escape=str=>str.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/[\u0000-\u001f]/g,(ch=>`\\u${ch.charCodeAt(0).toString(16).padStart(4,"0")}`));if(type===node_value_types_1.VALUE_TYPES.DATETIME){val=`"${val.toISOString()}"`;if(options.type_safe){val=`{".type":"date",".val":${val}}`}}else if(type===node_value_types_1.VALUE_TYPES.STRING){val=`"${escape(val)}"`}else if(type===node_value_types_1.VALUE_TYPES.ARRAY){val="[]"}else if(type===node_value_types_1.VALUE_TYPES.OBJECT){val="{}"}else if(type===node_value_types_1.VALUE_TYPES.BINARY){val=`"${escape(acebase_core_1.ascii85.encode(val))}"`;if(options.type_safe){val=`{".type":"binary",".val":${val}}`}}else if(type===node_value_types_1.VALUE_TYPES.REFERENCE){val=`"${val.path}"`;if(options.type_safe){val=`{".type":"reference",".val":${val}}`}}else if(type===node_value_types_1.VALUE_TYPES.BIGINT){val=`"${val}"`;if(options.type_safe){val=`{".type":"bigint",".val":${val}}`}}return val};let objStart="",objEnd="";const nodeInfo=await this.getNodeInfo(path);if(!nodeInfo.exists){return write("null")}else if(nodeInfo.type===node_value_types_1.VALUE_TYPES.OBJECT){objStart="{";objEnd="}"}else if(nodeInfo.type===node_value_types_1.VALUE_TYPES.ARRAY){objStart="[";objEnd="]"}else{const node=await this.getNode(path);const val=stringifyValue(nodeInfo.type,node.value);return write(val)}if(objStart){const p=write(objStart);if(p instanceof Promise){await p}}let output="",outputCount=0;const pending=[];await this.getChildren(path).next((childInfo=>{if(childInfo.address){pending.push(childInfo)}else{if(outputCount++>0){output+=","}if(typeof childInfo.key==="string"){output+=`"${childInfo.key}":`}output+=stringifyValue(childInfo.type,childInfo.value)}}));if(output){const p=write(output);if(p instanceof Promise){await p}}while(pending.length>0){const childInfo=pending.shift();let output=outputCount++>0?",":"";const key=typeof childInfo.index==="number"?childInfo.index:childInfo.key;if(typeof key==="string"){output+=`"${key}":`}if(output){const p=write(output);if(p instanceof Promise){await p}}await this.exportNode(acebase_core_1.PathInfo.getChildPath(path,key),write,options)}if(objEnd){const p=write(objEnd);if(p instanceof Promise){await p}}}async importNode(path,read,options={format:"json",method:"set"}){const chunkSize=256*1024;const maxQueueBytes=1024*1024;const state={data:"",index:0,offset:0,queue:[],queueStartByte:0,timesFlushed:0,get processedBytes(){return this.offset+this.index}};const readNextChunk=async(append=false)=>{let data=await read(chunkSize);if(data===null){if(state.data){throw new Error(`Unexpected EOF at index ${state.offset+state.data.length}`)}else{throw new Error("Unable to read data from stream")}}else if(typeof data==="object"){data=acebase_core_1.Utils.decodeString(data)}if(append){state.data+=data}else{state.offset+=state.data.length;state.data=data;state.index=0}};const readBytes=async length=>{let str="";if(state.index+length>=state.data.length){str=state.data.slice(state.index);length-=str.length;await readNextChunk()}str+=state.data.slice(state.index,state.index+length);state.index+=length;return str};const assertBytes=async length=>{if(state.index+length>state.data.length){await readNextChunk(true)}if(state.index+length>state.data.length){throw new Error("Not enough data available from stream")}};const consumeToken=async token=>{const str=await readBytes(token.length);if(str!==token){throw new Error(`Unexpected character "${str[0]}" at index ${state.offset+state.index}, expected "${token}"`)}};const consumeSpaces=async()=>{const spaces=[" ","\t","\r","\n"];while(true){if(state.index>=state.data.length){await readNextChunk()}if(spaces.includes(state.data[state.index])){state.index++}else{break}}};const peekBytes=async length=>{await assertBytes(length);const index=state.index;return state.data.slice(index,index+length)};const peekValueType=async()=>{await consumeSpaces();const ch=await peekBytes(1);switch(ch){case'"':return"string";case"{":return"object";case"[":return"array";case"n":return"null";case"u":return"undefined";case"t":case"f":return"boolean";default:{if(ch==="-"||ch>="0"&&ch<="9"){return"number"}throw new Error(`Unknown value at index ${state.offset+state.index}`)}}};const readString=async()=>{await consumeToken('"');let str="";let i=state.index;while(state.data[i]!=='"'||state.data[i-1]==="\\"){i++;if(i>=state.data.length){str+=state.data.slice(state.index);await readNextChunk();i=0}}str+=state.data.slice(state.index,i);state.index=i+1;return unescape(str)};const readBoolean=async()=>{if(state.data[state.index]==="t"){await consumeToken("true")}else if(state.data[state.index]==="f"){await consumeToken("false")}throw new Error(`Expected true or false at index ${state.offset+state.index}`)};const readNumber=async()=>{let str="";let i=state.index;const nrChars=["-","0","1","2","3","4","5","6","7","8","9",".","e","b","f","x","o","n"];while(nrChars.includes(state.data[i])){i++;if(i>=state.data.length){str+=state.data.slice(state.index);await readNextChunk();i=0}}str+=state.data.slice(state.index,i);state.index=i;const nr=str.endsWith("n")?BigInt(str.slice(0,-1)):str.includes(".")?parseFloat(str):parseInt(str);return nr};const readValue=async()=>{await consumeSpaces();const type=await peekValueType();const value=await(()=>{switch(type){case"string":return readString();case"object":return{};case"array":return[];case"number":return readNumber();case"null":return null;case"undefined":return undefined;case"boolean":return readBoolean()}})();return{type:type,value:value}};const unescape=str=>str.replace(/\\n/g,"\n").replace(/\\"/g,'"');const getTypeSafeValue=(path,obj)=>{const type=obj[".type"];let val=obj[".val"];switch(type){case"Date":case"date":{val=new Date(val);break}case"Buffer":case"binary":{val=unescape(val);if(val.startsWith("<~")){val=acebase_core_1.ascii85.decode(val)}else{throw new Error(`Import error: Unexpected encoding for value for value at path "/${path}"`)}break}case"PathReference":case"reference":{val=new acebase_core_1.PathReference(val);break}case"bigint":{val=BigInt(val);break}default:throw new Error(`Import error: Unsupported type "${type}" for value at path "/${path}"`)}return val};const context={acebase_import_id:acebase_core_1.ID.generate()};const childOptions={suppress_events:options.suppress_events,context:context};const enqueue=async(target,value)=>{state.queue.push({target:target,value:value});if(state.processedBytes>=state.queueStartByte+maxQueueBytes){const operations=state.queue.reduce(((updates,item)=>{if(item.target.path===path){updates.push(Object.assign({op:options.method==="set"&&state.timesFlushed===0?"set":"update"},item))}else{const parent=updates.find((other=>other.target.isParentOf(item.target)));if(parent){parent.value[item.target.key]=item.value}else{updates.push(Object.assign({op:options.method==="merge"?"update":"set"},item))}}return updates}),[]);state.queueStartByte=state.processedBytes;state.queue=[];state.timesFlushed++}if(target.path===path){}};const importObject=async target=>{await consumeToken("{");await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="}"){state.index++;return this.setNode(target.path,{},childOptions)}let childCount=0;let obj={};let flushedBefore=false;const flushObject=async()=>{let p;if(!flushedBefore){flushedBefore=true;p=this.setNode(target.path,obj,childOptions)}else if(Object.keys(obj).length>0){p=this.updateNode(target.path,obj,childOptions)}obj={};if(p){await p}};const promises=[];while(true){await consumeSpaces();const property=await readString();await consumeSpaces();await consumeToken(":");await consumeSpaces();const{value:value,type:type}=await readValue();obj[property]=value;childCount++;if(["object","array"].includes(type)){promises.push(flushObject());if(type==="object"){await importObject(target.child(property))}else{await importArray(target.child(property))}}await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="}"){state.index++;break}await consumeToken(",")}const isTypedValue=childCount===2&&".type"in obj&&".val"in obj;if(isTypedValue){const val=getTypeSafeValue(target.path,obj);return this.setNode(target.path,val,childOptions)}promises.push(flushObject());await Promise.all(promises)};const importArray=async target=>{await consumeToken("[");await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="]"){state.index++;return this.setNode(target.path,[],childOptions)}let flushedBefore=false;let arr=[];let updates={};const flushArray=async()=>{let p;if(!flushedBefore){flushedBefore=true;p=this.setNode(target.path,arr,childOptions);arr=null}else if(Object.keys(updates).length>0){p=this.updateNode(target.path,updates,childOptions);updates={}}if(p){await p}};const pushChild=(value,index)=>{if(flushedBefore){updates[index]=value}else{arr.push(value)}};const promises=[];let index=0;while(true){await consumeSpaces();const{value:value,type:type}=await readValue();pushChild(value,index);if(["object","array"].includes(type)){promises.push(flushArray());if(type==="object"){await importObject(target.child(index))}else{await importArray(target.child(index))}}await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="]"){state.index++;break}await consumeToken(",");index++}promises.push(flushArray());await Promise.all(promises)};const start=async()=>{const{value:value,type:type}=await readValue();if(["object","array"].includes(type)){const target=acebase_core_1.PathInfo.get(path);if(type==="object"){await importObject(target)}else{await importArray(target)}}else{await this.setNode(path,value,childOptions)}};return start()}setSchema(path,schema){if(typeof schema==="undefined"){throw new TypeError("schema argument must be given")}if(schema===null){const i=this._schemas.findIndex((s=>s.path===path));i>=0&&this._schemas.splice(i,1);return}const definition=new acebase_core_1.SchemaDefinition(schema);const item=this._schemas.find((s=>s.path===path));if(item){item.schema=definition}else{this._schemas.push({path:path,schema:definition});this._schemas.sort(((a,b)=>{const ka=acebase_core_1.PathInfo.getPathKeys(a.path),kb=acebase_core_1.PathInfo.getPathKeys(b.path);if(ka.length===kb.length){return 0}return ka.lengthitem.path===path));return item?{path:path,schema:item.schema.source,text:item.schema.text}:null}getSchemas(){return this._schemas.map((item=>({path:item.path,schema:item.schema.source,text:item.schema.text})))}validateSchema(path,value,options={updates:false}){let result={ok:true};const pathInfo=acebase_core_1.PathInfo.get(path);this._schemas.filter((s=>pathInfo.isOnTrailOf(s.path))).every((s=>{if(pathInfo.isDescendantOf(s.path)){const ancestorPath=acebase_core_1.PathInfo.fillVariables(s.path,path);const trailKeys=pathInfo.keys.slice(acebase_core_1.PathInfo.getPathKeys(s.path).length);result=s.schema.check(ancestorPath,value,options.updates,trailKeys);return result.ok}const trailKeys=acebase_core_1.PathInfo.getPathKeys(s.path).slice(pathInfo.keys.length);const partial=options.updates===true&&trailKeys.length===0;const check=(path,value,trailKeys)=>{if(trailKeys.length===0){return s.schema.check(path,value,partial)}else if(value===null){return{ok:true}}const key=trailKeys[0];if(typeof key==="string"&&(key==="*"||key[0]==="$")){if(value===null||typeof value!=="object"){return{ok:true}}let result;Object.keys(value).every((childKey=>{const childPath=acebase_core_1.PathInfo.getChildPath(path,childKey);const childValue=value[childKey];result=check(childPath,childValue,trailKeys.slice(1));return result.ok}));return result}else{const childPath=acebase_core_1.PathInfo.getChildPath(path,key);const childValue=value[key];return check(childPath,childValue,trailKeys.slice(1))}};result=check(path,value,trailKeys);return result.ok}));return result}}exports.Storage=Storage},{"../data-index":39,"../ipc":32,"../node-errors":35,"../node-info":36,"../node-value-types":38,"../promise-fs":40,"./indexes":52,"acebase-core":12}],52:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createIndex=void 0;var create_index_1=require("./create-index");Object.defineProperty(exports,"createIndex",{enumerable:true,get:function(){return create_index_1.createIndex}})},{"./create-index":42}],53:[function(require,module,exports){},{}]},{},[31])(31)})); \ No newline at end of file +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.acebase=f()}})((function(){var define,module,exports;return function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,(function(r){var n=e[i][1][r];return o(n||r)}),p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i{this._ready=true}))}async ready(callback){if(!this._ready){await new Promise((resolve=>this.on("ready",resolve)))}callback===null||callback===void 0?void 0:callback()}get isReady(){return this._ready}setObservable(ObservableImpl){(0,optional_observable_1.setObservable)(ObservableImpl)}ref(path){return new data_reference_1.DataReference(this,path)}get root(){return this.ref("")}query(path){const ref=new data_reference_1.DataReference(this,path);return new data_reference_1.DataReferenceQuery(ref)}get indexes(){return{get:()=>this.api.getIndexes(),create:(path,key,options)=>this.api.createIndex(path,key,options),delete:async filePath=>this.api.deleteIndex(filePath)}}get schema(){return{get:path=>this.api.getSchema(path),set:(path,schema)=>this.api.setSchema(path,schema),all:()=>this.api.getSchemas(),check:(path,value,isUpdate)=>this.api.validateSchema(path,value,isUpdate)}}}exports.AceBaseBase=AceBaseBase},{"./data-reference":8,"./debug":10,"./optional-observable":14,"./simple-colors":21,"./simple-event-emitter":22,"./type-mappings":25}],2:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Api=void 0;class NotImplementedError extends Error{constructor(name){super(`${name} is not implemented`)}}class Api{constructor(){}stats(options){throw new NotImplementedError("stats")}subscribe(path,event,callback,settings){throw new NotImplementedError("subscribe")}unsubscribe(path,event,callback){throw new NotImplementedError("unsubscribe")}update(path,updates,options){throw new NotImplementedError("update")}set(path,value,options){throw new NotImplementedError("set")}get(path,options){throw new NotImplementedError("get")}transaction(path,callback,options){throw new NotImplementedError("transaction")}exists(path){throw new NotImplementedError("exists")}query(path,query,options){throw new NotImplementedError("query")}reflect(path,type,args){throw new NotImplementedError("reflect")}export(path,write,options){throw new NotImplementedError("export")}import(path,read,options){throw new NotImplementedError("import")}createIndex(path,key,options){throw new NotImplementedError("createIndex")}getIndexes(){throw new NotImplementedError("getIndexes")}deleteIndex(filePath){throw new NotImplementedError("deleteIndex")}setSchema(path,schema){throw new NotImplementedError("setSchema")}getSchema(path){throw new NotImplementedError("getSchema")}getSchemas(){throw new NotImplementedError("getSchemas")}validateSchema(path,value,isUpdate){throw new NotImplementedError("validateSchema")}getMutations(filter){throw new NotImplementedError("getMutations")}getChanges(filter){throw new NotImplementedError("getChanges")}}exports.Api=Api},{}],3:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ascii85=void 0;function c(input,length,result){const b=[0,0,0,0,0];for(let i=0;i";return ret}exports.ascii85={encode:function(arr){if(arr instanceof ArrayBuffer){arr=new Uint8Array(arr,0,arr.byteLength)}return encode(arr)},decode:function(input){if(!input.startsWith("<~")||!input.endsWith("~>")){throw new Error("Invalid input string")}input=input.substr(2,input.length-4);const n=input.length,r=[],b=[0,0,0,0,0];let t,x,y,d;for(let i=0;i>>=8;y=t&255;t>>>=8;r.push(t>>>8,t&255,y,x);for(let j=d;j<5;++j,r.pop());i+=4}const data=new Uint8Array(r);return data.buffer.slice(data.byteOffset,data.byteOffset+data.byteLength)}}},{}],4:[function(require,module,exports){"use strict";var _a,_b;Object.defineProperty(exports,"__esModule",{value:true});const pad_1=require("../pad");const env=typeof window==="object"?window:self,globalCount=Object.keys(env).length,mimeTypesLength=(_b=(_a=navigator.mimeTypes)===null||_a===void 0?void 0:_a.length)!==null&&_b!==void 0?_b:0,clientId=(0,pad_1.default)((mimeTypesLength+navigator.userAgent.length).toString(36)+globalCount.toString(36),4);function fingerprint(){return clientId}exports.default=fingerprint},{"../pad":6}],5:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});const fingerprint_1=require("./fingerprint");const pad_1=require("./pad");let c=0;const blockSize=4,base=36,discreteValues=Math.pow(base,blockSize);function randomBlock(){return(0,pad_1.default)((Math.random()*discreteValues<<0).toString(base),blockSize)}function safeCounter(){c=ct2[i]===key))}static isAncestor(ancestor,other){return ancestor.lengthother[i]===key))}static isDescendant(descendant,other){return descendant.length>other.length&&other.every(((key,i)=>descendant[i]===key))}}const isProxy=Symbol("isProxy");class LiveDataProxy{static async create(ref,options){var _a;ref=new data_reference_1.DataReference(ref.db,ref.path);let cache,loaded=false;let latestCursor=options===null||options===void 0?void 0:options.cursor;let proxy;const proxyId=id_1.ID.generate();const clientSubscriptions=[];const clientEventEmitter=new simple_event_emitter_1.SimpleEventEmitter;clientEventEmitter.on("cursor",(cursor=>latestCursor=cursor));clientEventEmitter.on("error",(err=>{console.error(err.message,err.details)}));const applyChange=(keys,newValue)=>{if(keys.length===0){cache=newValue;return true}const allowCreation=false;if(allowCreation){cache=typeof keys[0]==="number"?[]:{}}let target=cache;const trailKeys=keys.slice();while(trailKeys.length>1){const key=trailKeys.shift();if(!(key in target)){if(allowCreation){target[key]=typeof key==="number"?[]:{}}else{return false}}target=target[key]}const prop=trailKeys.shift();if(newValue===null){target instanceof Array?target.splice(prop,1):delete target[prop]}else{target[prop]=newValue}return true};const syncFallback=async()=>{if(!loaded){return}await reload()};const subscription=ref.on("mutations",{syncFallback:syncFallback}).subscribe((async snap=>{var _a;if(!loaded){return}const context=snap.context();const isRemote=((_a=context.acebase_proxy)===null||_a===void 0?void 0:_a.id)!==proxyId;if(!isRemote){return}const mutations=snap.val(false);const proceed=mutations.every((mutation=>{if(!applyChange(mutation.target,mutation.val)){return false}const changeRef=mutation.target.reduce(((ref,key)=>ref.child(key)),ref);const changeSnap=new data_snapshot_1.DataSnapshot(changeRef,mutation.val,false,mutation.prev,snap.context());clientEventEmitter.emit("mutation",{snapshot:changeSnap,isRemote:isRemote});return true}));if(proceed){clientEventEmitter.emit("cursor",context.acebase_cursor);localMutationsEmitter.emit("mutations",{origin:"remote",snap:snap})}else{console.warn(`Cached value of live data proxy on "${ref.path}" appears outdated, will be reloaded`);await reload()}}));let processPromise=Promise.resolve();const mutationQueue=[];const transactions=[];const pushLocalMutations=async()=>{const mutations=[];for(let i=0,m=mutationQueue[0];iRelativeNodeTarget.areEqual(t.target,m.target)||RelativeNodeTarget.isAncestor(t.target,m.target)))){mutationQueue.splice(i,1);i--;mutations.push(m)}}if(mutations.length===0){return}mutations.forEach((mutation=>{mutation.value=(0,utils_1.cloneObject)(getTargetValue(cache,mutation.target))}));process_1.default.nextTick((()=>{const context={acebase_proxy:{id:proxyId,source:"update"}};mutations.forEach((mutation=>{const mutationRef=mutation.target.reduce(((ref,key)=>ref.child(key)),ref);const mutationSnap=new data_snapshot_1.DataSnapshot(mutationRef,mutation.value,false,mutation.previous,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false})}));const snap=new data_snapshot_1.MutationsDataSnapshot(ref,mutations.map((m=>({target:m.target,val:m.value,prev:m.previous}))),context);localMutationsEmitter.emit("mutations",{origin:"local",snap:snap})}));processPromise=mutations.reduce(((mutations,m,i,arr)=>{if(!arr.some((other=>RelativeNodeTarget.isAncestor(other.target,m.target)))){mutations.push(m)}return mutations}),[]).reduce(((updates,m)=>{const target=m.target;if(target.length===0){updates.push({ref:ref,target:target,value:cache,type:"set",previous:m.previous})}else{const parentTarget=target.slice(0,-1);const key=target.slice(-1)[0];const parentRef=parentTarget.reduce(((ref,key)=>ref.child(key)),ref);const parentUpdate=updates.find((update=>update.ref.path===parentRef.path));const cacheValue=getTargetValue(cache,target);const prevValue=m.previous;if(parentUpdate){parentUpdate.value[key]=cacheValue;parentUpdate.previous[key]=prevValue}else{updates.push({ref:parentRef,target:parentTarget,value:{[key]:cacheValue},type:"update",previous:{[key]:prevValue}})}}return updates}),[]).reduce((async(promise,update)=>{const context={acebase_proxy:{id:proxyId,source:update.type}};await promise;await update.ref.context(context)[update.type](update.value).catch((err=>{clientEventEmitter.emit("error",{source:"update",message:`Error processing update of "/${ref.path}"`,details:err});const context={acebase_proxy:{id:proxyId,source:"update-rollback"}};const mutations=[];if(update.type==="set"){setTargetValue(cache,update.target,update.previous);const mutationSnap=new data_snapshot_1.DataSnapshot(update.ref,update.previous,false,update.value,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false});mutations.push({target:update.target,val:update.previous,prev:update.value})}else{Object.keys(update.previous).forEach((key=>{setTargetValue(cache,update.target.concat(key),update.previous[key]);const mutationSnap=new data_snapshot_1.DataSnapshot(update.ref.child(key),update.previous[key],false,update.value[key],context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false});mutations.push({target:update.target.concat(key),val:update.previous[key],prev:update.value[key]})}))}mutations.forEach((m=>{const mutationRef=m.target.reduce(((ref,key)=>ref.child(key)),ref);const mutationSnap=new data_snapshot_1.DataSnapshot(mutationRef,m.val,false,m.prev,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false})}));const snap=new data_snapshot_1.MutationsDataSnapshot(update.ref,mutations,context);localMutationsEmitter.emit("mutations",{origin:"local",snap:snap})}));if(update.ref.cursor){clientEventEmitter.emit("cursor",update.ref.cursor)}}),processPromise);await processPromise};let syncInProgress=false;const syncPromises=[];const syncCompleted=()=>{let resolve;const promise=new Promise((rs=>resolve=rs));syncPromises.push({resolve:resolve});return promise};let processQueueTimeout=null;const scheduleSync=()=>{if(!processQueueTimeout){processQueueTimeout=setTimeout((async()=>{syncInProgress=true;processQueueTimeout=null;await pushLocalMutations();syncInProgress=false;syncPromises.splice(0).forEach((p=>p.resolve()))}),0)}};const flagOverwritten=target=>{if(!mutationQueue.find((m=>RelativeNodeTarget.areEqual(m.target,target)))){mutationQueue.push({target:target,previous:(0,utils_1.cloneObject)(getTargetValue(cache,target))})}scheduleSync()};const localMutationsEmitter=new simple_event_emitter_1.SimpleEventEmitter;const addOnChangeHandler=(target,callback)=>{const isObject=val=>val!==null&&typeof val==="object";const mutationsHandler=async details=>{var _a;const{snap:snap,origin:origin}=details;const context=snap.context();const causedByOurProxy=((_a=context.acebase_proxy)===null||_a===void 0?void 0:_a.id)===proxyId;if(details.origin==="remote"&&causedByOurProxy){console.error("DEV ISSUE: mutationsHandler was called from remote event originating from our own proxy");return}const mutations=snap.val(false).filter((mutation=>mutation.target.slice(0,target.length).every(((key,i)=>target[i]===key))));if(mutations.length===0){return}let newValue,previousValue;const singleMutation=mutations.find((m=>m.target.length<=target.length));if(singleMutation){const trailKeys=target.slice(singleMutation.target.length);newValue=trailKeys.reduce(((val,key)=>!isObject(val)||!(key in val)?null:val[key]),singleMutation.val);previousValue=trailKeys.reduce(((val,key)=>!isObject(val)||!(key in val)?null:val[key]),singleMutation.prev)}else{const currentValue=getTargetValue(cache,target);newValue=(0,utils_1.cloneObject)(currentValue);previousValue=(0,utils_1.cloneObject)(newValue);mutations.forEach((mutation=>{const trailKeys=mutation.target.slice(target.length);for(let i=0,val=newValue,prev=previousValue;i{let keepSubscription=true;try{keepSubscription=false!==callback(Object.freeze(newValue),Object.freeze(previousValue),!causedByOurProxy,context)}catch(err){clientEventEmitter.emit("error",{source:origin==="remote"?"remote_update":"local_update",message:"Error running subscription callback",details:err})}if(keepSubscription===false){stop()}}))};localMutationsEmitter.on("mutations",mutationsHandler);const stop=()=>{localMutationsEmitter.off("mutations").off("mutations",mutationsHandler);clientSubscriptions.splice(clientSubscriptions.findIndex((cs=>cs.stop===stop)),1)};clientSubscriptions.push({target:target,stop:stop});return{stop:stop}};const handleFlag=(flag,target,args)=>{if(flag==="write"){return flagOverwritten(target)}else if(flag==="onChange"){return addOnChangeHandler(target,args.callback)}else if(flag==="subscribe"||flag==="observe"){const subscribe=subscriber=>{const currentValue=getTargetValue(cache,target);subscriber.next(currentValue);const subscription=addOnChangeHandler(target,(value=>{subscriber.next(value)}));return function unsubscribe(){subscription.stop()}};if(flag==="subscribe"){return subscribe}const Observable=(0,optional_observable_1.getObservable)();return new Observable(subscribe)}else if(flag==="transaction"){const hasConflictingTransaction=transactions.some((t=>RelativeNodeTarget.areEqual(target,t.target)||RelativeNodeTarget.isAncestor(target,t.target)||RelativeNodeTarget.isDescendant(target,t.target)));if(hasConflictingTransaction){return Promise.reject(new Error("Cannot start transaction because it conflicts with another transaction"))}return new Promise((async resolve=>{const hasPendingMutations=mutationQueue.some((m=>RelativeNodeTarget.areEqual(target,m.target)||RelativeNodeTarget.isAncestor(target,m.target)));if(hasPendingMutations){if(!syncInProgress){scheduleSync()}await syncCompleted()}const tx={target:target,status:"started",transaction:null};transactions.push(tx);tx.transaction={get status(){return tx.status},get completed(){return tx.status!=="started"},get mutations(){return mutationQueue.filter((m=>RelativeNodeTarget.areEqual(tx.target,m.target)||RelativeNodeTarget.isAncestor(tx.target,m.target)))},get hasMutations(){return this.mutations.length>0},async commit(){if(this.completed){throw new Error(`Transaction has completed already (status '${tx.status}')`)}tx.status="finished";transactions.splice(transactions.indexOf(tx),1);if(syncInProgress){await syncCompleted()}scheduleSync();await syncCompleted()},rollback(){if(this.completed){throw new Error(`Transaction has completed already (status '${tx.status}')`)}tx.status="canceled";const mutations=[];for(let i=0;i{if(m.target.length===0){cache=m.previous}else{setTargetValue(cache,m.target,m.previous)}}));transactions.splice(transactions.indexOf(tx),1)}};resolve(tx.transaction)}))}};const snap=await ref.get({cache_mode:"allow",cache_cursor:options===null||options===void 0?void 0:options.cursor});if(snap.context().acebase_origin!=="cache"){clientEventEmitter.emit("cursor",(_a=ref.cursor)!==null&&_a!==void 0?_a:null)}loaded=true;cache=snap.val();if(cache===null&&typeof(options===null||options===void 0?void 0:options.defaultValue)!=="undefined"){cache=options.defaultValue;const context={acebase_proxy:{id:proxyId,source:"default"}};await ref.context(context).set(cache)}proxy=createProxy({root:{ref:ref,get cache(){return cache}},target:[],id:proxyId,flag:handleFlag});const assertProxyAvailable=()=>{if(proxy===null){throw new Error("Proxy was destroyed")}};const reload=async()=>{assertProxyAvailable();mutationQueue.splice(0);const snap=await ref.get({allow_cache:false});const oldVal=cache,newVal=snap.val();cache=newVal;const mutations=(0,utils_1.getMutations)(oldVal,newVal);if(mutations.length===0){return}const context=snap.context();context.acebase_proxy={id:proxyId,source:"reload"};mutations.forEach((m=>{const targetRef=getTargetRef(ref,m.target);const newSnap=new data_snapshot_1.DataSnapshot(targetRef,m.val,m.val===null,m.prev,context);clientEventEmitter.emit("mutation",{snapshot:newSnap,isRemote:true})}));const mutationsSnap=new data_snapshot_1.MutationsDataSnapshot(ref,mutations,context);localMutationsEmitter.emit("mutations",{origin:"local",snap:mutationsSnap})};return{async destroy(){await processPromise;const promises=[subscription.stop(),...clientSubscriptions.map((cs=>cs.stop()))];await Promise.all(promises);["cursor","mutation","error"].forEach((event=>clientEventEmitter.off(event)));cache=null;proxy=null},stop(){this.destroy()},get value(){assertProxyAvailable();return proxy},get hasValue(){assertProxyAvailable();return cache!==null},set value(val){assertProxyAvailable();if(val!==null&&typeof val==="object"&&val[isProxy]){val=val.valueOf()}flagOverwritten([]);cache=val},get ref(){return ref},get cursor(){return latestCursor},reload:reload,onMutation(callback){assertProxyAvailable();clientEventEmitter.off("mutation");clientEventEmitter.on("mutation",(({snapshot:snapshot,isRemote:isRemote})=>{try{callback(snapshot,isRemote)}catch(err){clientEventEmitter.emit("error",{source:"mutation_callback",message:"Error in dataproxy onMutation callback",details:err})}}))},onError(callback){assertProxyAvailable();clientEventEmitter.off("error");clientEventEmitter.on("error",(err=>{try{callback(err)}catch(err){console.error(`Error in dataproxy onError callback: ${err.message}`)}}))},on(event,callback){clientEventEmitter.on(event,callback)},off(event,callback){clientEventEmitter.off(event,callback)}}}}exports.LiveDataProxy=LiveDataProxy;function getTargetValue(obj,target){let val=obj;for(const key of target){val=typeof val==="object"&&val!==null&&key in val?val[key]:null}return val}function setTargetValue(obj,target,value){if(target.length===0){throw new Error("Cannot update root target, caller must do that itself!")}const targetObject=target.slice(0,-1).reduce(((obj,key)=>obj[key]),obj);const prop=target.slice(-1)[0];if(value===null||typeof value==="undefined"){targetObject instanceof Array?targetObject.splice(prop,1):delete targetObject[prop]}else{targetObject[prop]=value}}function getTargetRef(ref,target){const path=path_info_1.PathInfo.get(ref.path).childPath(target);return new data_reference_1.DataReference(ref.db,path)}function createProxy(context){const targetRef=getTargetRef(context.root.ref,context.target);const childProxies=[];const handler={get(target,prop,receiver){target=getTargetValue(context.root.cache,context.target);if(typeof prop==="symbol"){if(prop.toString()===Symbol.iterator.toString()){prop="values"}else if(prop.toString()===isProxy.toString()){return true}else{return Reflect.get(target,prop,receiver)}}if(prop==="valueOf"){return function valueOf(){return target}}if(target===null||typeof target!=="object"){throw new Error(`Cannot read property "${prop}" of ${target}. Value of path "/${targetRef.path}" is not an object (anymore)`)}if(target instanceof Array&&typeof prop==="string"&&/^[0-9]+$/.test(prop)){prop=parseInt(prop)}const value=target[prop];if(value===null){delete target[prop];return}const childProxy=childProxies.find((proxy=>proxy.prop===prop));if(childProxy){if(childProxy.typeof===typeof value){return childProxy.value}childProxies.splice(childProxies.indexOf(childProxy),1)}const proxifyChildValue=prop=>{const value=target[prop];const childProxy=childProxies.find((child=>child.prop===prop));if(childProxy){if(childProxy.typeof===typeof value){return childProxy.value}childProxies.splice(childProxies.indexOf(childProxy),1)}if(typeof value!=="object"){return value}const newChildProxy=createProxy({root:context.root,target:context.target.concat(prop),id:context.id,flag:context.flag});childProxies.push({typeof:typeof value,prop:prop,value:newChildProxy});return newChildProxy};const unproxyValue=value=>value!==null&&typeof value==="object"&&value[isProxy]?value.getTarget():value;if(["string","number","boolean"].includes(typeof value)||value instanceof Date||value instanceof path_reference_1.PathReference||value instanceof ArrayBuffer||typeof value==="object"&&"buffer"in value){return value}const isArray=target instanceof Array;if(prop==="toString"){return function toString(){return`[LiveDataProxy for "${targetRef.path}"]`}}if(typeof value==="undefined"){if(prop==="push"){return function push(item){const childRef=targetRef.push();context.flag("write",context.target.concat(childRef.key));target[childRef.key]=item;return childRef.key}}if(prop==="getTarget"){return function(warn=true){warn&&console.warn("Use getTarget with caution - any changes will not be synchronized!");return target}}if(prop==="getRef"){return function getRef(){const ref=getTargetRef(context.root.ref,context.target);return ref}}if(prop==="forEach"){return function forEach(callback){const keys=Object.keys(target);let stop=false;for(let i=0;!stop&&iproxifyChildValue(key)));if(sortFn){arr.sort(sortFn)}return arr}}if(prop==="onChanged"){return function onChanged(callback){return context.flag("onChange",context.target,{callback:callback})}}if(prop==="subscribe"){return function subscribe(){return context.flag("subscribe",context.target)}}if(prop==="getObservable"){return function getObservable(){return context.flag("observe",context.target)}}if(prop==="getOrderedCollection"){return function getOrderedCollection(orderProperty,orderIncrement){return new OrderedCollectionProxy(this,orderProperty,orderIncrement)}}if(prop==="startTransaction"){return function startTransaction(){return context.flag("transaction",context.target)}}if(prop==="remove"&&!isArray){return function remove(){if(context.target.length===0){throw new Error("Can't remove proxy root value")}const parent=getTargetValue(context.root.cache,context.target.slice(0,-1));const key=context.target.slice(-1)[0];context.flag("write",context.target);delete parent[key]}}return}else if(typeof value==="function"){if(isArray){const writeArray=action=>{context.flag("write",context.target);return action()};const cleanArrayValues=values=>values.map((value=>{value=unproxyValue(value);removeVoidProperties(value);return value}));if(prop==="push"){return function push(...items){items=cleanArrayValues(items);return writeArray((()=>target.push(...items)))}}if(prop==="pop"){return function pop(){return writeArray((()=>target.pop()))}}if(prop==="splice"){return function splice(start,deleteCount,...items){items=cleanArrayValues(items);return writeArray((()=>target.splice(start,deleteCount,...items)))}}if(prop==="shift"){return function shift(){return writeArray((()=>target.shift()))}}if(prop==="unshift"){return function unshift(...items){items=cleanArrayValues(items);return writeArray((()=>target.unshift(...items)))}}if(prop==="sort"){return function sort(compareFn){return writeArray((()=>target.sort(compareFn)))}}if(prop==="reverse"){return function reverse(){return writeArray((()=>target.reverse()))}}if(["indexOf","lastIndexOf"].includes(prop)){return function indexOf(item,start){if(item!==null&&typeof item==="object"&&item[isProxy]){item=item.getTarget(false)}return target[prop](item,start)}}if(["forEach","every","some","filter","map"].includes(prop)){return function iterate(callback){return target[prop](((value,i)=>callback(proxifyChildValue(i),i,proxy)))}}if(["reduce","reduceRight"].includes(prop)){return function reduce(callback,initialValue){return target[prop](((prev,value,i)=>callback(prev,proxifyChildValue(i),i,proxy)),initialValue)}}if(["find","findIndex"].includes(prop)){return function find(callback){let value=target[prop](((value,i)=>callback(proxifyChildValue(i),i,proxy)));if(prop==="find"&&value){const index=target.indexOf(value);value=proxifyChildValue(index)}return value}}if(["values","entries","keys"].includes(prop)){return function*generator(){for(let i=0;itypeof key==="number"))){context.flag("write",context.target.slice(0,context.target.findIndex((key=>typeof key==="number"))))}else if(target instanceof Array){context.flag("write",context.target)}else{context.flag("write",context.target.concat(prop))}if(value===null){delete target[prop]}else{removeVoidProperties(value);target[prop]=value}return true},deleteProperty(target,prop){target=getTargetValue(context.root.cache,context.target);if(target===null){throw new Error(`Cannot delete property ${prop.toString()} of null`)}if(typeof prop==="symbol"){return Reflect.deleteProperty(target,prop)}if(!(prop in target)){return true}context.flag("write",context.target.concat(prop));delete target[prop];return true},ownKeys(target){target=getTargetValue(context.root.cache,context.target);return Reflect.ownKeys(target)},has(target,prop){target=getTargetValue(context.root.cache,context.target);return Reflect.has(target,prop)},getOwnPropertyDescriptor(target,prop){target=getTargetValue(context.root.cache,context.target);const descriptor=Reflect.getOwnPropertyDescriptor(target,prop);if(descriptor){descriptor.configurable=true}return descriptor},getPrototypeOf(target){target=getTargetValue(context.root.cache,context.target);return Reflect.getPrototypeOf(target)}};const proxy=new Proxy({},handler);return proxy}function removeVoidProperties(obj){if(typeof obj!=="object"){return}Object.keys(obj).forEach((key=>{const val=obj[key];if(val===null||typeof val==="undefined"){delete obj[key]}else if(typeof val==="object"){removeVoidProperties(val)}}))}function proxyAccess(proxiedValue){if(typeof proxiedValue!=="object"||!proxiedValue[isProxy]){throw new Error("Given value is not proxied. Make sure you are referencing the value through the live data proxy.")}return proxiedValue}exports.proxyAccess=proxyAccess;class OrderedCollectionProxy{constructor(collection,orderProperty="order",orderIncrement=10){this.collection=collection;this.orderProperty=orderProperty;this.orderIncrement=orderIncrement;if(typeof collection!=="object"||!collection[isProxy]){throw new Error("Collection is not proxied")}if(collection.valueOf()instanceof Array){throw new Error("Collection is an array, not an object collection")}if(!Object.keys(collection).every((key=>typeof collection[key]==="object"))){throw new Error("Collection has non-object children")}const ok=Object.keys(collection).every((key=>typeof collection[key][orderProperty]==="number"));if(!ok){const keys=Object.keys(collection);for(let i=0;i{const subscription=this.getObservable().subscribe((()=>{const newArray=this.getArray();subscriber.next(newArray)}));return function unsubscribe(){subscription.unsubscribe()}}))}getArray(){const arr=proxyAccess(this.collection).toArray(((a,b)=>a[this.orderProperty]-b[this.orderProperty]));return arr}add(newItem,index,from){const item=newItem;const arr=this.getArray();let minOrder=Number.POSITIVE_INFINITY,maxOrder=Number.NEGATIVE_INFINITY;for(let i=0;ithis.collection[key]===item));if(!fromKey){throw new Error("item not found in collection")}if(from===index){return{key:fromKey,index:index}}if(Math.abs(from-index)===1){const otherItem=arr[index];const otherOrder=otherItem[this.orderProperty];otherItem[this.orderProperty]=item[this.orderProperty];item[this.orderProperty]=otherOrder;return{key:fromKey,index:index}}else{arr.splice(from,1)}}if(typeof index!=="number"||index>=arr.length){index=arr.length;item[this.orderProperty]=arr.length==0?0:maxOrder+this.orderIncrement}else if(index===0){item[this.orderProperty]=arr.length==0?0:minOrder-this.orderIncrement}else{const orders=arr.map((item=>item[this.orderProperty]));const gap=orders[index]-orders[index-1];if(gap>1){item[this.orderProperty]=orders[index]-Math.floor(gap/2)}else{arr.splice(index,0,item);for(let i=0;ithis.collection[key]===item));if(!key){throw new Error("Cannot find target object to delete")}this.collection[key]=null;return{key:key,index:index}}move(fromIndex,toIndex){const arr=this.getArray();return this.add(arr[fromIndex],toIndex,fromIndex)}sort(sortFn){const arr=this.getArray();arr.sort(sortFn);for(let i=0;i{newContext[key]=context[key]}))}this[_private].context=newContext;return this}else if(typeof context==="undefined"){console.warn("Use snap.context() instead of snap.ref.context() to get updating context in event callbacks");return currentContext}else{throw new Error("Invalid context argument")}}get cursor(){return this[_private].cursor}set cursor(value){var _a;this[_private].cursor=value;(_a=this.onCursor)===null||_a===void 0?void 0:_a.call(this,value)}get path(){return this[_private].path}get key(){const key=this[_private].key;return typeof key==="number"?`[${key}]`:key}get index(){const key=this[_private].key;if(typeof key!=="number"){throw new Error(`"${key}" is not a number`)}return key}get parent(){const currentPath=path_info_1.PathInfo.fillVariables2(this.path,this.vars);const info=path_info_1.PathInfo.get(currentPath);if(info.parentPath===null){return null}return new DataReference(this.db,info.parentPath).context(this[_private].context)}get vars(){return this[_private].vars}child(childPath){childPath=typeof childPath==="number"?childPath:childPath.replace(/^\/|\/$/g,"");const currentPath=path_info_1.PathInfo.fillVariables2(this.path,this.vars);const targetPath=path_info_1.PathInfo.getChildPath(currentPath,childPath);return new DataReference(this.db,targetPath).context(this[_private].context)}async set(value,onComplete){try{if(this.isWildcardPath){throw new Error(`Cannot set the value of wildcard path "/${this.path}"`)}if(this.parent===null){throw new Error("Cannot set the root object. Use update, or set individual child properties")}if(typeof value==="undefined"){throw new TypeError(`Cannot store undefined value in "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}value=this.db.types.serialize(this.path,value);const{cursor:cursor}=await this.db.api.set(this.path,value,{context:this[_private].context});this.cursor=cursor;if(typeof onComplete==="function"){try{onComplete(null,this)}catch(err){console.error("Error in onComplete callback:",err)}}}catch(err){if(typeof onComplete==="function"){try{onComplete(err,this)}catch(err){console.error("Error in onComplete callback:",err)}}else{throw err}}return this}async update(updates,onComplete){try{if(this.isWildcardPath){throw new Error(`Cannot update the value of wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}if(typeof updates!=="object"||updates instanceof Array||updates instanceof ArrayBuffer||updates instanceof Date){await this.set(updates)}else if(Object.keys(updates).length===0){console.warn(`update called on path "/${this.path}", but there is nothing to update`)}else{updates=this.db.types.serialize(this.path,updates);const{cursor:cursor}=await this.db.api.update(this.path,updates,{context:this[_private].context});this.cursor=cursor}if(typeof onComplete==="function"){try{onComplete(null,this)}catch(err){console.error("Error in onComplete callback:",err)}}}catch(err){if(typeof onComplete==="function"){try{onComplete(err,this)}catch(err){console.error("Error in onComplete callback:",err)}}else{throw err}}return this}async transaction(callback){if(this.isWildcardPath){throw new Error(`Cannot start a transaction on wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}let throwError;const cb=currentValue=>{currentValue=this.db.types.deserialize(this.path,currentValue);const snap=new data_snapshot_1.DataSnapshot(this,currentValue);let newValue;try{newValue=callback(snap)}catch(err){throwError=err;return}if(newValue instanceof Promise){return newValue.then((val=>this.db.types.serialize(this.path,val))).catch((err=>{throwError=err;return}))}else{return this.db.types.serialize(this.path,newValue)}};const{cursor:cursor}=await this.db.api.transaction(this.path,cb,{context:this[_private].context});this.cursor=cursor;if(throwError){throw throwError}return this}on(event,callback,cancelCallback){if(this.path===""&&["value","child_changed"].includes(event)){console.warn("WARNING: Listening for value and child_changed events on the root node is a bad practice. These events require loading of all data (value event), or potentially lots of data (child_changed event) each time they are fired")}let eventPublisher=null;const eventStream=new subscription_1.EventStream((publisher=>{eventPublisher=publisher}));const cb={event:event,stream:eventStream,userCallback:typeof callback==="function"&&callback,ourCallback:(err,path,newValue,oldValue,eventContext)=>{if(err){this.db.debug.error(`Error getting data for event ${event} on path "${path}"`,err);return}const ref=this.db.ref(path);ref[_private].vars=path_info_1.PathInfo.extractVariables(this.path,path);let callbackObject;if(event.startsWith("notify_")){callbackObject=ref.context(eventContext||{})}else{const values={previous:this.db.types.deserialize(path,oldValue),current:this.db.types.deserialize(path,newValue)};if(event==="child_removed"){callbackObject=new data_snapshot_1.DataSnapshot(ref,values.previous,true,values.previous,eventContext)}else if(event==="mutations"){callbackObject=new data_snapshot_1.MutationsDataSnapshot(ref,values.current,eventContext)}else{const isRemoved=event==="mutated"&&values.current===null;callbackObject=new data_snapshot_1.DataSnapshot(ref,values.current,isRemoved,values.previous,eventContext)}}eventPublisher.publish(callbackObject);if(eventContext===null||eventContext===void 0?void 0:eventContext.acebase_cursor){this.cursor=eventContext.acebase_cursor}}};this[_private].callbacks.push(cb);const subscribe=()=>{if(typeof callback==="function"){eventStream.subscribe(callback,((activated,cancelReason)=>{if(!activated){cancelCallback&&cancelCallback(cancelReason)}}))}const advancedOptions=typeof callback==="object"?callback:{newOnly:!callback};if(typeof advancedOptions.newOnly!=="boolean"){advancedOptions.newOnly=false}if(this.isWildcardPath){advancedOptions.newOnly=true}const cancelSubscription=err=>{const callbacks=this[_private].callbacks;callbacks.splice(callbacks.indexOf(cb),1);this.db.api.unsubscribe(this.path,event,cb.ourCallback);this.db.debug.error(`Subscription "${event}" on path "/${this.path}" canceled because of an error: ${err.message}`);eventPublisher.cancel(err.message)};const authorized=this.db.api.subscribe(this.path,event,cb.ourCallback,{newOnly:advancedOptions.newOnly,cancelCallback:cancelSubscription,syncFallback:advancedOptions.syncFallback});const allSubscriptionsStoppedCallback=()=>{const callbacks=this[_private].callbacks;callbacks.splice(callbacks.indexOf(cb),1);return this.db.api.unsubscribe(this.path,event,cb.ourCallback)};if(authorized instanceof Promise){authorized.then((()=>{eventPublisher.start(allSubscriptionsStoppedCallback)})).catch(cancelSubscription)}else{eventPublisher.start(allSubscriptionsStoppedCallback)}if(!advancedOptions.newOnly){if(event==="value"){this.get((snap=>{eventPublisher.publish(snap)}))}else if(event==="child_added"){this.get((snap=>{const val=snap.val();if(val===null||typeof val!=="object"){return}Object.keys(val).forEach((key=>{const childSnap=new data_snapshot_1.DataSnapshot(this.child(key),val[key]);eventPublisher.publish(childSnap)}))}))}else if(event==="notify_child_added"){const step=100,limit=step;let skip=0;const more=async()=>{const children=await this.db.api.reflect(this.path,"children",{limit:limit,skip:skip});children.list.forEach((child=>{const childRef=this.child(child.key);eventPublisher.publish(childRef)}));if(children.more){skip+=step;more()}};more()}}};if(this.db.isReady){subscribe()}else{this.db.ready(subscribe)}return eventStream}off(event,callback){const subscriptions=this[_private].callbacks;const stopSubs=subscriptions.filter((sub=>(!event||sub.event===event)&&(!callback||sub.userCallback===callback)));if(stopSubs.length===0){this.db.debug.warn(`Can't find event subscriptions to stop (path: "${this.path}", event: ${event||"(any)"}, callback: ${callback})`)}stopSubs.forEach((sub=>{sub.stream.stop()}));return this}get(optionsOrCallback,callback){if(!this.db.isReady){const promise=this.db.ready().then((()=>this.get(optionsOrCallback,callback)));return typeof optionsOrCallback!=="function"&&typeof callback!=="function"?promise:undefined}callback=typeof optionsOrCallback==="function"?optionsOrCallback:typeof callback==="function"?callback:undefined;if(this.isWildcardPath){const error=new Error(`Cannot get value of wildcard path "/${this.path}". Use .query() instead`);if(typeof callback==="function"){throw error}return Promise.reject(error)}const options=new DataRetrievalOptions(typeof optionsOrCallback==="object"?optionsOrCallback:{cache_mode:"allow"});const promise=this.db.api.get(this.path,options).then((result=>{var _a;const isNewApiResult="context"in result&&"value"in result;if(!isNewApiResult){console.warn("AceBase api.get method returned an old response value. Update your acebase or acebase-client package");result={value:result,context:{}}}const value=this.db.types.deserialize(this.path,result.value);const snapshot=new data_snapshot_1.DataSnapshot(this,value,undefined,undefined,result.context);if((_a=result.context)===null||_a===void 0?void 0:_a.acebase_cursor){this.cursor=result.context.acebase_cursor}return snapshot}));if(callback){promise.then(callback).catch((err=>{console.error("Uncaught error:",err)}));return}else{return promise}}once(event,options){if(event==="value"&&!this.isWildcardPath){return this.get(options)}return new Promise((resolve=>{const callback=snap=>{this.off(event,callback);resolve(snap)};this.on(event,callback)}))}push(value,onComplete){if(this.isWildcardPath){const error=new Error(`Cannot push to wildcard path "/${this.path}"`);if(typeof value==="undefined"||typeof onComplete==="function"){throw error}return Promise.reject(error)}const id=id_1.ID.generate();const ref=this.child(id);ref[_private].pushed=true;if(typeof value!=="undefined"){return ref.set(value,onComplete).then((()=>ref))}else{return ref}}async remove(){if(this.isWildcardPath){throw new Error(`Cannot remove wildcard path "/${this.path}". Use query().remove instead`)}if(this.parent===null){throw new Error("Cannot remove the root node")}return this.set(null)}async exists(){if(this.isWildcardPath){throw new Error(`Cannot check wildcard path "/${this.path}" existence`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.exists(this.path)}get isWildcardPath(){return this.path.indexOf("*")>=0||this.path.indexOf("$")>=0}query(){return new DataReferenceQuery(this)}async count(){const info=await this.reflect("info",{child_count:true});return info.children.count}async reflect(type,args){if(this.isWildcardPath){throw new Error(`Cannot reflect on wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.reflect(this.path,type,args)}async export(write,options={format:"json",type_safe:true}){if(this.isWildcardPath){throw new Error(`Cannot export wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}const writeFn=typeof write==="function"?write:write.write.bind(write);return this.db.api.export(this.path,writeFn,options)}async import(read,options={format:"json",suppress_events:false}){if(this.isWildcardPath){throw new Error(`Cannot import to wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.import(this.path,read,options)}proxy(options){const isOptionsArg=typeof options==="object"&&(typeof options.cursor!=="undefined"||typeof options.defaultValue!=="undefined");if(typeof options!=="undefined"&&!isOptionsArg){this.db.debug.warn("Warning: live data proxy is being initialized with a deprecated method signature. Use ref.proxy(options) instead of ref.proxy(defaultValue)");options={defaultValue:options}}return data_proxy_1.LiveDataProxy.create(this,options)}observe(options){if(options){throw new Error("observe does not support data retrieval options yet")}if(this.isWildcardPath){throw new Error(`Cannot observe wildcard path "/${this.path}"`)}const Observable=(0,optional_observable_1.getObservable)();return new Observable((observer=>{let cache,resolved=false;let promise=this.get(options).then((snap=>{resolved=true;cache=snap.val();observer.next(cache)}));const updateCache=snap=>{if(!resolved){promise=promise.then((()=>updateCache(snap)));return}const mutatedPath=snap.ref.path;if(mutatedPath===this.path){cache=snap.val();return observer.next(cache)}const trailKeys=path_info_1.PathInfo.getPathKeys(mutatedPath).slice(path_info_1.PathInfo.getPathKeys(this.path).length);let target=cache;while(trailKeys.length>1){const key=trailKeys.shift();if(!(key in target)){target[key]=typeof trailKeys[0]==="number"?[]:{}}target=target[key]}const prop=trailKeys.shift();const newValue=snap.val();if(newValue===null){target instanceof Array&&typeof prop==="number"?target.splice(prop,1):delete target[prop]}else{target[prop]=newValue}observer.next(cache)};this.on("mutated",updateCache);return()=>{this.off("mutated",updateCache)}}))}async forEach(callbackOrOptions,callback){let options;if(typeof callbackOrOptions==="function"){callback=callbackOrOptions}else{options=callbackOrOptions}if(typeof callback!=="function"){throw new TypeError("No callback function given")}const info=await this.reflect("children",{limit:0,skip:0});const summary={canceled:false,total:info.list.length,processed:0};for(let i=0;ithis.get(optionsOrCallback,callback)));return typeof optionsOrCallback!=="function"&&typeof callback!=="function"?promise:undefined}callback=typeof optionsOrCallback==="function"?optionsOrCallback:typeof callback==="function"?callback:undefined;const options=new QueryDataRetrievalOptions(typeof optionsOrCallback==="object"?optionsOrCallback:{snapshots:true,cache_mode:"allow"});options.allow_cache=options.cache_mode!=="bypass";options.eventHandler=ev=>{if(!this[_private].events[ev.name]){return false}const listeners=this[_private].events[ev.name];if(typeof listeners!=="object"||listeners.length===0){return false}if(["add","change","remove"].includes(ev.name)){const ref=new DataReference(this.ref.db,ev.path);const eventData={name:ev.name};if(options.snapshots&&ev.name!=="remove"){const val=db.types.deserialize(ev.path,ev.value);eventData.snapshot=new data_snapshot_1.DataSnapshot(ref,val,false)}else{eventData.ref=ref}ev=eventData}listeners.forEach((callback=>{try{callback(ev)}catch(e){}}))};options.monitor={add:false,change:false,remove:false};if(this[_private].events){if(this[_private].events["add"]&&this[_private].events["add"].length>0){options.monitor.add=true}if(this[_private].events["change"]&&this[_private].events["change"].length>0){options.monitor.change=true}if(this[_private].events["remove"]&&this[_private].events["remove"].length>0){options.monitor.remove=true}}this.stop();const db=this.ref.db;return db.api.query(this.ref.path,this[_private],options).catch((err=>{throw new Error(err)})).then((res=>{const{stop:stop}=res;let{results:results,context:context}=res;this.stop=async()=>{await stop()};if(!("results"in res&&"context"in res)){console.warn("Query results missing context. Update your acebase and/or acebase-client packages");results=res,context={}}if(options.snapshots){const snaps=results.map((result=>{const val=db.types.deserialize(result.path,result.val);return new data_snapshot_1.DataSnapshot(db.ref(result.path),val,false,undefined,context)}));return DataSnapshotsArray.from(snaps)}else{const refs=results.map((path=>db.ref(path)));return DataReferencesArray.from(refs)}})).then((results=>{callback&&callback(results);return results}))}async stop(){}getRefs(callback){return this.get({snapshots:false},callback)}find(){return this.get({snapshots:false})}async count(){const refs=await this.find();return refs.length}async exists(){const originalTake=this[_private].take;const p=this.take(1).find();this.take(originalTake);const refs=await p;return refs.length!==0}async remove(callback){const refs=await this.find();const parentUpdates=refs.reduce(((parents,ref)=>{const parent=parents[ref.parent.path];if(!parent){parents[ref.parent.path]=[ref]}else{parent.push(ref)}return parents}),{});const db=this.ref.db;const promises=Object.keys(parentUpdates).map((async parentPath=>{const updates=refs.reduce(((updates,ref)=>{updates[ref.key]=null;return updates}),{});const ref=db.ref(parentPath);try{await ref.update(updates);return{ref:ref,success:true}}catch(error){return{ref:ref,success:false,error:error}}}));const results=await Promise.all(promises);callback&&callback(results);return results}on(event,callback){if(!this[_private].events[event]){this[_private].events[event]=[]}this[_private].events[event].push(callback);return this}off(event,callback){if(typeof event==="undefined"){this[_private].events={};return this}if(!this[_private].events[event]){return this}if(typeof callback==="undefined"){delete this[_private].events[event];return this}const index=this[_private].events[event].indexOf(callback);if(!~index){return this}this[_private].events[event].splice(index,1);return this}async forEach(callbackOrOptions,callback){let options;if(typeof callbackOrOptions==="function"){callback=callbackOrOptions}else{options=callbackOrOptions}if(typeof callback!=="function"){throw new TypeError("No callback function given")}const refs=await this.find();const summary={canceled:false,total:refs.length,processed:0};for(let i=0;iarr[i]=snap));return arr}getValues(){return this.map((snap=>snap.val()))}}exports.DataSnapshotsArray=DataSnapshotsArray;class DataReferencesArray extends Array{static from(refs){const arr=new DataReferencesArray(refs.length);refs.forEach(((ref,i)=>arr[i]=ref));return arr}getPaths(){return this.map((ref=>ref.path))}}exports.DataReferencesArray=DataReferencesArray},{"./data-proxy":7,"./data-snapshot":9,"./id":11,"./optional-observable":14,"./path-info":16,"./subscription":23}],9:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.MutationsDataSnapshot=exports.DataSnapshot=void 0;const path_info_1=require("./path-info");function getChild(snapshot,path,previous=false){if(!snapshot.exists()){return null}let child=previous?snapshot.previous():snapshot.val();if(typeof path==="number"){return child[path]}path_info_1.PathInfo.getPathKeys(path).every((key=>{child=child[key];return typeof child!=="undefined"}));return child||null}function getChildren(snapshot){if(!snapshot.exists()){return[]}const value=snapshot.val();if(value instanceof Array){return new Array(value.length).map(((v,i)=>i))}if(typeof value==="object"){return Object.keys(value)}return[]}class DataSnapshot{constructor(ref,value,isRemoved=false,prevValue,context){this.ref=ref;this.val=()=>value;this.previous=()=>prevValue;this.exists=()=>{if(isRemoved){return false}return value!==null&&typeof value!=="undefined"};this.context=()=>context||{}}exists(){return false}static for(ref,value){return new DataSnapshot(ref,value)}child(path){const val=getChild(this,path,false);const prev=getChild(this,path,true);return new DataSnapshot(this.ref.child(path),val,false,prev)}hasChild(path){return getChild(this,path)!==null}hasChildren(){return getChildren(this).length>0}numChildren(){return getChildren(this).length}forEach(callback){const value=this.val();const prev=this.previous();return getChildren(this).every((key=>{const snap=new DataSnapshot(this.ref.child(key),value[key],false,prev[key]);return callback(snap)}))}get key(){return this.ref.key}}exports.DataSnapshot=DataSnapshot;class MutationsDataSnapshot extends DataSnapshot{constructor(ref,mutations,context){super(ref,mutations,false,undefined,context);this.previous=()=>{throw new Error("Iterate values to get previous values for each mutation")};this.val=(warn=true)=>{if(warn){console.warn("Unless you know what you are doing, it is best not to use the value of a mutations snapshot directly. Use child methods and forEach to iterate the mutations instead")}return mutations}}forEach(callback){const mutations=this.val();return mutations.every((mutation=>{const ref=mutation.target.reduce(((ref,key)=>ref.child(key)),this.ref);const snap=new DataSnapshot(ref,mutation.val,false,mutation.prev);return callback(snap)}))}child(index){if(typeof index!=="number"){throw new Error("child index must be a number")}const mutation=this.val()[index];const ref=mutation.target.reduce(((ref,key)=>ref.child(key)),this.ref);return new DataSnapshot(ref,mutation.val,false,mutation.prev)}}exports.MutationsDataSnapshot=MutationsDataSnapshot},{"./path-info":16}],10:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DebugLogger=void 0;const process_1=require("./process");const noop=()=>{};class DebugLogger{constructor(level="log",prefix=""){this.level=level;this.prefix=prefix;this.setLevel(level)}setLevel(level){const prefix=this.prefix?this.prefix+" %s":"";this.verbose=["verbose"].includes(level)?prefix?console.log.bind(console,prefix):console.log.bind(console):noop;this.log=["verbose","log"].includes(level)?prefix?console.log.bind(console,prefix):console.log.bind(console):noop;this.warn=["verbose","log","warn"].includes(level)?prefix?console.warn.bind(console,prefix):console.warn.bind(console):noop;this.error=["verbose","log","warn","error"].includes(level)?prefix?console.error.bind(console,prefix):console.error.bind(console):noop;this.write=text=>{const isRunKit=typeof process_1.default!=="undefined"&&process_1.default.env&&typeof process_1.default.env.RUNKIT_ENDPOINT_PATH==="string";if(text&&isRunKit){text.split("\n").forEach((line=>console.log(line)))}else{console.log(text)}}}}exports.DebugLogger=DebugLogger},{"./process":18}],11:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ID=void 0;const cuid_1=require("./cuid");let timeBias=0;class ID{static set timeBias(bias){if(typeof bias!=="number"){return}timeBias=bias}static generate(){return(0,cuid_1.default)(timeBias).slice(1)}}exports.ID=ID},{"./cuid":5}],12:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObjectCollection=exports.PartialArray=exports.SchemaDefinition=exports.Colorize=exports.ColorStyle=exports.SimpleEventEmitter=exports.SimpleCache=exports.ascii85=exports.PathInfo=exports.Utils=exports.TypeMappings=exports.Transport=exports.EventSubscription=exports.EventPublisher=exports.EventStream=exports.PathReference=exports.ID=exports.DebugLogger=exports.OrderedCollectionProxy=exports.proxyAccess=exports.MutationsDataSnapshot=exports.DataSnapshot=exports.DataReferencesArray=exports.DataSnapshotsArray=exports.QueryDataRetrievalOptions=exports.DataRetrievalOptions=exports.DataReferenceQuery=exports.DataReference=exports.Api=exports.AceBaseBaseSettings=exports.AceBaseBase=void 0;var acebase_base_1=require("./acebase-base");Object.defineProperty(exports,"AceBaseBase",{enumerable:true,get:function(){return acebase_base_1.AceBaseBase}});Object.defineProperty(exports,"AceBaseBaseSettings",{enumerable:true,get:function(){return acebase_base_1.AceBaseBaseSettings}});var api_1=require("./api");Object.defineProperty(exports,"Api",{enumerable:true,get:function(){return api_1.Api}});var data_reference_1=require("./data-reference");Object.defineProperty(exports,"DataReference",{enumerable:true,get:function(){return data_reference_1.DataReference}});Object.defineProperty(exports,"DataReferenceQuery",{enumerable:true,get:function(){return data_reference_1.DataReferenceQuery}});Object.defineProperty(exports,"DataRetrievalOptions",{enumerable:true,get:function(){return data_reference_1.DataRetrievalOptions}});Object.defineProperty(exports,"QueryDataRetrievalOptions",{enumerable:true,get:function(){return data_reference_1.QueryDataRetrievalOptions}});Object.defineProperty(exports,"DataSnapshotsArray",{enumerable:true,get:function(){return data_reference_1.DataSnapshotsArray}});Object.defineProperty(exports,"DataReferencesArray",{enumerable:true,get:function(){return data_reference_1.DataReferencesArray}});var data_snapshot_1=require("./data-snapshot");Object.defineProperty(exports,"DataSnapshot",{enumerable:true,get:function(){return data_snapshot_1.DataSnapshot}});Object.defineProperty(exports,"MutationsDataSnapshot",{enumerable:true,get:function(){return data_snapshot_1.MutationsDataSnapshot}});var data_proxy_1=require("./data-proxy");Object.defineProperty(exports,"proxyAccess",{enumerable:true,get:function(){return data_proxy_1.proxyAccess}});Object.defineProperty(exports,"OrderedCollectionProxy",{enumerable:true,get:function(){return data_proxy_1.OrderedCollectionProxy}});var debug_1=require("./debug");Object.defineProperty(exports,"DebugLogger",{enumerable:true,get:function(){return debug_1.DebugLogger}});var id_1=require("./id");Object.defineProperty(exports,"ID",{enumerable:true,get:function(){return id_1.ID}});var path_reference_1=require("./path-reference");Object.defineProperty(exports,"PathReference",{enumerable:true,get:function(){return path_reference_1.PathReference}});var subscription_1=require("./subscription");Object.defineProperty(exports,"EventStream",{enumerable:true,get:function(){return subscription_1.EventStream}});Object.defineProperty(exports,"EventPublisher",{enumerable:true,get:function(){return subscription_1.EventPublisher}});Object.defineProperty(exports,"EventSubscription",{enumerable:true,get:function(){return subscription_1.EventSubscription}});exports.Transport=require("./transport");var type_mappings_1=require("./type-mappings");Object.defineProperty(exports,"TypeMappings",{enumerable:true,get:function(){return type_mappings_1.TypeMappings}});exports.Utils=require("./utils");var path_info_1=require("./path-info");Object.defineProperty(exports,"PathInfo",{enumerable:true,get:function(){return path_info_1.PathInfo}});var ascii85_1=require("./ascii85");Object.defineProperty(exports,"ascii85",{enumerable:true,get:function(){return ascii85_1.ascii85}});var simple_cache_1=require("./simple-cache");Object.defineProperty(exports,"SimpleCache",{enumerable:true,get:function(){return simple_cache_1.SimpleCache}});var simple_event_emitter_1=require("./simple-event-emitter");Object.defineProperty(exports,"SimpleEventEmitter",{enumerable:true,get:function(){return simple_event_emitter_1.SimpleEventEmitter}});var simple_colors_1=require("./simple-colors");Object.defineProperty(exports,"ColorStyle",{enumerable:true,get:function(){return simple_colors_1.ColorStyle}});Object.defineProperty(exports,"Colorize",{enumerable:true,get:function(){return simple_colors_1.Colorize}});var schema_1=require("./schema");Object.defineProperty(exports,"SchemaDefinition",{enumerable:true,get:function(){return schema_1.SchemaDefinition}});var partial_array_1=require("./partial-array");Object.defineProperty(exports,"PartialArray",{enumerable:true,get:function(){return partial_array_1.PartialArray}});const object_collection_1=require("./object-collection");Object.defineProperty(exports,"ObjectCollection",{enumerable:true,get:function(){return object_collection_1.ObjectCollection}})},{"./acebase-base":1,"./api":2,"./ascii85":3,"./data-proxy":7,"./data-reference":8,"./data-snapshot":9,"./debug":10,"./id":11,"./object-collection":13,"./partial-array":15,"./path-info":16,"./path-reference":17,"./schema":19,"./simple-cache":20,"./simple-colors":21,"./simple-event-emitter":22,"./subscription":23,"./transport":24,"./type-mappings":25,"./utils":26}],13:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObjectCollection=void 0;const id_1=require("./id");class ObjectCollection{static from(array){const collection={};array.forEach((child=>{collection[id_1.ID.generate()]=child}));return collection}}exports.ObjectCollection=ObjectCollection},{"./id":11}],14:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObservableShim=exports.setObservable=exports.getObservable=void 0;let _observable;function getObservable(){if(_observable){return _observable}if(typeof window!=="undefined"&&window.Observable){_observable=window.Observable;return _observable}try{const{Observable:Observable}=require("rxjs");if(!Observable){throw new Error("not loaded")}_observable=Observable;return Observable}catch(err){throw new Error("RxJS Observable could not be loaded. If you are using a browser build, add it to AceBase using db.setObservable. For node.js builds, add it to your project with: npm i rxjs")}}exports.getObservable=getObservable;function setObservable(Observable){if(Observable==="shim"){console.warn("Using AceBase's simple Observable shim. Only use this if you know what you're doing.");Observable=ObservableShim}_observable=Observable}exports.setObservable=setObservable;class ObservableShim{constructor(create){this._active=false;this._subscribers=[];this._create=create}subscribe(subscriber){if(!this._active){const next=value=>{this._subscribers.forEach((s=>{try{s(value)}catch(err){console.error("Error in subscriber callback:",err)}}))};const observer={next:next};this._cleanup=this._create(observer);this._active=true}this._subscribers.push(subscriber);const unsubscribe=()=>{this._subscribers.splice(this._subscribers.indexOf(subscriber),1);if(this._subscribers.length===0){this._active=false;this._cleanup()}};const subscription={unsubscribe:unsubscribe};return subscription}}exports.ObservableShim=ObservableShim},{rxjs:57}],15:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.PartialArray=void 0;class PartialArray{constructor(sparseArray){if(sparseArray instanceof Array){for(let i=0;ikey.startsWith("[")?parseInt(key.slice(1,-1)):key))}class PathInfo{constructor(path){if(typeof path==="string"){this.keys=getPathKeys(path)}else if(path instanceof Array){this.keys=path}this.path=this.keys.reduce(((path,key,i)=>i===0?`${key}`:typeof key==="string"?`${path}/${key}`:`${path}[${key}]`),"")}static get(path){return new PathInfo(path)}static getChildPath(path,childKey){return PathInfo.get(path).child(childKey).path}static getPathKeys(path){return getPathKeys(path)}get key(){return this.keys.length===0?null:this.keys.slice(-1)[0]}get parent(){if(this.keys.length==0){return null}const parentKeys=this.keys.slice(0,-1);return new PathInfo(parentKeys)}get parentPath(){return this.keys.length===0?null:this.parent.path}child(childKey){if(typeof childKey==="string"){childKey=getPathKeys(childKey)}return new PathInfo(this.keys.concat(childKey))}childPath(childKey){return this.child(childKey).path}get pathKeys(){return this.keys}static extractVariables(varPath,fullPath){if(!varPath.includes("*")&&!varPath.includes("$")){return[]}const keys=getPathKeys(varPath);const pathKeys=getPathKeys(fullPath);let count=0;const variables={get length(){return count}};keys.forEach(((key,index)=>{const pathKey=pathKeys[index];if(key==="*"){variables[count++]=pathKey}else if(typeof key==="string"&&key[0]==="$"){variables[count++]=pathKey;variables[key]=pathKey;const varName=key.slice(1);if(typeof variables[varName]==="undefined"){variables[varName]=pathKey}}}));return variables}static fillVariables(varPath,fullPath){if(varPath.indexOf("*")<0&&varPath.indexOf("$")<0){return varPath}const keys=getPathKeys(varPath);const pathKeys=getPathKeys(fullPath);const merged=keys.map(((key,index)=>{if(key===pathKeys[index]||index>=pathKeys.length){return key}else if(typeof key==="string"&&(key==="*"||key[0]==="$")){return pathKeys[index]}else{throw new Error(`Path "${fullPath}" cannot be used to fill variables of path "${varPath}" because they do not match`)}}));let mergedPath="";merged.forEach((key=>{if(typeof key==="number"){mergedPath+=`[${key}]`}else{if(mergedPath.length>0){mergedPath+="/"}mergedPath+=key}}));return mergedPath}static fillVariables2(varPath,vars){if(typeof vars!=="object"||Object.keys(vars).length===0){return varPath}const pathKeys=getPathKeys(varPath);let n=0;const targetPath=pathKeys.reduce(((path,key)=>{if(typeof key==="string"&&(key==="*"||key.startsWith("$"))){return PathInfo.getChildPath(path,vars[n++])}else{return PathInfo.getChildPath(path,key)}}),"");return targetPath}equals(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path===other.path){return true}if(this.keys.length!==other.keys.length){return false}return this.keys.every(((key,index)=>{const otherKey=other.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isAncestorOf(descendantPath){const descendant=descendantPath instanceof PathInfo?descendantPath:new PathInfo(descendantPath);if(descendant.path===""||this.path===descendant.path){return false}if(this.path===""){return true}if(this.keys.length>=descendant.keys.length){return false}return this.keys.every(((key,index)=>{const otherKey=descendant.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isDescendantOf(ancestorPath){const ancestor=ancestorPath instanceof PathInfo?ancestorPath:new PathInfo(ancestorPath);if(this.path===""||this.path===ancestor.path){return false}if(ancestorPath===""){return true}if(ancestor.keys.length>=this.keys.length){return false}return ancestor.keys.every(((key,index)=>{const otherKey=this.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isOnTrailOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path.length===0||other.path.length===0){return true}if(this.path===other.path){return true}return this.pathKeys.every(((key,index)=>{if(index>=other.keys.length){return true}const otherKey=other.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isChildOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path===""){return false}return this.parent.equals(other)}isParentOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(other.path===""){return false}return this.equals(other.parent)}}exports.PathInfo=PathInfo},{}],17:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.PathReference=void 0;class PathReference{constructor(path){this.path=path}}exports.PathReference=PathReference},{}],18:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default={nextTick(fn){setTimeout(fn,0)}}},{}],19:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SchemaDefinition=void 0;function parse(definition){let pos=0;function consumeSpaces(){let c;while(c=definition[pos],[" ","\r","\n","\t"].includes(c)){pos++}}function consumeCharacter(c){if(definition[pos]!==c){throw new Error(`Unexpected character at position ${pos}. Expected: '${c}', found '${definition[pos]}'`)}pos++}function readProperty(){consumeSpaces();const prop={name:"",optional:false,wildcard:false};let c;while(c=definition[pos],c==="_"||c==="$"||c>="a"&&c<="z"||c>="A"&&c<="Z"||prop.name.length>0&&c>="0"&&c<="9"||prop.name.length===0&&c==="*"){prop.name+=c;pos++}if(prop.name.length===0){throw new Error(`Property name expected at position ${pos}, found: ${definition.slice(pos,pos+10)}..`)}if(definition[pos]==="?"){prop.optional=true;pos++}if(prop.name==="*"||prop.name[0]==="$"){prop.optional=true;prop.wildcard=true}consumeSpaces();consumeCharacter(":");return prop}function readType(){consumeSpaces();let type={typeOf:"any"},c;let name="";while(c=definition[pos],c>="a"&&c<="z"||c>="A"&&c<="Z"){name+=c;pos++}if(name.length===0){if(definition[pos]==="*"){consumeCharacter("*");type.typeOf="any"}else if(["'",'"',"`"].includes(definition[pos])){type.typeOf="string";type.value="";const quote=definition[pos];consumeCharacter(quote);while(c=definition[pos],c&&c!==quote){type.value+=c;pos++}consumeCharacter(quote)}else if(definition[pos]>="0"&&definition[pos]<="9"){type.typeOf="number";let nr="";while(c=definition[pos],c==="."||c==="n"||c>="0"&&c<="9"){nr+=c;pos++}if(nr.endsWith("n")){type.value=BigInt(nr)}else if(nr.includes(".")){type.value=parseFloat(nr)}else{type.value=parseInt(nr)}}else if(definition[pos]==="{"){consumeCharacter("{");type.typeOf="object";type.instanceOf=Object;type.children=[];while(true){const prop=readProperty();const types=readTypes();type.children.push({name:prop.name,optional:prop.optional,wildcard:prop.wildcard,types:types});consumeSpaces();if(definition[pos]==="}"){break}consumeCharacter(",")}consumeCharacter("}")}else if(definition[pos]==="/"){consumeCharacter("/");let pattern="",flags="";while(c=definition[pos],c!=="/"||pattern.endsWith("\\")){pattern+=c;pos++}consumeCharacter("/");while(c=definition[pos],["g","i","m","s","u","y","d"].includes(c)){flags+=c;pos++}type.typeOf="string";type.matches=new RegExp(pattern,flags)}else{throw new Error(`Expected a type definition at position ${pos}, found character '${definition[pos]}'`)}}else if(["string","number","boolean","bigint","undefined","String","Number","Boolean","BigInt"].includes(name)){type.typeOf=name.toLowerCase()}else if(name==="Object"||name==="object"){type.typeOf="object";type.instanceOf=Object}else if(name==="Date"){type.typeOf="object";type.instanceOf=Date}else if(name==="Binary"||name==="binary"){type.typeOf="object";type.instanceOf=ArrayBuffer}else if(name==="any"){type.typeOf="any"}else if(name==="null"){type.typeOf="object";type.value=null}else if(name==="Array"){consumeCharacter("<");type.typeOf="object";type.instanceOf=Array;type.genericTypes=readTypes();consumeCharacter(">")}else if(["true","false"].includes(name)){type.typeOf="boolean";type.value=name==="true"}else{throw new Error(`Unknown type at position ${pos}: "${type}"`)}consumeSpaces();while(definition[pos]==="["){consumeCharacter("[");consumeCharacter("]");type={typeOf:"object",instanceOf:Array,genericTypes:[type]}}return type}function readTypes(){consumeSpaces();const types=[readType()];while(definition[pos]==="|"){consumeCharacter("|");types.push(readType());consumeSpaces()}return types}return readType()}function checkObject(path,properties,obj,partial){const invalidProperties=properties.find((prop=>prop.name==="*"||prop.name[0]==="$"))?[]:Object.keys(obj).filter((key=>![null,undefined].includes(obj[key])&&!properties.find((prop=>prop.name===key))));if(invalidProperties.length>0){return{ok:false,reason:`Object at path "${path}" cannot have propert${invalidProperties.length===1?"y":"ies"} ${invalidProperties.map((p=>`"${p}"`)).join(", ")}`}}function checkProperty(property){const hasValue=![null,undefined].includes(obj[property.name]);if(!property.optional&&(partial?obj[property.name]===null:!hasValue)){return{ok:false,reason:`Property at path "${path}/${property.name}" is not optional`}}if(hasValue&&property.types.length===1){return checkType(`${path}/${property.name}`,property.types[0],obj[property.name],false)}if(hasValue&&!property.types.some((type=>checkType(`${path}/${property.name}`,type,obj[property.name],false).ok))){return{ok:false,reason:`Property at path "${path}/${property.name}" does not match any of ${property.types.length} allowed types`}}return{ok:true}}const namedProperties=properties.filter((prop=>!prop.wildcard));const failedProperty=namedProperties.find((prop=>!checkProperty(prop).ok));if(failedProperty){const reason=checkProperty(failedProperty).reason;return{ok:false,reason:reason}}const wildcardProperty=properties.find((prop=>prop.wildcard));if(!wildcardProperty){return{ok:true}}const wildcardChildKeys=Object.keys(obj).filter((key=>!namedProperties.find((prop=>prop.name===key))));let result={ok:true};for(let i=0;i0){if(type.typeOf!=="object"){return{ok:false,reason:`path "${path}" must be typeof ${type.typeOf}`}}if(!type.children){return ok}const childKey=trailKeys[0];let property=type.children.find((prop=>prop.name===childKey));if(!property){property=type.children.find((prop=>prop.name==="*"||prop.name[0]==="$"))}if(!property){return{ok:false,reason:`Object at path "${path}" cannot have property "${childKey}"`}}if(property.optional&&value===null&&trailKeys.length===1){return ok}let result;property.types.some((type=>{const childPath=typeof childKey==="number"?`${path}[${childKey}]`:`${path}/${childKey}`;result=checkType(childPath,type,value,partial,trailKeys.slice(1));return result.ok}));return result}if(value===null){return ok}if(type.instanceOf===Object&&(typeof value!=="object"||value instanceof Array||value instanceof Date)){return{ok:false,reason:`path "${path}" must be an object collection`}}if(type.instanceOf&&(typeof value!=="object"||value.constructor!==type.instanceOf)){return{ok:false,reason:`path "${path}" must be an instance of ${type.instanceOf.name}`}}if("value"in type&&value!==type.value){return{ok:false,reason:`path "${path}" must be value: ${type.value}`}}if(typeof value!==type.typeOf){return{ok:false,reason:`path "${path}" must be typeof ${type.typeOf}`}}if(type.instanceOf===Array&&type.genericTypes&&!value.every((v=>type.genericTypes.some((t=>checkType(path,t,v,false).ok))))){return{ok:false,reason:`every array value of path "${path}" must match one of the specified types`}}if(type.typeOf==="object"&&type.children){return checkObject(path,type.children,value,partial)}if(type.matches&&!type.matches.test(value)){return{ok:false,reason:`path "${path}" must match regular expression /${type.matches.source}/${type.matches.flags}`}}return ok}function getConstructorType(val){switch(val){case String:return"string";case Number:return"number";case Boolean:return"boolean";case Date:return"Date";case BigInt:return"bigint";case Array:throw new Error("Schema error: Array cannot be used without a type. Use string[] or Array instead");default:throw new Error(`Schema error: unknown type used: ${val.name}`)}}class SchemaDefinition{constructor(definition){this.source=definition;if(typeof definition==="object"){const toTS=obj=>"{"+Object.keys(obj).map((key=>{let val=obj[key];if(val===undefined){val="undefined"}else if(val instanceof RegExp){val=`/${val.source}/${val.flags}`}else if(typeof val==="object"){val=toTS(val)}else if(typeof val==="function"){val=getConstructorType(val)}else if(!["string","number","boolean","bigint"].includes(typeof val)){throw new Error(`Type definition for key "${key}" must be a string, number, boolean, bigint, object, regular expression, or one of these classes: String, Number, Boolean, Date, BigInt`)}return`${key}:${val}`})).join(",")+"}";this.text=toTS(definition)}else if(typeof definition==="string"){this.text=definition}else{throw new Error("Type definiton must be a string or an object")}this.type=parse(this.text)}check(path,value,partial,trailKeys){return checkType(path,this.type,value,partial,trailKeys)}}exports.SchemaDefinition=SchemaDefinition},{}],20:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SimpleCache=void 0;const utils_1=require("./utils");const calculateExpiryTime=expirySeconds=>expirySeconds>0?Date.now()+expirySeconds*1e3:Infinity;class SimpleCache{constructor(options){var _a;this.enabled=true;if(typeof options==="number"){options={expirySeconds:options}}options.cloneValues=options.cloneValues!==false;if(typeof options.expirySeconds!=="number"&&typeof options.maxEntries!=="number"){throw new Error("Either expirySeconds or maxEntries must be specified")}this.options=options;this.cache=new Map;const interval=setInterval((()=>{this.cleanUp()}),60*1e3);(_a=interval.unref)===null||_a===void 0?void 0:_a.call(interval)}get size(){return this.cache.size}has(key){if(!this.enabled){return false}return this.cache.has(key)}get(key){if(!this.enabled){return null}const entry=this.cache.get(key);if(!entry){return null}entry.expires=calculateExpiryTime(this.options.expirySeconds);entry.accessed=Date.now();return this.options.cloneValues?(0,utils_1.cloneObject)(entry.value):entry.value}set(key,value){if(this.options.maxEntries>0&&this.cache.size>=this.options.maxEntries&&!this.cache.has(key)){let oldest=null;const now=Date.now();for(const[key,entry]of this.cache.entries()){if(entry.expires<=now){this.cache.delete(key);oldest=null;break}if(!oldest||entry.accessed{if(entry.expires<=now){this.cache.delete(key)}}))}}exports.SimpleCache=SimpleCache},{"./utils":26}],21:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Colorize=exports.SetColorsEnabled=exports.ColorsSupported=exports.ColorStyle=void 0;const process_1=require("./process");const FontCode={bold:1,dim:2,italic:3,underline:4,inverse:7,hidden:8,strikethrough:94};const ColorCode={black:30,red:31,green:32,yellow:33,blue:34,magenta:35,cyan:36,white:37,grey:90,brightRed:91};const BgColorCode={bgBlack:40,bgRed:41,bgGreen:42,bgYellow:43,bgBlue:44,bgMagenta:45,bgCyan:46,bgWhite:47,bgGrey:100,bgBrightRed:101};const ResetCode={all:0,color:39,background:49,bold:22,dim:22,italic:23,underline:24,inverse:27,hidden:28,strikethrough:29};var ColorStyle;(function(ColorStyle){ColorStyle["reset"]="reset";ColorStyle["bold"]="bold";ColorStyle["dim"]="dim";ColorStyle["italic"]="italic";ColorStyle["underline"]="underline";ColorStyle["inverse"]="inverse";ColorStyle["hidden"]="hidden";ColorStyle["strikethrough"]="strikethrough";ColorStyle["black"]="black";ColorStyle["red"]="red";ColorStyle["green"]="green";ColorStyle["yellow"]="yellow";ColorStyle["blue"]="blue";ColorStyle["magenta"]="magenta";ColorStyle["cyan"]="cyan";ColorStyle["grey"]="grey";ColorStyle["bgBlack"]="bgBlack";ColorStyle["bgRed"]="bgRed";ColorStyle["bgGreen"]="bgGreen";ColorStyle["bgYellow"]="bgYellow";ColorStyle["bgBlue"]="bgBlue";ColorStyle["bgMagenta"]="bgMagenta";ColorStyle["bgCyan"]="bgCyan";ColorStyle["bgWhite"]="bgWhite";ColorStyle["bgGrey"]="bgGrey"})(ColorStyle=exports.ColorStyle||(exports.ColorStyle={}));function ColorsSupported(){if(typeof process_1.default==="undefined"||!process_1.default.stdout||!process_1.default.env||!process_1.default.platform||process_1.default.platform==="browser"){return false}if(process_1.default.platform==="win32"){return true}const env=process_1.default.env;if(env.COLORTERM){return true}if(env.TERM==="dumb"){return false}if(env.CI||env.TEAMCITY_VERSION){return!!env.TRAVIS}if(["iTerm.app","HyperTerm","Hyper","MacTerm","Apple_Terminal","vscode"].includes(env.TERM_PROGRAM)){return true}if(/^xterm-256|^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(env.TERM)){return true}return false}exports.ColorsSupported=ColorsSupported;let _enabled=ColorsSupported();function SetColorsEnabled(enabled){_enabled=ColorsSupported()&&enabled}exports.SetColorsEnabled=SetColorsEnabled;function Colorize(str,style){if(!_enabled){return str}const openCodes=[],closeCodes=[];const addStyle=style=>{if(style===ColorStyle.reset){openCodes.push(ResetCode.all)}else if(style in FontCode){openCodes.push(FontCode[style]);closeCodes.push(ResetCode[style])}else if(style in ColorCode){openCodes.push(ColorCode[style]);closeCodes.push(ResetCode.color)}else if(style in BgColorCode){openCodes.push(BgColorCode[style]);closeCodes.push(ResetCode.background)}};if(style instanceof Array){style.forEach(addStyle)}else{addStyle(style)}const open=openCodes.map((code=>"["+code+"m")).join("");const close=closeCodes.map((code=>"["+code+"m")).join("");return str.split("\n").map((line=>open+line+close)).join("\n")}exports.Colorize=Colorize;String.prototype.colorize=function(style){return Colorize(this,style)}},{"./process":18}],22:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SimpleEventEmitter=void 0;function runCallback(callback,data){try{callback(data)}catch(err){console.error("Error in subscription callback",err)}}class SimpleEventEmitter{constructor(){this._subscriptions=[];this._oneTimeEvents=new Map}on(event,callback){if(this._oneTimeEvents.has(event)){return runCallback(callback,this._oneTimeEvents.get(event))}this._subscriptions.push({event:event,callback:callback,once:false});return this}off(event,callback){this._subscriptions=this._subscriptions.filter((s=>s.event!==event||callback&&s.callback!==callback));return this}once(event,callback){return new Promise((resolve=>{const ourCallback=data=>{resolve(data);callback===null||callback===void 0?void 0:callback(data)};if(this._oneTimeEvents.has(event)){runCallback(ourCallback,this._oneTimeEvents.get(event))}else{this._subscriptions.push({event:event,callback:ourCallback,once:true})}}))}emit(event,data){if(this._oneTimeEvents.has(event)){throw new Error(`Event "${event}" was supposed to be emitted only once`)}for(let i=0;i{if(this._internal.state==="active"){return resolve()}else if(this._internal.state==="canceled"&&!callback){return reject(new Error(this._internal.cancelReason))}const noop=()=>{};this._internal.activatePromises.push({resolve:resolve,reject:callback?noop:reject})}))}_setActivationState(activated,cancelReason){this._internal.cancelReason=cancelReason;this._internal.state=activated?"active":"canceled";while(this._internal.activatePromises.length>0){const p=this._internal.activatePromises.shift();if(activated){p.callback&&p.callback(true);p.resolve&&p.resolve()}else{p.callback&&p.callback(false,cancelReason);p.reject&&p.reject(cancelReason)}}}}exports.EventSubscription=EventSubscription;class EventPublisher{constructor(publish,start,cancel){this.publish=publish;this.start=start;this.cancel=cancel}}exports.EventPublisher=EventPublisher;class EventStream{constructor(eventPublisherCallback){const subscribers=[];let noMoreSubscribersCallback;let activationState;const STATE_STOPPED="stopped (no more subscribers)";this.subscribe=(callback,activationCallback)=>{if(typeof callback!=="function"){throw new TypeError("callback must be a function")}else if(activationState===STATE_STOPPED){throw new Error("stream can't be used anymore because all subscribers were stopped")}const sub={callback:callback,activationCallback:function(activated,cancelReason){activationCallback===null||activationCallback===void 0?void 0:activationCallback(activated,cancelReason);this.subscription._setActivationState(activated,cancelReason)},subscription:new EventSubscription((function stop(){subscribers.splice(subscribers.indexOf(this),1);return checkActiveSubscribers()}))};subscribers.push(sub);if(typeof activationState!=="undefined"){if(activationState===true){activationCallback===null||activationCallback===void 0?void 0:activationCallback(true);sub.subscription._setActivationState(true)}else if(typeof activationState==="string"){activationCallback===null||activationCallback===void 0?void 0:activationCallback(false,activationState);sub.subscription._setActivationState(false,activationState)}}return sub.subscription};const checkActiveSubscribers=()=>{let ret;if(subscribers.length===0){ret=noMoreSubscribersCallback===null||noMoreSubscribersCallback===void 0?void 0:noMoreSubscribersCallback();activationState=STATE_STOPPED}return Promise.resolve(ret)};this.unsubscribe=callback=>{const remove=callback?subscribers.filter((sub=>sub.callback===callback)):subscribers;remove.forEach((sub=>{const i=subscribers.indexOf(sub);subscribers.splice(i,1)}));checkActiveSubscribers()};this.stop=()=>{subscribers.splice(0);checkActiveSubscribers()};const publish=val=>{subscribers.forEach((sub=>{try{sub.callback(val)}catch(err){console.error(`Error running subscriber callback: ${err.message}`)}}));if(subscribers.length===0){checkActiveSubscribers()}return subscribers.length>0};const start=allSubscriptionsStoppedCallback=>{activationState=true;noMoreSubscribersCallback=allSubscriptionsStoppedCallback;subscribers.forEach((sub=>{var _a;(_a=sub.activationCallback)===null||_a===void 0?void 0:_a.call(sub,true)}))};const cancel=reason=>{activationState=reason;subscribers.forEach((sub=>{var _a;(_a=sub.activationCallback)===null||_a===void 0?void 0:_a.call(sub,false,reason||new Error("unknown reason"))}));subscribers.splice(0)};const publisher=new EventPublisher(publish,start,cancel);eventPublisherCallback(publisher)}}exports.EventStream=EventStream},{}],24:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.deserialize2=exports.serialize2=exports.serialize=exports.detectSerializeVersion=exports.deserialize=void 0;const path_reference_1=require("./path-reference");const utils_1=require("./utils");const ascii85_1=require("./ascii85");const path_info_1=require("./path-info");const partial_array_1=require("./partial-array");const deserialize=data=>{if(data.map===null||typeof data.map==="undefined"){if(typeof data.val==="undefined"){throw new Error("serialized value must have a val property")}return data.val}const deserializeValue=(type,val)=>{if(type==="date"){return new Date(val)}else if(type==="binary"){return ascii85_1.ascii85.decode(val)}else if(type==="reference"){return new path_reference_1.PathReference(val)}else if(type==="regexp"){return new RegExp(val.pattern,val.flags)}else if(type==="array"){return new partial_array_1.PartialArray(val)}else if(type==="bigint"){return BigInt(val)}return val};if(typeof data.map==="string"){return deserializeValue(data.map,data.val)}Object.keys(data.map).forEach((path=>{const type=data.map[path];const keys=path_info_1.PathInfo.getPathKeys(path);let parent=data;let key="val";let val=data.val;keys.forEach((k=>{key=k;parent=val;val=val[key]}));parent[key]=deserializeValue(type,val)}));return data.val};exports.deserialize=deserialize;const detectSerializeVersion=data=>{if(typeof data!=="object"||data===null){return 2}if("map"in data&&"val"in data){return 1}else if("val"in data){if(Object.keys(data).length>1){return 2}return 1}return 2};exports.detectSerializeVersion=detectSerializeVersion;const serialize=obj=>{var _a;if(obj===null||typeof obj!=="object"||obj instanceof Date||obj instanceof ArrayBuffer||obj instanceof path_reference_1.PathReference||obj instanceof RegExp){const ser=(0,exports.serialize)({value:obj});return{map:(_a=ser.map)===null||_a===void 0?void 0:_a.value,val:ser.val.value}}obj=(0,utils_1.cloneObject)(obj);const process=(obj,mappings,prefix)=>{if(obj instanceof partial_array_1.PartialArray){mappings[prefix]="array"}Object.keys(obj).forEach((key=>{const val=obj[key];const path=prefix.length===0?key:`${prefix}/${key}`;if(typeof val==="bigint"){obj[key]=val.toString();mappings[path]="bigint"}else if(val instanceof Date){obj[key]=val.toISOString();mappings[path]="date"}else if(val instanceof ArrayBuffer){obj[key]=ascii85_1.ascii85.encode(val);mappings[path]="binary"}else if(val instanceof path_reference_1.PathReference){obj[key]=val.path;mappings[path]="reference"}else if(val instanceof RegExp){obj[key]={pattern:val.source,flags:val.flags};mappings[path]="regexp"}else if(typeof val==="object"&&val!==null){process(val,mappings,path)}}))};const mappings={};process(obj,mappings,"");const serialized={val:obj};if(Object.keys(mappings).length>0){serialized.map=mappings}return serialized};exports.serialize=serialize;const serialize2=obj=>{const getSerializedValue=val=>{if(typeof val==="bigint"){return{".type":"bigint",".val":val.toString()}}else if(val instanceof Date){return{".type":"date",".val":val.toISOString()}}else if(val instanceof ArrayBuffer){return{".type":"binary",".val":ascii85_1.ascii85.encode(val)}}else if(val instanceof path_reference_1.PathReference){return{".type":"reference",".val":val.path}}else if(val instanceof RegExp){return{".type":"regexp",".val":`/${val.source}/${val.flags}`}}else if(typeof val==="object"&&val!==null){if(val instanceof Array){const copy=[];for(let i=0;i{if(typeof data!=="object"||data===null){return data}if(typeof data[".type"]==="undefined"){if(data instanceof Array){const copy=[];const arr=data;for(let i=0;i{const mkeys=path_info_1.PathInfo.getPathKeys(mpath);if(mkeys.length!==keys.length){return false}return mkeys.every(((mkey,index)=>{if(mkey==="*"||typeof mkey==="string"&&mkey[0]==="$"){return true}return mkey===keys[index]}))}));const mapping=mappings[mappedPath];return mapping}function map(mappings,path){const targetPath=path_info_1.PathInfo.get(path).parentPath;if(targetPath===null){return}return get(mappings,targetPath)}function mapDeep(mappings,entryPath){entryPath=entryPath.replace(/^\/|\/$/g,"");const pathInfo=path_info_1.PathInfo.get(entryPath);const startPath=pathInfo.parentPath;const keys=startPath?path_info_1.PathInfo.getPathKeys(startPath):[];const matches=Object.keys(mappings).reduce(((m,mpath)=>{const mkeys=path_info_1.PathInfo.getPathKeys(mpath);if(mkeys.length{if(index>=keys.length){return false}else if(mkey==="*"||typeof mkey==="string"&&mkey[0]==="$"||mkey===keys[index]){return true}else{isMatch=false;return false}}))}if(isMatch){const mapping=mappings[mpath];m.push({path:mpath,type:mapping})}return m}),[]);return matches}function process(db,mappings,path,obj,action){if(obj===null||typeof obj!=="object"){return obj}const keys=path_info_1.PathInfo.getPathKeys(path);const m=mapDeep(mappings,path);const changes=[];m.sort(((a,b)=>path_info_1.PathInfo.getPathKeys(a.path).length>path_info_1.PathInfo.getPathKeys(b.path).length?-1:1));m.forEach((mapping=>{const mkeys=path_info_1.PathInfo.getPathKeys(mapping.path);mkeys.push("*");const mTrailKeys=mkeys.slice(keys.length);if(mTrailKeys.length===0){const vars=path_info_1.PathInfo.extractVariables(mapping.path,path);const ref=new data_reference_1.DataReference(db,path,vars);if(action==="serialize"){obj=mapping.type.serialize(obj,ref)}else if(action==="deserialize"){const snap=new data_snapshot_1.DataSnapshot(ref,obj);obj=mapping.type.deserialize(snap)}return}const process=(parentPath,parent,keys)=>{if(obj===null||typeof obj!=="object"){return obj}const key=keys[0];let children=[];if(key==="*"||typeof key==="string"&&key[0]==="$"){if(parent instanceof Array){children=parent.map(((val,index)=>({key:index,val:val})))}else{children=Object.keys(parent).map((k=>({key:k,val:parent[k]})))}}else{const child=parent[key];if(typeof child==="object"){children.push({key:key,val:child})}}children.forEach((child=>{const childPath=path_info_1.PathInfo.getChildPath(parentPath,child.key);const vars=path_info_1.PathInfo.extractVariables(mapping.path,childPath);const ref=new data_reference_1.DataReference(db,childPath,vars);if(keys.length===1){if(action==="serialize"){changes.push({parent:parent,key:child.key,original:parent[child.key]});parent[child.key]=mapping.type.serialize(child.val,ref)}else if(action==="deserialize"){const snap=new data_snapshot_1.DataSnapshot(ref,child.val);parent[child.key]=mapping.type.deserialize(snap)}}else{process(childPath,child.val,keys.slice(1))}}))};process(path,obj,mTrailKeys)}));if(action==="serialize"){obj=(0,utils_1.cloneObject)(obj);if(changes.length>0){changes.forEach((change=>{change.parent[change.key]=change.original}))}}return obj}const _mappings=Symbol("mappings");class TypeMappings{constructor(db){this.db=db;this[_mappings]={}}get mappings(){return this[_mappings]}map(path){return map(this[_mappings],path)}bind(path,type,options={}){if(typeof path!=="string"){throw new TypeError("path must be a string")}if(typeof type!=="function"){throw new TypeError("constructor must be a function")}if(typeof options.serializer==="undefined"){}else if(typeof options.serializer==="string"){if(typeof type.prototype[options.serializer]==="function"){options.serializer=type.prototype[options.serializer]}else{throw new TypeError(`${type.name}.prototype.${options.serializer} is not a function, cannot use it as serializer`)}}else if(typeof options.serializer!=="function"){throw new TypeError(`serializer for class ${type.name} must be a function, or the name of a prototype method`)}if(typeof options.creator==="undefined"){if(typeof type.create==="function"){options.creator=type.create}}else if(typeof options.creator==="string"){if(typeof type[options.creator]==="function"){options.creator=type[options.creator]}else{throw new TypeError(`${type.name}.${options.creator} is not a function, cannot use it as creator`)}}else if(typeof options.creator!=="function"){throw new TypeError(`creator for class ${type.name} must be a function, or the name of a static method`)}path=path.replace(/^\/|\/$/g,"");this[_mappings][path]={db:this.db,type:type,creator:options.creator,serializer:options.serializer,deserialize(snap){let obj;if(this.creator){obj=this.creator.call(this.type,snap)}else{obj=new this.type(snap)}return obj},serialize(obj,ref){if(this.serializer){obj=this.serializer.call(obj,ref,obj)}else if(obj&&typeof obj.serialize==="function"){obj=obj.serialize(ref,obj)}return obj}}}serialize(path,obj){return process(this.db,this[_mappings],path,obj,"serialize")}deserialize(path,obj){return process(this.db,this[_mappings],path,obj,"deserialize")}}exports.TypeMappings=TypeMappings},{"./data-reference":8,"./data-snapshot":9,"./path-info":16,"./utils":26}],26:[function(require,module,exports){(function(Buffer){(function(){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.defer=exports.getChildValues=exports.getMutations=exports.compareValues=exports.ObjectDifferences=exports.valuesAreEqual=exports.cloneObject=exports.concatTypedArrays=exports.decodeString=exports.encodeString=exports.bytesToBigint=exports.bigintToBytes=exports.bytesToNumber=exports.numberToBytes=void 0;const path_reference_1=require("./path-reference");const process_1=require("./process");const partial_array_1=require("./partial-array");function numberToBytes(number){const bytes=new Uint8Array(8);const view=new DataView(bytes.buffer);view.setFloat64(0,number);return new Array(...bytes)}exports.numberToBytes=numberToBytes;function bytesToNumber(bytes){const length=Array.isArray(bytes)?bytes.length:bytes.byteLength;if(length!==8){throw new TypeError("must be 8 bytes")}const bin=new Uint8Array(bytes);const view=new DataView(bin.buffer);const nr=view.getFloat64(0);return nr}exports.bytesToNumber=bytesToNumber;const big={zero:BigInt(0),one:BigInt(1),two:BigInt(2),eight:BigInt(8),ff:BigInt(255)};function bigintToBytes(number){if(typeof number!=="bigint"){throw new Error("number must be a bigint")}const bytes=[];const negative=number>big.eight}while(number!==(negative?-big.one:big.zero));bytes.reverse();if(negative?bytes[0]<128:bytes[0]>=128){bytes.unshift(negative?255:0)}return bytes}exports.bigintToBytes=bigintToBytes;function bytesToBigint(bytes){const negative=bytes[0]>=128;let number=big.zero;for(let b of bytes){if(negative){b=~b&255}number=(number<128){if((code&55296)===55296){const nextCode=str.charCodeAt(i+1);if((nextCode&56320)!==56320){throw new Error("follow-up utf-16 character does not start with 0xDC00")}i++;const p1=code&1023;const p2=nextCode&1023;code=65536|p1<<10|p2}if(code<2048){const b1=192|code>>6&31;const b2=128|code&63;arr.push(b1,b2)}else if(code<65536){const b1=224|code>>12&15;const b2=128|code>>6&63;const b3=128|code&63;arr.push(b1,b2,b3)}else if(code<2097152){const b1=240|code>>18&7;const b2=128|code>>12&63;const b3=128|code>>6&63;const b4=128|code&63;arr.push(b1,b2,b3,b4)}else{throw new Error(`Cannot convert character ${str.charAt(i)} (code ${code}) to utf-8`)}}else{arr.push(code<128?code:63)}}return new Uint8Array(arr)}}exports.encodeString=encodeString;function decodeString(buffer){if(typeof TextDecoder!=="undefined"){const decoder=new TextDecoder;if(buffer instanceof Uint8Array){return decoder.decode(buffer)}const buf=Uint8Array.from(buffer);return decoder.decode(buf)}else if(typeof Buffer==="function"){if(buffer instanceof Array){buffer=Uint8Array.from(buffer)}if(!(buffer instanceof Buffer)&&"buffer"in buffer&&buffer.buffer instanceof ArrayBuffer){const typedArray=buffer;buffer=Buffer.from(typedArray.buffer,typedArray.byteOffset,typedArray.byteLength)}if(!(buffer instanceof Buffer)){throw new Error("Unsupported buffer argument")}return buffer.toString("utf-8")}else{if(!(buffer instanceof Uint8Array)&&"buffer"in buffer&&buffer["buffer"]instanceof ArrayBuffer){const typedArray=buffer;buffer=new Uint8Array(typedArray.buffer,typedArray.byteOffset,typedArray.byteLength)}if(buffer instanceof Buffer||buffer instanceof Array||buffer instanceof Uint8Array){let str="";for(let i=0;i128){if((code&240)===240){const b1=code,b2=buffer[i+1],b3=buffer[i+2],b4=buffer[i+3];code=(b1&7)<<18|(b2&63)<<12|(b3&63)<<6|b4&63;i+=3}else if((code&224)===224){const b1=code,b2=buffer[i+1],b3=buffer[i+2];code=(b1&15)<<12|(b2&63)<<6|b3&63;i+=2}else if((code&192)===192){const b1=code,b2=buffer[i+1];code=(b1&31)<<6|b2&63;i++}else{throw new Error("invalid utf-8 data")}}if(code>=65536){code^=65536;const p1=55296|code>>10;const p2=56320|code&1023;str+=String.fromCharCode(p1);str+=String.fromCharCode(p2)}else{str+=String.fromCharCode(code)}}return str}else{throw new Error("Unsupported buffer argument")}}}exports.decodeString=decodeString;function concatTypedArrays(a,b){const c=new a.constructor(a.length+b.length);c.set(a);c.set(b,a.length);return c}exports.concatTypedArrays=concatTypedArrays;function cloneObject(original,stack){var _a;if(((_a=original===null||original===void 0?void 0:original.constructor)===null||_a===void 0?void 0:_a.name)==="DataSnapshot"){throw new TypeError(`Object to clone is a DataSnapshot (path "${original.ref.path}")`)}const checkAndFixTypedArray=obj=>{if(obj!==null&&typeof obj==="object"&&typeof obj.constructor==="function"&&typeof obj.constructor.name==="string"&&["Buffer","Uint8Array","Int8Array","Uint16Array","Int16Array","Uint32Array","Int32Array","BigUint64Array","BigInt64Array"].includes(obj.constructor.name)){obj=obj.buffer.slice(obj.byteOffset,obj.byteOffset+obj.byteLength)}return obj};original=checkAndFixTypedArray(original);if(typeof original!=="object"||original===null||original instanceof Date||original instanceof ArrayBuffer||original instanceof path_reference_1.PathReference||original instanceof RegExp){return original}const cloneValue=val=>{if(stack.indexOf(val)>=0){throw new ReferenceError("object contains a circular reference")}val=checkAndFixTypedArray(val);if(val===null||val instanceof Date||val instanceof ArrayBuffer||val instanceof path_reference_1.PathReference||val instanceof RegExp){return val}else if(typeof val==="object"){stack.push(val);val=cloneObject(val,stack);stack.pop();return val}else{return val}};if(typeof stack==="undefined"){stack=[original]}const clone=original instanceof Array?[]:original instanceof partial_array_1.PartialArray?new partial_array_1.PartialArray:{};Object.keys(original).forEach((key=>{const val=original[key];if(typeof val==="function"){return}clone[key]=cloneValue(val)}));return clone}exports.cloneObject=cloneObject;const isTypedArray=val=>typeof val==="object"&&["ArrayBuffer","Buffer","Uint8Array","Uint16Array","Uint32Array","Int8Array","Int16Array","Int32Array"].includes(val.constructor.name);function valuesAreEqual(val1,val2){if(val1===val2){return true}if(typeof val1!==typeof val2){return false}if(typeof val1==="object"||typeof val2==="object"){if(val1===null||val2===null){return false}if(val1 instanceof path_reference_1.PathReference||val2 instanceof path_reference_1.PathReference){return val1 instanceof path_reference_1.PathReference&&val2 instanceof path_reference_1.PathReference&&val1.path===val2.path}if(val1 instanceof Date||val2 instanceof Date){return val1 instanceof Date&&val2 instanceof Date&&val1.getTime()===val2.getTime()}if(val1 instanceof Array||val2 instanceof Array){return val1 instanceof Array&&val2 instanceof Array&&val1.length===val2.length&&val1.every(((item,i)=>valuesAreEqual(val1[i],val2[i])))}if(isTypedArray(val1)||isTypedArray(val2)){if(!isTypedArray(val1)||!isTypedArray(val2)||val1.byteLength===val2.byteLength){return false}const typed1=val1 instanceof ArrayBuffer?new Uint8Array(val1):new Uint8Array(val1.buffer,val1.byteOffset,val1.byteLength),typed2=val2 instanceof ArrayBuffer?new Uint8Array(val2):new Uint8Array(val2.buffer,val2.byteOffset,val2.byteLength);return typed1.every(((val,i)=>typed2[i]===val))}const keys1=Object.keys(val1),keys2=Object.keys(val2);return keys1.length===keys2.length&&keys1.every((key=>keys2.includes(key)))&&keys1.every((key=>valuesAreEqual(val1[key],val2[key])))}return false}exports.valuesAreEqual=valuesAreEqual;class ObjectDifferences{constructor(added,removed,changed){this.added=added;this.removed=removed;this.changed=changed}forChild(key){if(this.added.includes(key)){return"added"}if(this.removed.includes(key)){return"removed"}const changed=this.changed.find((ch=>ch.key===key));return changed?changed.change:"identical"}}exports.ObjectDifferences=ObjectDifferences;function compareValues(oldVal,newVal,sortedResults=false){const voids=[undefined,null];if(oldVal===newVal){return"identical"}else if(voids.indexOf(oldVal)>=0&&voids.indexOf(newVal)<0){return"added"}else if(voids.indexOf(oldVal)<0&&voids.indexOf(newVal)>=0){return"removed"}else if(typeof oldVal!==typeof newVal){return"changed"}else if(isTypedArray(oldVal)||isTypedArray(newVal)){if(!isTypedArray(oldVal)||!isTypedArray(newVal)){return"changed"}const typed1=oldVal instanceof Uint8Array?oldVal:oldVal instanceof ArrayBuffer?new Uint8Array(oldVal):new Uint8Array(oldVal.buffer,oldVal.byteOffset,oldVal.byteLength);const typed2=newVal instanceof Uint8Array?newVal:newVal instanceof ArrayBuffer?new Uint8Array(newVal):new Uint8Array(newVal.buffer,newVal.byteOffset,newVal.byteLength);return typed1.byteLength===typed2.byteLength&&typed1.every(((val,i)=>typed2[i]===val))?"identical":"changed"}else if(oldVal instanceof Date||newVal instanceof Date){return oldVal instanceof Date&&newVal instanceof Date&&oldVal.getTime()===newVal.getTime()?"identical":"changed"}else if(oldVal instanceof path_reference_1.PathReference||newVal instanceof path_reference_1.PathReference){return oldVal instanceof path_reference_1.PathReference&&newVal instanceof path_reference_1.PathReference&&oldVal.path===newVal.path?"identical":"changed"}else if(typeof oldVal==="object"){const isArray=oldVal instanceof Array;const getKeys=obj=>{let keys=Object.keys(obj).filter((key=>!voids.includes(obj[key])));if(isArray){keys=keys.map((v=>parseInt(v)))}return keys};const oldKeys=getKeys(oldVal);const newKeys=getKeys(newVal);const removedKeys=oldKeys.filter((key=>!newKeys.includes(key)));const addedKeys=newKeys.filter((key=>!oldKeys.includes(key)));const changedKeys=newKeys.reduce(((changed,key)=>{if(oldKeys.includes(key)){const val1=oldVal[key];const val2=newVal[key];const c=compareValues(val1,val2);if(c!=="identical"){changed.push({key:key,change:c})}}return changed}),[]);if(addedKeys.length===0&&removedKeys.length===0&&changedKeys.length===0){return"identical"}else{return new ObjectDifferences(addedKeys,removedKeys,sortedResults?changedKeys.sort(((a,b)=>a.key{switch(compareResult){case"identical":return[];case"changed":return[{target:target,prev:prev,val:val}];case"added":return[{target:target,prev:null,val:val}];case"removed":return[{target:target,prev:prev,val:null}];default:{let changes=[];compareResult.added.forEach((key=>changes.push({target:target.concat(key),prev:null,val:val[key]})));compareResult.removed.forEach((key=>changes.push({target:target.concat(key),prev:prev[key],val:null})));compareResult.changed.forEach((item=>{const childChanges=process(target.concat(item.key),item.change,prev[item.key],val[item.key]);changes=changes.concat(childChanges)}));return changes}}};const compareResult=compareValues(oldVal,newVal,sortedResults);return process([],compareResult,oldVal,newVal)}exports.getMutations=getMutations;function getChildValues(childKey,oldValue,newValue){oldValue=oldValue===null?null:oldValue[childKey];if(typeof oldValue==="undefined"){oldValue=null}newValue=newValue===null?null:newValue[childKey];if(typeof newValue==="undefined"){newValue=null}return{oldValue:oldValue,newValue:newValue}}exports.getChildValues=getChildValues;function defer(fn){process_1.default.nextTick(fn)}exports.defer=defer}).call(this)}).call(this,require("buffer").Buffer)},{"./partial-array":15,"./path-reference":17,"./process":18,buffer:57}],27:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.BrowserAceBase=void 0;const acebase_local_1=require("./acebase-local");const indexed_db_1=require("./storage/custom/indexed-db");const deprecatedConstructorError=`Using AceBase constructor in the browser to use localStorage is deprecated!\nSwitch to:\nIndexedDB implementation (FASTER, MORE RELIABLE):\n let db = AceBase.WithIndexedDB(name, settings)\nOr, new LocalStorage implementation:\n let db = AceBase.WithLocalStorage(name, settings)\nOr, write your own CustomStorage adapter:\n let myCustomStorage = new CustomStorageSettings({ ... });\n let db = new AceBase(name, { storage: myCustomStorage })`;class BrowserAceBase extends acebase_local_1.AceBase{constructor(name,settings){if(typeof settings!=="object"||typeof settings.storage!=="object"){throw new Error(deprecatedConstructorError)}super(name,settings);this.settings.ipcEvents=settings.multipleTabs===true}static WithIndexedDB(dbname,init={}){return(0,indexed_db_1.createIndexedDBInstance)(dbname,init)}}exports.BrowserAceBase=BrowserAceBase},{"./acebase-local":28,"./storage/custom/indexed-db":47}],28:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AceBase=exports.AceBaseLocalSettings=exports.IndexedDBStorageSettings=exports.LocalStorageSettings=void 0;const acebase_core_1=require("acebase-core");const binary_1=require("./storage/binary");const api_local_1=require("./api-local");const local_storage_1=require("./storage/custom/local-storage");Object.defineProperty(exports,"LocalStorageSettings",{enumerable:true,get:function(){return local_storage_1.LocalStorageSettings}});const settings_1=require("./storage/custom/indexed-db/settings");Object.defineProperty(exports,"IndexedDBStorageSettings",{enumerable:true,get:function(){return settings_1.IndexedDBStorageSettings}});class AceBaseLocalSettings extends acebase_core_1.AceBaseBaseSettings{constructor(options={}){super(options);if(options.storage){this.storage=options.storage;if(options.ipc){this.storage.ipc=options.ipc}if(options.transactions){this.storage.transactions=options.transactions}}}}exports.AceBaseLocalSettings=AceBaseLocalSettings;class AceBase extends acebase_core_1.AceBaseBase{constructor(dbname,init={}){const settings=new AceBaseLocalSettings(init);super(dbname,settings);const apiSettings={db:this,settings:settings};this.api=new api_local_1.LocalApi(dbname,apiSettings,(()=>{this.emit("ready")}));this.recovery={repairNode:async(path,options)=>{if(this.api.storage instanceof binary_1.AceBaseStorage){await this.api.storage.repairNode(path,options)}else if(!this.api.storage.repairNode){throw new Error(`repairNode is not supported with chosen storage engine`)}}}}async close(){await this.api.storage.close()}get settings(){const ipc=this.api.storage.ipc,debug=this.debug;return{get logLevel(){return debug.level},set logLevel(level){debug.setLevel(level)},get ipcEvents(){return ipc.eventsEnabled},set ipcEvents(enabled){ipc.eventsEnabled=enabled}}}static WithLocalStorage(dbname,settings={}){const db=(0,local_storage_1.createLocalStorageInstance)(dbname,settings);return db}static WithIndexedDB(dbname,init={}){throw new Error(`IndexedDB storage can only be used in browser contexts`)}}exports.AceBase=AceBase},{"./api-local":29,"./storage/binary":43,"./storage/custom/indexed-db/settings":48,"./storage/custom/local-storage":50,"acebase-core":12}],29:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.LocalApi=void 0;const acebase_core_1=require("acebase-core");const binary_1=require("./storage/binary");const sqlite_1=require("./storage/sqlite");const mssql_1=require("./storage/mssql");const custom_1=require("./storage/custom");const node_value_types_1=require("./node-value-types");const query_1=require("./query");class LocalApi extends acebase_core_1.Api{constructor(dbname="default",init,readyCallback){super();this.db=init.db;const storageEnv={logLevel:init.settings.logLevel};if(typeof init.settings.storage==="object"){if(sqlite_1.SQLiteStorageSettings&&init.settings.storage instanceof sqlite_1.SQLiteStorageSettings){this.storage=new sqlite_1.SQLiteStorage(dbname,init.settings.storage,storageEnv)}else if(mssql_1.MSSQLStorageSettings&&init.settings.storage instanceof mssql_1.MSSQLStorageSettings){this.storage=new mssql_1.MSSQLStorage(dbname,init.settings.storage,storageEnv)}else if(custom_1.CustomStorageSettings&&init.settings.storage instanceof custom_1.CustomStorageSettings){this.storage=new custom_1.CustomStorage(dbname,init.settings.storage,storageEnv)}else{const storageSettings=init.settings.storage instanceof binary_1.AceBaseStorageSettings?init.settings.storage:new binary_1.AceBaseStorageSettings(init.settings.storage);this.storage=new binary_1.AceBaseStorage(dbname,storageSettings,storageEnv)}}else{this.storage=new binary_1.AceBaseStorage(dbname,new binary_1.AceBaseStorageSettings,storageEnv)}this.storage.on("ready",readyCallback)}async stats(options){return this.storage.stats}subscribe(path,event,callback){this.storage.subscriptions.add(path,event,callback)}unsubscribe(path,event,callback){this.storage.subscriptions.remove(path,event,callback)}async set(path,value,options={suppress_events:false,context:null}){const cursor=await this.storage.setNode(path,value,{suppress_events:options.suppress_events,context:options.context});return Object.assign({},cursor&&{cursor:cursor})}async update(path,updates,options={suppress_events:false,context:null}){const cursor=await this.storage.updateNode(path,updates,{suppress_events:options.suppress_events,context:options.context});return Object.assign({},cursor&&{cursor:cursor})}get transactionLoggingEnabled(){return this.storage.settings.transactions&&this.storage.settings.transactions.log===true}async get(path,options){if(!options){options={}}if(typeof options.include!=="undefined"&&!(options.include instanceof Array)){throw new TypeError(`options.include must be an array of key names`)}if(typeof options.exclude!=="undefined"&&!(options.exclude instanceof Array)){throw new TypeError(`options.exclude must be an array of key names`)}if(["undefined","boolean"].indexOf(typeof options.child_objects)<0){throw new TypeError(`options.child_objects must be a boolean`)}const node=await this.storage.getNode(path,options);return{value:node.value,context:{acebase_cursor:node.cursor},cursor:node.cursor}}async transaction(path,callback,options={suppress_events:false,context:null}){const cursor=await this.storage.transactNode(path,callback,{suppress_events:options.suppress_events,context:options.context});return Object.assign({},cursor&&{cursor:cursor})}async exists(path){const nodeInfo=await this.storage.getNodeInfo(path);return nodeInfo.exists}async query(path,query,options={snapshots:false}){const results=await(0,query_1.query)(this,path,query,options);return results}createIndex(path,key,options){return this.storage.indexes.create(path,key,options)}async getIndexes(){return this.storage.indexes.list()}async deleteIndex(filePath){return this.storage.indexes.delete(filePath)}async reflect(path,type,args){args=args||{};const getChildren=async(path,limit=50,skip=0,from=null)=>{if(typeof limit==="string"){limit=parseInt(limit)}if(typeof skip==="string"){skip=parseInt(skip)}if(["null","undefined"].includes(from)){from=null}const children=[];let n=0,stop=false,more=false;await this.storage.getChildren(path).next((childInfo=>{if(stop){more=true;return false}n++;const include=from!==null?childInfo.key>from:skip===0||n>skip;if(include){children.push(Object.assign({key:typeof childInfo.key==="string"?childInfo.key:childInfo.index,type:childInfo.valueTypeName,value:childInfo.value},typeof childInfo.address==="object"&&"pageNr"in childInfo.address&&{address:{pageNr:childInfo.address.pageNr,recordNr:childInfo.address.recordNr}}))}stop=limit>0&&children.length===limit})).catch((err=>{}));return{more:more,list:children}};switch(type){case"children":{const result=await getChildren(path,args.limit,args.skip,args.from);return result}case"info":{const info={key:"",exists:false,type:"unknown",value:undefined,address:undefined,children:{count:0,more:false,list:[]}};const nodeInfo=await this.storage.getNodeInfo(path,{include_child_count:args.child_count===true});info.key=typeof nodeInfo.key!=="undefined"?nodeInfo.key:nodeInfo.index;info.exists=nodeInfo.exists;info.type=nodeInfo.exists?nodeInfo.valueTypeName:undefined;info.value=nodeInfo.value;info.address=typeof nodeInfo.address==="object"&&"pageNr"in nodeInfo.address?{pageNr:nodeInfo.address.pageNr,recordNr:nodeInfo.address.recordNr}:undefined;const isObjectOrArray=nodeInfo.exists&&nodeInfo.address&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(nodeInfo.type);if(args.child_count===true){info.children={count:isObjectOrArray?nodeInfo.childCount:0}}else if(typeof args.child_limit==="number"&&args.child_limit>0){if(isObjectOrArray){info.children=await getChildren(path,args.child_limit,args.child_skip,args.child_from)}}return info}}}export(path,stream,options={format:"json",type_safe:true}){return this.storage.exportNode(path,stream,options)}import(path,read,options={format:"json",suppress_events:false,method:"set"}){return this.storage.importNode(path,read,options)}async setSchema(path,schema){return this.storage.setSchema(path,schema)}async getSchema(path){return this.storage.getSchema(path)}async getSchemas(){return this.storage.getSchemas()}async validateSchema(path,value,isUpdate){return this.storage.validateSchema(path,value,{updates:isUpdate})}async getMutations(filter){if(typeof this.storage.getMutations!=="function"){throw new Error("Used storage type does not support getMutations")}if(typeof filter!=="object"){throw new Error("No filter specified")}if(typeof filter.cursor!=="string"&&typeof filter.timestamp!=="number"){throw new Error("No cursor or timestamp given")}return this.storage.getMutations(filter)}async getChanges(filter){if(typeof this.storage.getChanges!=="function"){throw new Error("Used storage type does not support getChanges")}if(typeof filter!=="object"){throw new Error("No filter specified")}if(typeof filter.cursor!=="string"&&typeof filter.timestamp!=="number"){throw new Error("No cursor or timestamp given")}return this.storage.getChanges(filter)}}exports.LocalApi=LocalApi},{"./node-value-types":39,"./query":42,"./storage/binary":43,"./storage/custom":46,"./storage/mssql":55,"./storage/sqlite":56,"acebase-core":12}],30:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AsyncTaskBatch=void 0;class AsyncTaskBatch{constructor(limit=1e3,options){this.limit=limit;this.options=options;this.added=0;this.scheduled=[];this.running=0;this.results=[];this.done=false}async execute(task,index){var _a,_b;try{this.running++;const result=await task();this.results[index]=result;this.running--;if(this.running===0&&this.scheduled.length===0){this.done=true;(_a=this.doneCallback)===null||_a===void 0?void 0:_a.call(this,this.results)}else if(this.scheduled.length>0){const next=this.scheduled.shift();this.execute(next.task,next.index)}}catch(err){this.done=true;(_b=this.errorCallback)===null||_b===void 0?void 0:_b.call(this,err)}}add(task){var _a;if(this.done){throw new Error(`Cannot add to a batch that has already finished. Use wait option and start batch processing manually if you are adding tasks in an async loop`)}const index=this.added++;if(((_a=this.options)===null||_a===void 0?void 0:_a.wait)!==true&&this.running{this.doneCallback=resolve;this.errorCallback=reject}));return this.results}}exports.AsyncTaskBatch=AsyncTaskBatch},{}],31:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SchemaValidationError=exports.StorageSettings=exports.ICustomStorageNodeMetaData=exports.ICustomStorageNode=exports.CustomStorageHelpers=exports.CustomStorageSettings=exports.CustomStorageTransaction=exports.MSSQLStorageSettings=exports.SQLiteStorageSettings=exports.AceBaseStorageSettings=exports.IndexedDBStorageSettings=exports.LocalStorageSettings=exports.AceBaseLocalSettings=exports.AceBase=exports.PartialArray=exports.proxyAccess=exports.ID=exports.ObjectCollection=exports.TypeMappings=exports.PathReference=exports.EventSubscription=exports.EventStream=exports.DataReferencesArray=exports.DataSnapshotsArray=exports.DataReference=exports.DataSnapshot=void 0;const acebase_core_1=require("acebase-core");Object.defineProperty(exports,"DataReference",{enumerable:true,get:function(){return acebase_core_1.DataReference}});Object.defineProperty(exports,"DataSnapshot",{enumerable:true,get:function(){return acebase_core_1.DataSnapshot}});Object.defineProperty(exports,"EventSubscription",{enumerable:true,get:function(){return acebase_core_1.EventSubscription}});Object.defineProperty(exports,"PathReference",{enumerable:true,get:function(){return acebase_core_1.PathReference}});Object.defineProperty(exports,"TypeMappings",{enumerable:true,get:function(){return acebase_core_1.TypeMappings}});Object.defineProperty(exports,"ID",{enumerable:true,get:function(){return acebase_core_1.ID}});Object.defineProperty(exports,"proxyAccess",{enumerable:true,get:function(){return acebase_core_1.proxyAccess}});Object.defineProperty(exports,"DataSnapshotsArray",{enumerable:true,get:function(){return acebase_core_1.DataSnapshotsArray}});Object.defineProperty(exports,"ObjectCollection",{enumerable:true,get:function(){return acebase_core_1.ObjectCollection}});Object.defineProperty(exports,"DataReferencesArray",{enumerable:true,get:function(){return acebase_core_1.DataReferencesArray}});Object.defineProperty(exports,"EventStream",{enumerable:true,get:function(){return acebase_core_1.EventStream}});Object.defineProperty(exports,"PartialArray",{enumerable:true,get:function(){return acebase_core_1.PartialArray}});const acebase_local_1=require("./acebase-local");const acebase_browser_1=require("./acebase-browser");Object.defineProperty(exports,"AceBase",{enumerable:true,get:function(){return acebase_browser_1.BrowserAceBase}});const custom_1=require("./storage/custom");const acebase={AceBase:acebase_browser_1.BrowserAceBase,AceBaseLocalSettings:acebase_local_1.AceBaseLocalSettings,DataReference:acebase_core_1.DataReference,DataSnapshot:acebase_core_1.DataSnapshot,EventSubscription:acebase_core_1.EventSubscription,PathReference:acebase_core_1.PathReference,TypeMappings:acebase_core_1.TypeMappings,CustomStorageSettings:custom_1.CustomStorageSettings,CustomStorageTransaction:custom_1.CustomStorageTransaction,CustomStorageHelpers:custom_1.CustomStorageHelpers,ID:acebase_core_1.ID,proxyAccess:acebase_core_1.proxyAccess,DataSnapshotsArray:acebase_core_1.DataSnapshotsArray};window.acebase=acebase;window.AceBase=acebase_browser_1.BrowserAceBase;exports.default=acebase;var acebase_local_2=require("./acebase-local");Object.defineProperty(exports,"AceBaseLocalSettings",{enumerable:true,get:function(){return acebase_local_2.AceBaseLocalSettings}});Object.defineProperty(exports,"LocalStorageSettings",{enumerable:true,get:function(){return acebase_local_2.LocalStorageSettings}});Object.defineProperty(exports,"IndexedDBStorageSettings",{enumerable:true,get:function(){return acebase_local_2.IndexedDBStorageSettings}});var binary_1=require("./storage/binary");Object.defineProperty(exports,"AceBaseStorageSettings",{enumerable:true,get:function(){return binary_1.AceBaseStorageSettings}});var sqlite_1=require("./storage/sqlite");Object.defineProperty(exports,"SQLiteStorageSettings",{enumerable:true,get:function(){return sqlite_1.SQLiteStorageSettings}});var mssql_1=require("./storage/mssql");Object.defineProperty(exports,"MSSQLStorageSettings",{enumerable:true,get:function(){return mssql_1.MSSQLStorageSettings}});var custom_2=require("./storage/custom");Object.defineProperty(exports,"CustomStorageTransaction",{enumerable:true,get:function(){return custom_2.CustomStorageTransaction}});Object.defineProperty(exports,"CustomStorageSettings",{enumerable:true,get:function(){return custom_2.CustomStorageSettings}});Object.defineProperty(exports,"CustomStorageHelpers",{enumerable:true,get:function(){return custom_2.CustomStorageHelpers}});Object.defineProperty(exports,"ICustomStorageNode",{enumerable:true,get:function(){return custom_2.ICustomStorageNode}});Object.defineProperty(exports,"ICustomStorageNodeMetaData",{enumerable:true,get:function(){return custom_2.ICustomStorageNodeMetaData}});var storage_1=require("./storage");Object.defineProperty(exports,"StorageSettings",{enumerable:true,get:function(){return storage_1.StorageSettings}});Object.defineProperty(exports,"SchemaValidationError",{enumerable:true,get:function(){return storage_1.SchemaValidationError}})},{"./acebase-browser":27,"./acebase-local":28,"./storage":53,"./storage/binary":43,"./storage/custom":46,"./storage/mssql":55,"./storage/sqlite":56,"acebase-core":12}],32:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ArrayIndex=exports.GeoIndex=exports.FullTextIndex=exports.DataIndex=void 0;const not_supported_1=require("../not-supported");class DataIndex extends not_supported_1.NotSupported{}exports.DataIndex=DataIndex;class FullTextIndex extends not_supported_1.NotSupported{}exports.FullTextIndex=FullTextIndex;class GeoIndex extends not_supported_1.NotSupported{}exports.GeoIndex=GeoIndex;class ArrayIndex extends not_supported_1.NotSupported{}exports.ArrayIndex=ArrayIndex},{"../not-supported":40}],33:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.RemoteIPCPeer=exports.IPCPeer=void 0;const acebase_core_1=require("acebase-core");const ipc_1=require("./ipc");const not_supported_1=require("../not-supported");class IPCPeer extends ipc_1.AceBaseIPCPeer{constructor(storage){super(storage,acebase_core_1.ID.generate());this.masterPeerId=this.id;this.ipcType="browser.bcc";window.addEventListener("beforeunload",(()=>{this.exit()}));if(typeof window.BroadcastChannel!=="undefined"){this.channel=new BroadcastChannel(`acebase:${storage.name}`)}else{const listeners=[null];const notImplemented=()=>{throw new Error("Not implemented")};this.channel={name:`acebase:${storage.name}`,postMessage:message=>{const messageId=acebase_core_1.ID.generate(),key=`acebase:${storage.name}:${this.id}:${messageId}`,payload=JSON.stringify(acebase_core_1.Transport.serialize(message));localStorage.setItem(key,payload);setTimeout((()=>localStorage.removeItem(key)),10)},set onmessage(handler){listeners[0]=handler},set onmessageerror(handler){notImplemented()},close(){notImplemented()},addEventListener(event,callback){if(event!=="message"){notImplemented()}listeners.push(callback)},removeEventListener(event,callback){const i=listeners.indexOf(callback);i>=1&&listeners.splice(i,1)},dispatchEvent(event){listeners.forEach((callback=>{try{callback&&callback(event)}catch(err){console.error(err)}}));return true}};window.addEventListener("storage",(event=>{const[acebase,dbname,peerId,messageId]=event.key.split(":");if(acebase!=="acebase"||dbname!==storage.name||peerId===this.id||event.newValue===null){return}const message=acebase_core_1.Transport.deserialize(JSON.parse(event.newValue));this.channel.dispatchEvent({data:message})}))}this.channel.addEventListener("message",(async event=>{const message=event.data;if(message.to&&message.to!==this.id){return}storage.debug.verbose(`[BroadcastChannel] received: `,message);if(message.type==="hello"&&message.frompeer.id)).concat(this.id).filter((id=>id!==this.masterPeerId));this.masterPeerId=allPeerIds.sort()[0];storage.debug.log(`[BroadcastChannel] ${this.masterPeerId===this.id?"We are":`tab ${this.masterPeerId} is`} the new master. Requesting ${this._locks.length} locks (${this._locks.filter((r=>!r.granted)).length} pending)`);const requests=this._locks.splice(0);await Promise.all(requests.filter((req=>req.granted)).map((async req=>{let released,movedToParent;req.lock.release=()=>new Promise((resolve=>released=resolve));req.lock.moveToParent=()=>new Promise((resolve=>movedToParent=resolve));const lock=await this.lock({path:req.lock.path,write:req.lock.forWriting,tid:req.lock.tid,comment:req.lock.comment});if(movedToParent){const newLock=await lock.moveToParent();movedToParent(newLock)}if(released){await lock.release();released()}})));await Promise.all(requests.filter((req=>!req.granted)).map((async req=>{await this.lock(req.request)})))}return this.handleMessage(message)}));const helloMsg={type:"hello",from:this.id,data:undefined};this.sendMessage(helloMsg)}sendMessage(message){this.storage.debug.verbose(`[BroadcastChannel] sending: `,message);this.channel.postMessage(message)}}exports.IPCPeer=IPCPeer;class RemoteIPCPeer extends not_supported_1.NotSupported{}exports.RemoteIPCPeer=RemoteIPCPeer},{"../not-supported":40,"./ipc":34,"acebase-core":12}],34:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AceBaseIPCPeer=exports.AceBaseIPCPeerExitingError=void 0;const acebase_core_1=require("acebase-core");const node_lock_1=require("../node-lock");class AceBaseIPCPeerExitingError extends Error{constructor(message){super(`Exiting: ${message}`)}}exports.AceBaseIPCPeerExitingError=AceBaseIPCPeerExitingError;class AceBaseIPCPeer extends acebase_core_1.SimpleEventEmitter{constructor(storage,id,dbname=storage.name){super();this.storage=storage;this.id=id;this.dbname=dbname;this.ipcType="ipc";this.ourSubscriptions=[];this.remoteSubscriptions=[];this.peers=[];this._exiting=false;this._locks=[];this._requests=new Map;this._eventsEnabled=true;this._nodeLocker=new node_lock_1.NodeLocker(storage.debug,storage.settings.lockTimeout);storage.on("subscribe",(subscription=>{storage.debug.verbose(`database subscription being added on peer ${this.id}`);const remoteSubscription=this.remoteSubscriptions.find((sub=>sub.callback===subscription.callback));if(remoteSubscription){return}const othersAlreadyNotifying=this.ourSubscriptions.some((sub=>sub.event===subscription.event&&sub.path===subscription.path));this.ourSubscriptions.push(subscription);if(othersAlreadyNotifying){return}const message={type:"subscribe",from:this.id,data:{path:subscription.path,event:subscription.event}};this.sendMessage(message)}));storage.on("unsubscribe",(subscription=>{const remoteSubscription=this.remoteSubscriptions.find((sub=>sub.callback===subscription.callback));if(remoteSubscription){this.remoteSubscriptions.splice(this.remoteSubscriptions.indexOf(remoteSubscription),1);return}this.ourSubscriptions.filter((sub=>sub.path===subscription.path&&(!subscription.event||sub.event===subscription.event)&&(!subscription.callback||sub.callback===subscription.callback))).forEach((sub=>{this.ourSubscriptions.splice(this.ourSubscriptions.indexOf(sub),1);const message={type:"unsubscribe",from:this.id,data:{path:sub.path,event:sub.event}};this.sendMessage(message)}))}))}get isMaster(){return this.masterPeerId===this.id}async exit(code=0){if(this._exiting){return this.once("exit")}this._exiting=true;this.storage.debug.warn(`Received ${this.isMaster?"master":"worker "+this.id} process exit request`);if(this._locks.length>0){this.storage.debug.warn(`Waiting for ${this.isMaster?"master":"worker"} ${this.id} locks to clear`);await this.once("locks-cleared")}this.sayGoodbye(this.id);this.storage.debug.warn(`${this.isMaster?"Master":"Worker "+this.id} will now exit`);this.emitOnce("exit",code)}sayGoodbye(forPeerId){const bye={type:"bye",from:forPeerId,data:undefined};this.sendMessage(bye)}addPeer(id,sendReply=true){if(this._exiting){return}const peer=this.peers.find((w=>w.id===id));if(!peer){this.peers.push({id:id,lastSeen:Date.now()})}if(sendReply){const helloMessage={type:"hello",from:this.id,to:id,data:undefined};this.sendMessage(helloMessage);this.ourSubscriptions.forEach((sub=>{const message={type:"subscribe",from:this.id,to:id,data:{path:sub.path,event:sub.event}};this.sendMessage(message)}))}}removePeer(id,ignoreUnknown=false){if(this._exiting){return}const peer=this.peers.find((peer=>peer.id===id));if(!peer){if(!ignoreUnknown){throw new Error(`We are supposed to know this peer!`)}return}this.peers.splice(this.peers.indexOf(peer),1);const subscriptions=this.remoteSubscriptions.filter((sub=>sub.for===id));subscriptions.forEach((sub=>{this.remoteSubscriptions.splice(this.remoteSubscriptions.indexOf(sub),1);this.storage.subscriptions.remove(sub.path,sub.event,sub.callback)}))}addRemoteSubscription(peerId,details){if(this._exiting){return}if(this.remoteSubscriptions.some((sub=>sub.for===peerId&&sub.event===details.event&&sub.path===details.path))){return}const subscribeCallback=(err,path,val,previous,context)=>{const eventMessage={type:"event",from:this.id,to:peerId,path:details.path,event:details.event,data:{path:path,val:val,previous:previous,context:context}};this.sendMessage(eventMessage)};this.remoteSubscriptions.push({for:peerId,event:details.event,path:details.path,callback:subscribeCallback});this.storage.subscriptions.add(details.path,details.event,subscribeCallback)}cancelRemoteSubscription(peerId,details){const sub=this.remoteSubscriptions.find((sub=>sub.for===peerId&&sub.event===details.event&&sub.path===details.event));if(!sub){return}this.storage.subscriptions.remove(details.path,details.event,sub.callback)}async handleMessage(message){switch(message.type){case"hello":return this.addPeer(message.from,message.to!==this.id);case"bye":return this.removePeer(message.from,true);case"subscribe":return this.addRemoteSubscription(message.from,message.data);case"unsubscribe":return this.cancelRemoteSubscription(message.from,message.data);case"event":{if(!this._eventsEnabled){break}const eventMessage=message;const context=eventMessage.data.context||{};context.acebase_ipc={type:this.ipcType,origin:eventMessage.from};const subscriptions=this.ourSubscriptions.filter((sub=>sub.event===eventMessage.event&&sub.path===eventMessage.path));subscriptions.forEach((sub=>{sub.callback(null,eventMessage.data.path,eventMessage.data.val,eventMessage.data.previous,context)}));break}case"lock-request":{if(!this.isMaster){throw new Error(`Workers are not supposed to receive lock requests!`)}const request=message;const result={type:"lock-result",id:request.id,from:this.id,to:request.from,ok:true,data:undefined};try{const lock=await this.lock(request.data);result.data={id:lock.id,path:lock.path,tid:lock.tid,write:lock.forWriting,expires:lock.expires,comment:lock.comment}}catch(err){result.ok=false;result.reason=err.stack||err.message||err}return this.sendMessage(result)}case"lock-result":{if(this.isMaster){throw new Error(`Masters are not supposed to receive results for lock requests!`)}const result=message;const request=this._requests.get(result.id);if(typeof request!=="object"){throw new Error(`The request must be known to us!`)}if(result.ok){request.resolve(result.data)}else{request.reject(new Error(result.reason))}return}case"unlock-request":{if(!this.isMaster){throw new Error(`Workers are not supposed to receive unlock requests!`)}const request=message;const result={type:"unlock-result",id:request.id,from:this.id,to:request.from,ok:true,data:{id:request.data.id}};try{const lockInfo=this._locks.find((l=>{var _a;return((_a=l.lock)===null||_a===void 0?void 0:_a.id)===request.data.id}));await lockInfo.lock.release()}catch(err){result.ok=false;result.reason=err.stack||err.message||err}return this.sendMessage(result)}case"unlock-result":{if(this.isMaster){throw new Error(`Masters are not supposed to receive results for unlock requests!`)}const result=message;const request=this._requests.get(result.id);if(typeof request!=="object"){throw new Error(`The request must be known to us!`)}if(result.ok){request.resolve(result.data)}else{request.reject(new Error(result.reason))}return}case"move-lock-request":{if(!this.isMaster){throw new Error(`Workers are not supposed to receive move lock requests!`)}const request=message;const result={type:"lock-result",id:request.id,from:this.id,to:request.from,ok:true,data:undefined};try{let movedLock;const lockRequest=this._locks.find((r=>{var _a;return((_a=r.lock)===null||_a===void 0?void 0:_a.id)===request.data.id}));if(request.data.move_to==="parent"){movedLock=await lockRequest.lock.moveToParent()}else{throw new Error(`Unknown lock move_to "${request.data.move_to}"`)}lockRequest.lock=movedLock;result.data={id:movedLock.id,path:movedLock.path,tid:movedLock.tid,write:movedLock.forWriting,expires:movedLock.expires,comment:movedLock.comment}}catch(err){result.ok=false;result.reason=err.stack||err.message||err}return this.sendMessage(result)}case"notification":{return this.emit("notification",message)}case"request":{return this.emit("request",message)}case"result":{const result=message;const request=this._requests.get(result.id);if(typeof request!=="object"){throw new Error(`Result of unknown request received`)}if(result.ok){request.resolve(result.data)}else{request.reject(new Error(result.reason))}}}}async lock(details){if(this._exiting){const tidApproved=this._locks.find((l=>l.tid===details.tid&&l.granted));if(!tidApproved){throw new AceBaseIPCPeerExitingError("new transaction lock denied because the IPC peer is exiting")}}const removeLock=lockDetails=>{this._locks.splice(this._locks.indexOf(lockDetails),1);if(this._locks.length===0){this.emit("locks-cleared")}};if(this.isMaster){const lockInfo={tid:details.tid,granted:false,request:details,lock:null};this._locks.push(lockInfo);const lock=await this._nodeLocker.lock(details.path,details.tid,details.write,details.comment);lockInfo.tid=lock.tid;lockInfo.granted=true;const createIPCLock=lock=>({get id(){return lock.id},get tid(){return lock.tid},get path(){return lock.path},get forWriting(){return lock.forWriting},get expires(){return lock.expires},get comment(){return lock.comment},get state(){return lock.state},release:async()=>{await lock.release();removeLock(lockInfo)},moveToParent:async()=>{const parentLock=await lock.moveToParent();lockInfo.lock=createIPCLock(parentLock);return lockInfo.lock}});lockInfo.lock=createIPCLock(lock);return lockInfo.lock}else{const lockInfo={tid:details.tid,granted:false,request:details,lock:null};this._locks.push(lockInfo);const createIPCLock=result=>{lockInfo.granted=true;lockInfo.tid=result.tid;lockInfo.lock={id:result.id,tid:result.tid,path:result.path,forWriting:result.write,state:node_lock_1.LOCK_STATE.LOCKED,expires:result.expires,comment:result.comment,release:async()=>{const req={type:"unlock-request",id:acebase_core_1.ID.generate(),from:this.id,to:this.masterPeerId,data:{id:lockInfo.lock.id}};await this.request(req);lockInfo.lock.state=node_lock_1.LOCK_STATE.DONE;this.storage.debug.verbose(`Worker ${this.id} released lock ${lockInfo.lock.id} (tid ${lockInfo.lock.tid}, ${lockInfo.lock.comment}, "/${lockInfo.lock.path}", ${lockInfo.lock.forWriting?"write":"read"})`);removeLock(lockInfo)},moveToParent:async()=>{const req={type:"move-lock-request",id:acebase_core_1.ID.generate(),from:this.id,to:this.masterPeerId,data:{id:lockInfo.lock.id,move_to:"parent"}};let result;try{result=await this.request(req)}catch(err){lockInfo.lock.state=node_lock_1.LOCK_STATE.DONE;removeLock(lockInfo);throw err}lockInfo.lock=createIPCLock(result);return lockInfo.lock}};return lockInfo.lock};const req={type:"lock-request",id:acebase_core_1.ID.generate(),from:this.id,to:this.masterPeerId,data:details};let result,err;try{result=await this.request(req)}catch(e){err=e;result=null}if(err){removeLock(lockInfo);throw err}return createIPCLock(result)}}async request(req){let resolve,reject;const promise=new Promise(((rs,rj)=>{resolve=result=>{this._requests.delete(req.id);rs(result)};reject=err=>{this._requests.delete(req.id);rj(err)}}));this._requests.set(req.id,{resolve:resolve,reject:reject,request:req});this.sendMessage(req);return promise}sendRequest(request){const req={type:"request",from:this.id,to:this.masterPeerId,id:acebase_core_1.ID.generate(),data:request};return this.request(req).catch((err=>{this.storage.debug.error(err);throw err}))}replyRequest(requestMessage,result){const reply={type:"result",id:requestMessage.id,ok:true,from:this.id,to:requestMessage.from,data:result};this.sendMessage(reply)}sendNotification(notification){const msg={type:"notification",from:this.id,data:notification};this.sendMessage(msg)}get eventsEnabled(){return this._eventsEnabled}set eventsEnabled(enabled){this.storage.debug.log(`ipc events ${enabled?"enabled":"disabled"}`);this._eventsEnabled=enabled}}exports.AceBaseIPCPeer=AceBaseIPCPeer},{"../node-lock":38,"acebase-core":12}],35:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.RemovedNodeAddress=exports.NodeAddress=void 0;class NodeAddress{constructor(path){this.path=path}toString(){return`"/${this.path}"`}equals(address){return this.path===address.path}}exports.NodeAddress=NodeAddress;class RemovedNodeAddress extends NodeAddress{constructor(path){super(path)}toString(){return`"/${this.path}" (removed)`}equals(address){return address instanceof RemovedNodeAddress&&this.path===address.path}}exports.RemovedNodeAddress=RemovedNodeAddress},{}],36:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.NodeRevisionError=exports.NodeNotFoundError=void 0;class NodeNotFoundError extends Error{}exports.NodeNotFoundError=NodeNotFoundError;class NodeRevisionError extends Error{}exports.NodeRevisionError=NodeRevisionError},{}],37:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.NodeInfo=void 0;const node_value_types_1=require("./node-value-types");const acebase_core_1=require("acebase-core");class NodeInfo{constructor(info){this.path=info.path;this.type=info.type;this.index=info.index;this.key=info.key;this.exists=info.exists;this.address=info.address;this.value=info.value;this.childCount=info.childCount;if(typeof this.path==="string"&&(typeof this.key==="undefined"&&typeof this.index==="undefined")){const pathInfo=acebase_core_1.PathInfo.get(this.path);if(typeof pathInfo.key==="number"){this.index=pathInfo.key}else{this.key=pathInfo.key}}if(typeof this.exists==="undefined"){this.exists=true}}get valueType(){return this.type}get valueTypeName(){return(0,node_value_types_1.getValueTypeName)(this.valueType)}toString(){if(!this.exists){return`"${this.path}" doesn't exist`}if(this.address){return`"${this.path}" is ${this.valueTypeName} stored at ${this.address.toString()}`}else{return`"${this.path}" is ${this.valueTypeName} with value ${this.value}`}}}exports.NodeInfo=NodeInfo},{"./node-value-types":39,"acebase-core":12}],38:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.NodeLock=exports.NodeLocker=exports.LOCK_STATE=void 0;const acebase_core_1=require("acebase-core");const DEBUG_MODE=false;const DEFAULT_LOCK_TIMEOUT=120;exports.LOCK_STATE={PENDING:"pending",LOCKED:"locked",EXPIRED:"expired",DONE:"done"};class NodeLocker{constructor(debug,lockTimeout=DEFAULT_LOCK_TIMEOUT){this._locks=[];this._lastTid=0;this.debug=debug;this.timeout=lockTimeout*1e3}setTimeout(timeout){this.timeout=timeout*1e3}createTid(){return DEBUG_MODE?++this._lastTid:acebase_core_1.ID.generate()}_allowLock(path,tid,forWriting){const conflict=this._locks.find((otherLock=>otherLock.tid!==tid&&otherLock.state===exports.LOCK_STATE.LOCKED&&(forWriting||otherLock.forWriting)));return{allow:!conflict,conflict:conflict}}quit(){return new Promise((resolve=>{if(this._locks.length===0){return resolve()}this._quit=resolve}))}_rejectLock(lock,err){this._locks.splice(this._locks.indexOf(lock),1);clearTimeout(lock.timeout);try{lock.reject(err)}catch(err){console.error(`Unhandled promise rejection:`,err)}}_processLockQueue(){if(this._quit){const quitError=new Error("Quitting");this._locks.filter((lock=>lock.state===exports.LOCK_STATE.PENDING)).forEach((lock=>this._rejectLock(lock,quitError)));if(this._locks.length===0){this._quit()}}const pending=this._locks.filter((lock=>lock.state===exports.LOCK_STATE.PENDING)).sort(((a,b)=>{if(a.priority&&!b.priority){return-1}else if(!a.priority&&b.priority){return 1}return a.requested-b.requested}));pending.forEach((lock=>{const check=this._allowLock(lock.path,lock.tid,lock.forWriting);lock.waitingFor=check.conflict||null;if(check.allow){this.lock(lock).then(lock.resolve).catch((err=>this._rejectLock(lock,err)))}}))}async lock(path,tid,forWriting=true,comment="",options={withPriority:false,noTimeout:false}){let lock,proceed;if(path instanceof NodeLock){lock=path;proceed=true}else if(this._locks.findIndex((l=>l.tid===tid&&l.state===exports.LOCK_STATE.EXPIRED))>=0){throw new Error(`lock on tid ${tid} has expired, not allowed to continue`)}else if(this._quit&&!options.withPriority){throw new Error(`Quitting`)}else{DEBUG_MODE&&console.error(`${forWriting?"write":"read"} lock requested on "${path}" by tid ${tid} (${comment})`);lock=new NodeLock(this,path,tid,forWriting,options.withPriority===true);lock.comment=comment;this._locks.push(lock);const check=this._allowLock(path,tid,forWriting);lock.waitingFor=check.conflict||null;proceed=check.allow}if(proceed){DEBUG_MODE&&console.error(`${lock.forWriting?"write":"read"} lock ALLOWED on "${lock.path}" by tid ${lock.tid} (${lock.comment})`);lock.state=exports.LOCK_STATE.LOCKED;if(typeof lock.granted==="number"){}else{lock.granted=Date.now();if(options.noTimeout!==true){lock.expires=Date.now()+this.timeout;let timeoutCount=0;const timeoutHandler=()=>{if(lock.state!==exports.LOCK_STATE.LOCKED){return}timeoutCount++;if(timeoutCount<=3){this.debug.warn(`${lock.forWriting?"write":"read"} lock on path "/${lock.path}" by tid ${lock.tid} (${lock.comment}) is taking a long time to complete [${timeoutCount}]`);lock.timeout=setTimeout(timeoutHandler,this.timeout/4);return}this.debug.error(`lock :: ${lock.forWriting?"write":"read"} lock on path "/${lock.path}" by tid ${lock.tid} (${lock.comment}) took too long`);lock.state=exports.LOCK_STATE.EXPIRED;this._processLockQueue()};lock.timeout=setTimeout(timeoutHandler,this.timeout/4)}}return lock}else{console.assert(lock.state===exports.LOCK_STATE.PENDING);return new Promise(((resolve,reject)=>{lock.resolve=resolve;lock.reject=reject}))}}unlock(lockOrId,comment,processQueue=true){let lock,i;if(lockOrId instanceof NodeLock){lock=lockOrId;i=this._locks.indexOf(lock)}else{const id=lockOrId;i=this._locks.findIndex((l=>l.id===id));lock=this._locks[i]}if(i<0){const msg=`lock on "/${lock.path}" for tid ${lock.tid} wasn't found; ${comment}`;throw new Error(msg)}lock.state=exports.LOCK_STATE.DONE;clearTimeout(lock.timeout);this._locks.splice(i,1);DEBUG_MODE&&console.error(`${lock.forWriting?"write":"read"} lock RELEASED on "${lock.path}" by tid ${lock.tid}`);processQueue&&this._processLockQueue();return lock}list(){return this._locks||[]}isAllowed(path,tid,forWriting){return this._allowLock(path,tid,forWriting).allow}}exports.NodeLocker=NodeLocker;let lastid=0;class NodeLock{constructor(locker,path,tid,forWriting,priority=false){this.locker=locker;this.path=path;this.tid=tid;this.forWriting=forWriting;this.priority=priority;this.state=exports.LOCK_STATE.PENDING;this.requested=Date.now();this.comment="";this.waitingFor=null;this.id=++lastid;this.history=[]}static get LOCK_STATE(){return exports.LOCK_STATE}async release(comment){this.history.push({action:"release",path:this.path,forWriting:this.forWriting,comment:comment});return this.locker.unlock(this,comment||this.comment)}async moveToParent(){const parentPath=acebase_core_1.PathInfo.get(this.path).parentPath;const allowed=this.locker.isAllowed(parentPath,this.tid,this.forWriting);if(allowed){DEBUG_MODE&&console.error(`moveToParent ALLOWED for ${this.forWriting?"write":"read"} lock on "${this.path}" by tid ${this.tid} (${this.comment})`);this.history.push({path:this.path,forWriting:this.forWriting,action:"moving to parent"});this.waitingFor=null;this.path=parentPath;return this}else{DEBUG_MODE&&console.error(`moveToParent QUEUED for ${this.forWriting?"write":"read"} lock on "${this.path}" by tid ${this.tid} (${this.comment})`);this.locker.unlock(this,`moveLockToParent: ${this.comment}`,false);const newLock=await this.locker.lock(parentPath,this.tid,this.forWriting,this.comment,{withPriority:true});DEBUG_MODE&&console.error(`QUEUED moveToParent ALLOWED for ${this.forWriting?"write":"read"} lock on "${this.path}" by tid ${this.tid} (${this.comment})`);newLock.history=this.history;newLock.history.push({path:this.path,forWriting:this.forWriting,action:"moving to parent through queue (priority)"});return newLock}}}exports.NodeLock=NodeLock},{"acebase-core":12}],39:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.getValueType=exports.getNodeValueType=exports.getValueTypeName=exports.VALUE_TYPES=void 0;const acebase_core_1=require("acebase-core");exports.VALUE_TYPES=Object.freeze({OBJECT:1,ARRAY:2,NUMBER:3,BOOLEAN:4,STRING:5,BIGINT:7,DATETIME:6,BINARY:8,REFERENCE:9});function getValueTypeName(valueType){switch(valueType){case exports.VALUE_TYPES.ARRAY:return"array";case exports.VALUE_TYPES.BINARY:return"binary";case exports.VALUE_TYPES.BOOLEAN:return"boolean";case exports.VALUE_TYPES.DATETIME:return"date";case exports.VALUE_TYPES.NUMBER:return"number";case exports.VALUE_TYPES.OBJECT:return"object";case exports.VALUE_TYPES.REFERENCE:return"reference";case exports.VALUE_TYPES.STRING:return"string";case exports.VALUE_TYPES.BIGINT:return"bigint";default:"unknown"}}exports.getValueTypeName=getValueTypeName;function getNodeValueType(value){if(value instanceof Array){return exports.VALUE_TYPES.ARRAY}else if(value instanceof acebase_core_1.PathReference){return exports.VALUE_TYPES.REFERENCE}else if(value instanceof ArrayBuffer){return exports.VALUE_TYPES.BINARY}else if(typeof value==="string"){return exports.VALUE_TYPES.STRING}else if(typeof value==="object"){return exports.VALUE_TYPES.OBJECT}else if(typeof value==="bigint"){return exports.VALUE_TYPES.BIGINT}throw new Error(`Invalid value for standalone node: ${value}`)}exports.getNodeValueType=getNodeValueType;function getValueType(value){if(value instanceof Array){return exports.VALUE_TYPES.ARRAY}else if(value instanceof acebase_core_1.PathReference){return exports.VALUE_TYPES.REFERENCE}else if(value instanceof ArrayBuffer){return exports.VALUE_TYPES.BINARY}else if(value instanceof Date){return exports.VALUE_TYPES.DATETIME}else if(typeof value==="string"){return exports.VALUE_TYPES.STRING}else if(typeof value==="object"){return exports.VALUE_TYPES.OBJECT}else if(typeof value==="number"){return exports.VALUE_TYPES.NUMBER}else if(typeof value==="boolean"){return exports.VALUE_TYPES.BOOLEAN}else if(typeof value==="bigint"){return exports.VALUE_TYPES.BIGINT}throw new Error(`Unknown value type: ${value}`)}exports.getValueType=getValueType},{"acebase-core":12}],40:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.NotSupported=void 0;class NotSupported{constructor(context="browser"){throw new Error(`This feature is not supported in ${context} context`)}}exports.NotSupported=NotSupported},{}],41:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.pfs=void 0;class pfs{static get hasFileSystem(){return false}static get fs(){return null}}exports.pfs=pfs},{}],42:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.query=void 0;const acebase_core_1=require("acebase-core");const node_value_types_1=require("./node-value-types");const node_errors_1=require("./node-errors");const data_index_1=require("./data-index");const async_task_batch_1=require("./async-task-batch");const noop=()=>{};function query(api,path,query,options={snapshots:false,include:undefined,exclude:undefined,child_objects:undefined,eventHandler:noop}){var _a;if(typeof options!=="object"){options={}}if(typeof options.snapshots==="undefined"){options.snapshots=false}const context={};if((_a=api.storage.settings.transactions)===null||_a===void 0?void 0:_a.log){context.acebase_cursor=acebase_core_1.ID.generate()}const queryFilters=query.filters.map((f=>Object.assign({},f)));const querySort=query.order.map((s=>Object.assign({},s)));const sortMatches=matches=>{matches.sort(((a,b)=>{const compare=i=>{const o=querySort[i];const trailKeys=acebase_core_1.PathInfo.getPathKeys(typeof o.key==="number"?`[${o.key}]`:o.key);const left=trailKeys.reduce(((val,key)=>val!==null&&typeof val==="object"&&key in val?val[key]:null),a.val);const right=trailKeys.reduce(((val,key)=>val!==null&&typeof val==="object"&&key in val?val[key]:null),b.val);if(left===null){return right===null?0:o.ascending?-1:1}if(right===null){return o.ascending?1:-1}if(left==right){if(i{if(preResults.length===0){return[]}const maxBatchSize=50;const batch=new async_task_batch_1.AsyncTaskBatch(maxBatchSize);const results=[];preResults.forEach((({path:path},index)=>batch.add((async()=>{const node=await api.storage.getNode(path,options);const val=node.value;if(val===null){api.storage.debug.warn(`Indexed result "/${path}" does not have a record!`);return}const result={path:path,val:val};if(stepsExecuted.sorted){results[index]=result}else{results.push(result);if(!stepsExecuted.skipped&&results.length>query.skip+Math.abs(query.take)){sortMatches(results);results.pop()}}}))));await batch.finish();return results};const pathInfo=acebase_core_1.PathInfo.get(path);const isWildcardPath=pathInfo.keys.some((key=>key==="*"||key.toString().startsWith("$")));const availableIndexes=api.storage.indexes.get(path);const usingIndexes=[];if(isWildcardPath){if(availableIndexes.length===0){const err=new Error(`Query on wildcard path "/${path}" requires an index`);return Promise.reject(err)}if(queryFilters.length===0){const index=availableIndexes.filter((index=>index.type==="normal"))[0];queryFilters.push({key:index.key,op:"!=",compare:null})}}queryFilters.forEach((filter=>{if(filter.index){return}const indexesOnKey=availableIndexes.filter((index=>index.key===filter.key)).filter((index=>index.validOperators.includes(filter.op)));if(indexesOnKey.length>=1){const otherFilterKeys=queryFilters.filter((f=>f!==filter)).map((f=>f.key));const sortKeys=querySort.map((o=>o.key)).filter((key=>key!==filter.key));const beneficialIndexes=indexesOnKey.map((index=>{const availableKeys=index.includeKeys.concat(index.key);const forOtherFilters=availableKeys.filter((key=>otherFilterKeys.includes(key)));const forSorting=availableKeys.filter((key=>sortKeys.includes(key)));const forBoth=forOtherFilters.concat(forSorting.filter((index=>!forOtherFilters.includes(index))));const points={filters:forOtherFilters.length,sorting:forSorting.length*(query.take!==0?forSorting.length:1),both:forBoth.length*forBoth.length,get total(){return this.filters+this.sorting+this.both}};return{index:index,points:points.total,filterKeys:forOtherFilters,sortKeys:forSorting}}));beneficialIndexes.sort(((a,b)=>a.points>b.points?-1:1));const bestBenificialIndex=beneficialIndexes[0];filter.index=bestBenificialIndex.index;bestBenificialIndex.filterKeys.forEach((key=>{queryFilters.filter((f=>f!==filter&&f.key===key)).forEach((f=>{if(!data_index_1.DataIndex.validOperators.includes(f.op)){return}f.indexUsage="filter";f.index=bestBenificialIndex.index}))}));bestBenificialIndex.sortKeys.forEach((key=>{querySort.filter((s=>s.key===key)).forEach((s=>{s.index=bestBenificialIndex.index}))}))}if(filter.index){usingIndexes.push({index:filter.index,description:filter.index.description})}}));if(querySort.length>0&&query.take!==0&&queryFilters.length===0){querySort.forEach((sort=>{if(sort.index){return}sort.index=availableIndexes.filter((index=>index.key===sort.key)).find((index=>index.type==="normal"))}))}const indexDescriptions=usingIndexes.map((index=>index.description)).join(", ");usingIndexes.length>0&&api.storage.debug.log(`Using indexes for query: ${indexDescriptions}`);const tableScanFilters=queryFilters.filter((filter=>!filter.index));const specialOpsRegex=/^[a-z]+:/i;if(tableScanFilters.some((filter=>specialOpsRegex.test(filter.op)))){const f=tableScanFilters.find((filter=>specialOpsRegex.test(filter.op)));const err=new Error(`query contains operator "${f.op}" which requires a special index that was not found on path "${path}", key "${f.key}"`);return Promise.reject(err)}const allowedTableScanOperators=["<","<=","==","!=",">=",">","like","!like","in","!in","matches","!matches","between","!between","has","!has","contains","!contains","exists","!exists"];for(let i=0;i0){const keys=tableScanFilters.reduce(((keys,f)=>{if(keys.indexOf(f.key)<0){keys.push(f.key)}return keys}),[]).map((key=>`"${key}"`));const err=new Error(`This wildcard path query on "/${path}" requires index(es) on key(s): ${keys.join(", ")}. Create the index(es) and retry`);return Promise.reject(err)}const indexScanPromises=[];queryFilters.forEach((filter=>{if(filter.index&&filter.indexUsage!=="filter"){let promise=filter.index.query(filter.op,filter.compare).then((results=>{options.eventHandler&&options.eventHandler({name:"stats",type:"index_query",source:filter.index.description,stats:results.stats});if(results.hints.length>0){options.eventHandler&&options.eventHandler({name:"hints",type:"index_query",source:filter.index.description,hints:results.hints})}return results}));const resultFilters=queryFilters.filter((f=>f.index===filter.index&&f.indexUsage==="filter"));if(resultFilters.length>0){promise=promise.then((results=>{resultFilters.forEach((filter=>{const{key:key,op:op,index:index}=filter;let{compare:compare}=filter;if(typeof compare==="string"&&!index.caseSensitive){compare=compare.toLocaleLowerCase(index.textLocale)}results=results.filterMetadata(key,op,compare)}));return results}))}indexScanPromises.push(promise)}}));const stepsExecuted={filtered:queryFilters.length===0,skipped:query.skip===0,taken:query.take===0,sorted:querySort.length===0,preDataLoaded:false,dataLoaded:false};if(queryFilters.length===0&&query.take===0){api.storage.debug.warn(`Filterless queries must use .take to limit the results. Defaulting to 100 for query on path "${path}"`);query.take=100}if(querySort.length>0&&querySort[0].index){const sortIndex=querySort[0].index;const ascending=query.take<0?!querySort[0].ascending:querySort[0].ascending;if(queryFilters.length===0&&querySort.slice(1).every((s=>sortIndex.allMetadataKeys.includes(s.key)))){api.storage.debug.log(`Using index for sorting: ${sortIndex.description}`);const metadataSort=querySort.slice(1).map((s=>{s.index=sortIndex;return{key:s.key,ascending:s.ascending}}));const promise=sortIndex.take(query.skip,Math.abs(query.take),{ascending:ascending,metadataSort:metadataSort}).then((results=>{options.eventHandler&&options.eventHandler({name:"stats",type:"sort_index_take",source:sortIndex.description,stats:results.stats});if(results.hints.length>0){options.eventHandler&&options.eventHandler({name:"hints",type:"sort_index_take",source:sortIndex.description,hints:results.hints})}return results}));indexScanPromises.push(promise);stepsExecuted.skipped=true;stepsExecuted.taken=true;stepsExecuted.sorted=true}}return Promise.all(indexScanPromises).then((async indexResultSets=>{let indexedResults=[];if(indexResultSets.length===1){const resultSet=indexResultSets[0];indexedResults=resultSet.map((match=>{const result={key:match.key,path:match.path,val:{[resultSet.filterKey]:match.value}};match.metadata&&Object.assign(result.val,match.metadata);return result}));stepsExecuted.filtered=true}else if(indexResultSets.length>1){indexResultSets.sort(((a,b)=>a.length{const result={key:match.key,path:match.path,val:{[shortestSet.filterKey]:match.value}};const matchedInAllSets=otherSets.every((set=>set.findIndex((m=>m.path===match.path))>=0));if(matchedInAllSets){match.metadata&&Object.assign(result.val,match.metadata);otherSets.forEach((set=>{const otherResult=set.find((r=>r.path===result.path));result.val[set.filterKey]=otherResult.value;otherResult.metadata&&Object.assign(result.val,otherResult.metadata)}));results.push(result)}return results}),[]);stepsExecuted.filtered=true}if(isWildcardPath||indexScanPromises.length>0&&tableScanFilters.length===0){if(querySort.length===0||querySort.every((o=>o.index))){stepsExecuted.preDataLoaded=true;if(!stepsExecuted.sorted&&querySort.length>0){sortMatches(indexedResults)}stepsExecuted.sorted=true;if(!stepsExecuted.skipped&&query.skip>0){indexedResults=query.take<0?indexedResults.slice(0,-query.skip):indexedResults.slice(query.skip)}if(!stepsExecuted.taken&&query.take!==0){indexedResults=query.take<0?indexedResults.slice(query.take):indexedResults.slice(0,query.take)}stepsExecuted.skipped=true;stepsExecuted.taken=true;if(!options.snapshots){return indexedResults}const childOptions={include:options.include,exclude:options.exclude,child_objects:options.child_objects};return loadResultsData(indexedResults,childOptions).then((results=>{stepsExecuted.dataLoaded=true;return results}))}if(options.snapshots||!stepsExecuted.sorted){const loadPartialResults=querySort.length>0;const childOptions=loadPartialResults?{include:querySort.map((order=>order.key))}:{include:options.include,exclude:options.exclude,child_objects:options.child_objects};return loadResultsData(indexedResults,childOptions).then((results=>{if(querySort.length>0){sortMatches(results)}stepsExecuted.sorted=true;if(query.skip>0){results=query.take<0?results.slice(0,-query.skip):results.slice(query.skip)}if(query.take!==0){results=query.take<0?results.slice(query.take):results.slice(0,query.take)}stepsExecuted.skipped=true;stepsExecuted.taken=true;if(options.snapshots&&loadPartialResults){return loadResultsData(results,{include:options.include,exclude:options.exclude,child_objects:options.child_objects})}return results}))}else{return indexedResults}}let indexKeyFilter;if(indexedResults.length>0){indexKeyFilter=indexedResults.map((result=>result.key))}let matches=[];let preliminaryStop=false;const loadPartialData=querySort.length>0;const childOptions=loadPartialData?{include:querySort.map((order=>order.key))}:{include:options.include,exclude:options.exclude,child_objects:options.child_objects};const batch={promises:[],add(promise){this.promises.push(promise);if(this.promises.length>=1e3){return Promise.all(this.promises.splice(0)).then((_=>undefined))}}};try{await api.storage.getChildren(path,{keyFilter:indexKeyFilter,async:true}).next((child=>{if(child.type!==node_value_types_1.VALUE_TYPES.OBJECT){return}if(!child.address){return}if(preliminaryStop){return false}const matchNode=async()=>{const isMatch=await api.storage.matchNode(child.address.path,tableScanFilters);if(!isMatch){return}const childPath=child.address.path;let result;if(options.snapshots||querySort.length>0){const node=await api.storage.getNode(childPath,childOptions);result={path:childPath,val:node.value}}else{result={path:childPath}}matches.push(result);if(query.take!==0&&matches.length>Math.abs(query.take)+query.skip){if(querySort.length>0){sortMatches(matches)}else if(query.take>0){preliminaryStop=true}matches.pop()}};const p=batch.add(matchNode());if(p instanceof Promise){return p}}))}catch(reason){if(!(reason instanceof node_errors_1.NodeNotFoundError)){api.storage.debug.warn(`Error getting child stream: ${reason}`)}return[]}await Promise.all(batch.promises);stepsExecuted.preDataLoaded=loadPartialData;stepsExecuted.dataLoaded=!loadPartialData;if(querySort.length>0){sortMatches(matches)}stepsExecuted.sorted=true;if(query.skip>0){matches=query.take<0?matches.slice(0,-query.skip):matches.slice(query.skip)}stepsExecuted.skipped=true;if(query.take!==0){matches=query.take<0?matches.slice(query.take):matches.slice(0,query.take)}stepsExecuted.taken=true;if(!stepsExecuted.dataLoaded){matches=await loadResultsData(matches,{include:options.include,exclude:options.exclude,child_objects:options.child_objects});stepsExecuted.dataLoaded=true}return matches})).then((matches=>{if(!stepsExecuted.sorted&&querySort.length>0){sortMatches(matches)}if(!options.snapshots){matches=matches.map((match=>match.path))}if(!stepsExecuted.skipped&&query.skip>0){matches=query.take<0?matches.slice(0,-query.skip):matches.slice(query.skip)}if(!stepsExecuted.taken&&query.take!==0){matches=query.take<0?matches.slice(query.take):matches.slice(0,query.take)}if(options.monitor===true){options.monitor={add:true,change:true,remove:true}}let stop=async()=>{};if(typeof options.monitor==="object"&&(options.monitor.add||options.monitor.change||options.monitor.remove)){const matchedPaths=options.snapshots?matches.map((match=>match.path)):matches.slice();const ref=api.db.ref(path);const removeMatch=path=>{const index=matchedPaths.indexOf(path);if(index<0){return}matchedPaths.splice(index,1)};const addMatch=path=>{if(matchedPaths.includes(path)){return}matchedPaths.push(path)};const stopMonitoring=()=>{api.unsubscribe(ref.path,"child_changed",childChangedCallback);api.unsubscribe(ref.path,"child_added",childAddedCallback);api.unsubscribe(ref.path,"notify_child_removed",childRemovedCallback)};stop=async()=>{stopMonitoring()};const childChangedCallback=async(err,path,newValue,oldValue)=>{const wasMatch=matchedPaths.includes(path);let keepMonitoring=true;const checkKeys=[];queryFilters.forEach((f=>!checkKeys.includes(f.key)&&checkKeys.push(f.key)));const seenKeys=[];typeof oldValue==="object"&&Object.keys(oldValue).forEach((key=>!seenKeys.includes(key)&&seenKeys.push(key)));typeof newValue==="object"&&Object.keys(newValue).forEach((key=>!seenKeys.includes(key)&&seenKeys.push(key)));const missingKeys=[];let isMatch=seenKeys.every((key=>{if(!checkKeys.includes(key)){return true}const filters=queryFilters.filter((filter=>filter.key===key));return filters.every((filter=>{var _a;if(((_a=filter.index)===null||_a===void 0?void 0:_a.textLocaleKey)&&!seenKeys.includes(filter.index.textLocaleKey)){missingKeys.push(filter.index.textLocaleKey);return true}else if(allowedTableScanOperators.includes(filter.op)){return api.storage.test(newValue[key],filter.op,filter.compare)}else{return filter.index.test(newValue,filter.op,filter.compare)}}))}));if(isMatch){missingKeys.push(...checkKeys.filter((key=>!seenKeys.includes(key))));if(!wasMatch&&missingKeys.length>0){const filterQueue=queryFilters.filter((f=>missingKeys.includes(f.key)));const simpleFilters=filterQueue.filter((f=>allowedTableScanOperators.includes(f.op)));const indexFilters=filterQueue.filter((f=>!allowedTableScanOperators.includes(f.op)));if(simpleFilters.length>0){isMatch=await api.storage.matchNode(path,simpleFilters)}if(isMatch&&indexFilters.length>0){const keysToLoad=indexFilters.reduce(((keys,filter)=>{if(!keys.includes(filter.key)){keys.push(filter.key)}if(filter.index instanceof data_index_1.FullTextIndex&&filter.index.config.localeKey&&!keys.includes(filter.index.config.localeKey)){keys.push(filter.index.config.localeKey)}return keys}),[]);const node=await api.storage.getNode(path,{include:keysToLoad});if(node.value===null){return false}isMatch=indexFilters.every((filter=>filter.index.test(node.value,filter.op,filter.compare)))}}}if(isMatch){if(!wasMatch){addMatch(path)}if(options.snapshots){const loadOptions={include:options.include,exclude:options.exclude,child_objects:options.child_objects};const node=await api.storage.getNode(path,loadOptions);newValue=node.value}if(wasMatch&&options.monitor.change){keepMonitoring=options.eventHandler({name:"change",path:path,value:newValue})!==false}else if(!wasMatch&&options.monitor.add){keepMonitoring=options.eventHandler({name:"add",path:path,value:newValue})!==false}}else if(wasMatch){removeMatch(path);if(options.monitor.remove){keepMonitoring=options.eventHandler({name:"remove",path:path,value:oldValue})!==false}}if(keepMonitoring===false){stopMonitoring()}};const childAddedCallback=(err,path,newValue)=>{const isMatch=queryFilters.every((filter=>{if(allowedTableScanOperators.includes(filter.op)){return api.storage.test(newValue[filter.key],filter.op,filter.compare)}else{return filter.index.test(newValue,filter.op,filter.compare)}}));let keepMonitoring=true;if(isMatch){addMatch(path);if(options.monitor.add){keepMonitoring=options.eventHandler({name:"add",path:path,value:options.snapshots?newValue:null})!==false}}if(keepMonitoring===false){stopMonitoring()}};const childRemovedCallback=(err,path,newValue,oldValue)=>{let keepMonitoring=true;removeMatch(path);if(options.monitor.remove){keepMonitoring=options.eventHandler({name:"remove",path:path,value:options.snapshots?oldValue:null})!==false}if(keepMonitoring===false){stopMonitoring()}};if(options.monitor.add||options.monitor.change||options.monitor.remove){api.subscribe(ref.path,"child_changed",childChangedCallback)}if(options.monitor.remove){api.subscribe(ref.path,"notify_child_removed",childRemovedCallback)}if(options.monitor.add){api.subscribe(ref.path,"child_added",childAddedCallback)}}return{results:matches,context:context,stop:stop}}))}exports.query=query},{"./async-task-batch":30,"./data-index":32,"./node-errors":36,"./node-value-types":39,"acebase-core":12}],43:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AceBaseStorage=exports.AceBaseStorageSettings=void 0;const not_supported_1=require("../../not-supported");class AceBaseStorageSettings extends not_supported_1.NotSupported{}exports.AceBaseStorageSettings=AceBaseStorageSettings;class AceBaseStorage extends not_supported_1.NotSupported{}exports.AceBaseStorage=AceBaseStorage},{"../../not-supported":40}],44:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createIndex=void 0;const acebase_core_1=require("acebase-core");const data_index_1=require("../data-index");const promise_fs_1=require("../promise-fs");async function createIndex(context,path,key,options){if(!context.storage.indexes.supported){throw new Error("Indexes are not supported in current environment because it requires Node.js fs")}const{ipc:ipc,debug:debug,indexes:indexes,storage:storage}=context;const rebuild=options&&options.rebuild===true;const indexType=options&&options.type||"normal";let includeKeys=options&&options.include||[];if(typeof includeKeys==="string"){includeKeys=[includeKeys]}const existingIndex=indexes.find((index=>index.path===path&&index.key===key&&index.type===indexType&&index.includeKeys.length===includeKeys.length&&index.includeKeys.every(((key,index)=>includeKeys[index]===key))));if(existingIndex&&options.config){existingIndex.config=options.config}if(existingIndex&&rebuild!==true){debug.log(`Index on "/${path}/*/${key}" already exists`.colorize(acebase_core_1.ColorStyle.inverse));return existingIndex}if(!ipc.isMaster){const result=await ipc.sendRequest({type:"index.create",path:path,key:key,options:options});if(result.ok){return this.add(result.fileName)}throw new Error(result.reason)}await promise_fs_1.pfs.mkdir(`${storage.settings.path}/${storage.name}.acebase`).catch((err=>{if(err.code!=="EEXIST"){throw err}}));const index=existingIndex||(()=>{const{include:include,caseSensitive:caseSensitive,textLocale:textLocale,textLocaleKey:textLocaleKey}=options;const indexOptions={include:include,caseSensitive:caseSensitive,textLocale:textLocale,textLocaleKey:textLocaleKey};switch(indexType){case"array":return new data_index_1.ArrayIndex(storage,path,key,Object.assign({},indexOptions));case"fulltext":return new data_index_1.FullTextIndex(storage,path,key,Object.assign(Object.assign({},indexOptions),{config:options.config}));case"geo":return new data_index_1.GeoIndex(storage,path,key,Object.assign({},indexOptions));default:return new data_index_1.DataIndex(storage,path,key,Object.assign({},indexOptions))}})();if(!existingIndex){indexes.push(index)}try{await index.build()}catch(err){context.debug.error(`Index build on "/${path}/*/${key}" failed: ${err.message} (code: ${err.code})`.colorize(acebase_core_1.ColorStyle.red));if(!existingIndex){indexes.splice(indexes.indexOf(index),1)}throw err}ipc.sendNotification({type:"index.created",fileName:index.fileName,path:path,key:key,options:options});return index}exports.createIndex=createIndex},{"../data-index":32,"../promise-fs":41,"acebase-core":12}],45:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.CustomStorageHelpers=void 0;const acebase_core_1=require("acebase-core");class CustomStorageHelpers{static ChildPathsSql(path,columnName="path"){const where=path===""?`${columnName} <> '' AND ${columnName} NOT LIKE '%/%'`:`(${columnName} LIKE '${path}/%' OR ${columnName} LIKE '${path}[%') AND ${columnName} NOT LIKE '${path}/%/%' AND ${columnName} NOT LIKE '${path}[%]/%' AND ${columnName} NOT LIKE '${path}[%][%'`;return where}static ChildPathsRegex(path){return new RegExp(`^${path}(?:/[^/[]+|\\[[0-9]+\\])$`)}static DescendantPathsSql(path,columnName="path"){const where=path===""?`${columnName} <> ''`:`${columnName} LIKE '${path}/%' OR ${columnName} LIKE '${path}[%'`;return where}static DescendantPathsRegex(path){return new RegExp(`^${path}(?:/[^/[]+|\\[[0-9]+\\])`)}static get PathInfo(){return acebase_core_1.PathInfo}}exports.CustomStorageHelpers=CustomStorageHelpers},{"acebase-core":12}],46:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.CustomStorage=exports.CustomStorageNodeInfo=exports.CustomStorageNodeAddress=exports.CustomStorageSettings=exports.CustomStorageTransaction=exports.ICustomStorageNode=exports.ICustomStorageNodeMetaData=exports.CustomStorageHelpers=void 0;const acebase_core_1=require("acebase-core");const{compareValues:compareValues}=acebase_core_1.Utils;const node_info_1=require("../../node-info");const node_lock_1=require("../../node-lock");const node_value_types_1=require("../../node-value-types");const node_errors_1=require("../../node-errors");const index_1=require("../index");const helpers_1=require("./helpers");const node_address_1=require("../../node-address");var helpers_2=require("./helpers");Object.defineProperty(exports,"CustomStorageHelpers",{enumerable:true,get:function(){return helpers_2.CustomStorageHelpers}});class ICustomStorageNodeMetaData{constructor(){this.revision="";this.revision_nr=0;this.created=0;this.modified=0;this.type=0}}exports.ICustomStorageNodeMetaData=ICustomStorageNodeMetaData;class ICustomStorageNode extends ICustomStorageNodeMetaData{constructor(){super();this.value=null}}exports.ICustomStorageNode=ICustomStorageNode;class CustomStorageTransaction{constructor(target){this.production=false;this.target={get originalPath(){return target.path},path:target.path,get write(){return target.write}};this.id=acebase_core_1.ID.generate()}async getChildCount(path){let childCount=0;await this.childrenOf(path,{metadata:false,value:false},(()=>{childCount++;return false}));return childCount}async getMultiple(paths){const map=new Map;await Promise.all(paths.map((path=>this.get(path).then((val=>map.set(path,val))))));return map}async setMultiple(nodes){await Promise.all(nodes.map((({path:path,node:node})=>this.set(path,node))))}async removeMultiple(paths){await Promise.all(paths.map((path=>this.remove(path))))}async commit(){throw new Error(`CustomStorageTransaction.rollback must be overridden by subclass`)}async moveToParentPath(targetPath){const currentPath=this._lock&&this._lock.path||this.target.path;if(currentPath===targetPath){return targetPath}const pathInfo=helpers_1.CustomStorageHelpers.PathInfo.get(targetPath);if(pathInfo.isParentOf(currentPath)){if(this._lock){this._lock=await this._lock.moveToParent()}}else{throw new Error(`Locking issue. Locked path "${this._lock.path}" is not a child/descendant of "${targetPath}"`)}this.target.path=targetPath;return targetPath}}exports.CustomStorageTransaction=CustomStorageTransaction;class CustomStorageSettings extends index_1.StorageSettings{constructor(settings){super(settings);this.locking=true;if(typeof settings!=="object"){throw new Error("settings missing")}if(typeof settings.ready!=="function"){throw new Error(`ready must be a function`)}if(typeof settings.getTransaction!=="function"){throw new Error(`getTransaction must be a function`)}this.name=settings.name;this.locking=settings.locking!==false;if(this.locking){this.lockTimeout=typeof settings.lockTimeout==="number"?settings.lockTimeout:120}this.ready=settings.ready;const useLocking=this.locking;const nodeLocker=useLocking?new node_lock_1.NodeLocker(console,this.lockTimeout):null;this.getTransaction=async({path:path,write:write})=>{const transaction=await settings.getTransaction({path:path,write:write});console.assert(typeof transaction.id==="string",`transaction id not set`);const rollback=transaction.rollback;const commit=transaction.commit;transaction.commit=async()=>{const ret=await commit.call(transaction);if(useLocking){await transaction._lock.release("commit")}return ret};transaction.rollback=async reason=>{const ret=await rollback.call(transaction,reason);if(useLocking){await transaction._lock.release("rollback")}return ret};if(useLocking){transaction._lock=await nodeLocker.lock(path,transaction.id,write,`${this.name}::getTransaction`)}return transaction}}}exports.CustomStorageSettings=CustomStorageSettings;class CustomStorageNodeAddress{constructor(containerPath){this.path=containerPath}}exports.CustomStorageNodeAddress=CustomStorageNodeAddress;class CustomStorageNodeInfo extends node_info_1.NodeInfo{constructor(info){super(info);this.revision=info.revision;this.revision_nr=info.revision_nr;this.created=info.created;this.modified=info.modified}}exports.CustomStorageNodeInfo=CustomStorageNodeInfo;class CustomStorage extends index_1.Storage{constructor(dbname,settings,env){super(dbname,settings,env);this._customImplementation=settings;this._init()}async _init(){this.debug.log(`Database "${this.name}" details:`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Type: CustomStorage`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Path: ${this.settings.path}`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Max inline value size: ${this.settings.maxInlineValueSize}`.colorize(acebase_core_1.ColorStyle.dim));this.debug.log(`- Autoremove undefined props: ${this.settings.removeVoidProperties}`.colorize(acebase_core_1.ColorStyle.dim));await this._customImplementation.ready();const transaction=await this._customImplementation.getTransaction({path:"",write:true});const info=await this.getNodeInfo("",{transaction:transaction});if(!info.exists){await this._writeNode("",{},{transaction:transaction})}await transaction.commit();if(this.indexes.supported){await this.indexes.load()}this.emit("ready")}throwImplementationError(message){throw new Error(`CustomStorage "${this._customImplementation.name}" ${message}`)}_storeNode(path,node,options){const getTypedChildValue=val=>{if(val===null){throw new Error(`Not allowed to store null values. remove the property`)}else if(["string","number","boolean"].includes(typeof val)){return val}else if(val instanceof Date){return{type:node_value_types_1.VALUE_TYPES.DATETIME,value:val.getTime()}}else if(val instanceof acebase_core_1.PathReference){return{type:node_value_types_1.VALUE_TYPES.REFERENCE,value:val.path}}else if(val instanceof ArrayBuffer){return{type:node_value_types_1.VALUE_TYPES.BINARY,value:acebase_core_1.ascii85.encode(val)}}else if(typeof val==="object"){console.assert(Object.keys(val).length===0,"child object stored in parent can only be empty");return val}};const unprocessed=`Caller should have pre-processed the value by converting it to a string`;if(node.type===node_value_types_1.VALUE_TYPES.ARRAY&&node.value instanceof Array){console.warn(`Unprocessed array. ${unprocessed}`);const obj={};for(let i=0;i{node.value[key]=getTypedChildValue(original[key])}))}return options.transaction.set(path,node)}_processReadNodeValue(node){const getTypedChildValue=val=>{if(val.type===node_value_types_1.VALUE_TYPES.BINARY){return acebase_core_1.ascii85.decode(val.value)}else if(val.type===node_value_types_1.VALUE_TYPES.DATETIME){return new Date(val.value)}else if(val.type===node_value_types_1.VALUE_TYPES.REFERENCE){return new acebase_core_1.PathReference(val.value)}else{throw new Error(`Unhandled child value type ${val.type}`)}};switch(node.type){case node_value_types_1.VALUE_TYPES.ARRAY:case node_value_types_1.VALUE_TYPES.OBJECT:{const obj=node.value;Object.keys(obj).forEach((key=>{const item=obj[key];if(typeof item==="object"&&"type"in item){obj[key]=getTypedChildValue(item)}}));node.value=obj;break}case node_value_types_1.VALUE_TYPES.BINARY:{node.value=acebase_core_1.ascii85.decode(node.value);break}case node_value_types_1.VALUE_TYPES.REFERENCE:{node.value=new acebase_core_1.PathReference(node.value);break}case node_value_types_1.VALUE_TYPES.STRING:{break}default:throw new Error(`Invalid standalone record value type`)}}async _readNode(path,options){const node=await options.transaction.get(path);if(node===null){return null}if(typeof node!=="object"){this.throwImplementationError(`transaction.get must return an ICustomStorageNode object. Use JSON.parse if your set function stored it as a string`)}this._processReadNodeValue(node);return node}_getTypeFromStoredValue(val){let type;if(typeof val==="string"){type=node_value_types_1.VALUE_TYPES.STRING}else if(typeof val==="number"){type=node_value_types_1.VALUE_TYPES.NUMBER}else if(typeof val==="boolean"){type=node_value_types_1.VALUE_TYPES.BOOLEAN}else if(val instanceof Array){type=node_value_types_1.VALUE_TYPES.ARRAY}else if(typeof val==="object"){if("type"in val){const serialized=val;type=serialized.type;val=serialized.value;if(type===node_value_types_1.VALUE_TYPES.DATETIME){val=new Date(val)}else if(type===node_value_types_1.VALUE_TYPES.REFERENCE){val=new acebase_core_1.PathReference(val)}}else{type=node_value_types_1.VALUE_TYPES.OBJECT}}else{throw new Error(`Unknown value type`)}return{type:type,value:val}}async _writeNode(path,value,options){if(!options.merge&&this.valueFitsInline(value)&&path!==""){throw new Error(`invalid value to store in its own node`)}else if(path===""&&(typeof value!=="object"||value instanceof Array)){throw new Error(`Invalid root node value. Must be an object`)}if(typeof options.diff==="undefined"&&typeof options.currentValue!=="undefined"){const diff=compareValues(options.currentValue,value);if(options.merge&&typeof diff==="object"){diff.removed=diff.removed.filter((key=>value[key]===null))}options.diff=diff}if(options.diff==="identical"){return}const transaction=options.transaction;const currentRow=options.currentValue===null?null:await this._readNode(path,{transaction:transaction});if(options.merge&¤tRow){if(currentRow.type===node_value_types_1.VALUE_TYPES.ARRAY&&!(value instanceof Array)&&typeof value==="object"&&Object.keys(value).some((key=>isNaN(parseInt(key))))){throw new Error(`Cannot merge existing array of path "${path}" with an object`)}if(value instanceof Array&¤tRow.type!==node_value_types_1.VALUE_TYPES.ARRAY){throw new Error(`Cannot merge existing object of path "${path}" with an array`)}}const revision=options.revision||acebase_core_1.ID.generate();const mainNode={type:currentRow&¤tRow.type===node_value_types_1.VALUE_TYPES.ARRAY?node_value_types_1.VALUE_TYPES.ARRAY:node_value_types_1.VALUE_TYPES.OBJECT,value:{}};const childNodeValues={};if(value instanceof Array){mainNode.type=node_value_types_1.VALUE_TYPES.ARRAY;const obj={};for(let i=0;i{if(!(key in value)){value[key]=null}}))}Object.keys(value).forEach((key=>{const val=value[key];delete mainNode.value[key];if(val===null){return}else if(typeof val==="undefined"){if(this.settings.removeVoidProperties===true){delete value[key];return}else{throw new Error(`Property "${key}" has invalid value. Cannot store undefined values. Set removeVoidProperties option to true to automatically remove undefined properties`)}}if(this.valueFitsInline(val)){mainNode.value[key]=val}else{childNodeValues[key]=val}}))}const isArray=mainNode.type===node_value_types_1.VALUE_TYPES.ARRAY;if(currentRow){this.debug.log(`Node "/${path}" is being ${options.merge?"updated":"overwritten"}`.colorize(acebase_core_1.ColorStyle.cyan));if(currentIsObjectOrArray||newIsObjectOrArray){const pathInfo=acebase_core_1.PathInfo.get(path);const keys=[];let checkExecuted=false;const includeChildCheck=childPath=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isParentOf(childPath)){this.throwImplementationError(`"${childPath}" is not a child of "${path}" - childrenOf must only check and return paths that are children`)}return true};const addChildPath=childPath=>{if(!checkExecuted){this.throwImplementationError(`childrenOf did not call checkCallback before addCallback`)}const key=acebase_core_1.PathInfo.get(childPath).key;keys.push(key.toString());return true};await transaction.childrenOf(path,{metadata:false,value:false},includeChildCheck,addChildPath);children.current=children.current.concat(keys);if(newIsObjectOrArray){if(options&&options.merge){children.new=children.current.slice()}Object.keys(value).forEach((key=>{if(!children.new.includes(key)){children.new.push(key)}}))}const changes={insert:children.new.filter((key=>!children.current.includes(key))),update:[],delete:options&&options.merge?Object.keys(value).filter((key=>value[key]===null)):children.current.filter((key=>!children.new.includes(key)))};changes.update=children.new.filter((key=>children.current.includes(key)&&!changes.delete.includes(key)));if(isArray&&options.merge&&(changes.insert.length>0||changes.delete.length>0)){const newArrayKeys=changes.update.concat(changes.insert);const isExhaustive=newArrayKeys.every(((k,index,arr)=>arr.includes(index.toString())));if(!isExhaustive){throw new Error(`Elements cannot be inserted beyond, or removed before the end of an array. Rewrite the whole array at path "${path}" or change your schema to use an object collection instead`)}}const writePromises=Object.keys(childNodeValues).map((key=>{const keyOrIndex=isArray?parseInt(key):key;const childDiff=typeof options.diff==="object"?options.diff.forChild(keyOrIndex):undefined;if(childDiff==="identical"){return}const childPath=pathInfo.childPath(keyOrIndex);const childValue=childNodeValues[keyOrIndex];const currentChildValue=typeof options.currentValue==="undefined"?undefined:options.currentValue!==null&&typeof options.currentValue==="object"&&keyOrIndex in options.currentValue?options.currentValue[keyOrIndex]:null;return this._writeNode(childPath,childValue,{transaction:transaction,revision:revision,merge:false,currentValue:currentChildValue,diff:childDiff})}));const movingNodes=newIsObjectOrArray?keys.filter((key=>key in mainNode.value)):[];const deleteDedicatedKeys=changes.delete.concat(movingNodes);const deletePromises=deleteDedicatedKeys.map((key=>{const keyOrIndex=isArray?parseInt(key):key;const childPath=pathInfo.childPath(keyOrIndex);return this._deleteNode(childPath,{transaction:transaction})}));const promises=writePromises.concat(deletePromises);await Promise.all(promises)}const p=this._storeNode(path,{type:mainNode.type,value:mainNode.value,revision:currentRow.revision,revision_nr:currentRow.revision_nr+1,created:currentRow.created,modified:Date.now()},{transaction:transaction});if(p instanceof Promise){return await p}}else{this.debug.log(`Node "/${path}" is being created`.colorize(acebase_core_1.ColorStyle.cyan));if(isArray){const arrayKeys=Object.keys(mainNode.value).concat(Object.keys(childNodeValues));const isExhaustive=arrayKeys.every(((k,index,arr)=>arr.includes(index.toString())));if(!isExhaustive){throw new Error(`Cannot store arrays with missing entries`)}}const promises=Object.keys(childNodeValues).map((key=>{const keyOrIndex=isArray?parseInt(key):key;const childPath=acebase_core_1.PathInfo.getChildPath(path,keyOrIndex);const childValue=childNodeValues[keyOrIndex];return this._writeNode(childPath,childValue,{transaction:transaction,revision:revision,merge:false,currentValue:null})}));const p=this._storeNode(path,{type:mainNode.type,value:mainNode.value,revision:revision,revision_nr:1,created:Date.now(),modified:Date.now()},{transaction:transaction});if(p instanceof Promise){promises.push(p)}await Promise.all(promises)}}async _deleteNode(path,options){const pathInfo=acebase_core_1.PathInfo.get(path);this.debug.log(`Node "/${path}" is being deleted`.colorize(acebase_core_1.ColorStyle.cyan));const deletePaths=[path];let checkExecuted=false;const includeDescendantCheck=descPath=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isAncestorOf(descPath)){this.throwImplementationError(`"${descPath}" is not a descendant of "${path}" - descendantsOf must only check and return paths that are descendants`)}return true};const addDescendant=descPath=>{if(!checkExecuted){this.throwImplementationError(`descendantsOf did not call checkCallback before addCallback`)}deletePaths.push(descPath);return true};const transaction=options.transaction;await transaction.descendantsOf(path,{metadata:false,value:false},includeDescendantCheck,addDescendant);this.debug.log(`Nodes ${deletePaths.map((p=>`"/${p}"`)).join(",")} are being deleted`.colorize(acebase_core_1.ColorStyle.cyan));return transaction.removeMultiple(deletePaths)}getChildren(path,options={}){let callback;const generator={next(valueCallback){callback=valueCallback;return start()}};const start=async()=>{const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:false});try{let canceled=false;await(async()=>{const node=await this._readNode(path,{transaction:transaction});if(!node){throw new node_errors_1.NodeNotFoundError(`Node "/${path}" does not exist`)}if(![node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(node.type)){return}const isArray=node.type===node_value_types_1.VALUE_TYPES.ARRAY;const value=node.value;let keys=Object.keys(value).map((key=>isArray?parseInt(key):key));if(options.keyFilter){keys=keys.filter((key=>options.keyFilter.includes(key)))}const pathInfo=acebase_core_1.PathInfo.get(path);keys.length>0&&keys.every((key=>{const child=this._getTypeFromStoredValue(value[key]);const info=new CustomStorageNodeInfo({path:pathInfo.childPath(key),key:isArray?null:key,index:isArray?key:null,type:child.type,address:null,exists:true,value:child.value,revision:node.revision,revision_nr:node.revision_nr,created:new Date(node.created),modified:new Date(node.modified)});canceled=callback(info)===false;return!canceled}));if(canceled){return}let checkExecuted=false;const includeChildCheck=childPath=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isParentOf(childPath)){this.throwImplementationError(`"${childPath}" is not a child of "${path}" - childrenOf must only check and return paths that are children`)}if(options.keyFilter){const key=acebase_core_1.PathInfo.get(childPath).key;return options.keyFilter.includes(key)}return true};const addChildNode=(childPath,node)=>{if(!checkExecuted){this.throwImplementationError(`childrenOf did not call checkCallback before addCallback`)}const key=acebase_core_1.PathInfo.get(childPath).key;const info=new CustomStorageNodeInfo({path:childPath,type:node.type,key:isArray?null:key,index:isArray?key:null,address:new node_address_1.NodeAddress(childPath),exists:true,value:null,revision:node.revision,revision_nr:node.revision_nr,created:new Date(node.created),modified:new Date(node.modified)});canceled=callback(info)===false;return!canceled};await transaction.childrenOf(path,{metadata:true,value:false},includeChildCheck,addChildNode)})();if(!options.transaction){await transaction.commit()}return canceled}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}};return generator}async getNode(path,options){options=options||{};const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:false});try{const node=await(async()=>{const filtered=options.include&&options.include.length>0||options.exclude&&options.exclude.length>0||options.child_objects===false;const pathInfo=acebase_core_1.PathInfo.get(path);const targetNode=await this._readNode(path,{transaction:transaction});if(!targetNode){if(path===""){return{value:null}}const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);const parentNode=await this._readNode(pathInfo.parentPath,{transaction:transaction});if(parentNode&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(parentNode.type)&&pathInfo.key in parentNode.value){const childValueInfo=this._getTypeFromStoredValue(parentNode.value[pathInfo.key]);return{revision:parentNode.revision,revision_nr:parentNode.revision_nr,created:parentNode.created,modified:parentNode.modified,type:childValueInfo.type,value:childValueInfo.value}}return{value:null}}const isArray=targetNode.type===node_value_types_1.VALUE_TYPES.ARRAY;const convertFilterArray=arr=>{const isNumber=key=>/^[0-9]+$/.test(key);return arr.map((path=>acebase_core_1.PathInfo.get(isArray&&isNumber(path)?`[${path}]`:path)))};const includeFilter=options.include?convertFilterArray(options.include):[];const excludeFilter=options.exclude?convertFilterArray(options.exclude):[];const applyFiltersOnInlineData=(descPath,node)=>{if([node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(node.type)&&includeFilter.length>0){const trailKeys=acebase_core_1.PathInfo.getPathKeys(descPath).slice(pathInfo.keys.length);const checkPathInfo=new acebase_core_1.PathInfo(trailKeys);const remove=[];const includes=includeFilter.filter((info=>info.isDescendantOf(checkPathInfo)));if(includes.length>0){const isArray=node.type===node_value_types_1.VALUE_TYPES.ARRAY;remove.push(...Object.keys(node.value).map((key=>isArray?+key:key)));for(const info of includes){const targetProp=info.keys[trailKeys.length];if(typeof targetProp==="string"&&(targetProp==="*"||targetProp.startsWith("$"))){remove.splice(0);break}const index=remove.indexOf(targetProp);index>=0&&remove.splice(index,1)}}const hasIncludeOnChild=includeFilter.some((info=>info.isChildOf(checkPathInfo)));const hasExcludeOnChild=excludeFilter.some((info=>info.isChildOf(checkPathInfo)));if(hasExcludeOnChild&&!hasIncludeOnChild){const excludes=excludeFilter.filter((info=>info.isChildOf(checkPathInfo)));for(let i=0;iinfo.equals(remove[i])))){remove.splice(i,1);i--}}}for(const key of remove){delete node.value[key]}}};applyFiltersOnInlineData(path,targetNode);let checkExecuted=false;const includeDescendantCheck=(descPath,metadata)=>{checkExecuted=true;if(!transaction.production&&!pathInfo.isAncestorOf(descPath)){this.throwImplementationError(`"${descPath}" is not a descendant of "${path}" - descendantsOf must only check and return paths that are descendants`)}if(!filtered){return true}const descPathKeys=acebase_core_1.PathInfo.getPathKeys(descPath);const trailKeys=descPathKeys.slice(pathInfo.keys.length);const checkPathInfo=new acebase_core_1.PathInfo(trailKeys);let include=(includeFilter.length>0?includeFilter.some((info=>checkPathInfo.isOnTrailOf(info))):true)&&(excludeFilter.length>0?!excludeFilter.some((info=>info.equals(checkPathInfo)||info.isAncestorOf(checkPathInfo))):true);if(include&&options.child_objects===false&&(pathInfo.isParentOf(descPath)&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(metadata?metadata.type:-1)||acebase_core_1.PathInfo.getPathKeys(descPath).length>pathInfo.pathKeys.length+1)){include=false}return include};const descRows=[];const addDescendant=(descPath,node)=>{if(!checkExecuted){this.throwImplementationError("descendantsOf did not call checkCallback before addCallback")}if(options.child_objects===false&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(node.type)){return true}applyFiltersOnInlineData(descPath,node);this._processReadNodeValue(node);const row=node;row.path=descPath;descRows.push(row);return true};await transaction.descendantsOf(path,{metadata:true,value:true},includeDescendantCheck,addDescendant);this.debug.log(`Read node "/${path}" and ${filtered?"(filtered) ":""}descendants from ${descRows.length+1} records`.colorize(acebase_core_1.ColorStyle.magenta));const result=targetNode;const objectToArray=obj=>{const arr=[];Object.keys(obj).forEach((key=>{const index=parseInt(key);arr[index]=obj[index]}));return arr};if(targetNode.type===node_value_types_1.VALUE_TYPES.ARRAY){result.value=objectToArray(result.value)}if(targetNode.type===node_value_types_1.VALUE_TYPES.OBJECT||targetNode.type===node_value_types_1.VALUE_TYPES.ARRAY){const targetPathKeys=acebase_core_1.PathInfo.getPathKeys(path);const value=targetNode.value;for(let i=0;i{if(childKey in parent[key]){this.throwImplementationError(`Custom storage merge error: child key "${childKey}" is in parent value already! Make sure the get/childrenOf/descendantsOf methods of the custom storage class return values that can be modified by AceBase without affecting the stored source`)}parent[key][childKey]=nodeValue[childKey]}))}}else{parent[key]=nodeValue}parent=parent[key]}}}else if(descRows.length>0){this.throwImplementationError(`multiple records found for non-object value!`)}if(options.child_objects===false){Object.keys(result.value).forEach((key=>{if(typeof result.value[key]==="object"&&result.value[key].constructor===Object){console.assert(Object.keys(result.value[key]).length===0);delete result.value[key]}}))}if(options.include){}if(options.exclude){const process=(obj,keys)=>{if(typeof obj!=="object"){return}const key=keys[0];if(key==="*"){Object.keys(obj).forEach((k=>{process(obj[k],keys.slice(1))}))}else if(keys.length>1){key in obj&&process(obj[key],keys.slice(1))}else{delete obj[key]}};options.exclude.forEach((path=>{const checkKeys=acebase_core_1.PathInfo.getPathKeys(path);process(result.value,checkKeys)}))}return result})();if(!options.transaction){await transaction.commit()}return node}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}async getNodeInfo(path,options={}){options=options||{};const pathInfo=acebase_core_1.PathInfo.get(path);const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:false});try{const node=await this._readNode(path,{transaction:transaction});const info=new CustomStorageNodeInfo({path:path,key:typeof pathInfo.key==="string"?pathInfo.key:null,index:typeof pathInfo.key==="number"?pathInfo.key:null,type:node?node.type:0,exists:node!==null,address:node?new node_address_1.NodeAddress(path):null,created:node?new Date(node.created):null,modified:node?new Date(node.modified):null,revision:node?node.revision:null,revision_nr:node?node.revision_nr:null});if(!node&&path!==""){const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);const parent=await this._readNode(pathInfo.parentPath,{transaction:transaction});if(parent&&[node_value_types_1.VALUE_TYPES.OBJECT,node_value_types_1.VALUE_TYPES.ARRAY].includes(parent.type)&&pathInfo.key in parent.value){info.exists=true;info.value=parent.value[pathInfo.key];info.address=null;info.type=parent.type;info.created=new Date(parent.created);info.modified=new Date(parent.modified);info.revision=parent.revision;info.revision_nr=parent.revision_nr}else{info.address=null}}if(options.include_child_count){info.childCount=0;if([node_value_types_1.VALUE_TYPES.ARRAY,node_value_types_1.VALUE_TYPES.OBJECT].includes(info.valueType)&&info.address){info.childCount=node.value?Object.keys(node.value).length:0;info.childCount+=await transaction.getChildCount(path)}}if(!options.transaction){await transaction.commit()}return info}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}async setNode(path,value,options={suppress_events:false,context:null}){if(this.settings.readOnly){throw new Error(`Database is opened in read-only mode`)}const pathInfo=acebase_core_1.PathInfo.get(path);const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:true});try{if(path===""){if(value===null||typeof value!=="object"||value instanceof Array||value instanceof ArrayBuffer||"buffer"in value&&value.buffer instanceof ArrayBuffer){throw new Error(`Invalid value for root node: ${value}`)}await this._writeNodeWithTracking("",value,{merge:false,transaction:transaction,suppress_events:options.suppress_events,context:options.context})}else if(typeof options.assert_revision!=="undefined"){const info=await this.getNodeInfo(path,{transaction:transaction});if(info.revision!==options.assert_revision){throw new node_errors_1.NodeRevisionError(`revision '${info.revision}' does not match requested revision '${options.assert_revision}'`)}if(info.address&&info.address.path===path&&value!==null&&!this.valueFitsInline(value)){await this._writeNodeWithTracking(path,value,{merge:false,transaction:transaction,suppress_events:options.suppress_events,context:options.context})}else{const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this._writeNodeWithTracking(pathInfo.parentPath,{[pathInfo.key]:value},{merge:true,transaction:transaction,suppress_events:options.suppress_events,context:options.context})}}else{const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this.updateNode(pathInfo.parentPath,{[pathInfo.key]:value},{transaction:transaction,suppress_events:options.suppress_events,context:options.context})}if(!options.transaction){await transaction.commit()}}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}async updateNode(path,updates,options={suppress_events:false,context:null}){if(this.settings.readOnly){throw new Error(`Database is opened in read-only mode`)}if(typeof updates!=="object"){throw new Error(`invalid updates argument`)}else if(Object.keys(updates).length===0){return}const transaction=options.transaction||await this._customImplementation.getTransaction({path:path,write:true});try{const nodeInfo=await this.getNodeInfo(path,{transaction:transaction});const pathInfo=acebase_core_1.PathInfo.get(path);if(nodeInfo.exists&&nodeInfo.address&&nodeInfo.address.path===path){await this._writeNodeWithTracking(path,updates,{transaction:transaction,merge:true,suppress_events:options.suppress_events,context:options.context})}else if(nodeInfo.exists){const pathInfo=acebase_core_1.PathInfo.get(path);const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this._writeNodeWithTracking(pathInfo.parentPath,{[pathInfo.key]:updates},{transaction:transaction,merge:true,suppress_events:options.suppress_events,context:options.context})}else{const lockPath=await transaction.moveToParentPath(pathInfo.parentPath);console.assert(lockPath===pathInfo.parentPath,`transaction.moveToParentPath() did not move to the right parent path of "${path}"`);await this.updateNode(pathInfo.parentPath,{[pathInfo.key]:updates},{transaction:transaction,suppress_events:options.suppress_events,context:options.context})}if(!options.transaction){await transaction.commit()}}catch(err){if(!options.transaction){await transaction.rollback(err)}throw err}}}exports.CustomStorage=CustomStorage},{"../../node-address":35,"../../node-errors":36,"../../node-info":37,"../../node-lock":38,"../../node-value-types":39,"../index":53,"./helpers":45,"acebase-core":12}],47:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createIndexedDBInstance=void 0;const acebase_core_1=require("acebase-core");const __1=require("..");const __2=require("../../..");const settings_1=require("./settings");const transaction_1=require("./transaction");function createIndexedDBInstance(dbname,init={}){const settings=new settings_1.IndexedDBStorageSettings(init);const IndexedDB=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;const request=IndexedDB.open(`${dbname}.acebase`,1);request.onupgradeneeded=e=>{const db=request.result;db.createObjectStore("nodes",{keyPath:"path"});db.createObjectStore("content")};let idb;const readyPromise=new Promise(((resolve,reject)=>{request.onsuccess=e=>{idb=request.result;resolve()};request.onerror=e=>{reject(e)}}));const cache=new acebase_core_1.SimpleCache(typeof settings.cacheSeconds==="number"?settings.cacheSeconds:60);const storageSettings=new __1.CustomStorageSettings({name:"IndexedDB",locking:true,removeVoidProperties:settings.removeVoidProperties,maxInlineValueSize:settings.maxInlineValueSize,lockTimeout:settings.lockTimeout,ready(){return readyPromise},async getTransaction(target){await readyPromise;const context={debug:false,db:idb,cache:cache,ipc:ipc};return new transaction_1.IndexedDBStorageTransaction(context,target)}});const db=new __2.AceBase(dbname,{logLevel:settings.logLevel,storage:storageSettings,sponsor:settings.sponsor});const ipc=db.api.storage.ipc;db.settings.ipcEvents=settings.multipleTabs===true;ipc.on("notification",(async notification=>{const message=notification.data;if(typeof message!=="object"){return}if(message.action==="cache.invalidate"){for(const path of message.paths){cache.remove(path)}}}));return db}exports.createIndexedDBInstance=createIndexedDBInstance},{"..":46,"../../..":31,"./settings":48,"./transaction":49,"acebase-core":12}],48:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.IndexedDBStorageSettings=void 0;const __1=require("../..");class IndexedDBStorageSettings extends __1.StorageSettings{constructor(settings){super(settings);this.multipleTabs=false;this.cacheSeconds=60;this.sponsor=false;if(typeof settings.logLevel==="string"){this.logLevel=settings.logLevel}if(typeof settings.multipleTabs==="boolean"){this.multipleTabs=settings.multipleTabs}if(typeof settings.cacheSeconds==="number"){this.cacheSeconds=settings.cacheSeconds}if(typeof settings.sponsor==="boolean"){this.sponsor=settings.sponsor}["type","ipc","path"].forEach((prop=>{if(prop in settings){console.warn(`${prop} setting is not supported for AceBase IndexedDBStorage`)}}))}}exports.IndexedDBStorageSettings=IndexedDBStorageSettings},{"../..":53}],49:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.IndexedDBStorageTransaction=void 0;const __1=require("..");function _requestToPromise(request){return new Promise(((resolve,reject)=>{request.onsuccess=event=>resolve(request.result||null);request.onerror=reject}))}class IndexedDBStorageTransaction extends __1.CustomStorageTransaction{constructor(context,target){super(target);this.context=context;this.production=true;this._pending=[]}_createTransaction(write=false){const tx=this.context.db.transaction(["nodes","content"],write?"readwrite":"readonly");return tx}_splitMetadata(node){const value=node.value;const copy=Object.assign({},node);delete copy.value;const metadata=copy;return{metadata:metadata,value:value}}async commit(){if(this._pending.length===0){return}const batch=this._pending.splice(0);this.context.ipc.sendNotification({action:"cache.invalidate",paths:batch.map((op=>op.path))});const tx=this._createTransaction(true);try{await new Promise(((resolve,reject)=>{let stop=false,processed=0;const handleError=err=>{stop=true;reject(err)};const handleSuccess=()=>{if(++processed===batch.length){resolve()}};batch.forEach(((op,i)=>{if(stop){return}let r1,r2;const path=op.path;if(op.action==="set"){const{metadata:metadata,value:value}=this._splitMetadata(op.node);const nodeInfo={path:path,metadata:metadata};r1=tx.objectStore("nodes").put(nodeInfo);r2=tx.objectStore("content").put(value,path);this.context.cache.set(path,op.node)}else if(op.action==="remove"){r1=tx.objectStore("content").delete(path);r2=tx.objectStore("nodes").delete(path);this.context.cache.set(path,null)}else{handleError(new Error(`Unknown pending operation "${op.action}" on path "${path}" `))}let succeeded=0;r1.onsuccess=r2.onsuccess=()=>{if(++succeeded===2){handleSuccess()}};r1.onerror=r2.onerror=handleError}))}));tx.commit&&tx.commit()}catch(err){console.error(err);tx.abort&&tx.abort();throw err}}async rollback(err){this._pending=[]}async get(path){if(this.context.cache.has(path)){const cache=this.context.cache.get(path);return cache}const tx=this._createTransaction(false);const r1=_requestToPromise(tx.objectStore("nodes").get(path));const r2=_requestToPromise(tx.objectStore("content").get(path));try{const results=await Promise.all([r1,r2]);tx.commit&&tx.commit();const info=results[0];if(!info){this.context.cache.set(path,null);return null}const node=info.metadata;node.value=results[1];this.context.cache.set(path,node);return node}catch(err){console.error(`IndexedDB get error`,err);tx.abort&&tx.abort();throw err}}set(path,node){this._pending.push({action:"set",path:path,node:node})}remove(path){this._pending.push({action:"remove",path:path})}async removeMultiple(paths){paths.forEach((path=>{this._pending.push({action:"remove",path:path})}))}childrenOf(path,include,checkCallback,addCallback){return this._getChildrenOf(path,Object.assign(Object.assign({},include),{descendants:false}),checkCallback,addCallback)}descendantsOf(path,include,checkCallback,addCallback){return this._getChildrenOf(path,Object.assign(Object.assign({},include),{descendants:true}),checkCallback,addCallback)}_getChildrenOf(path,include,checkCallback,addCallback){return new Promise(((resolve,reject)=>{const pathInfo=__1.CustomStorageHelpers.PathInfo.get(path);const tx=this._createTransaction(false);const store=tx.objectStore("nodes");const query=IDBKeyRange.lowerBound(path,true);const cursor=include.metadata?store.openCursor(query):store.openKeyCursor(query);cursor.onerror=e=>{var _a;(_a=tx.abort)===null||_a===void 0?void 0:_a.call(tx);reject(e)};cursor.onsuccess=async e=>{var _a,_b,_c;const otherPath=(_b=(_a=cursor.result)===null||_a===void 0?void 0:_a.key)!==null&&_b!==void 0?_b:null;let keepGoing=true;if(otherPath===null){keepGoing=false}else if(!pathInfo.isAncestorOf(otherPath)){keepGoing=false}else if(include.descendants||pathInfo.isParentOf(otherPath)){let node;if(include.metadata){const valueCursor=cursor;const data=valueCursor.result.value;node=data.metadata}const shouldAdd=checkCallback(otherPath,node);if(shouldAdd){if(include.value){if(this.context.cache.has(otherPath)){const cache=this.context.cache.get(otherPath);node.value=cache.value}else{const req=tx.objectStore("content").get(otherPath);node.value=await new Promise(((resolve,reject)=>{req.onerror=e=>{resolve(null)};req.onsuccess=e=>{resolve(req.result)}}));this.context.cache.set(otherPath,node.value===null?null:node)}}keepGoing=addCallback(otherPath,node)}}if(keepGoing){try{cursor.result.continue()}catch(err){keepGoing=false}}if(!keepGoing){(_c=tx.commit)===null||_c===void 0?void 0:_c.call(tx);resolve()}}}))}}exports.IndexedDBStorageTransaction=IndexedDBStorageTransaction},{"..":46}],50:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createLocalStorageInstance=exports.LocalStorageTransaction=exports.LocalStorageSettings=void 0;const __1=require("..");const __2=require("../../..");const settings_1=require("./settings");Object.defineProperty(exports,"LocalStorageSettings",{enumerable:true,get:function(){return settings_1.LocalStorageSettings}});const transaction_1=require("./transaction");Object.defineProperty(exports,"LocalStorageTransaction",{enumerable:true,get:function(){return transaction_1.LocalStorageTransaction}});function createLocalStorageInstance(dbname,init={}){const settings=new settings_1.LocalStorageSettings(init);const localStorage=settings.provider?settings.provider:settings.temp?window.localStorage:window.sessionStorage;const storageSettings=new __1.CustomStorageSettings({name:"LocalStorage",locking:true,removeVoidProperties:settings.removeVoidProperties,maxInlineValueSize:settings.maxInlineValueSize,ready(){return Promise.resolve()},getTransaction(target){const context={debug:true,dbname:dbname,localStorage:localStorage};const transaction=new transaction_1.LocalStorageTransaction(context,target);return Promise.resolve(transaction)}});const db=new __2.AceBase(dbname,{logLevel:settings.logLevel,storage:storageSettings,sponsor:settings.sponsor});db.settings.ipcEvents=settings.multipleTabs===true;return db}exports.createLocalStorageInstance=createLocalStorageInstance},{"..":46,"../../..":31,"./settings":51,"./transaction":52}],51:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.LocalStorageSettings=void 0;const __1=require("../..");class LocalStorageSettings extends __1.StorageSettings{constructor(settings){super(settings);this.temp=false;this.multipleTabs=false;if(typeof settings.temp==="boolean"){this.temp=settings.temp}if(typeof settings.provider==="object"){this.provider=settings.provider}if(typeof settings.multipleTabs==="boolean"){this.multipleTabs=settings.multipleTabs}if(typeof settings.logLevel==="string"){this.logLevel=settings.logLevel}if(typeof settings.sponsor==="boolean"){this.sponsor=settings.sponsor}["type","ipc","path"].forEach((prop=>{if(prop in settings){console.warn(`${prop} setting is not supported for AceBase LocalStorage`)}}))}}exports.LocalStorageSettings=LocalStorageSettings},{"../..":53}],52:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.LocalStorageTransaction=void 0;const __1=require("..");class LocalStorageTransaction extends __1.CustomStorageTransaction{constructor(context,target){super(target);this.context=context;this._storageKeysPrefix=`${this.context.dbname}.acebase::`}async commit(){}async rollback(err){}async get(path){const json=this.context.localStorage.getItem(this.getStorageKeyForPath(path));const val=JSON.parse(json);return val}async set(path,val){const json=JSON.stringify(val);this.context.localStorage.setItem(this.getStorageKeyForPath(path),json)}async remove(path){this.context.localStorage.removeItem(this.getStorageKeyForPath(path))}async childrenOf(path,include,checkCallback,addCallback){const pathInfo=__1.CustomStorageHelpers.PathInfo.get(path);for(let i=0;i`notify_${event}`)));const NOOP=()=>{};class SchemaValidationError extends Error{constructor(reason){super(`Schema validation failed: ${reason}`);this.reason=reason}}exports.SchemaValidationError=SchemaValidationError;class StorageSettings{constructor(settings={}){this.maxInlineValueSize=50;this.removeVoidProperties=false;this.path=".";this.lockTimeout=120;this.type="data";this.readOnly=false;if(typeof settings.maxInlineValueSize==="number"){this.maxInlineValueSize=settings.maxInlineValueSize}if(typeof settings.removeVoidProperties==="boolean"){this.removeVoidProperties=settings.removeVoidProperties}if(typeof settings.path==="string"){this.path=settings.path}if(this.path.endsWith("/")){this.path=this.path.slice(0,-1)}if(typeof settings.lockTimeout==="number"){this.lockTimeout=settings.lockTimeout}if(typeof settings.type==="string"){this.type=settings.type}if(typeof settings.readOnly==="boolean"){this.readOnly=settings.readOnly}if(typeof settings.ipc==="object"){this.ipc=settings.ipc}}}exports.StorageSettings=StorageSettings;class Storage extends acebase_core_1.SimpleEventEmitter{constructor(name,settings,env){super();this.name=name;this.settings=settings;this._schemas=[];this._indexes=[];this.indexes={get supported(){return promise_fs_1.pfs===null||promise_fs_1.pfs===void 0?void 0:promise_fs_1.pfs.hasFileSystem},create:(path,key,options={rebuild:false})=>{const context={storage:this,debug:this.debug,indexes:this._indexes,ipc:this.ipc};return(0,indexes_1.createIndex)(context,path,key,options)},get:(path,key=null)=>{if(path.includes("$")){const pathKeys=acebase_core_1.PathInfo.getPathKeys(path).map((key=>typeof key==="string"&&key.startsWith("$")?"*":key));path=new acebase_core_1.PathInfo(pathKeys).path}return this._indexes.filter((index=>index.path===path&&(key===null||key===index.key)))},getAll:(targetPath,options={parentPaths:true,childPaths:true})=>{const pathKeys=acebase_core_1.PathInfo.getPathKeys(targetPath);return this._indexes.filter((index=>{const indexKeys=acebase_core_1.PathInfo.getPathKeys(index.path+"/*");if(options.parentPaths&&indexKeys.every(((key,i)=>key==="*"||pathKeys[i]===key))&&[index.key].concat(...index.includeKeys).includes(pathKeys[indexKeys.length])){return true}else if(indexKeys.length[key,"*"].includes(indexKeys[i])))}))},list:()=>this._indexes.slice(),load:async()=>{this._indexes.splice(0);if(!promise_fs_1.pfs.hasFileSystem){return}let files=[];try{files=await promise_fs_1.pfs.readdir(`${this.settings.path}/${this.name}.acebase`)}catch(err){if(err.code!=="ENOENT"){this.debug.error(err)}}const promises=[];files.forEach((fileName=>{if(!fileName.endsWith(".idx")){return}const needsStoragePrefix=this.settings.type!=="data";const hasStoragePrefix=/^\[[a-z]+\]-/.test(fileName);if(!needsStoragePrefix&&!hasStoragePrefix||needsStoragePrefix&&fileName.startsWith(`[${this.settings.type}]-`)){const p=this.indexes.add(fileName);promises.push(p)}}));await Promise.all(promises)},add:async fileName=>{try{const index=await data_index_1.DataIndex.readFromFile(this,fileName);this._indexes.push(index);return index}catch(err){this.debug.error(err);return null}},delete:async fileName=>{const index=await this.indexes.remove(fileName);await index.delete();this.ipc.sendNotification({type:"index.deleted",fileName:index.fileName,path:index.path,keys:index.key})},remove:async fileName=>{const index=this._indexes.find((index=>index.fileName===fileName));if(!index){throw new Error(`Index ${fileName} not found`)}this._indexes.splice(this._indexes.indexOf(index),1);return index},close:async()=>{const promises=this.indexes.list().map((index=>index.close().catch((err=>this.debug.error(err)))));await Promise.all(promises)}};this._eventSubscriptions={};this.subscriptions={add:(path,type,callback)=>{if(SUPPORTED_EVENTS.indexOf(type)<0){throw new TypeError(`Invalid event type "${type}"`)}let pathSubs=this._eventSubscriptions[path];if(!pathSubs){pathSubs=this._eventSubscriptions[path]=[]}pathSubs.push({created:Date.now(),type:type,callback:callback});this.emit("subscribe",{path:path,event:type,callback:callback})},remove:(path,type,callback)=>{const pathSubs=this._eventSubscriptions[path];if(!pathSubs){return}const next=()=>pathSubs.findIndex((ps=>(type?ps.type===type:true)&&(callback?ps.callback===callback:true)));let i;while((i=next())>=0){pathSubs.splice(i,1)}this.emit("unsubscribe",{path:path,event:type,callback:callback})},hasValueSubscribersForPath(path){const valueNeeded=this.getValueSubscribersForPath(path);return!!valueNeeded},getValueSubscribersForPath:path=>{const pathInfo=new acebase_core_1.PathInfo(path);const valueSubscribers=[];Object.keys(this._eventSubscriptions).forEach((subscriptionPath=>{if(pathInfo.equals(subscriptionPath)||pathInfo.isDescendantOf(subscriptionPath)){const pathSubs=this._eventSubscriptions[subscriptionPath];const eventPath=acebase_core_1.PathInfo.fillVariables(subscriptionPath,path);pathSubs.filter((sub=>!sub.type.startsWith("notify_"))).forEach((sub=>{let dataPath=null;if(sub.type==="value"){dataPath=eventPath}else if(["mutated","mutations"].includes(sub.type)&&pathInfo.isDescendantOf(eventPath)){dataPath=path}else if(sub.type==="child_changed"&&path!==eventPath){const childKey=acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}else if(["child_added","child_removed"].includes(sub.type)&&pathInfo.isChildOf(eventPath)){const childKey=acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}if(dataPath!==null&&!valueSubscribers.some((s=>s.type===sub.type&&s.eventPath===eventPath))){valueSubscribers.push({type:sub.type,eventPath:eventPath,dataPath:dataPath,subscriptionPath:subscriptionPath})}}))}}));return valueSubscribers},getAllSubscribersForPath:path=>{const pathInfo=acebase_core_1.PathInfo.get(path);const subscribers=[];Object.keys(this._eventSubscriptions).forEach((subscriptionPath=>{if(pathInfo.isOnTrailOf(subscriptionPath)){const pathSubs=this._eventSubscriptions[subscriptionPath];const eventPath=acebase_core_1.PathInfo.fillVariables(subscriptionPath,path);pathSubs.forEach((sub=>{let dataPath=null;if(sub.type==="value"||sub.type==="notify_value"){dataPath=eventPath}else if(["child_changed","notify_child_changed"].includes(sub.type)){const childKey=path===eventPath||pathInfo.isAncestorOf(eventPath)?"*":acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}else if(["mutated","mutations","notify_mutated","notify_mutations"].includes(sub.type)){dataPath=path}else if(["child_added","child_removed","notify_child_added","notify_child_removed"].includes(sub.type)&&(pathInfo.isChildOf(eventPath)||path===eventPath||pathInfo.isAncestorOf(eventPath))){const childKey=path===eventPath||pathInfo.isAncestorOf(eventPath)?"*":acebase_core_1.PathInfo.getPathKeys(path.slice(eventPath.length).replace(/^\//,""))[0];dataPath=acebase_core_1.PathInfo.getChildPath(eventPath,childKey)}if(dataPath!==null&&!subscribers.some((s=>s.type===sub.type&&s.eventPath===eventPath&&s.subscriptionPath===subscriptionPath))){subscribers.push({type:sub.type,eventPath:eventPath,dataPath:dataPath,subscriptionPath:subscriptionPath})}}))}}));return subscribers},trigger:(event,path,dataPath,oldValue,newValue,context)=>{const pathSubscriptions=this._eventSubscriptions[path]||[];pathSubscriptions.filter((sub=>sub.type===event)).forEach((sub=>{sub.callback(null,dataPath,newValue,oldValue,context)}))}};this.debug=new acebase_core_1.DebugLogger(env.logLevel,`[${name}${typeof settings.type==="string"&&settings.type!=="data"?`:${settings.type}`:""}]`);const ipcName=name+(typeof settings.type==="string"?`_${settings.type}`:"");if(settings.ipc){if(typeof settings.ipc.port!=="number"){throw new Error("IPC port number must be a number")}if(!["master","worker"].includes(settings.ipc.role)){throw new Error(`IPC client role must be either "master" or "worker", not "${settings.ipc.role}"`)}const ipcSettings=Object.assign({dbname:ipcName},settings.ipc);this.ipc=new ipc_1.RemoteIPCPeer(this,ipcSettings)}else{this.ipc=new ipc_1.IPCPeer(this,ipcName)}this.ipc.once("exit",(code=>{if(this.indexes.supported){this.indexes.close()}}));this.nodeLocker={lock:(path,tid,write,comment)=>this.ipc.lock({path:path,tid:tid,write:write,comment:comment})};this._lastTid=0}createTid(){return DEBUG_MODE?++this._lastTid:acebase_core_1.ID.generate()}async close(){await this.ipc.exit()}get path(){return`${this.settings.path}/${this.name}.acebase`}valueFitsInline(value){if(typeof value==="number"||typeof value==="boolean"||value instanceof Date){return true}else if(typeof value==="string"){if(value.length>this.settings.maxInlineValueSize){return false}const encoded=encodeString(value);return encoded.lengththis.settings.maxInlineValueSize){return false}const encoded=encodeString(value.path);return encoded.length0){hasValueSubscribers=true;const eventPaths=valueSubscribers.map((sub=>({path:sub.dataPath,keys:acebase_core_1.PathInfo.getPathKeys(sub.dataPath)}))).sort(((a,b)=>{if(a.keys.lengthb.keys.length)return 1;return 0}));const first=eventPaths[0];topEventPath=first.path;if(valueSubscribers.filter((sub=>sub.dataPath===topEventPath)).every((sub=>sub.type==="mutated"||sub.type.startsWith("notify_")))){hasValueSubscribers=false}topEventPath=acebase_core_1.PathInfo.fillVariables(topEventPath,path)}const indexes=this.indexes.getAll(path,{childPaths:true,parentPaths:true}).map((index=>({index:index,keys:acebase_core_1.PathInfo.getPathKeys(index.path)}))).sort(((a,b)=>{if(a.keys.lengthb.keys.length){return 1}return 0})).map((obj=>obj.index));const keysFilter=[];if(indexes.length>0){indexes.sort(((a,b)=>{if(typeof a._pathKeys==="undefined"){a._pathKeys=acebase_core_1.PathInfo.getPathKeys(a.path)}if(typeof b._pathKeys==="undefined"){b._pathKeys=acebase_core_1.PathInfo.getPathKeys(b.path)}if(a._pathKeys.lengthb._pathKeys.length)return 1;return 0}));const topIndex=indexes[0];const topIndexPath=topIndex.path===path?path:acebase_core_1.PathInfo.fillVariables(`${topIndex.path}/*`,path);if(topIndexPath.lengthindex.path===topIndex.path)).forEach((index=>{const keys=[index.key].concat(index.includeKeys);keys.forEach((key=>!keysFilter.includes(key)&&keysFilter.push(key)))}))}}return{topEventPath:topEventPath,eventSubscriptions:eventSubscriptions,valueSubscribers:valueSubscribers,hasValueSubscribers:hasValueSubscribers,indexes:indexes,keysFilter:keysFilter}}async _writeNodeWithTracking(path,value,options={merge:false,waitForIndexUpdates:true,suppress_events:false,context:null,impact:null}){options=options||{};if(!options.tid&&!options.transaction){throw new Error("_writeNodeWithTracking MUST be executed with a tid OR transaction!")}options.merge=options.merge===true;const validation=this.validateSchema(path,value,{updates:options.merge});if(!validation.ok){throw new SchemaValidationError(validation.reason)}const tid=options.tid;const transaction=options.transaction;let topEventData=null;const updateImpact=options.impact?options.impact:this.getUpdateImpact(path,options.suppress_events);const{topEventPath:topEventPath,eventSubscriptions:eventSubscriptions,hasValueSubscribers:hasValueSubscribers,indexes:indexes}=updateImpact;let{keysFilter:keysFilter}=updateImpact;const writeNode=()=>{if(typeof options._customWriteFunction==="function"){return options._customWriteFunction()}if(topEventData){const pathKeys=acebase_core_1.PathInfo.getPathKeys(path);const eventPathKeys=acebase_core_1.PathInfo.getPathKeys(topEventPath);const trailKeys=pathKeys.slice(eventPathKeys.length);let currentValue=topEventData;while(trailKeys.length>0&¤tValue!==null){const childKey=trailKeys.shift();currentValue=typeof currentValue==="object"&&childKey in currentValue?currentValue[childKey]:null}options.currentValue=currentValue}return this._writeNode(path,value,options)};const transactionLoggingEnabled=this.settings.transactions&&this.settings.transactions.log===true;if(eventSubscriptions.length===0&&indexes.length===0&&!transactionLoggingEnabled){return writeNode()}if(!hasValueSubscribers&&options.merge===true&&keysFilter.length===0){keysFilter=Object.keys(value);if(topEventPath!==path){const trailPath=path.slice(topEventPath.length);keysFilter=keysFilter.map((key=>`${trailPath}/${key}`))}}const eventNodeInfo=await this.getNodeInfo(topEventPath,{transaction:transaction,tid:tid});let currentValue=null;if(eventNodeInfo.exists){const valueOptions={transaction:transaction,tid:tid};if(keysFilter.length>0){valueOptions.include=keysFilter}if(topEventPath===""&&typeof valueOptions.include==="undefined"){this.debug.warn('WARNING: One or more value event listeners on the root node are causing the entire database value to be read to facilitate change tracking. Using "value", "notify_value", "child_changed" and "notify_child_changed" events on the root node are a bad practice because of the significant performance impact. Use "mutated" or "mutations" events instead')}const node=await this.getNode(topEventPath,valueOptions);currentValue=node.value}topEventData=currentValue;const result=await writeNode()||{};let newTopEventData,modifiedData;if(path===topEventPath){if(options.merge){if(topEventData===null){newTopEventData=value instanceof Array?[]:{}}else{newTopEventData=topEventData instanceof Array?[]:{};Object.keys(topEventData).forEach((key=>{newTopEventData[key]=topEventData[key]}))}}else{newTopEventData=value}modifiedData=newTopEventData}else{const trailPath=path.slice(topEventPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);if(topEventData===null){newTopEventData=typeof trailKeys[0]==="number"?[]:{}}else{newTopEventData=topEventData instanceof Array?[]:{};Object.keys(topEventData).forEach((key=>{newTopEventData[key]=topEventData[key]}))}modifiedData=newTopEventData;while(trailKeys.length>0){const childKey=trailKeys.shift();if(!options.merge&&trailKeys.length===0){modifiedData[childKey]=value}else{const original=modifiedData[childKey];const shallowCopy=typeof childKey==="number"?[...original]:Object.assign({},original);modifiedData[childKey]=shallowCopy}modifiedData=modifiedData[childKey]}}if(options.merge){Object.keys(value).forEach((key=>{modifiedData[key]=value[key]}))}const dataChanges=compareValues(topEventData,newTopEventData);if(dataChanges==="identical"){result.mutations=[];return result}function removeNulls(obj){if(obj===null||typeof obj!=="object"){return obj}Object.keys(obj).forEach((prop=>{const val=obj[prop];if(val===null){delete obj[prop];if(obj instanceof Array){obj.length--}}if(typeof val==="object"){removeNulls(val)}}))}removeNulls(newTopEventData);const indexUpdates=[];indexes.map((index=>({index:index,keys:acebase_core_1.PathInfo.getPathKeys(index.path)}))).sort(((a,b)=>{if(a.keys.lengthb.keys.length){return-1}return 0})).forEach((({index:index})=>{const pathKeys=acebase_core_1.PathInfo.getPathKeys(topEventPath);const indexPathKeys=acebase_core_1.PathInfo.getPathKeys(index.path+"/*");const trailKeys=indexPathKeys.slice(pathKeys.length);const oldValue=topEventData;const newValue=newTopEventData;if(trailKeys.length===0){console.assert(pathKeys.length===indexPathKeys.length,"check logic");const p=this.ipc.isMaster?index.handleRecordUpdate(topEventPath,oldValue,newValue):this.ipc.sendRequest({type:"index.update",path:topEventPath,oldValue:oldValue,newValue:newValue});indexUpdates.push(p);return}const getAllIndexUpdates=(path,oldValue,newValue)=>{if(oldValue===null&&newValue===null){return[]}const pathKeys=acebase_core_1.PathInfo.getPathKeys(path);const indexPathKeys=acebase_core_1.PathInfo.getPathKeys(index.path+"/*");const trailKeys=indexPathKeys.slice(pathKeys.length);if(trailKeys.length===0){console.assert(pathKeys.length===indexPathKeys.length,"check logic");return[{path:path,oldValue:oldValue,newValue:newValue}]}let results=[];let trailPath="";while(trailKeys.length>0){const subKey=trailKeys.shift();if(typeof subKey==="string"&&(subKey==="*"||subKey.startsWith("$"))){const allKeys=oldValue===null?[]:Object.keys(oldValue);newValue!==null&&Object.keys(newValue).forEach((key=>{if(allKeys.indexOf(key)<0){allKeys.push(key)}}));allKeys.forEach((key=>{const childPath=acebase_core_1.PathInfo.getChildPath(trailPath,key);const childValues=getChildValues(key,oldValue,newValue);const subTrailPath=acebase_core_1.PathInfo.getChildPath(path,childPath);const childResults=getAllIndexUpdates(subTrailPath,childValues.oldValue,childValues.newValue);results=results.concat(childResults)}));break}else{const values=getChildValues(subKey,oldValue,newValue);oldValue=values.oldValue;newValue=values.newValue;if(oldValue===null&&newValue===null){break}trailPath=acebase_core_1.PathInfo.getChildPath(trailPath,subKey)}}return results};const results=getAllIndexUpdates(topEventPath,oldValue,newValue);results.forEach((result=>{const p=this.ipc.isMaster?index.handleRecordUpdate(result.path,result.oldValue,result.newValue):this.ipc.sendRequest({type:"index.update",path:result.path,oldValue:result.oldValue,newValue:result.newValue});indexUpdates.push(p)}))}));const callSubscriberWithValues=(sub,oldValue,newValue,variables=[])=>{let trigger=true;let type=sub.type;if(type.startsWith("notify_")){type=type.slice("notify_".length)}if(type==="mutated"){return}else if(type==="child_changed"&&(oldValue===null||newValue===null)){trigger=false}else if(type==="value"||type==="child_changed"){const changes=compareValues(oldValue,newValue);trigger=changes!=="identical"}else if(type==="child_added"){trigger=oldValue===null&&newValue!==null}else if(type==="child_removed"){trigger=oldValue!==null&&newValue===null}const pathKeys=acebase_core_1.PathInfo.getPathKeys(sub.dataPath);variables.forEach((variable=>{const index=pathKeys.indexOf(variable.name);console.assert(index>=0,`Variable "${variable.name}" not found in subscription dataPath "${sub.dataPath}"`);pathKeys[index]=variable.value}));const dataPath=pathKeys.reduce(((path,key)=>acebase_core_1.PathInfo.getChildPath(path,key)),"");trigger&&this.subscriptions.trigger(sub.type,sub.subscriptionPath,dataPath,oldValue,newValue,options.context)};const prepareMutationEvents=(currentPath,oldValue,newValue,compareResult)=>{const batch=[];const result=compareResult||compareValues(oldValue,newValue);if(result==="identical"){return batch}else if(typeof result==="string"){batch.push({path:currentPath,oldValue:oldValue,newValue:newValue})}else{result.changed.forEach((info=>{const childPath=acebase_core_1.PathInfo.getChildPath(currentPath,info.key);const childValues=getChildValues(info.key,oldValue,newValue);const childBatch=prepareMutationEvents(childPath,childValues.oldValue,childValues.newValue,info.change);batch.push(...childBatch)}));result.added.forEach((key=>{const childPath=acebase_core_1.PathInfo.getChildPath(currentPath,key);batch.push({path:childPath,oldValue:null,newValue:newValue[key]})}));if(oldValue instanceof Array&&newValue instanceof Array){result.removed.sort(((a,b)=>a{const childPath=acebase_core_1.PathInfo.getChildPath(currentPath,key);batch.push({path:childPath,oldValue:oldValue[key],newValue:null})}))}return batch};if(transactionLoggingEnabled&&this.settings.type!=="transaction"){result.mutations=(()=>{const trailPath=path.slice(topEventPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);let oldValue=topEventData,newValue=newTopEventData;while(trailKeys.length>0){const key=trailKeys.shift();({oldValue:oldValue,newValue:newValue}=getChildValues(key,oldValue,newValue))}const compareResults=compareValues(oldValue,newValue);const batch=prepareMutationEvents(path,oldValue,newValue,compareResults);const mutations=batch.map((m=>({target:acebase_core_1.PathInfo.getPathKeys(m.path.slice(path.length)),prev:m.oldValue,val:m.newValue})));return mutations})()}const triggerAllEvents=()=>{eventSubscriptions.filter((sub=>!["mutated","mutations","notify_mutated","notify_mutations"].includes(sub.type))).map((sub=>{const keys=acebase_core_1.PathInfo.getPathKeys(sub.dataPath);return{sub:sub,keys:keys}})).sort(((a,b)=>{if(a.keys.lengthb.keys.length){return-1}return 0})).forEach((({sub:sub})=>{const process=(currentPath,oldValue,newValue,variables=[])=>{const trailPath=sub.dataPath.slice(currentPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);while(trailKeys.length>0){const subKey=trailKeys.shift();if(typeof subKey==="string"&&(subKey==="*"||subKey[0]==="$")){const allKeys=oldValue===null?[]:Object.keys(oldValue).map((key=>oldValue instanceof Array?parseInt(key):key));newValue!==null&&Object.keys(newValue).forEach((key=>{const keyOrIndex=newValue instanceof Array?parseInt(key):key;!allKeys.includes(keyOrIndex)&&allKeys.push(key)}));allKeys.forEach((key=>{const childValues=getChildValues(key,oldValue,newValue);const vars=variables.concat({name:subKey,value:key});if(trailKeys.length===0){callSubscriberWithValues(sub,childValues.oldValue,childValues.newValue,vars)}else{process(acebase_core_1.PathInfo.getChildPath(currentPath,subKey),childValues.oldValue,childValues.newValue,vars)}}));return}else{currentPath=acebase_core_1.PathInfo.getChildPath(currentPath,subKey);const childValues=getChildValues(subKey,oldValue,newValue);oldValue=childValues.oldValue;newValue=childValues.newValue}}callSubscriberWithValues(sub,oldValue,newValue,variables)};if(sub.type.startsWith("notify_")&&acebase_core_1.PathInfo.get(sub.eventPath).isAncestorOf(topEventPath)){const isOnParentPath=acebase_core_1.PathInfo.get(sub.eventPath).isParentOf(topEventPath);const trigger=sub.type==="notify_value"||sub.type==="notify_child_changed"&&(!isOnParentPath||!["added","removed"].includes(dataChanges))||sub.type==="notify_child_removed"&&dataChanges==="removed"&&isOnParentPath||sub.type==="notify_child_added"&&dataChanges==="added"&&isOnParentPath;trigger&&this.subscriptions.trigger(sub.type,sub.subscriptionPath,sub.dataPath,null,null,options.context)}else{process(topEventPath,topEventData,newTopEventData)}}));const mutationEvents=eventSubscriptions.filter((sub=>["mutated","mutations","notify_mutated","notify_mutations"].includes(sub.type)));mutationEvents.forEach((sub=>{let currentPath=topEventPath;const trailPath=sub.eventPath.slice(currentPath.length).replace(/^\//,"");const trailKeys=acebase_core_1.PathInfo.getPathKeys(trailPath);let oldValue=topEventData,newValue=newTopEventData;while(trailKeys.length>0){const subKey=trailKeys.shift();currentPath=acebase_core_1.PathInfo.getChildPath(currentPath,subKey);const childValues=getChildValues(subKey,oldValue,newValue);oldValue=childValues.oldValue;newValue=childValues.newValue}const batch=prepareMutationEvents(currentPath,oldValue,newValue);if(batch.length===0){return}const isNotifyEvent=sub.type.startsWith("notify_");if(["mutated","notify_mutated"].includes(sub.type)){batch.forEach(((mutation,index)=>{const context=options.context;const prevVal=isNotifyEvent?null:mutation.oldValue;const newVal=isNotifyEvent?null:mutation.newValue;this.subscriptions.trigger(sub.type,sub.subscriptionPath,mutation.path,prevVal,newVal,context)}))}else if(["mutations","notify_mutations"].includes(sub.type)){const values=isNotifyEvent?null:batch.map((m=>({target:acebase_core_1.PathInfo.getPathKeys(m.path.slice(sub.subscriptionPath.length)),prev:m.oldValue,val:m.newValue})));this.subscriptions.trigger(sub.type,sub.subscriptionPath,sub.subscriptionPath,null,values,options.context)}}))};if(options.waitForIndexUpdates===false){indexUpdates.splice(0)}await Promise.all(indexUpdates);defer(triggerAllEvents);return result}getChildren(path,options){throw new Error("This method must be implemented by subclass")}async getNodeValue(path,options={}){const node=await this.getNode(path,options);return node.value}getNode(path,options){throw new Error("This method must be implemented by subclass")}getNodeInfo(path,options){throw new Error("This method must be implemented by subclass")}setNode(path,value,options){throw new Error("This method must be implemented by subclass")}updateNode(path,updates,options){throw new Error("This method must be implemented by subclass")}async transactNode(path,callback,options={no_lock:false,suppress_events:false,context:null}){const useFakeLock=options&&options.no_lock===true;const tid=this.createTid();const lock=useFakeLock?{tid:tid,release:NOOP}:await this.nodeLocker.lock(path,tid,true,"transactNode");try{let changed=false;const changeCallback=()=>{changed=true};if(useFakeLock){this.subscriptions.add(path,"notify_value",changeCallback)}const node=await this.getNode(path,{tid:tid});const checkRevision=node.revision;let newValue;try{newValue=callback(node.value);if(newValue instanceof Promise){newValue=await newValue.catch((err=>{this.debug.error(`Error in transaction callback: ${err.message}`)}))}}catch(err){this.debug.error(`Error in transaction callback: ${err.message}`)}if(typeof newValue==="undefined"){return}if(useFakeLock){this.subscriptions.remove(path,"notify_value",changeCallback)}if(changed){throw new node_errors_1.NodeRevisionError("Node changed")}const cursor=await this.setNode(path,newValue,{assert_revision:checkRevision,tid:lock.tid,suppress_events:options.suppress_events,context:options.context});return cursor}catch(err){if(err instanceof node_errors_1.NodeRevisionError){console.warn(`node value changed, running again. Error: ${err.message}`);return this.transactNode(path,callback,options)}else{throw err}}finally{lock.release()}}async matchNode(path,criteria,options){var _a;const tid=(_a=options===null||options===void 0?void 0:options.tid)!==null&&_a!==void 0?_a:acebase_core_1.ID.generate();const checkNode=async(path,criteria)=>{if(criteria.length===0){return Promise.resolve(true)}const criteriaKeys=criteria.reduce(((keys,cr)=>{let key=cr.key;if(typeof key==="string"&&key.includes("/")){key=key.slice(0,key.indexOf("/"))}if(keys.indexOf(key)<0){keys.push(key)}return keys}),[]);const unseenKeys=criteriaKeys.slice();let isMatch=true;const delayedMatchPromises=[];try{await this.getChildren(path,{tid:tid,keyFilter:criteriaKeys}).next((childInfo=>{var _a;const keyOrIndex=(_a=childInfo.key)!==null&&_a!==void 0?_a:childInfo.index;unseenKeys.includes(keyOrIndex)&&unseenKeys.splice(unseenKeys.indexOf(childInfo.key),1);const keyCriteria=criteria.filter((cr=>cr.key===keyOrIndex)).map((cr=>({op:cr.op,compare:cr.compare})));const keyResult=keyCriteria.length>0?checkChild(childInfo,keyCriteria):{isMatch:true,promises:[]};isMatch=keyResult.isMatch;if(isMatch){delayedMatchPromises.push(...keyResult.promises);const childCriteria=criteria.filter((cr=>typeof cr.key==="string"&&cr.key.startsWith(`${typeof keyOrIndex==="number"?`[${keyOrIndex}]`:keyOrIndex}/`))).map((cr=>{const key=cr.key.slice(cr.key.indexOf("/")+1);return{key:key,op:cr.op,compare:cr.compare}}));if(childCriteria.length>0){const childPath=acebase_core_1.PathInfo.getChildPath(path,childInfo.key);const childPromise=checkNode(childPath,childCriteria).then((isMatch=>({isMatch:isMatch})));delayedMatchPromises.push(childPromise)}}if(!isMatch||unseenKeys.length===0){return false}}));if(isMatch){const results=await Promise.all(delayedMatchPromises);isMatch=results.every((res=>res.isMatch))}if(!isMatch){return false}isMatch=unseenKeys.every((keyOrIndex=>{const childInfo=new node_info_1.NodeInfo(Object.assign(Object.assign(Object.assign({},typeof keyOrIndex==="number"&&{index:keyOrIndex}),typeof keyOrIndex==="string"&&{key:keyOrIndex}),{exists:false}));const childCriteria=criteria.filter((cr=>typeof cr.key==="string"&&cr.key.startsWith(`${typeof keyOrIndex==="number"?`[${keyOrIndex}]`:keyOrIndex}/`))).map((cr=>({op:cr.op,compare:cr.compare})));if(childCriteria.length>0&&!checkChild(childInfo,childCriteria).isMatch){return false}const keyCriteria=criteria.filter((cr=>cr.key===keyOrIndex)).map((cr=>({op:cr.op,compare:cr.compare})));if(keyCriteria.length===0){return true}const result=checkChild(childInfo,keyCriteria);return result.isMatch}));return isMatch}catch(err){this.debug.error(`Error matching on "${path}": `,err);throw err}};const checkChild=(child,criteria)=>{const promises=[];const isMatch=criteria.every((f=>{let proceed=true;if(f.op==="!exists"||f.op==="=="&&(typeof f.compare==="undefined"||f.compare===null)){proceed=!child.exists}else if(f.op==="exists"||f.op==="!="&&(typeof f.compare==="undefined"||f.compare===null)){proceed=child.exists}else if((f.op==="contains"||f.op==="!contains")&&f.compare instanceof Array&&f.compare.length===0){proceed=true}else if(!child.exists){proceed=false}else{if(child.address){if(child.valueType===node_value_types_1.VALUE_TYPES.OBJECT&&["has","!has"].indexOf(f.op)>=0){const op=f.op==="has"?"exists":"!exists";const p=checkNode(child.path,[{key:f.compare,op:op}]).then((isMatch=>({key:child.key,isMatch:isMatch})));promises.push(p);proceed=true}else if(child.valueType===node_value_types_1.VALUE_TYPES.ARRAY&&["contains","!contains"].indexOf(f.op)>=0){const p=this.getNode(child.path,{tid:tid}).then((({value:arr})=>{const isMatch=f.op==="contains"?f.compare instanceof Array?f.compare.every((val=>arr.includes(val))):arr.includes(f.compare):f.compare instanceof Array?!f.compare.some((val=>arr.includes(val))):!arr.includes(f.compare);return{key:child.key,isMatch:isMatch}}));promises.push(p);proceed=true}else if(child.valueType===node_value_types_1.VALUE_TYPES.STRING){const p=this.getNode(child.path,{tid:tid}).then((node=>({key:child.key,isMatch:this.test(node.value,f.op,f.compare)})));promises.push(p);proceed=true}else{proceed=false}}else if(child.type===node_value_types_1.VALUE_TYPES.OBJECT&&["has","!has"].indexOf(f.op)>=0){const has=f.compare in child.value;proceed=has&&f.op==="has"||!has&&f.op==="!has"}else if(child.type===node_value_types_1.VALUE_TYPES.ARRAY&&["contains","!contains"].indexOf(f.op)>=0){const contains=child.value.indexOf(f.compare)>=0;proceed=contains&&f.op==="contains"||!contains&&f.op==="!contains"}else{let ret=this.test(child.value,f.op,f.compare);if(ret instanceof Promise){promises.push(ret);ret=true}proceed=ret}}return proceed}));return{isMatch:isMatch,promises:promises}};return checkNode(path,criteria)}test(val,op,compare){if(op==="<"){return val"){return val>compare}if(op===">="){return val>=compare}if(op==="in"){return compare.indexOf(val)>=0}if(op==="!in"){return compare.indexOf(val)<0}if(op==="like"||op==="!like"){const pattern="^"+compare.replace(/[-[\]{}()+.,\\^$|#\s]/g,"\\$&").replace(/\?/g,".").replace(/\*/g,".*?")+"$";const re=new RegExp(pattern,"i");const isMatch=re.test(val.toString());return op==="like"?isMatch:!isMatch}if(op==="matches"){return compare.test(val.toString())}if(op==="!matches"){return!compare.test(val.toString())}if(op==="between"){return val>=compare[0]&&val<=compare[1]}if(op==="!between"){return valcompare[1]}if(op==="has"||op==="!has"){const has=typeof val==="object"&&compare in val;return op==="has"?has:!has}if(op==="contains"||op==="!contains"){const includes=typeof val==="object"&&val instanceof Array&&val.includes(compare);return op==="contains"?includes:!includes}return false}async exportNode(path,writeFn,options={format:"json",type_safe:true}){if((options===null||options===void 0?void 0:options.format)!=="json"){throw new Error("Only json output is currently supported")}const write=typeof writeFn!=="function"?writeFn.write.bind(writeFn):writeFn;const stringifyValue=(type,val)=>{const escape=str=>str.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/[\u0000-\u001f]/g,(ch=>`\\u${ch.charCodeAt(0).toString(16).padStart(4,"0")}`));if(type===node_value_types_1.VALUE_TYPES.DATETIME){val=`"${val.toISOString()}"`;if(options.type_safe){val=`{".type":"date",".val":${val}}`}}else if(type===node_value_types_1.VALUE_TYPES.STRING){val=`"${escape(val)}"`}else if(type===node_value_types_1.VALUE_TYPES.ARRAY){val="[]"}else if(type===node_value_types_1.VALUE_TYPES.OBJECT){val="{}"}else if(type===node_value_types_1.VALUE_TYPES.BINARY){val=`"${escape(acebase_core_1.ascii85.encode(val))}"`;if(options.type_safe){val=`{".type":"binary",".val":${val}}`}}else if(type===node_value_types_1.VALUE_TYPES.REFERENCE){val=`"${val.path}"`;if(options.type_safe){val=`{".type":"reference",".val":${val}}`}}else if(type===node_value_types_1.VALUE_TYPES.BIGINT){val=`"${val}"`;if(options.type_safe){val=`{".type":"bigint",".val":${val}}`}}return val};let objStart="",objEnd="";const nodeInfo=await this.getNodeInfo(path);if(!nodeInfo.exists){return write("null")}else if(nodeInfo.type===node_value_types_1.VALUE_TYPES.OBJECT){objStart="{";objEnd="}"}else if(nodeInfo.type===node_value_types_1.VALUE_TYPES.ARRAY){objStart="[";objEnd="]"}else{const node=await this.getNode(path);const val=stringifyValue(nodeInfo.type,node.value);return write(val)}if(objStart){const p=write(objStart);if(p instanceof Promise){await p}}let output="",outputCount=0;const pending=[];await this.getChildren(path).next((childInfo=>{if(childInfo.address){pending.push(childInfo)}else{if(outputCount++>0){output+=","}if(typeof childInfo.key==="string"){output+=`"${childInfo.key}":`}output+=stringifyValue(childInfo.type,childInfo.value)}}));if(output){const p=write(output);if(p instanceof Promise){await p}}while(pending.length>0){const childInfo=pending.shift();let output=outputCount++>0?",":"";const key=typeof childInfo.index==="number"?childInfo.index:childInfo.key;if(typeof key==="string"){output+=`"${key}":`}if(output){const p=write(output);if(p instanceof Promise){await p}}await this.exportNode(acebase_core_1.PathInfo.getChildPath(path,key),write,options)}if(objEnd){const p=write(objEnd);if(p instanceof Promise){await p}}}async importNode(path,read,options={format:"json",method:"set"}){const chunkSize=256*1024;const maxQueueBytes=1024*1024;const state={data:"",index:0,offset:0,queue:[],queueStartByte:0,timesFlushed:0,get processedBytes(){return this.offset+this.index}};const readNextChunk=async(append=false)=>{let data=await read(chunkSize);if(data===null){if(state.data){throw new Error(`Unexpected EOF at index ${state.offset+state.data.length}`)}else{throw new Error("Unable to read data from stream")}}else if(typeof data==="object"){data=acebase_core_1.Utils.decodeString(data)}if(append){state.data+=data}else{state.offset+=state.data.length;state.data=data;state.index=0}};const readBytes=async length=>{let str="";if(state.index+length>=state.data.length){str=state.data.slice(state.index);length-=str.length;await readNextChunk()}str+=state.data.slice(state.index,state.index+length);state.index+=length;return str};const assertBytes=async length=>{if(state.index+length>state.data.length){await readNextChunk(true)}if(state.index+length>state.data.length){throw new Error("Not enough data available from stream")}};const consumeToken=async token=>{const str=await readBytes(token.length);if(str!==token){throw new Error(`Unexpected character "${str[0]}" at index ${state.offset+state.index}, expected "${token}"`)}};const consumeSpaces=async()=>{const spaces=[" ","\t","\r","\n"];while(true){if(state.index>=state.data.length){await readNextChunk()}if(spaces.includes(state.data[state.index])){state.index++}else{break}}};const peekBytes=async length=>{await assertBytes(length);const index=state.index;return state.data.slice(index,index+length)};const peekValueType=async()=>{await consumeSpaces();const ch=await peekBytes(1);switch(ch){case'"':return"string";case"{":return"object";case"[":return"array";case"n":return"null";case"u":return"undefined";case"t":case"f":return"boolean";default:{if(ch==="-"||ch>="0"&&ch<="9"){return"number"}throw new Error(`Unknown value at index ${state.offset+state.index}`)}}};const readString=async()=>{await consumeToken('"');let str="";let i=state.index;while(state.data[i]!=='"'||state.data[i-1]==="\\"){i++;if(i>=state.data.length){str+=state.data.slice(state.index);await readNextChunk();i=0}}str+=state.data.slice(state.index,i);state.index=i+1;return unescape(str)};const readBoolean=async()=>{if(state.data[state.index]==="t"){await consumeToken("true")}else if(state.data[state.index]==="f"){await consumeToken("false")}throw new Error(`Expected true or false at index ${state.offset+state.index}`)};const readNumber=async()=>{let str="";let i=state.index;const nrChars=["-","0","1","2","3","4","5","6","7","8","9",".","e","b","f","x","o","n"];while(nrChars.includes(state.data[i])){i++;if(i>=state.data.length){str+=state.data.slice(state.index);await readNextChunk();i=0}}str+=state.data.slice(state.index,i);state.index=i;const nr=str.endsWith("n")?BigInt(str.slice(0,-1)):str.includes(".")?parseFloat(str):parseInt(str);return nr};const readValue=async()=>{await consumeSpaces();const type=await peekValueType();const value=await(()=>{switch(type){case"string":return readString();case"object":return{};case"array":return[];case"number":return readNumber();case"null":return null;case"undefined":return undefined;case"boolean":return readBoolean()}})();return{type:type,value:value}};const unescape=str=>str.replace(/\\n/g,"\n").replace(/\\"/g,'"');const getTypeSafeValue=(path,obj)=>{const type=obj[".type"];let val=obj[".val"];switch(type){case"Date":case"date":{val=new Date(val);break}case"Buffer":case"binary":{val=unescape(val);if(val.startsWith("<~")){val=acebase_core_1.ascii85.decode(val)}else{throw new Error(`Import error: Unexpected encoding for value for value at path "/${path}"`)}break}case"PathReference":case"reference":{val=new acebase_core_1.PathReference(val);break}case"bigint":{val=BigInt(val);break}default:throw new Error(`Import error: Unsupported type "${type}" for value at path "/${path}"`)}return val};const context={acebase_import_id:acebase_core_1.ID.generate()};const childOptions={suppress_events:options.suppress_events,context:context};const enqueue=async(target,value)=>{state.queue.push({target:target,value:value});if(state.processedBytes>=state.queueStartByte+maxQueueBytes){const operations=state.queue.reduce(((updates,item)=>{if(item.target.path===path){updates.push(Object.assign({op:options.method==="set"&&state.timesFlushed===0?"set":"update"},item))}else{const parent=updates.find((other=>other.target.isParentOf(item.target)));if(parent){parent.value[item.target.key]=item.value}else{updates.push(Object.assign({op:options.method==="merge"?"update":"set"},item))}}return updates}),[]);state.queueStartByte=state.processedBytes;state.queue=[];state.timesFlushed++}if(target.path===path){}};const importObject=async target=>{await consumeToken("{");await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="}"){state.index++;return this.setNode(target.path,{},childOptions)}let childCount=0;let obj={};let flushedBefore=false;const flushObject=async()=>{let p;if(!flushedBefore){flushedBefore=true;p=this.setNode(target.path,obj,childOptions)}else if(Object.keys(obj).length>0){p=this.updateNode(target.path,obj,childOptions)}obj={};if(p){await p}};const promises=[];while(true){await consumeSpaces();const property=await readString();await consumeSpaces();await consumeToken(":");await consumeSpaces();const{value:value,type:type}=await readValue();obj[property]=value;childCount++;if(["object","array"].includes(type)){promises.push(flushObject());if(type==="object"){await importObject(target.child(property))}else{await importArray(target.child(property))}}await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="}"){state.index++;break}await consumeToken(",")}const isTypedValue=childCount===2&&".type"in obj&&".val"in obj;if(isTypedValue){const val=getTypeSafeValue(target.path,obj);return this.setNode(target.path,val,childOptions)}promises.push(flushObject());await Promise.all(promises)};const importArray=async target=>{await consumeToken("[");await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="]"){state.index++;return this.setNode(target.path,[],childOptions)}let flushedBefore=false;let arr=[];let updates={};const flushArray=async()=>{let p;if(!flushedBefore){flushedBefore=true;p=this.setNode(target.path,arr,childOptions);arr=null}else if(Object.keys(updates).length>0){p=this.updateNode(target.path,updates,childOptions);updates={}}if(p){await p}};const pushChild=(value,index)=>{if(flushedBefore){updates[index]=value}else{arr.push(value)}};const promises=[];let index=0;while(true){await consumeSpaces();const{value:value,type:type}=await readValue();pushChild(value,index);if(["object","array"].includes(type)){promises.push(flushArray());if(type==="object"){await importObject(target.child(index))}else{await importArray(target.child(index))}}await consumeSpaces();const nextChar=await peekBytes(1);if(nextChar==="]"){state.index++;break}await consumeToken(",");index++}promises.push(flushArray());await Promise.all(promises)};const start=async()=>{const{value:value,type:type}=await readValue();if(["object","array"].includes(type)){const target=acebase_core_1.PathInfo.get(path);if(type==="object"){await importObject(target)}else{await importArray(target)}}else{await this.setNode(path,value,childOptions)}};return start()}setSchema(path,schema){if(typeof schema==="undefined"){throw new TypeError("schema argument must be given")}if(schema===null){const i=this._schemas.findIndex((s=>s.path===path));i>=0&&this._schemas.splice(i,1);return}const definition=new acebase_core_1.SchemaDefinition(schema);const item=this._schemas.find((s=>s.path===path));if(item){item.schema=definition}else{this._schemas.push({path:path,schema:definition});this._schemas.sort(((a,b)=>{const ka=acebase_core_1.PathInfo.getPathKeys(a.path),kb=acebase_core_1.PathInfo.getPathKeys(b.path);if(ka.length===kb.length){return 0}return ka.lengthitem.path===path));return item?{path:path,schema:item.schema.source,text:item.schema.text}:null}getSchemas(){return this._schemas.map((item=>({path:item.path,schema:item.schema.source,text:item.schema.text})))}validateSchema(path,value,options={updates:false}){let result={ok:true};const pathInfo=acebase_core_1.PathInfo.get(path);this._schemas.filter((s=>pathInfo.isOnTrailOf(s.path))).every((s=>{if(pathInfo.isDescendantOf(s.path)){const ancestorPath=acebase_core_1.PathInfo.fillVariables(s.path,path);const trailKeys=pathInfo.keys.slice(acebase_core_1.PathInfo.getPathKeys(s.path).length);result=s.schema.check(ancestorPath,value,options.updates,trailKeys);return result.ok}const trailKeys=acebase_core_1.PathInfo.getPathKeys(s.path).slice(pathInfo.keys.length);const partial=options.updates===true&&trailKeys.length===0;const check=(path,value,trailKeys)=>{if(trailKeys.length===0){return s.schema.check(path,value,partial)}else if(value===null){return{ok:true}}const key=trailKeys[0];if(typeof key==="string"&&(key==="*"||key[0]==="$")){if(value===null||typeof value!=="object"){return{ok:true}}let result;Object.keys(value).every((childKey=>{const childPath=acebase_core_1.PathInfo.getChildPath(path,childKey);const childValue=value[childKey];result=check(childPath,childValue,trailKeys.slice(1));return result.ok}));return result}else{const childPath=acebase_core_1.PathInfo.getChildPath(path,key);const childValue=value[key];return check(childPath,childValue,trailKeys.slice(1))}};result=check(path,value,trailKeys);return result.ok}));return result}}exports.Storage=Storage},{"../data-index":32,"../ipc":33,"../node-errors":36,"../node-info":37,"../node-value-types":39,"../promise-fs":41,"./indexes":54,"acebase-core":12}],54:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createIndex=void 0;var create_index_1=require("./create-index");Object.defineProperty(exports,"createIndex",{enumerable:true,get:function(){return create_index_1.createIndex}})},{"./create-index":44}],55:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.MSSQLStorage=exports.MSSQLStorageSettings=void 0;const not_supported_1=require("../../not-supported");class MSSQLStorageSettings extends not_supported_1.NotSupported{}exports.MSSQLStorageSettings=MSSQLStorageSettings;class MSSQLStorage extends not_supported_1.NotSupported{}exports.MSSQLStorage=MSSQLStorage},{"../../not-supported":40}],56:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SQLiteStorage=exports.SQLiteStorageSettings=void 0;const not_supported_1=require("../../not-supported");class SQLiteStorageSettings extends not_supported_1.NotSupported{}exports.SQLiteStorageSettings=SQLiteStorageSettings;class SQLiteStorage extends not_supported_1.NotSupported{}exports.SQLiteStorage=SQLiteStorage},{"../../not-supported":40}],57:[function(require,module,exports){},{}]},{},[31])(31)})); \ No newline at end of file diff --git a/dist/cjs/btree/browser.js b/dist/cjs/btree/browser.js new file mode 100644 index 0000000..a623e3c --- /dev/null +++ b/dist/cjs/btree/browser.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BinaryBPlusTree = exports.BPlusTree = void 0; +const not_supported_1 = require("../not-supported"); +/** + * Not supported in browser context + */ +class BPlusTree extends not_supported_1.NotSupported { +} +exports.BPlusTree = BPlusTree; +/** + * Not supported in browser context + */ +class BinaryBPlusTree extends not_supported_1.NotSupported { +} +exports.BinaryBPlusTree = BinaryBPlusTree; +//# sourceMappingURL=browser.js.map \ No newline at end of file diff --git a/dist/cjs/btree/browser.js.map b/dist/cjs/btree/browser.js.map new file mode 100644 index 0000000..4cb17ab --- /dev/null +++ b/dist/cjs/btree/browser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/btree/browser.ts"],"names":[],"mappings":";;;AAAA,oDAAgD;AAEhD;;GAEG;AACH,MAAa,SAAU,SAAQ,4BAAY;CAAG;AAA9C,8BAA8C;AAC9C;;GAEG;AACH,MAAa,eAAgB,SAAQ,4BAAY;CAAG;AAApD,0CAAoD"} \ No newline at end of file diff --git a/dist/cjs/data-index/browser.js b/dist/cjs/data-index/browser.js new file mode 100644 index 0000000..1a6f04a --- /dev/null +++ b/dist/cjs/data-index/browser.js @@ -0,0 +1,29 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ArrayIndex = exports.GeoIndex = exports.FullTextIndex = exports.DataIndex = void 0; +const not_supported_1 = require("../not-supported"); +/** + * Not supported in browser context + */ +class DataIndex extends not_supported_1.NotSupported { +} +exports.DataIndex = DataIndex; +/** + * Not supported in browser context + */ +class FullTextIndex extends not_supported_1.NotSupported { +} +exports.FullTextIndex = FullTextIndex; +/** + * Not supported in browser context + */ +class GeoIndex extends not_supported_1.NotSupported { +} +exports.GeoIndex = GeoIndex; +/** + * Not supported in browser context + */ +class ArrayIndex extends not_supported_1.NotSupported { +} +exports.ArrayIndex = ArrayIndex; +//# sourceMappingURL=browser.js.map \ No newline at end of file diff --git a/dist/cjs/data-index/browser.js.map b/dist/cjs/data-index/browser.js.map new file mode 100644 index 0000000..daebd25 --- /dev/null +++ b/dist/cjs/data-index/browser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/data-index/browser.ts"],"names":[],"mappings":";;;AAAA,oDAAgD;AAEhD;;GAEG;AACH,MAAa,SAAU,SAAQ,4BAAY;CAAG;AAA9C,8BAA8C;AAC9C;;GAEG;AACH,MAAa,aAAc,SAAQ,4BAAY;CAAG;AAAlD,sCAAkD;AAClD;;GAEG;AACH,MAAa,QAAS,SAAQ,4BAAY;CAAG;AAA7C,4BAA6C;AAC7C;;GAEG;AACH,MAAa,UAAW,SAAQ,4BAAY;CAAG;AAA/C,gCAA+C"} \ No newline at end of file diff --git a/dist/cjs/ipc/browser.js b/dist/cjs/ipc/browser.js index 10ff73a..c8b5987 100644 --- a/dist/cjs/ipc/browser.js +++ b/dist/cjs/ipc/browser.js @@ -1,8 +1,9 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.IPCPeer = void 0; +exports.RemoteIPCPeer = exports.IPCPeer = void 0; const acebase_core_1 = require("acebase-core"); const ipc_1 = require("./ipc"); +const not_supported_1 = require("../not-supported"); /** * Browser tabs IPC. Database changes and events will be synchronized automatically. * Locking of resources will be done by the election of a single locking master: @@ -132,4 +133,10 @@ class IPCPeer extends ipc_1.AceBaseIPCPeer { } } exports.IPCPeer = IPCPeer; +/** + * Not supported in browser context + */ +class RemoteIPCPeer extends not_supported_1.NotSupported { +} +exports.RemoteIPCPeer = RemoteIPCPeer; //# sourceMappingURL=browser.js.map \ No newline at end of file diff --git a/dist/cjs/ipc/browser.js.map b/dist/cjs/ipc/browser.js.map index 51acb3b..1234cb9 100644 --- a/dist/cjs/ipc/browser.js.map +++ b/dist/cjs/ipc/browser.js.map @@ -1 +1 @@ -{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/ipc/browser.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/ipc/browser.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/not-supported.js b/dist/cjs/not-supported.js index 20b1bd0..a7c2a98 100644 --- a/dist/cjs/not-supported.js +++ b/dist/cjs/not-supported.js @@ -1,2 +1,8 @@ -// Not supported in current environment +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.NotSupported = void 0; +class NotSupported { + constructor(context = 'browser') { throw new Error(`This feature is not supported in ${context} context`); } +} +exports.NotSupported = NotSupported; //# sourceMappingURL=not-supported.js.map \ No newline at end of file diff --git a/dist/cjs/not-supported.js.map b/dist/cjs/not-supported.js.map index 731a279..49aa07a 100644 --- a/dist/cjs/not-supported.js.map +++ b/dist/cjs/not-supported.js.map @@ -1 +1 @@ -{"version":3,"file":"not-supported.js","sourceRoot":"","sources":["../../src/not-supported.ts"],"names":[],"mappings":"AAAA,uCAAuC"} \ No newline at end of file +{"version":3,"file":"not-supported.js","sourceRoot":"","sources":["../../src/not-supported.ts"],"names":[],"mappings":";;;AAAA,MAAa,YAAY;IACrB,YAAY,OAAO,GAAG,SAAS,IAAI,MAAM,IAAI,KAAK,CAAC,oCAAoC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;CAC/G;AAFD,oCAEC"} \ No newline at end of file diff --git a/dist/cjs/package.json b/dist/cjs/package.json index fa1ca79..edc9f37 100644 --- a/dist/cjs/package.json +++ b/dist/cjs/package.json @@ -5,10 +5,10 @@ "./index.js": "./browser.js", "./ipc/index.js": "./ipc/browser.js", "./promise-fs/index.js": "./promise-fs/browser.js", - "./storage/binary/index.js": "./not-supported.js", - "./storage/mssql/index.js": "./not-supported.js", - "./storage/sqlite/index.js": "./not-supported.js", - "./data-index/index.js": "./not-supported.js", - "./btree/index.js": "./not-supported.js" + "./storage/binary/index.js": "./storage/binary/browser.js", + "./storage/mssql/index.js": "./storage/mssql/browser.js", + "./storage/sqlite/index.js": "./storage/sqlite/browser.js", + "./data-index/index.js": "./data-index/browser.js", + "./btree/index.js": "./btree/browser.js" } } diff --git a/dist/cjs/storage/binary/browser.js b/dist/cjs/storage/binary/browser.js new file mode 100644 index 0000000..fd51e9a --- /dev/null +++ b/dist/cjs/storage/binary/browser.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AceBaseStorage = exports.AceBaseStorageSettings = void 0; +const not_supported_1 = require("../../not-supported"); +/** + * Not supported in browser context + */ +class AceBaseStorageSettings extends not_supported_1.NotSupported { +} +exports.AceBaseStorageSettings = AceBaseStorageSettings; +/** + * Not supported in browser context + */ +class AceBaseStorage extends not_supported_1.NotSupported { +} +exports.AceBaseStorage = AceBaseStorage; +//# sourceMappingURL=browser.js.map \ No newline at end of file diff --git a/dist/cjs/storage/binary/browser.js.map b/dist/cjs/storage/binary/browser.js.map new file mode 100644 index 0000000..31e040c --- /dev/null +++ b/dist/cjs/storage/binary/browser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../../src/storage/binary/browser.ts"],"names":[],"mappings":";;;AAAA,uDAAmD;AAEnD;;GAEG;AACH,MAAa,sBAAuB,SAAQ,4BAAY;CAAG;AAA3D,wDAA2D;AAC3D;;GAEG;AACH,MAAa,cAAe,SAAQ,4BAAY;CAAG;AAAnD,wCAAmD"} \ No newline at end of file diff --git a/dist/cjs/storage/mssql/browser.js b/dist/cjs/storage/mssql/browser.js new file mode 100644 index 0000000..69d4a1a --- /dev/null +++ b/dist/cjs/storage/mssql/browser.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MSSQLStorage = exports.MSSQLStorageSettings = void 0; +const not_supported_1 = require("../../not-supported"); +/** + * Not supported in browser context + */ +class MSSQLStorageSettings extends not_supported_1.NotSupported { +} +exports.MSSQLStorageSettings = MSSQLStorageSettings; +/** + * Not supported in browser context + */ +class MSSQLStorage extends not_supported_1.NotSupported { +} +exports.MSSQLStorage = MSSQLStorage; +//# sourceMappingURL=browser.js.map \ No newline at end of file diff --git a/dist/cjs/storage/mssql/browser.js.map b/dist/cjs/storage/mssql/browser.js.map new file mode 100644 index 0000000..aa250d7 --- /dev/null +++ b/dist/cjs/storage/mssql/browser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../../src/storage/mssql/browser.ts"],"names":[],"mappings":";;;AAAA,uDAAmD;AAEnD;;GAEG;AACH,MAAa,oBAAqB,SAAQ,4BAAY;CAAG;AAAzD,oDAAyD;AACzD;;GAEG;AACH,MAAa,YAAa,SAAQ,4BAAY;CAAG;AAAjD,oCAAiD"} \ No newline at end of file diff --git a/dist/cjs/storage/sqlite/browser.js b/dist/cjs/storage/sqlite/browser.js new file mode 100644 index 0000000..64f6f67 --- /dev/null +++ b/dist/cjs/storage/sqlite/browser.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SQLiteStorage = exports.SQLiteStorageSettings = void 0; +const not_supported_1 = require("../../not-supported"); +/** + * Not supported in browser context + */ +class SQLiteStorageSettings extends not_supported_1.NotSupported { +} +exports.SQLiteStorageSettings = SQLiteStorageSettings; +/** + * Not supported in browser context + */ +class SQLiteStorage extends not_supported_1.NotSupported { +} +exports.SQLiteStorage = SQLiteStorage; +//# sourceMappingURL=browser.js.map \ No newline at end of file diff --git a/dist/cjs/storage/sqlite/browser.js.map b/dist/cjs/storage/sqlite/browser.js.map new file mode 100644 index 0000000..3724a44 --- /dev/null +++ b/dist/cjs/storage/sqlite/browser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../../src/storage/sqlite/browser.ts"],"names":[],"mappings":";;;AAAA,uDAAmD;AAEnD;;GAEG;AACH,MAAa,qBAAsB,SAAQ,4BAAY;CAAG;AAA1D,sDAA0D;AAC1D;;GAEG;AACH,MAAa,aAAc,SAAQ,4BAAY;CAAG;AAAlD,sCAAkD"} \ No newline at end of file diff --git a/dist/esm/btree/browser.js b/dist/esm/btree/browser.js new file mode 100644 index 0000000..5cf850d --- /dev/null +++ b/dist/esm/btree/browser.js @@ -0,0 +1,12 @@ +import { NotSupported } from '../not-supported.js'; +/** + * Not supported in browser context + */ +export class BPlusTree extends NotSupported { +} +/** + * Not supported in browser context + */ +export class BinaryBPlusTree extends NotSupported { +} +//# sourceMappingURL=browser.js.map \ No newline at end of file diff --git a/dist/esm/btree/browser.js.map b/dist/esm/btree/browser.js.map new file mode 100644 index 0000000..959dc50 --- /dev/null +++ b/dist/esm/btree/browser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/btree/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,YAAY;CAAG;AAC9C;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,YAAY;CAAG"} \ No newline at end of file diff --git a/dist/esm/data-index/browser.js b/dist/esm/data-index/browser.js new file mode 100644 index 0000000..267f6b1 --- /dev/null +++ b/dist/esm/data-index/browser.js @@ -0,0 +1,22 @@ +import { NotSupported } from '../not-supported.js'; +/** + * Not supported in browser context + */ +export class DataIndex extends NotSupported { +} +/** + * Not supported in browser context + */ +export class FullTextIndex extends NotSupported { +} +/** + * Not supported in browser context + */ +export class GeoIndex extends NotSupported { +} +/** + * Not supported in browser context + */ +export class ArrayIndex extends NotSupported { +} +//# sourceMappingURL=browser.js.map \ No newline at end of file diff --git a/dist/esm/data-index/browser.js.map b/dist/esm/data-index/browser.js.map new file mode 100644 index 0000000..9b87d31 --- /dev/null +++ b/dist/esm/data-index/browser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/data-index/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,YAAY;CAAG;AAC9C;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,YAAY;CAAG;AAClD;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,YAAY;CAAG;AAC7C;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,YAAY;CAAG"} \ No newline at end of file diff --git a/dist/esm/ipc/browser.js b/dist/esm/ipc/browser.js index d47c4c0..0da2d3a 100644 --- a/dist/esm/ipc/browser.js +++ b/dist/esm/ipc/browser.js @@ -1,5 +1,6 @@ import { ID, Transport } from 'acebase-core'; import { AceBaseIPCPeer } from './ipc.js'; +import { NotSupported } from '../not-supported.js'; /** * Browser tabs IPC. Database changes and events will be synchronized automatically. * Locking of resources will be done by the election of a single locking master: @@ -128,4 +129,9 @@ export class IPCPeer extends AceBaseIPCPeer { this.channel.postMessage(message); } } +/** + * Not supported in browser context + */ +export class RemoteIPCPeer extends NotSupported { +} //# sourceMappingURL=browser.js.map \ No newline at end of file diff --git a/dist/esm/ipc/browser.js.map b/dist/esm/ipc/browser.js.map index 2f43284..c3ccb37 100644 --- a/dist/esm/ipc/browser.js.map +++ b/dist/esm/ipc/browser.js.map @@ -1 +1 @@ -{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/ipc/browser.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/ipc/browser.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/not-supported.js b/dist/esm/not-supported.js index 20b1bd0..5705127 100644 --- a/dist/esm/not-supported.js +++ b/dist/esm/not-supported.js @@ -1,2 +1,4 @@ -// Not supported in current environment +export class NotSupported { + constructor(context = 'browser') { throw new Error(`This feature is not supported in ${context} context`); } +} //# sourceMappingURL=not-supported.js.map \ No newline at end of file diff --git a/dist/esm/not-supported.js.map b/dist/esm/not-supported.js.map index 731a279..eb5259c 100644 --- a/dist/esm/not-supported.js.map +++ b/dist/esm/not-supported.js.map @@ -1 +1 @@ -{"version":3,"file":"not-supported.js","sourceRoot":"","sources":["../../src/not-supported.ts"],"names":[],"mappings":"AAAA,uCAAuC"} \ No newline at end of file +{"version":3,"file":"not-supported.js","sourceRoot":"","sources":["../../src/not-supported.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAY;IACrB,YAAY,OAAO,GAAG,SAAS,IAAI,MAAM,IAAI,KAAK,CAAC,oCAAoC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;CAC/G"} \ No newline at end of file diff --git a/dist/esm/package.json b/dist/esm/package.json index afdd57f..219089c 100644 --- a/dist/esm/package.json +++ b/dist/esm/package.json @@ -5,10 +5,10 @@ "./index.js": "./browser.js", "./ipc/index.js": "./ipc/browser.js", "./promise-fs/index.js": "./promise-fs/browser.js", - "./storage/binary/index.js": "./not-supported.js", - "./storage/mssql/index.js": "./not-supported.js", - "./storage/sqlite/index.js": "./not-supported.js", - "./data-index/index.js": "./not-supported.js", - "./btree/index.js": "./not-supported.js" + "./storage/binary/index.js": "./storage/binary/browser.js", + "./storage/mssql/index.js": "./storage/mssql/browser.js", + "./storage/sqlite/index.js": "./storage/sqlite/browser.js", + "./data-index/index.js": "./data-index/browser.js", + "./btree/index.js": "./btree/browser.js" } } diff --git a/dist/esm/storage/binary/browser.js b/dist/esm/storage/binary/browser.js new file mode 100644 index 0000000..745a6d6 --- /dev/null +++ b/dist/esm/storage/binary/browser.js @@ -0,0 +1,12 @@ +import { NotSupported } from '../../not-supported.js'; +/** + * Not supported in browser context + */ +export class AceBaseStorageSettings extends NotSupported { +} +/** + * Not supported in browser context + */ +export class AceBaseStorage extends NotSupported { +} +//# sourceMappingURL=browser.js.map \ No newline at end of file diff --git a/dist/esm/storage/binary/browser.js.map b/dist/esm/storage/binary/browser.js.map new file mode 100644 index 0000000..f31dd32 --- /dev/null +++ b/dist/esm/storage/binary/browser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../../src/storage/binary/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,YAAY;CAAG;AAC3D;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,YAAY;CAAG"} \ No newline at end of file diff --git a/dist/esm/storage/mssql/browser.js b/dist/esm/storage/mssql/browser.js new file mode 100644 index 0000000..e938820 --- /dev/null +++ b/dist/esm/storage/mssql/browser.js @@ -0,0 +1,12 @@ +import { NotSupported } from '../../not-supported.js'; +/** + * Not supported in browser context + */ +export class MSSQLStorageSettings extends NotSupported { +} +/** + * Not supported in browser context + */ +export class MSSQLStorage extends NotSupported { +} +//# sourceMappingURL=browser.js.map \ No newline at end of file diff --git a/dist/esm/storage/mssql/browser.js.map b/dist/esm/storage/mssql/browser.js.map new file mode 100644 index 0000000..bdd347d --- /dev/null +++ b/dist/esm/storage/mssql/browser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../../src/storage/mssql/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,YAAY;CAAG;AACzD;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,YAAY;CAAG"} \ No newline at end of file diff --git a/dist/esm/storage/sqlite/browser.js b/dist/esm/storage/sqlite/browser.js new file mode 100644 index 0000000..4ed87b9 --- /dev/null +++ b/dist/esm/storage/sqlite/browser.js @@ -0,0 +1,12 @@ +import { NotSupported } from '../../not-supported.js'; +/** + * Not supported in browser context + */ +export class SQLiteStorageSettings extends NotSupported { +} +/** + * Not supported in browser context + */ +export class SQLiteStorage extends NotSupported { +} +//# sourceMappingURL=browser.js.map \ No newline at end of file diff --git a/dist/esm/storage/sqlite/browser.js.map b/dist/esm/storage/sqlite/browser.js.map new file mode 100644 index 0000000..2e58a2b --- /dev/null +++ b/dist/esm/storage/sqlite/browser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../../src/storage/sqlite/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,YAAY;CAAG;AAC1D;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,YAAY;CAAG"} \ No newline at end of file diff --git a/dist/types/btree/browser.d.ts b/dist/types/btree/browser.d.ts new file mode 100644 index 0000000..6c10dbb --- /dev/null +++ b/dist/types/btree/browser.d.ts @@ -0,0 +1,12 @@ +import { NotSupported } from '../not-supported'; +/** + * Not supported in browser context + */ +export declare class BPlusTree extends NotSupported { +} +/** + * Not supported in browser context + */ +export declare class BinaryBPlusTree extends NotSupported { +} +//# sourceMappingURL=browser.d.ts.map \ No newline at end of file diff --git a/dist/types/btree/browser.d.ts.map b/dist/types/btree/browser.d.ts.map new file mode 100644 index 0000000..1f82e47 --- /dev/null +++ b/dist/types/btree/browser.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/btree/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD;;GAEG;AACH,qBAAa,SAAU,SAAQ,YAAY;CAAG;AAC9C;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY;CAAG"} \ No newline at end of file diff --git a/dist/types/data-index/browser.d.ts b/dist/types/data-index/browser.d.ts new file mode 100644 index 0000000..5a6e775 --- /dev/null +++ b/dist/types/data-index/browser.d.ts @@ -0,0 +1,22 @@ +import { NotSupported } from '../not-supported'; +/** + * Not supported in browser context + */ +export declare class DataIndex extends NotSupported { +} +/** + * Not supported in browser context + */ +export declare class FullTextIndex extends NotSupported { +} +/** + * Not supported in browser context + */ +export declare class GeoIndex extends NotSupported { +} +/** + * Not supported in browser context + */ +export declare class ArrayIndex extends NotSupported { +} +//# sourceMappingURL=browser.d.ts.map \ No newline at end of file diff --git a/dist/types/data-index/browser.d.ts.map b/dist/types/data-index/browser.d.ts.map new file mode 100644 index 0000000..565f2a2 --- /dev/null +++ b/dist/types/data-index/browser.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/data-index/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD;;GAEG;AACH,qBAAa,SAAU,SAAQ,YAAY;CAAG;AAC9C;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;CAAG;AAClD;;GAEG;AACH,qBAAa,QAAS,SAAQ,YAAY;CAAG;AAC7C;;GAEG;AACH,qBAAa,UAAW,SAAQ,YAAY;CAAG"} \ No newline at end of file diff --git a/dist/types/ipc/browser.d.ts b/dist/types/ipc/browser.d.ts index 375f77a..a7de0a6 100644 --- a/dist/types/ipc/browser.d.ts +++ b/dist/types/ipc/browser.d.ts @@ -1,5 +1,6 @@ import { AceBaseIPCPeer, IMessage } from './ipc'; import { Storage } from '../storage'; +import { NotSupported } from '../not-supported'; /** * Browser tabs IPC. Database changes and events will be synchronized automatically. * Locking of resources will be done by the election of a single locking master: @@ -10,4 +11,9 @@ export declare class IPCPeer extends AceBaseIPCPeer { constructor(storage: Storage); sendMessage(message: IMessage): void; } +/** + * Not supported in browser context + */ +export declare class RemoteIPCPeer extends NotSupported { +} //# sourceMappingURL=browser.d.ts.map \ No newline at end of file diff --git a/dist/types/ipc/browser.d.ts.map b/dist/types/ipc/browser.d.ts.map index 1e72b8f..412c500 100644 --- a/dist/types/ipc/browser.d.ts.map +++ b/dist/types/ipc/browser.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/ipc/browser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAkC,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIrC;;;;GAIG;AACH,qBAAa,OAAQ,SAAQ,cAAc;IAEvC,OAAO,CAAC,OAAO,CAAmB;gBAEtB,OAAO,EAAE,OAAO;IAyI5B,WAAW,CAAC,OAAO,EAAE,QAAQ;CAKhC"} \ No newline at end of file +{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/ipc/browser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAkC,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIhD;;;;GAIG;AACH,qBAAa,OAAQ,SAAQ,cAAc;IAEvC,OAAO,CAAC,OAAO,CAAmB;gBAEtB,OAAO,EAAE,OAAO;IAyI5B,WAAW,CAAC,OAAO,EAAE,QAAQ;CAKhC;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;CAAG"} \ No newline at end of file diff --git a/dist/types/not-supported.d.ts b/dist/types/not-supported.d.ts index 4ef8dba..32d1c4a 100644 --- a/dist/types/not-supported.d.ts +++ b/dist/types/not-supported.d.ts @@ -1 +1,4 @@ +export declare class NotSupported { + constructor(context?: string); +} //# sourceMappingURL=not-supported.d.ts.map \ No newline at end of file diff --git a/dist/types/not-supported.d.ts.map b/dist/types/not-supported.d.ts.map index 740bbcf..8ba310d 100644 --- a/dist/types/not-supported.d.ts.map +++ b/dist/types/not-supported.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"not-supported.d.ts","sourceRoot":"","sources":["../../src/not-supported.ts"],"names":[],"mappings":""} \ No newline at end of file +{"version":3,"file":"not-supported.d.ts","sourceRoot":"","sources":["../../src/not-supported.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAY;gBACT,OAAO,SAAY;CAClC"} \ No newline at end of file diff --git a/dist/types/storage/binary/browser.d.ts b/dist/types/storage/binary/browser.d.ts new file mode 100644 index 0000000..9aac855 --- /dev/null +++ b/dist/types/storage/binary/browser.d.ts @@ -0,0 +1,12 @@ +import { NotSupported } from '../../not-supported'; +/** + * Not supported in browser context + */ +export declare class AceBaseStorageSettings extends NotSupported { +} +/** + * Not supported in browser context + */ +export declare class AceBaseStorage extends NotSupported { +} +//# sourceMappingURL=browser.d.ts.map \ No newline at end of file diff --git a/dist/types/storage/binary/browser.d.ts.map b/dist/types/storage/binary/browser.d.ts.map new file mode 100644 index 0000000..2a24d3c --- /dev/null +++ b/dist/types/storage/binary/browser.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../../src/storage/binary/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,YAAY;CAAG;AAC3D;;GAEG;AACH,qBAAa,cAAe,SAAQ,YAAY;CAAG"} \ No newline at end of file diff --git a/dist/types/storage/mssql/browser.d.ts b/dist/types/storage/mssql/browser.d.ts new file mode 100644 index 0000000..f321adc --- /dev/null +++ b/dist/types/storage/mssql/browser.d.ts @@ -0,0 +1,12 @@ +import { NotSupported } from '../../not-supported'; +/** + * Not supported in browser context + */ +export declare class MSSQLStorageSettings extends NotSupported { +} +/** + * Not supported in browser context + */ +export declare class MSSQLStorage extends NotSupported { +} +//# sourceMappingURL=browser.d.ts.map \ No newline at end of file diff --git a/dist/types/storage/mssql/browser.d.ts.map b/dist/types/storage/mssql/browser.d.ts.map new file mode 100644 index 0000000..07882eb --- /dev/null +++ b/dist/types/storage/mssql/browser.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../../src/storage/mssql/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,YAAY;CAAG;AACzD;;GAEG;AACH,qBAAa,YAAa,SAAQ,YAAY;CAAG"} \ No newline at end of file diff --git a/dist/types/storage/sqlite/browser.d.ts b/dist/types/storage/sqlite/browser.d.ts new file mode 100644 index 0000000..06491b0 --- /dev/null +++ b/dist/types/storage/sqlite/browser.d.ts @@ -0,0 +1,12 @@ +import { NotSupported } from '../../not-supported'; +/** + * Not supported in browser context + */ +export declare class SQLiteStorageSettings extends NotSupported { +} +/** + * Not supported in browser context + */ +export declare class SQLiteStorage extends NotSupported { +} +//# sourceMappingURL=browser.d.ts.map \ No newline at end of file diff --git a/dist/types/storage/sqlite/browser.d.ts.map b/dist/types/storage/sqlite/browser.d.ts.map new file mode 100644 index 0000000..d1a8f07 --- /dev/null +++ b/dist/types/storage/sqlite/browser.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../../src/storage/sqlite/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,YAAY;CAAG;AAC1D;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;CAAG"} \ No newline at end of file