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,140 @@
|
|
|
1
|
+
import { registry } from './detectors/registry';
|
|
2
|
+
export class ContentTypeInterpreter {
|
|
3
|
+
static MIME_TO_EXT = {
|
|
4
|
+
'text/plain': '.txt',
|
|
5
|
+
'application/json': '.json',
|
|
6
|
+
'text/csv': '.csv',
|
|
7
|
+
'text/x-python': '.py',
|
|
8
|
+
'text/javascript': '.js',
|
|
9
|
+
'text/jsx': '.jsx',
|
|
10
|
+
'text/typescript': '.ts',
|
|
11
|
+
'text/x-c': '.c',
|
|
12
|
+
'text/x-c++': '.cpp',
|
|
13
|
+
'application/xml': '.xml',
|
|
14
|
+
'text/html': '.html',
|
|
15
|
+
'application/x-yaml': '.yaml',
|
|
16
|
+
'text/markdown': '.md',
|
|
17
|
+
'text/x-sql': '.sql',
|
|
18
|
+
'image/png': '.png',
|
|
19
|
+
'image/jpeg': '.jpg',
|
|
20
|
+
'image/gif': '.gif',
|
|
21
|
+
'image/bmp': '.bmp',
|
|
22
|
+
'image/x-icon': '.ico',
|
|
23
|
+
'image/webp': '.webp',
|
|
24
|
+
'image/svg+xml': '.svg',
|
|
25
|
+
'application/pdf': '.pdf',
|
|
26
|
+
'application/zip': '.zip',
|
|
27
|
+
'application/gzip': '.gz',
|
|
28
|
+
'application/x-rar-compressed': '.rar',
|
|
29
|
+
'application/x-7z-compressed': '.7z',
|
|
30
|
+
'application/x-sqlite3': '.db',
|
|
31
|
+
'audio/wav': '.wav',
|
|
32
|
+
// Add more as needed
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Detect content type and suggest extension.
|
|
36
|
+
*
|
|
37
|
+
* @param content Content string or binary buffer
|
|
38
|
+
* @param fileExtension Optional file extension hint
|
|
39
|
+
* @returns Object containing detected mimeType and suggested extension
|
|
40
|
+
*/
|
|
41
|
+
static detectContentType(content, fileExtension) {
|
|
42
|
+
// Prepare sample lines for detectors
|
|
43
|
+
let lines = [];
|
|
44
|
+
let firstLine = '';
|
|
45
|
+
// Convert to string for line analysis (even if binary, we try loosely)
|
|
46
|
+
// Note: For large binary, this might be expensive/messy, but detectors handle it.
|
|
47
|
+
// Python implementation converts to string for lines.
|
|
48
|
+
let textSample = '';
|
|
49
|
+
if (typeof content === 'string') {
|
|
50
|
+
textSample = content.slice(0, 8192); // Limit sample size
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
// Decode ignoring errors for text analysis on binary
|
|
54
|
+
textSample = new TextDecoder('utf-8', { fatal: false }).decode(content.slice(0, 8192));
|
|
55
|
+
}
|
|
56
|
+
lines = textSample.split('\n').slice(0, 20);
|
|
57
|
+
firstLine = lines[0] || '';
|
|
58
|
+
const mimeType = registry.detect(content, lines, firstLine, fileExtension);
|
|
59
|
+
let extension = this.getExtension(mimeType);
|
|
60
|
+
// If detected extension matches provided hint, prefer the hint (case insensitive)
|
|
61
|
+
if (fileExtension && extension) {
|
|
62
|
+
if (fileExtension.toLowerCase() === extension || fileExtension.toLowerCase() === `.${extension}`) {
|
|
63
|
+
extension = fileExtension;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (!extension && fileExtension) {
|
|
67
|
+
extension = fileExtension;
|
|
68
|
+
}
|
|
69
|
+
if (!extension) {
|
|
70
|
+
extension = '.txt'; // Default
|
|
71
|
+
}
|
|
72
|
+
return { mimeType, extension };
|
|
73
|
+
}
|
|
74
|
+
static getExtension(mimeType) {
|
|
75
|
+
return this.MIME_TO_EXT[mimeType] || '';
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Check if content should be treated as binary.
|
|
79
|
+
*/
|
|
80
|
+
static isBinaryContent(content, mimeType) {
|
|
81
|
+
if (mimeType) {
|
|
82
|
+
if (mimeType.startsWith('text/') ||
|
|
83
|
+
mimeType.includes('json') ||
|
|
84
|
+
mimeType.includes('xml') ||
|
|
85
|
+
mimeType.includes('javascript') ||
|
|
86
|
+
mimeType.includes('ecmascript')) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
// If string, assume text
|
|
92
|
+
if (typeof content === 'string')
|
|
93
|
+
return false;
|
|
94
|
+
// Heuristic check
|
|
95
|
+
const detection = this.detectContentType(content);
|
|
96
|
+
return !detection.mimeType.startsWith('text/') &&
|
|
97
|
+
!detection.mimeType.includes('json') &&
|
|
98
|
+
!detection.mimeType.includes('xml');
|
|
99
|
+
}
|
|
100
|
+
static isKnownLongLineExtension(extension) {
|
|
101
|
+
if (!extension)
|
|
102
|
+
return false;
|
|
103
|
+
const ext = extension.toLowerCase();
|
|
104
|
+
return ['.min.js', '.min.css', '.map', '.svg', '.json', '.geojson'].some(e => ext.endsWith(e));
|
|
105
|
+
}
|
|
106
|
+
static isUnstructuredBinary(sample) {
|
|
107
|
+
// Match Python's heuristic:
|
|
108
|
+
// if len(sample) < 512: return False
|
|
109
|
+
if (sample.length < 512)
|
|
110
|
+
return false;
|
|
111
|
+
let nullCount = 0;
|
|
112
|
+
let controlCount = 0;
|
|
113
|
+
const len = Math.min(sample.length, 32 * 1024); // match larger sample if available
|
|
114
|
+
for (let i = 0; i < len; i++) {
|
|
115
|
+
const byte = sample[i];
|
|
116
|
+
if (byte === 0) {
|
|
117
|
+
nullCount++;
|
|
118
|
+
}
|
|
119
|
+
// Control chars: < 32, excluding TAB (9), LF (10), CR (13)
|
|
120
|
+
if ((byte < 32 && byte !== 9 && byte !== 10 && byte !== 13)) {
|
|
121
|
+
controlCount++;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const nullRatio = nullCount / len;
|
|
125
|
+
const controlRatio = controlCount / len;
|
|
126
|
+
// Python Constants: _NULL_RATIO_THRESHOLD = 0.1, _CTRL_RATIO_THRESHOLD = 0.2
|
|
127
|
+
return nullRatio > 0.1 || controlRatio > 0.2;
|
|
128
|
+
}
|
|
129
|
+
static hasPathologicalLines(sample, isKnownType) {
|
|
130
|
+
if (isKnownType || sample.length < 32768)
|
|
131
|
+
return false;
|
|
132
|
+
// Check if there are no newlines in the first 32KB
|
|
133
|
+
for (let i = 0; i < sample.length; i++) {
|
|
134
|
+
if (sample[i] === 10 || sample[i] === 13)
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=ContentTypeInterpreter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContentTypeInterpreter.js","sourceRoot":"","sources":["../../src/model/ContentTypeInterpreter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { MCard } from './MCard';
|
|
2
|
+
/**
|
|
3
|
+
* Generate a collision event for the given card.
|
|
4
|
+
*/
|
|
5
|
+
export declare function generateCollisionEvent(card: MCard): Promise<string>;
|
|
6
|
+
/**
|
|
7
|
+
* Generate a duplication event for the given card.
|
|
8
|
+
*/
|
|
9
|
+
export declare function generateDuplicationEvent(card: MCard): string;
|
|
10
|
+
//# sourceMappingURL=EventProducer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventProducer.d.ts","sourceRoot":"","sources":["../../src/model/EventProducer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAKhC;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBzE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAO5D"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { EVENT_CONSTANTS, ALGORITHM_HIERARCHY } from './constants';
|
|
2
|
+
import { GTime } from './GTime';
|
|
3
|
+
import { HashValidator } from '../hash/HashValidator';
|
|
4
|
+
/**
|
|
5
|
+
* Generate a collision event for the given card.
|
|
6
|
+
*/
|
|
7
|
+
export async function generateCollisionEvent(card) {
|
|
8
|
+
const currentHashFunction = GTime.getHashAlgorithm(card.g_time);
|
|
9
|
+
const nextAlgo = nextHashFunction(currentHashFunction);
|
|
10
|
+
// Compute upgraded hash
|
|
11
|
+
const upgradedHash = await HashValidator.computeHash(card.content, nextAlgo);
|
|
12
|
+
const event = {
|
|
13
|
+
[EVENT_CONSTANTS.TYPE]: EVENT_CONSTANTS.COLLISION_EVENT_TYPE,
|
|
14
|
+
[EVENT_CONSTANTS.HASH]: card.hash,
|
|
15
|
+
[EVENT_CONSTANTS.FIRST_G_TIME]: card.g_time,
|
|
16
|
+
[EVENT_CONSTANTS.COLLISION_TIME]: card.g_time, // Using original card's time as per Python logic reference
|
|
17
|
+
[EVENT_CONSTANTS.CONTENT_SIZE]: card.content.length,
|
|
18
|
+
[EVENT_CONSTANTS.UPGRADED_FUNCTION]: nextAlgo,
|
|
19
|
+
[EVENT_CONSTANTS.UPGRADED_HASH]: upgradedHash
|
|
20
|
+
};
|
|
21
|
+
return JSON.stringify(event);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Generate a duplication event for the given card.
|
|
25
|
+
*/
|
|
26
|
+
export function generateDuplicationEvent(card) {
|
|
27
|
+
const event = {
|
|
28
|
+
[EVENT_CONSTANTS.TYPE]: EVENT_CONSTANTS.DUPLICATE_EVENT_TYPE,
|
|
29
|
+
[EVENT_CONSTANTS.HASH]: card.hash,
|
|
30
|
+
[EVENT_CONSTANTS.DUPLICATE_TIME]: card.g_time
|
|
31
|
+
};
|
|
32
|
+
return JSON.stringify(event);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get the next hash function in the hierarchy.
|
|
36
|
+
*/
|
|
37
|
+
function nextHashFunction(current) {
|
|
38
|
+
const currentLower = current.toLowerCase();
|
|
39
|
+
const entry = ALGORITHM_HIERARCHY[currentLower];
|
|
40
|
+
if (entry && entry.next) {
|
|
41
|
+
return entry.next;
|
|
42
|
+
}
|
|
43
|
+
// Fallback logic
|
|
44
|
+
return 'sha256';
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=EventProducer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventProducer.js","sourceRoot":"","sources":["../../src/model/EventProducer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAAW;IACpD,MAAM,mBAAmB,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;IAEvD,wBAAwB;IACxB,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE7E,MAAM,KAAK,GAAG;QACV,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC,oBAAoB;QAC5D,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI;QACjC,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,MAAM;QAC3C,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,2DAA2D;QAC1G,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;QACnD,CAAC,eAAe,CAAC,iBAAiB,CAAC,EAAE,QAAQ;QAC7C,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,YAAY;KAChD,CAAC;IAEF,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAW;IAChD,MAAM,KAAK,GAAG;QACV,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC,oBAAoB;QAC5D,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI;QACjC,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,MAAM;KAChD,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,OAAe;IACrC,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAI,mBAA2B,CAAC,YAAY,CAAC,CAAC;IAEzD,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC,IAAI,CAAC;IACtB,CAAC;IAED,iBAAiB;IACjB,OAAO,QAAQ,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export declare class GTime {
|
|
2
|
+
private static readonly DEFAULT_ALGORITHM;
|
|
3
|
+
/**
|
|
4
|
+
* Generate a GTime stamp for the current moment
|
|
5
|
+
* Format: HASH_ALGO|TIMESTAMP|REGION_CODE
|
|
6
|
+
*/
|
|
7
|
+
static stampNow(hashAlgorithm?: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* Parse a GTime string
|
|
10
|
+
*/
|
|
11
|
+
static parse(gtime: string): {
|
|
12
|
+
timestamp: Date;
|
|
13
|
+
algorithm: string;
|
|
14
|
+
region: string;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Get the hash algorithm from a GTime string
|
|
18
|
+
*/
|
|
19
|
+
static getHashAlgorithm(gtime: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Get the timestamp from a GTime string
|
|
22
|
+
*/
|
|
23
|
+
static getTimestamp(gtime: string): Date;
|
|
24
|
+
/**
|
|
25
|
+
* Get the region code from a GTime string
|
|
26
|
+
*/
|
|
27
|
+
static getRegionCode(gtime: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* Check if the provided hash function is valid.
|
|
30
|
+
* Matches Python's GTime.is_valid_hash_function()
|
|
31
|
+
*/
|
|
32
|
+
static isValidHashFunction(hashFunction: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Check if the provided region code is valid.
|
|
35
|
+
* Matches Python's GTime.is_valid_region_code()
|
|
36
|
+
*/
|
|
37
|
+
static isValidRegionCode(regionCode: string): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Check if the provided timestamp is in ISO format.
|
|
40
|
+
* Matches Python's GTime.is_iso_format()
|
|
41
|
+
*/
|
|
42
|
+
static isIsoFormat(timestamp: string): boolean;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=GTime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GTime.d.ts","sourceRoot":"","sources":["../../src/model/GTime.ts"],"names":[],"mappings":"AAKA,qBAAa,KAAK;IACd,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAY;IAErD;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,aAAa,GAAE,MAA+B,GAAG,MAAM;IAQvE;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,SAAS,EAAE,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAYnF;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI9C;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI3C;;;OAGG;IACH,MAAM,CAAC,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAOzD;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAIrD;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;CAkBjD"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Valid hash algorithms supported by the system
|
|
3
|
+
*/
|
|
4
|
+
const VALID_HASH_ALGORITHMS = ['md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512'];
|
|
5
|
+
export class GTime {
|
|
6
|
+
static DEFAULT_ALGORITHM = 'sha256';
|
|
7
|
+
/**
|
|
8
|
+
* Generate a GTime stamp for the current moment
|
|
9
|
+
* Format: HASH_ALGO|TIMESTAMP|REGION_CODE
|
|
10
|
+
*/
|
|
11
|
+
static stampNow(hashAlgorithm = this.DEFAULT_ALGORITHM) {
|
|
12
|
+
const algo = hashAlgorithm.toLowerCase();
|
|
13
|
+
// Use ISO string for timestamp (UTC)
|
|
14
|
+
const timestamp = new Date().toISOString();
|
|
15
|
+
const region = 'UTC'; // Defaulting to UTC for JS implementation
|
|
16
|
+
return `${algo}|${timestamp}|${region}`;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Parse a GTime string
|
|
20
|
+
*/
|
|
21
|
+
static parse(gtime) {
|
|
22
|
+
const parts = gtime.split('|');
|
|
23
|
+
if (parts.length !== 3) {
|
|
24
|
+
throw new Error(`Invalid GTime format: ${gtime}`);
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
algorithm: parts[0],
|
|
28
|
+
timestamp: new Date(parts[1]),
|
|
29
|
+
region: parts[2]
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get the hash algorithm from a GTime string
|
|
34
|
+
*/
|
|
35
|
+
static getHashAlgorithm(gtime) {
|
|
36
|
+
return this.parse(gtime).algorithm;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get the timestamp from a GTime string
|
|
40
|
+
*/
|
|
41
|
+
static getTimestamp(gtime) {
|
|
42
|
+
return this.parse(gtime).timestamp;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get the region code from a GTime string
|
|
46
|
+
*/
|
|
47
|
+
static getRegionCode(gtime) {
|
|
48
|
+
return this.parse(gtime).region;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Check if the provided hash function is valid.
|
|
52
|
+
* Matches Python's GTime.is_valid_hash_function()
|
|
53
|
+
*/
|
|
54
|
+
static isValidHashFunction(hashFunction) {
|
|
55
|
+
if (!hashFunction || typeof hashFunction !== 'string') {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
return VALID_HASH_ALGORITHMS.includes(hashFunction.toLowerCase());
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Check if the provided region code is valid.
|
|
62
|
+
* Matches Python's GTime.is_valid_region_code()
|
|
63
|
+
*/
|
|
64
|
+
static isValidRegionCode(regionCode) {
|
|
65
|
+
return Boolean(regionCode && regionCode === regionCode.toUpperCase());
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Check if the provided timestamp is in ISO format.
|
|
69
|
+
* Matches Python's GTime.is_iso_format()
|
|
70
|
+
*/
|
|
71
|
+
static isIsoFormat(timestamp) {
|
|
72
|
+
if (!timestamp || typeof timestamp !== 'string') {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
const date = new Date(timestamp);
|
|
77
|
+
// Check if it's a valid date and the string contains expected ISO patterns
|
|
78
|
+
if (isNaN(date.getTime())) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
// ISO format should have 'T' separator or be a valid date string
|
|
82
|
+
// Accept formats like: 2024-12-04T12:00:00.000Z or 2024-12-04T12:00:00
|
|
83
|
+
const isoPattern = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;
|
|
84
|
+
return isoPattern.test(timestamp);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=GTime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GTime.js","sourceRoot":"","sources":["../../src/model/GTime.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAEtF,MAAM,OAAO,KAAK;IACN,MAAM,CAAU,iBAAiB,GAAG,QAAQ,CAAC;IAErD;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,gBAAwB,IAAI,CAAC,iBAAiB;QAC1D,MAAM,IAAI,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;QACzC,qCAAqC;QACrC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,0CAA0C;QAChE,OAAO,GAAG,IAAI,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,KAAa;QACtB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,OAAO;YACH,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;YACnB,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;SACnB,CAAC;IACN,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAa;QACjC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,KAAa;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,KAAa;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IACpC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,mBAAmB,CAAC,YAAoB;QAC3C,IAAI,CAAC,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YACpD,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,qBAAqB,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;IACtE,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,UAAkB;QACvC,OAAO,OAAO,CAAC,UAAU,IAAI,UAAU,KAAK,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,SAAiB;QAChC,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;YACjC,2EAA2E;YAC3E,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBACxB,OAAO,KAAK,CAAC;YACjB,CAAC;YACD,iEAAiE;YACjE,uEAAuE;YACvE,MAAM,UAAU,GAAG,sCAAsC,CAAC;YAC1D,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ContentHandle - UTF-8 aware handle validation and management
|
|
3
|
+
*
|
|
4
|
+
* Supports international characters (文檔, مستند, ドキュメント, документ)
|
|
5
|
+
* Uses Unicode categories for validation
|
|
6
|
+
*/
|
|
7
|
+
export declare class HandleValidationError extends Error {
|
|
8
|
+
constructor(message: string);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Validate and normalize a handle string
|
|
12
|
+
* @returns Normalized handle (NFC + lowercase)
|
|
13
|
+
* @throws HandleValidationError if invalid
|
|
14
|
+
*/
|
|
15
|
+
export declare function validateHandle(handle: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* ContentHandle - Mutable pointer to immutable MCard hash
|
|
18
|
+
*/
|
|
19
|
+
export declare class ContentHandle {
|
|
20
|
+
readonly handle: string;
|
|
21
|
+
currentHash: string;
|
|
22
|
+
readonly createdAt: Date;
|
|
23
|
+
updatedAt: Date;
|
|
24
|
+
constructor(handle: string, currentHash: string, createdAt?: Date, updatedAt?: Date);
|
|
25
|
+
/**
|
|
26
|
+
* Update handle to point to new hash
|
|
27
|
+
* @returns Previous hash for history tracking
|
|
28
|
+
*/
|
|
29
|
+
update(newHash: string): string;
|
|
30
|
+
toObject(): {
|
|
31
|
+
handle: string;
|
|
32
|
+
currentHash: string;
|
|
33
|
+
createdAt: string;
|
|
34
|
+
updatedAt: string;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=Handle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Handle.d.ts","sourceRoot":"","sources":["../../src/model/Handle.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH,qBAAa,qBAAsB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI9B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAmCrD;AAED;;GAEG;AACH,qBAAa,aAAa;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,SAAS,EAAE,IAAI,CAAC;gBAEJ,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,IAAI;IAOnF;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAO/B,QAAQ;;;;;;CAQX"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ContentHandle - UTF-8 aware handle validation and management
|
|
3
|
+
*
|
|
4
|
+
* Supports international characters (文檔, مستند, ドキュメント, документ)
|
|
5
|
+
* Uses Unicode categories for validation
|
|
6
|
+
*/
|
|
7
|
+
const MAX_HANDLE_LENGTH = 255;
|
|
8
|
+
/**
|
|
9
|
+
* Check if character is a valid starting character (Unicode letter)
|
|
10
|
+
*/
|
|
11
|
+
function isValidStartChar(char) {
|
|
12
|
+
// Unicode letter categories: L (Letter)
|
|
13
|
+
return /^\p{L}$/u.test(char);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Check if character is valid in handle body
|
|
17
|
+
*/
|
|
18
|
+
function isValidBodyChar(char) {
|
|
19
|
+
// Letters, numbers, underscore, hyphen, period, forward slash, space
|
|
20
|
+
return /^[\p{L}\p{N}_./ -]$/u.test(char);
|
|
21
|
+
}
|
|
22
|
+
export class HandleValidationError extends Error {
|
|
23
|
+
constructor(message) {
|
|
24
|
+
super(message);
|
|
25
|
+
this.name = 'HandleValidationError';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Validate and normalize a handle string
|
|
30
|
+
* @returns Normalized handle (NFC + lowercase)
|
|
31
|
+
* @throws HandleValidationError if invalid
|
|
32
|
+
*/
|
|
33
|
+
export function validateHandle(handle) {
|
|
34
|
+
if (!handle) {
|
|
35
|
+
throw new HandleValidationError('Handle cannot be empty.');
|
|
36
|
+
}
|
|
37
|
+
// Normalize: NFC + trim + lowercase
|
|
38
|
+
const normalized = handle.trim().normalize('NFC').toLowerCase();
|
|
39
|
+
if (normalized.length === 0) {
|
|
40
|
+
throw new HandleValidationError('Handle cannot be empty after normalization.');
|
|
41
|
+
}
|
|
42
|
+
if (normalized.length > MAX_HANDLE_LENGTH) {
|
|
43
|
+
throw new HandleValidationError(`Handle '${handle}' is too long (${normalized.length} chars). Maximum is ${MAX_HANDLE_LENGTH}.`);
|
|
44
|
+
}
|
|
45
|
+
// Validate first character
|
|
46
|
+
if (!isValidStartChar(normalized[0])) {
|
|
47
|
+
throw new HandleValidationError(`Invalid handle '${handle}'. Must start with a letter (any language).`);
|
|
48
|
+
}
|
|
49
|
+
// Validate remaining characters
|
|
50
|
+
for (let i = 1; i < normalized.length; i++) {
|
|
51
|
+
if (!isValidBodyChar(normalized[i])) {
|
|
52
|
+
throw new HandleValidationError(`Invalid character '${normalized[i]}' at position ${i} in handle '${handle}'.`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return normalized;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* ContentHandle - Mutable pointer to immutable MCard hash
|
|
59
|
+
*/
|
|
60
|
+
export class ContentHandle {
|
|
61
|
+
handle;
|
|
62
|
+
currentHash;
|
|
63
|
+
createdAt;
|
|
64
|
+
updatedAt;
|
|
65
|
+
constructor(handle, currentHash, createdAt, updatedAt) {
|
|
66
|
+
this.handle = validateHandle(handle);
|
|
67
|
+
this.currentHash = currentHash;
|
|
68
|
+
this.createdAt = createdAt ?? new Date();
|
|
69
|
+
this.updatedAt = updatedAt ?? this.createdAt;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Update handle to point to new hash
|
|
73
|
+
* @returns Previous hash for history tracking
|
|
74
|
+
*/
|
|
75
|
+
update(newHash) {
|
|
76
|
+
const previousHash = this.currentHash;
|
|
77
|
+
this.currentHash = newHash;
|
|
78
|
+
this.updatedAt = new Date();
|
|
79
|
+
return previousHash;
|
|
80
|
+
}
|
|
81
|
+
toObject() {
|
|
82
|
+
return {
|
|
83
|
+
handle: this.handle,
|
|
84
|
+
currentHash: this.currentHash,
|
|
85
|
+
createdAt: this.createdAt.toISOString(),
|
|
86
|
+
updatedAt: this.updatedAt.toISOString()
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=Handle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Handle.js","sourceRoot":"","sources":["../../src/model/Handle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCard - Content-addressable data container
|
|
3
|
+
*
|
|
4
|
+
* Each MCard has:
|
|
5
|
+
* - content: Raw bytes (Uint8Array)
|
|
6
|
+
* - hash: SHA-256 cryptographic hash
|
|
7
|
+
* - g_time: Global timestamp with algorithm identifier
|
|
8
|
+
*/
|
|
9
|
+
export declare class MCard {
|
|
10
|
+
readonly content: Uint8Array;
|
|
11
|
+
readonly hash: string;
|
|
12
|
+
readonly g_time: string;
|
|
13
|
+
readonly contentType: string;
|
|
14
|
+
readonly hashFunction: string;
|
|
15
|
+
private constructor();
|
|
16
|
+
/**
|
|
17
|
+
* Create a new MCard from content
|
|
18
|
+
*/
|
|
19
|
+
static create(content: string | Uint8Array, hashAlgorithm?: string): Promise<MCard>;
|
|
20
|
+
/**
|
|
21
|
+
* Create an MCard from existing data (e.g., from database)
|
|
22
|
+
*/
|
|
23
|
+
static fromData(content: Uint8Array, hash: string, g_time: string): MCard;
|
|
24
|
+
/**
|
|
25
|
+
* Get content as text (UTF-8 decoded)
|
|
26
|
+
*/
|
|
27
|
+
getContentAsText(): string;
|
|
28
|
+
/**
|
|
29
|
+
* Get content as raw bytes
|
|
30
|
+
*/
|
|
31
|
+
getContent(): Uint8Array;
|
|
32
|
+
/**
|
|
33
|
+
* Convert to plain object
|
|
34
|
+
*/
|
|
35
|
+
toObject(): {
|
|
36
|
+
hash: string;
|
|
37
|
+
content: string;
|
|
38
|
+
g_time: string;
|
|
39
|
+
contentType: string;
|
|
40
|
+
hashFunction: string;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=MCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MCard.d.ts","sourceRoot":"","sources":["../../src/model/MCard.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,qBAAa,KAAK;IACd,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B,OAAO;IAQP;;OAEG;WACU,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,aAAa,GAAE,MAAiB,GAAG,OAAO,CAAC,KAAK,CAAC;IAoBnG;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK;IAMzE;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,UAAU,IAAI,UAAU;IAIxB;;OAEG;IACH,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE;CAS3G"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { HashValidator } from '../hash/HashValidator';
|
|
2
|
+
import { GTime } from './GTime';
|
|
3
|
+
import { ContentTypeInterpreter } from './detectors/ContentTypeInterpreter';
|
|
4
|
+
/**
|
|
5
|
+
* MCard - Content-addressable data container
|
|
6
|
+
*
|
|
7
|
+
* Each MCard has:
|
|
8
|
+
* - content: Raw bytes (Uint8Array)
|
|
9
|
+
* - hash: SHA-256 cryptographic hash
|
|
10
|
+
* - g_time: Global timestamp with algorithm identifier
|
|
11
|
+
*/
|
|
12
|
+
export class MCard {
|
|
13
|
+
content;
|
|
14
|
+
hash;
|
|
15
|
+
g_time;
|
|
16
|
+
contentType; // Defaulting to specific string or null
|
|
17
|
+
hashFunction;
|
|
18
|
+
constructor(content, hash, g_time, contentType, hashFunction) {
|
|
19
|
+
this.content = content;
|
|
20
|
+
this.hash = hash;
|
|
21
|
+
this.g_time = g_time;
|
|
22
|
+
this.contentType = contentType;
|
|
23
|
+
this.hashFunction = hashFunction;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Create a new MCard from content
|
|
27
|
+
*/
|
|
28
|
+
static async create(content, hashAlgorithm = 'sha256') {
|
|
29
|
+
if (content === null || content === undefined) {
|
|
30
|
+
throw new Error('Content cannot be null or undefined');
|
|
31
|
+
}
|
|
32
|
+
const bytes = typeof content === 'string'
|
|
33
|
+
? new TextEncoder().encode(content)
|
|
34
|
+
: content;
|
|
35
|
+
if (bytes.length === 0) {
|
|
36
|
+
throw new Error('Content cannot be empty');
|
|
37
|
+
}
|
|
38
|
+
const hash = await HashValidator.computeHash(bytes, hashAlgorithm);
|
|
39
|
+
const g_time = GTime.stampNow(hashAlgorithm);
|
|
40
|
+
const contentType = ContentTypeInterpreter.detect(bytes);
|
|
41
|
+
return new MCard(bytes, hash, g_time, contentType, hashAlgorithm);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Create an MCard from existing data (e.g., from database)
|
|
45
|
+
*/
|
|
46
|
+
static fromData(content, hash, g_time) {
|
|
47
|
+
const alg = GTime.getHashAlgorithm(g_time);
|
|
48
|
+
const contentType = ContentTypeInterpreter.detect(content);
|
|
49
|
+
return new MCard(content, hash, g_time, contentType, alg);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get content as text (UTF-8 decoded)
|
|
53
|
+
*/
|
|
54
|
+
getContentAsText() {
|
|
55
|
+
return new TextDecoder().decode(this.content);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get content as raw bytes
|
|
59
|
+
*/
|
|
60
|
+
getContent() {
|
|
61
|
+
return this.content;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Convert to plain object
|
|
65
|
+
*/
|
|
66
|
+
toObject() {
|
|
67
|
+
return {
|
|
68
|
+
hash: this.hash,
|
|
69
|
+
content: this.getContentAsText(),
|
|
70
|
+
g_time: this.g_time,
|
|
71
|
+
contentType: this.contentType,
|
|
72
|
+
hashFunction: this.hashFunction
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=MCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MCard.js","sourceRoot":"","sources":["../../src/model/MCard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E;;;;;;;GAOG;AACH,MAAM,OAAO,KAAK;IACL,OAAO,CAAa;IACpB,IAAI,CAAS;IACb,MAAM,CAAS;IACf,WAAW,CAAS,CAAC,wCAAwC;IAC7D,YAAY,CAAS;IAE9B,YAAoB,OAAmB,EAAE,IAAY,EAAE,MAAc,EAAE,WAAmB,EAAE,YAAoB;QAC5G,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAA4B,EAAE,gBAAwB,QAAQ;QAC9E,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,OAAO,KAAK,QAAQ;YACrC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;YACnC,CAAC,CAAC,OAAO,CAAC;QAEd,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAG,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEzD,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAmB,EAAE,IAAY,EAAE,MAAc;QAC7D,MAAM,GAAG,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3D,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,gBAAgB;QACZ,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,UAAU;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,QAAQ;QACJ,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE;YAChC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;SAClC,CAAC;IACN,CAAC;CACJ"}
|