mindoodb 0.0.23 → 0.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README-server.md +9 -1
- package/README.md +5 -3
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts +1 -1
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts.map +1 -1
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js +24 -5
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js.map +1 -1
- package/dist/appendonlystores/network/HttpTransport.d.ts +14 -2
- package/dist/appendonlystores/network/HttpTransport.d.ts.map +1 -1
- package/dist/appendonlystores/network/HttpTransport.js +124 -27
- package/dist/appendonlystores/network/HttpTransport.js.map +1 -1
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts +159 -4
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts.map +1 -1
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js +334 -25
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js.map +1 -1
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.d.ts +9 -0
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.d.ts.map +1 -1
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.js +77 -5
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.js.map +1 -1
- package/dist/browser/index.mjs +103 -0
- package/dist/core/BaseMindooDB.d.ts +697 -4
- package/dist/core/BaseMindooDB.d.ts.map +1 -1
- package/dist/core/BaseMindooDB.js +3273 -180
- package/dist/core/BaseMindooDB.js.map +1 -1
- package/dist/core/BaseMindooTenant.d.ts +192 -1
- package/dist/core/BaseMindooTenant.d.ts.map +1 -1
- package/dist/core/BaseMindooTenant.js +633 -88
- package/dist/core/BaseMindooTenant.js.map +1 -1
- package/dist/core/BaseMindooTenantDirectory.d.ts +770 -10
- package/dist/core/BaseMindooTenantDirectory.d.ts.map +1 -1
- package/dist/core/BaseMindooTenantDirectory.js +2715 -292
- package/dist/core/BaseMindooTenantDirectory.js.map +1 -1
- package/dist/core/BaseMindooTenantFactory.d.ts +2 -0
- package/dist/core/BaseMindooTenantFactory.d.ts.map +1 -1
- package/dist/core/BaseMindooTenantFactory.js +20 -0
- package/dist/core/BaseMindooTenantFactory.js.map +1 -1
- package/dist/core/accesscontrol/AccessDeniedError.d.ts +22 -0
- package/dist/core/accesscontrol/AccessDeniedError.d.ts.map +1 -0
- package/dist/core/accesscontrol/AccessDeniedError.js +28 -0
- package/dist/core/accesscontrol/AccessDeniedError.js.map +1 -0
- package/dist/core/accesscontrol/DirectoryStateNode.d.ts +220 -0
- package/dist/core/accesscontrol/DirectoryStateNode.d.ts.map +1 -0
- package/dist/core/accesscontrol/DirectoryStateNode.js +297 -0
- package/dist/core/accesscontrol/DirectoryStateNode.js.map +1 -0
- package/dist/core/accesscontrol/DirectoryTimeTravelIndex.d.ts +118 -0
- package/dist/core/accesscontrol/DirectoryTimeTravelIndex.d.ts.map +1 -0
- package/dist/core/accesscontrol/DirectoryTimeTravelIndex.js +173 -0
- package/dist/core/accesscontrol/DirectoryTimeTravelIndex.js.map +1 -0
- package/dist/core/accesscontrol/directoryProjection.d.ts +26 -0
- package/dist/core/accesscontrol/directoryProjection.d.ts.map +1 -0
- package/dist/core/accesscontrol/directoryProjection.js +174 -0
- package/dist/core/accesscontrol/directoryProjection.js.map +1 -0
- package/dist/core/accesscontrol/evaluate.d.ts +77 -0
- package/dist/core/accesscontrol/evaluate.d.ts.map +1 -0
- package/dist/core/accesscontrol/evaluate.js +206 -0
- package/dist/core/accesscontrol/evaluate.js.map +1 -0
- package/dist/core/accesscontrol/grantKeys.d.ts +113 -0
- package/dist/core/accesscontrol/grantKeys.d.ts.map +1 -0
- package/dist/core/accesscontrol/grantKeys.js +302 -0
- package/dist/core/accesscontrol/grantKeys.js.map +1 -0
- package/dist/core/accesscontrol/keyBagReconciler.d.ts +22 -0
- package/dist/core/accesscontrol/keyBagReconciler.d.ts.map +1 -0
- package/dist/core/accesscontrol/keyBagReconciler.js +3 -0
- package/dist/core/accesscontrol/keyBagReconciler.js.map +1 -0
- package/dist/core/accesscontrol/materializationGuard.d.ts +89 -0
- package/dist/core/accesscontrol/materializationGuard.d.ts.map +1 -0
- package/dist/core/accesscontrol/materializationGuard.js +69 -0
- package/dist/core/accesscontrol/materializationGuard.js.map +1 -0
- package/dist/core/accesscontrol/quarantine.d.ts +65 -0
- package/dist/core/accesscontrol/quarantine.d.ts.map +1 -0
- package/dist/core/accesscontrol/quarantine.js +79 -0
- package/dist/core/accesscontrol/quarantine.js.map +1 -0
- package/dist/core/accesscontrol/receiptValidation.d.ts +113 -0
- package/dist/core/accesscontrol/receiptValidation.d.ts.map +1 -0
- package/dist/core/accesscontrol/receiptValidation.js +142 -0
- package/dist/core/accesscontrol/receiptValidation.js.map +1 -0
- package/dist/core/accesscontrol/timestamp/Ed25519WitnessProvider.d.ts +31 -0
- package/dist/core/accesscontrol/timestamp/Ed25519WitnessProvider.d.ts.map +1 -0
- package/dist/core/accesscontrol/timestamp/Ed25519WitnessProvider.js +66 -0
- package/dist/core/accesscontrol/timestamp/Ed25519WitnessProvider.js.map +1 -0
- package/dist/core/accesscontrol/timestamp/TimestampProvider.d.ts +79 -0
- package/dist/core/accesscontrol/timestamp/TimestampProvider.d.ts.map +1 -0
- package/dist/core/accesscontrol/timestamp/TimestampProvider.js +22 -0
- package/dist/core/accesscontrol/timestamp/TimestampProvider.js.map +1 -0
- package/dist/core/accesscontrol/types.d.ts +825 -0
- package/dist/core/accesscontrol/types.d.ts.map +1 -0
- package/dist/core/accesscontrol/types.js +534 -0
- package/dist/core/accesscontrol/types.js.map +1 -0
- package/dist/core/appendonlystores/InMemoryContentAddressedStore.d.ts +9 -0
- package/dist/core/appendonlystores/InMemoryContentAddressedStore.d.ts.map +1 -1
- package/dist/core/appendonlystores/InMemoryContentAddressedStore.js +54 -0
- package/dist/core/appendonlystores/InMemoryContentAddressedStore.js.map +1 -1
- package/dist/core/appendonlystores/network/AuthenticationService.d.ts +38 -2
- package/dist/core/appendonlystores/network/AuthenticationService.d.ts.map +1 -1
- package/dist/core/appendonlystores/network/AuthenticationService.js +199 -26
- package/dist/core/appendonlystores/network/AuthenticationService.js.map +1 -1
- package/dist/core/appendonlystores/network/NetworkTransport.d.ts +17 -3
- package/dist/core/appendonlystores/network/NetworkTransport.d.ts.map +1 -1
- package/dist/core/appendonlystores/network/types.d.ts +58 -4
- package/dist/core/appendonlystores/network/types.d.ts.map +1 -1
- package/dist/core/appendonlystores/network/types.js +4 -0
- package/dist/core/appendonlystores/network/types.js.map +1 -1
- package/dist/core/appendonlystores/scanUtils.d.ts +27 -0
- package/dist/core/appendonlystores/scanUtils.d.ts.map +1 -0
- package/dist/core/appendonlystores/scanUtils.js +87 -0
- package/dist/core/appendonlystores/scanUtils.js.map +1 -0
- package/dist/core/appendonlystores/types.d.ts +23 -2
- package/dist/core/appendonlystores/types.d.ts.map +1 -1
- package/dist/core/cache/CacheManager.d.ts +13 -3
- package/dist/core/cache/CacheManager.d.ts.map +1 -1
- package/dist/core/cache/CacheManager.js +7 -4
- package/dist/core/cache/CacheManager.js.map +1 -1
- package/dist/core/crypto/EntrySignature.d.ts +137 -0
- package/dist/core/crypto/EntrySignature.d.ts.map +1 -0
- package/dist/core/crypto/EntrySignature.js +210 -0
- package/dist/core/crypto/EntrySignature.js.map +1 -0
- package/dist/core/crypto/MindooDocSigner.d.ts.map +1 -1
- package/dist/core/crypto/MindooDocSigner.js +6 -2
- package/dist/core/crypto/MindooDocSigner.js.map +1 -1
- package/dist/core/crypto/WitnessReceipt.d.ts +137 -0
- package/dist/core/crypto/WitnessReceipt.d.ts.map +1 -0
- package/dist/core/crypto/WitnessReceipt.js +182 -0
- package/dist/core/crypto/WitnessReceipt.js.map +1 -0
- package/dist/core/crypto/encryptedFields.d.ts +27 -0
- package/dist/core/crypto/encryptedFields.d.ts.map +1 -0
- package/dist/core/crypto/encryptedFields.js +58 -0
- package/dist/core/crypto/encryptedFields.js.map +1 -0
- package/dist/core/crypto/pbkdf2Iterations.d.ts +12 -0
- package/dist/core/crypto/pbkdf2Iterations.d.ts.map +1 -1
- package/dist/core/crypto/pbkdf2Iterations.js +23 -0
- package/dist/core/crypto/pbkdf2Iterations.js.map +1 -1
- package/dist/core/crypto/privateKeyEncryption.d.ts.map +1 -1
- package/dist/core/crypto/privateKeyEncryption.js +3 -1
- package/dist/core/crypto/privateKeyEncryption.js.map +1 -1
- package/dist/core/databaseIdValidation.d.ts +1 -1
- package/dist/core/databaseIdValidation.d.ts.map +1 -1
- package/dist/core/databaseIdValidation.js +4 -4
- package/dist/core/databaseIdValidation.js.map +1 -1
- package/dist/core/errors.d.ts +26 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +42 -1
- package/dist/core/errors.js.map +1 -1
- package/dist/core/expressions/builder.d.ts +102 -0
- package/dist/core/expressions/builder.d.ts.map +1 -0
- package/dist/core/expressions/builder.js +249 -0
- package/dist/core/expressions/builder.js.map +1 -0
- package/dist/core/expressions/evaluateExpression.d.ts +78 -0
- package/dist/core/expressions/evaluateExpression.d.ts.map +1 -0
- package/dist/core/expressions/evaluateExpression.js +386 -0
- package/dist/core/expressions/evaluateExpression.js.map +1 -0
- package/dist/core/expressions/formulaSource.d.ts +24 -0
- package/dist/core/expressions/formulaSource.d.ts.map +1 -0
- package/dist/core/expressions/formulaSource.js +765 -0
- package/dist/core/expressions/formulaSource.js.map +1 -0
- package/dist/core/expressions/index.d.ts +8 -0
- package/dist/core/expressions/index.d.ts.map +1 -0
- package/dist/core/expressions/index.js +46 -0
- package/dist/core/expressions/index.js.map +1 -0
- package/dist/core/expressions/metadata.d.ts +23 -0
- package/dist/core/expressions/metadata.d.ts.map +1 -0
- package/dist/core/expressions/metadata.js +191 -0
- package/dist/core/expressions/metadata.js.map +1 -0
- package/dist/core/expressions/types.d.ts +164 -0
- package/dist/core/expressions/types.d.ts.map +1 -0
- package/dist/core/expressions/types.js +3 -0
- package/dist/core/expressions/types.js.map +1 -0
- package/dist/core/extraction/types.d.ts +47 -0
- package/dist/core/extraction/types.d.ts.map +1 -0
- package/dist/core/extraction/types.js +42 -0
- package/dist/core/extraction/types.js.map +1 -0
- package/dist/core/index.d.ts +13 -3
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +113 -4
- package/dist/core/index.js.map +1 -1
- package/dist/core/indexing/createViewDataProvider.d.ts +84 -0
- package/dist/core/indexing/createViewDataProvider.d.ts.map +1 -0
- package/dist/core/indexing/createViewDataProvider.js +139 -0
- package/dist/core/indexing/createViewDataProvider.js.map +1 -0
- package/dist/core/indexing/fulltext/DocumentFullTextIndex.d.ts +180 -0
- package/dist/core/indexing/fulltext/DocumentFullTextIndex.d.ts.map +1 -0
- package/dist/core/indexing/fulltext/DocumentFullTextIndex.js +548 -0
- package/dist/core/indexing/fulltext/DocumentFullTextIndex.js.map +1 -0
- package/dist/core/indexing/fulltext/SearchEngineAdapter.d.ts +69 -0
- package/dist/core/indexing/fulltext/SearchEngineAdapter.d.ts.map +1 -0
- package/dist/core/indexing/fulltext/SearchEngineAdapter.js +183 -0
- package/dist/core/indexing/fulltext/SearchEngineAdapter.js.map +1 -0
- package/dist/core/indexing/fulltext/extractFulltextText.d.ts +34 -0
- package/dist/core/indexing/fulltext/extractFulltextText.d.ts.map +1 -0
- package/dist/core/indexing/fulltext/extractFulltextText.js +129 -0
- package/dist/core/indexing/fulltext/extractFulltextText.js.map +1 -0
- package/dist/core/indexing/fulltext/index.d.ts +5 -0
- package/dist/core/indexing/fulltext/index.d.ts.map +1 -0
- package/dist/core/indexing/fulltext/index.js +20 -0
- package/dist/core/indexing/fulltext/index.js.map +1 -0
- package/dist/core/indexing/fulltext/types.d.ts +168 -0
- package/dist/core/indexing/fulltext/types.d.ts.map +1 -0
- package/dist/core/indexing/fulltext/types.js +89 -0
- package/dist/core/indexing/fulltext/types.js.map +1 -0
- package/dist/core/indexing/summary/DocumentSummaryStore.d.ts +137 -0
- package/dist/core/indexing/summary/DocumentSummaryStore.d.ts.map +1 -0
- package/dist/core/indexing/summary/DocumentSummaryStore.js +438 -0
- package/dist/core/indexing/summary/DocumentSummaryStore.js.map +1 -0
- package/dist/core/indexing/summary/SummaryVirtualViewDataProvider.d.ts +72 -0
- package/dist/core/indexing/summary/SummaryVirtualViewDataProvider.d.ts.map +1 -0
- package/dist/core/indexing/summary/SummaryVirtualViewDataProvider.js +221 -0
- package/dist/core/indexing/summary/SummaryVirtualViewDataProvider.js.map +1 -0
- package/dist/core/indexing/summary/extractSummaryFields.d.ts +75 -0
- package/dist/core/indexing/summary/extractSummaryFields.d.ts.map +1 -0
- package/dist/core/indexing/summary/extractSummaryFields.js +266 -0
- package/dist/core/indexing/summary/extractSummaryFields.js.map +1 -0
- package/dist/core/indexing/summary/index.d.ts +5 -0
- package/dist/core/indexing/summary/index.d.ts.map +1 -0
- package/dist/core/indexing/summary/index.js +23 -0
- package/dist/core/indexing/summary/index.js.map +1 -0
- package/dist/core/indexing/summary/types.d.ts +119 -0
- package/dist/core/indexing/summary/types.d.ts.map +1 -0
- package/dist/core/indexing/summary/types.js +81 -0
- package/dist/core/indexing/summary/types.js.map +1 -0
- package/dist/core/indexing/virtualviews/IVirtualViewDataProvider.d.ts +47 -1
- package/dist/core/indexing/virtualviews/IVirtualViewDataProvider.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.d.ts +24 -8
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.js +96 -41
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.js.map +1 -1
- package/dist/core/indexing/virtualviews/ViewEntrySortKey.d.ts +2 -0
- package/dist/core/indexing/virtualviews/ViewEntrySortKey.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/ViewEntrySortKey.js +8 -3
- package/dist/core/indexing/virtualviews/ViewEntrySortKey.js.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualView.d.ts +111 -5
- package/dist/core/indexing/virtualviews/VirtualView.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualView.js +266 -75
- package/dist/core/indexing/virtualviews/VirtualView.js.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualViewColumn.d.ts +12 -0
- package/dist/core/indexing/virtualviews/VirtualViewColumn.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualViewColumn.js +1 -0
- package/dist/core/indexing/virtualviews/VirtualViewColumn.js.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.d.ts +12 -0
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.js +66 -5
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.js.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualViewFactory.d.ts +50 -6
- package/dist/core/indexing/virtualviews/VirtualViewFactory.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualViewFactory.js +54 -12
- package/dist/core/indexing/virtualviews/VirtualViewFactory.js.map +1 -1
- package/dist/core/indexing/virtualviews/index.d.ts +3 -3
- package/dist/core/indexing/virtualviews/index.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/index.js.map +1 -1
- package/dist/core/indexing/virtualviews/types.d.ts +6 -0
- package/dist/core/indexing/virtualviews/types.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/types.js +11 -3
- package/dist/core/indexing/virtualviews/types.js.map +1 -1
- package/dist/core/keys/KeyBag.d.ts +25 -0
- package/dist/core/keys/KeyBag.d.ts.map +1 -1
- package/dist/core/keys/KeyBag.js +37 -1
- package/dist/core/keys/KeyBag.js.map +1 -1
- package/dist/core/query/executeQuery.d.ts +18 -0
- package/dist/core/query/executeQuery.d.ts.map +1 -0
- package/dist/core/query/executeQuery.js +313 -0
- package/dist/core/query/executeQuery.js.map +1 -0
- package/dist/core/query/index.d.ts +5 -0
- package/dist/core/query/index.d.ts.map +1 -0
- package/dist/core/query/index.js +14 -0
- package/dist/core/query/index.js.map +1 -0
- package/dist/core/query/queryLive.d.ts +27 -0
- package/dist/core/query/queryLive.d.ts.map +1 -0
- package/dist/core/query/queryLive.js +104 -0
- package/dist/core/query/queryLive.js.map +1 -0
- package/dist/core/query/queryView.d.ts +156 -0
- package/dist/core/query/queryView.d.ts.map +1 -0
- package/dist/core/query/queryView.js +266 -0
- package/dist/core/query/queryView.js.map +1 -0
- package/dist/core/query/types.d.ts +121 -0
- package/dist/core/query/types.d.ts.map +1 -0
- package/dist/core/query/types.js +18 -0
- package/dist/core/query/types.js.map +1 -0
- package/dist/core/storeEntryTime.d.ts +57 -0
- package/dist/core/storeEntryTime.d.ts.map +1 -0
- package/dist/core/storeEntryTime.js +72 -0
- package/dist/core/storeEntryTime.js.map +1 -0
- package/dist/core/types.d.ts +1509 -39
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +13 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/uri/MindooURI.d.ts +53 -1
- package/dist/core/uri/MindooURI.d.ts.map +1 -1
- package/dist/core/uri/MindooURI.js +135 -0
- package/dist/core/uri/MindooURI.js.map +1 -1
- package/dist/core/utils/urlSafety.d.ts +46 -0
- package/dist/core/utils/urlSafety.d.ts.map +1 -0
- package/dist/core/utils/urlSafety.js +144 -0
- package/dist/core/utils/urlSafety.js.map +1 -0
- package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.d.ts +14 -0
- package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.d.ts.map +1 -1
- package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.js +95 -4
- package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.js.map +1 -1
- package/dist/node/server/CapabilityMatcher.d.ts +10 -0
- package/dist/node/server/CapabilityMatcher.d.ts.map +1 -1
- package/dist/node/server/CapabilityMatcher.js +14 -2
- package/dist/node/server/CapabilityMatcher.js.map +1 -1
- package/dist/node/server/MindooDBServer.d.ts.map +1 -1
- package/dist/node/server/MindooDBServer.js +117 -8
- package/dist/node/server/MindooDBServer.js.map +1 -1
- package/dist/node/server/PurgedDocRegistry.d.ts +32 -0
- package/dist/node/server/PurgedDocRegistry.d.ts.map +1 -0
- package/dist/node/server/PurgedDocRegistry.js +94 -0
- package/dist/node/server/PurgedDocRegistry.js.map +1 -0
- package/dist/node/server/ServerSync.d.ts.map +1 -1
- package/dist/node/server/ServerSync.js +5 -2
- package/dist/node/server/ServerSync.js.map +1 -1
- package/dist/node/server/SystemAdminAuth.d.ts +10 -0
- package/dist/node/server/SystemAdminAuth.d.ts.map +1 -1
- package/dist/node/server/SystemAdminAuth.js +25 -0
- package/dist/node/server/SystemAdminAuth.js.map +1 -1
- package/dist/node/server/TenantManager.d.ts +95 -1
- package/dist/node/server/TenantManager.d.ts.map +1 -1
- package/dist/node/server/TenantManager.js +382 -15
- package/dist/node/server/TenantManager.js.map +1 -1
- package/dist/node/server/config.d.ts.map +1 -1
- package/dist/node/server/config.js +5 -1
- package/dist/node/server/config.js.map +1 -1
- package/dist/node/server/types.d.ts +29 -3
- package/dist/node/server/types.d.ts.map +1 -1
- package/dist/node/server/types.js +12 -0
- package/dist/node/server/types.js.map +1 -1
- package/dist/node/server/validation.d.ts +6 -0
- package/dist/node/server/validation.d.ts.map +1 -1
- package/dist/node/server/validation.js +7 -1
- package/dist/node/server/validation.js.map +1 -1
- package/package.json +4 -3
- package/dist/appendonlystores/BasicOnDiskContentAddressedStoreFactory.d.ts +0 -8
- package/dist/appendonlystores/BasicOnDiskContentAddressedStoreFactory.d.ts.map +0 -1
- package/dist/appendonlystores/BasicOnDiskContentAddressedStoreFactory.js +0 -16
- package/dist/appendonlystores/BasicOnDiskContentAddressedStoreFactory.js.map +0 -1
- package/dist/core/appendonlystores/BasicOnDiskContentAddressedStore.d.ts +0 -68
- package/dist/core/appendonlystores/BasicOnDiskContentAddressedStore.d.ts.map +0 -1
- package/dist/core/appendonlystores/BasicOnDiskContentAddressedStore.js +0 -659
- package/dist/core/appendonlystores/BasicOnDiskContentAddressedStore.js.map +0 -1
- package/dist/node/attachments/writeAttachmentToFile.d.ts +0 -15
- package/dist/node/attachments/writeAttachmentToFile.d.ts.map +0 -1
- package/dist/node/attachments/writeAttachmentToFile.js +0 -73
- package/dist/node/attachments/writeAttachmentToFile.js.map +0 -1
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MiniSearchAdapter = void 0;
|
|
7
|
+
exports.createTokenizer = createTokenizer;
|
|
8
|
+
const minisearch_1 = __importDefault(require("minisearch"));
|
|
9
|
+
const types_1 = require("./types");
|
|
10
|
+
/**
|
|
11
|
+
* Build the tokenizer for a language: `Intl.Segmenter` word segmentation
|
|
12
|
+
* where available (correct for CJK and other scripts without word
|
|
13
|
+
* spaces), otherwise a Unicode letters/digits fallback (e.g. React
|
|
14
|
+
* Native/Hermes without `Intl.Segmenter`).
|
|
15
|
+
*/
|
|
16
|
+
function createTokenizer(language) {
|
|
17
|
+
const SegmenterCtor = Intl.Segmenter;
|
|
18
|
+
if (typeof SegmenterCtor === "function") {
|
|
19
|
+
try {
|
|
20
|
+
const segmenter = new SegmenterCtor(language === "und" ? undefined : language, {
|
|
21
|
+
granularity: "word",
|
|
22
|
+
});
|
|
23
|
+
return (text) => {
|
|
24
|
+
const tokens = [];
|
|
25
|
+
for (const part of segmenter.segment(text)) {
|
|
26
|
+
if (part.isWordLike) {
|
|
27
|
+
tokens.push(part.segment);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return tokens;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Unknown locale or Segmenter quirk → fall through to the regex.
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
let wordRe;
|
|
38
|
+
try {
|
|
39
|
+
wordRe = /[\p{L}\p{N}]+/gu;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Engines without Unicode property escapes: cover ASCII plus the
|
|
43
|
+
// common Latin/Cyrillic/CJK ranges.
|
|
44
|
+
wordRe = /[A-Za-z0-9\u00C0-\u024F\u0370-\u03FF\u0400-\u04FF\u3040-\u30FF\u4E00-\u9FFF]+/g;
|
|
45
|
+
}
|
|
46
|
+
return (text) => text.match(wordRe) ?? [];
|
|
47
|
+
}
|
|
48
|
+
const ID_FIELD = "__docId";
|
|
49
|
+
/**
|
|
50
|
+
* MiniSearch-backed {@link SearchEngineAdapter}.
|
|
51
|
+
*
|
|
52
|
+
* MiniSearch requires the indexed field list at construction time, but
|
|
53
|
+
* mindoodb documents are schemaless (auto mode indexes whatever string
|
|
54
|
+
* fields documents have). The adapter therefore keeps the extracted
|
|
55
|
+
* source texts per document and transparently rebuilds the MiniSearch
|
|
56
|
+
* instance when a previously unseen field name appears — rare in
|
|
57
|
+
* practice, since real databases converge on a stable field set quickly.
|
|
58
|
+
* The kept source texts also make the serialized state self-contained.
|
|
59
|
+
*/
|
|
60
|
+
class MiniSearchAdapter {
|
|
61
|
+
constructor(language, initialFields = []) {
|
|
62
|
+
this.docs = new Map();
|
|
63
|
+
this.language = language;
|
|
64
|
+
this.tokenize = createTokenizer(language);
|
|
65
|
+
this.fieldNames = [...new Set(initialFields)].sort();
|
|
66
|
+
this.engine = this.createEngine(this.fieldNames);
|
|
67
|
+
}
|
|
68
|
+
engineOptions(fields) {
|
|
69
|
+
return {
|
|
70
|
+
idField: ID_FIELD,
|
|
71
|
+
fields,
|
|
72
|
+
extractField: (document, fieldName) => {
|
|
73
|
+
if (fieldName === ID_FIELD) {
|
|
74
|
+
return document.__docId;
|
|
75
|
+
}
|
|
76
|
+
return document.fields[fieldName] ?? "";
|
|
77
|
+
},
|
|
78
|
+
tokenize: (text) => this.tokenize(text),
|
|
79
|
+
processTerm: (term) => {
|
|
80
|
+
const processed = term.toLowerCase();
|
|
81
|
+
return processed.length > 0 ? processed : null;
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
createEngine(fields) {
|
|
86
|
+
return new minisearch_1.default(this.engineOptions(fields));
|
|
87
|
+
}
|
|
88
|
+
/** Rebuild the MiniSearch instance over a grown field list. */
|
|
89
|
+
rebuildWithFields(fields) {
|
|
90
|
+
this.fieldNames = [...new Set(fields)].sort();
|
|
91
|
+
this.engine = this.createEngine(this.fieldNames);
|
|
92
|
+
for (const [docId, docFields] of this.docs) {
|
|
93
|
+
this.engine.add({ __docId: docId, fields: docFields });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
add(docId, fields) {
|
|
97
|
+
const newFields = Object.keys(fields).filter((name) => !this.fieldNames.includes(name));
|
|
98
|
+
// Full removal via the kept source texts, NOT discard(): discarded
|
|
99
|
+
// documents keep their postings as "dirt" until a vacuum and keep
|
|
100
|
+
// counting into document frequencies — with the changefeed re-adding
|
|
101
|
+
// every edited document, that skews BM25 IDF (scores can even go
|
|
102
|
+
// negative). remove() is synchronous and leaves no dirt behind.
|
|
103
|
+
const previous = this.docs.get(docId);
|
|
104
|
+
if (previous) {
|
|
105
|
+
this.engine.remove({ __docId: docId, fields: previous });
|
|
106
|
+
}
|
|
107
|
+
this.docs.set(docId, fields);
|
|
108
|
+
if (newFields.length > 0) {
|
|
109
|
+
this.rebuildWithFields([...this.fieldNames, ...newFields]);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
this.engine.add({ __docId: docId, fields });
|
|
113
|
+
}
|
|
114
|
+
remove(docId) {
|
|
115
|
+
const previous = this.docs.get(docId);
|
|
116
|
+
if (previous) {
|
|
117
|
+
this.docs.delete(docId);
|
|
118
|
+
this.engine.remove({ __docId: docId, fields: previous });
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
has(docId) {
|
|
122
|
+
return this.docs.has(docId);
|
|
123
|
+
}
|
|
124
|
+
search(query, options) {
|
|
125
|
+
if (query.trim().length === 0 || this.docs.size === 0) {
|
|
126
|
+
return [];
|
|
127
|
+
}
|
|
128
|
+
const fields = options?.fields?.filter((field) => this.fieldNames.includes(field));
|
|
129
|
+
if (options?.fields && (!fields || fields.length === 0)) {
|
|
130
|
+
// Every requested field is unknown to the index → nothing can match.
|
|
131
|
+
return [];
|
|
132
|
+
}
|
|
133
|
+
const results = this.engine.search(query, {
|
|
134
|
+
fields,
|
|
135
|
+
prefix: options?.prefix ?? true,
|
|
136
|
+
fuzzy: options?.fuzzy ?? false,
|
|
137
|
+
combineWith: options?.combineWith ?? "AND",
|
|
138
|
+
});
|
|
139
|
+
const hits = [];
|
|
140
|
+
const limit = options?.limit;
|
|
141
|
+
for (const result of results) {
|
|
142
|
+
hits.push({ docId: String(result.id), score: result.score });
|
|
143
|
+
if (limit !== undefined && hits.length >= limit) {
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return hits;
|
|
148
|
+
}
|
|
149
|
+
getDocumentCount() {
|
|
150
|
+
return this.docs.size;
|
|
151
|
+
}
|
|
152
|
+
getFieldNames() {
|
|
153
|
+
return [...this.fieldNames];
|
|
154
|
+
}
|
|
155
|
+
serialize() {
|
|
156
|
+
const state = {
|
|
157
|
+
formatVersion: types_1.FULLTEXT_INDEX_FORMAT_VERSION,
|
|
158
|
+
language: this.language,
|
|
159
|
+
fields: this.fieldNames,
|
|
160
|
+
docs: Array.from(this.docs.entries()),
|
|
161
|
+
index: JSON.stringify(this.engine.toJSON()),
|
|
162
|
+
};
|
|
163
|
+
return new TextEncoder().encode(JSON.stringify(state));
|
|
164
|
+
}
|
|
165
|
+
load(bytes) {
|
|
166
|
+
const state = JSON.parse(new TextDecoder().decode(bytes));
|
|
167
|
+
if (state.formatVersion !== types_1.FULLTEXT_INDEX_FORMAT_VERSION) {
|
|
168
|
+
throw new Error(`Unsupported full-text index format version ${state.formatVersion} (expected ${types_1.FULLTEXT_INDEX_FORMAT_VERSION}).`);
|
|
169
|
+
}
|
|
170
|
+
if (state.language !== this.language) {
|
|
171
|
+
throw new Error(`Persisted full-text index language "${state.language}" does not match configured "${this.language}".`);
|
|
172
|
+
}
|
|
173
|
+
this.fieldNames = [...state.fields];
|
|
174
|
+
this.docs = new Map(state.docs);
|
|
175
|
+
this.engine = minisearch_1.default.loadJSON(state.index, this.engineOptions(this.fieldNames));
|
|
176
|
+
}
|
|
177
|
+
clear() {
|
|
178
|
+
this.docs.clear();
|
|
179
|
+
this.engine = this.createEngine(this.fieldNames);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
exports.MiniSearchAdapter = MiniSearchAdapter;
|
|
183
|
+
//# sourceMappingURL=SearchEngineAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchEngineAdapter.js","sourceRoot":"","sources":["../../../../src/core/indexing/fulltext/SearchEngineAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ResolvedFulltextConfig } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Collect indexable plain text from an arbitrary materialized document
|
|
4
|
+
* value:
|
|
5
|
+
*
|
|
6
|
+
* - strings are taken as-is (Automerge text fields materialize as plain
|
|
7
|
+
* strings; rich-text block markers are normalized to whitespace)
|
|
8
|
+
* - arrays contribute the text of their elements, joined by whitespace
|
|
9
|
+
* - rich-text span objects (`{ type: "text", value }`) and tagged
|
|
10
|
+
* immutable strings (`{ type: "immutableString", value }`) contribute
|
|
11
|
+
* their `value`; block spans contribute a boundary space
|
|
12
|
+
* - other objects contribute the text of their own values (metadata keys
|
|
13
|
+
* of span shapes are skipped), so span arrays stored as plain JSON and
|
|
14
|
+
* nested structures are searchable without special-casing every shape
|
|
15
|
+
* - numbers/booleans/null are NOT indexed (full-text is for text;
|
|
16
|
+
* structured values belong in query filters)
|
|
17
|
+
*
|
|
18
|
+
* Depth is capped defensively so cyclic-ish/pathological structures can
|
|
19
|
+
* never stall indexing.
|
|
20
|
+
*/
|
|
21
|
+
export declare function collectPlainText(value: unknown, depth?: number): string;
|
|
22
|
+
/**
|
|
23
|
+
* Extract the indexable text map for one document payload according to
|
|
24
|
+
* the resolved configuration:
|
|
25
|
+
*
|
|
26
|
+
* - explicit `include` paths (any nesting, keyed by the full dot-path), or
|
|
27
|
+
* - auto mode (empty `include`): every non-underscore top-level field
|
|
28
|
+
* whose extracted text is non-empty (encrypted-convention fields are
|
|
29
|
+
* skipped)
|
|
30
|
+
*
|
|
31
|
+
* Every value is capped at `maxFieldBytes` (truncated, not skipped).
|
|
32
|
+
*/
|
|
33
|
+
export declare function extractFulltextFields(data: Record<string, unknown>, config: ResolvedFulltextConfig): Record<string, string>;
|
|
34
|
+
//# sourceMappingURL=extractFulltextText.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractFulltextText.d.ts","sourceRoot":"","sources":["../../../../src/core/indexing/fulltext/extractFulltextText.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAiBtD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,GAAE,MAAU,GAAG,MAAM,CAwC1E;AAwBD;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,sBAAsB,GAC7B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAuBxB"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.collectPlainText = collectPlainText;
|
|
4
|
+
exports.extractFulltextFields = extractFulltextFields;
|
|
5
|
+
const extractSummaryFields_1 = require("../summary/extractSummaryFields");
|
|
6
|
+
/**
|
|
7
|
+
* Automerge materializes rich-text block markers as the Unicode object
|
|
8
|
+
* replacement character; treat it (and other separator/control chars) as
|
|
9
|
+
* whitespace so words on both sides of a block boundary stay separate
|
|
10
|
+
* tokens.
|
|
11
|
+
*/
|
|
12
|
+
const BLOCK_MARKER_RE = /[\u{FFFC}\u{0000}-\u{0008}\u{000B}\u{000C}\u{000E}-\u{001F}]/gu;
|
|
13
|
+
function normalizeText(text) {
|
|
14
|
+
return text.replace(BLOCK_MARKER_RE, " ");
|
|
15
|
+
}
|
|
16
|
+
/** Keys of rich-text span objects that never carry indexable content. */
|
|
17
|
+
const SPAN_METADATA_KEYS = new Set(["type", "marks", "parents", "attr", "attrs"]);
|
|
18
|
+
/**
|
|
19
|
+
* Collect indexable plain text from an arbitrary materialized document
|
|
20
|
+
* value:
|
|
21
|
+
*
|
|
22
|
+
* - strings are taken as-is (Automerge text fields materialize as plain
|
|
23
|
+
* strings; rich-text block markers are normalized to whitespace)
|
|
24
|
+
* - arrays contribute the text of their elements, joined by whitespace
|
|
25
|
+
* - rich-text span objects (`{ type: "text", value }`) and tagged
|
|
26
|
+
* immutable strings (`{ type: "immutableString", value }`) contribute
|
|
27
|
+
* their `value`; block spans contribute a boundary space
|
|
28
|
+
* - other objects contribute the text of their own values (metadata keys
|
|
29
|
+
* of span shapes are skipped), so span arrays stored as plain JSON and
|
|
30
|
+
* nested structures are searchable without special-casing every shape
|
|
31
|
+
* - numbers/booleans/null are NOT indexed (full-text is for text;
|
|
32
|
+
* structured values belong in query filters)
|
|
33
|
+
*
|
|
34
|
+
* Depth is capped defensively so cyclic-ish/pathological structures can
|
|
35
|
+
* never stall indexing.
|
|
36
|
+
*/
|
|
37
|
+
function collectPlainText(value, depth = 0) {
|
|
38
|
+
if (typeof value === "string") {
|
|
39
|
+
return normalizeText(value);
|
|
40
|
+
}
|
|
41
|
+
if (value === null || typeof value !== "object" || depth > 16) {
|
|
42
|
+
return "";
|
|
43
|
+
}
|
|
44
|
+
if (Array.isArray(value)) {
|
|
45
|
+
const parts = [];
|
|
46
|
+
for (const item of value) {
|
|
47
|
+
const text = collectPlainText(item, depth + 1);
|
|
48
|
+
if (text.length > 0) {
|
|
49
|
+
parts.push(text);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return parts.join(" ");
|
|
53
|
+
}
|
|
54
|
+
const raw = value;
|
|
55
|
+
// Rich-text span shapes and tagged immutable strings.
|
|
56
|
+
if (typeof raw.type === "string") {
|
|
57
|
+
if ((raw.type === "text" || raw.type === "immutableString") && typeof raw.value === "string") {
|
|
58
|
+
return normalizeText(raw.value);
|
|
59
|
+
}
|
|
60
|
+
if (raw.type === "block") {
|
|
61
|
+
return "";
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const parts = [];
|
|
65
|
+
for (const [key, item] of Object.entries(raw)) {
|
|
66
|
+
if (SPAN_METADATA_KEYS.has(key)) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
const text = collectPlainText(item, depth + 1);
|
|
70
|
+
if (text.length > 0) {
|
|
71
|
+
parts.push(text);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return parts.join(" ");
|
|
75
|
+
}
|
|
76
|
+
/** Truncation that never leaves a surrogate half at the cut point. */
|
|
77
|
+
function truncateText(text, maxBytes) {
|
|
78
|
+
if (maxBytes <= 0 || text.length <= maxBytes) {
|
|
79
|
+
return text;
|
|
80
|
+
}
|
|
81
|
+
let end = maxBytes;
|
|
82
|
+
const last = text.charCodeAt(end - 1);
|
|
83
|
+
if (last >= 0xd800 && last <= 0xdbff) {
|
|
84
|
+
end--;
|
|
85
|
+
}
|
|
86
|
+
return text.slice(0, end);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Fields following the encrypted-field convention hold ciphertext —
|
|
90
|
+
* useless in a full-text index. Explicit `include` still wins for callers
|
|
91
|
+
* who really want it.
|
|
92
|
+
*/
|
|
93
|
+
function isEncryptedConventionField(key) {
|
|
94
|
+
return key.endsWith("_encrypted") || key.endsWith("_encrypted_key");
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Extract the indexable text map for one document payload according to
|
|
98
|
+
* the resolved configuration:
|
|
99
|
+
*
|
|
100
|
+
* - explicit `include` paths (any nesting, keyed by the full dot-path), or
|
|
101
|
+
* - auto mode (empty `include`): every non-underscore top-level field
|
|
102
|
+
* whose extracted text is non-empty (encrypted-convention fields are
|
|
103
|
+
* skipped)
|
|
104
|
+
*
|
|
105
|
+
* Every value is capped at `maxFieldBytes` (truncated, not skipped).
|
|
106
|
+
*/
|
|
107
|
+
function extractFulltextFields(data, config) {
|
|
108
|
+
const fields = {};
|
|
109
|
+
if (config.include.length > 0) {
|
|
110
|
+
for (const path of config.include) {
|
|
111
|
+
const text = collectPlainText((0, extractSummaryFields_1.resolveFieldPath)(data, path));
|
|
112
|
+
if (text.trim().length > 0) {
|
|
113
|
+
fields[path] = truncateText(text, config.maxFieldBytes);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return fields;
|
|
117
|
+
}
|
|
118
|
+
for (const [key, value] of Object.entries(data)) {
|
|
119
|
+
if (key.startsWith("_") || isEncryptedConventionField(key)) {
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
const text = collectPlainText(value);
|
|
123
|
+
if (text.trim().length > 0) {
|
|
124
|
+
fields[key] = truncateText(text, config.maxFieldBytes);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return fields;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=extractFulltextText.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractFulltextText.js","sourceRoot":"","sources":["../../../../src/core/indexing/fulltext/extractFulltextText.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { DocumentFullTextIndex } from "./DocumentFullTextIndex";
|
|
2
|
+
export { MiniSearchAdapter, createTokenizer, type SearchEngineAdapter, } from "./SearchEngineAdapter";
|
|
3
|
+
export { resolveFulltextConfig, sanitizeFulltextConfig, computeFulltextConfigFingerprint, FULLTEXT_SETUP_FIELD, FULLTEXT_ATTACHMENT_FIELD, FULLTEXT_INDEX_FORMAT_VERSION, DEFAULT_FULLTEXT_MAX_FIELD_BYTES, type FulltextConfig, type ResolvedFulltextConfig, type FulltextCoverage, type FulltextSearchHit, type FulltextSearchOptions, type FulltextSearchResult, type AttachmentTextExtractor, } from "./types";
|
|
4
|
+
export { collectPlainText, extractFulltextFields } from "./extractFulltextText";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/indexing/fulltext/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,KAAK,mBAAmB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,gCAAgC,EAChC,oBAAoB,EACpB,yBAAyB,EACzB,6BAA6B,EAC7B,gCAAgC,EAChC,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,GAC7B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extractFulltextFields = exports.collectPlainText = exports.DEFAULT_FULLTEXT_MAX_FIELD_BYTES = exports.FULLTEXT_INDEX_FORMAT_VERSION = exports.FULLTEXT_ATTACHMENT_FIELD = exports.FULLTEXT_SETUP_FIELD = exports.computeFulltextConfigFingerprint = exports.sanitizeFulltextConfig = exports.resolveFulltextConfig = exports.createTokenizer = exports.MiniSearchAdapter = exports.DocumentFullTextIndex = void 0;
|
|
4
|
+
var DocumentFullTextIndex_1 = require("./DocumentFullTextIndex");
|
|
5
|
+
Object.defineProperty(exports, "DocumentFullTextIndex", { enumerable: true, get: function () { return DocumentFullTextIndex_1.DocumentFullTextIndex; } });
|
|
6
|
+
var SearchEngineAdapter_1 = require("./SearchEngineAdapter");
|
|
7
|
+
Object.defineProperty(exports, "MiniSearchAdapter", { enumerable: true, get: function () { return SearchEngineAdapter_1.MiniSearchAdapter; } });
|
|
8
|
+
Object.defineProperty(exports, "createTokenizer", { enumerable: true, get: function () { return SearchEngineAdapter_1.createTokenizer; } });
|
|
9
|
+
var types_1 = require("./types");
|
|
10
|
+
Object.defineProperty(exports, "resolveFulltextConfig", { enumerable: true, get: function () { return types_1.resolveFulltextConfig; } });
|
|
11
|
+
Object.defineProperty(exports, "sanitizeFulltextConfig", { enumerable: true, get: function () { return types_1.sanitizeFulltextConfig; } });
|
|
12
|
+
Object.defineProperty(exports, "computeFulltextConfigFingerprint", { enumerable: true, get: function () { return types_1.computeFulltextConfigFingerprint; } });
|
|
13
|
+
Object.defineProperty(exports, "FULLTEXT_SETUP_FIELD", { enumerable: true, get: function () { return types_1.FULLTEXT_SETUP_FIELD; } });
|
|
14
|
+
Object.defineProperty(exports, "FULLTEXT_ATTACHMENT_FIELD", { enumerable: true, get: function () { return types_1.FULLTEXT_ATTACHMENT_FIELD; } });
|
|
15
|
+
Object.defineProperty(exports, "FULLTEXT_INDEX_FORMAT_VERSION", { enumerable: true, get: function () { return types_1.FULLTEXT_INDEX_FORMAT_VERSION; } });
|
|
16
|
+
Object.defineProperty(exports, "DEFAULT_FULLTEXT_MAX_FIELD_BYTES", { enumerable: true, get: function () { return types_1.DEFAULT_FULLTEXT_MAX_FIELD_BYTES; } });
|
|
17
|
+
var extractFulltextText_1 = require("./extractFulltextText");
|
|
18
|
+
Object.defineProperty(exports, "collectPlainText", { enumerable: true, get: function () { return extractFulltextText_1.collectPlainText; } });
|
|
19
|
+
Object.defineProperty(exports, "extractFulltextFields", { enumerable: true, get: function () { return extractFulltextText_1.extractFulltextFields; } });
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/indexing/fulltext/index.ts"],"names":[],"mappings":";;;AAAA,iEAAgE;AAAvD,8HAAA,qBAAqB,OAAA;AAC9B,6DAI+B;AAH7B,wHAAA,iBAAiB,OAAA;AACjB,sHAAA,eAAe,OAAA;AAGjB,iCAeiB;AAdf,8GAAA,qBAAqB,OAAA;AACrB,+GAAA,sBAAsB,OAAA;AACtB,yHAAA,gCAAgC,OAAA;AAChC,6GAAA,oBAAoB,OAAA;AACpB,kHAAA,yBAAyB,OAAA;AACzB,sHAAA,6BAA6B,OAAA;AAC7B,yHAAA,gCAAgC,OAAA;AASlC,6DAAgF;AAAvE,uHAAA,gBAAgB,OAAA;AAAE,4HAAA,qBAAqB,OAAA"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import type { ProcessChangesCursor } from "../../types";
|
|
2
|
+
/**
|
|
3
|
+
* Field of the `dbsetup` document holding the {@link FulltextConfig} used
|
|
4
|
+
* by full-text indexes that were not given an explicit configuration in
|
|
5
|
+
* code. Lives next to `summarySetup` in the same synced setup document
|
|
6
|
+
* (see docs/adhoc-queries.md and docs/fulltext-search.md).
|
|
7
|
+
*/
|
|
8
|
+
export declare const FULLTEXT_SETUP_FIELD = "fulltextSetup";
|
|
9
|
+
/**
|
|
10
|
+
* Version of the persisted index format (serialization layout AND the
|
|
11
|
+
* engine/tokenizer behavior). Part of the config fingerprint, so bumping
|
|
12
|
+
* it invalidates persisted indexes and triggers a clean rebuild.
|
|
13
|
+
*/
|
|
14
|
+
export declare const FULLTEXT_INDEX_FORMAT_VERSION = 3;
|
|
15
|
+
/**
|
|
16
|
+
* Default per-field cap (approximate bytes, JS string length) for text
|
|
17
|
+
* extracted into the full-text index. Longer values are truncated — not
|
|
18
|
+
* skipped — so a huge e-mail body still contributes its first part.
|
|
19
|
+
*/
|
|
20
|
+
export declare const DEFAULT_FULLTEXT_MAX_FIELD_BYTES: number;
|
|
21
|
+
/**
|
|
22
|
+
* Synthetic index field holding text extracted from a document's
|
|
23
|
+
* attachments (via registered {@link AttachmentTextExtractor}s). Hits
|
|
24
|
+
* stay document-scoped (the Notes model): searching matches the document,
|
|
25
|
+
* not an individual attachment.
|
|
26
|
+
*/
|
|
27
|
+
export declare const FULLTEXT_ATTACHMENT_FIELD = "_attachments";
|
|
28
|
+
/**
|
|
29
|
+
* Configuration of the client-side full-text index (see
|
|
30
|
+
* docs/fulltext-search.md).
|
|
31
|
+
*
|
|
32
|
+
* Like the summary configuration this is a derived, local index setting:
|
|
33
|
+
* changing it never rewrites documents, it only triggers a resumable
|
|
34
|
+
* backfill over the changefeed.
|
|
35
|
+
*/
|
|
36
|
+
export interface FulltextConfig {
|
|
37
|
+
/**
|
|
38
|
+
* Master switch. The full-text index is OPT-IN (default `false`):
|
|
39
|
+
* unlike the summary buffer it costs indexing time and RAM only apps
|
|
40
|
+
* that actually search should pay for.
|
|
41
|
+
*/
|
|
42
|
+
enabled?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Dot-separated document field paths to index. When empty or omitted
|
|
45
|
+
* (auto mode), every non-underscore top-level field whose extracted
|
|
46
|
+
* plain text is non-empty is indexed. Explicit paths may be nested and
|
|
47
|
+
* may point at long-text / rich-text fields that are deliberately kept
|
|
48
|
+
* out of the summary buffer.
|
|
49
|
+
*/
|
|
50
|
+
include?: string[];
|
|
51
|
+
/**
|
|
52
|
+
* When `true`, text is extracted from document attachments through the
|
|
53
|
+
* registered {@link AttachmentTextExtractor}s and indexed under the
|
|
54
|
+
* synthetic {@link FULLTEXT_ATTACHMENT_FIELD} field. Without registered
|
|
55
|
+
* extractors this setting has no effect. Default: `false`.
|
|
56
|
+
*/
|
|
57
|
+
attachments?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* BCP-47 language tag steering the tokenizer (`Intl.Segmenter` locale
|
|
60
|
+
* where available). Part of the config fingerprint: changing the
|
|
61
|
+
* language rebuilds the index. Default: `"und"` (undetermined —
|
|
62
|
+
* language-neutral Unicode segmentation).
|
|
63
|
+
*/
|
|
64
|
+
language?: string;
|
|
65
|
+
/**
|
|
66
|
+
* Per-field cap (approximate bytes) for extracted text. Values above
|
|
67
|
+
* the cap are truncated, not skipped.
|
|
68
|
+
* Default: {@link DEFAULT_FULLTEXT_MAX_FIELD_BYTES}.
|
|
69
|
+
*/
|
|
70
|
+
maxFieldBytes?: number;
|
|
71
|
+
}
|
|
72
|
+
/** {@link FulltextConfig} with all defaults applied. */
|
|
73
|
+
export interface ResolvedFulltextConfig {
|
|
74
|
+
enabled: boolean;
|
|
75
|
+
include: string[];
|
|
76
|
+
attachments: boolean;
|
|
77
|
+
language: string;
|
|
78
|
+
maxFieldBytes: number;
|
|
79
|
+
}
|
|
80
|
+
export declare function resolveFulltextConfig(config?: FulltextConfig): ResolvedFulltextConfig;
|
|
81
|
+
/**
|
|
82
|
+
* Extract a {@link FulltextConfig} from an untyped value (the
|
|
83
|
+
* `fulltextSetup` field of the synced setup document). Unknown properties
|
|
84
|
+
* are dropped and wrongly-typed ones ignored, so a malformed document can
|
|
85
|
+
* never break index maintenance. Returns `undefined` when the value is
|
|
86
|
+
* not an object (missing field, deleted document) — callers fall back to
|
|
87
|
+
* the default (disabled) configuration.
|
|
88
|
+
*/
|
|
89
|
+
export declare function sanitizeFulltextConfig(value: unknown): FulltextConfig | undefined;
|
|
90
|
+
/**
|
|
91
|
+
* Deterministic fingerprint of a full-text configuration, including the
|
|
92
|
+
* index format/engine version. Persisted alongside the index; a mismatch
|
|
93
|
+
* on restore (or a config change at runtime) marks the index as
|
|
94
|
+
* `"rebuilding"` and triggers a resumable backfill.
|
|
95
|
+
*/
|
|
96
|
+
export declare function computeFulltextConfigFingerprint(config: ResolvedFulltextConfig): string;
|
|
97
|
+
/**
|
|
98
|
+
* Coverage state reported by search results: `"full"` when the index
|
|
99
|
+
* reflects the current configuration for all documents, `"rebuilding"`
|
|
100
|
+
* while a config-change backfill is still in progress.
|
|
101
|
+
*/
|
|
102
|
+
export type FulltextCoverage = "full" | "rebuilding";
|
|
103
|
+
/** One hit of a full-text search: document id plus relevance score. */
|
|
104
|
+
export interface FulltextSearchHit {
|
|
105
|
+
docId: string;
|
|
106
|
+
/** Relevance score (BM25-like, engine-specific scale; higher = better). */
|
|
107
|
+
score: number;
|
|
108
|
+
}
|
|
109
|
+
/** Options for {@link DocumentFullTextIndex.search} / `db.searchText()`. */
|
|
110
|
+
export interface FulltextSearchOptions {
|
|
111
|
+
/**
|
|
112
|
+
* Restrict matching to these index fields (document field paths, plus
|
|
113
|
+
* the synthetic {@link FULLTEXT_ATTACHMENT_FIELD}). Default: all fields.
|
|
114
|
+
*/
|
|
115
|
+
fields?: string[];
|
|
116
|
+
/** Match term prefixes (`"drag"` matches `"dragon"`). Default: `true`. */
|
|
117
|
+
prefix?: boolean;
|
|
118
|
+
/**
|
|
119
|
+
* Fuzzy matching tolerance: `true` (edit distance scaled by term
|
|
120
|
+
* length), a number (0..1 fraction of term length, or an absolute edit
|
|
121
|
+
* distance > 1), or `false` to disable. Default: `false`.
|
|
122
|
+
*/
|
|
123
|
+
fuzzy?: boolean | number;
|
|
124
|
+
/**
|
|
125
|
+
* How multiple query terms combine: `"AND"` (all terms must match,
|
|
126
|
+
* default) or `"OR"` (any term matches).
|
|
127
|
+
*/
|
|
128
|
+
combineWith?: "AND" | "OR";
|
|
129
|
+
/** Cap the number of returned hits (applied after scoring/sorting). */
|
|
130
|
+
limit?: number;
|
|
131
|
+
}
|
|
132
|
+
/** Result of {@link DocumentFullTextIndex.search} / `db.searchText()`. */
|
|
133
|
+
export interface FulltextSearchResult {
|
|
134
|
+
/** Matching documents, best score first. */
|
|
135
|
+
hits: FulltextSearchHit[];
|
|
136
|
+
coverage: FulltextCoverage;
|
|
137
|
+
}
|
|
138
|
+
/** Serialized shape of the persisted full-text metadata record. */
|
|
139
|
+
export interface FulltextMetaPayload {
|
|
140
|
+
cursor: ProcessChangesCursor | null;
|
|
141
|
+
configFingerprint: string;
|
|
142
|
+
needsBackfill: boolean;
|
|
143
|
+
backfillCursor: ProcessChangesCursor | null;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Extracts plain text from a document attachment for full-text indexing.
|
|
147
|
+
*
|
|
148
|
+
* Implementations are registered per database (see
|
|
149
|
+
* `MindooDB.registerAttachmentTextExtractor`); the host environment
|
|
150
|
+
* provides format-specific extractors (e.g. Haven registers text/CSV/JSON,
|
|
151
|
+
* PDF and Office extractors from its preview parsers). Without registered
|
|
152
|
+
* extractors — or with `fulltextSetup.attachments` unset — attachment
|
|
153
|
+
* content is not indexed.
|
|
154
|
+
*/
|
|
155
|
+
export interface AttachmentTextExtractor {
|
|
156
|
+
/** Quick capability check before any bytes are loaded. */
|
|
157
|
+
supports(mimeType: string, fileName: string): boolean;
|
|
158
|
+
/**
|
|
159
|
+
* Extract plain text from the attachment bytes. Return `null` when the
|
|
160
|
+
* content turns out to be unsupported. Thrown errors are caught and
|
|
161
|
+
* logged by the index; the attachment is then skipped.
|
|
162
|
+
*/
|
|
163
|
+
extract(bytes: Uint8Array, info: {
|
|
164
|
+
mimeType: string;
|
|
165
|
+
fileName: string;
|
|
166
|
+
}): Promise<string | null>;
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/indexing/fulltext/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,kBAAkB,CAAC;AAEpD;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,QAAa,CAAC;AAE3D;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,iBAAiB,CAAC;AAExD;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wDAAwD;AACxD,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,sBAAsB,CAQrF;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,GAAG,SAAS,CAsBjF;AAED;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CASvF;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,YAAY,CAAC;AAErD,uEAAuE;AACvE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;CACf;AAED,4EAA4E;AAC5E,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB;;;OAGG;IACH,WAAW,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC3B,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,0EAA0E;AAC1E,MAAM,WAAW,oBAAoB;IACnC,4CAA4C;IAC5C,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAC1B,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,mEAAmE;AACnE,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAC7C;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,uBAAuB;IACtC,0DAA0D;IAC1D,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACtD;;;;OAIG;IACH,OAAO,CACL,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAC3C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC3B"}
|