mcard-js 2.1.12 → 2.1.13
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.md +14 -0
- package/dist/hash/HashValidator.d.ts +14 -0
- package/dist/hash/HashValidator.d.ts.map +1 -0
- package/dist/hash/HashValidator.js +57 -0
- package/dist/hash/HashValidator.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/model/CardCollection.d.ts +92 -0
- package/dist/model/CardCollection.d.ts.map +1 -0
- package/dist/model/CardCollection.js +217 -0
- package/dist/model/CardCollection.js.map +1 -0
- package/dist/model/ContentTypeInterpreter.d.ts +23 -0
- package/dist/model/ContentTypeInterpreter.d.ts.map +1 -0
- package/dist/model/ContentTypeInterpreter.js +140 -0
- package/dist/model/ContentTypeInterpreter.js.map +1 -0
- package/dist/model/EventProducer.d.ts +10 -0
- package/dist/model/EventProducer.d.ts.map +1 -0
- package/dist/model/EventProducer.js +46 -0
- package/dist/model/EventProducer.js.map +1 -0
- package/dist/model/GTime.d.ts +44 -0
- package/dist/model/GTime.d.ts.map +1 -0
- package/dist/model/GTime.js +91 -0
- package/dist/model/GTime.js.map +1 -0
- package/dist/model/Handle.d.ts +37 -0
- package/dist/model/Handle.d.ts.map +1 -0
- package/dist/model/Handle.js +90 -0
- package/dist/model/Handle.js.map +1 -0
- package/dist/model/MCard.d.ts +43 -0
- package/dist/model/MCard.d.ts.map +1 -0
- package/dist/model/MCard.js +76 -0
- package/dist/model/MCard.js.map +1 -0
- package/dist/model/constants.d.ts +45 -0
- package/dist/model/constants.d.ts.map +1 -0
- package/dist/model/constants.js +27 -0
- package/dist/model/constants.js.map +1 -0
- package/dist/model/detectors/BaseDetector.d.ts +26 -0
- package/dist/model/detectors/BaseDetector.d.ts.map +1 -0
- package/dist/model/detectors/BaseDetector.js +5 -0
- package/dist/model/detectors/BaseDetector.js.map +1 -0
- package/dist/model/detectors/BinaryDetector.d.ts +12 -0
- package/dist/model/detectors/BinaryDetector.d.ts.map +1 -0
- package/dist/model/detectors/BinaryDetector.js +82 -0
- package/dist/model/detectors/BinaryDetector.js.map +1 -0
- package/dist/model/detectors/ContentTypeInterpreter.d.ts +11 -0
- package/dist/model/detectors/ContentTypeInterpreter.d.ts.map +1 -0
- package/dist/model/detectors/ContentTypeInterpreter.js +51 -0
- package/dist/model/detectors/ContentTypeInterpreter.js.map +1 -0
- package/dist/model/detectors/DataFormatDetectors.d.ts +29 -0
- package/dist/model/detectors/DataFormatDetectors.d.ts.map +1 -0
- package/dist/model/detectors/DataFormatDetectors.js +223 -0
- package/dist/model/detectors/DataFormatDetectors.js.map +1 -0
- package/dist/model/detectors/LanguageDetector.d.ts +11 -0
- package/dist/model/detectors/LanguageDetector.d.ts.map +1 -0
- package/dist/model/detectors/LanguageDetector.js +148 -0
- package/dist/model/detectors/LanguageDetector.js.map +1 -0
- package/dist/model/detectors/MarkupDetectors.d.ts +22 -0
- package/dist/model/detectors/MarkupDetectors.d.ts.map +1 -0
- package/dist/model/detectors/MarkupDetectors.js +132 -0
- package/dist/model/detectors/MarkupDetectors.js.map +1 -0
- package/dist/model/detectors/OBJDetector.d.ts +8 -0
- package/dist/model/detectors/OBJDetector.d.ts.map +1 -0
- package/dist/model/detectors/OBJDetector.js +48 -0
- package/dist/model/detectors/OBJDetector.js.map +1 -0
- package/dist/model/detectors/registry.d.ts +13 -0
- package/dist/model/detectors/registry.d.ts.map +1 -0
- package/dist/model/detectors/registry.js +67 -0
- package/dist/model/detectors/registry.js.map +1 -0
- package/dist/monads/Either.d.ts +51 -0
- package/dist/monads/Either.d.ts.map +1 -0
- package/dist/monads/Either.js +82 -0
- package/dist/monads/Either.js.map +1 -0
- package/dist/monads/IO.d.ts +38 -0
- package/dist/monads/IO.d.ts.map +1 -0
- package/dist/monads/IO.js +66 -0
- package/dist/monads/IO.js.map +1 -0
- package/dist/monads/Maybe.d.ts +45 -0
- package/dist/monads/Maybe.d.ts.map +1 -0
- package/dist/monads/Maybe.js +73 -0
- package/dist/monads/Maybe.js.map +1 -0
- package/dist/monads/Reader.d.ts +29 -0
- package/dist/monads/Reader.d.ts.map +1 -0
- package/dist/monads/Reader.js +44 -0
- package/dist/monads/Reader.js.map +1 -0
- package/dist/monads/State.d.ts +33 -0
- package/dist/monads/State.d.ts.map +1 -0
- package/dist/monads/State.js +50 -0
- package/dist/monads/State.js.map +1 -0
- package/dist/monads/Writer.d.ts +29 -0
- package/dist/monads/Writer.d.ts.map +1 -0
- package/dist/monads/Writer.js +46 -0
- package/dist/monads/Writer.js.map +1 -0
- package/dist/ptr/FaroSidecar.d.ts +56 -0
- package/dist/ptr/FaroSidecar.d.ts.map +1 -0
- package/dist/ptr/FaroSidecar.js +102 -0
- package/dist/ptr/FaroSidecar.js.map +1 -0
- package/dist/ptr/LensProtocol.d.ts +84 -0
- package/dist/ptr/LensProtocol.d.ts.map +1 -0
- package/dist/ptr/LensProtocol.js +98 -0
- package/dist/ptr/LensProtocol.js.map +1 -0
- package/dist/ptr/SandboxWorker.d.ts +54 -0
- package/dist/ptr/SandboxWorker.d.ts.map +1 -0
- package/dist/ptr/SandboxWorker.js +172 -0
- package/dist/ptr/SandboxWorker.js.map +1 -0
- package/dist/ptr/common_types.d.ts +39 -0
- package/dist/ptr/common_types.d.ts.map +1 -0
- package/dist/ptr/common_types.js +12 -0
- package/dist/ptr/common_types.js.map +1 -0
- package/dist/ptr/lambda/AlphaConversion.d.ts +42 -0
- package/dist/ptr/lambda/AlphaConversion.d.ts.map +1 -0
- package/dist/ptr/lambda/AlphaConversion.js +244 -0
- package/dist/ptr/lambda/AlphaConversion.js.map +1 -0
- package/dist/ptr/lambda/BetaReduction.d.ts +73 -0
- package/dist/ptr/lambda/BetaReduction.d.ts.map +1 -0
- package/dist/ptr/lambda/BetaReduction.js +322 -0
- package/dist/ptr/lambda/BetaReduction.js.map +1 -0
- package/dist/ptr/lambda/EtaConversion.d.ts +65 -0
- package/dist/ptr/lambda/EtaConversion.d.ts.map +1 -0
- package/dist/ptr/lambda/EtaConversion.js +228 -0
- package/dist/ptr/lambda/EtaConversion.js.map +1 -0
- package/dist/ptr/lambda/FreeVariables.d.ts +44 -0
- package/dist/ptr/lambda/FreeVariables.d.ts.map +1 -0
- package/dist/ptr/lambda/FreeVariables.js +207 -0
- package/dist/ptr/lambda/FreeVariables.js.map +1 -0
- package/dist/ptr/lambda/LambdaRuntime.d.ts +80 -0
- package/dist/ptr/lambda/LambdaRuntime.d.ts.map +1 -0
- package/dist/ptr/lambda/LambdaRuntime.js +433 -0
- package/dist/ptr/lambda/LambdaRuntime.js.map +1 -0
- package/dist/ptr/lambda/LambdaTerm.d.ts +95 -0
- package/dist/ptr/lambda/LambdaTerm.d.ts.map +1 -0
- package/dist/ptr/lambda/LambdaTerm.js +159 -0
- package/dist/ptr/lambda/LambdaTerm.js.map +1 -0
- package/dist/ptr/lambda/index.d.ts +24 -0
- package/dist/ptr/lambda/index.d.ts.map +1 -0
- package/dist/ptr/lambda/index.js +34 -0
- package/dist/ptr/lambda/index.js.map +1 -0
- package/dist/ptr/llm/Config.d.ts +57 -0
- package/dist/ptr/llm/Config.d.ts.map +1 -0
- package/dist/ptr/llm/Config.js +183 -0
- package/dist/ptr/llm/Config.js.map +1 -0
- package/dist/ptr/llm/LLMRuntime.d.ts +35 -0
- package/dist/ptr/llm/LLMRuntime.d.ts.map +1 -0
- package/dist/ptr/llm/LLMRuntime.js +176 -0
- package/dist/ptr/llm/LLMRuntime.js.map +1 -0
- package/dist/ptr/llm/providers/LLMProvider.d.ts +43 -0
- package/dist/ptr/llm/providers/LLMProvider.d.ts.map +1 -0
- package/dist/ptr/llm/providers/LLMProvider.js +31 -0
- package/dist/ptr/llm/providers/LLMProvider.js.map +1 -0
- package/dist/ptr/llm/providers/MLCLLMProvider.d.ts +22 -0
- package/dist/ptr/llm/providers/MLCLLMProvider.d.ts.map +1 -0
- package/dist/ptr/llm/providers/MLCLLMProvider.js +155 -0
- package/dist/ptr/llm/providers/MLCLLMProvider.js.map +1 -0
- package/dist/ptr/llm/providers/OllamaEmbeddingProvider.d.ts +20 -0
- package/dist/ptr/llm/providers/OllamaEmbeddingProvider.d.ts.map +1 -0
- package/dist/ptr/llm/providers/OllamaEmbeddingProvider.js +42 -0
- package/dist/ptr/llm/providers/OllamaEmbeddingProvider.js.map +1 -0
- package/dist/ptr/llm/providers/OllamaProvider.d.ts +21 -0
- package/dist/ptr/llm/providers/OllamaProvider.d.ts.map +1 -0
- package/dist/ptr/llm/providers/OllamaProvider.js +158 -0
- package/dist/ptr/llm/providers/OllamaProvider.js.map +1 -0
- package/dist/ptr/llm/providers/WebLLMProvider.d.ts +22 -0
- package/dist/ptr/llm/providers/WebLLMProvider.d.ts.map +1 -0
- package/dist/ptr/llm/providers/WebLLMProvider.js +151 -0
- package/dist/ptr/llm/providers/WebLLMProvider.js.map +1 -0
- package/dist/ptr/node/Action.d.ts +426 -0
- package/dist/ptr/node/Action.d.ts.map +1 -0
- package/dist/ptr/node/Action.js +711 -0
- package/dist/ptr/node/Action.js.map +1 -0
- package/dist/ptr/node/CLMLoader.d.ts +18 -0
- package/dist/ptr/node/CLMLoader.d.ts.map +1 -0
- package/dist/ptr/node/CLMLoader.js +18 -0
- package/dist/ptr/node/CLMLoader.js.map +1 -0
- package/dist/ptr/node/CLMRunner.d.ts +34 -0
- package/dist/ptr/node/CLMRunner.d.ts.map +1 -0
- package/dist/ptr/node/CLMRunner.js +36 -0
- package/dist/ptr/node/CLMRunner.js.map +1 -0
- package/dist/ptr/node/FileSystemUtils.d.ts +40 -0
- package/dist/ptr/node/FileSystemUtils.d.ts.map +1 -0
- package/dist/ptr/node/FileSystemUtils.js +170 -0
- package/dist/ptr/node/FileSystemUtils.js.map +1 -0
- package/dist/ptr/node/NetworkConfig.d.ts +191 -0
- package/dist/ptr/node/NetworkConfig.d.ts.map +1 -0
- package/dist/ptr/node/NetworkConfig.js +8 -0
- package/dist/ptr/node/NetworkConfig.js.map +1 -0
- package/dist/ptr/node/NetworkRuntime.d.ts +38 -0
- package/dist/ptr/node/NetworkRuntime.d.ts.map +1 -0
- package/dist/ptr/node/NetworkRuntime.js +871 -0
- package/dist/ptr/node/NetworkRuntime.js.map +1 -0
- package/dist/ptr/node/P2PChatSession.d.ts +53 -0
- package/dist/ptr/node/P2PChatSession.d.ts.map +1 -0
- package/dist/ptr/node/P2PChatSession.js +154 -0
- package/dist/ptr/node/P2PChatSession.js.map +1 -0
- package/dist/ptr/node/RuntimeInterface.d.ts +4 -0
- package/dist/ptr/node/RuntimeInterface.d.ts.map +1 -0
- package/dist/ptr/node/RuntimeInterface.js +2 -0
- package/dist/ptr/node/RuntimeInterface.js.map +1 -0
- package/dist/ptr/node/Runtimes.d.ts +34 -0
- package/dist/ptr/node/Runtimes.d.ts.map +1 -0
- package/dist/ptr/node/Runtimes.js +38 -0
- package/dist/ptr/node/Runtimes.js.map +1 -0
- package/dist/ptr/node/SignalingServer.d.ts +37 -0
- package/dist/ptr/node/SignalingServer.d.ts.map +1 -0
- package/dist/ptr/node/SignalingServer.js +218 -0
- package/dist/ptr/node/SignalingServer.js.map +1 -0
- package/dist/ptr/node/cli.d.ts +3 -0
- package/dist/ptr/node/cli.d.ts.map +1 -0
- package/dist/ptr/node/cli.js +266 -0
- package/dist/ptr/node/cli.js.map +1 -0
- package/dist/ptr/node/clm/builtins/handle.d.ts +14 -0
- package/dist/ptr/node/clm/builtins/handle.d.ts.map +1 -0
- package/dist/ptr/node/clm/builtins/handle.js +177 -0
- package/dist/ptr/node/clm/builtins/handle.js.map +1 -0
- package/dist/ptr/node/clm/builtins/index.d.ts +20 -0
- package/dist/ptr/node/clm/builtins/index.d.ts.map +1 -0
- package/dist/ptr/node/clm/builtins/index.js +60 -0
- package/dist/ptr/node/clm/builtins/index.js.map +1 -0
- package/dist/ptr/node/clm/index.d.ts +25 -0
- package/dist/ptr/node/clm/index.d.ts.map +1 -0
- package/dist/ptr/node/clm/index.js +28 -0
- package/dist/ptr/node/clm/index.js.map +1 -0
- package/dist/ptr/node/clm/loader.d.ts +25 -0
- package/dist/ptr/node/clm/loader.d.ts.map +1 -0
- package/dist/ptr/node/clm/loader.js +146 -0
- package/dist/ptr/node/clm/loader.js.map +1 -0
- package/dist/ptr/node/clm/multiruntime.d.ts +9 -0
- package/dist/ptr/node/clm/multiruntime.d.ts.map +1 -0
- package/dist/ptr/node/clm/multiruntime.js +121 -0
- package/dist/ptr/node/clm/multiruntime.js.map +1 -0
- package/dist/ptr/node/clm/runner.d.ts +70 -0
- package/dist/ptr/node/clm/runner.d.ts.map +1 -0
- package/dist/ptr/node/clm/runner.js +324 -0
- package/dist/ptr/node/clm/runner.js.map +1 -0
- package/dist/ptr/node/clm/types.d.ts +166 -0
- package/dist/ptr/node/clm/types.d.ts.map +1 -0
- package/dist/ptr/node/clm/types.js +5 -0
- package/dist/ptr/node/clm/types.js.map +1 -0
- package/dist/ptr/node/clm/utils.d.ts +29 -0
- package/dist/ptr/node/clm/utils.d.ts.map +1 -0
- package/dist/ptr/node/clm/utils.js +88 -0
- package/dist/ptr/node/clm/utils.js.map +1 -0
- package/dist/ptr/node/network/HttpClient.d.ts +14 -0
- package/dist/ptr/node/network/HttpClient.d.ts.map +1 -0
- package/dist/ptr/node/network/HttpClient.js +139 -0
- package/dist/ptr/node/network/HttpClient.js.map +1 -0
- package/dist/ptr/node/network/MCardSerialization.d.ts +19 -0
- package/dist/ptr/node/network/MCardSerialization.d.ts.map +1 -0
- package/dist/ptr/node/network/MCardSerialization.js +41 -0
- package/dist/ptr/node/network/MCardSerialization.js.map +1 -0
- package/dist/ptr/node/network/NetworkInfrastructure.d.ts +37 -0
- package/dist/ptr/node/network/NetworkInfrastructure.d.ts.map +1 -0
- package/dist/ptr/node/network/NetworkInfrastructure.js +121 -0
- package/dist/ptr/node/network/NetworkInfrastructure.js.map +1 -0
- package/dist/ptr/node/network/NetworkSecurity.d.ts +24 -0
- package/dist/ptr/node/network/NetworkSecurity.d.ts.map +1 -0
- package/dist/ptr/node/network/NetworkSecurity.js +104 -0
- package/dist/ptr/node/network/NetworkSecurity.js.map +1 -0
- package/dist/ptr/node/runtimes/base.d.ts +31 -0
- package/dist/ptr/node/runtimes/base.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/base.js +33 -0
- package/dist/ptr/node/runtimes/base.js.map +1 -0
- package/dist/ptr/node/runtimes/binary.d.ts +10 -0
- package/dist/ptr/node/runtimes/binary.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/binary.js +16 -0
- package/dist/ptr/node/runtimes/binary.js.map +1 -0
- package/dist/ptr/node/runtimes/factory.d.ts +22 -0
- package/dist/ptr/node/runtimes/factory.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/factory.js +152 -0
- package/dist/ptr/node/runtimes/factory.js.map +1 -0
- package/dist/ptr/node/runtimes/index.d.ts +28 -0
- package/dist/ptr/node/runtimes/index.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/index.js +30 -0
- package/dist/ptr/node/runtimes/index.js.map +1 -0
- package/dist/ptr/node/runtimes/javascript.d.ts +22 -0
- package/dist/ptr/node/runtimes/javascript.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/javascript.js +125 -0
- package/dist/ptr/node/runtimes/javascript.js.map +1 -0
- package/dist/ptr/node/runtimes/lean.d.ts +10 -0
- package/dist/ptr/node/runtimes/lean.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/lean.js +60 -0
- package/dist/ptr/node/runtimes/lean.js.map +1 -0
- package/dist/ptr/node/runtimes/loader.d.ts +21 -0
- package/dist/ptr/node/runtimes/loader.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/loader.js +126 -0
- package/dist/ptr/node/runtimes/loader.js.map +1 -0
- package/dist/ptr/node/runtimes/python.d.ts +14 -0
- package/dist/ptr/node/runtimes/python.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/python.js +100 -0
- package/dist/ptr/node/runtimes/python.js.map +1 -0
- package/dist/ptr/node/runtimes/wasm.d.ts +10 -0
- package/dist/ptr/node/runtimes/wasm.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/wasm.js +55 -0
- package/dist/ptr/node/runtimes/wasm.js.map +1 -0
- package/dist/rag/GraphRAGEngine.d.ts +26 -0
- package/dist/rag/GraphRAGEngine.d.ts.map +1 -0
- package/dist/rag/GraphRAGEngine.js +166 -0
- package/dist/rag/GraphRAGEngine.js.map +1 -0
- package/dist/rag/HandleVectorStore.d.ts +201 -0
- package/dist/rag/HandleVectorStore.d.ts.map +1 -0
- package/dist/rag/HandleVectorStore.js +527 -0
- package/dist/rag/HandleVectorStore.js.map +1 -0
- package/dist/rag/PersistentIndexer.d.ts +148 -0
- package/dist/rag/PersistentIndexer.d.ts.map +1 -0
- package/dist/rag/PersistentIndexer.js +302 -0
- package/dist/rag/PersistentIndexer.js.map +1 -0
- package/dist/rag/embeddings/VisionEmbeddingProvider.d.ts +87 -0
- package/dist/rag/embeddings/VisionEmbeddingProvider.d.ts.map +1 -0
- package/dist/rag/embeddings/VisionEmbeddingProvider.js +164 -0
- package/dist/rag/embeddings/VisionEmbeddingProvider.js.map +1 -0
- package/dist/rag/graph/community.d.ts +56 -0
- package/dist/rag/graph/community.d.ts.map +1 -0
- package/dist/rag/graph/community.js +247 -0
- package/dist/rag/graph/community.js.map +1 -0
- package/dist/rag/graph/extractor.d.ts +99 -0
- package/dist/rag/graph/extractor.d.ts.map +1 -0
- package/dist/rag/graph/extractor.js +210 -0
- package/dist/rag/graph/extractor.js.map +1 -0
- package/dist/rag/graph/store.d.ts +176 -0
- package/dist/rag/graph/store.d.ts.map +1 -0
- package/dist/rag/graph/store.js +504 -0
- package/dist/rag/graph/store.js.map +1 -0
- package/dist/rag/index.d.ts +20 -0
- package/dist/rag/index.d.ts.map +1 -0
- package/dist/rag/index.js +26 -0
- package/dist/rag/index.js.map +1 -0
- package/dist/rag/semanticVersioning.d.ts +187 -0
- package/dist/rag/semanticVersioning.d.ts.map +1 -0
- package/dist/rag/semanticVersioning.js +253 -0
- package/dist/rag/semanticVersioning.js.map +1 -0
- package/dist/storage/IndexedDBEngine.d.ts +33 -0
- package/dist/storage/IndexedDBEngine.d.ts.map +1 -0
- package/dist/storage/IndexedDBEngine.js +198 -0
- package/dist/storage/IndexedDBEngine.js.map +1 -0
- package/dist/storage/SqliteNodeEngine.d.ts +123 -0
- package/dist/storage/SqliteNodeEngine.d.ts.map +1 -0
- package/dist/storage/SqliteNodeEngine.js +385 -0
- package/dist/storage/SqliteNodeEngine.js.map +1 -0
- package/dist/storage/SqliteWasmEngine.d.ts +60 -0
- package/dist/storage/SqliteWasmEngine.d.ts.map +1 -0
- package/dist/storage/SqliteWasmEngine.js +193 -0
- package/dist/storage/SqliteWasmEngine.js.map +1 -0
- package/dist/storage/StorageAdapter.d.ts +42 -0
- package/dist/storage/StorageAdapter.d.ts.map +1 -0
- package/dist/storage/StorageAdapter.js +2 -0
- package/dist/storage/StorageAdapter.js.map +1 -0
- package/dist/storage/VectorStore.d.ts +202 -0
- package/dist/storage/VectorStore.d.ts.map +1 -0
- package/dist/storage/VectorStore.js +557 -0
- package/dist/storage/VectorStore.js.map +1 -0
- package/dist/storage/schema.d.ts +162 -0
- package/dist/storage/schema.d.ts.map +1 -0
- package/dist/storage/schema.js +373 -0
- package/dist/storage/schema.js.map +1 -0
- package/dist/util/FileIO.d.ts +44 -0
- package/dist/util/FileIO.d.ts.map +1 -0
- package/dist/util/FileIO.js +203 -0
- package/dist/util/FileIO.js.map +1 -0
- package/dist/util/Loader.d.ts +34 -0
- package/dist/util/Loader.d.ts.map +1 -0
- package/dist/util/Loader.js +168 -0
- package/dist/util/Loader.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic Versioning API for MCards
|
|
3
|
+
*
|
|
4
|
+
* High-level API functions for managing MCard versions linked to handles
|
|
5
|
+
* with semantic similarity detection.
|
|
6
|
+
*
|
|
7
|
+
* This module provides a simplified interface for:
|
|
8
|
+
* - Linking MCards to handles
|
|
9
|
+
* - Retrieving version history with semantic info
|
|
10
|
+
* - Comparing versions by semantic similarity
|
|
11
|
+
* - Searching within a handle's version history
|
|
12
|
+
*
|
|
13
|
+
* @module mcard-js/rag/semanticVersioning
|
|
14
|
+
*/
|
|
15
|
+
import { MCard } from '../model/MCard';
|
|
16
|
+
import { HandleVectorStore, VersionSimilarityResult, VectorStoreConfig } from './HandleVectorStore';
|
|
17
|
+
/**
|
|
18
|
+
* Get the default HandleVectorStore instance.
|
|
19
|
+
*
|
|
20
|
+
* @param dbPath Path to SQLite database (undefined = in-memory)
|
|
21
|
+
* @param config RAG configuration
|
|
22
|
+
* @param reinitialize Force re-initialization of the store
|
|
23
|
+
* @returns HandleVectorStore instance
|
|
24
|
+
*/
|
|
25
|
+
export declare function getStore(dbPath?: string, config?: Partial<VectorStoreConfig>, reinitialize?: boolean): HandleVectorStore;
|
|
26
|
+
/**
|
|
27
|
+
* Reset the default store (useful for testing).
|
|
28
|
+
*/
|
|
29
|
+
export declare function resetStore(): void;
|
|
30
|
+
/**
|
|
31
|
+
* Link an MCard to a handle with semantic embedding.
|
|
32
|
+
*
|
|
33
|
+
* This function:
|
|
34
|
+
* 1. Indexes the MCard content with vector embeddings
|
|
35
|
+
* 2. Associates the MCard with the specified handle
|
|
36
|
+
* 3. Computes semantic delta from previous version (if exists)
|
|
37
|
+
* 4. Classifies the upgrade type based on similarity
|
|
38
|
+
*
|
|
39
|
+
* @param mcard MCard to link
|
|
40
|
+
* @param handle Handle name (stable identifier)
|
|
41
|
+
* @param isCurrent Whether this becomes the current version
|
|
42
|
+
* @param store Optional custom HandleVectorStore instance
|
|
43
|
+
* @returns True if successful, false if indexing failed
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* import { MCard } from 'mcard-js';
|
|
48
|
+
* import { linkMCardToHandle } from 'mcard-js/rag';
|
|
49
|
+
*
|
|
50
|
+
* const doc = await MCard.create('Introduction to Machine Learning...');
|
|
51
|
+
* await linkMCardToHandle(doc, 'ml_intro');
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare function linkMCardToHandle(mcard: MCard, handle: string, isCurrent?: boolean, store?: HandleVectorStore): Promise<boolean>;
|
|
55
|
+
/**
|
|
56
|
+
* Get version history for a handle with semantic info.
|
|
57
|
+
*
|
|
58
|
+
* @param handle Handle name to query
|
|
59
|
+
* @param store Optional custom HandleVectorStore instance
|
|
60
|
+
* @returns List of version objects with hash, order, timestamps, embedding status, and upgrade type
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* const history = getHandleVersionHistory('ml_intro');
|
|
65
|
+
* for (const v of history) {
|
|
66
|
+
* console.log(`v${v.versionOrder}: ${v.hash.slice(0, 8)} (${v.upgradeType})`);
|
|
67
|
+
* }
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export declare function getHandleVersionHistory(handle: string, store?: HandleVectorStore): Array<{
|
|
71
|
+
hash: string;
|
|
72
|
+
versionOrder: number;
|
|
73
|
+
isCurrent: boolean;
|
|
74
|
+
createdAt: string;
|
|
75
|
+
hasEmbedding: boolean;
|
|
76
|
+
parentHash?: string;
|
|
77
|
+
semanticDelta?: number;
|
|
78
|
+
upgradeType?: string;
|
|
79
|
+
}>;
|
|
80
|
+
/**
|
|
81
|
+
* Compare all versions of a handle by semantic similarity.
|
|
82
|
+
*
|
|
83
|
+
* This is useful for:
|
|
84
|
+
* - Understanding how content has evolved
|
|
85
|
+
* - Finding which version is most similar to current
|
|
86
|
+
* - Identifying major semantic drift points
|
|
87
|
+
*
|
|
88
|
+
* @param handle Handle name
|
|
89
|
+
* @param referenceHash Compare to this hash (default: current version)
|
|
90
|
+
* @param metric 'cosine' (higher = more similar) or 'euclidean' (lower = closer)
|
|
91
|
+
* @param store Optional custom HandleVectorStore instance
|
|
92
|
+
* @returns Versions sorted by similarity to reference
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```typescript
|
|
96
|
+
* const results = compareVersionsBySimilarity('ml_intro');
|
|
97
|
+
* for (const r of results) {
|
|
98
|
+
* console.log(`v${r.versionOrder}: sim=${r.similarityToCurrent.toFixed(4)}`);
|
|
99
|
+
* }
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
export declare function compareVersionsBySimilarity(handle: string, referenceHash?: string, metric?: 'cosine' | 'euclidean', store?: HandleVectorStore): VersionSimilarityResult[];
|
|
103
|
+
/**
|
|
104
|
+
* Search semantically within a handle's version history.
|
|
105
|
+
*
|
|
106
|
+
* Useful for finding which version of a document best matches
|
|
107
|
+
* a specific concept, topic, or query.
|
|
108
|
+
*
|
|
109
|
+
* @param handle Handle name to filter by
|
|
110
|
+
* @param query Search query text
|
|
111
|
+
* @param k Number of results to return
|
|
112
|
+
* @param store Optional custom HandleVectorStore instance
|
|
113
|
+
* @returns Matching versions sorted by query similarity
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```typescript
|
|
117
|
+
* const results = await searchWithinHandle('ml_intro', 'neural networks');
|
|
118
|
+
* for (const r of results) {
|
|
119
|
+
* console.log(`v${r.versionOrder}: query_sim=${r.similarityToQuery?.toFixed(4)}`);
|
|
120
|
+
* }
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
export declare function searchWithinHandle(handle: string, query: string, k?: number, store?: HandleVectorStore): Promise<VersionSimilarityResult[]>;
|
|
124
|
+
/**
|
|
125
|
+
* Compute pairwise semantic distances between all versions.
|
|
126
|
+
*
|
|
127
|
+
* Returns a Map mapping "hash_a:hash_b" string keys to their cosine similarity scores.
|
|
128
|
+
*
|
|
129
|
+
* @param handle Handle name
|
|
130
|
+
* @param cache Whether to cache computed similarities
|
|
131
|
+
* @param store Optional custom HandleVectorStore instance
|
|
132
|
+
* @returns Map of hash pair keys to cosine similarity [-1, 1]
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```typescript
|
|
136
|
+
* const distances = getVersionDistances('ml_intro');
|
|
137
|
+
* distances.forEach((sim, key) => {
|
|
138
|
+
* console.log(`${key}: ${sim.toFixed(4)}`);
|
|
139
|
+
* });
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
export declare function getVersionDistances(handle: string, cache?: boolean, store?: HandleVectorStore): Map<string, number>;
|
|
143
|
+
/**
|
|
144
|
+
* Find the version most similar to a query.
|
|
145
|
+
*
|
|
146
|
+
* @param handle Handle name
|
|
147
|
+
* @param query Search query text
|
|
148
|
+
* @param store Optional custom HandleVectorStore instance
|
|
149
|
+
* @returns Most similar version, or undefined if no versions exist
|
|
150
|
+
*/
|
|
151
|
+
export declare function findMostSimilarVersion(handle: string, query: string, store?: HandleVectorStore): Promise<VersionSimilarityResult | undefined>;
|
|
152
|
+
/**
|
|
153
|
+
* Get the semantic evolution of a handle's versions.
|
|
154
|
+
*
|
|
155
|
+
* Returns version history annotated with semantic deltas,
|
|
156
|
+
* showing how content has evolved over time.
|
|
157
|
+
*
|
|
158
|
+
* @param handle Handle name
|
|
159
|
+
* @param store Optional custom HandleVectorStore instance
|
|
160
|
+
* @returns List of version objects with evolution info
|
|
161
|
+
*/
|
|
162
|
+
export declare function getSemanticEvolution(handle: string, store?: HandleVectorStore): Array<{
|
|
163
|
+
hash: string;
|
|
164
|
+
version: number;
|
|
165
|
+
isCurrent: boolean;
|
|
166
|
+
createdAt: string;
|
|
167
|
+
parentHash?: string;
|
|
168
|
+
semanticDelta?: number;
|
|
169
|
+
upgradeType?: string;
|
|
170
|
+
interpretation: string;
|
|
171
|
+
}>;
|
|
172
|
+
/**
|
|
173
|
+
* List all handles with indexed versions.
|
|
174
|
+
*
|
|
175
|
+
* @param store Optional custom HandleVectorStore instance
|
|
176
|
+
* @returns List of handle names
|
|
177
|
+
*/
|
|
178
|
+
export declare function listHandles(store?: HandleVectorStore): string[];
|
|
179
|
+
/**
|
|
180
|
+
* Get information about the vector store.
|
|
181
|
+
*
|
|
182
|
+
* @param store Optional custom HandleVectorStore instance
|
|
183
|
+
* @returns Object with store statistics
|
|
184
|
+
*/
|
|
185
|
+
export declare function getStoreInfo(store?: HandleVectorStore): Record<string, unknown>;
|
|
186
|
+
export { HandleVersion, VersionSimilarityResult } from './HandleVectorStore';
|
|
187
|
+
//# sourceMappingURL=semanticVersioning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semanticVersioning.d.ts","sourceRoot":"","sources":["../../src/rag/semanticVersioning.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic Versioning API for MCards
|
|
3
|
+
*
|
|
4
|
+
* High-level API functions for managing MCard versions linked to handles
|
|
5
|
+
* with semantic similarity detection.
|
|
6
|
+
*
|
|
7
|
+
* This module provides a simplified interface for:
|
|
8
|
+
* - Linking MCards to handles
|
|
9
|
+
* - Retrieving version history with semantic info
|
|
10
|
+
* - Comparing versions by semantic similarity
|
|
11
|
+
* - Searching within a handle's version history
|
|
12
|
+
*
|
|
13
|
+
* @module mcard-js/rag/semanticVersioning
|
|
14
|
+
*/
|
|
15
|
+
import { HandleVectorStore } from './HandleVectorStore';
|
|
16
|
+
// Default store instance (lazy-initialized)
|
|
17
|
+
let _defaultStore = null;
|
|
18
|
+
/**
|
|
19
|
+
* Get the default HandleVectorStore instance.
|
|
20
|
+
*
|
|
21
|
+
* @param dbPath Path to SQLite database (undefined = in-memory)
|
|
22
|
+
* @param config RAG configuration
|
|
23
|
+
* @param reinitialize Force re-initialization of the store
|
|
24
|
+
* @returns HandleVectorStore instance
|
|
25
|
+
*/
|
|
26
|
+
export function getStore(dbPath, config, reinitialize = false) {
|
|
27
|
+
if (_defaultStore === null || reinitialize) {
|
|
28
|
+
_defaultStore = new HandleVectorStore(dbPath ?? ':memory:', config);
|
|
29
|
+
}
|
|
30
|
+
return _defaultStore;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Reset the default store (useful for testing).
|
|
34
|
+
*/
|
|
35
|
+
export function resetStore() {
|
|
36
|
+
if (_defaultStore) {
|
|
37
|
+
_defaultStore.close();
|
|
38
|
+
_defaultStore = null;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
42
|
+
// Core API Functions
|
|
43
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
44
|
+
/**
|
|
45
|
+
* Link an MCard to a handle with semantic embedding.
|
|
46
|
+
*
|
|
47
|
+
* This function:
|
|
48
|
+
* 1. Indexes the MCard content with vector embeddings
|
|
49
|
+
* 2. Associates the MCard with the specified handle
|
|
50
|
+
* 3. Computes semantic delta from previous version (if exists)
|
|
51
|
+
* 4. Classifies the upgrade type based on similarity
|
|
52
|
+
*
|
|
53
|
+
* @param mcard MCard to link
|
|
54
|
+
* @param handle Handle name (stable identifier)
|
|
55
|
+
* @param isCurrent Whether this becomes the current version
|
|
56
|
+
* @param store Optional custom HandleVectorStore instance
|
|
57
|
+
* @returns True if successful, false if indexing failed
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* import { MCard } from 'mcard-js';
|
|
62
|
+
* import { linkMCardToHandle } from 'mcard-js/rag';
|
|
63
|
+
*
|
|
64
|
+
* const doc = await MCard.create('Introduction to Machine Learning...');
|
|
65
|
+
* await linkMCardToHandle(doc, 'ml_intro');
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export async function linkMCardToHandle(mcard, handle, isCurrent = true, store) {
|
|
69
|
+
const s = store ?? getStore();
|
|
70
|
+
const indexed = await s.indexWithHandle(mcard, handle, isCurrent);
|
|
71
|
+
return indexed > 0;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get version history for a handle with semantic info.
|
|
75
|
+
*
|
|
76
|
+
* @param handle Handle name to query
|
|
77
|
+
* @param store Optional custom HandleVectorStore instance
|
|
78
|
+
* @returns List of version objects with hash, order, timestamps, embedding status, and upgrade type
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```typescript
|
|
82
|
+
* const history = getHandleVersionHistory('ml_intro');
|
|
83
|
+
* for (const v of history) {
|
|
84
|
+
* console.log(`v${v.versionOrder}: ${v.hash.slice(0, 8)} (${v.upgradeType})`);
|
|
85
|
+
* }
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
export function getHandleVersionHistory(handle, store) {
|
|
89
|
+
const s = store ?? getStore();
|
|
90
|
+
const versions = s.getHandleVersions(handle);
|
|
91
|
+
return versions.map(v => ({
|
|
92
|
+
hash: v.hash,
|
|
93
|
+
versionOrder: v.versionOrder,
|
|
94
|
+
isCurrent: v.isCurrent,
|
|
95
|
+
createdAt: v.createdAt,
|
|
96
|
+
hasEmbedding: v.embeddingId !== undefined,
|
|
97
|
+
parentHash: v.parentHash,
|
|
98
|
+
semanticDelta: v.semanticDelta,
|
|
99
|
+
upgradeType: v.upgradeType,
|
|
100
|
+
}));
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Compare all versions of a handle by semantic similarity.
|
|
104
|
+
*
|
|
105
|
+
* This is useful for:
|
|
106
|
+
* - Understanding how content has evolved
|
|
107
|
+
* - Finding which version is most similar to current
|
|
108
|
+
* - Identifying major semantic drift points
|
|
109
|
+
*
|
|
110
|
+
* @param handle Handle name
|
|
111
|
+
* @param referenceHash Compare to this hash (default: current version)
|
|
112
|
+
* @param metric 'cosine' (higher = more similar) or 'euclidean' (lower = closer)
|
|
113
|
+
* @param store Optional custom HandleVectorStore instance
|
|
114
|
+
* @returns Versions sorted by similarity to reference
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* ```typescript
|
|
118
|
+
* const results = compareVersionsBySimilarity('ml_intro');
|
|
119
|
+
* for (const r of results) {
|
|
120
|
+
* console.log(`v${r.versionOrder}: sim=${r.similarityToCurrent.toFixed(4)}`);
|
|
121
|
+
* }
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
export function compareVersionsBySimilarity(handle, referenceHash, metric = 'cosine', store) {
|
|
125
|
+
const s = store ?? getStore();
|
|
126
|
+
return s.getVersionsBySimilarity(handle, referenceHash, metric);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Search semantically within a handle's version history.
|
|
130
|
+
*
|
|
131
|
+
* Useful for finding which version of a document best matches
|
|
132
|
+
* a specific concept, topic, or query.
|
|
133
|
+
*
|
|
134
|
+
* @param handle Handle name to filter by
|
|
135
|
+
* @param query Search query text
|
|
136
|
+
* @param k Number of results to return
|
|
137
|
+
* @param store Optional custom HandleVectorStore instance
|
|
138
|
+
* @returns Matching versions sorted by query similarity
|
|
139
|
+
*
|
|
140
|
+
* @example
|
|
141
|
+
* ```typescript
|
|
142
|
+
* const results = await searchWithinHandle('ml_intro', 'neural networks');
|
|
143
|
+
* for (const r of results) {
|
|
144
|
+
* console.log(`v${r.versionOrder}: query_sim=${r.similarityToQuery?.toFixed(4)}`);
|
|
145
|
+
* }
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
148
|
+
export async function searchWithinHandle(handle, query, k = 10, store) {
|
|
149
|
+
const s = store ?? getStore();
|
|
150
|
+
return s.searchHandleVersions(handle, query, k);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Compute pairwise semantic distances between all versions.
|
|
154
|
+
*
|
|
155
|
+
* Returns a Map mapping "hash_a:hash_b" string keys to their cosine similarity scores.
|
|
156
|
+
*
|
|
157
|
+
* @param handle Handle name
|
|
158
|
+
* @param cache Whether to cache computed similarities
|
|
159
|
+
* @param store Optional custom HandleVectorStore instance
|
|
160
|
+
* @returns Map of hash pair keys to cosine similarity [-1, 1]
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```typescript
|
|
164
|
+
* const distances = getVersionDistances('ml_intro');
|
|
165
|
+
* distances.forEach((sim, key) => {
|
|
166
|
+
* console.log(`${key}: ${sim.toFixed(4)}`);
|
|
167
|
+
* });
|
|
168
|
+
* ```
|
|
169
|
+
*/
|
|
170
|
+
export function getVersionDistances(handle, cache = true, store) {
|
|
171
|
+
const s = store ?? getStore();
|
|
172
|
+
return s.computeVersionDistances(handle, cache);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Find the version most similar to a query.
|
|
176
|
+
*
|
|
177
|
+
* @param handle Handle name
|
|
178
|
+
* @param query Search query text
|
|
179
|
+
* @param store Optional custom HandleVectorStore instance
|
|
180
|
+
* @returns Most similar version, or undefined if no versions exist
|
|
181
|
+
*/
|
|
182
|
+
export async function findMostSimilarVersion(handle, query, store) {
|
|
183
|
+
const results = await searchWithinHandle(handle, query, 1, store);
|
|
184
|
+
return results.length > 0 ? results[0] : undefined;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Get the semantic evolution of a handle's versions.
|
|
188
|
+
*
|
|
189
|
+
* Returns version history annotated with semantic deltas,
|
|
190
|
+
* showing how content has evolved over time.
|
|
191
|
+
*
|
|
192
|
+
* @param handle Handle name
|
|
193
|
+
* @param store Optional custom HandleVectorStore instance
|
|
194
|
+
* @returns List of version objects with evolution info
|
|
195
|
+
*/
|
|
196
|
+
export function getSemanticEvolution(handle, store) {
|
|
197
|
+
const s = store ?? getStore();
|
|
198
|
+
const versions = s.getHandleVersions(handle);
|
|
199
|
+
return versions.map(v => {
|
|
200
|
+
let interpretation;
|
|
201
|
+
if (v.parentHash && v.semanticDelta !== undefined) {
|
|
202
|
+
if (v.semanticDelta >= 0.95) {
|
|
203
|
+
interpretation = 'Nearly identical to parent';
|
|
204
|
+
}
|
|
205
|
+
else if (v.semanticDelta >= 0.85) {
|
|
206
|
+
interpretation = 'Minor changes from parent';
|
|
207
|
+
}
|
|
208
|
+
else if (v.semanticDelta >= 0.70) {
|
|
209
|
+
interpretation = 'Significant changes from parent';
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
interpretation = 'Major semantic shift from parent';
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
interpretation = 'Initial version (no parent)';
|
|
217
|
+
}
|
|
218
|
+
return {
|
|
219
|
+
hash: v.hash,
|
|
220
|
+
version: v.versionOrder,
|
|
221
|
+
isCurrent: v.isCurrent,
|
|
222
|
+
createdAt: v.createdAt,
|
|
223
|
+
parentHash: v.parentHash,
|
|
224
|
+
semanticDelta: v.semanticDelta,
|
|
225
|
+
upgradeType: v.upgradeType,
|
|
226
|
+
interpretation,
|
|
227
|
+
};
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
231
|
+
// Utility Functions
|
|
232
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
233
|
+
/**
|
|
234
|
+
* List all handles with indexed versions.
|
|
235
|
+
*
|
|
236
|
+
* @param store Optional custom HandleVectorStore instance
|
|
237
|
+
* @returns List of handle names
|
|
238
|
+
*/
|
|
239
|
+
export function listHandles(store) {
|
|
240
|
+
const s = store ?? getStore();
|
|
241
|
+
return s.listHandles();
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Get information about the vector store.
|
|
245
|
+
*
|
|
246
|
+
* @param store Optional custom HandleVectorStore instance
|
|
247
|
+
* @returns Object with store statistics
|
|
248
|
+
*/
|
|
249
|
+
export function getStoreInfo(store) {
|
|
250
|
+
const s = store ?? getStore();
|
|
251
|
+
return s.getInfo();
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=semanticVersioning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semanticVersioning.js","sourceRoot":"","sources":["../../src/rag/semanticVersioning.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { MCard } from '../model/MCard';
|
|
2
|
+
import { StorageEngine, Page } from './StorageAdapter';
|
|
3
|
+
/**
|
|
4
|
+
* IndexedDBEngine - Browser storage using IndexedDB
|
|
5
|
+
*/
|
|
6
|
+
export declare class IndexedDBEngine implements StorageEngine {
|
|
7
|
+
private db;
|
|
8
|
+
private dbName;
|
|
9
|
+
constructor(dbName?: string);
|
|
10
|
+
/**
|
|
11
|
+
* Initialize the database connection
|
|
12
|
+
*/
|
|
13
|
+
init(): Promise<void>;
|
|
14
|
+
private ensureDb;
|
|
15
|
+
add(card: MCard): Promise<string>;
|
|
16
|
+
get(hash: string): Promise<MCard | null>;
|
|
17
|
+
delete(hash: string): Promise<void>;
|
|
18
|
+
getPage(pageNumber: number, pageSize: number): Promise<Page<MCard>>;
|
|
19
|
+
count(): Promise<number>;
|
|
20
|
+
searchByHash(hashPrefix: string): Promise<MCard[]>;
|
|
21
|
+
search(query: string, pageNumber: number, pageSize: number): Promise<Page<MCard>>;
|
|
22
|
+
getAll(): Promise<MCard[]>;
|
|
23
|
+
clear(): Promise<void>;
|
|
24
|
+
registerHandle(handle: string, hash: string): Promise<void>;
|
|
25
|
+
resolveHandle(handle: string): Promise<string | null>;
|
|
26
|
+
getByHandle(handle: string): Promise<MCard | null>;
|
|
27
|
+
updateHandle(handle: string, newHash: string): Promise<string>;
|
|
28
|
+
getHandleHistory(handle: string): Promise<{
|
|
29
|
+
previousHash: string;
|
|
30
|
+
changedAt: string;
|
|
31
|
+
}[]>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=IndexedDBEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IndexedDBEngine.d.ts","sourceRoot":"","sources":["../../src/storage/IndexedDBEngine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAgCvD;;GAEG;AACH,qBAAa,eAAgB,YAAW,aAAa;IACjD,OAAO,CAAC,EAAE,CAA4C;IACtD,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,GAAE,MAAmB;IAIvC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B3B,OAAO,CAAC,QAAQ;IASV,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAUjC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAOxC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAsBnE,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAKxB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IASlD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAkCjF,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAM1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB3D,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAOrD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAMlD,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6B9D,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAQjG"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { openDB } from 'idb';
|
|
2
|
+
import { MCard } from '../model/MCard';
|
|
3
|
+
import { validateHandle } from '../model/Handle';
|
|
4
|
+
/**
|
|
5
|
+
* IndexedDBEngine - Browser storage using IndexedDB
|
|
6
|
+
*/
|
|
7
|
+
export class IndexedDBEngine {
|
|
8
|
+
db = null;
|
|
9
|
+
dbName;
|
|
10
|
+
constructor(dbName = 'mcard-db') {
|
|
11
|
+
this.dbName = dbName;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Initialize the database connection
|
|
15
|
+
*/
|
|
16
|
+
async init() {
|
|
17
|
+
this.db = await openDB(this.dbName, 1, {
|
|
18
|
+
upgrade(db) {
|
|
19
|
+
// Cards store
|
|
20
|
+
if (!db.objectStoreNames.contains('cards')) {
|
|
21
|
+
db.createObjectStore('cards', { keyPath: 'hash' });
|
|
22
|
+
}
|
|
23
|
+
// Handles store
|
|
24
|
+
if (!db.objectStoreNames.contains('handles')) {
|
|
25
|
+
const handleStore = db.createObjectStore('handles', { keyPath: 'handle' });
|
|
26
|
+
handleStore.createIndex('by-hash', 'currentHash');
|
|
27
|
+
}
|
|
28
|
+
// Handle history store
|
|
29
|
+
if (!db.objectStoreNames.contains('handleHistory')) {
|
|
30
|
+
const historyStore = db.createObjectStore('handleHistory', {
|
|
31
|
+
keyPath: 'id',
|
|
32
|
+
autoIncrement: true
|
|
33
|
+
});
|
|
34
|
+
historyStore.createIndex('by-handle', 'handle');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
ensureDb() {
|
|
40
|
+
if (!this.db) {
|
|
41
|
+
throw new Error('Database not initialized. Call init() first.');
|
|
42
|
+
}
|
|
43
|
+
return this.db;
|
|
44
|
+
}
|
|
45
|
+
// =========== Card Operations ===========
|
|
46
|
+
async add(card) {
|
|
47
|
+
const db = this.ensureDb();
|
|
48
|
+
await db.put('cards', {
|
|
49
|
+
hash: card.hash,
|
|
50
|
+
content: card.content,
|
|
51
|
+
g_time: card.g_time
|
|
52
|
+
});
|
|
53
|
+
return card.hash;
|
|
54
|
+
}
|
|
55
|
+
async get(hash) {
|
|
56
|
+
const db = this.ensureDb();
|
|
57
|
+
const record = await db.get('cards', hash);
|
|
58
|
+
if (!record)
|
|
59
|
+
return null;
|
|
60
|
+
return MCard.fromData(record.content, record.hash, record.g_time);
|
|
61
|
+
}
|
|
62
|
+
async delete(hash) {
|
|
63
|
+
const db = this.ensureDb();
|
|
64
|
+
await db.delete('cards', hash);
|
|
65
|
+
}
|
|
66
|
+
async getPage(pageNumber, pageSize) {
|
|
67
|
+
const db = this.ensureDb();
|
|
68
|
+
const totalItems = await db.count('cards');
|
|
69
|
+
const totalPages = Math.ceil(totalItems / pageSize);
|
|
70
|
+
const allCards = await db.getAll('cards');
|
|
71
|
+
const start = (pageNumber - 1) * pageSize;
|
|
72
|
+
const pageRecords = allCards.slice(start, start + pageSize);
|
|
73
|
+
const items = pageRecords.map(r => MCard.fromData(r.content, r.hash, r.g_time));
|
|
74
|
+
return {
|
|
75
|
+
items,
|
|
76
|
+
totalItems,
|
|
77
|
+
pageNumber,
|
|
78
|
+
pageSize,
|
|
79
|
+
totalPages,
|
|
80
|
+
hasNext: pageNumber < totalPages,
|
|
81
|
+
hasPrevious: pageNumber > 1
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
async count() {
|
|
85
|
+
const db = this.ensureDb();
|
|
86
|
+
return db.count('cards');
|
|
87
|
+
}
|
|
88
|
+
async searchByHash(hashPrefix) {
|
|
89
|
+
const db = this.ensureDb();
|
|
90
|
+
const start = hashPrefix;
|
|
91
|
+
const end = hashPrefix + '\uffff';
|
|
92
|
+
const range = IDBKeyRange.bound(start, end);
|
|
93
|
+
const records = await db.getAll('cards', range);
|
|
94
|
+
return records.map(r => MCard.fromData(r.content, r.hash, r.g_time));
|
|
95
|
+
}
|
|
96
|
+
async search(query, pageNumber, pageSize) {
|
|
97
|
+
const db = this.ensureDb();
|
|
98
|
+
// Naive implementation: load all and filter
|
|
99
|
+
// Optimized implementation would use a full-text index if available
|
|
100
|
+
const records = await db.getAll('cards');
|
|
101
|
+
const decoder = new TextDecoder();
|
|
102
|
+
const filtered = records.filter(r => {
|
|
103
|
+
// Try to match query in content if it looks like text
|
|
104
|
+
try {
|
|
105
|
+
const text = decoder.decode(r.content);
|
|
106
|
+
return text.includes(query);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
const totalItems = filtered.length;
|
|
113
|
+
const totalPages = Math.ceil(totalItems / pageSize);
|
|
114
|
+
const start = (pageNumber - 1) * pageSize;
|
|
115
|
+
const pageItems = filtered.slice(start, start + pageSize)
|
|
116
|
+
.map(r => MCard.fromData(r.content, r.hash, r.g_time));
|
|
117
|
+
return {
|
|
118
|
+
items: pageItems,
|
|
119
|
+
totalItems,
|
|
120
|
+
pageNumber,
|
|
121
|
+
pageSize,
|
|
122
|
+
totalPages,
|
|
123
|
+
hasNext: pageNumber < totalPages,
|
|
124
|
+
hasPrevious: pageNumber > 1
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
async getAll() {
|
|
128
|
+
const db = this.ensureDb();
|
|
129
|
+
const records = await db.getAll('cards');
|
|
130
|
+
return records.map(r => MCard.fromData(r.content, r.hash, r.g_time));
|
|
131
|
+
}
|
|
132
|
+
async clear() {
|
|
133
|
+
const db = this.ensureDb();
|
|
134
|
+
await db.clear('cards');
|
|
135
|
+
await db.clear('handles');
|
|
136
|
+
await db.clear('handleHistory');
|
|
137
|
+
}
|
|
138
|
+
// =========== Handle Operations ===========
|
|
139
|
+
async registerHandle(handle, hash) {
|
|
140
|
+
const db = this.ensureDb();
|
|
141
|
+
const normalized = validateHandle(handle);
|
|
142
|
+
const existing = await db.get('handles', normalized);
|
|
143
|
+
if (existing) {
|
|
144
|
+
throw new Error(`Handle '${handle}' already exists.`);
|
|
145
|
+
}
|
|
146
|
+
const now = new Date().toISOString();
|
|
147
|
+
await db.put('handles', {
|
|
148
|
+
handle: normalized,
|
|
149
|
+
currentHash: hash,
|
|
150
|
+
createdAt: now,
|
|
151
|
+
updatedAt: now
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
async resolveHandle(handle) {
|
|
155
|
+
const db = this.ensureDb();
|
|
156
|
+
const normalized = validateHandle(handle);
|
|
157
|
+
const record = await db.get('handles', normalized);
|
|
158
|
+
return record?.currentHash ?? null;
|
|
159
|
+
}
|
|
160
|
+
async getByHandle(handle) {
|
|
161
|
+
const hash = await this.resolveHandle(handle);
|
|
162
|
+
if (!hash)
|
|
163
|
+
return null;
|
|
164
|
+
return this.get(hash);
|
|
165
|
+
}
|
|
166
|
+
async updateHandle(handle, newHash) {
|
|
167
|
+
const db = this.ensureDb();
|
|
168
|
+
const normalized = validateHandle(handle);
|
|
169
|
+
const existing = await db.get('handles', normalized);
|
|
170
|
+
if (!existing) {
|
|
171
|
+
throw new Error(`Handle '${handle}' not found.`);
|
|
172
|
+
}
|
|
173
|
+
const previousHash = existing.currentHash;
|
|
174
|
+
const now = new Date().toISOString();
|
|
175
|
+
// Record history
|
|
176
|
+
await db.add('handleHistory', {
|
|
177
|
+
handle: normalized,
|
|
178
|
+
previousHash,
|
|
179
|
+
changedAt: now
|
|
180
|
+
});
|
|
181
|
+
// Update handle
|
|
182
|
+
await db.put('handles', {
|
|
183
|
+
...existing,
|
|
184
|
+
currentHash: newHash,
|
|
185
|
+
updatedAt: now
|
|
186
|
+
});
|
|
187
|
+
return previousHash;
|
|
188
|
+
}
|
|
189
|
+
async getHandleHistory(handle) {
|
|
190
|
+
const db = this.ensureDb();
|
|
191
|
+
const normalized = validateHandle(handle);
|
|
192
|
+
const records = await db.getAllFromIndex('handleHistory', 'by-handle', normalized);
|
|
193
|
+
return records
|
|
194
|
+
.map(r => ({ previousHash: r.previousHash, changedAt: r.changedAt }))
|
|
195
|
+
.reverse(); // Newest first
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=IndexedDBEngine.js.map
|