@matter/general 0.11.0-alpha.0-20241005-e3e4e4a7a
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/LICENSE +201 -0
- package/README.md +3 -0
- package/dist/cjs/MatterError.d.ts +95 -0
- package/dist/cjs/MatterError.d.ts.map +1 -0
- package/dist/cjs/MatterError.js +177 -0
- package/dist/cjs/MatterError.js.map +6 -0
- package/dist/cjs/codec/Base64Codec.d.ts +23 -0
- package/dist/cjs/codec/Base64Codec.d.ts.map +1 -0
- package/dist/cjs/codec/Base64Codec.js +134 -0
- package/dist/cjs/codec/Base64Codec.js.map +6 -0
- package/dist/cjs/codec/DerCodec.d.ts +83 -0
- package/dist/cjs/codec/DerCodec.d.ts.map +1 -0
- package/dist/cjs/codec/DerCodec.js +286 -0
- package/dist/cjs/codec/DerCodec.js.map +6 -0
- package/dist/cjs/codec/DerTypes.d.ts +73 -0
- package/dist/cjs/codec/DerTypes.d.ts.map +1 -0
- package/dist/cjs/codec/DerTypes.js +132 -0
- package/dist/cjs/codec/DerTypes.js.map +6 -0
- package/dist/cjs/codec/DnsCodec.d.ts +86 -0
- package/dist/cjs/codec/DnsCodec.d.ts.map +1 -0
- package/dist/cjs/codec/DnsCodec.js +355 -0
- package/dist/cjs/codec/DnsCodec.js.map +6 -0
- package/dist/cjs/codec/index.d.ts +10 -0
- package/dist/cjs/codec/index.d.ts.map +1 -0
- package/dist/cjs/codec/index.js +27 -0
- package/dist/cjs/codec/index.js.map +6 -0
- package/dist/cjs/crypto/Crypto.d.ts +169 -0
- package/dist/cjs/crypto/Crypto.d.ts.map +1 -0
- package/dist/cjs/crypto/Crypto.js +103 -0
- package/dist/cjs/crypto/Crypto.js.map +6 -0
- package/dist/cjs/crypto/CryptoConstants.d.ts +19 -0
- package/dist/cjs/crypto/CryptoConstants.d.ts.map +1 -0
- package/dist/cjs/crypto/CryptoConstants.js +48 -0
- package/dist/cjs/crypto/CryptoConstants.js.map +6 -0
- package/dist/cjs/crypto/Key.d.ts +171 -0
- package/dist/cjs/crypto/Key.d.ts.map +1 -0
- package/dist/cjs/crypto/Key.js +356 -0
- package/dist/cjs/crypto/Key.js.map +6 -0
- package/dist/cjs/crypto/Spake2p.d.ts +40 -0
- package/dist/cjs/crypto/Spake2p.d.ts.map +1 -0
- package/dist/cjs/crypto/Spake2p.js +128 -0
- package/dist/cjs/crypto/Spake2p.js.map +6 -0
- package/dist/cjs/crypto/index.d.ts +10 -0
- package/dist/cjs/crypto/index.d.ts.map +1 -0
- package/dist/cjs/crypto/index.js +27 -0
- package/dist/cjs/crypto/index.js.map +6 -0
- package/dist/cjs/environment/Environment.d.ts +96 -0
- package/dist/cjs/environment/Environment.d.ts.map +1 -0
- package/dist/cjs/environment/Environment.js +199 -0
- package/dist/cjs/environment/Environment.js.map +6 -0
- package/dist/cjs/environment/Environmental.d.ts +52 -0
- package/dist/cjs/environment/Environmental.d.ts.map +1 -0
- package/dist/cjs/environment/Environmental.js +33 -0
- package/dist/cjs/environment/Environmental.js.map +6 -0
- package/dist/cjs/environment/RuntimeService.d.ts +107 -0
- package/dist/cjs/environment/RuntimeService.d.ts.map +1 -0
- package/dist/cjs/environment/RuntimeService.js +222 -0
- package/dist/cjs/environment/RuntimeService.js.map +6 -0
- package/dist/cjs/environment/VariableService.d.ts +58 -0
- package/dist/cjs/environment/VariableService.d.ts.map +1 -0
- package/dist/cjs/environment/VariableService.js +257 -0
- package/dist/cjs/environment/VariableService.js.map +6 -0
- package/dist/cjs/environment/index.d.ts +10 -0
- package/dist/cjs/environment/index.d.ts.map +1 -0
- package/dist/cjs/environment/index.js +27 -0
- package/dist/cjs/environment/index.js.map +6 -0
- package/dist/cjs/index.d.ts +17 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +34 -0
- package/dist/cjs/index.js.map +6 -0
- package/dist/cjs/log/Diagnostic.d.ts +140 -0
- package/dist/cjs/log/Diagnostic.d.ts.map +1 -0
- package/dist/cjs/log/Diagnostic.js +297 -0
- package/dist/cjs/log/Diagnostic.js.map +6 -0
- package/dist/cjs/log/DiagnosticSource.d.ts +16 -0
- package/dist/cjs/log/DiagnosticSource.d.ts.map +1 -0
- package/dist/cjs/log/DiagnosticSource.js +45 -0
- package/dist/cjs/log/DiagnosticSource.js.map +6 -0
- package/dist/cjs/log/LogFormat.d.ts +33 -0
- package/dist/cjs/log/LogFormat.d.ts.map +1 -0
- package/dist/cjs/log/LogFormat.js +503 -0
- package/dist/cjs/log/LogFormat.js.map +6 -0
- package/dist/cjs/log/LogLevel.d.ts +18 -0
- package/dist/cjs/log/LogLevel.d.ts.map +1 -0
- package/dist/cjs/log/LogLevel.js +57 -0
- package/dist/cjs/log/LogLevel.js.map +6 -0
- package/dist/cjs/log/Logger.d.ts +220 -0
- package/dist/cjs/log/Logger.d.ts.map +1 -0
- package/dist/cjs/log/Logger.js +401 -0
- package/dist/cjs/log/Logger.js.map +6 -0
- package/dist/cjs/log/index.d.ts +11 -0
- package/dist/cjs/log/index.d.ts.map +1 -0
- package/dist/cjs/log/index.js +28 -0
- package/dist/cjs/log/index.js.map +6 -0
- package/dist/cjs/math/ReedSolomon.d.ts +11 -0
- package/dist/cjs/math/ReedSolomon.d.ts.map +1 -0
- package/dist/cjs/math/ReedSolomon.js +109 -0
- package/dist/cjs/math/ReedSolomon.js.map +6 -0
- package/dist/cjs/math/Verhoeff.d.ts +17 -0
- package/dist/cjs/math/Verhoeff.d.ts.map +1 -0
- package/dist/cjs/math/Verhoeff.js +64 -0
- package/dist/cjs/math/Verhoeff.js.map +6 -0
- package/dist/cjs/math/index.d.ts +8 -0
- package/dist/cjs/math/index.d.ts.map +1 -0
- package/dist/cjs/math/index.js +25 -0
- package/dist/cjs/math/index.js.map +6 -0
- package/dist/cjs/net/Channel.d.ts +24 -0
- package/dist/cjs/net/Channel.d.ts.map +1 -0
- package/dist/cjs/net/Channel.js +35 -0
- package/dist/cjs/net/Channel.js.map +6 -0
- package/dist/cjs/net/NetInterface.d.ts +24 -0
- package/dist/cjs/net/NetInterface.d.ts.map +1 -0
- package/dist/cjs/net/NetInterface.js +42 -0
- package/dist/cjs/net/NetInterface.js.map +6 -0
- package/dist/cjs/net/Network.d.ts +54 -0
- package/dist/cjs/net/Network.d.ts.map +1 -0
- package/dist/cjs/net/Network.js +50 -0
- package/dist/cjs/net/Network.js.map +6 -0
- package/dist/cjs/net/ServerAddress.d.ts +17 -0
- package/dist/cjs/net/ServerAddress.d.ts.map +1 -0
- package/dist/cjs/net/ServerAddress.js +32 -0
- package/dist/cjs/net/ServerAddress.js.map +6 -0
- package/dist/cjs/net/TransportInterface.d.ts +40 -0
- package/dist/cjs/net/TransportInterface.d.ts.map +1 -0
- package/dist/cjs/net/TransportInterface.js +55 -0
- package/dist/cjs/net/TransportInterface.js.map +6 -0
- package/dist/cjs/net/UdpChannel.d.ts +25 -0
- package/dist/cjs/net/UdpChannel.d.ts.map +1 -0
- package/dist/cjs/net/UdpChannel.js +30 -0
- package/dist/cjs/net/UdpChannel.js.map +6 -0
- package/dist/cjs/net/UdpInterface.d.ts +35 -0
- package/dist/cjs/net/UdpInterface.d.ts.map +1 -0
- package/dist/cjs/net/UdpInterface.js +82 -0
- package/dist/cjs/net/UdpInterface.js.map +6 -0
- package/dist/cjs/net/UdpMulticastServer.d.ts +30 -0
- package/dist/cjs/net/UdpMulticastServer.d.ts.map +1 -0
- package/dist/cjs/net/UdpMulticastServer.js +133 -0
- package/dist/cjs/net/UdpMulticastServer.js.map +6 -0
- package/dist/cjs/net/index.d.ts +17 -0
- package/dist/cjs/net/index.d.ts.map +1 -0
- package/dist/cjs/net/index.js +34 -0
- package/dist/cjs/net/index.js.map +6 -0
- package/dist/cjs/net/mock/MockNetwork.d.ts +19 -0
- package/dist/cjs/net/mock/MockNetwork.d.ts.map +1 -0
- package/dist/cjs/net/mock/MockNetwork.js +56 -0
- package/dist/cjs/net/mock/MockNetwork.js.map +6 -0
- package/dist/cjs/net/mock/MockUdpChannel.d.ts +27 -0
- package/dist/cjs/net/mock/MockUdpChannel.d.ts.map +1 -0
- package/dist/cjs/net/mock/MockUdpChannel.js +76 -0
- package/dist/cjs/net/mock/MockUdpChannel.js.map +6 -0
- package/dist/cjs/net/mock/NetworkSimulator.d.ts +18 -0
- package/dist/cjs/net/mock/NetworkSimulator.d.ts.map +1 -0
- package/dist/cjs/net/mock/NetworkSimulator.js +73 -0
- package/dist/cjs/net/mock/NetworkSimulator.js.map +6 -0
- package/dist/cjs/package.json +6 -0
- package/dist/cjs/polyfills/disposable.d.ts +7 -0
- package/dist/cjs/polyfills/disposable.d.ts.map +1 -0
- package/dist/cjs/polyfills/disposable.js +19 -0
- package/dist/cjs/polyfills/disposable.js.map +6 -0
- package/dist/cjs/polyfills/index.d.ts +7 -0
- package/dist/cjs/polyfills/index.d.ts.map +1 -0
- package/dist/cjs/polyfills/index.js +8 -0
- package/dist/cjs/polyfills/index.js.map +6 -0
- package/dist/cjs/storage/Storage.d.ts +54 -0
- package/dist/cjs/storage/Storage.d.ts.map +1 -0
- package/dist/cjs/storage/Storage.js +38 -0
- package/dist/cjs/storage/Storage.js.map +6 -0
- package/dist/cjs/storage/StorageBackendMemory.d.ts +27 -0
- package/dist/cjs/storage/StorageBackendMemory.d.ts.map +1 -0
- package/dist/cjs/storage/StorageBackendMemory.js +131 -0
- package/dist/cjs/storage/StorageBackendMemory.js.map +6 -0
- package/dist/cjs/storage/StorageContext.d.ts +26 -0
- package/dist/cjs/storage/StorageContext.d.ts.map +1 -0
- package/dist/cjs/storage/StorageContext.js +117 -0
- package/dist/cjs/storage/StorageContext.js.map +6 -0
- package/dist/cjs/storage/StorageManager.d.ts +17 -0
- package/dist/cjs/storage/StorageManager.d.ts.map +1 -0
- package/dist/cjs/storage/StorageManager.js +59 -0
- package/dist/cjs/storage/StorageManager.js.map +6 -0
- package/dist/cjs/storage/StorageService.d.ts +35 -0
- package/dist/cjs/storage/StorageService.d.ts.map +1 -0
- package/dist/cjs/storage/StorageService.js +82 -0
- package/dist/cjs/storage/StorageService.js.map +6 -0
- package/dist/cjs/storage/StringifyTools.d.ts +16 -0
- package/dist/cjs/storage/StringifyTools.d.ts.map +1 -0
- package/dist/cjs/storage/StringifyTools.js +105 -0
- package/dist/cjs/storage/StringifyTools.js.map +6 -0
- package/dist/cjs/storage/index.d.ts +12 -0
- package/dist/cjs/storage/index.d.ts.map +1 -0
- package/dist/cjs/storage/index.js +29 -0
- package/dist/cjs/storage/index.js.map +6 -0
- package/dist/cjs/time/Time.d.ts +66 -0
- package/dist/cjs/time/Time.d.ts.map +1 -0
- package/dist/cjs/time/Time.js +137 -0
- package/dist/cjs/time/Time.js.map +6 -0
- package/dist/cjs/time/index.d.ts +7 -0
- package/dist/cjs/time/index.d.ts.map +1 -0
- package/dist/cjs/time/index.js +24 -0
- package/dist/cjs/time/index.js.map +6 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/cjs/util/Array.d.ts +12 -0
- package/dist/cjs/util/Array.d.ts.map +1 -0
- package/dist/cjs/util/Array.js +24 -0
- package/dist/cjs/util/Array.js.map +6 -0
- package/dist/cjs/util/Bytes.d.ts +23 -0
- package/dist/cjs/util/Bytes.d.ts.map +1 -0
- package/dist/cjs/util/Bytes.js +95 -0
- package/dist/cjs/util/Bytes.js.map +6 -0
- package/dist/cjs/util/Cache.d.ts +33 -0
- package/dist/cjs/util/Cache.d.ts.map +1 -0
- package/dist/cjs/util/Cache.js +114 -0
- package/dist/cjs/util/Cache.js.map +6 -0
- package/dist/cjs/util/Construction.d.ts +182 -0
- package/dist/cjs/util/Construction.d.ts.map +1 -0
- package/dist/cjs/util/Construction.js +417 -0
- package/dist/cjs/util/Construction.js.map +6 -0
- package/dist/cjs/util/DataReadQueue.d.ts +17 -0
- package/dist/cjs/util/DataReadQueue.d.ts.map +1 -0
- package/dist/cjs/util/DataReadQueue.js +76 -0
- package/dist/cjs/util/DataReadQueue.js.map +6 -0
- package/dist/cjs/util/DataReader.d.ts +32 -0
- package/dist/cjs/util/DataReader.d.ts.map +1 -0
- package/dist/cjs/util/DataReader.js +101 -0
- package/dist/cjs/util/DataReader.js.map +6 -0
- package/dist/cjs/util/DataWriter.d.ts +26 -0
- package/dist/cjs/util/DataWriter.d.ts.map +1 -0
- package/dist/cjs/util/DataWriter.js +114 -0
- package/dist/cjs/util/DataWriter.js.map +6 -0
- package/dist/cjs/util/DeepCopy.d.ts +12 -0
- package/dist/cjs/util/DeepCopy.d.ts.map +1 -0
- package/dist/cjs/util/DeepCopy.js +58 -0
- package/dist/cjs/util/DeepCopy.js.map +6 -0
- package/dist/cjs/util/DeepEqual.d.ts +7 -0
- package/dist/cjs/util/DeepEqual.d.ts.map +1 -0
- package/dist/cjs/util/DeepEqual.js +55 -0
- package/dist/cjs/util/DeepEqual.js.map +6 -0
- package/dist/cjs/util/Error.d.ts +12 -0
- package/dist/cjs/util/Error.d.ts.map +1 -0
- package/dist/cjs/util/Error.js +41 -0
- package/dist/cjs/util/Error.js.map +6 -0
- package/dist/cjs/util/GeneratedClass.d.ts +62 -0
- package/dist/cjs/util/GeneratedClass.d.ts.map +1 -0
- package/dist/cjs/util/GeneratedClass.js +117 -0
- package/dist/cjs/util/GeneratedClass.js.map +6 -0
- package/dist/cjs/util/Introspection.d.ts +38 -0
- package/dist/cjs/util/Introspection.d.ts.map +1 -0
- package/dist/cjs/util/Introspection.js +85 -0
- package/dist/cjs/util/Introspection.js.map +6 -0
- package/dist/cjs/util/Ip.d.ts +8 -0
- package/dist/cjs/util/Ip.d.ts.map +1 -0
- package/dist/cjs/util/Ip.js +90 -0
- package/dist/cjs/util/Ip.js.map +6 -0
- package/dist/cjs/util/Lifecycle.d.ts +97 -0
- package/dist/cjs/util/Lifecycle.d.ts.map +1 -0
- package/dist/cjs/util/Lifecycle.js +89 -0
- package/dist/cjs/util/Lifecycle.js.map +6 -0
- package/dist/cjs/util/Multiplex.d.ts +14 -0
- package/dist/cjs/util/Multiplex.d.ts.map +1 -0
- package/dist/cjs/util/Multiplex.js +22 -0
- package/dist/cjs/util/Multiplex.js.map +6 -0
- package/dist/cjs/util/Mutex.d.ts +34 -0
- package/dist/cjs/util/Mutex.d.ts.map +1 -0
- package/dist/cjs/util/Mutex.js +105 -0
- package/dist/cjs/util/Mutex.js.map +6 -0
- package/dist/cjs/util/NamedHandler.d.ts +21 -0
- package/dist/cjs/util/NamedHandler.d.ts.map +1 -0
- package/dist/cjs/util/NamedHandler.js +54 -0
- package/dist/cjs/util/NamedHandler.js.map +6 -0
- package/dist/cjs/util/Number.d.ts +37 -0
- package/dist/cjs/util/Number.d.ts.map +1 -0
- package/dist/cjs/util/Number.js +97 -0
- package/dist/cjs/util/Number.js.map +6 -0
- package/dist/cjs/util/Observable.d.ts +197 -0
- package/dist/cjs/util/Observable.d.ts.map +1 -0
- package/dist/cjs/util/Observable.js +340 -0
- package/dist/cjs/util/Observable.js.map +6 -0
- package/dist/cjs/util/PromiseQueue.d.ts +25 -0
- package/dist/cjs/util/PromiseQueue.d.ts.map +1 -0
- package/dist/cjs/util/PromiseQueue.js +107 -0
- package/dist/cjs/util/PromiseQueue.js.map +6 -0
- package/dist/cjs/util/Promises.d.ts +68 -0
- package/dist/cjs/util/Promises.d.ts.map +1 -0
- package/dist/cjs/util/Promises.js +199 -0
- package/dist/cjs/util/Promises.js.map +6 -0
- package/dist/cjs/util/Set.d.ts +60 -0
- package/dist/cjs/util/Set.d.ts.map +1 -0
- package/dist/cjs/util/Set.js +145 -0
- package/dist/cjs/util/Set.js.map +6 -0
- package/dist/cjs/util/Singleton.d.ts +7 -0
- package/dist/cjs/util/Singleton.d.ts.map +1 -0
- package/dist/cjs/util/Singleton.js +36 -0
- package/dist/cjs/util/Singleton.js.map +6 -0
- package/dist/cjs/util/Stream.d.ts +16 -0
- package/dist/cjs/util/Stream.d.ts.map +1 -0
- package/dist/cjs/util/Stream.js +38 -0
- package/dist/cjs/util/Stream.js.map +6 -0
- package/dist/cjs/util/String.d.ts +39 -0
- package/dist/cjs/util/String.d.ts.map +1 -0
- package/dist/cjs/util/String.js +208 -0
- package/dist/cjs/util/String.js.map +6 -0
- package/dist/cjs/util/Type.d.ts +84 -0
- package/dist/cjs/util/Type.d.ts.map +1 -0
- package/dist/cjs/util/Type.js +52 -0
- package/dist/cjs/util/Type.js.map +6 -0
- package/dist/cjs/util/index.d.ts +30 -0
- package/dist/cjs/util/index.d.ts.map +1 -0
- package/dist/cjs/util/index.js +47 -0
- package/dist/cjs/util/index.js.map +6 -0
- package/dist/esm/MatterError.d.ts +95 -0
- package/dist/esm/MatterError.d.ts.map +1 -0
- package/dist/esm/MatterError.js +157 -0
- package/dist/esm/MatterError.js.map +6 -0
- package/dist/esm/codec/Base64Codec.d.ts +23 -0
- package/dist/esm/codec/Base64Codec.d.ts.map +1 -0
- package/dist/esm/codec/Base64Codec.js +114 -0
- package/dist/esm/codec/Base64Codec.js.map +6 -0
- package/dist/esm/codec/DerCodec.d.ts +83 -0
- package/dist/esm/codec/DerCodec.d.ts.map +1 -0
- package/dist/esm/codec/DerCodec.js +266 -0
- package/dist/esm/codec/DerCodec.js.map +6 -0
- package/dist/esm/codec/DerTypes.d.ts +73 -0
- package/dist/esm/codec/DerTypes.d.ts.map +1 -0
- package/dist/esm/codec/DerTypes.js +122 -0
- package/dist/esm/codec/DerTypes.js.map +6 -0
- package/dist/esm/codec/DnsCodec.d.ts +86 -0
- package/dist/esm/codec/DnsCodec.d.ts.map +1 -0
- package/dist/esm/codec/DnsCodec.js +335 -0
- package/dist/esm/codec/DnsCodec.js.map +6 -0
- package/dist/esm/codec/index.d.ts +10 -0
- package/dist/esm/codec/index.d.ts.map +1 -0
- package/dist/esm/codec/index.js +10 -0
- package/dist/esm/codec/index.js.map +6 -0
- package/dist/esm/crypto/Crypto.d.ts +169 -0
- package/dist/esm/crypto/Crypto.d.ts.map +1 -0
- package/dist/esm/crypto/Crypto.js +73 -0
- package/dist/esm/crypto/Crypto.js.map +6 -0
- package/dist/esm/crypto/CryptoConstants.d.ts +19 -0
- package/dist/esm/crypto/CryptoConstants.d.ts.map +1 -0
- package/dist/esm/crypto/CryptoConstants.js +28 -0
- package/dist/esm/crypto/CryptoConstants.js.map +6 -0
- package/dist/esm/crypto/Key.d.ts +171 -0
- package/dist/esm/crypto/Key.d.ts.map +1 -0
- package/dist/esm/crypto/Key.js +336 -0
- package/dist/esm/crypto/Key.js.map +6 -0
- package/dist/esm/crypto/Spake2p.d.ts +40 -0
- package/dist/esm/crypto/Spake2p.d.ts.map +1 -0
- package/dist/esm/crypto/Spake2p.js +108 -0
- package/dist/esm/crypto/Spake2p.js.map +6 -0
- package/dist/esm/crypto/index.d.ts +10 -0
- package/dist/esm/crypto/index.d.ts.map +1 -0
- package/dist/esm/crypto/index.js +10 -0
- package/dist/esm/crypto/index.js.map +6 -0
- package/dist/esm/environment/Environment.d.ts +96 -0
- package/dist/esm/environment/Environment.d.ts.map +1 -0
- package/dist/esm/environment/Environment.js +179 -0
- package/dist/esm/environment/Environment.js.map +6 -0
- package/dist/esm/environment/Environmental.d.ts +52 -0
- package/dist/esm/environment/Environmental.d.ts.map +1 -0
- package/dist/esm/environment/Environmental.js +13 -0
- package/dist/esm/environment/Environmental.js.map +6 -0
- package/dist/esm/environment/RuntimeService.d.ts +107 -0
- package/dist/esm/environment/RuntimeService.d.ts.map +1 -0
- package/dist/esm/environment/RuntimeService.js +202 -0
- package/dist/esm/environment/RuntimeService.js.map +6 -0
- package/dist/esm/environment/VariableService.d.ts +58 -0
- package/dist/esm/environment/VariableService.d.ts.map +1 -0
- package/dist/esm/environment/VariableService.js +237 -0
- package/dist/esm/environment/VariableService.js.map +6 -0
- package/dist/esm/environment/index.d.ts +10 -0
- package/dist/esm/environment/index.d.ts.map +1 -0
- package/dist/esm/environment/index.js +10 -0
- package/dist/esm/environment/index.js.map +6 -0
- package/dist/esm/index.d.ts +17 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +17 -0
- package/dist/esm/index.js.map +6 -0
- package/dist/esm/log/Diagnostic.d.ts +140 -0
- package/dist/esm/log/Diagnostic.d.ts.map +1 -0
- package/dist/esm/log/Diagnostic.js +277 -0
- package/dist/esm/log/Diagnostic.js.map +6 -0
- package/dist/esm/log/DiagnosticSource.d.ts +16 -0
- package/dist/esm/log/DiagnosticSource.d.ts.map +1 -0
- package/dist/esm/log/DiagnosticSource.js +25 -0
- package/dist/esm/log/DiagnosticSource.js.map +6 -0
- package/dist/esm/log/LogFormat.d.ts +33 -0
- package/dist/esm/log/LogFormat.d.ts.map +1 -0
- package/dist/esm/log/LogFormat.js +483 -0
- package/dist/esm/log/LogFormat.js.map +6 -0
- package/dist/esm/log/LogLevel.d.ts +18 -0
- package/dist/esm/log/LogLevel.d.ts.map +1 -0
- package/dist/esm/log/LogLevel.js +37 -0
- package/dist/esm/log/LogLevel.js.map +6 -0
- package/dist/esm/log/Logger.d.ts +220 -0
- package/dist/esm/log/Logger.d.ts.map +1 -0
- package/dist/esm/log/Logger.js +381 -0
- package/dist/esm/log/Logger.js.map +6 -0
- package/dist/esm/log/index.d.ts +11 -0
- package/dist/esm/log/index.d.ts.map +1 -0
- package/dist/esm/log/index.js +11 -0
- package/dist/esm/log/index.js.map +6 -0
- package/dist/esm/math/ReedSolomon.d.ts +11 -0
- package/dist/esm/math/ReedSolomon.d.ts.map +1 -0
- package/dist/esm/math/ReedSolomon.js +89 -0
- package/dist/esm/math/ReedSolomon.js.map +6 -0
- package/dist/esm/math/Verhoeff.d.ts +17 -0
- package/dist/esm/math/Verhoeff.d.ts.map +1 -0
- package/dist/esm/math/Verhoeff.js +44 -0
- package/dist/esm/math/Verhoeff.js.map +6 -0
- package/dist/esm/math/index.d.ts +8 -0
- package/dist/esm/math/index.d.ts.map +1 -0
- package/dist/esm/math/index.js +8 -0
- package/dist/esm/math/index.js.map +6 -0
- package/dist/esm/net/Channel.d.ts +24 -0
- package/dist/esm/net/Channel.d.ts.map +1 -0
- package/dist/esm/net/Channel.js +15 -0
- package/dist/esm/net/Channel.js.map +6 -0
- package/dist/esm/net/NetInterface.d.ts +24 -0
- package/dist/esm/net/NetInterface.d.ts.map +1 -0
- package/dist/esm/net/NetInterface.js +22 -0
- package/dist/esm/net/NetInterface.js.map +6 -0
- package/dist/esm/net/Network.d.ts +54 -0
- package/dist/esm/net/Network.d.ts.map +1 -0
- package/dist/esm/net/Network.js +30 -0
- package/dist/esm/net/Network.js.map +6 -0
- package/dist/esm/net/ServerAddress.d.ts +17 -0
- package/dist/esm/net/ServerAddress.d.ts.map +1 -0
- package/dist/esm/net/ServerAddress.js +12 -0
- package/dist/esm/net/ServerAddress.js.map +6 -0
- package/dist/esm/net/TransportInterface.d.ts +40 -0
- package/dist/esm/net/TransportInterface.d.ts.map +1 -0
- package/dist/esm/net/TransportInterface.js +35 -0
- package/dist/esm/net/TransportInterface.js.map +6 -0
- package/dist/esm/net/UdpChannel.d.ts +25 -0
- package/dist/esm/net/UdpChannel.d.ts.map +1 -0
- package/dist/esm/net/UdpChannel.js +10 -0
- package/dist/esm/net/UdpChannel.js.map +6 -0
- package/dist/esm/net/UdpInterface.d.ts +35 -0
- package/dist/esm/net/UdpInterface.d.ts.map +1 -0
- package/dist/esm/net/UdpInterface.js +62 -0
- package/dist/esm/net/UdpInterface.js.map +6 -0
- package/dist/esm/net/UdpMulticastServer.d.ts +30 -0
- package/dist/esm/net/UdpMulticastServer.d.ts.map +1 -0
- package/dist/esm/net/UdpMulticastServer.js +113 -0
- package/dist/esm/net/UdpMulticastServer.js.map +6 -0
- package/dist/esm/net/index.d.ts +17 -0
- package/dist/esm/net/index.d.ts.map +1 -0
- package/dist/esm/net/index.js +17 -0
- package/dist/esm/net/index.js.map +6 -0
- package/dist/esm/net/mock/MockNetwork.d.ts +19 -0
- package/dist/esm/net/mock/MockNetwork.d.ts.map +1 -0
- package/dist/esm/net/mock/MockNetwork.js +36 -0
- package/dist/esm/net/mock/MockNetwork.js.map +6 -0
- package/dist/esm/net/mock/MockUdpChannel.d.ts +27 -0
- package/dist/esm/net/mock/MockUdpChannel.d.ts.map +1 -0
- package/dist/esm/net/mock/MockUdpChannel.js +56 -0
- package/dist/esm/net/mock/MockUdpChannel.js.map +6 -0
- package/dist/esm/net/mock/NetworkSimulator.d.ts +18 -0
- package/dist/esm/net/mock/NetworkSimulator.d.ts.map +1 -0
- package/dist/esm/net/mock/NetworkSimulator.js +53 -0
- package/dist/esm/net/mock/NetworkSimulator.js.map +6 -0
- package/dist/esm/package.json +6 -0
- package/dist/esm/polyfills/disposable.d.ts +7 -0
- package/dist/esm/polyfills/disposable.d.ts.map +1 -0
- package/dist/esm/polyfills/disposable.js +18 -0
- package/dist/esm/polyfills/disposable.js.map +6 -0
- package/dist/esm/polyfills/index.d.ts +7 -0
- package/dist/esm/polyfills/index.d.ts.map +1 -0
- package/dist/esm/polyfills/index.js +7 -0
- package/dist/esm/polyfills/index.js.map +6 -0
- package/dist/esm/storage/Storage.d.ts +54 -0
- package/dist/esm/storage/Storage.d.ts.map +1 -0
- package/dist/esm/storage/Storage.js +18 -0
- package/dist/esm/storage/Storage.js.map +6 -0
- package/dist/esm/storage/StorageBackendMemory.d.ts +27 -0
- package/dist/esm/storage/StorageBackendMemory.d.ts.map +1 -0
- package/dist/esm/storage/StorageBackendMemory.js +111 -0
- package/dist/esm/storage/StorageBackendMemory.js.map +6 -0
- package/dist/esm/storage/StorageContext.d.ts +26 -0
- package/dist/esm/storage/StorageContext.d.ts.map +1 -0
- package/dist/esm/storage/StorageContext.js +97 -0
- package/dist/esm/storage/StorageContext.js.map +6 -0
- package/dist/esm/storage/StorageManager.d.ts +17 -0
- package/dist/esm/storage/StorageManager.d.ts.map +1 -0
- package/dist/esm/storage/StorageManager.js +39 -0
- package/dist/esm/storage/StorageManager.js.map +6 -0
- package/dist/esm/storage/StorageService.d.ts +35 -0
- package/dist/esm/storage/StorageService.d.ts.map +1 -0
- package/dist/esm/storage/StorageService.js +62 -0
- package/dist/esm/storage/StorageService.js.map +6 -0
- package/dist/esm/storage/StringifyTools.d.ts +16 -0
- package/dist/esm/storage/StringifyTools.d.ts.map +1 -0
- package/dist/esm/storage/StringifyTools.js +85 -0
- package/dist/esm/storage/StringifyTools.js.map +6 -0
- package/dist/esm/storage/index.d.ts +12 -0
- package/dist/esm/storage/index.d.ts.map +1 -0
- package/dist/esm/storage/index.js +12 -0
- package/dist/esm/storage/index.js.map +6 -0
- package/dist/esm/time/Time.d.ts +66 -0
- package/dist/esm/time/Time.d.ts.map +1 -0
- package/dist/esm/time/Time.js +117 -0
- package/dist/esm/time/Time.js.map +6 -0
- package/dist/esm/time/index.d.ts +7 -0
- package/dist/esm/time/index.d.ts.map +1 -0
- package/dist/esm/time/index.js +7 -0
- package/dist/esm/time/index.js.map +6 -0
- package/dist/esm/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/util/Array.d.ts +12 -0
- package/dist/esm/util/Array.d.ts.map +1 -0
- package/dist/esm/util/Array.js +8 -0
- package/dist/esm/util/Array.js.map +6 -0
- package/dist/esm/util/Bytes.d.ts +23 -0
- package/dist/esm/util/Bytes.d.ts.map +1 -0
- package/dist/esm/util/Bytes.js +75 -0
- package/dist/esm/util/Bytes.js.map +6 -0
- package/dist/esm/util/Cache.d.ts +33 -0
- package/dist/esm/util/Cache.d.ts.map +1 -0
- package/dist/esm/util/Cache.js +94 -0
- package/dist/esm/util/Cache.js.map +6 -0
- package/dist/esm/util/Construction.d.ts +182 -0
- package/dist/esm/util/Construction.d.ts.map +1 -0
- package/dist/esm/util/Construction.js +397 -0
- package/dist/esm/util/Construction.js.map +6 -0
- package/dist/esm/util/DataReadQueue.d.ts +17 -0
- package/dist/esm/util/DataReadQueue.d.ts.map +1 -0
- package/dist/esm/util/DataReadQueue.js +56 -0
- package/dist/esm/util/DataReadQueue.js.map +6 -0
- package/dist/esm/util/DataReader.d.ts +32 -0
- package/dist/esm/util/DataReader.d.ts.map +1 -0
- package/dist/esm/util/DataReader.js +81 -0
- package/dist/esm/util/DataReader.js.map +6 -0
- package/dist/esm/util/DataWriter.d.ts +26 -0
- package/dist/esm/util/DataWriter.d.ts.map +1 -0
- package/dist/esm/util/DataWriter.js +94 -0
- package/dist/esm/util/DataWriter.js.map +6 -0
- package/dist/esm/util/DeepCopy.d.ts +12 -0
- package/dist/esm/util/DeepCopy.d.ts.map +1 -0
- package/dist/esm/util/DeepCopy.js +38 -0
- package/dist/esm/util/DeepCopy.js.map +6 -0
- package/dist/esm/util/DeepEqual.d.ts +7 -0
- package/dist/esm/util/DeepEqual.d.ts.map +1 -0
- package/dist/esm/util/DeepEqual.js +35 -0
- package/dist/esm/util/DeepEqual.js.map +6 -0
- package/dist/esm/util/Error.d.ts +12 -0
- package/dist/esm/util/Error.d.ts.map +1 -0
- package/dist/esm/util/Error.js +21 -0
- package/dist/esm/util/Error.js.map +6 -0
- package/dist/esm/util/GeneratedClass.d.ts +62 -0
- package/dist/esm/util/GeneratedClass.d.ts.map +1 -0
- package/dist/esm/util/GeneratedClass.js +97 -0
- package/dist/esm/util/GeneratedClass.js.map +6 -0
- package/dist/esm/util/Introspection.d.ts +38 -0
- package/dist/esm/util/Introspection.d.ts.map +1 -0
- package/dist/esm/util/Introspection.js +65 -0
- package/dist/esm/util/Introspection.js.map +6 -0
- package/dist/esm/util/Ip.d.ts +8 -0
- package/dist/esm/util/Ip.d.ts.map +1 -0
- package/dist/esm/util/Ip.js +70 -0
- package/dist/esm/util/Ip.js.map +6 -0
- package/dist/esm/util/Lifecycle.d.ts +97 -0
- package/dist/esm/util/Lifecycle.d.ts.map +1 -0
- package/dist/esm/util/Lifecycle.js +69 -0
- package/dist/esm/util/Lifecycle.js.map +6 -0
- package/dist/esm/util/Multiplex.d.ts +14 -0
- package/dist/esm/util/Multiplex.d.ts.map +1 -0
- package/dist/esm/util/Multiplex.js +6 -0
- package/dist/esm/util/Multiplex.js.map +6 -0
- package/dist/esm/util/Mutex.d.ts +34 -0
- package/dist/esm/util/Mutex.d.ts.map +1 -0
- package/dist/esm/util/Mutex.js +85 -0
- package/dist/esm/util/Mutex.js.map +6 -0
- package/dist/esm/util/NamedHandler.d.ts +21 -0
- package/dist/esm/util/NamedHandler.d.ts.map +1 -0
- package/dist/esm/util/NamedHandler.js +34 -0
- package/dist/esm/util/NamedHandler.js.map +6 -0
- package/dist/esm/util/Number.d.ts +37 -0
- package/dist/esm/util/Number.d.ts.map +1 -0
- package/dist/esm/util/Number.js +77 -0
- package/dist/esm/util/Number.js.map +6 -0
- package/dist/esm/util/Observable.d.ts +197 -0
- package/dist/esm/util/Observable.d.ts.map +1 -0
- package/dist/esm/util/Observable.js +320 -0
- package/dist/esm/util/Observable.js.map +6 -0
- package/dist/esm/util/PromiseQueue.d.ts +25 -0
- package/dist/esm/util/PromiseQueue.d.ts.map +1 -0
- package/dist/esm/util/PromiseQueue.js +87 -0
- package/dist/esm/util/PromiseQueue.js.map +6 -0
- package/dist/esm/util/Promises.d.ts +68 -0
- package/dist/esm/util/Promises.d.ts.map +1 -0
- package/dist/esm/util/Promises.js +179 -0
- package/dist/esm/util/Promises.js.map +6 -0
- package/dist/esm/util/Set.d.ts +60 -0
- package/dist/esm/util/Set.d.ts.map +1 -0
- package/dist/esm/util/Set.js +125 -0
- package/dist/esm/util/Set.js.map +6 -0
- package/dist/esm/util/Singleton.d.ts +7 -0
- package/dist/esm/util/Singleton.d.ts.map +1 -0
- package/dist/esm/util/Singleton.js +16 -0
- package/dist/esm/util/Singleton.js.map +6 -0
- package/dist/esm/util/Stream.d.ts +16 -0
- package/dist/esm/util/Stream.d.ts.map +1 -0
- package/dist/esm/util/Stream.js +18 -0
- package/dist/esm/util/Stream.js.map +6 -0
- package/dist/esm/util/String.d.ts +39 -0
- package/dist/esm/util/String.d.ts.map +1 -0
- package/dist/esm/util/String.js +188 -0
- package/dist/esm/util/String.js.map +6 -0
- package/dist/esm/util/Type.d.ts +84 -0
- package/dist/esm/util/Type.d.ts.map +1 -0
- package/dist/esm/util/Type.js +32 -0
- package/dist/esm/util/Type.js.map +6 -0
- package/dist/esm/util/index.d.ts +30 -0
- package/dist/esm/util/index.d.ts.map +1 -0
- package/dist/esm/util/index.js +30 -0
- package/dist/esm/util/index.js.map +6 -0
- package/package.json +76 -0
- package/src/MatterError.ts +205 -0
- package/src/codec/Base64Codec.ts +137 -0
- package/src/codec/DerCodec.ts +300 -0
- package/src/codec/DerTypes.ts +145 -0
- package/src/codec/DnsCodec.ts +393 -0
- package/src/codec/index.ts +10 -0
- package/src/crypto/Crypto.ts +136 -0
- package/src/crypto/CryptoConstants.ts +19 -0
- package/src/crypto/Key.ts +600 -0
- package/src/crypto/Spake2p.ts +128 -0
- package/src/crypto/index.ts +10 -0
- package/src/environment/Environment.ts +215 -0
- package/src/environment/Environmental.ts +60 -0
- package/src/environment/RuntimeService.ts +301 -0
- package/src/environment/VariableService.ts +308 -0
- package/src/environment/index.ts +10 -0
- package/src/index.ts +17 -0
- package/src/log/Diagnostic.ts +454 -0
- package/src/log/DiagnosticSource.ts +30 -0
- package/src/log/LogFormat.ts +646 -0
- package/src/log/LogLevel.ts +36 -0
- package/src/log/Logger.ts +474 -0
- package/src/log/index.ts +11 -0
- package/src/math/ReedSolomon.ts +100 -0
- package/src/math/Verhoeff.ts +47 -0
- package/src/math/index.ts +8 -0
- package/src/net/Channel.ts +30 -0
- package/src/net/NetInterface.ts +33 -0
- package/src/net/Network.ts +70 -0
- package/src/net/ServerAddress.ts +22 -0
- package/src/net/TransportInterface.ts +56 -0
- package/src/net/UdpChannel.ts +30 -0
- package/src/net/UdpInterface.ts +75 -0
- package/src/net/UdpMulticastServer.ts +138 -0
- package/src/net/index.ts +17 -0
- package/src/net/mock/MockNetwork.ts +42 -0
- package/src/net/mock/MockUdpChannel.ts +69 -0
- package/src/net/mock/NetworkSimulator.ts +63 -0
- package/src/polyfills/disposable.ts +24 -0
- package/src/polyfills/index.ts +7 -0
- package/src/storage/Storage.ts +61 -0
- package/src/storage/StorageBackendMemory.ts +131 -0
- package/src/storage/StorageContext.ts +111 -0
- package/src/storage/StorageManager.ts +39 -0
- package/src/storage/StorageService.ts +73 -0
- package/src/storage/StringifyTools.ts +107 -0
- package/src/storage/index.ts +12 -0
- package/src/time/Time.ts +179 -0
- package/src/time/index.ts +7 -0
- package/src/tsconfig.json +10 -0
- package/src/util/Array.ts +15 -0
- package/src/util/Bytes.ts +73 -0
- package/src/util/Cache.ts +111 -0
- package/src/util/Construction.ts +717 -0
- package/src/util/DataReadQueue.ts +55 -0
- package/src/util/DataReader.ts +100 -0
- package/src/util/DataWriter.ts +109 -0
- package/src/util/DeepCopy.ts +47 -0
- package/src/util/DeepEqual.ts +49 -0
- package/src/util/Error.ts +32 -0
- package/src/util/GeneratedClass.ts +204 -0
- package/src/util/Introspection.ts +93 -0
- package/src/util/Ip.ts +71 -0
- package/src/util/Lifecycle.ts +135 -0
- package/src/util/Multiplex.ts +14 -0
- package/src/util/Mutex.ts +100 -0
- package/src/util/NamedHandler.ts +52 -0
- package/src/util/Number.ts +71 -0
- package/src/util/Observable.ts +550 -0
- package/src/util/PromiseQueue.ts +102 -0
- package/src/util/Promises.ts +278 -0
- package/src/util/Set.ts +189 -0
- package/src/util/Singleton.ts +13 -0
- package/src/util/Stream.ts +19 -0
- package/src/util/String.ts +248 -0
- package/src/util/Type.ts +145 -0
- package/src/util/index.ts +30 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Promise-based blocking queue.
|
|
3
|
+
*
|
|
4
|
+
* @license
|
|
5
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
6
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { MatterFlowError } from "../MatterError.js";
|
|
10
|
+
import { Time, Timer } from "../time/Time.js";
|
|
11
|
+
import { createPromise } from "./Promises.js";
|
|
12
|
+
import { EndOfStreamError, NoResponseTimeoutError, Stream } from "./Stream.js";
|
|
13
|
+
|
|
14
|
+
export class DataReadQueue<T> implements Stream<T> {
|
|
15
|
+
private readonly queue = new Array<T>();
|
|
16
|
+
private pendingRead?: { resolver: (data: T) => void; rejecter: (reason: any) => void; timeoutTimer?: Timer };
|
|
17
|
+
private closed = false;
|
|
18
|
+
|
|
19
|
+
async read(timeoutMs = 60_000): Promise<T> {
|
|
20
|
+
const { promise, resolver, rejecter } = createPromise<T>();
|
|
21
|
+
if (this.closed) throw new EndOfStreamError();
|
|
22
|
+
const data = this.queue.shift();
|
|
23
|
+
if (data !== undefined) {
|
|
24
|
+
return data;
|
|
25
|
+
}
|
|
26
|
+
if (this.pendingRead !== undefined) throw new MatterFlowError("Only one pending read is supported");
|
|
27
|
+
this.pendingRead = {
|
|
28
|
+
resolver,
|
|
29
|
+
rejecter,
|
|
30
|
+
timeoutTimer: Time.getTimer("Queue timeout", timeoutMs, () =>
|
|
31
|
+
rejecter(new NoResponseTimeoutError()),
|
|
32
|
+
).start(),
|
|
33
|
+
};
|
|
34
|
+
return promise;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async write(data: T) {
|
|
38
|
+
if (this.closed) throw new EndOfStreamError();
|
|
39
|
+
if (this.pendingRead !== undefined) {
|
|
40
|
+
this.pendingRead.timeoutTimer?.stop();
|
|
41
|
+
this.pendingRead.resolver(data);
|
|
42
|
+
this.pendingRead = undefined;
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
this.queue.push(data);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
close() {
|
|
49
|
+
if (this.closed) return;
|
|
50
|
+
this.closed = true;
|
|
51
|
+
if (this.pendingRead === undefined) return;
|
|
52
|
+
this.pendingRead.timeoutTimer?.stop();
|
|
53
|
+
this.pendingRead.rejecter(new EndOfStreamError());
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Bytes, Endian } from "./Bytes.js";
|
|
8
|
+
|
|
9
|
+
/** Reader that auto-increments its offset after each read. */
|
|
10
|
+
export class DataReader<E extends Endian> {
|
|
11
|
+
private readonly littleEndian: boolean;
|
|
12
|
+
private readonly dataView: DataView;
|
|
13
|
+
private offset = 0;
|
|
14
|
+
|
|
15
|
+
constructor(
|
|
16
|
+
private readonly buffer: Uint8Array,
|
|
17
|
+
endian: E,
|
|
18
|
+
) {
|
|
19
|
+
this.dataView = Bytes.dataViewOf(buffer);
|
|
20
|
+
this.littleEndian = endian === Endian.Little;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
readUInt8() {
|
|
24
|
+
return this.dataView.getUint8(this.getOffsetAndAdvance(1));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
readUInt16() {
|
|
28
|
+
return this.dataView.getUint16(this.getOffsetAndAdvance(2), this.littleEndian);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
readUInt32() {
|
|
32
|
+
return this.dataView.getUint32(this.getOffsetAndAdvance(4), this.littleEndian);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
readUInt64() {
|
|
36
|
+
return this.dataView.getBigUint64(this.getOffsetAndAdvance(8), this.littleEndian);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
readInt8() {
|
|
40
|
+
return this.dataView.getInt8(this.getOffsetAndAdvance(1));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
readInt16() {
|
|
44
|
+
return this.dataView.getInt16(this.getOffsetAndAdvance(2), this.littleEndian);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
readInt32() {
|
|
48
|
+
return this.dataView.getInt32(this.getOffsetAndAdvance(4), this.littleEndian);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
readInt64() {
|
|
52
|
+
return this.dataView.getBigInt64(this.getOffsetAndAdvance(8), this.littleEndian);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
readFloat() {
|
|
56
|
+
return this.dataView.getFloat32(this.getOffsetAndAdvance(4), this.littleEndian);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
readDouble() {
|
|
60
|
+
return this.dataView.getFloat64(this.getOffsetAndAdvance(8), this.littleEndian);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
readUtf8String(length: number) {
|
|
64
|
+
const offset = this.getOffsetAndAdvance(length);
|
|
65
|
+
return new TextDecoder().decode(this.buffer.subarray(offset, offset + length));
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
readByteArray(length: number) {
|
|
69
|
+
const offset = this.getOffsetAndAdvance(length);
|
|
70
|
+
return this.buffer.subarray(offset, offset + length);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
getRemainingBytesCount() {
|
|
74
|
+
return this.dataView.byteLength - this.offset;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
getRemainingBytes() {
|
|
78
|
+
return this.buffer.subarray(this.offset);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
getLength() {
|
|
82
|
+
return this.dataView.byteLength;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
setOffset(offset: number) {
|
|
86
|
+
if (offset > this.dataView.byteLength) {
|
|
87
|
+
throw new Error(`Offset ${offset} is out of bounds.`);
|
|
88
|
+
}
|
|
89
|
+
this.offset = offset;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
private getOffsetAndAdvance(size: number) {
|
|
93
|
+
const result = this.offset;
|
|
94
|
+
this.offset += size;
|
|
95
|
+
if (this.offset > this.dataView.byteLength) {
|
|
96
|
+
this.offset = this.dataView.byteLength;
|
|
97
|
+
}
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Endian } from "./Bytes.js";
|
|
8
|
+
import { toBigInt, toNumber } from "./Number.js";
|
|
9
|
+
|
|
10
|
+
/** Writer that auto-increments its offset after each write. */
|
|
11
|
+
// TODO: some research should be done to make sure this is most performant implementation.
|
|
12
|
+
export class DataWriter<E extends Endian> {
|
|
13
|
+
private readonly littleEndian: boolean;
|
|
14
|
+
private length = 0;
|
|
15
|
+
private readonly chunks = new Array<Uint8Array>();
|
|
16
|
+
|
|
17
|
+
constructor(endian: E) {
|
|
18
|
+
this.littleEndian = endian === Endian.Little;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
writeUInt8(value: number | bigint) {
|
|
22
|
+
this.chunks.push(new Uint8Array([toNumber(value)]));
|
|
23
|
+
this.length += 1;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
writeUInt16(value: number | bigint) {
|
|
27
|
+
const chunk = new Uint8Array(2);
|
|
28
|
+
new DataView(chunk.buffer, 0, 2).setUint16(0, toNumber(value), this.littleEndian);
|
|
29
|
+
this.chunks.push(chunk);
|
|
30
|
+
this.length += 2;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
writeUInt32(value: number | bigint) {
|
|
34
|
+
const chunk = new Uint8Array(4);
|
|
35
|
+
new DataView(chunk.buffer, 0, 4).setUint32(0, toNumber(value), this.littleEndian);
|
|
36
|
+
this.chunks.push(chunk);
|
|
37
|
+
this.length += 4;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
writeUInt64(value: number | bigint) {
|
|
41
|
+
const chunk = new Uint8Array(8);
|
|
42
|
+
new DataView(chunk.buffer, 0, 8).setBigUint64(0, toBigInt(value), this.littleEndian);
|
|
43
|
+
this.chunks.push(chunk);
|
|
44
|
+
this.length += 8;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
writeInt8(value: number | bigint) {
|
|
48
|
+
const chunk = new Uint8Array(1);
|
|
49
|
+
new DataView(chunk.buffer, 0, 1).setInt8(0, toNumber(value));
|
|
50
|
+
this.chunks.push(chunk);
|
|
51
|
+
this.length += 1;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
writeInt16(value: number | bigint) {
|
|
55
|
+
const chunk = new Uint8Array(2);
|
|
56
|
+
new DataView(chunk.buffer, 0, 2).setInt16(0, toNumber(value), this.littleEndian);
|
|
57
|
+
this.chunks.push(chunk);
|
|
58
|
+
this.length += 2;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
writeInt32(value: number | bigint) {
|
|
62
|
+
const chunk = new Uint8Array(4);
|
|
63
|
+
new DataView(chunk.buffer, 0, 4).setInt32(0, toNumber(value), this.littleEndian);
|
|
64
|
+
this.chunks.push(chunk);
|
|
65
|
+
this.length += 4;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
writeInt64(value: number | bigint) {
|
|
69
|
+
const chunk = new Uint8Array(8);
|
|
70
|
+
new DataView(chunk.buffer, 0, 8).setBigInt64(0, toBigInt(value), this.littleEndian);
|
|
71
|
+
this.chunks.push(chunk);
|
|
72
|
+
this.length += 8;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
writeFloat(value: number) {
|
|
76
|
+
const chunk = new Uint8Array(4);
|
|
77
|
+
new DataView(chunk.buffer, 0, 4).setFloat32(0, value, this.littleEndian);
|
|
78
|
+
this.chunks.push(chunk);
|
|
79
|
+
this.length += 4;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
writeDouble(value: number) {
|
|
83
|
+
const chunk = new Uint8Array(8);
|
|
84
|
+
new DataView(chunk.buffer, 0, 8).setFloat64(0, value, this.littleEndian);
|
|
85
|
+
this.chunks.push(chunk);
|
|
86
|
+
this.length += 8;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
writeByteArray(value: Uint8Array) {
|
|
90
|
+
this.chunks.push(value);
|
|
91
|
+
this.length += value.byteLength;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
toByteArray() {
|
|
95
|
+
if (this.chunks.length === 0) return new Uint8Array(0);
|
|
96
|
+
if (this.chunks.length === 1) return this.chunks[0];
|
|
97
|
+
|
|
98
|
+
const result = new Uint8Array(this.length);
|
|
99
|
+
let offset = 0;
|
|
100
|
+
this.chunks.forEach(chunk => {
|
|
101
|
+
result.set(chunk, offset);
|
|
102
|
+
offset += chunk.byteLength;
|
|
103
|
+
});
|
|
104
|
+
this.chunks.length = 0;
|
|
105
|
+
this.chunks.push(result);
|
|
106
|
+
|
|
107
|
+
return result;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Create a deep copy of a data structure.
|
|
9
|
+
*
|
|
10
|
+
* Only copies enumerable properties. Handles typed arrays and graphs.
|
|
11
|
+
*/
|
|
12
|
+
export function deepCopy<T>(value: T): T {
|
|
13
|
+
let clones: undefined | Map<unknown, unknown>;
|
|
14
|
+
|
|
15
|
+
function copy(value: unknown) {
|
|
16
|
+
if (typeof value === "object") {
|
|
17
|
+
if (value === null) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
let clone = clones?.get(value);
|
|
22
|
+
if (clone) {
|
|
23
|
+
return clone;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (Array.isArray(value)) {
|
|
27
|
+
clone = value.map(copy);
|
|
28
|
+
} else if (ArrayBuffer.isView(value)) {
|
|
29
|
+
const ViewType = value.constructor as new (buffer: ArrayBuffer) => unknown;
|
|
30
|
+
clone = new ViewType(value.buffer.slice(value.byteOffset, value.byteOffset + value.byteLength));
|
|
31
|
+
} else {
|
|
32
|
+
clone = Object.fromEntries(Object.entries(value).map(([k, v]) => [k, copy(v)]));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (!clones) {
|
|
36
|
+
clones = new Map();
|
|
37
|
+
}
|
|
38
|
+
clones.set(value, clone);
|
|
39
|
+
|
|
40
|
+
return clone;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return copy(value) as T;
|
|
47
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// TODO - implement more efficient specialization for Array and ArrayBuffer
|
|
8
|
+
// TODO - currently will hang on self-referential data structures
|
|
9
|
+
export function isDeepEqual(a: any, b: any) {
|
|
10
|
+
if (
|
|
11
|
+
a === null ||
|
|
12
|
+
a === undefined ||
|
|
13
|
+
b === null ||
|
|
14
|
+
b === undefined ||
|
|
15
|
+
typeof a !== typeof b ||
|
|
16
|
+
(typeof a !== "object" && typeof b !== "object")
|
|
17
|
+
) {
|
|
18
|
+
return a === b;
|
|
19
|
+
}
|
|
20
|
+
// Create arrays of property names
|
|
21
|
+
const aProps = Object.getOwnPropertyNames(a);
|
|
22
|
+
const bProps = Object.getOwnPropertyNames(b);
|
|
23
|
+
|
|
24
|
+
// If number of properties is different, objects are not equivalent
|
|
25
|
+
if (aProps.length !== bProps.length) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
for (let i = 0; i < aProps.length; i++) {
|
|
30
|
+
const propName = aProps[i];
|
|
31
|
+
|
|
32
|
+
if (typeof a[propName] !== typeof b[propName]) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
if (typeof a[propName] === "object") {
|
|
36
|
+
if (!isDeepEqual(a[propName], b[propName])) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
} else {
|
|
40
|
+
// If values of same property are not equal, objects are not equivalent
|
|
41
|
+
if (a[propName] !== b[propName]) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// If we made it this far, objects are considered equal
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { Constructable } from "./Construction.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Ensure that a cause is an error object.
|
|
11
|
+
*
|
|
12
|
+
* We consider anything with a "message" property to be a reasonable error object.
|
|
13
|
+
*/
|
|
14
|
+
export function errorOf(cause: unknown): Error {
|
|
15
|
+
// If the cause is an Constructable, use its construction error
|
|
16
|
+
if ((cause as Constructable)?.construction?.error) {
|
|
17
|
+
cause = (cause as Constructable)?.construction.error;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// If the cause is indeterminate we fall back to the helpful "Unknown error"
|
|
21
|
+
if (cause === undefined || cause === null) {
|
|
22
|
+
return Error("Unknown error");
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// If the cause has a "message" field, treat as an Error
|
|
26
|
+
if ((cause as Error).message !== undefined) {
|
|
27
|
+
return cause as Error;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Otherwise create a new error using the original cause as the message
|
|
31
|
+
return new Error(cause.toString());
|
|
32
|
+
}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { InternalError } from "../MatterError.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Helper function for class generation.
|
|
11
|
+
*
|
|
12
|
+
* This factory does not offer TypeScript types for the resulting class. You must cast separately.
|
|
13
|
+
*/
|
|
14
|
+
export function GeneratedClass(options: GeneratedClass.Options) {
|
|
15
|
+
const { base, name, args, mixins } = options;
|
|
16
|
+
|
|
17
|
+
// Options + any additional mixins defines complete functionality
|
|
18
|
+
const allMixins = mixins ? [...mixins, options] : [options];
|
|
19
|
+
|
|
20
|
+
// Create the constructor function
|
|
21
|
+
const type = createConstructor({
|
|
22
|
+
name: name ?? (base ? `${base.name}$` : "GeneratedClass"),
|
|
23
|
+
base,
|
|
24
|
+
args,
|
|
25
|
+
mixins: allMixins,
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
// Install properties
|
|
29
|
+
for (const mixin of allMixins) {
|
|
30
|
+
applyMixin(type, mixin);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return type;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function applyMixin(
|
|
37
|
+
constructor: new (...args: any) => any,
|
|
38
|
+
{ staticProperties, staticDescriptors, instanceDescriptors }: GeneratedClass.Mixin,
|
|
39
|
+
) {
|
|
40
|
+
if (staticProperties) {
|
|
41
|
+
Object.assign(constructor, staticProperties);
|
|
42
|
+
}
|
|
43
|
+
if (staticDescriptors) {
|
|
44
|
+
Object.defineProperties(constructor, staticDescriptors);
|
|
45
|
+
}
|
|
46
|
+
if (instanceDescriptors) {
|
|
47
|
+
Object.defineProperties(constructor.prototype, instanceDescriptors);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export namespace GeneratedClass {
|
|
52
|
+
/**
|
|
53
|
+
* These fields control class behavior.
|
|
54
|
+
*/
|
|
55
|
+
export interface Mixin {
|
|
56
|
+
/**
|
|
57
|
+
* A function that performs initialization after instantiation. "this" will be the object and arguments are the
|
|
58
|
+
* arguments to the constructor.
|
|
59
|
+
*/
|
|
60
|
+
initialize?: (...args: any[]) => void;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Instance properties.
|
|
64
|
+
*/
|
|
65
|
+
instanceProperties?: object;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Instance properties defined using descriptors.
|
|
69
|
+
*/
|
|
70
|
+
instanceDescriptors?: PropertyDescriptorMap;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Static properties.
|
|
74
|
+
*/
|
|
75
|
+
staticProperties?: object;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Static properties defined using descriptors.
|
|
79
|
+
*/
|
|
80
|
+
staticDescriptors?: PropertyDescriptorMap;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Input to {@link GeneratedClass}.
|
|
85
|
+
*/
|
|
86
|
+
export interface Options extends Mixin {
|
|
87
|
+
/**
|
|
88
|
+
* The name of the class.
|
|
89
|
+
*/
|
|
90
|
+
name?: string;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* The base class, if any.
|
|
94
|
+
*/
|
|
95
|
+
base?: new (...args: any) => any;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* A preprocessor for arguments. Derivatives may use this to transform arguments prior to call to super() and
|
|
99
|
+
* initialize().
|
|
100
|
+
*/
|
|
101
|
+
args?: (...args: any[]) => any[];
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Options is a default mixin but you can provide others here.
|
|
105
|
+
*/
|
|
106
|
+
mixins?: Mixin[];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
interface ConstructorOptions {
|
|
111
|
+
name: string;
|
|
112
|
+
mixins: GeneratedClass.Mixin[];
|
|
113
|
+
base?: new (...args: any[]) => any;
|
|
114
|
+
args?: (...args: any[]) => any[];
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function createConstructor({ name, base, args, mixins }: ConstructorOptions) {
|
|
118
|
+
// CJS Transpilation renames this symbol so bring it local to access
|
|
119
|
+
const _InternalError = InternalError;
|
|
120
|
+
_InternalError;
|
|
121
|
+
|
|
122
|
+
// Have to use eval if we don't want every class to be called "GeneratedClass" in the debugger but we can ensure
|
|
123
|
+
// this won't be abused.
|
|
124
|
+
//
|
|
125
|
+
// "name" is the only input to this function that appears textually in the eval. We limit it to letters, numbers,
|
|
126
|
+
// "$" and "_".
|
|
127
|
+
if (!name.match(/^(?:\p{L}|[0-9$_])+$/u)) {
|
|
128
|
+
throw new InternalError("Refusing to generate class with untrustworthy name");
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
let ext;
|
|
132
|
+
if (base) {
|
|
133
|
+
ext = `extends base `;
|
|
134
|
+
} else {
|
|
135
|
+
ext = "";
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const code = [`class ${name} ${ext}{`];
|
|
139
|
+
|
|
140
|
+
// Consolidate mixins to a single initialize and instanceProperties
|
|
141
|
+
let initialize: undefined | GeneratedClass.Options["initialize"];
|
|
142
|
+
let instanceProperties: undefined | GeneratedClass.Options["instanceProperties"];
|
|
143
|
+
|
|
144
|
+
for (const mixin of mixins) {
|
|
145
|
+
const mixinInitialize = mixin.initialize;
|
|
146
|
+
|
|
147
|
+
// Add initializer
|
|
148
|
+
if (mixinInitialize) {
|
|
149
|
+
if (initialize) {
|
|
150
|
+
const baseInitialize = initialize;
|
|
151
|
+
initialize = function (this: any, ...args) {
|
|
152
|
+
baseInitialize.call(this, ...args);
|
|
153
|
+
mixinInitialize.call(this, ...args);
|
|
154
|
+
};
|
|
155
|
+
} else {
|
|
156
|
+
initialize = mixinInitialize;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Add instance properties
|
|
161
|
+
if (mixin.instanceProperties) {
|
|
162
|
+
if (instanceProperties) {
|
|
163
|
+
instanceProperties = {
|
|
164
|
+
...instanceProperties,
|
|
165
|
+
...mixin.instanceProperties,
|
|
166
|
+
};
|
|
167
|
+
} else {
|
|
168
|
+
instanceProperties = mixin.instanceProperties;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// If we need a constructor, add it
|
|
174
|
+
if (args || initialize || instanceProperties) {
|
|
175
|
+
code.push("constructor() {");
|
|
176
|
+
|
|
177
|
+
let argsName;
|
|
178
|
+
if (args) {
|
|
179
|
+
argsName = "a";
|
|
180
|
+
code.push(`const a = args(...arguments)`);
|
|
181
|
+
} else {
|
|
182
|
+
argsName = "arguments";
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
if (base) {
|
|
186
|
+
code.push(`super(...${argsName})`);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
if (instanceProperties) {
|
|
190
|
+
// Do not use Object.assign because we want to support accessors
|
|
191
|
+
code.push(`for (const k in instanceProperties) this[k] = instanceProperties[k]`);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
if (initialize) {
|
|
195
|
+
code.push(`initialize.apply(this, ${argsName})`);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
code.push("}");
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
code.push("}", name);
|
|
202
|
+
|
|
203
|
+
return eval(code.join("\n")) as new (...args: any) => any;
|
|
204
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Utilities for object introspection.
|
|
9
|
+
*/
|
|
10
|
+
export namespace Introspection {
|
|
11
|
+
/**
|
|
12
|
+
* Obtain a {@link PropertyDescriptor} from any level in {@link subject}'s
|
|
13
|
+
* prototype chain.
|
|
14
|
+
*/
|
|
15
|
+
export function propertyDescriptorOf(subject: object, name: string): PropertyDescriptor | undefined {
|
|
16
|
+
const descriptor = Reflect.getOwnPropertyDescriptor(subject, name);
|
|
17
|
+
if (descriptor) {
|
|
18
|
+
return descriptor;
|
|
19
|
+
}
|
|
20
|
+
const prototype = Reflect.getPrototypeOf(subject);
|
|
21
|
+
if (prototype !== null) {
|
|
22
|
+
return Introspection.propertyDescriptorOf(prototype, name);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Obtain {@link PropertyDescriptor}s from properties in any level of
|
|
28
|
+
* {@link subject}'s prototype chain.
|
|
29
|
+
*/
|
|
30
|
+
export function propertyDescriptorsOf(subject: object) {
|
|
31
|
+
const descriptors = {} as Record<string, PropertyDescriptor>;
|
|
32
|
+
|
|
33
|
+
function addDescriptors(subject: object) {
|
|
34
|
+
const localDescriptors = Object.getOwnPropertyDescriptors(subject);
|
|
35
|
+
|
|
36
|
+
for (const name in localDescriptors) {
|
|
37
|
+
if (descriptors[name] === undefined) {
|
|
38
|
+
descriptors[name] = localDescriptors[name];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const prototype = Reflect.getPrototypeOf(subject);
|
|
43
|
+
if (prototype !== null) {
|
|
44
|
+
addDescriptors(prototype);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
addDescriptors(subject);
|
|
49
|
+
|
|
50
|
+
return descriptors;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Determine whether a single property of {@link subject} is readable
|
|
55
|
+
* and/or writable.
|
|
56
|
+
*/
|
|
57
|
+
export function propertyAccessibilityOf(subject: object, name: string) {
|
|
58
|
+
const pd = propertyDescriptorOf(subject, name);
|
|
59
|
+
if (pd) {
|
|
60
|
+
return propertyDescriptorToAccessibility(pd);
|
|
61
|
+
}
|
|
62
|
+
return { readable: true, writable: true };
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Obtain properties from {@link subject} and whether they're readable
|
|
67
|
+
* and/or writable.
|
|
68
|
+
*/
|
|
69
|
+
export function objectAccessibilityOf(subject: object) {
|
|
70
|
+
const accessibilty = {} as ObjectAccessibilty;
|
|
71
|
+
|
|
72
|
+
const propertyDescriptors = Introspection.propertyDescriptorsOf(subject);
|
|
73
|
+
for (const name in propertyDescriptors) {
|
|
74
|
+
accessibilty[name] = propertyDescriptorToAccessibility(propertyDescriptors[name]);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return accessibilty;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export function propertyDescriptorToAccessibility(pd: PropertyDescriptor): PropertyAccessibility {
|
|
81
|
+
return {
|
|
82
|
+
readable: !!(pd.set && !pd.get),
|
|
83
|
+
writable: !!(pd.set || pd.writable),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export interface PropertyAccessibility {
|
|
88
|
+
readable: boolean;
|
|
89
|
+
writable: boolean;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export interface ObjectAccessibilty extends Record<string, PropertyAccessibility> {}
|
|
93
|
+
}
|