@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,717 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Logger } from "../log/Logger.js";
|
|
8
|
+
import { ImplementationError } from "../MatterError.js";
|
|
9
|
+
import { errorOf } from "./Error.js";
|
|
10
|
+
import { CrashedDependenciesError, CrashedDependencyError, Lifecycle } from "./Lifecycle.js";
|
|
11
|
+
import { Observable } from "./Observable.js";
|
|
12
|
+
import { MaybePromise } from "./Promises.js";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Create an instance of a class implementing the {@link Constructable} pattern.
|
|
16
|
+
*/
|
|
17
|
+
export async function asyncNew<const A extends any[], const C extends new (...args: A) => Constructable<any>>(
|
|
18
|
+
constructor: C,
|
|
19
|
+
...args: A
|
|
20
|
+
): Promise<InstanceType<C>> {
|
|
21
|
+
const subject = new constructor(...args);
|
|
22
|
+
|
|
23
|
+
// If construction of the subject is not initiated you cannot use asyncNew because something needs to invoke
|
|
24
|
+
// Construction#start.
|
|
25
|
+
if (subject.construction.status === Lifecycle.Status.Inactive) {
|
|
26
|
+
throw new ImplementationError(
|
|
27
|
+
`You cannot use asyncNew on ${constructor.name} because its construction is controlled by another component`,
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
await subject.construction.ready;
|
|
32
|
+
|
|
33
|
+
return subject as InstanceType<C>;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* A pattern for asynchronous object initialization and cleanup of a target object, called the "subject".
|
|
38
|
+
*
|
|
39
|
+
* Construction happens in the initializer parameter of {@link Construction} or via {@link Construction.construct} on
|
|
40
|
+
* the subject. You invoke in your constructor and place in a property called "construction".
|
|
41
|
+
*
|
|
42
|
+
* Destruciton is optional and happens in the destructor parameter of {@link Construction#close} or via
|
|
43
|
+
* {@link Construction.destruct} on the subject. Typically you invoke in a "close" method of the subject.
|
|
44
|
+
*
|
|
45
|
+
* If construction or destruction is not asynchronous (does not return a Promise) then they complete synchronously,
|
|
46
|
+
* including throwing exceptions.
|
|
47
|
+
*
|
|
48
|
+
* To ensure an instance is initialized prior to use you may await construction, so e.g. `await new
|
|
49
|
+
* MyConstructable().construction`. {@link asyncNew} is shorthand for this. The creation code path can instead await
|
|
50
|
+
* {@link Construction.ready} to ensure handling of the root cause.
|
|
51
|
+
*
|
|
52
|
+
* Public APIs should provide a static async create() that performs an asyncNew(). The class will then adhere to
|
|
53
|
+
* Matter.js conventions and library users can ignore the complexities associated with async creation.
|
|
54
|
+
*/
|
|
55
|
+
export interface Constructable<T = object> {
|
|
56
|
+
readonly construction: Construction<T>;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export module Constructable {
|
|
60
|
+
/**
|
|
61
|
+
* An {@link Constructable} that supports deferred construction.
|
|
62
|
+
*
|
|
63
|
+
* This supports use cases where initialization initiates separately from construction and/or reinitialization is
|
|
64
|
+
* possible.
|
|
65
|
+
*/
|
|
66
|
+
export interface Deferred<T, A extends unknown[]> extends Constructable<T> {
|
|
67
|
+
/**
|
|
68
|
+
* Perform deferred construction.
|
|
69
|
+
*/
|
|
70
|
+
[Construction.construct](...args: A): MaybePromise<void>;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* An object that supports destruction.
|
|
75
|
+
*/
|
|
76
|
+
export interface Destructable {
|
|
77
|
+
/**
|
|
78
|
+
* Perform destruction. This is used invoked by {@link Constructable#close} after transitioning to
|
|
79
|
+
* {@link Lifecycle.Status.Destroying} but before transitioning to {@link Lifecycle.Status.Destroyed}.
|
|
80
|
+
*
|
|
81
|
+
* This is separate from {@link Symbol.dispose}/{@link Symbol.asyncDispose} so those can invoke
|
|
82
|
+
* {@link Constructable#close}.
|
|
83
|
+
*/
|
|
84
|
+
[Construction.destruct](): MaybePromise<void>;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* The promise implementing by an {@link Constructable#construction}.
|
|
90
|
+
*/
|
|
91
|
+
export interface Construction<T> extends Promise<T> {
|
|
92
|
+
/**
|
|
93
|
+
* If construction ends with an error, the error is saved here.
|
|
94
|
+
*/
|
|
95
|
+
readonly error?: Error;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Status of the constructed object.
|
|
99
|
+
*/
|
|
100
|
+
readonly status: Lifecycle.Status;
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Notifications of state change. Normally you just await construction but this offers more granular events and
|
|
104
|
+
* repeating events.
|
|
105
|
+
*/
|
|
106
|
+
readonly change: Observable<[status: Lifecycle.Status, subject: T]>;
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* True iff the primary error has been or will be reported.
|
|
110
|
+
*/
|
|
111
|
+
readonly isErrorHandled: boolean;
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Resolves when construction completes; rejects if construction crashes.
|
|
115
|
+
*
|
|
116
|
+
* Behaves identically to {@link Construction} but always throws the primary cause rather than
|
|
117
|
+
* {@link CrashedDependencyError}.
|
|
118
|
+
*
|
|
119
|
+
* Handling errors on this promise will prevent other handlers from seeing the primary cause.
|
|
120
|
+
*/
|
|
121
|
+
readonly ready: Promise<T>;
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Resolves when destruction completes; rejects if the component crashes.
|
|
125
|
+
*
|
|
126
|
+
* Handling errors on this promise will prevent other handlers from seeing the primary cause.
|
|
127
|
+
*/
|
|
128
|
+
readonly closed: Promise<T>;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* If you omit the initializer parameter to {@link Construction} execution is deferred until you invoke this
|
|
132
|
+
* method to initiate construction via the {@link Constructable.Deferred} interface.
|
|
133
|
+
*
|
|
134
|
+
* Unlike the initializer, errors are always reported via the PromiseLike interface even if the constructable throws
|
|
135
|
+
* an error synchronously.
|
|
136
|
+
*/
|
|
137
|
+
start<const T, const A extends unknown[], const This extends Construction<Constructable.Deferred<T, A>>>(
|
|
138
|
+
this: This,
|
|
139
|
+
...args: A
|
|
140
|
+
): void;
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Invoke destruction logic then move to destroyed status.
|
|
144
|
+
*
|
|
145
|
+
* Typically you invoke this in the subject's "close" method.
|
|
146
|
+
*
|
|
147
|
+
* Use of this function is optional. It provides these benefits:
|
|
148
|
+
*
|
|
149
|
+
* - Ensures the subject is fully initialized before closing.
|
|
150
|
+
*
|
|
151
|
+
* - Handles and logs errors, ensuring close() always completes successfully.
|
|
152
|
+
*
|
|
153
|
+
* - Makes destruction observable via {@link change} and {@link closed}.
|
|
154
|
+
*/
|
|
155
|
+
close(destructor?: () => MaybePromise): MaybePromise;
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Throws an error if construction is ongoing or incomplete.
|
|
159
|
+
*/
|
|
160
|
+
assert(description?: string): void;
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Asserts construction is complete and that an object is defined.
|
|
164
|
+
*/
|
|
165
|
+
assert<T>(description: string, dependency: T | undefined): T;
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Manually force a specific {@link status}.
|
|
169
|
+
*
|
|
170
|
+
* This offers flexibility in component lifecycle management including resetting component to inactive state and
|
|
171
|
+
* broadcasting lifecycle changes. On reset listeners are also reset and must be reinstalled.
|
|
172
|
+
*
|
|
173
|
+
* This method fails if initialization is ongoing; await completion first.
|
|
174
|
+
*/
|
|
175
|
+
setStatus(status: Lifecycle.Status): void;
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Move subject to "crashed" state, optionally setting the cause.
|
|
179
|
+
*
|
|
180
|
+
* This happens automatically if there is an error during construction. It is also useful for post-construction
|
|
181
|
+
* errors to convey crashed state to components such as the environmental runtime service.
|
|
182
|
+
*/
|
|
183
|
+
crash(cause?: any): void;
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Invoke a method after construction completes successfully.
|
|
187
|
+
*
|
|
188
|
+
* Errors thrown by this callback are logged but otherwise ignored.
|
|
189
|
+
*/
|
|
190
|
+
onSuccess(actor: () => MaybePromise<void>): void;
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Invoke a method after construction completes unsuccessfully.
|
|
194
|
+
*
|
|
195
|
+
* If you register an onError handler then the default error handler will not log the error.
|
|
196
|
+
*
|
|
197
|
+
* Errors thrown by this callback are logged but otherwise ignored.
|
|
198
|
+
*/
|
|
199
|
+
onError(actor: (error: Error) => MaybePromise<void>): void;
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Invoke a method after construction completes successfully or onsuccessfully.
|
|
203
|
+
*
|
|
204
|
+
* Errors thrown by this callback are logged but otherwise ignored.
|
|
205
|
+
*/
|
|
206
|
+
onCompletion(actor: () => void): void;
|
|
207
|
+
|
|
208
|
+
toString(): string;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Create an {@link Constructable} and optionally begin async construction.
|
|
213
|
+
*/
|
|
214
|
+
export function Construction<const T extends Constructable>(
|
|
215
|
+
subject: T,
|
|
216
|
+
initializer?: () => MaybePromise,
|
|
217
|
+
): Construction<T> {
|
|
218
|
+
if (!initializer) {
|
|
219
|
+
assertDeferred(subject);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// The promise returned by the initializer if initialization is async
|
|
223
|
+
let initializerPromise: MaybePromise<void>;
|
|
224
|
+
|
|
225
|
+
// The promise we use to implement Construction.then() and Construction.ready
|
|
226
|
+
let awaiterPromise: undefined | Promise<T>;
|
|
227
|
+
let awaiterResolve: undefined | ((subject: T) => void);
|
|
228
|
+
let awaiterReject: undefined | ((error: any) => void);
|
|
229
|
+
|
|
230
|
+
// The promise we use to implement Constructable.close
|
|
231
|
+
let closedPromise: undefined | Promise<void>;
|
|
232
|
+
let closedResolve: undefined | (() => void);
|
|
233
|
+
let closedReject: undefined | ((error: any) => void);
|
|
234
|
+
|
|
235
|
+
let error: undefined | Error;
|
|
236
|
+
let primaryCauseHandled = false;
|
|
237
|
+
let status = Lifecycle.Status.Inactive;
|
|
238
|
+
let change: Observable<[status: Lifecycle.Status, subject: T]> | undefined;
|
|
239
|
+
|
|
240
|
+
const self: Construction<any> = {
|
|
241
|
+
[Symbol.toStringTag]: "AsyncConstruction",
|
|
242
|
+
|
|
243
|
+
get error() {
|
|
244
|
+
return error;
|
|
245
|
+
},
|
|
246
|
+
|
|
247
|
+
get status() {
|
|
248
|
+
return status;
|
|
249
|
+
},
|
|
250
|
+
|
|
251
|
+
get change() {
|
|
252
|
+
if (change === undefined) {
|
|
253
|
+
change = Observable();
|
|
254
|
+
}
|
|
255
|
+
return change;
|
|
256
|
+
},
|
|
257
|
+
|
|
258
|
+
get isErrorHandled() {
|
|
259
|
+
return primaryCauseHandled;
|
|
260
|
+
},
|
|
261
|
+
|
|
262
|
+
start<const T, const A extends [], const This extends Construction<Constructable.Deferred<T, A>>>(
|
|
263
|
+
this: This,
|
|
264
|
+
...args: A
|
|
265
|
+
) {
|
|
266
|
+
if (status !== Lifecycle.Status.Inactive) {
|
|
267
|
+
throw new ImplementationError(`Cannot initialize ${subject} because it is already active`);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
assertDeferred(subject);
|
|
271
|
+
|
|
272
|
+
status = Lifecycle.Status.Initializing;
|
|
273
|
+
|
|
274
|
+
try {
|
|
275
|
+
const initializeDeferred = () => subject[Construction.construct](...args);
|
|
276
|
+
invokeInitializer(initializeDeferred);
|
|
277
|
+
} catch (e) {
|
|
278
|
+
rejected(e);
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
},
|
|
282
|
+
|
|
283
|
+
assert(description?: string, dependency?: any) {
|
|
284
|
+
Lifecycle.assertActive(status, description ?? subject.constructor.name);
|
|
285
|
+
|
|
286
|
+
if (arguments.length < 2) {
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
try {
|
|
291
|
+
if (dependency === undefined) {
|
|
292
|
+
throw new ImplementationError(`Property is undefined`);
|
|
293
|
+
}
|
|
294
|
+
} catch (e) {
|
|
295
|
+
let error;
|
|
296
|
+
if (e instanceof Error) {
|
|
297
|
+
error = e;
|
|
298
|
+
} else {
|
|
299
|
+
error = new ImplementationError(e?.toString() ?? "(unknown error)");
|
|
300
|
+
}
|
|
301
|
+
error.message = `Cannot access ${description}: ${error.message}`;
|
|
302
|
+
throw error;
|
|
303
|
+
}
|
|
304
|
+
return dependency;
|
|
305
|
+
},
|
|
306
|
+
|
|
307
|
+
then<TResult1 = T, TResult2 = never>(
|
|
308
|
+
onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,
|
|
309
|
+
onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,
|
|
310
|
+
): Promise<TResult1 | TResult2> {
|
|
311
|
+
const handleRejection = onrejected ? () => onrejected?.(crashedError()) as TResult2 : undefined;
|
|
312
|
+
if (status === Lifecycle.Status.Inactive || status === Lifecycle.Status.Initializing) {
|
|
313
|
+
if (!awaiterPromise) {
|
|
314
|
+
awaiterPromise = new Promise<T>((resolve, reject) => {
|
|
315
|
+
awaiterResolve = resolve;
|
|
316
|
+
awaiterReject = reject;
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
return awaiterPromise.then(onfulfilled, handleRejection);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
const promise = error ? Promise.reject(crashedError()) : Promise.resolve(subject);
|
|
324
|
+
return promise.then(onfulfilled, handleRejection);
|
|
325
|
+
},
|
|
326
|
+
|
|
327
|
+
catch<TResult = never>(
|
|
328
|
+
onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null,
|
|
329
|
+
): Promise<T | TResult> {
|
|
330
|
+
return this.then(undefined, onrejected);
|
|
331
|
+
},
|
|
332
|
+
|
|
333
|
+
onSuccess(actor: () => MaybePromise<void>) {
|
|
334
|
+
const onSuccess = () => {
|
|
335
|
+
const errorHandler = createErrorHandler("onSuccess");
|
|
336
|
+
|
|
337
|
+
try {
|
|
338
|
+
const result = actor();
|
|
339
|
+
if (MaybePromise.is(result)) {
|
|
340
|
+
return Promise.resolve(result).catch(errorHandler);
|
|
341
|
+
}
|
|
342
|
+
} catch (e) {
|
|
343
|
+
errorHandler(e);
|
|
344
|
+
}
|
|
345
|
+
};
|
|
346
|
+
|
|
347
|
+
this.then(onSuccess).catch(e => {
|
|
348
|
+
// Failure should result in a CrashedDependencyError which simply means initialization failed. The
|
|
349
|
+
// actual error is logged so we can safely ignore. If the error was not a CrashedDependencyError then
|
|
350
|
+
// it is unexpected. We rethrow which will result in the process exiting with an unexpected error
|
|
351
|
+
CrashedDependencyError.accept(e);
|
|
352
|
+
});
|
|
353
|
+
},
|
|
354
|
+
|
|
355
|
+
onError(actor: (error: Error) => MaybePromise<void>) {
|
|
356
|
+
const onError = (error: unknown) => {
|
|
357
|
+
const errorHandler = createErrorHandler("onError");
|
|
358
|
+
|
|
359
|
+
try {
|
|
360
|
+
const result = actor(errorOf(error));
|
|
361
|
+
if (MaybePromise.is(result)) {
|
|
362
|
+
return result.then(undefined, errorHandler);
|
|
363
|
+
}
|
|
364
|
+
} catch (e) {
|
|
365
|
+
errorHandler(e);
|
|
366
|
+
}
|
|
367
|
+
};
|
|
368
|
+
|
|
369
|
+
this.ready.catch(onError);
|
|
370
|
+
},
|
|
371
|
+
|
|
372
|
+
onCompletion(actor: () => void) {
|
|
373
|
+
const onCompletion = () => {
|
|
374
|
+
const errorHandler = createErrorHandler("onCompletion");
|
|
375
|
+
|
|
376
|
+
try {
|
|
377
|
+
actor();
|
|
378
|
+
} catch (e) {
|
|
379
|
+
errorHandler(e);
|
|
380
|
+
}
|
|
381
|
+
};
|
|
382
|
+
|
|
383
|
+
// Do not use finally() because eslint rule doesn't like it
|
|
384
|
+
this.then(onCompletion, onCompletion);
|
|
385
|
+
},
|
|
386
|
+
|
|
387
|
+
close(destructor): MaybePromise {
|
|
388
|
+
const destructorError = createErrorHandler("destructor");
|
|
389
|
+
|
|
390
|
+
// Destruction phase 4 - move to destroyed state
|
|
391
|
+
function destroyed() {
|
|
392
|
+
setStatus(Lifecycle.Status.Destroyed);
|
|
393
|
+
if (closedResolve) {
|
|
394
|
+
closedResolve();
|
|
395
|
+
closedResolve = closedReject = undefined;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
// Destruction phase 3 - invoke AsyncDestructable.destruct if present
|
|
400
|
+
const destruct = (subject as Partial<Constructable.Destructable>)[Construction.destruct];
|
|
401
|
+
const invokeDestruct = destruct
|
|
402
|
+
? function invokeDestruct() {
|
|
403
|
+
try {
|
|
404
|
+
const promise = destruct.bind(subject)();
|
|
405
|
+
if (promise) {
|
|
406
|
+
return promise.then(undefined, destructorError).then(destroyed);
|
|
407
|
+
}
|
|
408
|
+
} catch (e) {
|
|
409
|
+
destructorError(e);
|
|
410
|
+
}
|
|
411
|
+
destroyed();
|
|
412
|
+
}
|
|
413
|
+
: destroyed;
|
|
414
|
+
|
|
415
|
+
// Destruction phase 2 - invoke destructor function if present
|
|
416
|
+
const invokeDestructor = destructor
|
|
417
|
+
? function invokeDestructor() {
|
|
418
|
+
try {
|
|
419
|
+
const promise = destructor();
|
|
420
|
+
if (promise) {
|
|
421
|
+
return promise.then(undefined, destructorError).then(invokeDestruct);
|
|
422
|
+
}
|
|
423
|
+
} catch (e) {
|
|
424
|
+
destructorError(e);
|
|
425
|
+
}
|
|
426
|
+
invokeDestruct();
|
|
427
|
+
}
|
|
428
|
+
: invokeDestruct;
|
|
429
|
+
|
|
430
|
+
// Destruction phase 1 - move to destroyed state
|
|
431
|
+
function beginDestruction() {
|
|
432
|
+
if (status === Lifecycle.Status.Destroying || status === Lifecycle.Status.Destroyed) {
|
|
433
|
+
return self.closed;
|
|
434
|
+
}
|
|
435
|
+
setStatus(Lifecycle.Status.Destroying);
|
|
436
|
+
return invokeDestructor();
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
if (status === Lifecycle.Status.Initializing) {
|
|
440
|
+
return this.then(beginDestruction, beginDestruction);
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
return beginDestruction();
|
|
444
|
+
},
|
|
445
|
+
|
|
446
|
+
finally(onfinally: () => void): Promise<T> {
|
|
447
|
+
return Promise.prototype.finally.call(this, onfinally);
|
|
448
|
+
},
|
|
449
|
+
|
|
450
|
+
setStatus(newStatus: Lifecycle.Status) {
|
|
451
|
+
if (this.status === newStatus) {
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
switch (status) {
|
|
456
|
+
case newStatus:
|
|
457
|
+
return;
|
|
458
|
+
|
|
459
|
+
case Lifecycle.Status.Destroying:
|
|
460
|
+
if (newStatus !== Lifecycle.Status.Destroyed) {
|
|
461
|
+
throw new ImplementationError("Cannog change status because destruction is ongoing");
|
|
462
|
+
}
|
|
463
|
+
break;
|
|
464
|
+
|
|
465
|
+
case Lifecycle.Status.Destroyed:
|
|
466
|
+
throw new ImplementationError("Cannot change status because destruction is final");
|
|
467
|
+
|
|
468
|
+
case Lifecycle.Status.Initializing:
|
|
469
|
+
throw new ImplementationError("Cannot change status because initialization is ongoing");
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
switch (newStatus) {
|
|
473
|
+
case Lifecycle.Status.Inactive:
|
|
474
|
+
awaiterPromise = closedPromise = undefined;
|
|
475
|
+
primaryCauseHandled = false;
|
|
476
|
+
error = undefined;
|
|
477
|
+
break;
|
|
478
|
+
|
|
479
|
+
case Lifecycle.Status.Active:
|
|
480
|
+
awaiterPromise = closedPromise = undefined;
|
|
481
|
+
error = undefined;
|
|
482
|
+
break;
|
|
483
|
+
|
|
484
|
+
default:
|
|
485
|
+
break;
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
setStatus(newStatus);
|
|
489
|
+
},
|
|
490
|
+
|
|
491
|
+
crash(newError?: Error) {
|
|
492
|
+
error = newError;
|
|
493
|
+
setStatus(Lifecycle.Status.Crashed);
|
|
494
|
+
},
|
|
495
|
+
|
|
496
|
+
get ready() {
|
|
497
|
+
return {
|
|
498
|
+
[Symbol.toStringTag]: "AsyncConstruction#primary",
|
|
499
|
+
|
|
500
|
+
then<TResult1 = T, TResult2 = never>(
|
|
501
|
+
onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,
|
|
502
|
+
onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,
|
|
503
|
+
): Promise<TResult1 | TResult2> {
|
|
504
|
+
let rejectionHandler: undefined | typeof onrejected;
|
|
505
|
+
if (onrejected) {
|
|
506
|
+
primaryCauseHandled = true;
|
|
507
|
+
rejectionHandler = () => onrejected(errorOf(error));
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
return self.then(onfulfilled, rejectionHandler);
|
|
511
|
+
},
|
|
512
|
+
|
|
513
|
+
catch<TResult = never>(
|
|
514
|
+
onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null,
|
|
515
|
+
): Promise<T | TResult> {
|
|
516
|
+
return this.then(undefined, onrejected);
|
|
517
|
+
},
|
|
518
|
+
|
|
519
|
+
finally(onfinally: () => void): Promise<T> {
|
|
520
|
+
return Promise.prototype.finally.call(this, onfinally);
|
|
521
|
+
},
|
|
522
|
+
};
|
|
523
|
+
},
|
|
524
|
+
|
|
525
|
+
get closed() {
|
|
526
|
+
if (closedPromise === undefined) {
|
|
527
|
+
closedPromise = new Promise((resolve, reject) => {
|
|
528
|
+
closedResolve = resolve;
|
|
529
|
+
closedReject = reject;
|
|
530
|
+
});
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
return {
|
|
534
|
+
[Symbol.toStringTag]: "AsyncConstruction#primary",
|
|
535
|
+
|
|
536
|
+
then<TResult1 = void, TResult2 = never>(
|
|
537
|
+
onfulfilled?: ((value: void) => TResult1 | PromiseLike<TResult1>) | undefined | null,
|
|
538
|
+
onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,
|
|
539
|
+
): Promise<TResult1 | TResult2> {
|
|
540
|
+
let rejectionHandler: undefined | typeof onrejected;
|
|
541
|
+
if (onrejected) {
|
|
542
|
+
primaryCauseHandled = true;
|
|
543
|
+
rejectionHandler = () => onrejected(errorOf(error));
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
return (closedPromise as Promise<void>).then(onfulfilled, rejectionHandler);
|
|
547
|
+
},
|
|
548
|
+
|
|
549
|
+
catch<TResult = never>(
|
|
550
|
+
onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null,
|
|
551
|
+
): Promise<T | TResult> {
|
|
552
|
+
return this.then(undefined, onrejected);
|
|
553
|
+
},
|
|
554
|
+
|
|
555
|
+
finally(onfinally: () => void): Promise<T> {
|
|
556
|
+
return Promise.prototype.finally.call(this, onfinally);
|
|
557
|
+
},
|
|
558
|
+
};
|
|
559
|
+
},
|
|
560
|
+
};
|
|
561
|
+
|
|
562
|
+
if (initializer) {
|
|
563
|
+
invokeInitializer(initializer);
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
return self;
|
|
567
|
+
|
|
568
|
+
// Begin initialization. May throw synchronously or asynchronously
|
|
569
|
+
function invokeInitializer(initializer: () => MaybePromise<void>) {
|
|
570
|
+
status = Lifecycle.Status.Initializing;
|
|
571
|
+
|
|
572
|
+
initializerPromise = initializer();
|
|
573
|
+
|
|
574
|
+
if (MaybePromise.is(initializerPromise)) {
|
|
575
|
+
initializerPromise.then(resolved, rejected);
|
|
576
|
+
} else {
|
|
577
|
+
resolved();
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
// We return the original error for the first rejection. The stack trace will point to the source of the error.
|
|
582
|
+
// This means that the owner of the object should register error handling first.
|
|
583
|
+
//
|
|
584
|
+
// For subsequent rejections we throw a new CrashedDependencyError for each listener. This prevents the logs from
|
|
585
|
+
// filling with redundant stack traces and ensures the stack trace details the listener's stack rather than the
|
|
586
|
+
// original error's stack.
|
|
587
|
+
function crashedError() {
|
|
588
|
+
if (!primaryCauseHandled && error) {
|
|
589
|
+
primaryCauseHandled = true;
|
|
590
|
+
return error;
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
let what;
|
|
594
|
+
if (subject.toString === Object.prototype.toString) {
|
|
595
|
+
what = subject.constructor.name;
|
|
596
|
+
} else {
|
|
597
|
+
what = subject.toString();
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
const crashError = new CrashedDependencyError(what, "unavailable due to initialization error");
|
|
601
|
+
crashError.subject = subject;
|
|
602
|
+
return crashError;
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
function setStatus(newStatus: Lifecycle.Status) {
|
|
606
|
+
if (status === newStatus) {
|
|
607
|
+
return;
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
status = newStatus;
|
|
611
|
+
|
|
612
|
+
if (change) {
|
|
613
|
+
change.emit(status, subject);
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
function resolved() {
|
|
618
|
+
if (status === Lifecycle.Status.Initializing) {
|
|
619
|
+
setStatus(Lifecycle.Status.Active);
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
if (awaiterResolve) {
|
|
623
|
+
const resolve = awaiterResolve;
|
|
624
|
+
awaiterResolve = awaiterReject = undefined;
|
|
625
|
+
resolve(subject);
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
function rejected(cause: any) {
|
|
630
|
+
if (status !== Lifecycle.Status.Destroying && status !== Lifecycle.Status.Destroyed) {
|
|
631
|
+
error = cause;
|
|
632
|
+
setStatus(Lifecycle.Status.Crashed);
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
if (awaiterReject) {
|
|
636
|
+
const reject = awaiterReject;
|
|
637
|
+
awaiterResolve = awaiterReject = undefined;
|
|
638
|
+
reject(crashedError());
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
if (closedReject) {
|
|
642
|
+
primaryCauseHandled = true;
|
|
643
|
+
const reject = closedReject;
|
|
644
|
+
closedResolve = closedReject = undefined;
|
|
645
|
+
reject(cause);
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
if (!primaryCauseHandled) {
|
|
649
|
+
unhandledError(cause);
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
function unhandledError(...args: any[]) {
|
|
654
|
+
const logger = Logger.get(subject.constructor.name);
|
|
655
|
+
logger.error(...args);
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
function createErrorHandler(name: string) {
|
|
659
|
+
return (e: any) => {
|
|
660
|
+
unhandledError(`Unhandled error in ${self} ${name}:`, e);
|
|
661
|
+
};
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
export namespace Construction {
|
|
666
|
+
/**
|
|
667
|
+
* Ensure a pool of {@link Constructable}s are initialized. Returns a promise if any constructables are still
|
|
668
|
+
* initializing or there is an error.
|
|
669
|
+
*
|
|
670
|
+
* @param subjects the constructables to monitor; may mutate whilst construction is ongoing
|
|
671
|
+
* @param onError error handler; if returns error it is thrown; if omitted throws CrashedDependenciesError
|
|
672
|
+
*/
|
|
673
|
+
export function all<T extends Constructable>(
|
|
674
|
+
subjects: Iterable<T>,
|
|
675
|
+
onError?: (errored: Iterable<T>) => void | Error,
|
|
676
|
+
): MaybePromise {
|
|
677
|
+
if (onError === undefined) {
|
|
678
|
+
onError = errors => new CrashedDependenciesError(errors);
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
const subjectArray = [...subjects];
|
|
682
|
+
|
|
683
|
+
const uninitialized = subjectArray.filter(
|
|
684
|
+
subject => subject.construction.status === Lifecycle.Status.Initializing,
|
|
685
|
+
);
|
|
686
|
+
if (uninitialized.length) {
|
|
687
|
+
return Promise.allSettled(uninitialized.map(backing => backing.construction)).then(() =>
|
|
688
|
+
// Recurse to ensure subjects added subsequent to initial "all" settle
|
|
689
|
+
all(subjects, onError),
|
|
690
|
+
);
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
const crashed = Object.values(subjectArray).filter(
|
|
694
|
+
backing => backing.construction.status === Lifecycle.Status.Crashed,
|
|
695
|
+
);
|
|
696
|
+
if (crashed.length) {
|
|
697
|
+
let error;
|
|
698
|
+
try {
|
|
699
|
+
error = onError(crashed);
|
|
700
|
+
} catch (e) {
|
|
701
|
+
error = e;
|
|
702
|
+
}
|
|
703
|
+
if (error) {
|
|
704
|
+
return Promise.reject(error);
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
export const construct = Symbol("construct");
|
|
710
|
+
export const destruct = Symbol("destruct");
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
function assertDeferred<T>(subject: Constructable<T>): asserts subject is Constructable.Deferred<T, any> {
|
|
714
|
+
if (typeof (subject as Constructable.Deferred<any, any>)?.[Construction.construct] !== "function") {
|
|
715
|
+
throw new ImplementationError(`No initializer defined for ${subject}`);
|
|
716
|
+
}
|
|
717
|
+
}
|