@amazon/vinyl-util 1.0.0
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/dist/browserTestUtil/index.js +2641 -0
- package/dist/browserTestUtil/index.js.map +7 -0
- package/dist/browserTestUtil/types/current/async/async.d.ts +30 -0
- package/dist/browserTestUtil/types/current/async/async.d.ts.map +1 -0
- package/dist/browserTestUtil/types/current/async/async.js +48 -0
- package/dist/browserTestUtil/types/current/async/createCallbackTimingTest.d.ts +16 -0
- package/dist/browserTestUtil/types/current/async/createCallbackTimingTest.d.ts.map +1 -0
- package/dist/browserTestUtil/types/current/async/createCallbackTimingTest.js +57 -0
- package/dist/browserTestUtil/types/current/async/marble.d.ts +12 -0
- package/dist/browserTestUtil/types/current/async/marble.d.ts.map +1 -0
- package/dist/browserTestUtil/types/current/async/marble.js +27 -0
- package/dist/browserTestUtil/types/current/benchmark/Benchmark.d.ts +90 -0
- package/dist/browserTestUtil/types/current/benchmark/Benchmark.d.ts.map +1 -0
- package/dist/browserTestUtil/types/current/benchmark/Benchmark.js +247 -0
- package/dist/browserTestUtil/types/current/env/jasmineEnv.d.ts +14 -0
- package/dist/browserTestUtil/types/current/env/jasmineEnv.d.ts.map +1 -0
- package/dist/browserTestUtil/types/current/env/jasmineEnv.js +34 -0
- package/dist/browserTestUtil/types/current/expect/expectIterableEquals.d.ts +8 -0
- package/dist/browserTestUtil/types/current/expect/expectIterableEquals.d.ts.map +1 -0
- package/dist/browserTestUtil/types/current/expect/expectIterableEquals.js +13 -0
- package/dist/browserTestUtil/types/current/expect/expectNothing.d.ts +5 -0
- package/dist/browserTestUtil/types/current/expect/expectNothing.d.ts.map +1 -0
- package/dist/browserTestUtil/types/current/expect/expectNothing.js +10 -0
- package/dist/browserTestUtil/types/current/expect/prototype.d.ts +18 -0
- package/dist/browserTestUtil/types/current/expect/prototype.d.ts.map +1 -0
- package/dist/browserTestUtil/types/current/expect/prototype.js +28 -0
- package/dist/browserTestUtil/types/current/expect/typesafety.d.ts +38 -0
- package/dist/browserTestUtil/types/current/expect/typesafety.d.ts.map +1 -0
- package/dist/browserTestUtil/types/current/expect/typesafety.js +43 -0
- package/dist/browserTestUtil/types/current/index.d.ts +22 -0
- package/dist/browserTestUtil/types/current/index.d.ts.map +1 -0
- package/dist/browserTestUtil/types/current/index.js +21 -0
- package/dist/browserTestUtil/types/current/matchers/customMatchers.d.ts +9 -0
- package/dist/browserTestUtil/types/current/matchers/customMatchers.d.ts.map +1 -0
- package/dist/browserTestUtil/types/current/matchers/customMatchers.js +8 -0
- package/dist/browserTestUtil/types/current/matchers/toBeCloseToWithin.d.ts +5 -0
- package/dist/browserTestUtil/types/current/matchers/toBeCloseToWithin.d.ts.map +1 -0
- package/dist/browserTestUtil/types/current/matchers/toBeCloseToWithin.js +25 -0
- package/dist/browserTestUtil/types/current/mock/asSpy.d.ts +18 -0
- package/dist/browserTestUtil/types/current/mock/asSpy.d.ts.map +1 -0
- package/dist/browserTestUtil/types/current/mock/asSpy.js +24 -0
- package/dist/browserTestUtil/types/current/mock/createSpyFactory.d.ts +44 -0
- package/dist/browserTestUtil/types/current/mock/createSpyFactory.d.ts.map +1 -0
- package/dist/browserTestUtil/types/current/mock/createSpyFactory.js +27 -0
- package/dist/browserTestUtil/types/current/mock/dom/MockTimeRanges.d.ts +12 -0
- package/dist/browserTestUtil/types/current/mock/dom/MockTimeRanges.d.ts.map +1 -0
- package/dist/browserTestUtil/types/current/mock/dom/MockTimeRanges.js +30 -0
- package/dist/browserTestUtil/types/current/mock/dom/globals.d.ts +11 -0
- package/dist/browserTestUtil/types/current/mock/dom/globals.d.ts.map +1 -0
- package/dist/browserTestUtil/types/current/mock/dom/globals.js +15 -0
- package/dist/browserTestUtil/types/current/mock/dom/lib.dom.d.ts +2110 -0
- package/dist/browserTestUtil/types/current/mock/dom/lib.dom.d.ts.map +1 -0
- package/dist/browserTestUtil/types/current/mock/dom/lib.dom.js +1828 -0
- package/dist/browserTestUtil/types/current/mock/dom/mockEvent.d.ts +7 -0
- package/dist/browserTestUtil/types/current/mock/dom/mockEvent.d.ts.map +1 -0
- package/dist/browserTestUtil/types/current/mock/dom/mockEvent.js +14 -0
- package/dist/browserTestUtil/types/current/mock/implementEventFakes.d.ts +17 -0
- package/dist/browserTestUtil/types/current/mock/implementEventFakes.d.ts.map +1 -0
- package/dist/browserTestUtil/types/current/mock/implementEventFakes.js +108 -0
- package/dist/browserTestUtil/types/current/mock/polyfillCustomEvent.d.ts +2 -0
- package/dist/browserTestUtil/types/current/mock/polyfillCustomEvent.d.ts.map +1 -0
- package/dist/browserTestUtil/types/current/mock/polyfillCustomEvent.js +26 -0
- package/dist/browserTestUtil/types/current/reporters/ConsoleReporter.d.ts +10 -0
- package/dist/browserTestUtil/types/current/reporters/ConsoleReporter.d.ts.map +1 -0
- package/dist/browserTestUtil/types/current/reporters/ConsoleReporter.js +32 -0
- package/dist/browserTestUtil/types/current/tsconfig.tsbuildinfo +1 -0
- package/dist/browserTestUtil/types/ts3.7/async/async.d.ts +30 -0
- package/dist/browserTestUtil/types/ts3.7/async/createCallbackTimingTest.d.ts +16 -0
- package/dist/browserTestUtil/types/ts3.7/async/marble.d.ts +12 -0
- package/dist/browserTestUtil/types/ts3.7/benchmark/Benchmark.d.ts +84 -0
- package/dist/browserTestUtil/types/ts3.7/env/jasmineEnv.d.ts +14 -0
- package/dist/browserTestUtil/types/ts3.7/expect/expectIterableEquals.d.ts +8 -0
- package/dist/browserTestUtil/types/ts3.7/expect/expectNothing.d.ts +5 -0
- package/dist/browserTestUtil/types/ts3.7/expect/prototype.d.ts +18 -0
- package/dist/browserTestUtil/types/ts3.7/expect/typesafety.d.ts +50 -0
- package/dist/browserTestUtil/types/ts3.7/index.d.ts +22 -0
- package/dist/browserTestUtil/types/ts3.7/matchers/customMatchers.d.ts +9 -0
- package/dist/browserTestUtil/types/ts3.7/matchers/toBeCloseToWithin.d.ts +5 -0
- package/dist/browserTestUtil/types/ts3.7/mock/asSpy.d.ts +18 -0
- package/dist/browserTestUtil/types/ts3.7/mock/createSpyFactory.d.ts +44 -0
- package/dist/browserTestUtil/types/ts3.7/mock/dom/MockTimeRanges.d.ts +15 -0
- package/dist/browserTestUtil/types/ts3.7/mock/dom/globals.d.ts +11 -0
- package/dist/browserTestUtil/types/ts3.7/mock/dom/lib.dom.d.ts +2110 -0
- package/dist/browserTestUtil/types/ts3.7/mock/dom/mockEvent.d.ts +7 -0
- package/dist/browserTestUtil/types/ts3.7/mock/implementEventFakes.d.ts +17 -0
- package/dist/browserTestUtil/types/ts3.7/mock/polyfillCustomEvent.d.ts +2 -0
- package/dist/browserTestUtil/types/ts3.7/reporters/ConsoleReporter.d.ts +10 -0
- package/dist/browserTestUtil/types/ts4.1/async/async.d.ts +30 -0
- package/dist/browserTestUtil/types/ts4.1/async/createCallbackTimingTest.d.ts +16 -0
- package/dist/browserTestUtil/types/ts4.1/async/marble.d.ts +12 -0
- package/dist/browserTestUtil/types/ts4.1/benchmark/Benchmark.d.ts +84 -0
- package/dist/browserTestUtil/types/ts4.1/env/jasmineEnv.d.ts +14 -0
- package/dist/browserTestUtil/types/ts4.1/expect/expectIterableEquals.d.ts +8 -0
- package/dist/browserTestUtil/types/ts4.1/expect/expectNothing.d.ts +5 -0
- package/dist/browserTestUtil/types/ts4.1/expect/prototype.d.ts +18 -0
- package/dist/browserTestUtil/types/ts4.1/expect/typesafety.d.ts +50 -0
- package/dist/browserTestUtil/types/ts4.1/index.d.ts +22 -0
- package/dist/browserTestUtil/types/ts4.1/matchers/customMatchers.d.ts +9 -0
- package/dist/browserTestUtil/types/ts4.1/matchers/toBeCloseToWithin.d.ts +5 -0
- package/dist/browserTestUtil/types/ts4.1/mock/asSpy.d.ts +18 -0
- package/dist/browserTestUtil/types/ts4.1/mock/createSpyFactory.d.ts +44 -0
- package/dist/browserTestUtil/types/ts4.1/mock/dom/MockTimeRanges.d.ts +15 -0
- package/dist/browserTestUtil/types/ts4.1/mock/dom/globals.d.ts +11 -0
- package/dist/browserTestUtil/types/ts4.1/mock/dom/lib.dom.d.ts +2110 -0
- package/dist/browserTestUtil/types/ts4.1/mock/dom/mockEvent.d.ts +7 -0
- package/dist/browserTestUtil/types/ts4.1/mock/implementEventFakes.d.ts +17 -0
- package/dist/browserTestUtil/types/ts4.1/mock/polyfillCustomEvent.d.ts +2 -0
- package/dist/browserTestUtil/types/ts4.1/reporters/ConsoleReporter.d.ts +10 -0
- package/dist/browserTestUtil/types/ts4.7/async/async.d.ts +30 -0
- package/dist/browserTestUtil/types/ts4.7/async/createCallbackTimingTest.d.ts +16 -0
- package/dist/browserTestUtil/types/ts4.7/async/marble.d.ts +12 -0
- package/dist/browserTestUtil/types/ts4.7/benchmark/Benchmark.d.ts +90 -0
- package/dist/browserTestUtil/types/ts4.7/env/jasmineEnv.d.ts +14 -0
- package/dist/browserTestUtil/types/ts4.7/expect/expectIterableEquals.d.ts +8 -0
- package/dist/browserTestUtil/types/ts4.7/expect/expectNothing.d.ts +5 -0
- package/dist/browserTestUtil/types/ts4.7/expect/prototype.d.ts +18 -0
- package/dist/browserTestUtil/types/ts4.7/expect/typesafety.d.ts +50 -0
- package/dist/browserTestUtil/types/ts4.7/index.d.ts +22 -0
- package/dist/browserTestUtil/types/ts4.7/matchers/customMatchers.d.ts +9 -0
- package/dist/browserTestUtil/types/ts4.7/matchers/toBeCloseToWithin.d.ts +5 -0
- package/dist/browserTestUtil/types/ts4.7/mock/asSpy.d.ts +18 -0
- package/dist/browserTestUtil/types/ts4.7/mock/createSpyFactory.d.ts +44 -0
- package/dist/browserTestUtil/types/ts4.7/mock/dom/MockTimeRanges.d.ts +15 -0
- package/dist/browserTestUtil/types/ts4.7/mock/dom/globals.d.ts +11 -0
- package/dist/browserTestUtil/types/ts4.7/mock/dom/lib.dom.d.ts +2110 -0
- package/dist/browserTestUtil/types/ts4.7/mock/dom/mockEvent.d.ts +7 -0
- package/dist/browserTestUtil/types/ts4.7/mock/implementEventFakes.d.ts +17 -0
- package/dist/browserTestUtil/types/ts4.7/mock/polyfillCustomEvent.d.ts +2 -0
- package/dist/browserTestUtil/types/ts4.7/reporters/ConsoleReporter.d.ts +10 -0
- package/dist/index.cjs +6104 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.js +6084 -0
- package/dist/index.js.map +7 -0
- package/dist/polyfill/index.d.ts +7 -0
- package/dist/polyfill/index.d.ts.map +1 -0
- package/dist/polyfill/index.js +3552 -0
- package/dist/polyfill/index.js.map +7 -0
- package/dist/polyfill/tsconfig.tsbuildinfo +1 -0
- package/dist/test/benchmark.es5.js +266 -0
- package/dist/test/benchmark.js +2026 -0
- package/dist/test/benchmark.js.map +7 -0
- package/dist/testUtil/index.js +593 -0
- package/dist/testUtil/index.js.map +7 -0
- package/dist/testUtil/types/current/error/uncaughtErrorUtil.d.ts +15 -0
- package/dist/testUtil/types/current/error/uncaughtErrorUtil.d.ts.map +1 -0
- package/dist/testUtil/types/current/error/uncaughtErrorUtil.js +52 -0
- package/dist/testUtil/types/current/global/overrideGlobalInit.d.ts +5 -0
- package/dist/testUtil/types/current/global/overrideGlobalInit.d.ts.map +1 -0
- package/dist/testUtil/types/current/global/overrideGlobalInit.js +10 -0
- package/dist/testUtil/types/current/index.d.ts +20 -0
- package/dist/testUtil/types/current/index.d.ts.map +1 -0
- package/dist/testUtil/types/current/index.js +19 -0
- package/dist/testUtil/types/current/mock/event/MockEventHost.d.ts +15 -0
- package/dist/testUtil/types/current/mock/event/MockEventHost.d.ts.map +1 -0
- package/dist/testUtil/types/current/mock/event/MockEventHost.js +21 -0
- package/dist/testUtil/types/current/mock/event/emptyLogTarget.d.ts +3 -0
- package/dist/testUtil/types/current/mock/event/emptyLogTarget.d.ts.map +1 -0
- package/dist/testUtil/types/current/mock/event/emptyLogTarget.js +7 -0
- package/dist/testUtil/types/current/mock/logging/MockLogger.d.ts +18 -0
- package/dist/testUtil/types/current/mock/logging/MockLogger.d.ts.map +1 -0
- package/dist/testUtil/types/current/mock/logging/MockLogger.js +41 -0
- package/dist/testUtil/types/current/mock/navigator/setMockNavigator.d.ts +7 -0
- package/dist/testUtil/types/current/mock/navigator/setMockNavigator.d.ts.map +1 -0
- package/dist/testUtil/types/current/mock/navigator/setMockNavigator.js +15 -0
- package/dist/testUtil/types/current/mock/network/MockNetworkInformation.d.ts +10 -0
- package/dist/testUtil/types/current/mock/network/MockNetworkInformation.d.ts.map +1 -0
- package/dist/testUtil/types/current/mock/network/MockNetworkInformation.js +12 -0
- package/dist/testUtil/types/current/mock/network/MockNetworkMetricsController.d.ts +10 -0
- package/dist/testUtil/types/current/mock/network/MockNetworkMetricsController.d.ts.map +1 -0
- package/dist/testUtil/types/current/mock/network/MockNetworkMetricsController.js +15 -0
- package/dist/testUtil/types/current/mock/network/MockNetworkState.d.ts +7 -0
- package/dist/testUtil/types/current/mock/network/MockNetworkState.d.ts.map +1 -0
- package/dist/testUtil/types/current/mock/network/MockNetworkState.js +11 -0
- package/dist/testUtil/types/current/mock/network/MockRequester.d.ts +6 -0
- package/dist/testUtil/types/current/mock/network/MockRequester.d.ts.map +1 -0
- package/dist/testUtil/types/current/mock/network/MockRequester.js +10 -0
- package/dist/testUtil/types/current/mock/network/emptyRequestInfo.d.ts +10 -0
- package/dist/testUtil/types/current/mock/network/emptyRequestInfo.d.ts.map +1 -0
- package/dist/testUtil/types/current/mock/network/emptyRequestInfo.js +71 -0
- package/dist/testUtil/types/current/mock/persistence/MockPersistence.d.ts +9 -0
- package/dist/testUtil/types/current/mock/persistence/MockPersistence.d.ts.map +1 -0
- package/dist/testUtil/types/current/mock/persistence/MockPersistence.js +12 -0
- package/dist/testUtil/types/current/mock/util/spyOnPropertySafe.d.ts +6 -0
- package/dist/testUtil/types/current/mock/util/spyOnPropertySafe.d.ts.map +1 -0
- package/dist/testUtil/types/current/mock/util/spyOnPropertySafe.js +20 -0
- package/dist/testUtil/types/current/patch/addPatchTests.d.ts +35 -0
- package/dist/testUtil/types/current/patch/addPatchTests.d.ts.map +1 -0
- package/dist/testUtil/types/current/patch/addPatchTests.js +54 -0
- package/dist/testUtil/types/current/reporters/LogReporter.d.ts +57 -0
- package/dist/testUtil/types/current/reporters/LogReporter.d.ts.map +1 -0
- package/dist/testUtil/types/current/reporters/LogReporter.js +145 -0
- package/dist/testUtil/types/current/reporters/RestApiReporter.d.ts +23 -0
- package/dist/testUtil/types/current/reporters/RestApiReporter.d.ts.map +1 -0
- package/dist/testUtil/types/current/reporters/RestApiReporter.js +91 -0
- package/dist/testUtil/types/current/tsconfig.tsbuildinfo +1 -0
- package/dist/testUtil/types/current/util/event/createEventSpy.d.ts +31 -0
- package/dist/testUtil/types/current/util/event/createEventSpy.d.ts.map +1 -0
- package/dist/testUtil/types/current/util/event/createEventSpy.js +33 -0
- package/dist/testUtil/types/current/util/initializeUncaughtErrorLogging.d.ts +6 -0
- package/dist/testUtil/types/current/util/initializeUncaughtErrorLogging.d.ts.map +1 -0
- package/dist/testUtil/types/current/util/initializeUncaughtErrorLogging.js +20 -0
- package/dist/testUtil/types/ts3.7/error/uncaughtErrorUtil.d.ts +15 -0
- package/dist/testUtil/types/ts3.7/global/overrideGlobalInit.d.ts +5 -0
- package/dist/testUtil/types/ts3.7/index.d.ts +20 -0
- package/dist/testUtil/types/ts3.7/mock/event/MockEventHost.d.ts +15 -0
- package/dist/testUtil/types/ts3.7/mock/event/emptyLogTarget.d.ts +3 -0
- package/dist/testUtil/types/ts3.7/mock/logging/MockLogger.d.ts +18 -0
- package/dist/testUtil/types/ts3.7/mock/navigator/setMockNavigator.d.ts +7 -0
- package/dist/testUtil/types/ts3.7/mock/network/MockNetworkInformation.d.ts +10 -0
- package/dist/testUtil/types/ts3.7/mock/network/MockNetworkMetricsController.d.ts +10 -0
- package/dist/testUtil/types/ts3.7/mock/network/MockNetworkState.d.ts +7 -0
- package/dist/testUtil/types/ts3.7/mock/network/MockRequester.d.ts +6 -0
- package/dist/testUtil/types/ts3.7/mock/network/emptyRequestInfo.d.ts +10 -0
- package/dist/testUtil/types/ts3.7/mock/persistence/MockPersistence.d.ts +9 -0
- package/dist/testUtil/types/ts3.7/mock/util/spyOnPropertySafe.d.ts +6 -0
- package/dist/testUtil/types/ts3.7/patch/addPatchTests.d.ts +35 -0
- package/dist/testUtil/types/ts3.7/reporters/LogReporter.d.ts +57 -0
- package/dist/testUtil/types/ts3.7/reporters/RestApiReporter.d.ts +23 -0
- package/dist/testUtil/types/ts3.7/util/event/createEventSpy.d.ts +31 -0
- package/dist/testUtil/types/ts3.7/util/initializeUncaughtErrorLogging.d.ts +6 -0
- package/dist/testUtil/types/ts4.1/error/uncaughtErrorUtil.d.ts +15 -0
- package/dist/testUtil/types/ts4.1/global/overrideGlobalInit.d.ts +5 -0
- package/dist/testUtil/types/ts4.1/index.d.ts +20 -0
- package/dist/testUtil/types/ts4.1/mock/event/MockEventHost.d.ts +15 -0
- package/dist/testUtil/types/ts4.1/mock/event/emptyLogTarget.d.ts +3 -0
- package/dist/testUtil/types/ts4.1/mock/logging/MockLogger.d.ts +18 -0
- package/dist/testUtil/types/ts4.1/mock/navigator/setMockNavigator.d.ts +7 -0
- package/dist/testUtil/types/ts4.1/mock/network/MockNetworkInformation.d.ts +10 -0
- package/dist/testUtil/types/ts4.1/mock/network/MockNetworkMetricsController.d.ts +10 -0
- package/dist/testUtil/types/ts4.1/mock/network/MockNetworkState.d.ts +7 -0
- package/dist/testUtil/types/ts4.1/mock/network/MockRequester.d.ts +6 -0
- package/dist/testUtil/types/ts4.1/mock/network/emptyRequestInfo.d.ts +10 -0
- package/dist/testUtil/types/ts4.1/mock/persistence/MockPersistence.d.ts +9 -0
- package/dist/testUtil/types/ts4.1/mock/util/spyOnPropertySafe.d.ts +6 -0
- package/dist/testUtil/types/ts4.1/patch/addPatchTests.d.ts +35 -0
- package/dist/testUtil/types/ts4.1/reporters/LogReporter.d.ts +58 -0
- package/dist/testUtil/types/ts4.1/reporters/RestApiReporter.d.ts +24 -0
- package/dist/testUtil/types/ts4.1/util/event/createEventSpy.d.ts +31 -0
- package/dist/testUtil/types/ts4.1/util/initializeUncaughtErrorLogging.d.ts +6 -0
- package/dist/testUtil/types/ts4.7/error/uncaughtErrorUtil.d.ts +15 -0
- package/dist/testUtil/types/ts4.7/global/overrideGlobalInit.d.ts +5 -0
- package/dist/testUtil/types/ts4.7/index.d.ts +20 -0
- package/dist/testUtil/types/ts4.7/mock/event/MockEventHost.d.ts +15 -0
- package/dist/testUtil/types/ts4.7/mock/event/emptyLogTarget.d.ts +3 -0
- package/dist/testUtil/types/ts4.7/mock/logging/MockLogger.d.ts +18 -0
- package/dist/testUtil/types/ts4.7/mock/navigator/setMockNavigator.d.ts +7 -0
- package/dist/testUtil/types/ts4.7/mock/network/MockNetworkInformation.d.ts +10 -0
- package/dist/testUtil/types/ts4.7/mock/network/MockNetworkMetricsController.d.ts +10 -0
- package/dist/testUtil/types/ts4.7/mock/network/MockNetworkState.d.ts +7 -0
- package/dist/testUtil/types/ts4.7/mock/network/MockRequester.d.ts +6 -0
- package/dist/testUtil/types/ts4.7/mock/network/emptyRequestInfo.d.ts +10 -0
- package/dist/testUtil/types/ts4.7/mock/persistence/MockPersistence.d.ts +9 -0
- package/dist/testUtil/types/ts4.7/mock/util/spyOnPropertySafe.d.ts +6 -0
- package/dist/testUtil/types/ts4.7/patch/addPatchTests.d.ts +35 -0
- package/dist/testUtil/types/ts4.7/reporters/LogReporter.d.ts +57 -0
- package/dist/testUtil/types/ts4.7/reporters/RestApiReporter.d.ts +23 -0
- package/dist/testUtil/types/ts4.7/util/event/createEventSpy.d.ts +31 -0
- package/dist/testUtil/types/ts4.7/util/initializeUncaughtErrorLogging.d.ts +6 -0
- package/dist/types/current/client/Version.d.ts +38 -0
- package/dist/types/current/client/Version.d.ts.map +1 -0
- package/dist/types/current/client/Version.js +40 -0
- package/dist/types/current/client/userAgent/UserAgentInfo.d.ts +36 -0
- package/dist/types/current/client/userAgent/UserAgentInfo.d.ts.map +1 -0
- package/dist/types/current/client/userAgent/UserAgentInfo.js +12 -0
- package/dist/types/current/client/userAgent/defaultUserAgentRules.d.ts +94 -0
- package/dist/types/current/client/userAgent/defaultUserAgentRules.d.ts.map +1 -0
- package/dist/types/current/client/userAgent/defaultUserAgentRules.js +251 -0
- package/dist/types/current/client/userAgent/hasBrowser.d.ts +26 -0
- package/dist/types/current/client/userAgent/hasBrowser.d.ts.map +1 -0
- package/dist/types/current/client/userAgent/hasBrowser.js +49 -0
- package/dist/types/current/client/userAgent/parseUserAgent.d.ts +14 -0
- package/dist/types/current/client/userAgent/parseUserAgent.d.ts.map +1 -0
- package/dist/types/current/client/userAgent/parseUserAgent.js +67 -0
- package/dist/types/current/client/userAgent/tokenizeUserAgent.d.ts +104 -0
- package/dist/types/current/client/userAgent/tokenizeUserAgent.d.ts.map +1 -0
- package/dist/types/current/client/userAgent/tokenizeUserAgent.js +167 -0
- package/dist/types/current/client/userAgent/userAgentRuleHelpers.d.ts +52 -0
- package/dist/types/current/client/userAgent/userAgentRuleHelpers.d.ts.map +1 -0
- package/dist/types/current/client/userAgent/userAgentRuleHelpers.js +96 -0
- package/dist/types/current/core/Unsubscribe.d.ts +2 -0
- package/dist/types/current/core/Unsubscribe.d.ts.map +1 -0
- package/dist/types/current/core/Unsubscribe.js +5 -0
- package/dist/types/current/core/clearable.d.ts +19 -0
- package/dist/types/current/core/clearable.d.ts.map +1 -0
- package/dist/types/current/core/clearable.js +24 -0
- package/dist/types/current/core/cloneable.d.ts +14 -0
- package/dist/types/current/core/cloneable.d.ts.map +1 -0
- package/dist/types/current/core/cloneable.js +14 -0
- package/dist/types/current/core/disposable.d.ts +66 -0
- package/dist/types/current/core/disposable.d.ts.map +1 -0
- package/dist/types/current/core/disposable.js +91 -0
- package/dist/types/current/error/AbortError.d.ts +6 -0
- package/dist/types/current/error/AbortError.d.ts.map +1 -0
- package/dist/types/current/error/AbortError.js +15 -0
- package/dist/types/current/error/ErrorOrigin.d.ts +45 -0
- package/dist/types/current/error/ErrorOrigin.d.ts.map +1 -0
- package/dist/types/current/error/ErrorOrigin.js +48 -0
- package/dist/types/current/error/IllegalArgumentError.d.ts +10 -0
- package/dist/types/current/error/IllegalArgumentError.d.ts.map +1 -0
- package/dist/types/current/error/IllegalArgumentError.js +20 -0
- package/dist/types/current/error/IllegalStateError.d.ts +9 -0
- package/dist/types/current/error/IllegalStateError.d.ts.map +1 -0
- package/dist/types/current/error/IllegalStateError.js +17 -0
- package/dist/types/current/error/MediaUnsupportedError.d.ts +9 -0
- package/dist/types/current/error/MediaUnsupportedError.d.ts.map +1 -0
- package/dist/types/current/error/MediaUnsupportedError.js +20 -0
- package/dist/types/current/error/ReportableError.d.ts +39 -0
- package/dist/types/current/error/ReportableError.d.ts.map +1 -0
- package/dist/types/current/error/ReportableError.js +66 -0
- package/dist/types/current/error/ServiceResponseError.d.ts +14 -0
- package/dist/types/current/error/ServiceResponseError.d.ts.map +1 -0
- package/dist/types/current/error/ServiceResponseError.js +31 -0
- package/dist/types/current/error/StackOverflowError.d.ts +9 -0
- package/dist/types/current/error/StackOverflowError.d.ts.map +1 -0
- package/dist/types/current/error/StackOverflowError.js +17 -0
- package/dist/types/current/error/TimeoutError.d.ts +6 -0
- package/dist/types/current/error/TimeoutError.d.ts.map +1 -0
- package/dist/types/current/error/TimeoutError.js +15 -0
- package/dist/types/current/error/UnreachableCodeError.d.ts +9 -0
- package/dist/types/current/error/UnreachableCodeError.d.ts.map +1 -0
- package/dist/types/current/error/UnreachableCodeError.js +17 -0
- package/dist/types/current/error/ValidationError.d.ts +17 -0
- package/dist/types/current/error/ValidationError.d.ts.map +1 -0
- package/dist/types/current/error/ValidationError.js +32 -0
- package/dist/types/current/event/DomEventHost.d.ts +45 -0
- package/dist/types/current/event/DomEventHost.d.ts.map +1 -0
- package/dist/types/current/event/DomEventHost.js +53 -0
- package/dist/types/current/event/EventHost.d.ts +69 -0
- package/dist/types/current/event/EventHost.d.ts.map +1 -0
- package/dist/types/current/event/EventHost.js +38 -0
- package/dist/types/current/event/Signal.d.ts +57 -0
- package/dist/types/current/event/Signal.d.ts.map +1 -0
- package/dist/types/current/event/Signal.js +66 -0
- package/dist/types/current/event/nextEventAsPromise.d.ts +30 -0
- package/dist/types/current/event/nextEventAsPromise.d.ts.map +1 -0
- package/dist/types/current/event/nextEventAsPromise.js +23 -0
- package/dist/types/current/event/onAny.d.ts +13 -0
- package/dist/types/current/event/onAny.d.ts.map +1 -0
- package/dist/types/current/event/onAny.js +24 -0
- package/dist/types/current/event/redispatchEvents.d.ts +15 -0
- package/dist/types/current/event/redispatchEvents.d.ts.map +1 -0
- package/dist/types/current/event/redispatchEvents.js +23 -0
- package/dist/types/current/global/environment.d.ts +26 -0
- package/dist/types/current/global/environment.d.ts.map +1 -0
- package/dist/types/current/global/environment.js +29 -0
- package/dist/types/current/global/globalRegistry.d.ts +86 -0
- package/dist/types/current/global/globalRegistry.d.ts.map +1 -0
- package/dist/types/current/global/globalRegistry.js +181 -0
- package/dist/types/current/global/globalTarget.d.ts +8 -0
- package/dist/types/current/global/globalTarget.d.ts.map +1 -0
- package/dist/types/current/global/globalTarget.js +12 -0
- package/dist/types/current/index.d.ts +118 -0
- package/dist/types/current/index.d.ts.map +1 -0
- package/dist/types/current/index.js +117 -0
- package/dist/types/current/logging/ConsoleLogHandler.d.ts +26 -0
- package/dist/types/current/logging/ConsoleLogHandler.d.ts.map +1 -0
- package/dist/types/current/logging/ConsoleLogHandler.js +43 -0
- package/dist/types/current/logging/HistoryLogHandler.d.ts +56 -0
- package/dist/types/current/logging/HistoryLogHandler.d.ts.map +1 -0
- package/dist/types/current/logging/HistoryLogHandler.js +54 -0
- package/dist/types/current/logging/LogTarget.d.ts +19 -0
- package/dist/types/current/logging/LogTarget.d.ts.map +1 -0
- package/dist/types/current/logging/LogTarget.js +18 -0
- package/dist/types/current/logging/Logger.d.ts +66 -0
- package/dist/types/current/logging/Logger.d.ts.map +1 -0
- package/dist/types/current/logging/Logger.js +110 -0
- package/dist/types/current/logging/VinylLogging.d.ts +9 -0
- package/dist/types/current/logging/VinylLogging.d.ts.map +1 -0
- package/dist/types/current/logging/VinylLogging.js +22 -0
- package/dist/types/current/logging/getLogLevelFromSearch.d.ts +8 -0
- package/dist/types/current/logging/getLogLevelFromSearch.d.ts.map +1 -0
- package/dist/types/current/logging/getLogLevelFromSearch.js +17 -0
- package/dist/types/current/logging/logTimer.d.ts +10 -0
- package/dist/types/current/logging/logTimer.d.ts.map +1 -0
- package/dist/types/current/logging/logTimer.js +18 -0
- package/dist/types/current/network/RequestError.d.ts +26 -0
- package/dist/types/current/network/RequestError.d.ts.map +1 -0
- package/dist/types/current/network/RequestError.js +78 -0
- package/dist/types/current/network/RequestInterceptor.d.ts +14 -0
- package/dist/types/current/network/RequestInterceptor.d.ts.map +1 -0
- package/dist/types/current/network/RequestInterceptor.js +5 -0
- package/dist/types/current/network/Requester.d.ts +84 -0
- package/dist/types/current/network/Requester.d.ts.map +1 -0
- package/dist/types/current/network/Requester.js +10 -0
- package/dist/types/current/network/RequesterImpl.d.ts +120 -0
- package/dist/types/current/network/RequesterImpl.d.ts.map +1 -0
- package/dist/types/current/network/RequesterImpl.js +321 -0
- package/dist/types/current/network/RequesterImplEventMap.d.ts +230 -0
- package/dist/types/current/network/RequesterImplEventMap.d.ts.map +1 -0
- package/dist/types/current/network/RequesterImplEventMap.js +23 -0
- package/dist/types/current/network/browser/NetworkInformation.d.ts +48 -0
- package/dist/types/current/network/browser/NetworkInformation.d.ts.map +1 -0
- package/dist/types/current/network/browser/NetworkInformation.js +17 -0
- package/dist/types/current/network/createRequester.d.ts +12 -0
- package/dist/types/current/network/createRequester.d.ts.map +1 -0
- package/dist/types/current/network/createRequester.js +29 -0
- package/dist/types/current/network/logging/networkLoggingHandler.d.ts +14 -0
- package/dist/types/current/network/logging/networkLoggingHandler.d.ts.map +1 -0
- package/dist/types/current/network/logging/networkLoggingHandler.js +74 -0
- package/dist/types/current/network/metrics/NetworkMetricsController.d.ts +41 -0
- package/dist/types/current/network/metrics/NetworkMetricsController.d.ts.map +1 -0
- package/dist/types/current/network/metrics/NetworkMetricsController.js +5 -0
- package/dist/types/current/network/metrics/NetworkMetricsControllerImpl.d.ts +119 -0
- package/dist/types/current/network/metrics/NetworkMetricsControllerImpl.d.ts.map +1 -0
- package/dist/types/current/network/metrics/NetworkMetricsControllerImpl.js +210 -0
- package/dist/types/current/network/metrics/networkMetricsGlobal.d.ts +11 -0
- package/dist/types/current/network/metrics/networkMetricsGlobal.d.ts.map +1 -0
- package/dist/types/current/network/metrics/networkMetricsGlobal.js +19 -0
- package/dist/types/current/network/metrics/networkMetricsModel.d.ts +147 -0
- package/dist/types/current/network/metrics/networkMetricsModel.d.ts.map +1 -0
- package/dist/types/current/network/metrics/networkMetricsModel.js +35 -0
- package/dist/types/current/network/network.d.ts +47 -0
- package/dist/types/current/network/network.d.ts.map +1 -0
- package/dist/types/current/network/network.js +54 -0
- package/dist/types/current/network/requesterGlobal.d.ts +19 -0
- package/dist/types/current/network/requesterGlobal.d.ts.map +1 -0
- package/dist/types/current/network/requesterGlobal.js +29 -0
- package/dist/types/current/network/requesterUtil.d.ts +28 -0
- package/dist/types/current/network/requesterUtil.d.ts.map +1 -0
- package/dist/types/current/network/requesterUtil.js +71 -0
- package/dist/types/current/network/responseUtil.d.ts +10 -0
- package/dist/types/current/network/responseUtil.d.ts.map +1 -0
- package/dist/types/current/network/responseUtil.js +14 -0
- package/dist/types/current/patch/network/fetch.d.ts +11 -0
- package/dist/types/current/patch/network/fetch.d.ts.map +1 -0
- package/dist/types/current/patch/network/fetch.js +43 -0
- package/dist/types/current/patch/patchTarget.d.ts +114 -0
- package/dist/types/current/patch/patchTarget.d.ts.map +1 -0
- package/dist/types/current/patch/patchTarget.js +219 -0
- package/dist/types/current/persistence/KeyValuePersistence.d.ts +28 -0
- package/dist/types/current/persistence/KeyValuePersistence.d.ts.map +1 -0
- package/dist/types/current/persistence/KeyValuePersistence.js +5 -0
- package/dist/types/current/persistence/PersistentItem.d.ts +86 -0
- package/dist/types/current/persistence/PersistentItem.d.ts.map +1 -0
- package/dist/types/current/persistence/PersistentItem.js +70 -0
- package/dist/types/current/persistence/StoragePersistence.d.ts +11 -0
- package/dist/types/current/persistence/StoragePersistence.d.ts.map +1 -0
- package/dist/types/current/persistence/StoragePersistence.js +25 -0
- package/dist/types/current/persistence/persistenceRef.d.ts +7 -0
- package/dist/types/current/persistence/persistenceRef.d.ts.map +1 -0
- package/dist/types/current/persistence/persistenceRef.js +13 -0
- package/dist/types/current/tsconfig.tsbuildinfo +1 -0
- package/dist/types/current/util/async/Abort.d.ts +99 -0
- package/dist/types/current/util/async/Abort.d.ts.map +1 -0
- package/dist/types/current/util/async/Abort.js +122 -0
- package/dist/types/current/util/async/Deferred.d.ts +25 -0
- package/dist/types/current/util/async/Deferred.d.ts.map +1 -0
- package/dist/types/current/util/async/Deferred.js +41 -0
- package/dist/types/current/util/async/TaskQueue.d.ts +74 -0
- package/dist/types/current/util/async/TaskQueue.d.ts.map +1 -0
- package/dist/types/current/util/async/TaskQueue.js +124 -0
- package/dist/types/current/util/async/TimeoutController.d.ts +36 -0
- package/dist/types/current/util/async/TimeoutController.d.ts.map +1 -0
- package/dist/types/current/util/async/TimeoutController.js +62 -0
- package/dist/types/current/util/async/TimeoutSlot.d.ts +29 -0
- package/dist/types/current/util/async/TimeoutSlot.d.ts.map +1 -0
- package/dist/types/current/util/async/TimeoutSlot.js +50 -0
- package/dist/types/current/util/async/abortUtils.d.ts +15 -0
- package/dist/types/current/util/async/abortUtils.d.ts.map +1 -0
- package/dist/types/current/util/async/abortUtils.js +27 -0
- package/dist/types/current/util/async/never.d.ts +5 -0
- package/dist/types/current/util/async/never.d.ts.map +1 -0
- package/dist/types/current/util/async/never.js +22 -0
- package/dist/types/current/util/async/promise.d.ts +53 -0
- package/dist/types/current/util/async/promise.d.ts.map +1 -0
- package/dist/types/current/util/async/promise.js +131 -0
- package/dist/types/current/util/async/sleep.d.ts +27 -0
- package/dist/types/current/util/async/sleep.d.ts.map +1 -0
- package/dist/types/current/util/async/sleep.js +41 -0
- package/dist/types/current/util/async/timeout.d.ts +29 -0
- package/dist/types/current/util/async/timeout.d.ts.map +1 -0
- package/dist/types/current/util/async/timeout.js +55 -0
- package/dist/types/current/util/browser/searchParams.d.ts +13 -0
- package/dist/types/current/util/browser/searchParams.d.ts.map +1 -0
- package/dist/types/current/util/browser/searchParams.js +26 -0
- package/dist/types/current/util/buffer/BufferError.d.ts +6 -0
- package/dist/types/current/util/buffer/BufferError.d.ts.map +1 -0
- package/dist/types/current/util/buffer/BufferError.js +15 -0
- package/dist/types/current/util/buffer/BufferReader.d.ts +77 -0
- package/dist/types/current/util/buffer/BufferReader.d.ts.map +1 -0
- package/dist/types/current/util/buffer/BufferReader.js +150 -0
- package/dist/types/current/util/buffer/BufferWriter.d.ts +30 -0
- package/dist/types/current/util/buffer/BufferWriter.d.ts.map +1 -0
- package/dist/types/current/util/buffer/BufferWriter.js +80 -0
- package/dist/types/current/util/buffer/buffer.d.ts +55 -0
- package/dist/types/current/util/buffer/buffer.d.ts.map +1 -0
- package/dist/types/current/util/buffer/buffer.js +99 -0
- package/dist/types/current/util/collection/CacheMap.d.ts +12 -0
- package/dist/types/current/util/collection/CacheMap.d.ts.map +1 -0
- package/dist/types/current/util/collection/CacheMap.js +5 -0
- package/dist/types/current/util/collection/LinkedList.d.ts +165 -0
- package/dist/types/current/util/collection/LinkedList.d.ts.map +1 -0
- package/dist/types/current/util/collection/LinkedList.js +332 -0
- package/dist/types/current/util/collection/LruCache.d.ts +93 -0
- package/dist/types/current/util/collection/LruCache.d.ts.map +1 -0
- package/dist/types/current/util/collection/LruCache.js +170 -0
- package/dist/types/current/util/collection/array.d.ts +207 -0
- package/dist/types/current/util/collection/array.d.ts.map +1 -0
- package/dist/types/current/util/collection/array.js +403 -0
- package/dist/types/current/util/collection/typedArray.d.ts +17 -0
- package/dist/types/current/util/collection/typedArray.d.ts.map +1 -0
- package/dist/types/current/util/collection/typedArray.js +32 -0
- package/dist/types/current/util/comparison/compare.d.ts +33 -0
- package/dist/types/current/util/comparison/compare.d.ts.map +1 -0
- package/dist/types/current/util/comparison/compare.js +53 -0
- package/dist/types/current/util/config/ValueProvider.d.ts +17 -0
- package/dist/types/current/util/config/ValueProvider.d.ts.map +1 -0
- package/dist/types/current/util/config/ValueProvider.js +18 -0
- package/dist/types/current/util/date/date.d.ts +32 -0
- package/dist/types/current/util/date/date.d.ts.map +1 -0
- package/dist/types/current/util/date/date.js +49 -0
- package/dist/types/current/util/error/stack.d.ts +79 -0
- package/dist/types/current/util/error/stack.d.ts.map +1 -0
- package/dist/types/current/util/error/stack.js +135 -0
- package/dist/types/current/util/fun/debounce.d.ts +12 -0
- package/dist/types/current/util/fun/debounce.d.ts.map +1 -0
- package/dist/types/current/util/fun/debounce.js +28 -0
- package/dist/types/current/util/fun/flow.d.ts +38 -0
- package/dist/types/current/util/fun/flow.d.ts.map +1 -0
- package/dist/types/current/util/fun/flow.js +28 -0
- package/dist/types/current/util/fun/function.d.ts +5 -0
- package/dist/types/current/util/fun/function.d.ts.map +1 -0
- package/dist/types/current/util/fun/function.js +8 -0
- package/dist/types/current/util/fun/memoize.d.ts +24 -0
- package/dist/types/current/util/fun/memoize.d.ts.map +1 -0
- package/dist/types/current/util/fun/memoize.js +62 -0
- package/dist/types/current/util/fun/throttle.d.ts +34 -0
- package/dist/types/current/util/fun/throttle.d.ts.map +1 -0
- package/dist/types/current/util/fun/throttle.js +66 -0
- package/dist/types/current/util/iteration/iterable.d.ts +26 -0
- package/dist/types/current/util/iteration/iterable.d.ts.map +1 -0
- package/dist/types/current/util/iteration/iterable.js +97 -0
- package/dist/types/current/util/map/map.d.ts +17 -0
- package/dist/types/current/util/map/map.d.ts.map +1 -0
- package/dist/types/current/util/map/map.js +35 -0
- package/dist/types/current/util/math/math.d.ts +79 -0
- package/dist/types/current/util/math/math.d.ts.map +1 -0
- package/dist/types/current/util/math/math.js +94 -0
- package/dist/types/current/util/mpeg/parseSidxBox.d.ts +100 -0
- package/dist/types/current/util/mpeg/parseSidxBox.d.ts.map +1 -0
- package/dist/types/current/util/mpeg/parseSidxBox.js +91 -0
- package/dist/types/current/util/network/request.d.ts +18 -0
- package/dist/types/current/util/network/request.d.ts.map +1 -0
- package/dist/types/current/util/network/request.js +79 -0
- package/dist/types/current/util/object/clone.d.ts +68 -0
- package/dist/types/current/util/object/clone.d.ts.map +1 -0
- package/dist/types/current/util/object/clone.js +36 -0
- package/dist/types/current/util/object/equalDeep.d.ts +54 -0
- package/dist/types/current/util/object/equalDeep.d.ts.map +1 -0
- package/dist/types/current/util/object/equalDeep.js +144 -0
- package/dist/types/current/util/object/lazy.d.ts +54 -0
- package/dist/types/current/util/object/lazy.d.ts.map +1 -0
- package/dist/types/current/util/object/lazy.js +70 -0
- package/dist/types/current/util/object/merge.d.ts +72 -0
- package/dist/types/current/util/object/merge.d.ts.map +1 -0
- package/dist/types/current/util/object/merge.js +19 -0
- package/dist/types/current/util/object/mergeDeep.d.ts +126 -0
- package/dist/types/current/util/object/mergeDeep.d.ts.map +1 -0
- package/dist/types/current/util/object/mergeDeep.js +256 -0
- package/dist/types/current/util/object/mutableType.d.ts +64 -0
- package/dist/types/current/util/object/mutableType.d.ts.map +1 -0
- package/dist/types/current/util/object/mutableType.js +5 -0
- package/dist/types/current/util/object/object.d.ts +55 -0
- package/dist/types/current/util/object/object.d.ts.map +1 -0
- package/dist/types/current/util/object/object.js +91 -0
- package/dist/types/current/util/object/readonlyType.d.ts +71 -0
- package/dist/types/current/util/object/readonlyType.d.ts.map +1 -0
- package/dist/types/current/util/object/readonlyType.js +5 -0
- package/dist/types/current/util/range/IntersectionRanges.d.ts +37 -0
- package/dist/types/current/util/range/IntersectionRanges.d.ts.map +1 -0
- package/dist/types/current/util/range/IntersectionRanges.js +77 -0
- package/dist/types/current/util/range/Ranges.d.ts +123 -0
- package/dist/types/current/util/range/Ranges.d.ts.map +1 -0
- package/dist/types/current/util/range/Ranges.js +192 -0
- package/dist/types/current/util/range/UnionRanges.d.ts +37 -0
- package/dist/types/current/util/range/UnionRanges.d.ts.map +1 -0
- package/dist/types/current/util/range/UnionRanges.js +56 -0
- package/dist/types/current/util/range/timeRanges.d.ts +14 -0
- package/dist/types/current/util/range/timeRanges.d.ts.map +1 -0
- package/dist/types/current/util/range/timeRanges.js +25 -0
- package/dist/types/current/util/serialization/ParseError.d.ts +48 -0
- package/dist/types/current/util/serialization/ParseError.d.ts.map +1 -0
- package/dist/types/current/util/serialization/ParseError.js +42 -0
- package/dist/types/current/util/serialization/json.d.ts +30 -0
- package/dist/types/current/util/serialization/json.d.ts.map +1 -0
- package/dist/types/current/util/serialization/json.js +79 -0
- package/dist/types/current/util/serialization/primitives.d.ts +24 -0
- package/dist/types/current/util/serialization/primitives.d.ts.map +1 -0
- package/dist/types/current/util/serialization/primitives.js +48 -0
- package/dist/types/current/util/serialization/stringifyForPrint.d.ts +14 -0
- package/dist/types/current/util/serialization/stringifyForPrint.d.ts.map +1 -0
- package/dist/types/current/util/serialization/stringifyForPrint.js +39 -0
- package/dist/types/current/util/set/set.d.ts +17 -0
- package/dist/types/current/util/set/set.d.ts.map +1 -0
- package/dist/types/current/util/set/set.js +29 -0
- package/dist/types/current/util/string/StringReader.d.ts +149 -0
- package/dist/types/current/util/string/StringReader.d.ts.map +1 -0
- package/dist/types/current/util/string/StringReader.js +242 -0
- package/dist/types/current/util/string/string.d.ts +130 -0
- package/dist/types/current/util/string/string.d.ts.map +1 -0
- package/dist/types/current/util/string/string.js +249 -0
- package/dist/types/current/util/string/uid.d.ts +20 -0
- package/dist/types/current/util/string/uid.d.ts.map +1 -0
- package/dist/types/current/util/string/uid.js +26 -0
- package/dist/types/current/util/type.d.ts +166 -0
- package/dist/types/current/util/type.d.ts.map +1 -0
- package/dist/types/current/util/type.js +25 -0
- package/dist/types/current/util/url/resolveUrl.d.ts +23 -0
- package/dist/types/current/util/url/resolveUrl.d.ts.map +1 -0
- package/dist/types/current/util/url/resolveUrl.js +79 -0
- package/dist/types/ts3.7/client/Version.d.ts +38 -0
- package/dist/types/ts3.7/client/userAgent/UserAgentInfo.d.ts +36 -0
- package/dist/types/ts3.7/client/userAgent/defaultUserAgentRules.d.ts +94 -0
- package/dist/types/ts3.7/client/userAgent/hasBrowser.d.ts +26 -0
- package/dist/types/ts3.7/client/userAgent/parseUserAgent.d.ts +14 -0
- package/dist/types/ts3.7/client/userAgent/tokenizeUserAgent.d.ts +104 -0
- package/dist/types/ts3.7/client/userAgent/userAgentRuleHelpers.d.ts +52 -0
- package/dist/types/ts3.7/core/Unsubscribe.d.ts +2 -0
- package/dist/types/ts3.7/core/clearable.d.ts +19 -0
- package/dist/types/ts3.7/core/cloneable.d.ts +14 -0
- package/dist/types/ts3.7/core/disposable.d.ts +66 -0
- package/dist/types/ts3.7/error/AbortError.d.ts +6 -0
- package/dist/types/ts3.7/error/ErrorOrigin.d.ts +45 -0
- package/dist/types/ts3.7/error/IllegalArgumentError.d.ts +10 -0
- package/dist/types/ts3.7/error/IllegalStateError.d.ts +9 -0
- package/dist/types/ts3.7/error/MediaUnsupportedError.d.ts +9 -0
- package/dist/types/ts3.7/error/ReportableError.d.ts +39 -0
- package/dist/types/ts3.7/error/ServiceResponseError.d.ts +14 -0
- package/dist/types/ts3.7/error/StackOverflowError.d.ts +9 -0
- package/dist/types/ts3.7/error/TimeoutError.d.ts +6 -0
- package/dist/types/ts3.7/error/UnreachableCodeError.d.ts +9 -0
- package/dist/types/ts3.7/error/ValidationError.d.ts +17 -0
- package/dist/types/ts3.7/event/DomEventHost.d.ts +45 -0
- package/dist/types/ts3.7/event/EventHost.d.ts +69 -0
- package/dist/types/ts3.7/event/Signal.d.ts +57 -0
- package/dist/types/ts3.7/event/nextEventAsPromise.d.ts +30 -0
- package/dist/types/ts3.7/event/onAny.d.ts +13 -0
- package/dist/types/ts3.7/event/redispatchEvents.d.ts +15 -0
- package/dist/types/ts3.7/global/environment.d.ts +26 -0
- package/dist/types/ts3.7/global/globalRegistry.d.ts +83 -0
- package/dist/types/ts3.7/global/globalTarget.d.ts +8 -0
- package/dist/types/ts3.7/index.d.ts +118 -0
- package/dist/types/ts3.7/logging/ConsoleLogHandler.d.ts +26 -0
- package/dist/types/ts3.7/logging/HistoryLogHandler.d.ts +56 -0
- package/dist/types/ts3.7/logging/LogTarget.d.ts +19 -0
- package/dist/types/ts3.7/logging/Logger.d.ts +66 -0
- package/dist/types/ts3.7/logging/VinylLogging.d.ts +9 -0
- package/dist/types/ts3.7/logging/getLogLevelFromSearch.d.ts +8 -0
- package/dist/types/ts3.7/logging/logTimer.d.ts +10 -0
- package/dist/types/ts3.7/network/RequestError.d.ts +26 -0
- package/dist/types/ts3.7/network/RequestInterceptor.d.ts +14 -0
- package/dist/types/ts3.7/network/Requester.d.ts +84 -0
- package/dist/types/ts3.7/network/RequesterImpl.d.ts +116 -0
- package/dist/types/ts3.7/network/RequesterImplEventMap.d.ts +230 -0
- package/dist/types/ts3.7/network/browser/NetworkInformation.d.ts +48 -0
- package/dist/types/ts3.7/network/createRequester.d.ts +12 -0
- package/dist/types/ts3.7/network/logging/networkLoggingHandler.d.ts +14 -0
- package/dist/types/ts3.7/network/metrics/NetworkMetricsController.d.ts +41 -0
- package/dist/types/ts3.7/network/metrics/NetworkMetricsControllerImpl.d.ts +119 -0
- package/dist/types/ts3.7/network/metrics/networkMetricsGlobal.d.ts +11 -0
- package/dist/types/ts3.7/network/metrics/networkMetricsModel.d.ts +147 -0
- package/dist/types/ts3.7/network/network.d.ts +47 -0
- package/dist/types/ts3.7/network/requesterGlobal.d.ts +19 -0
- package/dist/types/ts3.7/network/requesterUtil.d.ts +28 -0
- package/dist/types/ts3.7/network/responseUtil.d.ts +10 -0
- package/dist/types/ts3.7/patch/network/fetch.d.ts +11 -0
- package/dist/types/ts3.7/patch/patchTarget.d.ts +114 -0
- package/dist/types/ts3.7/persistence/KeyValuePersistence.d.ts +28 -0
- package/dist/types/ts3.7/persistence/PersistentItem.d.ts +86 -0
- package/dist/types/ts3.7/persistence/StoragePersistence.d.ts +11 -0
- package/dist/types/ts3.7/persistence/persistenceRef.d.ts +7 -0
- package/dist/types/ts3.7/util/async/Abort.d.ts +96 -0
- package/dist/types/ts3.7/util/async/Deferred.d.ts +25 -0
- package/dist/types/ts3.7/util/async/TaskQueue.d.ts +71 -0
- package/dist/types/ts3.7/util/async/TimeoutController.d.ts +36 -0
- package/dist/types/ts3.7/util/async/TimeoutSlot.d.ts +26 -0
- package/dist/types/ts3.7/util/async/abortUtils.d.ts +15 -0
- package/dist/types/ts3.7/util/async/never.d.ts +5 -0
- package/dist/types/ts3.7/util/async/promise.d.ts +53 -0
- package/dist/types/ts3.7/util/async/sleep.d.ts +27 -0
- package/dist/types/ts3.7/util/async/timeout.d.ts +29 -0
- package/dist/types/ts3.7/util/browser/searchParams.d.ts +13 -0
- package/dist/types/ts3.7/util/buffer/BufferError.d.ts +6 -0
- package/dist/types/ts3.7/util/buffer/BufferReader.d.ts +77 -0
- package/dist/types/ts3.7/util/buffer/BufferWriter.d.ts +30 -0
- package/dist/types/ts3.7/util/buffer/buffer.d.ts +55 -0
- package/dist/types/ts3.7/util/collection/CacheMap.d.ts +12 -0
- package/dist/types/ts3.7/util/collection/LinkedList.d.ts +156 -0
- package/dist/types/ts3.7/util/collection/LruCache.d.ts +96 -0
- package/dist/types/ts3.7/util/collection/array.d.ts +207 -0
- package/dist/types/ts3.7/util/collection/typedArray.d.ts +17 -0
- package/dist/types/ts3.7/util/comparison/compare.d.ts +33 -0
- package/dist/types/ts3.7/util/config/ValueProvider.d.ts +17 -0
- package/dist/types/ts3.7/util/date/date.d.ts +32 -0
- package/dist/types/ts3.7/util/error/stack.d.ts +79 -0
- package/dist/types/ts3.7/util/fun/debounce.d.ts +12 -0
- package/dist/types/ts3.7/util/fun/flow.d.ts +38 -0
- package/dist/types/ts3.7/util/fun/function.d.ts +5 -0
- package/dist/types/ts3.7/util/fun/memoize.d.ts +24 -0
- package/dist/types/ts3.7/util/fun/throttle.d.ts +34 -0
- package/dist/types/ts3.7/util/iteration/iterable.d.ts +26 -0
- package/dist/types/ts3.7/util/map/map.d.ts +17 -0
- package/dist/types/ts3.7/util/math/math.d.ts +79 -0
- package/dist/types/ts3.7/util/mpeg/parseSidxBox.d.ts +100 -0
- package/dist/types/ts3.7/util/network/request.d.ts +18 -0
- package/dist/types/ts3.7/util/object/clone.d.ts +68 -0
- package/dist/types/ts3.7/util/object/equalDeep.d.ts +54 -0
- package/dist/types/ts3.7/util/object/lazy.d.ts +54 -0
- package/dist/types/ts3.7/util/object/merge.d.ts +72 -0
- package/dist/types/ts3.7/util/object/mergeDeep.d.ts +153 -0
- package/dist/types/ts3.7/util/object/mutableType.d.ts +85 -0
- package/dist/types/ts3.7/util/object/object.d.ts +55 -0
- package/dist/types/ts3.7/util/object/readonlyType.d.ts +100 -0
- package/dist/types/ts3.7/util/range/IntersectionRanges.d.ts +37 -0
- package/dist/types/ts3.7/util/range/Ranges.d.ts +126 -0
- package/dist/types/ts3.7/util/range/UnionRanges.d.ts +37 -0
- package/dist/types/ts3.7/util/range/timeRanges.d.ts +14 -0
- package/dist/types/ts3.7/util/serialization/ParseError.d.ts +48 -0
- package/dist/types/ts3.7/util/serialization/json.d.ts +30 -0
- package/dist/types/ts3.7/util/serialization/primitives.d.ts +24 -0
- package/dist/types/ts3.7/util/serialization/stringifyForPrint.d.ts +14 -0
- package/dist/types/ts3.7/util/set/set.d.ts +17 -0
- package/dist/types/ts3.7/util/string/StringReader.d.ts +134 -0
- package/dist/types/ts3.7/util/string/string.d.ts +130 -0
- package/dist/types/ts3.7/util/string/uid.d.ts +20 -0
- package/dist/types/ts3.7/util/type.d.ts +173 -0
- package/dist/types/ts3.7/util/url/resolveUrl.d.ts +23 -0
- package/dist/types/ts4.1/client/Version.d.ts +38 -0
- package/dist/types/ts4.1/client/userAgent/UserAgentInfo.d.ts +36 -0
- package/dist/types/ts4.1/client/userAgent/defaultUserAgentRules.d.ts +94 -0
- package/dist/types/ts4.1/client/userAgent/hasBrowser.d.ts +26 -0
- package/dist/types/ts4.1/client/userAgent/parseUserAgent.d.ts +14 -0
- package/dist/types/ts4.1/client/userAgent/tokenizeUserAgent.d.ts +104 -0
- package/dist/types/ts4.1/client/userAgent/userAgentRuleHelpers.d.ts +52 -0
- package/dist/types/ts4.1/core/Unsubscribe.d.ts +2 -0
- package/dist/types/ts4.1/core/clearable.d.ts +19 -0
- package/dist/types/ts4.1/core/cloneable.d.ts +14 -0
- package/dist/types/ts4.1/core/disposable.d.ts +66 -0
- package/dist/types/ts4.1/error/AbortError.d.ts +6 -0
- package/dist/types/ts4.1/error/ErrorOrigin.d.ts +45 -0
- package/dist/types/ts4.1/error/IllegalArgumentError.d.ts +10 -0
- package/dist/types/ts4.1/error/IllegalStateError.d.ts +9 -0
- package/dist/types/ts4.1/error/MediaUnsupportedError.d.ts +9 -0
- package/dist/types/ts4.1/error/ReportableError.d.ts +39 -0
- package/dist/types/ts4.1/error/ServiceResponseError.d.ts +14 -0
- package/dist/types/ts4.1/error/StackOverflowError.d.ts +9 -0
- package/dist/types/ts4.1/error/TimeoutError.d.ts +6 -0
- package/dist/types/ts4.1/error/UnreachableCodeError.d.ts +9 -0
- package/dist/types/ts4.1/error/ValidationError.d.ts +17 -0
- package/dist/types/ts4.1/event/DomEventHost.d.ts +45 -0
- package/dist/types/ts4.1/event/EventHost.d.ts +69 -0
- package/dist/types/ts4.1/event/Signal.d.ts +57 -0
- package/dist/types/ts4.1/event/nextEventAsPromise.d.ts +30 -0
- package/dist/types/ts4.1/event/onAny.d.ts +13 -0
- package/dist/types/ts4.1/event/redispatchEvents.d.ts +15 -0
- package/dist/types/ts4.1/global/environment.d.ts +26 -0
- package/dist/types/ts4.1/global/globalRegistry.d.ts +83 -0
- package/dist/types/ts4.1/global/globalTarget.d.ts +8 -0
- package/dist/types/ts4.1/index.d.ts +118 -0
- package/dist/types/ts4.1/logging/ConsoleLogHandler.d.ts +26 -0
- package/dist/types/ts4.1/logging/HistoryLogHandler.d.ts +56 -0
- package/dist/types/ts4.1/logging/LogTarget.d.ts +19 -0
- package/dist/types/ts4.1/logging/Logger.d.ts +66 -0
- package/dist/types/ts4.1/logging/VinylLogging.d.ts +9 -0
- package/dist/types/ts4.1/logging/getLogLevelFromSearch.d.ts +8 -0
- package/dist/types/ts4.1/logging/logTimer.d.ts +10 -0
- package/dist/types/ts4.1/network/RequestError.d.ts +26 -0
- package/dist/types/ts4.1/network/RequestInterceptor.d.ts +14 -0
- package/dist/types/ts4.1/network/Requester.d.ts +84 -0
- package/dist/types/ts4.1/network/RequesterImpl.d.ts +116 -0
- package/dist/types/ts4.1/network/RequesterImplEventMap.d.ts +230 -0
- package/dist/types/ts4.1/network/browser/NetworkInformation.d.ts +48 -0
- package/dist/types/ts4.1/network/createRequester.d.ts +12 -0
- package/dist/types/ts4.1/network/logging/networkLoggingHandler.d.ts +14 -0
- package/dist/types/ts4.1/network/metrics/NetworkMetricsController.d.ts +41 -0
- package/dist/types/ts4.1/network/metrics/NetworkMetricsControllerImpl.d.ts +119 -0
- package/dist/types/ts4.1/network/metrics/networkMetricsGlobal.d.ts +11 -0
- package/dist/types/ts4.1/network/metrics/networkMetricsModel.d.ts +147 -0
- package/dist/types/ts4.1/network/network.d.ts +47 -0
- package/dist/types/ts4.1/network/requesterGlobal.d.ts +19 -0
- package/dist/types/ts4.1/network/requesterUtil.d.ts +28 -0
- package/dist/types/ts4.1/network/responseUtil.d.ts +10 -0
- package/dist/types/ts4.1/patch/network/fetch.d.ts +11 -0
- package/dist/types/ts4.1/patch/patchTarget.d.ts +114 -0
- package/dist/types/ts4.1/persistence/KeyValuePersistence.d.ts +28 -0
- package/dist/types/ts4.1/persistence/PersistentItem.d.ts +86 -0
- package/dist/types/ts4.1/persistence/StoragePersistence.d.ts +11 -0
- package/dist/types/ts4.1/persistence/persistenceRef.d.ts +7 -0
- package/dist/types/ts4.1/util/async/Abort.d.ts +96 -0
- package/dist/types/ts4.1/util/async/Deferred.d.ts +25 -0
- package/dist/types/ts4.1/util/async/TaskQueue.d.ts +71 -0
- package/dist/types/ts4.1/util/async/TimeoutController.d.ts +37 -0
- package/dist/types/ts4.1/util/async/TimeoutSlot.d.ts +26 -0
- package/dist/types/ts4.1/util/async/abortUtils.d.ts +15 -0
- package/dist/types/ts4.1/util/async/never.d.ts +5 -0
- package/dist/types/ts4.1/util/async/promise.d.ts +53 -0
- package/dist/types/ts4.1/util/async/sleep.d.ts +27 -0
- package/dist/types/ts4.1/util/async/timeout.d.ts +29 -0
- package/dist/types/ts4.1/util/browser/searchParams.d.ts +13 -0
- package/dist/types/ts4.1/util/buffer/BufferError.d.ts +6 -0
- package/dist/types/ts4.1/util/buffer/BufferReader.d.ts +77 -0
- package/dist/types/ts4.1/util/buffer/BufferWriter.d.ts +30 -0
- package/dist/types/ts4.1/util/buffer/buffer.d.ts +55 -0
- package/dist/types/ts4.1/util/collection/CacheMap.d.ts +12 -0
- package/dist/types/ts4.1/util/collection/LinkedList.d.ts +156 -0
- package/dist/types/ts4.1/util/collection/LruCache.d.ts +96 -0
- package/dist/types/ts4.1/util/collection/array.d.ts +207 -0
- package/dist/types/ts4.1/util/collection/typedArray.d.ts +17 -0
- package/dist/types/ts4.1/util/comparison/compare.d.ts +33 -0
- package/dist/types/ts4.1/util/config/ValueProvider.d.ts +17 -0
- package/dist/types/ts4.1/util/date/date.d.ts +32 -0
- package/dist/types/ts4.1/util/error/stack.d.ts +79 -0
- package/dist/types/ts4.1/util/fun/debounce.d.ts +12 -0
- package/dist/types/ts4.1/util/fun/flow.d.ts +38 -0
- package/dist/types/ts4.1/util/fun/function.d.ts +5 -0
- package/dist/types/ts4.1/util/fun/memoize.d.ts +24 -0
- package/dist/types/ts4.1/util/fun/throttle.d.ts +34 -0
- package/dist/types/ts4.1/util/iteration/iterable.d.ts +26 -0
- package/dist/types/ts4.1/util/map/map.d.ts +17 -0
- package/dist/types/ts4.1/util/math/math.d.ts +79 -0
- package/dist/types/ts4.1/util/mpeg/parseSidxBox.d.ts +100 -0
- package/dist/types/ts4.1/util/network/request.d.ts +18 -0
- package/dist/types/ts4.1/util/object/clone.d.ts +68 -0
- package/dist/types/ts4.1/util/object/equalDeep.d.ts +54 -0
- package/dist/types/ts4.1/util/object/lazy.d.ts +54 -0
- package/dist/types/ts4.1/util/object/merge.d.ts +72 -0
- package/dist/types/ts4.1/util/object/mergeDeep.d.ts +153 -0
- package/dist/types/ts4.1/util/object/mutableType.d.ts +87 -0
- package/dist/types/ts4.1/util/object/object.d.ts +55 -0
- package/dist/types/ts4.1/util/object/readonlyType.d.ts +100 -0
- package/dist/types/ts4.1/util/range/IntersectionRanges.d.ts +38 -0
- package/dist/types/ts4.1/util/range/Ranges.d.ts +126 -0
- package/dist/types/ts4.1/util/range/UnionRanges.d.ts +38 -0
- package/dist/types/ts4.1/util/range/timeRanges.d.ts +14 -0
- package/dist/types/ts4.1/util/serialization/ParseError.d.ts +48 -0
- package/dist/types/ts4.1/util/serialization/json.d.ts +30 -0
- package/dist/types/ts4.1/util/serialization/primitives.d.ts +24 -0
- package/dist/types/ts4.1/util/serialization/stringifyForPrint.d.ts +14 -0
- package/dist/types/ts4.1/util/set/set.d.ts +17 -0
- package/dist/types/ts4.1/util/string/StringReader.d.ts +134 -0
- package/dist/types/ts4.1/util/string/string.d.ts +130 -0
- package/dist/types/ts4.1/util/string/uid.d.ts +20 -0
- package/dist/types/ts4.1/util/type.d.ts +173 -0
- package/dist/types/ts4.1/util/url/resolveUrl.d.ts +23 -0
- package/dist/types/ts4.7/client/Version.d.ts +38 -0
- package/dist/types/ts4.7/client/userAgent/UserAgentInfo.d.ts +36 -0
- package/dist/types/ts4.7/client/userAgent/defaultUserAgentRules.d.ts +94 -0
- package/dist/types/ts4.7/client/userAgent/hasBrowser.d.ts +26 -0
- package/dist/types/ts4.7/client/userAgent/parseUserAgent.d.ts +14 -0
- package/dist/types/ts4.7/client/userAgent/tokenizeUserAgent.d.ts +104 -0
- package/dist/types/ts4.7/client/userAgent/userAgentRuleHelpers.d.ts +52 -0
- package/dist/types/ts4.7/core/Unsubscribe.d.ts +2 -0
- package/dist/types/ts4.7/core/clearable.d.ts +19 -0
- package/dist/types/ts4.7/core/cloneable.d.ts +14 -0
- package/dist/types/ts4.7/core/disposable.d.ts +66 -0
- package/dist/types/ts4.7/error/AbortError.d.ts +6 -0
- package/dist/types/ts4.7/error/ErrorOrigin.d.ts +45 -0
- package/dist/types/ts4.7/error/IllegalArgumentError.d.ts +10 -0
- package/dist/types/ts4.7/error/IllegalStateError.d.ts +9 -0
- package/dist/types/ts4.7/error/MediaUnsupportedError.d.ts +9 -0
- package/dist/types/ts4.7/error/ReportableError.d.ts +39 -0
- package/dist/types/ts4.7/error/ServiceResponseError.d.ts +14 -0
- package/dist/types/ts4.7/error/StackOverflowError.d.ts +9 -0
- package/dist/types/ts4.7/error/TimeoutError.d.ts +6 -0
- package/dist/types/ts4.7/error/UnreachableCodeError.d.ts +9 -0
- package/dist/types/ts4.7/error/ValidationError.d.ts +17 -0
- package/dist/types/ts4.7/event/DomEventHost.d.ts +45 -0
- package/dist/types/ts4.7/event/EventHost.d.ts +69 -0
- package/dist/types/ts4.7/event/Signal.d.ts +57 -0
- package/dist/types/ts4.7/event/nextEventAsPromise.d.ts +30 -0
- package/dist/types/ts4.7/event/onAny.d.ts +13 -0
- package/dist/types/ts4.7/event/redispatchEvents.d.ts +15 -0
- package/dist/types/ts4.7/global/environment.d.ts +26 -0
- package/dist/types/ts4.7/global/globalRegistry.d.ts +86 -0
- package/dist/types/ts4.7/global/globalTarget.d.ts +8 -0
- package/dist/types/ts4.7/index.d.ts +118 -0
- package/dist/types/ts4.7/logging/ConsoleLogHandler.d.ts +26 -0
- package/dist/types/ts4.7/logging/HistoryLogHandler.d.ts +56 -0
- package/dist/types/ts4.7/logging/LogTarget.d.ts +19 -0
- package/dist/types/ts4.7/logging/Logger.d.ts +66 -0
- package/dist/types/ts4.7/logging/VinylLogging.d.ts +9 -0
- package/dist/types/ts4.7/logging/getLogLevelFromSearch.d.ts +8 -0
- package/dist/types/ts4.7/logging/logTimer.d.ts +10 -0
- package/dist/types/ts4.7/network/RequestError.d.ts +26 -0
- package/dist/types/ts4.7/network/RequestInterceptor.d.ts +14 -0
- package/dist/types/ts4.7/network/Requester.d.ts +84 -0
- package/dist/types/ts4.7/network/RequesterImpl.d.ts +120 -0
- package/dist/types/ts4.7/network/RequesterImplEventMap.d.ts +230 -0
- package/dist/types/ts4.7/network/browser/NetworkInformation.d.ts +48 -0
- package/dist/types/ts4.7/network/createRequester.d.ts +12 -0
- package/dist/types/ts4.7/network/logging/networkLoggingHandler.d.ts +14 -0
- package/dist/types/ts4.7/network/metrics/NetworkMetricsController.d.ts +41 -0
- package/dist/types/ts4.7/network/metrics/NetworkMetricsControllerImpl.d.ts +119 -0
- package/dist/types/ts4.7/network/metrics/networkMetricsGlobal.d.ts +11 -0
- package/dist/types/ts4.7/network/metrics/networkMetricsModel.d.ts +147 -0
- package/dist/types/ts4.7/network/network.d.ts +47 -0
- package/dist/types/ts4.7/network/requesterGlobal.d.ts +19 -0
- package/dist/types/ts4.7/network/requesterUtil.d.ts +28 -0
- package/dist/types/ts4.7/network/responseUtil.d.ts +10 -0
- package/dist/types/ts4.7/patch/network/fetch.d.ts +11 -0
- package/dist/types/ts4.7/patch/patchTarget.d.ts +114 -0
- package/dist/types/ts4.7/persistence/KeyValuePersistence.d.ts +28 -0
- package/dist/types/ts4.7/persistence/PersistentItem.d.ts +86 -0
- package/dist/types/ts4.7/persistence/StoragePersistence.d.ts +11 -0
- package/dist/types/ts4.7/persistence/persistenceRef.d.ts +7 -0
- package/dist/types/ts4.7/util/async/Abort.d.ts +99 -0
- package/dist/types/ts4.7/util/async/Deferred.d.ts +25 -0
- package/dist/types/ts4.7/util/async/TaskQueue.d.ts +74 -0
- package/dist/types/ts4.7/util/async/TimeoutController.d.ts +36 -0
- package/dist/types/ts4.7/util/async/TimeoutSlot.d.ts +29 -0
- package/dist/types/ts4.7/util/async/abortUtils.d.ts +15 -0
- package/dist/types/ts4.7/util/async/never.d.ts +5 -0
- package/dist/types/ts4.7/util/async/promise.d.ts +53 -0
- package/dist/types/ts4.7/util/async/sleep.d.ts +27 -0
- package/dist/types/ts4.7/util/async/timeout.d.ts +29 -0
- package/dist/types/ts4.7/util/browser/searchParams.d.ts +13 -0
- package/dist/types/ts4.7/util/buffer/BufferError.d.ts +6 -0
- package/dist/types/ts4.7/util/buffer/BufferReader.d.ts +77 -0
- package/dist/types/ts4.7/util/buffer/BufferWriter.d.ts +30 -0
- package/dist/types/ts4.7/util/buffer/buffer.d.ts +55 -0
- package/dist/types/ts4.7/util/collection/CacheMap.d.ts +12 -0
- package/dist/types/ts4.7/util/collection/LinkedList.d.ts +165 -0
- package/dist/types/ts4.7/util/collection/LruCache.d.ts +99 -0
- package/dist/types/ts4.7/util/collection/array.d.ts +207 -0
- package/dist/types/ts4.7/util/collection/typedArray.d.ts +17 -0
- package/dist/types/ts4.7/util/comparison/compare.d.ts +33 -0
- package/dist/types/ts4.7/util/config/ValueProvider.d.ts +17 -0
- package/dist/types/ts4.7/util/date/date.d.ts +32 -0
- package/dist/types/ts4.7/util/error/stack.d.ts +79 -0
- package/dist/types/ts4.7/util/fun/debounce.d.ts +12 -0
- package/dist/types/ts4.7/util/fun/flow.d.ts +38 -0
- package/dist/types/ts4.7/util/fun/function.d.ts +5 -0
- package/dist/types/ts4.7/util/fun/memoize.d.ts +24 -0
- package/dist/types/ts4.7/util/fun/throttle.d.ts +34 -0
- package/dist/types/ts4.7/util/iteration/iterable.d.ts +26 -0
- package/dist/types/ts4.7/util/map/map.d.ts +17 -0
- package/dist/types/ts4.7/util/math/math.d.ts +79 -0
- package/dist/types/ts4.7/util/mpeg/parseSidxBox.d.ts +100 -0
- package/dist/types/ts4.7/util/network/request.d.ts +18 -0
- package/dist/types/ts4.7/util/object/clone.d.ts +68 -0
- package/dist/types/ts4.7/util/object/equalDeep.d.ts +54 -0
- package/dist/types/ts4.7/util/object/lazy.d.ts +54 -0
- package/dist/types/ts4.7/util/object/merge.d.ts +72 -0
- package/dist/types/ts4.7/util/object/mergeDeep.d.ts +153 -0
- package/dist/types/ts4.7/util/object/mutableType.d.ts +87 -0
- package/dist/types/ts4.7/util/object/object.d.ts +55 -0
- package/dist/types/ts4.7/util/object/readonlyType.d.ts +100 -0
- package/dist/types/ts4.7/util/range/IntersectionRanges.d.ts +37 -0
- package/dist/types/ts4.7/util/range/Ranges.d.ts +126 -0
- package/dist/types/ts4.7/util/range/UnionRanges.d.ts +37 -0
- package/dist/types/ts4.7/util/range/timeRanges.d.ts +14 -0
- package/dist/types/ts4.7/util/serialization/ParseError.d.ts +48 -0
- package/dist/types/ts4.7/util/serialization/json.d.ts +30 -0
- package/dist/types/ts4.7/util/serialization/primitives.d.ts +24 -0
- package/dist/types/ts4.7/util/serialization/stringifyForPrint.d.ts +14 -0
- package/dist/types/ts4.7/util/set/set.d.ts +17 -0
- package/dist/types/ts4.7/util/string/StringReader.d.ts +149 -0
- package/dist/types/ts4.7/util/string/string.d.ts +130 -0
- package/dist/types/ts4.7/util/string/uid.d.ts +20 -0
- package/dist/types/ts4.7/util/type.d.ts +173 -0
- package/dist/types/ts4.7/util/url/resolveUrl.d.ts +23 -0
- package/docs/EVENTS.md +187 -0
- package/docs/GLOBALS.md +45 -0
- package/docs/NETWORKING.md +161 -0
- package/package.json +118 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/index.ts", "../src/util/type.ts", "../src/util/url/resolveUrl.ts", "../src/util/string/uid.ts", "../src/error/ErrorOrigin.ts", "../src/error/ReportableError.ts", "../src/error/IllegalArgumentError.ts", "../src/util/map/map.ts", "../src/util/string/string.ts", "../src/util/math/math.ts", "../src/util/serialization/ParseError.ts", "../src/util/string/StringReader.ts", "../src/util/set/set.ts", "../src/util/object/object.ts", "../src/util/serialization/json.ts", "../src/util/serialization/stringifyForPrint.ts", "../src/util/serialization/primitives.ts", "../src/util/comparison/compare.ts", "../src/util/collection/LinkedList.ts", "../src/error/AbortError.ts", "../src/event/Signal.ts", "../src/logging/LogTarget.ts", "../src/event/EventHost.ts", "../src/util/fun/function.ts", "../src/util/async/Abort.ts", "../src/util/async/abortUtils.ts", "../src/util/async/TaskQueue.ts", "../src/util/collection/array.ts", "../src/util/range/Ranges.ts", "../src/util/range/timeRanges.ts", "../src/util/range/UnionRanges.ts", "../src/util/range/IntersectionRanges.ts", "../src/util/collection/typedArray.ts", "../src/core/cloneable.ts", "../src/util/object/mergeDeep.ts", "../src/util/object/merge.ts", "../src/error/IllegalStateError.ts", "../src/core/disposable.ts", "../src/util/object/lazy.ts", "../src/util/object/equalDeep.ts", "../src/util/object/clone.ts", "../src/util/network/request.ts", "../src/util/buffer/buffer.ts", "../src/util/buffer/BufferError.ts", "../src/util/buffer/BufferReader.ts", "../src/error/ValidationError.ts", "../src/error/MediaUnsupportedError.ts", "../src/util/mpeg/parseSidxBox.ts", "../src/util/iteration/iterable.ts", "../src/util/async/TimeoutSlot.ts", "../src/util/fun/throttle.ts", "../src/util/collection/LruCache.ts", "../src/util/fun/memoize.ts", "../src/util/fun/flow.ts", "../src/util/fun/debounce.ts", "../src/util/error/stack.ts", "../src/util/date/date.ts", "../src/util/config/ValueProvider.ts", "../src/util/buffer/BufferWriter.ts", "../src/global/environment.ts", "../src/util/browser/searchParams.ts", "../src/error/TimeoutError.ts", "../src/util/async/Deferred.ts", "../src/util/async/promise.ts", "../src/util/async/sleep.ts", "../src/util/async/timeout.ts", "../src/util/async/never.ts", "../src/util/async/TimeoutController.ts", "../src/global/globalRegistry.ts", "../src/persistence/StoragePersistence.ts", "../src/persistence/persistenceRef.ts", "../src/logging/getLogLevelFromSearch.ts", "../src/logging/Logger.ts", "../src/persistence/PersistentItem.ts", "../src/patch/patchTarget.ts", "../src/client/Version.ts", "../src/client/userAgent/tokenizeUserAgent.ts", "../src/client/userAgent/userAgentRuleHelpers.ts", "../src/client/userAgent/defaultUserAgentRules.ts", "../src/client/userAgent/UserAgentInfo.ts", "../src/client/userAgent/parseUserAgent.ts", "../src/client/userAgent/hasBrowser.ts", "../src/patch/network/fetch.ts", "../src/network/RequesterImplEventMap.ts", "../src/network/RequestError.ts", "../src/network/responseUtil.ts", "../src/global/globalTarget.ts", "../src/network/requesterUtil.ts", "../src/network/logging/networkLoggingHandler.ts", "../src/network/browser/NetworkInformation.ts", "../src/network/metrics/networkMetricsModel.ts", "../src/network/metrics/NetworkMetricsControllerImpl.ts", "../src/network/metrics/networkMetricsGlobal.ts", "../src/network/Requester.ts", "../src/network/RequesterImpl.ts", "../src/network/createRequester.ts", "../src/network/requesterGlobal.ts", "../src/event/DomEventHost.ts", "../src/event/nextEventAsPromise.ts", "../src/network/network.ts", "../src/logging/logTimer.ts", "../src/logging/ConsoleLogHandler.ts", "../src/logging/HistoryLogHandler.ts", "../src/logging/VinylLogging.ts", "../src/event/redispatchEvents.ts", "../src/event/onAny.ts", "../src/error/UnreachableCodeError.ts", "../src/error/StackOverflowError.ts", "../src/error/ServiceResponseError.ts", "../src/core/clearable.ts"],
|
|
4
|
+
"sourcesContent": ["/** Auto-generated from build scripts */\nexport * from './util/type'\nexport * from './util/url/resolveUrl'\nexport * from './util/string/uid'\nexport * from './util/string/string'\nexport * from './util/string/StringReader'\nexport * from './util/set/set'\nexport * from './util/serialization/stringifyForPrint'\nexport * from './util/serialization/primitives'\nexport * from './util/serialization/json'\nexport * from './util/serialization/ParseError'\nexport * from './util/range/timeRanges'\nexport * from './util/range/UnionRanges'\nexport * from './util/range/Ranges'\nexport * from './util/range/IntersectionRanges'\nexport * from './util/object/readonlyType'\nexport * from './util/object/object'\nexport * from './util/object/mutableType'\nexport * from './util/object/mergeDeep'\nexport * from './util/object/merge'\nexport * from './util/object/lazy'\nexport * from './util/object/equalDeep'\nexport * from './util/object/clone'\nexport * from './util/network/request'\nexport * from './util/mpeg/parseSidxBox'\nexport * from './util/math/math'\nexport * from './util/map/map'\nexport * from './util/iteration/iterable'\nexport * from './util/fun/throttle'\nexport * from './util/fun/memoize'\nexport * from './util/fun/function'\nexport * from './util/fun/flow'\nexport * from './util/fun/debounce'\nexport * from './util/error/stack'\nexport * from './util/date/date'\nexport * from './util/config/ValueProvider'\nexport * from './util/comparison/compare'\nexport * from './util/collection/typedArray'\nexport * from './util/collection/array'\nexport * from './util/collection/LruCache'\nexport * from './util/collection/LinkedList'\nexport * from './util/collection/CacheMap'\nexport * from './util/buffer/buffer'\nexport * from './util/buffer/BufferWriter'\nexport * from './util/buffer/BufferReader'\nexport * from './util/buffer/BufferError'\nexport * from './util/browser/searchParams'\nexport * from './util/async/timeout'\nexport * from './util/async/sleep'\nexport * from './util/async/promise'\nexport * from './util/async/never'\nexport * from './util/async/abortUtils'\nexport * from './util/async/TimeoutSlot'\nexport * from './util/async/TimeoutController'\nexport * from './util/async/TaskQueue'\nexport * from './util/async/Deferred'\nexport * from './util/async/Abort'\nexport * from './persistence/persistenceRef'\nexport * from './persistence/StoragePersistence'\nexport * from './persistence/PersistentItem'\nexport * from './persistence/KeyValuePersistence'\nexport * from './patch/patchTarget'\nexport * from './patch/network/fetch'\nexport * from './network/responseUtil'\nexport * from './network/requesterUtil'\nexport * from './network/requesterGlobal'\nexport * from './network/network'\nexport * from './network/createRequester'\nexport * from './network/RequesterImplEventMap'\nexport * from './network/RequesterImpl'\nexport * from './network/Requester'\nexport * from './network/RequestInterceptor'\nexport * from './network/RequestError'\nexport * from './network/metrics/networkMetricsModel'\nexport * from './network/metrics/networkMetricsGlobal'\nexport * from './network/metrics/NetworkMetricsControllerImpl'\nexport * from './network/metrics/NetworkMetricsController'\nexport * from './network/logging/networkLoggingHandler'\nexport * from './network/browser/NetworkInformation'\nexport * from './logging/logTimer'\nexport * from './logging/getLogLevelFromSearch'\nexport * from './logging/VinylLogging'\nexport * from './logging/Logger'\nexport * from './logging/LogTarget'\nexport * from './logging/HistoryLogHandler'\nexport * from './logging/ConsoleLogHandler'\nexport * from './global/globalTarget'\nexport * from './global/globalRegistry'\nexport * from './global/environment'\nexport * from './event/redispatchEvents'\nexport * from './event/onAny'\nexport * from './event/nextEventAsPromise'\nexport * from './event/Signal'\nexport * from './event/EventHost'\nexport * from './event/DomEventHost'\nexport * from './error/ValidationError'\nexport * from './error/UnreachableCodeError'\nexport * from './error/TimeoutError'\nexport * from './error/StackOverflowError'\nexport * from './error/ServiceResponseError'\nexport * from './error/ReportableError'\nexport * from './error/MediaUnsupportedError'\nexport * from './error/IllegalStateError'\nexport * from './error/IllegalArgumentError'\nexport * from './error/ErrorOrigin'\nexport * from './error/AbortError'\nexport * from './core/disposable'\nexport * from './core/cloneable'\nexport * from './core/clearable'\nexport * from './core/Unsubscribe'\nexport * from './client/Version'\nexport * from './client/userAgent/userAgentRuleHelpers'\nexport * from './client/userAgent/tokenizeUserAgent'\nexport * from './client/userAgent/parseUserAgent'\nexport * from './client/userAgent/hasBrowser'\nexport * from './client/userAgent/defaultUserAgentRules'\nexport * from './client/userAgent/UserAgentInfo'\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/*\n * Type-safety utility\n */\n\n/**\n * Distributes the value types of an array into a union.\n */\nexport type Flatten<T> = T extends readonly any[] ? T[number] : T\n\n/**\n * Property keys of an object that do not map to functions.\n */\nexport type NonFunctionPropertyNames<T> = {\n [K in keyof T]: T[K] extends (...args: any) => any ? never : K\n}[keyof T]\n\n/**\n * All primitive types.\n */\nexport type Primitive =\n | bigint\n | boolean\n | number\n | string\n | symbol\n | null\n | undefined\n\n/**\n * An empty object, safer than using `object` type.\n */\nexport type AnyRecord = Record<never, any>\n\n/**\n * never, with a message to help explain the problem.\n * https://github.com/microsoft/TypeScript/issues/33098\n */\nexport type Never<Message extends string> = [never, Message]\n\n/**\n * A type representing any type of function.\n */\nexport type Fun = (...args: any[]) => any\n\n/**\n * Enforces that the type represents data that can be serialized via JSON.stringify.\n */\nexport type JsonCompatible<T> = unknown extends T\n ? never\n : T extends bigint | symbol | Fun\n ? never\n : T extends\n | boolean\n | number\n | string\n | null\n | undefined\n | { toJSON(): any }\n ? T\n : T extends readonly any[]\n ? readonly JsonCompatible<T[number]>[]\n : {\n [P in keyof T]: JsonCompatible<T[P]>\n }\n\n/**\n * A compile-time check that the given value/array/object is serializable via JSON.stringify.\n *\n * A value is serializable if any of these are true:\n * - It is an object with a toJSON() function\n * - It is an object with only serializable members.\n * - It is an array with only serializable elements.\n * - It is type boolean, string, number, null, or undefined.\n */\nexport function jsonCompatible<T>(value: JsonCompatible<T>): T {\n return value as T\n}\n\n/**\n * An object whose properties are all optional, and all sub-properties are optional.\n * Note: does not convert array or tuple elements to Partial.\n */\nexport type PartialDeep<T> = T extends Fun | Primitive\n ? T\n : T extends object\n ? {\n [P in keyof T]?: PartialDeep<T[P]>\n }\n : T\n\n/**\n * Defines specific properties of T that are not required.\n */\nexport type PickPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\n/**\n * Possible values `typeof` operator may return.\n */\nexport type Typeof =\n | 'bigint'\n | 'boolean'\n | 'function'\n | 'number'\n | 'object'\n | 'string'\n | 'symbol'\n | 'undefined'\n\n/**\n * Given a possible result from `typeof`, provides the type to the matched value.\n */\nexport type FromTypeof<T extends Typeof> = T extends 'bigint'\n ? bigint\n : T extends 'boolean'\n ? boolean\n : T extends 'function'\n ? Fun\n : T extends 'number'\n ? number\n : T extends 'object'\n ? object | null\n : T extends 'string'\n ? string\n : T extends 'symbol'\n ? symbol\n : T extends 'undefined'\n ? undefined\n : any\n\n/**\n * Extracts values from T which extends type U.\n */\nexport type ExtractValues<T, U> = Pick<\n T,\n {\n [P in keyof T]: T[P] extends U ? P : never\n }[keyof T]\n>\n\n/**\n * Excludes values from T which extends type U.\n */\nexport type ExcludeValues<T, U> = Pick<\n T,\n {\n [P in keyof T]: T[P] extends U ? never : P\n }[keyof T]\n>\n\nexport type Maybe<T> = T | undefined | null\n\n/**\n * Infers the element type from an Array type.\n */\nexport type ElementType<T extends readonly any[]> =\n T extends ReadonlyArray<infer E> ? E : never\n\n/**\n * Infers the element type from a Set type.\n */\nexport type SetElementType<T extends ReadonlySet<any>> =\n T extends ReadonlySet<infer E> ? E : never\n\n/**\n * Enforces type T to be in an invariant position.\n * For example `Invariant<Square>` cannot be assigned to type `Invariant<Polygon>` or vice versa.\n *\n * This should be used when an interface with type parameter T needs strict invariance in addition to what the\n * compiler can infer from use.\n *\n * {@link https://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science)}\n */\nexport type Invariant<T> = T &\n Required<T> &\n ((input: T & Required<T>) => T & Required<T>)\n\nexport function invariant<T>(): Invariant<T> {\n return undefined as any\n}\n\n/**\n * Enforces type T to be in a covariant position.\n * For example `Invariant<Square>` can be assigned to type `Invariant<Polygon>` but not vice versa.\n *\n * This should be used when an interface with type parameter T does not explicitly use T in an\n * output position, but the interface implies `out T`.\n */\nexport type Covariant<T> = () => T\n\nexport function covariant<T>(): Covariant<T> {\n return undefined as any\n}\n\n/**\n * Enforces type T to be in a covariant position.\n * For example `Invariant<Polygon>` can be assigned to type `Invariant<Square>` but not vice versa.\n *\n * This should be used when an interface with type parameter T does not explicitly use T in an\n * input position, but the interface implies `in T`.\n */\nexport type Contravariant<T> = (input: T) => void\n\nexport function contravariant<T>(): Contravariant<T> {\n return undefined as any\n}\n\n/**\n * A type which may either be a direct instance of T or a promise that resolves to T.\n */\nexport type MaybePromise<T> = PromiseLike<T> | T\n\n/**\n * Deeply excludes all keys from T extending K.\n */\nexport type OmitDeep<T, K extends keyof any> = Omit<\n {\n [P in keyof T]: T[P] extends Primitive ? T[P] : OmitDeep<T[P], K>\n },\n K\n>\n\n/**\n * Make properties of T extending K optional.\n */\nexport type Optional<T, K extends keyof T> = Partial<Pick<T, K>> & Omit<T, K>\n\n/**\n * Make properties of T extending K optional, recursively.\n */\nexport type OptionalDeep<T, K extends keyof any> = Optional<\n {\n [P in keyof T]: T[P] extends Primitive ? T[P] : OptionalDeep<T[P], K>\n },\n K & keyof T\n>\n\n/**\n * true if T extends never, otherwise false\n */\nexport type IsNever<T> = [T] extends [never] ? true : false\n\n/**\n * true if T extends any, otherwise false\n */\nexport type IsAny<T> = 0 extends 1 & T ? true : false\n\n/**\n * Determines whether a property `P` of object type `U` is declared as optional.\n *\n * This checks whether the `{}` type (an empty object) is assignable to\n * `Pick<U, P>`. In TypeScript, this is true only when `P` is marked optional\n * using the `?` modifier in the type definition.\n *\n * Importantly, this detects *actual optionality* rather than checking whether\n * the property's type includes `undefined`. For example:\n *\n * ```ts\n * type A = { x?: string }; // optional\n * type B = { x: string | undefined }; // required but allows undefined\n *\n * IsPropertyOptional<A, \"x\"> // true\n * IsPropertyOptional<B, \"x\"> // false\n * ```\n *\n * @template U - The object type containing the property.\n * @template P - The key of the property to test.\n * @returns `true` if `P` is an optional property, otherwise `false`.\n */\nexport type IsPropertyOptional<U, P extends keyof U> =\n AnyRecord extends Pick<U, P> ? true : false\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Resolves a relative URI against a base URL using string manipulation,\n * avoiding the overhead of constructing `URL` objects.\n *\n * Handles the same cases as `new URL(relative, base)`:\n * - Absolute URIs (with scheme) are returned as-is.\n * - Protocol-relative URIs (`//host/path`) inherit the base scheme.\n * - Absolute paths (`/path`) replace the base path.\n * - Relative paths are resolved against the base directory.\n *\n * @param relative The relative (or absolute) URI to resolve.\n * @param base The base URL string to resolve against.\n * @returns A resolved absolute URL string.\n */\nexport function resolveUrl(relative: string, base: string): string {\n // Absolute URI \u2014 has a scheme.\n if (relative.indexOf('://') > 0) return relative\n\n // Protocol-relative.\n if (relative.startsWith('//')) {\n const schemeEnd = base.indexOf('://')\n return base.substring(0, schemeEnd + 1) + relative\n }\n\n const schemeEnd = base.indexOf('://') + 3\n const pathStart = base.indexOf('/', schemeEnd)\n const origin = pathStart === -1 ? base : base.substring(0, pathStart)\n\n // Absolute path.\n if (relative.startsWith('/')) return origin + relative\n\n // Empty relative \u2014 return base as-is.\n if (relative === '') return base\n\n // Relative path \u2014 resolve against base directory.\n const basePath = pathStart === -1 ? '/' : base.substring(pathStart)\n const lastSlash = basePath.lastIndexOf('/')\n const dir = basePath.substring(0, lastSlash + 1)\n\n return origin + resolveDots(dir + relative)\n}\n\n/**\n * Extracts the hostname from an absolute URL string.\n *\n * @param url An absolute URL string (e.g. `https://example.com:8080/path`).\n * @returns The hostname (e.g. `example.com`).\n */\nexport function getHostname(url: string): string {\n const start = url.indexOf('://') + 3\n let end = url.indexOf('/', start)\n if (end === -1) end = url.length\n const hostPort = url.substring(start, end)\n const colon = hostPort.indexOf(':')\n return colon === -1 ? hostPort : hostPort.substring(0, colon)\n}\n\n/**\n * Resolves `.` and `..` segments in a path.\n */\nfunction resolveDots(path: string): string {\n // Fast path: no dots to resolve.\n if (path.indexOf('.') === -1) return path\n\n const parts = path.split('/')\n const out: string[] = []\n for (let i = 0; i < parts.length; i++) {\n const p = parts[i]\n if (p === '..') {\n // Don't pop past root.\n if (out.length > 1) out.pop()\n } else if (p !== '.') {\n out.push(p)\n }\n }\n return out.join('/')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Returns a short unique id.\n * Optimized for performance. (2.1M ops/s \u00B1 0.71%)\n * The returned value is 7-22 A-Za-z0-9 characters.\n *\n * The uniqueness of the returned string is the current timestamp to ms precision plus 2^53-1\n * possible values.\n *\n * The odds of a collision where n is the number of UIDs created within the same millisecond:\n * 1-((2^53-2)/(2^53-1))^C(n, 2)\n *\n * For 1000 UIDs created within the same millisecond the odds of a collision are:\n * 00.0000000055%, or 1 in 550 billion.\n */\nexport function createShortUid(): string {\n // Date.now 7-8 chars, Math.random: 0-13\n return Date.now().toString(36) + Math.random().toString(36).substring(2)\n}\n\n/**\n * @deprecated use createShortUid\n */\nexport const createUid = createShortUid\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const ErrorOrigin = {\n /**\n * The error originated from Vinyl and was reported from the uncaught exception or promise\n * rejection handlers.\n */\n UNCAUGHT: 'uncaught',\n\n /**\n * The error originated from Vinyl and was caught.\n */\n INTERNAL: 'internal',\n\n /**\n * A Vinyl interface was used incorrectly by a consumer.\n */\n API: 'api',\n\n /**\n * The error originated from a failed service call (500 errors).\n */\n SERVICE_EXTERNAL: 'serviceExternal',\n\n /**\n * The error originated from a failed service call (400 errors).\n */\n SERVICE_INTERNAL: 'serviceInternal',\n\n /**\n * The error originated from a problem playing provided media.\n * The reporter is from a component such as the element, source buffer, media source, etc.\n */\n MEDIA: 'media',\n\n /**\n * The error originated from a problem parsing input data.\n * Such as a malformed Dash or HLS manifest.\n */\n PARSING: 'parsing',\n\n /**\n * The error originated from an incompatibility with browser APIs,\n * such as EME.\n */\n COMPATIBILITY: 'compatibility',\n\n /**\n * The error originated from DRM.\n * This does not include internal or service errors, only errors from the creation of media keys or media key\n * sessions.\n */\n DRM: 'drm',\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ErrorOrigin } from './ErrorOrigin'\nimport type { Json } from '@/util/serialization/json'\n\nexport enum ErrorLevel {\n /**\n * Fatal errors are not recoverable.\n */\n FATAL = 'fatal',\n\n /**\n * Warn level errors should be reported, but are recoverable.\n */\n WARN = 'warn',\n\n /**\n * Silent errors should not be reported. For example aborting a play operation due to a new track loading.\n */\n SILENT = 'silent',\n}\n\n/**\n * A Serializable Error that contains an error origin.\n */\nexport class ReportableError extends Error {\n get [Symbol.toStringTag](): string {\n return 'ReportableError'\n }\n\n constructor(\n message?: string,\n readonly origin: string = ErrorOrigin.INTERNAL,\n readonly level: ErrorLevel = ErrorLevel.FATAL\n ) {\n super(message)\n Object.setPrototypeOf(this, ReportableError.prototype)\n }\n\n get name(): string {\n return this[Symbol.toStringTag]\n }\n\n /**\n * All ReportableError instances must be serializable.\n */\n toJSON(): Json {\n return {\n level: this.level,\n message: this.message,\n name: this.name,\n origin: this.origin,\n stack: this.stack,\n }\n }\n}\n\n/**\n * Returns true if the given object is a ReportableError.\n */\nexport function isReportableError(error: any): error is ReportableError {\n // This does not use instanceof ReportableError to avoid ambiguity in the case where this module\n // is loaded multiple times due to version conflicts or code splitting.\n return error instanceof Error && 'origin' in error && 'level' in error\n}\n\n/**\n * Returns true if the error is a ReportableError and is level SILENT.\n * @param error\n */\nexport function isSilentError(error: any): boolean {\n return isReportableError(error) && error.level === ErrorLevel.SILENT\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ErrorOrigin } from './ErrorOrigin'\nimport { ReportableError } from './ReportableError'\n\n/**\n * An error indicating that a method was called with illegal arguments.\n */\nexport class IllegalArgumentError extends ReportableError {\n get [Symbol.toStringTag](): string {\n return 'IllegalArgumentError'\n }\n\n constructor(\n message: string,\n readonly isInternal = true\n ) {\n super(message, isInternal ? ErrorOrigin.INTERNAL : ErrorOrigin.API)\n Object.setPrototypeOf(this, IllegalArgumentError.prototype)\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Gets the value on map for the given key if it exists, otherwise sets [key] to `defaultValue`,\n * returning the newly set value.\n *\n * @param map\n * @param key\n * @param defaultValue\n */\nexport function getOrSet<K, V>(\n map: Map<K, V>,\n key: K,\n defaultValue: (key: K) => V\n): V {\n if (map.has(key)) {\n return map.get(key) as V\n } else {\n const value = defaultValue(key)\n map.set(key, value)\n return value\n }\n}\n\n/**\n * Flips a map so that the keys become the values and the values become the keys.\n *\n * @param map\n * @return Returns a new map.\n */\nexport function flipMap<K, V>(map: ReadonlyMap<K, V>): Map<V, K> {\n const result = new Map<V, K>()\n for (const [key, value] of map) {\n result.set(value, key)\n }\n return result\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IllegalArgumentError } from '@/error/IllegalArgumentError'\nimport { flipMap } from '@/util/map/map'\nimport type { Maybe } from '@/util/type'\nimport type { ReadonlyRecord } from '@/util/object/readonlyType'\n\n/**\n * @private\n */\nconst locale = {\n variableNotDefined: \"Variable '{name}' is not defined\",\n} as const\n\n/**\n * The default substitution pattern, matching `{name}`.\n */\nconst DEFAULT_SUBSTITUTE_PATTERN = /\\{(\\w+)}/g\n\n/**\n * Substitutes named variable references in a string.\n *\n * Example:\n * ```\n * substitute('{fruit}, {veg}', { fruit: 'apples', veg: 'carrots' }) // 'apples, carrots'\n * ```\n *\n * @param str The template string.\n * @param variables A record of variable names to values.\n * @param pattern A regex whose first capture group is the variable name. Defaults to `{name}`.\n * @throws IllegalArgumentError if a referenced variable is not defined.\n */\nexport function substitute(\n str: string,\n variables: Readonly<Record<string, any>>,\n pattern: RegExp = DEFAULT_SUBSTITUTE_PATTERN\n): string {\n return str.replace(pattern, (_, name) => {\n if (!(name in variables)) {\n throw new IllegalArgumentError(\n locale.variableNotDefined.replace('{name}', String(name))\n )\n }\n return String(variables[name])\n })\n}\n\n/**\n * Replaces substitution tokens.\n *\n * Each identifier may be suffixed, within the enclosing '$' characters, with an additional format tag for number\n * padding following the prototype: `%0[width]d`\n * For example:\n * 'Segment_$Time%04d$' Where the `Time` property is `42` will have a replacement value of: `Segment_0042`\n */\nexport function substituteIdentifiers(\n str: string,\n props: ReadonlyRecord<string, string | number>\n): string {\n return str.replace(/\\$(\\w*)(?:%0(\\d+)d)?\\$/g, (_, match, maxLength) => {\n if (!match) return '$'\n if (!(match in props)) {\n throw new IllegalArgumentError(\n `Template substitution token '${match}' was not understood`\n )\n }\n let prop = String(props[match])\n if (maxLength) prop = prop.padStart(maxLength, '0')\n return prop\n })\n}\n\n/**\n * Returns true if the character is one of: ' ', '\\t', '\\n', '\\r'\n *\n * @param charCode The character code to test\n */\nexport function isWhitespaceChar(charCode: number): boolean {\n return (\n charCode === 0x20 || // ' ' (space)\n charCode === 0x09 || // '\\t' (tab)\n charCode === 0x0d || // '\\r' (carriage return)\n charCode === 0x0a // '\\n' (line feed)\n )\n}\n\nconst encodedEntitiesRegex = /&(#(\\d+)|\\w+);/gi\n\n/**\n * Predefined general xml entities\n * https://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent\n */\nexport const predefinedDecodeEntities: ReadonlyMap<string, string> = /* @__PURE__ */ new Map([\n ['apos', \"'\"],\n ['amp', '&'],\n ['lt', '<'],\n ['gt', '>'],\n ['quot', '\"'],\n])\n\n/**\n * Replaces all specified entities with their mapped representations.\n * For example (using {@link predefinedDecodeEntities}):\n * ```\n * `<Hello to y'all!>` becomes `<Hello to y'all!>`\n * ```\n *\n * @param str\n * @param namedEntities\n */\nexport function decodeEntities(\n str: string,\n namedEntities: ReadonlyMap<string, string> = predefinedDecodeEntities\n): string {\n if (encodedEntitiesRegex.test(str)) {\n return str.replace(\n encodedEntitiesRegex,\n (substring, entityName, codePoint) => {\n if (codePoint !== undefined)\n return String.fromCharCode(parseInt(codePoint))\n const entityValue = namedEntities.get(entityName.toLowerCase())\n if (!entityValue) return substring\n return entityValue\n }\n )\n } else {\n return str\n }\n}\n\nconst standardEntityValueToNames = /* @__PURE__ */ flipMap(predefinedDecodeEntities)\nconst entitiesRegex = /['&<>\"]/g\n\n/**\n * Encodes the predefined xml standard entities into their entity names.\n *\n * & to &\n * ' to '\n * > to >\n * < to <\n * \" to "\n *\n * @param str\n */\nexport function encodeEntities(str: string): string {\n if (entitiesRegex.test(str)) {\n return str.replace(entitiesRegex, (entityValue) => {\n const entityName = standardEntityValueToNames.get(entityValue)\n return `&${entityName};`\n })\n } else {\n return str\n }\n}\n\n/**\n * Returns true if the two strings are equal, optionally ignoring case.\n *\n * @param a\n * @param b\n * @param ignoreCase\n */\nexport function eqStr(\n a: string | null,\n b: string | null,\n ignoreCase = false\n): boolean {\n if (a == null && b == null) return true\n if (a == null || b == null) return false\n if (a === b) return true\n if (ignoreCase)\n return a.length === b.length && a.toLowerCase() === b.toLowerCase()\n return false\n}\n\n/**\n * Given a single character string, returns the char code of the first character.\n *\n * @param str A single character string from which to get the first code point.\n */\nexport function char(str: string): number {\n return str.charCodeAt(0)\n}\n\n/**\n * Returns the substring of string after the last instance of searchString, excluding searchString.\n * If searchString is not found, the whole string will be returned.\n *\n * @param string\n * @param searchString\n * @param caseSensitive If true (default) the search will be case-sensitive.\n */\nexport function substringAfterLast(\n string: string,\n searchString: string,\n caseSensitive = true\n): string {\n const i = (caseSensitive ? string : string.toLowerCase()).lastIndexOf(\n caseSensitive ? searchString : searchString.toLowerCase()\n )\n if (i === -1) return string\n return string.substring(i + searchString.length)\n}\n\n/**\n * Returns the substring of string before the first occurrence of searchString, excluding\n * searchString.\n * If searchString is not found, the whole string will be returned.\n *\n * @param string\n * @param searchString\n * @param caseSensitive If true (default) the search will be case-sensitive.\n */\nexport function substringBefore(\n string: string,\n searchString: string,\n caseSensitive = true\n): string {\n const i = (caseSensitive ? string : string.toLowerCase()).indexOf(\n caseSensitive ? searchString : searchString.toLowerCase()\n )\n if (i === -1) return string\n return string.substring(0, i)\n}\n\n/**\n * Tokenizes a string into lowercase alphanumeric words.\n *\n * E.g. `'Amazon Music x86_64'` becomes `['amazon', 'music', 'x86', '64']`\n *\n * @param str\n */\nexport function tokenizeWords(str: string): string[] {\n const words: string[] = []\n const regex = /[a-z\\d]+/gi\n let match: RegExpMatchArray | null\n while ((match = regex.exec(str))) {\n words.push(match[0].toLowerCase())\n }\n return words\n}\n\nexport function toLowerCase<T extends string>(str: T): Lowercase<T> {\n return str.toLowerCase() as Lowercase<T>\n}\n\nexport function toUpperCase<T extends string>(str: T): Uppercase<T> {\n return str.toUpperCase() as Uppercase<T>\n}\n\n/**\n * If the given string is greater than a max length, truncate the string with an indicator.\n * Example:\n * truncate('a very long string', 10) // 'a very ...'\n *\n * @param str A nullable string.\n * @param maxLength\n * @param indicator The string to indicate there was truncation, default is an ellipses \u2026 (U+2026)\n * @return Returns the truncated string, or the nullish value if str is nullish.\n */\nexport function truncate<T extends Maybe<string>>(\n str: T,\n maxLength: number,\n indicator = '\u2026'\n): T | string {\n if (str == null) return str\n if (str.length > maxLength)\n return str.substring(0, maxLength - indicator.length) + indicator\n return str\n}\n\n/**\n * Converts a string to kebab-case.\n *\n * This function transforms camelCase, PascalCase, snake_case, and space-separated\n * strings into a normalized kebab-case format. It removes non-alphanumeric characters\n * (excluding hyphens), collapses multiple delimiters, and trims leading/trailing hyphens.\n *\n * @example\n * toKebabCase(\"HelloWorld\") // \"hello-world\"\n * toKebabCase(\"hello_world test\") // \"hello-world-test\"\n * toKebabCase(\"SomeText123\") // \"some-text123\"\n *\n * @param str - The input string to convert.\n * @returns The kebab-case version of the input.\n */\nexport function toKebabCase(str: string): string {\n return str\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .replace(/[^a-zA-Z0-9-]/g, '')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '')\n .toLowerCase()\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Clamps the given value between `min` and `max`.\n *\n * @param value\n * @param min The lower bounds.\n * @param max The upper bounds. If this value is less than min, this value will always be returned.\n */\nexport function clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max)\n}\n\n/**\n * Linearly interpolates between `from` and `to` given a percentage.\n *\n * @param from The alpha = 0.0 value\n * @param to The alpha = 1.0 value\n * @param alpha A percentage where 0 is `from`, and 1 is `to`. E.g. 0.5 would return halfway\n * between `from` and `to`.\n */\nexport function lerp(from: number, to: number, alpha: number): number {\n return from + (to - from) * alpha\n}\n\n/**\n * Floors a value to the nearest snap interval.\n *\n * Examples:\n *\n * ```\n * floorToNearest(3, 2) // 2\n * floorToNearest(16, 5) // 15\n * floorToNearest(16, 5, 2) // 17\n * ```\n *\n * @param value The value to floor with the given snap interval and offset.\n * @param snap The interval between output values. Should be a finite, non-zero number.\n * @param offset The offset of the interval. E.g. if snap is 10 and offset is 1, values will be\n * snapped to `-19, -9, 1, 11, 21, 31, 41, ...`\n */\nexport function floorToNearest(\n value: number,\n snap: number,\n offset = 0\n): number {\n return Math.floor((value - offset) / snap) * snap + offset\n}\n\n/**\n * Ceilings a value to the nearest snap interval.\n *\n * Examples:\n *\n * ```\n * ceilToNearest(3, 2) // 4\n * ceilToNearest(16, 5) // 20\n * ceilToNearest(10, 5) // 10\n * ceilToNearest(16, 5, 2) // 22\n * ```\n *\n * @param value The value to ceil with the given snap interval and offset.\n * @param snap The interval between output values. Should be a finite, non-zero number.\n * @param offset The offset of the interval. E.g. if snap is 10 and offset is 1, values will be\n * snapped to `-19, -9, 1, 11, 21, 31, 41, ...`\n */\nexport function ceilToNearest(value: number, snap: number, offset = 0): number {\n return Math.ceil((value - offset) / snap) * snap + offset\n}\n\n/**\n * Rounds a value to the nearest snap interval.\n *\n * Examples:\n *\n * ```\n * roundToNearest(3, 2) // 4\n * roundToNearest(16, 5) // 15\n * roundToNearest(18, 5) // 20\n * roundToNearest(16, 10, 2) // 22\n * ```\n *\n * @param value The value to round with the given snap interval and offset.\n * @param snap The interval between output values. Should be a finite, non-zero number.\n * @param offset The offset of the interval. E.g. if snap is 10 and offset is 1, values will be\n * snapped to `-19, -9, 1, 11, 21, 31, 41, ...`\n */\nexport function roundToNearest(\n value: number,\n snap: number,\n offset = 0\n): number {\n return Math.round((value - offset) / snap) * snap + offset\n}\n\n/**\n * Returns true if `x` is within `tolerance` of `y`.\n *\n * @param x\n * @param y\n * @param tolerance\n */\nexport function closeTo(\n x: number,\n y: number,\n tolerance: number = Number.EPSILON\n): boolean {\n return Math.abs(x - y) <= tolerance\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { clamp } from '@/util/math/math'\n\nexport interface ParseError {\n /**\n * The full reason and location.\n */\n readonly message: string\n\n /**\n * The reason for the error.\n */\n readonly reason: string\n\n /**\n * A description of the location the error occurred.\n */\n readonly location: string\n}\n\nexport interface PrintStringPositionOptions {\n /**\n * The maximum number of character columns to output.\n * The number of columns shown will be the min of this value and the number of columns\n * at the index row.\n * The default is 60.\n */\n maxColumns?: number\n\n /**\n * The caret indicator.\n * The caret will be printed on a second row, directly underneath the column index\n * represents. This may more than one character, where the first character will align\n * with the index column.\n * The default value is '^'.\n */\n caret?: string\n\n /**\n * A number between 0 and 1 representing the percentage of trailing to leading characters.\n * 0 Indicates all trailing, 1 indicates all leading, and 0.5 indicates that the index\n * column is as close to the middle as possible.\n * The default value is 0.6.\n */\n split?: number\n}\n\n/**\n * Given a string and a position index, gets the row the index represents, displaying the\n * surrounding characters, with a second row showing a caret indicator pointing at the index.\n *\n * @param str\n * @param index The\n * @param options Display options\n */\nexport function printStringPosition(\n str: string,\n index: number,\n options?: PrintStringPositionOptions\n): string {\n const caret = options?.caret || '^'\n index = clamp(index, 0, str.length)\n const minIndex = str.lastIndexOf('\\n', index - 1) + 1\n let maxIndex = str.indexOf('\\n', index)\n if (maxIndex === -1) maxIndex = str.length\n const split = options?.split === undefined ? 0.6 : options.split\n const cols = (options?.maxColumns ?? 60) - caret.length\n let leadingChars = cols * split\n let trailingChars = cols * (1 - split)\n const maxLeadingChars = index - minIndex\n const maxTrailingChars = maxIndex - index\n if (leadingChars > maxLeadingChars) {\n trailingChars += leadingChars - maxLeadingChars\n leadingChars = maxLeadingChars\n if (trailingChars > maxTrailingChars) trailingChars = maxTrailingChars\n } else if (trailingChars > maxTrailingChars) {\n leadingChars += trailingChars - maxTrailingChars\n trailingChars = maxTrailingChars\n if (leadingChars > maxLeadingChars) leadingChars = maxLeadingChars\n }\n let out = str.substring(index - leadingChars, index + trailingChars) + '\\n'\n out += ' '.repeat(leadingChars) + caret\n return out\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ErrorOrigin } from '@/error/ErrorOrigin'\nimport { ReportableError } from '@/error/ReportableError'\nimport type { ParseError } from '@/util/serialization/ParseError'\nimport { printStringPosition } from '@/util/serialization/ParseError'\nimport { eqStr, isWhitespaceChar } from './string'\nimport type { Json } from '@/util/serialization/json'\n\n/**\n * A cursor on a string that allows for fast, naive parsing.\n */\nexport class StringReader {\n /**\n * @param data The string to read.\n */\n constructor(public data: string) {}\n\n /**\n * The current cursor.\n * This should always be between the range 0 and `data.length`\n */\n position = 0\n\n /**\n * Returns true if the current {@link position} is less than the source data's length.\n */\n hasNext(): boolean {\n return this.position < this.data.length\n }\n\n /**\n * Returns the number of characters remaining to be read.\n */\n get remaining(): number {\n return this.data.length - this.position\n }\n\n /**\n * Returns the length of {@link data}.\n */\n get length(): number {\n return this.data.length\n }\n\n /**\n * Throws a {@link StringParseError} where the location uses {@link printStringPosition} to\n * show a friendly message indicating the current position.\n *\n * @param message\n * @param offset The offset to add to the current position.\n */\n err(message: string, offset = 0): never {\n throw new StringParseError(this.data, this.position + offset, message)\n }\n\n /**\n * Reads and returns the character code at the current position.\n * To read the next character without advancing the cursor, use {@link peek}\n *\n * Note:\n * This method has no bounds checking; if {@link position} is greater than or equal to\n * `str.length` then NaN will be returned and {@link position} will still be incremented.\n *\n * @see String.charCodeAt\n */\n next(): number {\n return this.data.charCodeAt(this.position++)\n }\n\n /**\n * Reads characters until the predicate returns false or the data length has been reached.\n *\n * @param predicate Given the char code at the cursor index, returns true if the character\n * should be included in the substring result.\n * @returns number The start position.\n */\n while(predicate: (charCode: number) => boolean): number {\n const start = this.position\n let i = start\n const n = this.data.length\n while (i < n && predicate(this.data.charCodeAt(i))) i++\n this.position = i\n return start\n }\n\n /**\n * Reads characters until the predicate returns true or the string length has been reached.\n *\n * @param predicate\n * @returns number Returns the start index.\n */\n until(predicate: (charCode: number) => boolean): number {\n return this.while((charCode) => !predicate(charCode))\n }\n\n /**\n * Reads characters until the given character has been found or the string length has been\n * reached.\n *\n * @param charCode\n * @return number Returns the start index.\n */\n untilChar(charCode: number): number {\n return this.until((cc) => cc === charCode)\n }\n\n /**\n * Reads characters until the given string has been found or the string length has been\n * reached.\n *\n * @param string The string to match\n * @return number Returns the start index.\n */\n untilString(string: string): number {\n const start = this.position\n const index = this.data.indexOf(string, this.position)\n this.position = index === -1 ? this.data.length : index\n return start\n }\n\n /**\n * The same as {@link while} except returns the read substring as a result.\n */\n substringWhile(predicate: (charCode: number) => boolean): string {\n return this.data.substring(this.while(predicate), this.position)\n }\n\n /**\n * The same as {@link until} except returns the read substring as a result.\n */\n substringUntil(predicate: (charCode: number) => boolean): string {\n return this.substringWhile((charCode) => !predicate(charCode))\n }\n\n /**\n * The same as {@link untilChar} except returns the read substring as a result.\n */\n substringUntilChar(charCode: number): string {\n return this.substringWhile((iCharCode) => charCode !== iCharCode)\n }\n\n /**\n * Reads the substring from the current index with the given length.\n *\n * @param length\n */\n substr(length: number): string {\n const sub = this.data.substring(this.position, this.position + length)\n this.position += sub.length\n return sub\n }\n\n /**\n * Reads the expected string from the current position.\n * If the read string doesn't match the given string, a {@link StringParseError} is thrown.\n *\n * @param str The string required to match at the current position.\n * @param ignoreCase If true, the comparison will be case-insensitive.\n */\n read(str: string, ignoreCase = false): string {\n const actual = this.substr(str.length)\n if (!eqStr(actual, str, ignoreCase))\n this.err(`Expected '${str}', actual: '${actual}'`)\n return actual\n }\n\n /**\n * Reads the expected char code from the current position.\n * If the read character doesn't match the given character, a {@link StringParseError} is\n * thrown.\n *\n * @param charCode The character code required to match at the current position.\n */\n readChar(charCode: number): number {\n const actual = this.next()\n if (actual !== charCode)\n this.err(\n `Expected '${String.fromCharCode(charCode)}', ` +\n `actual: '${String.fromCharCode(actual)}'`\n )\n return actual\n }\n\n /**\n * Returns the character at the current position without advancing the cursor.\n *\n * Note:\n * This method has no bounds checking; if {@link position} is greater than or equal to\n * `str.length` then `NaN` will be returned.\n *\n * @see String.charCodeAt\n */\n get peek(): number {\n return this.data.charCodeAt(this.position)\n }\n\n /**\n * Reads through all whitespace characters, returning the starting index.\n */\n white(): number {\n return this.while(isWhitespaceChar)\n }\n\n /**\n * If {@link peek} equals the given character code, returns true and advances the index by\n * one.\n *\n * @param charCode\n */\n charIf(charCode: number): boolean {\n if (this.peek === charCode) {\n this.next()\n return true\n } else {\n return false\n }\n }\n\n /**\n * If the given string matches the substring at the current position, returns true and advances\n * the index by the string's length.\n */\n stringIf(string: string, ignoreCase = false): boolean {\n if (this.remaining < string.length) return false\n const substr = this.data.substring(\n this.position,\n this.position + string.length\n )\n const match = eqStr(substr, string, ignoreCase)\n if (match) this.position += string.length\n return match\n }\n}\n\nconst locale = {\n messageSeparator: ', at: \\n',\n} as const\n\nexport class StringParseError extends ReportableError implements ParseError {\n get [Symbol.toStringTag](): string {\n return 'StringParseError'\n }\n\n readonly location: string\n\n constructor(\n str: string,\n readonly position: number,\n readonly reason: string\n ) {\n const location = printStringPosition(str, position)\n super(\n `${reason}${locale.messageSeparator}${location}`,\n ErrorOrigin.PARSING\n )\n this.location = location\n Object.setPrototypeOf(this, StringParseError.prototype)\n }\n\n toJSON(): Json {\n return {\n ...super.toJSON(),\n position: this.position,\n location: this.location,\n reason: this.reason,\n }\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Returns the union of two sets. That is, the unique elements of A and B.\n *\n * @param a\n * @param b\n * @return Returns a new Set `A \u222A B`\n */\nexport function union<T, U>(a: ReadonlySet<T>, b: ReadonlySet<U>): Set<T | U> {\n return new Set([...a, ...b])\n}\n\n/**\n * Returns the set difference of A and B. That is, the elements of A that are not in B.\n *\n * @param a\n * @param b\n * @return Returns a new Set that is `A \\ B`\n */\nexport function diff<T>(a: ReadonlySet<T>, b: ReadonlySet<T>): Set<T> {\n const out: Set<T> = new Set()\n a.forEach((e) => {\n if (!b.has(e)) out.add(e)\n })\n return out\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Returns the keys (both property names and symbols) of all own properties.\n * Unlike `Object.keys`, this will also return non-enumerable properties.\n * Does not return keys inherited from the object's prototype.\n *\n * Implementation details:\n * If Reflect is supported, Reflect.ownKeys will be used, wrapping in a Set, otherwise\n * Object.getOwnPropertyNames and Object.getOwnPropertySymbols will be used. This will typically\n * be equivalent. Proxies may alter the order of keys but platforms that do not support Reflect\n * will also typically not support Proxies.\n *\n * @see Reflect.ownKeys\n * @see Object.getOwnPropertyNames\n * @see Object.getOwnPropertySymbols\n * @param obj\n * @return Returns a `Set` of the own properties of the target object, including non-enumerable.\n * The ordering will be: positive numeric indexes in order, strings in insertion order,\n * symbols in insertion order.\n */\nexport function ownKeys<T>(obj: T): Set<keyof T> {\n if (!obj) return new Set()\n if (typeof Reflect !== 'undefined')\n return new Set(Reflect.ownKeys(obj) as (keyof T)[])\n const properties = new Set()\n Object.getOwnPropertyNames(obj).forEach((item) => properties.add(item))\n Object.getOwnPropertySymbols(obj).forEach((item) => properties.add(item))\n return properties as Set<keyof T>\n}\n\n/**\n * Returns the prototype chain of the given object.\n *\n * Example:\n * ```\n * class A {}\n * class B extends A {}\n * class C extends B {}\n * const c = new C()\n * getPrototypeChain(c) // [c, C.prototype, B.prototype, A.prototype, Object.prototype]\n * ```\n * @param obj\n */\nexport function getPrototypeChain(obj: any): any[] {\n const out = []\n let current = obj\n do {\n out.push(current)\n } while ((current = Object.getPrototypeOf(current)))\n return out\n}\n\n/**\n * Returns true if the given object represents a plain object and not a class instance.\n */\nexport function isPlainObject(value: any): boolean {\n if (!value || typeof value !== 'object' || Array.isArray(value))\n return false\n const proto = Object.getPrototypeOf(value)\n // if not the null prototype, not a plain object:\n return !proto || !Object.getPrototypeOf(proto)\n}\n\n/**\n * Gets the object's value for the given key if it exists, otherwise sets [key] to\n * `defaultValue`, returning the newly set value.\n *\n * @param object\n * @param key\n * @param defaultValue\n */\nexport function getOrSetProp<K extends keyof T, T extends object>(\n object: T,\n key: K,\n defaultValue: () => T[K]\n): T[K] {\n if (key in object) {\n return object[key]\n } else {\n const value = defaultValue()\n object[key] = value\n return value\n }\n}\n\n/**\n * Returns true if value is not null. Provides a type guard which can be used in filters.\n * Example:\n * [1, null, 2, 3, null, 4].filter(isNonNull) // type number[]\n * @param value\n */\nexport function isNonNull<T>(value: T): value is NonNullable<T> {\n return value != null\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { isPlainObject } from '@/util/object/object'\nimport type { AnyRecord, Fun, IsAny } from '@/util/type'\n\n/**\n * A representation of the conversion the toJson function will apply to make an input JSON compatible.\n */\nexport type Json<T = any> =\n IsAny<T> extends true\n ? // inputs of type `any` are allowed, use AnyRecord as the mapped type to pass JsonCompatible<T> validation.\n AnyRecord\n : unknown extends T\n ? never\n : T extends bigint | symbol | Fun\n ? string\n : T extends { toJSON(): infer R }\n ? R\n : T extends boolean | number | string | null | undefined\n ? T\n : T extends Set<infer U>\n ? Json<U>[]\n : T extends readonly any[]\n ? Json<T[number]>[]\n : {\n [P in keyof T]: Json<T[P]>\n }\n\n/**\n * Converts a dynamic value to a serializable value.\n * The value must be either an object with a toJSON function, a primitive, or a plain object\n * where all enumerable properties map to values supported by this function.\n * Properties not enumerable will be omitted, properties not serializable will be converted\n * to strings.\n * - bigint -> value.toString\n * - function -> [function <name>]\n * - symbol -> [symbol <name>]\n *\n * Error instances have a special case where non-serializable errors will still have their\n * name, message, and stack properties serialized.\n *\n * Note that this is not intended for use in serializing objects where all values are known;\n * it's intended to cover the case of reporting or logging an unknown object that may or may not\n * be serializable.\n *\n * @param value\n */\nexport function toJson<T>(value: T): Json<T> {\n return toJsonInternal(value, new Set())\n}\n\nfunction toJsonInternal(value: any, visited: Set<any>): any {\n switch (typeof value) {\n case 'object':\n return objectToJsonInternal(value, visited)\n case 'undefined':\n case 'boolean':\n case 'number':\n case 'string':\n return value\n case 'function':\n return `[function ${value.name}]`\n case 'symbol':\n return `[symbol ${value.toString().slice(7, -1)}]`\n case 'bigint':\n return value.toString()\n }\n}\n\nfunction objectToJsonInternal(value: any, visited: Set<any>): any {\n if (value == null) return value\n if (visited.has(value)) return `<circular reference: ${String(value)}>`\n visited.add(value)\n if ('toJSON' in value && typeof value.toJSON === 'function')\n return value.toJSON()\n if (value instanceof Set) {\n return Array.from(value).map((e) => toJsonInternal(e, visited))\n } else if (Array.isArray(value)) {\n return value.map((e) => toJsonInternal(e, visited))\n } else {\n if (isPlainObject(value)) {\n const o: Record<any, any> = {}\n for (const key in value) {\n o[key] = toJsonInternal(value[key], visited)\n }\n return o\n } else if (value instanceof Error) {\n // non-enumerable properties\n return {\n name: value.name,\n message: value.message,\n stack: value.stack,\n }\n } else {\n return value.toString()\n }\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { toJson } from './json'\nimport { truncate } from '@/util/string/string'\n\n/**\n * Stringifies a value suitable for human-readable messages.\n *\n * The value is first run through {@link toJson} which makes it safe for serialization.\n * (Circular references will become strings, and toJSON serializers will be respected)\n * The safe json is then stringified, using a JSON.stringify replacer that preserves\n * representations for NaN, Infinity, undefined, and Symbol.\n *\n * @param value Any value.\n * @param maxLength If provided, will truncate the final string.\n * @param indicator The truncation indicator.\n */\nexport function stringifyForPrint(\n value: any,\n maxLength?: number,\n indicator = '\u2026'\n): string {\n // Preserve Symbol, function, and undefined, NaN, and +/- Infinity\n let str = JSON.stringify(\n toJson(value),\n (_, value) => {\n const type = typeof value\n if (['undefined'].includes(type)) {\n return `{{${String(value)}}}`\n }\n if (type === 'number') {\n if (Number.isNaN(value) || !Number.isFinite(value))\n return `{{${value.toString()}}}`\n }\n return value\n },\n ' '\n )\n // Replace templated\n\n str = str.replace(/(\"\\{\\{.*}}\")/g, (_, s) => {\n return s.substring(3, s.length - 3)\n })\n if (maxLength) str = truncate(str, maxLength, indicator)\n return str\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Maybe } from '@/util/type'\n\n/**\n * Returns true if the given string is 'true' or '1'\n *\n * @param str\n */\nexport function parseBoolean(str: Maybe<string>): boolean {\n return str === 'true' || str === '1'\n}\n\n/**\n * Returns the toString() value of the given object.\n *\n * @param value\n */\nexport function stringify(value: any): string {\n if (value === null) return 'null'\n if (value === undefined) return 'undefined'\n return value.toString()\n}\n\n/**\n * Parses a string into an integer.\n * If the string is nullish, empty, or is not a finite number, returns null.\n */\nexport function parseIntSafe(\n str: Maybe<string>,\n radix?: number\n): number | null {\n if (!str) return null\n const value = parseInt(str, radix)\n if (!Number.isFinite(value)) return null\n return value\n}\n\n/**\n * Parses a string into a number.\n * If the string is nullish, empty, or is not a finite number, returns null.\n */\nexport function parseFloatSafe(str: Maybe<string>): number | null {\n if (!str) return null\n const value = parseFloat(str)\n if (!Number.isFinite(value)) return null\n return value\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Maybe, Primitive } from '@/util/type'\n\n/**\n * A function that can be used as a comparator for sorting.\n * Return > 0 if `a` is greater than `b`\n * Return = 0 if `a` equals `b`\n * Return < 0 if `a` is less than `b\n */\nexport type Comparator<A, B = A> = (a: A, b: B) => number\n\n/**\n * Provides a primitive value plucked from an element. Used in {@link compareBy} for building a comparator.\n */\nexport type CompareBySelector<T> = (value: T) => Exclude<Primitive, symbol>\n\n/**\n * Creates a comparator for objects of type T by using a selector to pick a primitive value.\n *\n * @param selectors\n */\nexport function compareBy<T>(\n ...selectors: CompareBySelector<T>[]\n): Comparator<Maybe<T>> {\n return (a: Maybe<T>, b: Maybe<T>): number => {\n if (a == null && b == null) return 0\n if (a == null) return -1\n if (b == null) return 1\n for (const selector of selectors) {\n const comparison = compare(selector(a), selector(b))\n if (comparison !== 0) return comparison\n }\n return 0\n }\n}\n\n/**\n * Reverses the order of a comparator.\n *\n * @param comparator\n */\nexport function reversed<A, B>(comparator: Comparator<A, B>): Comparator<A, B> {\n return (a: A, b: B): number => -comparator(a, b)\n}\n\n/**\n * Compares two primitive values.\n *\n * Return 1 if `a` is greater than `b`\n * Return 0 if `a` equals `b`\n * Return -1 if `a` is less than `b\n */\nexport function compare<T extends Exclude<Primitive, symbol>>(\n a: T | null,\n b: T | null\n): number {\n if (a == null && b == null) return 0\n if (a == null) return -1\n if (b == null) return 1\n if (a > b) return 1\n if (a < b) return -1\n return 0\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * A doubly-linked node.\n *\n * If a node is to move from one list to another, it must be removed first.\n */\nexport interface LinkedNode<T> {\n previous: LinkedNode<T> | null\n value: T\n removed: boolean\n next: LinkedNode<T> | null\n}\n\n/**\n * A standard doubly-linked list implementation.\n */\nexport class LinkedList<T> implements Iterable<T> {\n private _head: LinkedNode<T> | null = null\n private _tail: LinkedNode<T> | null = null\n\n /**\n * Returns the current head.\n */\n get head(): LinkedNode<T> | null {\n return this._head\n }\n\n /**\n * Returns the current tail.\n */\n get tail(): LinkedNode<T> | null {\n return this._tail\n }\n\n /**\n * Returns true if the list is empty.\n */\n get empty(): boolean {\n return this._head === null\n }\n\n /**\n * Creates a new node for the given value, adding it to the end of the list.\n *\n * @param value\n * @return Returns the newly created node.\n */\n push(value: T): LinkedNode<T> {\n const node: LinkedNode<T> = {\n previous: this._tail,\n value,\n removed: false,\n next: null,\n }\n this.pushNode(node)\n return node\n }\n\n /**\n * Appends all given values to the end of this list.\n *\n * @param values\n */\n pushAll(...values: T[]) {\n for (const value of values) {\n this.push(value)\n }\n }\n\n /**\n * Appends the given node to the tail of this list.\n * If the node is already at the tail, it will no-op.\n * If the node is in this list, it will be removed.\n *\n * @param node The node to add or move to the tail of this list.\n */\n pushNode(node: LinkedNode<T>) {\n if (this._tail === node) return\n this.remove(node)\n node.removed = false\n node.next = null\n node.previous = this._tail\n if (this._tail) this._tail.next = node\n this._tail = node\n if (!this._head) this._head = node\n }\n\n /**\n * Removes the last node (the tail), returning it.\n * If this list is empty, null is returned.\n */\n pop(): LinkedNode<T> | null {\n const node = this._tail\n if (!node) return null\n this.remove(node)\n return node\n }\n\n /**\n * Creates a new node, adding it to the front of the list.\n *\n * @param value The value to box in a linked node.\n * @return Returns the new node.\n */\n unshift(value: T): LinkedNode<T> {\n const node: LinkedNode<T> = {\n previous: null,\n value,\n removed: true,\n next: this._head,\n }\n this.unshiftNode(node)\n return node\n }\n\n /**\n * Prepends all the given values to the head of this list.\n * The values will maintain their order.\n *\n * E.g.\n * ```\n * list.unshiftAll(8, 9, 10) // 8, 9, 10\n * list.unshiftAll(4, 5, 6, 7) // 4, 5, 6, 7, 8, 9, 10\n * list.unshiftAll(1, 2, 3) // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10\n * ```\n *\n * @param values The values to box in linked nodes.\n */\n unshiftAll(...values: T[]) {\n for (let i = values.length - 1; i >= 0; i--) {\n this.unshift(values[i])\n }\n }\n\n /**\n * Prepends the given node to the head of this list.\n * - If the node is already at the head, it will no-op.\n * - If the node is in this list, it will be removed.\n *\n * @param node The node to add or move to the head of this list.\n */\n unshiftNode(node: LinkedNode<T>) {\n if (this._head === node) return\n this.remove(node)\n node.removed = false\n node.previous = null\n node.next = this._head\n if (this._head) this._head.previous = node\n this._head = node\n if (!this._tail) this._tail = node\n }\n\n /**\n * Removes the first node (the head), returning it.\n * - If this list is empty, null is returned.\n */\n shift(): LinkedNode<T> | null {\n const node = this._head\n if (!node) return null\n this.remove(node)\n return node\n }\n\n /**\n * Removes the given linked node.\n *\n * @param node\n */\n remove(node: LinkedNode<T>): void {\n if (node.removed) return\n node.removed = true\n if (node.previous) node.previous.next = node.next\n if (node.next) node.next.previous = node.previous\n if (this._head === node) this._head = node.next\n if (this._tail === node) this._tail = node.previous\n }\n\n /**\n * Inserts the given node before pointer node.\n *\n * @param node The node to insert before pointer. If this node is currently in this list, it\n * will first be removed.\n * @param pointer The pointer node.\n */\n insertNodeBefore(node: LinkedNode<T>, pointer: LinkedNode<T>) {\n if (!node.removed && node.next === pointer) return\n this.remove(node)\n node.removed = false\n if (pointer.previous) {\n pointer.previous.next = node\n node.previous = pointer.previous\n } else {\n this._head = node\n node.previous = null\n }\n node.next = pointer\n pointer.previous = node\n }\n\n /**\n * Inserts the given node after pointer node.\n *\n * @param node The node to insert after pointer. If this node is currently in this list, it\n * will first be removed.\n * @param pointer The pointer node.\n */\n insertNodeAfter(node: LinkedNode<T>, pointer: LinkedNode<T>) {\n if (!node.removed && node.previous === pointer) return\n this.remove(node)\n node.removed = false\n if (pointer.next) {\n pointer.next.previous = node\n node.next = pointer.next\n } else {\n this._tail = node\n node.next = null\n }\n node.previous = pointer\n pointer.next = node\n }\n\n /**\n * Iterates over every element, invoking the given callback.\n *\n * @param callback\n */\n forEach(callback: (element: T) => void): void {\n let current: LinkedNode<T> | null = this._head\n while (current) {\n if (!current.removed) callback(current.value)\n current = current.next\n }\n }\n\n /**\n * Similar to `Array.prototype.some`, returns true if at least one element passes the given\n * predicate.\n *\n * @param predicate\n */\n some(predicate: (element: T) => boolean): boolean {\n let current: LinkedNode<T> | null = this._head\n while (current) {\n if (!current.removed && predicate(current.value)) return true\n current = current.next\n }\n return false\n }\n\n /**\n * Returns the first node matching the given predicate.\n *\n * @param predicate A function where, when true is returned, returns the current node.\n */\n find(predicate: (element: T) => boolean): LinkedNode<T> | null {\n let current: LinkedNode<T> | null = this._head\n while (current) {\n if (!current.removed && predicate(current.value)) return current\n current = current.next\n }\n return null\n }\n\n /**\n * Returns the last node matching the given predicate.\n *\n * @param predicate A function where, when true is returned, returns the current node.\n */\n findLast(predicate: (element: T) => boolean): LinkedNode<T> | null {\n let current: LinkedNode<T> | null = this._tail\n while (current) {\n if (!current.removed && predicate(current.value)) return current\n current = current.previous\n }\n return null\n }\n\n /**\n * Clears this list.\n */\n clear(): void {\n let current = this._head\n while (current != null) {\n const next = current.next\n current.removed = true\n current = next\n }\n this._head = null\n this._tail = null\n }\n\n /**\n * Returns a new iterator, starting at the head.\n */\n [Symbol.iterator](): IterableIterator<T> {\n return this.createIterator(this._head, null, (node) => node.next)\n }\n\n /**\n * Returns a new reversed iterable where the iterator starts at the tail, moving backwards\n * to the head.\n */\n reversed(): IterableIterator<T> {\n return this.createIterator(this._tail, null, (node) => node.previous)\n }\n\n /**\n * Creates an iterable iterator, starting at the specified node, getting the next node from\n * the next() function.\n *\n * Note that using iterators is not as performant as {@link some} or {@link forEach}\n *\n * @param start The starting node. (inclusive)\n * @param end The ending node (exclusive).\n * @param next A method that is given the current node, and returns the next node.\n */\n createIterator(\n start: LinkedNode<T> | null,\n end: LinkedNode<T> | null,\n next: (current: LinkedNode<T>) => LinkedNode<T> | null\n ) {\n let current: LinkedNode<T> | null = start\n return {\n [Symbol.iterator](): IterableIterator<T> {\n return this\n },\n\n next: (): IteratorResult<T> => {\n if (current === end || !current) {\n return {\n value: undefined,\n done: true,\n }\n }\n\n const result = {\n value: current.value,\n done: false,\n }\n current = next(current)\n while (current?.removed) {\n current = next(current)\n }\n return result\n },\n }\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ErrorLevel, ReportableError } from './ReportableError'\nimport { ErrorOrigin } from '@/error/ErrorOrigin'\n\nexport class AbortError extends ReportableError {\n get [Symbol.toStringTag](): string {\n return 'AbortError'\n }\n\n constructor(\n message = 'Operation aborted',\n origin: string = ErrorOrigin.INTERNAL,\n level: ErrorLevel = ErrorLevel.SILENT\n ) {\n super(message, origin, level)\n Object.setPrototypeOf(this, AbortError.prototype)\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Disposable } from '@/core/disposable'\nimport type { Unsubscribe } from '@/core/Unsubscribe'\nimport { LinkedList } from '@/util/collection/LinkedList'\n\nexport type EventHandler<in T> = (event: T) => void\n\nexport interface SignalOptions {\n /**\n * If true, removes the handler after the first invocation.\n */\n once?: boolean\n}\n\nexport interface Signal<T> {\n /**\n * Returns true if this signal has no handlers.\n */\n readonly empty: boolean\n\n /**\n * Adds an event handler that will be invoked upon signal dispatch.\n *\n * @param handler The handler to invoke on signal dispatch.\n * @param options Options for changing listening behavior.\n * @return Unsubscribe - Returns a method where, when invoked, will remove the handler.\n * If the handler has already been removed, Unsubscribe will do nothing.\n */\n listen(handler: EventHandler<T>, options?: SignalOptions): Unsubscribe\n}\n\n/**\n * An object that may dispatch one type of event and have handlers for that event.\n */\nexport class SignalImpl<T> implements Signal<T>, Disposable {\n private handlers = /* @__PURE__ */ new LinkedList<EventHandler<any>>()\n\n get empty(): boolean {\n return this.handlers.empty\n }\n\n listen(handler: EventHandler<T>, options?: SignalOptions): Unsubscribe {\n const remove = () => this.handlers.remove(node)\n const node = this.handlers.push(\n options?.once\n ? (event) => {\n remove()\n handler(event)\n }\n : handler\n )\n return remove\n }\n\n /**\n * Invokes all handlers, providing the given event.\n *\n * Handlers may add/remove callbacks or do a nested dispatch.\n *\n * If a handler is added within a handler, the new handler will not be invoked until the\n * next dispatch.\n *\n * @param event\n */\n dispatch(event: T): void {\n const handlers = this.handlers\n const tail = handlers.tail\n handlers.some((handler) => {\n handler(event)\n return handler === tail!.value\n })\n }\n\n /**\n * Removes all handlers.\n */\n clear(): void {\n this.handlers.clear()\n }\n\n /**\n * Same as clear.\n */\n dispose(): void {\n this.clear()\n }\n}\n\n/**\n * Constructs a new SignalImpl.\n */\nexport function signal<T>(): SignalImpl<T> {\n return new SignalImpl<T>()\n}\n\nexport const emptySignal: Signal<any> = {\n empty: true,\n\n listen(): Unsubscribe {\n return () => {}\n },\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Provides the logging prefix for all logs made by this target.\n */\nexport interface LogTarget {\n /**\n * A string prefix for all log statements made by this target.\n */\n readonly logPrefix: string\n}\n\n/**\n * A static counter for creating a locally-unique id.\n */\nlet counter = 0\n\n/**\n * Creates a unique log prefix.\n *\n * @param target Either a string or an object with a toStringTag.\n * The log prefix will append a unique counter.\n */\nexport function createLogPrefix(\n target: string | { readonly [Symbol.toStringTag]: string }\n): string {\n const name =\n typeof target === 'string' ? target : target[Symbol.toStringTag]\n return `${name}/${++counter}`\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Disposable } from '@/core/disposable'\nimport type { EventHandler, SignalImpl, SignalOptions } from './Signal'\nimport { signal } from './Signal'\nimport type { Unsubscribe } from '@/core/Unsubscribe'\nimport { getOrSet } from '@/util/map/map'\nimport type { Covariant } from '@/util/type'\nimport { covariant } from '@/util/type'\nimport { createLogPrefix, type LogTarget } from '@/logging/LogTarget'\n\nexport interface EventDispatcher<in EventMap> extends LogTarget {\n /**\n * Dispatches an event.\n *\n * @param type The key of the event within `EventMap`\n * @param event If the passed event is read-only, then it may be re-used/cached. Otherwise,\n * it should be a new event object every dispatch. If no target property is set on the event,\n * the target will be set to this host.\n */\n dispatch<K extends keyof EventMap>(type: K, event: EventMap[K]): void\n}\n\nexport interface ReadonlyEventHost<out EventMap> {\n /**\n * Adds an event handler for the given typed event.\n *\n * @param type The key representing the event type to listen for.\n * @param handler A callback to invoke when the event with the given type is dispatched.\n * @param options Options for changing listening behavior.\n * @return Returns a method, when invoked, removes the handler.\n */\n on<K extends keyof EventMap>(\n type: K,\n handler: EventHandler<EventMap[K]>,\n options?: SignalOptions\n ): Unsubscribe\n\n /**\n * Returns true if the event host has any listeners.\n */\n hasAnyListeners(): boolean\n\n /**\n * Returns true if the event host has any listeners for the given type.\n */\n hasListeners(type: keyof EventMap): boolean\n\n /**\n * Exists for EventMap type inference.\n *\n * @private\n */\n __eventMapType: Covariant<EventMap>\n}\n\n/**\n * An object that may dispatch events and have handlers for those events.\n * Similar to the DOM's `EventTarget`, this is a basic event system based on event naming.\n *\n * Some of the advantages of EventHost over EventTarget:\n * - Not all supported platforms support EventTarget construction or extension.\n * - EventTarget is designed for the DOM, with bubble and capture phases not necessary in Vinyl.\n * - Event types are strict.\n * - Events can be plain objects, no need to extend CustomEvent.\n * - Easier unsubscription and disposal; reduces the risk of memory leaks.\n *\n * EventHost supports concurrent modification, that is, handlers may be added or removed during\n * the execution of another handler.\n */\nexport interface EventHost<EventMap>\n extends ReadonlyEventHost<EventMap>, EventDispatcher<EventMap> {}\n\nexport class EventHostImpl<EventMap>\n implements EventHost<EventMap>, Disposable\n{\n get [Symbol.toStringTag](): string {\n return 'EventHostImpl'\n }\n\n readonly logPrefix = /* @__PURE__ */ createLogPrefix(this)\n\n private readonly signals = /* @__PURE__ */ new Map<keyof EventMap, SignalImpl<any>>()\n\n hasAnyListeners(): boolean {\n for (const value of this.signals.values()) {\n if (!value.empty) return true\n }\n return false\n }\n\n hasListeners(type: keyof EventMap): boolean {\n return this.signals.get(type)?.empty === false\n }\n\n on<K extends keyof EventMap>(\n type: K,\n handler: EventHandler<EventMap[K]>,\n options?: SignalOptions\n ): Unsubscribe {\n const sig = getOrSet(this.signals, type, () => signal<any>())\n return sig.listen(handler, options)\n }\n\n dispatch<K extends keyof EventMap>(type: K, event: EventMap[K]): void {\n this.signals.get(type)?.dispatch(event)\n }\n\n dispose(): void {\n for (const signal of this.signals.values()) signal.dispose()\n this.signals.clear()\n }\n\n __eventMapType = /* @__PURE__ */ covariant<EventMap>()\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * No-op, does nothing.\n */\nexport function noop(..._: any[]): void {}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AbortError } from '@/error/AbortError'\nimport type { ReadonlyEventHost } from '@/event/EventHost'\nimport { EventHostImpl } from '@/event/EventHost'\nimport type { Unsubscribe } from '@/core/Unsubscribe'\nimport { noop } from '@/util/fun/function'\n\nexport interface AbortEvent {\n readonly reason: Error\n}\n\nexport interface AbortEventMap {\n readonly abort: AbortEvent\n}\n\nexport interface ReadonlyAbort extends ReadonlyEventHost<AbortEventMap> {\n /**\n * True if aborted.\n */\n aborted(): boolean\n\n /**\n * The reason passed to `abort`.\n */\n readonly reason: Error | null\n\n /**\n * Throws the signal's abort reason if the signal has been aborted; otherwise it does nothing.\n */\n throwIfAborted(): void\n\n /**\n * Invokes a callback on 'abort', or immediately if already aborted.\n */\n onAborted(callback: (event: AbortEvent) => void): Unsubscribe\n\n /**\n * Returns a native signal on supported platforms.\n */\n readonly nativeSignal: AbortSignal | null\n}\n\n/**\n * Returns a new native abort controller, if this environment supports AbortController.abort.\n *\n * Supported in Chrome 66+, Edge 16+, Firefox 57+, Opera 53+, Safari 11.3+,\n */\nexport function createAbortController(): AbortController | null {\n return typeof AbortController === 'undefined' ||\n typeof AbortSignal === 'undefined'\n ? null\n : new AbortController()\n}\n\nexport interface AbortDeps {\n readonly abortControllerFactory?: () => AbortController | null\n}\n\n/**\n * An Abort instance emits an 'abort' event when aborted.\n *\n * A native `AbortController` is encapsulated if the platform supports it, allowing for fetch\n * cancellation.\n */\nexport class Abort\n extends EventHostImpl<AbortEventMap>\n implements ReadonlyAbort\n{\n get [Symbol.toStringTag](): string {\n return 'Abort'\n }\n\n constructor(private readonly deps?: AbortDeps) {\n super()\n }\n\n private _reason: Error | null = null\n\n /**\n * True if this signal is aborted.\n */\n aborted(): boolean {\n return this._reason != null\n }\n\n /**\n * A JavaScript value providing the abort reason, once this signal has aborted.\n */\n get reason(): Error | null {\n return this._reason\n }\n\n private _nativeSignal: AbortSignal | null = null\n\n get nativeSignal(): AbortSignal | null {\n if (!this._nativeSignal) {\n const abortController = (\n this.deps?.abortControllerFactory ?? createAbortController\n )()\n if (!abortController) return null\n if (this.aborted()) {\n abortController.abort(this.reason)\n } else {\n this.on(\n 'abort',\n (event) => abortController.abort(event.reason),\n { once: true }\n )\n }\n this._nativeSignal = abortController.signal\n }\n return this._nativeSignal\n }\n\n /**\n * Throws this signal's abort reason if the signal has been aborted; otherwise it does nothing.\n */\n throwIfAborted(): void {\n if (this.aborted()) throw this.reason!\n }\n\n /**\n * Invokes a callback on 'abort', or immediately if already aborted.\n */\n onAborted(callback: (event: AbortEvent) => void): Unsubscribe {\n if (this.aborted()) {\n callback({ reason: this.reason! })\n return noop\n } else {\n return this.on('abort', callback)\n }\n }\n\n /**\n * Sets to the aborted state with the given reason, and emits an 'abort' event.\n * If this signal is already aborted, this will do nothing.\n */\n abort(reason: Error = new AbortError()) {\n if (this.aborted()) return\n this._reason = reason\n this.dispatch('abort', { reason })\n }\n}\n\nexport interface AbortSlot {\n readonly value: ReadonlyAbort\n abort(reason?: Error): void\n}\n\n/**\n * Creates a reusable abort slot that exposes a read-only `Abort` instance.\n *\n * Each call to `abort()` triggers the current `Abort` instance, and then replaces it\n * with a fresh instance for future use. This is useful in systems where cancelable operations\n * are repeatedly started and each one needs its own `Abort` signal.\n *\n * @returns An object with:\n * - `value`: A read-only reference to the current `Abort` instance.\n * - `abort(reason)`: Aborts the current instance with the given reason, then creates a new one.\n *\n * Example:\n * ```ts\n * const slot = createAbortSlot()\n * fetch(url, { signal: slot.value.signal })\n * slot.abort() // aborts current Abort value and prepares a new instance\n * ```\n */\nexport function createAbortSlot(): AbortSlot {\n let abort = new Abort()\n\n return {\n get value(): ReadonlyAbort {\n return abort\n },\n\n abort(reason: Error = new AbortError()): void {\n abort.abort(reason)\n abort = new Abort()\n },\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ReadonlyAbort } from './Abort'\nimport type { Maybe } from '@/util/type'\n\n/**\n * Races a promise and an abort signal.\n * Generally, it is better to write your promises in a way that they reject and cleanup after an\n * abort event (see `promise`), however, external promises don't always provide this\n * capability.\n * Some browsers accept an abort signal for `fetch` and `addEventListener`, but this is not\n * widely supported enough to be relied upon.\n *\n * If both the abort signal is in an aborted state, and the given promise is in a resolved state,\n * the returned promise will be rejected with the abort reason.\n */\nexport function withAbort<T>(\n promise: Promise<T>,\n abort?: Maybe<ReadonlyAbort>\n): Promise<T> {\n if (!abort) return promise\n if (abort.aborted()) return Promise.reject(abort.reason!)\n return new Promise((resolve, reject) => {\n const abortSub = abort.on(\n 'abort',\n () => {\n reject(abort.reason!)\n },\n { once: true }\n )\n promise.then(resolve).catch(reject).finally(abortSub)\n })\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { LinkedList, type LinkedNode } from '@/util/collection/LinkedList'\nimport { createAbortSlot, type ReadonlyAbort } from './Abort'\nimport { withAbort } from './abortUtils'\nimport { type Comparator } from '@/util/comparison/compare'\nimport type { Maybe, MaybePromise } from '@/util/type'\nimport { AbortError } from '@/error/AbortError'\n\nexport type Task<T = void> = (abort: ReadonlyAbort) => MaybePromise<T>\n\n/**\n * A TaskQueue runs actions in a sequence, with the ability to abort the queued tasks.\n */\nexport class TaskQueue<PriorityType = undefined> {\n private _simultaneous = 1\n private _running = 0\n\n /**\n * Use {@link createTaskQueue} to construct a new TaskQueue.\n */\n constructor(\n /**\n * A comparator for comparing two task priorities.\n */\n readonly comparator: Maybe<Comparator<PriorityType>>,\n\n /**\n * The default priority if not provided.\n * If comparator is nullish priority values will have no effect.\n */\n readonly defaultPriority: PriorityType\n ) {}\n\n get simultaneous(): number {\n return this._simultaneous\n }\n\n /**\n * How many simultaneous tasks may be run at a time.\n * Reducing this will not abort currently running tasks.\n */\n set simultaneous(value: number) {\n this._simultaneous = value\n this.checkQueue()\n }\n\n private pending = /* @__PURE__ */ new LinkedList<{\n readonly priority: PriorityType\n readonly execute: () => void\n }>()\n\n private readonly abortSlot = /* @__PURE__ */ createAbortSlot()\n\n /**\n * How many tasks are currently running.\n */\n get running(): number {\n return this._running\n }\n\n /**\n * Enqueues the given task, returning a Promise that settles when the task is complete.\n *\n * @param task A function that is optionally asynchronous.\n * @param priority The priority of the task. If not provided, `defaultPriority()` will be used.\n */\n enqueue<T>(\n task: Task<T>,\n priority: PriorityType = this.defaultPriority\n ): Promise<T> {\n const abort = this.abortSlot.value\n\n return new Promise<T>((resolve, reject) => {\n this.pending.push({\n priority,\n execute: () => {\n if (abort.aborted()) {\n reject(abort.reason!)\n this.checkQueue()\n return\n }\n this._running++\n let result: MaybePromise<T>\n try {\n result = task(abort)\n } catch (error: any) {\n reject(error as Error)\n this._running--\n return\n }\n withAbort(Promise.resolve(result), abort)\n .then(resolve)\n .catch(reject)\n .finally(() => {\n this._running--\n this.checkQueue()\n })\n },\n })\n this.checkQueue()\n })\n }\n\n /**\n * If the queue has any remaining actions and if there is additional capacity to execute, picks the next\n * task with the highest priority according to this queue's comparator.\n * @private\n */\n private checkQueue() {\n while (!this.pending.empty && this._running < this.simultaneous) {\n let current = this.pending.head\n let highestPriorityNode: LinkedNode<{\n readonly priority: PriorityType\n readonly execute: () => void\n }> = current!\n\n if (this.comparator) {\n current = current!.next\n while (current != null) {\n if (\n this.comparator(\n highestPriorityNode.value.priority,\n current.value.priority\n ) > 0\n ) {\n highestPriorityNode = current\n }\n current = current.next\n }\n }\n this.pending.remove(highestPriorityNode)\n highestPriorityNode.value.execute()\n }\n }\n\n /**\n * Aborts all enqueued operations.\n */\n abort(reason: Error = new AbortError()) {\n if (!this.running) return\n this.abortSlot.abort(reason)\n }\n}\n\n/**\n * Creates a TaskQueue without task prioritization.\n */\nexport function createTaskQueue(): TaskQueue\n\n/**\n * Creates a TaskQueue with a priority comparator.\n *\n * @param comparator Compares two priority objects.\n * @param defaultPriority A default priority.\n */\nexport function createTaskQueue<PriorityType>(\n comparator: Comparator<PriorityType>,\n defaultPriority: PriorityType\n): TaskQueue<PriorityType>\n\nexport function createTaskQueue(\n comparator?: Comparator<any>,\n defaultPriority?: any\n): TaskQueue<any> {\n return new TaskQueue<any>(comparator, defaultPriority)\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { type Comparator, compare } from '@/util/comparison/compare'\nimport type { Maybe, MaybePromise, Primitive } from '@/util/type'\nimport { IllegalArgumentError } from '@/error/IllegalArgumentError'\nimport { createTaskQueue } from '@/util/async/TaskQueue'\n\nexport type FilterPredicateAsync<T> = (\n value: T,\n index: number,\n array: ArrayLike<T>\n) => Promise<boolean>\n\nexport type FilterPredicate<T> = (\n value: T,\n index: number,\n array: ArrayLike<T>\n) => boolean\n\n/**\n * indexOf on ArrayLike objects.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf\n */\nexport function indexOf<E>(arrayLike: ArrayLike<E>, element: E): number {\n return Array.prototype.indexOf.call(arrayLike, element)\n}\n\n/**\n * lastIndexOf on ArrayLike objects.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf\n */\nexport function lastIndexOf<E>(arrayLike: ArrayLike<E>, element: E): number {\n return Array.prototype.lastIndexOf.call(arrayLike, element)\n}\n\nexport function filter<T, S extends T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, array: ArrayLike<T>) => value is S,\n thisArg?: any\n): S[]\n\nexport function filter<T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, array: ArrayLike<T>) => boolean,\n thisArg?: any\n): T[]\n\n/**\n * filter on ArrayLike objects.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\n */\nexport function filter<T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, array: ArrayLike<T>) => boolean,\n thisArg?: any\n): T[] {\n return Array.prototype.filter.call(arrayLike, predicate, thisArg)\n}\n\n/**\n * Filter an ArrayLike with an asynchronous predicate.\n *\n * Runs the predicate across all elements, then filters the elements by the booleans\n * resolved by the predicate.\n *\n * @param arrayLike The array-like object to filter\n * @param predicate Async function that tests each element\n * @param options Optional configuration object\n * @param options.simultaneous Maximum number of predicates to run simultaneously (default: 1)\n */\nexport async function filterAsync<T>(\n arrayLike: MaybePromise<ArrayLike<T>>,\n predicate: (\n value: T,\n index: number,\n array: ArrayLike<T>\n ) => Promise<boolean>,\n options?: { readonly simultaneous?: number }\n): Promise<T[]> {\n const results = await mapAsync(arrayLike, predicate, options)\n return filter(await arrayLike, (_, index) => results[index])\n}\n\n/**\n * map on ArrayLike objects.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\n */\nexport function map<T, U>(\n arrayLike: ArrayLike<T>,\n transform: (value: T, index: number, array: ArrayLike<T>) => U,\n thisArg?: any\n): U[] {\n return Array.prototype.map.call(arrayLike, transform, thisArg) as U[]\n}\n\n/**\n * Map on ArrayLike objects with an asynchronous transformer.\n *\n * @param arrayLike The array-like object to transform\n * @param transform Async function that transforms each element\n * @param options Optional configuration object\n * @param options.simultaneous Maximum number of transforms to run simultaneously (default: 1)\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\n */\nexport async function mapAsync<T, U>(\n arrayLike: MaybePromise<ArrayLike<T>>,\n transform: (value: T, index: number, array: ArrayLike<T>) => Promise<U>,\n options?: { readonly simultaneous?: number }\n): Promise<U[]> {\n const resolvedArray = await arrayLike\n const { simultaneous = 1 } = options || {}\n\n if (simultaneous >= resolvedArray.length) {\n return Promise.all(map(resolvedArray, transform))\n }\n\n const results: U[] = new Array(resolvedArray.length)\n const queue = createTaskQueue()\n queue.simultaneous = simultaneous\n\n const tasks = map(resolvedArray, (value, index) =>\n queue.enqueue(() =>\n transform(value, index, resolvedArray).then((result) => {\n results[index] = result\n })\n )\n )\n\n await Promise.all(tasks)\n return results\n}\n\n/**\n * Determines whether all the members of an array satisfy the specified test.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every\n */\nexport function every<T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, array: ArrayLike<T>) => boolean,\n thisArg?: any\n): boolean {\n return Array.prototype.every.call(arrayLike, predicate, thisArg)\n}\n\n/**\n * Determines whether any the members of an array satisfy the specified test.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some\n */\nexport function some<T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, array: ArrayLike<T>) => boolean,\n thisArg?: any\n): boolean {\n return Array.prototype.some.call(arrayLike, predicate, thisArg)\n}\n\n/**\n * Determines whether all the members of an array satisfy the specified asynchronous test.\n *\n * @param arrayLike The array-like object to test\n * @param predicate Async function that tests each element\n * @param options Optional configuration object\n * @param options.simultaneous Maximum number of predicates to run simultaneously (default: 1)\n */\nexport async function everyAsync<T>(\n arrayLike: MaybePromise<ArrayLike<T>>,\n predicate: (\n value: T,\n index: number,\n array: ArrayLike<T>\n ) => Promise<boolean>,\n options?: { readonly simultaneous?: number }\n): Promise<boolean> {\n const resolvedArray = await arrayLike\n\n const chunks = chunk(resolvedArray, options?.simultaneous ?? 1)\n let index = 0\n\n for (const chunkArray of chunks) {\n const chunkPromises = chunkArray.map((value, chunkIndex) =>\n predicate(value, index + chunkIndex, resolvedArray)\n )\n const chunkResults = await Promise.all(chunkPromises)\n if (chunkResults.some((result) => !result)) {\n return false\n }\n index += chunkArray.length\n }\n return true\n}\n\n/**\n * Determines whether any the members of an array satisfy the specified asynchronous test.\n *\n * @param arrayLike The array-like object to test\n * @param predicate Async function that tests each element\n * @param options Optional configuration object\n * @param options.simultaneous Maximum number of predicates to run simultaneously (default: 1)\n */\nexport async function someAsync<T>(\n arrayLike: MaybePromise<ArrayLike<T>>,\n predicate: (\n value: T,\n index: number,\n array: ArrayLike<T>\n ) => Promise<boolean>,\n options?: { readonly simultaneous?: number }\n): Promise<boolean> {\n return !(await everyAsync(\n arrayLike,\n async (value, index, array) => !(await predicate(value, index, array)),\n options\n ))\n}\n\n/**\n * forEach on ArrayLike objects.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\n */\nexport function forEach<T>(\n arrayLike: ArrayLike<T>,\n action: (value: T, index: number, array: ArrayLike<T>) => void,\n thisArg?: any\n): void {\n return Array.prototype.forEach.call(arrayLike, action, thisArg)\n}\n\n/**\n * Executes an asynchronous function on each element in an array.\n *\n * @param arrayLike The array-like object to iterate over\n * @param executor Async function to execute for each element\n * @param options Optional configuration object\n * @param options.simultaneous Maximum number of executors to run simultaneously (default: 1)\n */\nexport function forEachAsync<T>(\n arrayLike: MaybePromise<ArrayLike<T>>,\n executor: (value: T, index: number, array: ArrayLike<T>) => Promise<void>,\n options?: { readonly simultaneous?: number }\n): Promise<void> {\n return mapAsync(arrayLike, executor, options).then()\n}\n\nexport function find<T, S extends T>(\n arrayLike: ArrayLike<T>,\n predicate: (this: void, value: T, index: number, obj: T[]) => value is S,\n thisArg?: any\n): S | undefined\n\nexport function find<T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, obj: T[]) => boolean,\n thisArg?: any\n): T | undefined\n\n/**\n * find on ArrayLike objects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find\n */\nexport function find<T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, obj: T[]) => boolean,\n thisArg?: any\n): T | undefined {\n return Array.prototype.find.call(arrayLike, predicate, thisArg)\n}\n\n/**\n * findIndex on ArrayLike objects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex\n */\nexport function findIndex<T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, obj: ArrayLike<T>) => unknown,\n thisArg?: any\n): number {\n return Array.prototype.findIndex.call(arrayLike, predicate, thisArg)\n}\n\n/**\n * Returns the first element of an ArrayLike.\n */\nexport function first<T>(arrayLike: Maybe<ArrayLike<T>>): T | undefined {\n if (!arrayLike) return undefined\n return arrayLike[0]\n}\n\n/**\n * Returns the last element of an ArrayLike.\n */\nexport function last<T>(arrayLike: Maybe<ArrayLike<T>>): T | undefined {\n if (!arrayLike) return undefined\n return arrayLike[arrayLike.length - 1]\n}\n\n/**\n * Returns the first `count` elements of an ArrayLike.\n * @param arrayLike\n * @param count\n */\nexport function takeFirst<T>(arrayLike: ArrayLike<T>, count: number): T[] {\n if (count <= 0) return []\n return Array.prototype.slice.call(arrayLike, 0, count)\n}\n\n/**\n * Returns the last `count` elements of an ArrayLike.\n *\n * @param arrayLike\n * @param count\n */\nexport function takeLast<T>(arrayLike: ArrayLike<T>, count: number): T[] {\n if (count <= 0) return []\n return Array.prototype.slice.call(arrayLike, -count)\n}\n\n/**\n * Returns a subsection of an array-like.\n * For both start and end, a negative index can be used to indicate an offset from the end of\n * the array.\n * For example, -2 refers to the second to last element of the array.\n *\n * @param arrayLike An ArrayLike to copy.\n * @param start The beginning index of the array-like. Default: 0\n * @param end The end index of the specified portion of the array-like (exclusive). Default: length\n */\nexport function slice<T>(\n arrayLike: ArrayLike<T>,\n start?: number,\n end?: number\n): T[] {\n return Array.prototype.slice.call(arrayLike, start, end)\n}\n\n/**\n * Removes an element from the array, returning true if it was found.\n */\nexport function remove<T>(array: T[], element: T): boolean {\n const index = array.indexOf(element)\n if (index === -1) return false\n array.splice(index, 1)\n return true\n}\n\n/**\n * Removes an element from the array at the given index, returning the removed element if the index\n * was within range.\n * @param array The Array to update.\n * @param index If negative, will remove from the end of the list (-1 is last element), if\n * greater than or equal to the list length, undefined will be returned.\n */\nexport function removeAt<T>(array: T[], index: number): T | undefined {\n return array.splice(index, 1)[0]\n}\n\n/**\n * Returns the index of the first element in the given array with the highest value according to\n * the comparator.\n * @param array\n * @param comparator\n */\nexport function indexOfHighest<T>(\n array: ArrayLike<T>,\n comparator: Comparator<T>\n): number {\n if (array.length === 0) return -1\n let highestIndex = 0\n let highest = array[highestIndex]\n for (let i = 1; i < array.length; i++) {\n const current = array[i]\n if (comparator(current, highest) > 0) {\n highest = current\n highestIndex = i\n }\n }\n return highestIndex\n}\n\n/**\n * Returns the index of the last element in the given array with the highest value according to\n * the comparator.\n * To find the index of the lowest value, use `util.comparator.reversed`\n * @param array\n * @param comparator\n */\nexport function lastIndexOfHighest<T>(\n array: ArrayLike<T>,\n comparator: Comparator<T>\n): number {\n if (array.length === 0) return -1\n let highestIndex = array.length - 1\n let highest = array[highestIndex]\n for (let i = array.length - 2; i >= 0; i--) {\n const current = array[i]\n if (comparator(current, highest) > 0) {\n highest = current\n highestIndex = i\n }\n }\n return highestIndex\n}\n\n/**\n * Given an array using the given comparator function, finds the insertion index of an element.\n *\n * @param array An array sorted using the comparator.\n * @param element The element to compare against array elements.\n * @param comparator A function where given the return value of `comparator(element, array[i])`\n * if less than zero the returned index will be before i, otherwise after.\n * @param start The starting index (inclusive). Default: 0\n * @param end The ending index (exclusive). Default: array.length\n */\nexport function sortedInsertionIndex<T, U = T>(\n array: ArrayLike<T>,\n element: U,\n comparator: Comparator<U, T>,\n start = 0,\n end = array.length\n): number {\n let indexA = start\n let indexB = end\n while (indexA < indexB) {\n const midIndex = (indexA + indexB) >>> 1\n const comparison = comparator(element, array[midIndex])\n if (comparison < 0) {\n indexB = midIndex\n } else {\n indexA = midIndex + 1\n }\n }\n return indexA\n}\n\n/**\n * Creates an iterator for an ArrayLike.\n * If the given ArrayLike is iterable, then use its provided iterator.\n *\n * @param arrayLike\n */\nexport function createArrayLikeIterator<T>(\n arrayLike: ArrayLike<T>\n): IterableIterator<T> {\n if (Symbol.iterator in arrayLike)\n return (arrayLike as Iterable<T>)[\n Symbol.iterator\n ]() as IterableIterator<T>\n\n let currentIndex = 0\n return {\n [Symbol.iterator](): IterableIterator<T> {\n return createArrayLikeIterator(arrayLike)\n },\n\n next: (): IteratorResult<T> => {\n if (currentIndex >= arrayLike.length) {\n return {\n value: undefined,\n done: true,\n }\n }\n return {\n value: arrayLike[currentIndex++],\n done: false,\n }\n },\n }\n}\n\n/**\n * Gets the element in the ArrayLike at the given index, or throws an IllegalArgumentError if out of range.\n */\nexport function getElementAt<T>(array: ArrayLike<T>, index: number): T {\n const n = array.length\n if (index >= 0 && index < n) {\n return array[index]\n }\n throw new IllegalArgumentError(`index ${index} is out of range 0-${n}`)\n}\n\n/**\n * Gets the element in the ArrayLike at the given index, or returns the provided default value.\n */\nexport function getElementOrDefault<T, V>(\n array: ArrayLike<T>,\n index: number,\n defaultValue: V\n): T | V {\n const n = array.length\n if (index >= 0 && index < n) {\n return array[index]\n }\n return defaultValue\n}\n\n/**\n * Counts the number of elements in an array that return true when passed to a predicate function.\n *\n * @param array\n * @param predicate\n */\nexport function countElements<T>(\n array: ArrayLike<T>,\n predicate: (value: T, index: number, obj: ArrayLike<T>) => boolean\n): number {\n let count = 0\n const n = array.length\n for (let i = 0; i < n; i++) {\n if (predicate(array[i], i, array)) {\n count++\n }\n }\n return count\n}\n\n/**\n * Splits an array into chunks of the specified size.\n *\n * @param array The array to chunk\n * @param chunkSize Maximum size of each chunk\n * @returns Array of chunks\n */\nexport function chunk<T>(array: ArrayLike<T>, chunkSize: number): T[][] {\n const chunks: T[][] = []\n for (let i = 0; i < array.length; i += chunkSize) {\n chunks.push(slice(array, i, i + chunkSize))\n }\n return chunks\n}\n\nexport function min<T extends Exclude<Primitive, symbol>>(\n arrayLike: ArrayLike<T>\n): T | undefined\nexport function min<T>(\n arrayLike: ArrayLike<T>,\n comparator: Comparator<T>\n): T | undefined\n\n/**\n * Finds the minimum value in an array of comparable elements.\n * @param arrayLike The array-like object to search\n * @param comparator Optional comparator function\n */\nexport function min<T>(\n arrayLike: ArrayLike<T>,\n comparator?: Comparator<T>\n): T | undefined {\n if (arrayLike.length === 0) return undefined\n\n let minValue = arrayLike[0]\n if (!comparator) comparator = compare as Comparator<T>\n for (let i = 1; i < arrayLike.length; i++) {\n if (comparator(arrayLike[i], minValue) < 0) {\n minValue = arrayLike[i]\n }\n }\n return minValue\n}\n\nexport function max<T extends Exclude<Primitive, symbol>>(\n arrayLike: ArrayLike<T>\n): T | undefined\nexport function max<T>(\n arrayLike: ArrayLike<T>,\n comparator: Comparator<T>\n): T | undefined\n\n/**\n * Finds the maximum value in an array of comparable elements.\n * @param arrayLike The array-like object to search\n * @param comparator Optional comparator function\n */\nexport function max<T>(\n arrayLike: ArrayLike<T>,\n comparator?: Comparator<T>\n): T | undefined {\n if (arrayLike.length === 0) return undefined\n\n let maxValue = arrayLike[0]\n if (!comparator) comparator = compare as Comparator<T>\n for (let i = 1; i < arrayLike.length; i++) {\n if (comparator(arrayLike[i], maxValue) > 0) {\n maxValue = arrayLike[i]\n }\n }\n return maxValue\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n createArrayLikeIterator,\n slice,\n sortedInsertionIndex,\n} from '@/util/collection/array'\n\n// Compares with a Range's start value.\nfunction startComparator(value: number, range: Range) {\n return value < range[0] ? -1 : 1\n}\n\n// Compares with a Range's end value.\nfunction endComparator(value: number, range: Range) {\n return value <= range[1] ? -1 : 1\n}\n\n/**\n * Query utilities for a list of ranges.\n * Ranges are expected to be start, end pairs where no two ranges overlap or touch.\n * All ranges are in incremental order.\n */\nexport interface ReadonlyRanges extends Iterable<Range> {\n /**\n * Returns true if there are zero ranges.\n */\n readonly empty: boolean\n\n /**\n * The ranges array like this reader encapsulates.\n * Ranges are [start, end] tuples, they will always be ordered, never touch, and never overlap.\n */\n readonly ranges: ArrayLike<Range>\n\n /**\n * Returns the range at the given value, or null if all ranges are outside the given tolerance.\n * Range values are considered inclusive.\n * That is, a ReadonlyRanges with `[0, 1]` will return `[0, 1]` for value `1`.\n *\n * @param value The value to compare to current ranges.\n * @param tolerance The tolerance the value may be outside a range and still considered\n * to be within. Default: 0\n */\n getRangeAt(value: number, tolerance?: number): Range | null\n\n /**\n * Returns the range that includes the entire from-to span, within a given tolerance.\n *\n * Range values are considered inclusive.\n * That is, a `ReadonlyRanges` with `[0, 2]` will return `[0, 2]` for\n * `getRangeContaining(2, 2)` or `getRangeContaining(0, 0)`.\n *\n * `from` does not need to be lesser than `to`.\n *\n * @param from\n * @param to\n * @param tolerance\n */\n getRangeContaining(\n from: number,\n to: number,\n tolerance?: number\n ): Range | null\n\n /**\n * Returns all ranges where at least part of the range is within the given from-to span.\n *\n * `from` does not need to be lesser than `to`.\n *\n * @param from\n * @param to\n * @param tolerance\n */\n getRangesWithin(from: number, to: number, tolerance?: number): Range[]\n\n [Symbol.iterator](): IterableIterator<Range>\n}\n\n/**\n * A [start, end] tuple.\n */\nexport type Range = readonly [start: number, end: number]\n\nexport abstract class ReadonlyRangesImpl implements ReadonlyRanges {\n /**\n * An accessor to the backed ranges.\n * Implementations must provide an ArrayLike<Range> for random-access reading.\n * This will be called at most once per read operation.\n */\n abstract get ranges(): ArrayLike<Range>\n\n get empty(): boolean {\n return this.ranges.length === 0\n }\n\n getRangeAt(value: number, tolerance = 0): Range | null {\n const ranges = this.ranges\n if (ranges.length === 0) return null\n const index = sortedInsertionIndex(ranges, value, startComparator)\n // The insertion index will be 1 higher than the last range where start >= value.\n const range = index <= 0 ? null : ranges[index - 1]\n if (range && value <= range[1] + tolerance) return range\n if (index >= ranges.length) return null\n const next = ranges[index]\n if (next[0] - tolerance <= value) return next\n return null\n }\n\n getRangeContaining(\n from: number,\n to: number,\n tolerance?: number\n ): Range | null {\n const ranges = this.ranges\n if (ranges.length === 0) return null\n const startRange = this.getRangeAt(from, tolerance)\n if (startRange == null) return null\n const endRange = this.getRangeAt(to, tolerance)\n if (endRange === startRange) return startRange\n return null\n }\n\n getRangesWithin(from: number, to: number, tolerance = 0): Range[] {\n const ranges = this.ranges\n if (ranges.length === 0) return []\n const startIndex = sortedInsertionIndex(\n ranges,\n Math.min(from, to) - tolerance,\n endComparator\n )\n const endIndex = sortedInsertionIndex(\n ranges,\n Math.max(from, to) + tolerance,\n startComparator\n )\n return slice(ranges, startIndex, endIndex)\n }\n\n [Symbol.iterator](): IterableIterator<Range> {\n return createArrayLikeIterator(this.ranges)\n }\n\n toString() {\n return `[${Array.from(this.ranges)\n .map((range) => `[${range[0]}, ${range[1]}]`)\n .join(', ')}]`\n }\n}\n\n/**\n * Returns a ReadonlyRanges reader for a fixed array of ranges.\n */\nclass RangesArrayReader extends ReadonlyRangesImpl implements ReadonlyRanges {\n constructor(private readonly _ranges: readonly Range[]) {\n super()\n }\n\n get ranges(): ArrayLike<Range> {\n return this._ranges\n }\n}\n\n/**\n * Creates a ReadonlyRanges view for the given array of ranges.\n *\n * @param value An array of ranges. The ReadonlyRanges reader does not clone\n * this value and will access this backing array directly.\n */\nexport function rangesOf(value: readonly Range[]): ReadonlyRanges {\n return new RangesArrayReader(value)\n}\n\n/**\n * A static, empty ranges representation.\n */\nexport const emptyRanges: ReadonlyRanges = /* @__PURE__ */ new RangesArrayReader([])\n\n/**\n * A collection of Range start/end tuples.\n * When ranges are added they are merged and sorted, making for fast within range checks.\n */\nexport class RangesImpl implements ReadonlyRanges {\n private readonly reader: ReadonlyRanges\n readonly ranges: Range[] = []\n\n /**\n * @param ranges The non-normalized ranges to add.\n * @see #add\n */\n constructor(ranges: readonly Range[] = []) {\n for (const range of ranges) {\n this.add(range[0], range[1])\n }\n this.reader = new RangesArrayReader(this.ranges)\n }\n\n get empty(): boolean {\n return this.reader.empty\n }\n\n /**\n * Adds the given range to this list.\n * If end is less than start, the range will not be added.\n * Ranges will be merged when there is overlap or touching. Example,\n * `add(1, 4); add(2, 5)` results in the final ranges: `[1, 5]`\n */\n add(start: number, end: number) {\n if (end < start) return\n const startIndex = sortedInsertionIndex(\n this.ranges,\n start,\n endComparator\n )\n const endIndex = sortedInsertionIndex(\n this.ranges,\n end,\n startComparator,\n startIndex\n )\n const newStart =\n startIndex < this.ranges.length\n ? Math.min(this.ranges[startIndex][0], start)\n : start\n const newEnd =\n endIndex > 0 ? Math.max(this.ranges[endIndex - 1][1], end) : end\n this.ranges.splice(startIndex, endIndex - startIndex, [\n newStart,\n newEnd,\n ])\n }\n\n /**\n * Removes the given range span from this list.\n * Ranges partially intersecting will be changed to not include the start-end span.\n * If start is after end, nothing will be removed.\n */\n remove(start: number, end: number) {\n if (end < start || this.empty) return\n // New ranges created due to cutting existing ones\n const newRanges: Range[] = []\n const startIndex = sortedInsertionIndex(\n this.ranges,\n start,\n endComparator\n )\n const endIndex = sortedInsertionIndex(this.ranges, end, startComparator)\n if (start === end && startIndex === endIndex - 1) {\n // Do not split an encompassing range when start is equal to end.\n const range = this.ranges[startIndex]\n if (range[0] !== range[1]) return\n }\n if (startIndex < this.ranges.length) {\n const previousRange = this.ranges[startIndex]\n if (previousRange[0] < start) {\n newRanges.push([previousRange[0], start])\n }\n }\n if (endIndex > 0) {\n const nextRange = this.ranges[endIndex - 1]\n if (nextRange[1] > end) {\n newRanges.push([end, nextRange[1]])\n }\n }\n this.ranges.splice(startIndex, endIndex - startIndex, ...newRanges)\n }\n\n /**\n * Clears all ranges.\n */\n clear() {\n this.ranges.length = 0\n }\n\n getRangeAt(value: number, tolerance = 0): Range | null {\n return this.reader.getRangeAt(value, tolerance)\n }\n\n getRangeContaining(\n from: number,\n to: number,\n tolerance?: number\n ): Range | null {\n return this.reader.getRangeContaining(from, to, tolerance)\n }\n\n getRangesWithin(from: number, to: number, tolerance?: number): Range[] {\n return this.reader.getRangesWithin(from, to, tolerance)\n }\n\n clone(): RangesImpl {\n return new RangesImpl(this.ranges.slice())\n }\n\n [Symbol.iterator](): IterableIterator<Range> {\n return this.reader[Symbol.iterator]()\n }\n\n toString() {\n return this.reader.toString()\n }\n}\n\n/**\n * Returns true if the two ranges intersect.\n * Adjacent ranges (touching but not overlapping) will not be considered to intersect.\n */\nexport function rangeIntersects(rangeA: Range, rangeB: Range): boolean {\n return rangeA[0] < rangeB[1] && rangeA[1] > rangeB[0]\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { type Range, type ReadonlyRanges, rangesOf } from './Ranges'\n\n/**\n * Converts a `TimeRanges` object to an Array for utility purposes.\n *\n * @param timeRanges\n */\nexport function timeRangesToArray(timeRanges: TimeRanges): Range[] {\n const ranges: Range[] = []\n for (let i = 0; i < timeRanges.length; i++) {\n ranges.push([timeRanges.start(i), timeRanges.end(i)])\n }\n return ranges\n}\n\n/**\n * Creates a reader for a TimeRanges object for easier querying.\n *\n * @param timeRanges\n */\nexport function createTimeRangesReader(timeRanges: TimeRanges): ReadonlyRanges {\n return rangesOf(timeRangesToArray(timeRanges))\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n type Range,\n RangesImpl,\n type ReadonlyRanges,\n ReadonlyRangesImpl,\n} from './Ranges'\nimport type { Maybe } from '@/util/type'\n\nexport interface UnionRangesOptions {\n /**\n * If true, only recomputes ranges after a call to `invalidate`.\n * After `invalidate()`, the ranges are recalculated on next read.\n * Default: false\n */\n readonly useCache?: boolean\n}\n\n/**\n * Takes a list of ranges and computes the union ranges on read.\n */\nexport class UnionRanges extends ReadonlyRangesImpl {\n private readonly backingRanges = /* @__PURE__ */ new RangesImpl()\n private valid = false\n private _innerRanges: readonly ReadonlyRanges[]\n\n constructor(\n /**\n * The ranges for which to compute the union.\n */\n innerRanges: readonly ReadonlyRanges[],\n\n private readonly options?: Maybe<UnionRangesOptions>\n ) {\n super()\n this._innerRanges = innerRanges\n }\n\n get innerRanges(): readonly ReadonlyRanges[] {\n return this._innerRanges\n }\n\n set innerRanges(value: readonly ReadonlyRanges[]) {\n this._innerRanges = value\n this.invalidate()\n }\n\n get ranges(): readonly Range[] {\n if (!this.valid) this.validate()\n return this.backingRanges.ranges\n }\n\n /**\n * Flags the union ranges as invalid.\n * This has no effect if options.useCache is not true.\n */\n invalidate() {\n this.valid = false\n }\n\n /**\n * Refreshes the backing ranges.\n */\n private validate() {\n this.backingRanges.clear()\n for (const ranges of this._innerRanges) {\n for (const [start, end] of ranges) {\n this.backingRanges.add(start, end)\n }\n }\n if (this.options?.useCache === true) {\n this.valid = true\n }\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { type Range, type ReadonlyRanges, ReadonlyRangesImpl } from './Ranges'\nimport type { Maybe } from '@/util/type'\n\nexport interface IntersectionRangesOptions {\n /**\n * If true, only recomputes ranges after a call to `invalidate`.\n * After `invalidate()`, the ranges are recalculated on next read.\n * Default: false\n */\n readonly useCache?: boolean\n}\n\n/**\n * Takes a list of ranges and computes the intersection ranges on read.\n */\nexport class IntersectionRanges extends ReadonlyRangesImpl {\n private backingRanges: ArrayLike<Range> = []\n private valid = false\n private _innerRanges: readonly ReadonlyRanges[]\n\n constructor(\n /**\n * The ranges for which to compute the intersection.\n */\n innerRanges: readonly ReadonlyRanges[],\n\n private readonly options?: Maybe<IntersectionRangesOptions>\n ) {\n super()\n this._innerRanges = innerRanges\n }\n\n get innerRanges(): readonly ReadonlyRanges[] {\n return this._innerRanges\n }\n\n set innerRanges(value: readonly ReadonlyRanges[]) {\n this._innerRanges = value\n this.invalidate()\n }\n\n get ranges(): ArrayLike<Range> {\n if (!this.valid) this.validate()\n return this.backingRanges\n }\n\n /**\n * Flags the intersection ranges as invalid.\n * This has no effect if options.useCache is not true.\n */\n invalidate() {\n this.valid = false\n }\n\n /**\n * Refreshes the backing ranges by computing intersection.\n */\n private validate() {\n if (this._innerRanges.length === 0) {\n this.backingRanges = []\n if (this.options?.useCache === true) {\n this.valid = true\n }\n return\n }\n\n // Start with the first range set\n this.backingRanges = this._innerRanges[0].ranges\n\n // Intersect with each subsequent range set\n for (let i = 1; i < this._innerRanges.length; i++) {\n const currentRanges = this._innerRanges[i]\n const tempRanges: Range[] = []\n\n // Find intersections between backingRanges and currentRanges\n for (let j = 0; j < this.backingRanges.length; j++) {\n const [backStart, backEnd] = this.backingRanges[j]\n for (const [currStart, currEnd] of currentRanges) {\n const intersectionStart = Math.max(backStart, currStart)\n const intersectionEnd = Math.min(backEnd, currEnd)\n\n if (intersectionStart < intersectionEnd) {\n tempRanges.push([intersectionStart, intersectionEnd])\n }\n }\n }\n\n // Replace backing ranges with intersection result\n this.backingRanges = tempRanges\n }\n\n if (this.options?.useCache === true) {\n this.valid = true\n }\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Array views of a data buffer.\n */\nexport type TypedArray =\n | Float32Array\n | Float64Array\n | Int16Array\n | Int32Array\n | Int8Array\n | Uint16Array\n | Uint32Array\n | Uint8Array\n | Uint8ClampedArray\n\n/**\n * Creates a new typed array with identical contents as the source.\n *\n * @param array\n */\nexport function cloneTypedArray<T extends TypedArray>(array: T): T {\n // typed array slice() is not supported on Comcast OTT device.\n return new (array.constructor as new (array: T) => T)(array)\n}\n\nconst typedArrayTypes = [\n Float32Array,\n Float64Array,\n Int16Array,\n Int32Array,\n Int8Array,\n Uint16Array,\n Uint32Array,\n Uint8Array,\n Uint8ClampedArray,\n]\n\n/**\n * Returns true if the given value is an instance of one of the typed array types.\n *\n * @param value\n */\nexport function isTypedArray(value: any): value is TypedArray {\n return typedArrayTypes.some((type) => value instanceof type)\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * An interface that may be implemented to provide custom clone behavior.\n */\nexport interface Cloneable<T> {\n /**\n * Produces a copy of this object.\n */\n clone(): T\n}\n\n/**\n * Returns true if the given value implements Cloneable.\n */\nexport function isCloneable<T>(value: T): value is T & Cloneable<T> {\n return (\n value != null &&\n typeof value === 'object' &&\n 'clone' in value &&\n typeof value.clone === 'function' &&\n value.clone.length === 0\n )\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IllegalArgumentError } from '@/error/IllegalArgumentError'\nimport type { TypedArray } from '@/util/collection/typedArray'\nimport { cloneTypedArray, isTypedArray } from '@/util/collection/typedArray'\nimport { union } from '@/util/set/set'\nimport { substitute } from '@/util/string/string'\nimport { ownKeys, isPlainObject } from './object'\nimport { ReportableError } from '@/error/ReportableError'\nimport { type Cloneable, isCloneable } from '@/core/cloneable'\n\nconst locale = {\n cyclicRefError: 'Cyclic reference found at: {path}',\n mergeReferenceError: `No merge rule found at {path} for \"{source}\" and reference copy not allowed`,\n} as const\n\n/**\n * Concatenates multiple arrays together where each element is deeply cloned.\n */\nexport function mergeDeep<T extends Array<any>>(\n sources: readonly T[],\n options?: Partial<MergeOptions>\n): T\n\n/**\n * Deep clones the given object.\n */\nexport function mergeDeep<T>(\n sources: readonly [T],\n options?: Partial<MergeOptions>\n): T\n\n/**\n * Deep merges the two objects.\n * If common keys are both arrays, they will be concatenated, if common keys are both objects, they\n * will be merged. Incompatible types, e.g. an object and an array will use the later source.\n */\nexport function mergeDeep<A, B>(\n sources: readonly [A, B],\n options?: Partial<MergeOptions>\n): A & B\n\n/**\n * Deep merges the three objects.\n * If common keys are both arrays, they will be concatenated, if common keys are both objects, they\n * will be merged. Incompatible types, e.g. an object and an array will use the later source.\n */\nexport function mergeDeep<A, B, C>(\n sources: readonly [A, B, C],\n options?: Partial<MergeOptions>\n): A & B & C\n\n/**\n * Deep merges the four objects.\n * If common keys are both arrays, they will be concatenated, if common keys are both objects, they\n * will be merged. Incompatible types, e.g. an object and an array will use the later source.\n */\nexport function mergeDeep<A, B, C, D>(\n sources: readonly [A, B, C, D],\n options?: Partial<MergeOptions>\n): A & B & C & D\n\n/**\n * Deep merges the five objects.\n * If common keys are both arrays, they will be concatenated, if common keys are both objects, they\n * will be merged. Incompatible types, e.g. an object and an array will use the later source.\n */\nexport function mergeDeep<A, B, C, D, E>(\n sources: readonly [A, B, C, D, E],\n options?: Partial<MergeOptions>\n): A & B & C & D & E\n\n/**\n * Deep merges the six objects.\n * If common keys are both arrays, they will be concatenated, if common keys are both objects, they\n * will be merged. Incompatible types, e.g. an object and an array will use the later source.\n */\nexport function mergeDeep<A, B, C, D, E, F>(\n sources: readonly [A, B, C, D, E, F],\n options?: Partial<MergeOptions>\n): A & B & C & D & E & F\n\n/**\n * Deep merges all objects.\n * If common keys are both arrays, they will be concatenated, if common keys are both objects, they\n * will be merged. Incompatible types, e.g. an object and an array will use the later source.\n */\nexport function mergeDeep(\n sources: readonly any[],\n options?: Partial<MergeOptions>\n): any\n\n/**\n * Recursively copies the values of all the enumerable own properties from one or two source\n * objects to a new object.\n * Arrays will be concatenated.\n *\n * @param sources One or more source objects from which to copy properties. A single source\n * provided will return a deep clone. Incompatible objects, for example given a number and an\n * array, will return a clone of the last argument.\n * @param options\n * @see merge\n */\nexport function mergeDeep(\n sources: readonly any[],\n options?: Partial<MergeOptions>\n): any {\n if (!sources.length) return undefined\n const finalOpts: MergeOptions = {\n ...defaultMergeOptions,\n ...options,\n }\n const stack = new PropStack()\n const n = sources.length\n\n if (n === 1)\n // Clone the single element.\n return _mergeDeep(undefined, sources[0], stack, 0, finalOpts)\n // Initial accumulator:\n let out = _mergeDeep(sources[0], sources[1], stack, 1, finalOpts)\n for (let i = 2; i < n; i++) {\n out = _mergeDeep(out, sources[i], stack, i, finalOpts)\n }\n return out\n}\n\n/**\n * Merge options defines the behavior for {@link mergeDeep}.\n * See the {@link defaultMergeOptions} for defaults that will be used if any merge options are\n * omitted.\n */\nexport interface MergeOptions {\n /**\n * If an object does not pass any of the rules, if this is true (default) the reference will be\n * copied. If false, a {@link MergeReferenceError} will be thrown.\n * This only applies to objects, not functions or primitives.\n */\n readonly allowReferenceCopy: boolean\n\n /**\n * The first merge rule where the second source object matches will be used.\n * Rules are only checked for values that have a typeof value of 'object'\n * If the first object does not pass the match, undefined will be passed to sourceA and the\n * rule is expected to return a clone of sourceB.\n * If no rules match, the value will be copied by reference unless `allowReferenceCopy` is\n * false, in which case, a {@link MergeReferenceError} will be thrown.\n */\n readonly rules: readonly MergeRule<any>[]\n}\n\n/**\n * A merge function to be provided to merge rules.\n */\nexport type MergeCallback<T = any> = (\n /**\n * The first like object to merge, or undefined. If undefined is provided, a\n * clone of sourceB is expected to be returned. If defined, this object is guaranteed to have\n * passed {@link MergeRule.matches}\n */\n sourceA: T | undefined,\n\n /**\n * The second object to merge or clone.\n */\n sourceB: T,\n\n /**\n * The identifier to be used in error reporting.\n */\n prop: string | number\n) => T\n\nexport interface MergeRule<T> {\n /**\n * Returns true if this MergeRule should be applied for the given object.\n * @param object\n */\n readonly matches: (object: any) => object is T\n\n /**\n * Merges the two sources.\n * @param sourceA May be undefined, the first object to merge.\n * @param sourceB The second object to merge or clone if sourceA is undefined.\n * @param merge This callback may be used to merge or clone sub-properties.\n */\n readonly merge: (\n sourceA: T | undefined,\n sourceB: T,\n merge: MergeCallback\n ) => T\n}\n\n/**\n * A stack of the current property recursion.\n * PropStack has two purposes, it provides the current property path in the node traversal and\n * ensures that nodes do not cyclically reference themselves.\n */\nclass PropStack {\n /**\n * Object references for sourceA.\n */\n private refsA = /* @__PURE__ */ new Set<any>()\n\n /**\n * Object references for sourceB.\n */\n private refsB = /* @__PURE__ */ new Set<any>()\n private propStack: [any, any, keyof any | undefined][] = []\n\n /**\n * The property stack, joined by .\n */\n get currentPath(): string {\n return this.propStack\n .map((e) => e[2])\n .filter((e) => e != null)\n .join('.')\n }\n\n push(sourceA: any, sourceB: any, prop?: keyof any) {\n this.propStack.push([sourceA, sourceB, prop])\n this.addRef(this.refsA, sourceA)\n this.addRef(this.refsB, sourceB)\n }\n\n pop() {\n const last = this.propStack.pop()!\n this.refsA.delete(last[0])\n this.refsB.delete(last[1])\n }\n\n private addRef(refSet: Set<any>, source: any) {\n if (typeof source !== 'object') return\n if (refSet.has(source)) {\n throw new IllegalArgumentError(\n substitute(locale.cyclicRefError, { path: this.currentPath })\n )\n }\n refSet.add(source)\n }\n}\n\nfunction _mergeDeep<T>(\n sourceA: T | undefined,\n sourceB: T,\n propStack: PropStack,\n prop: keyof any | undefined,\n options: MergeOptions\n): T {\n if (typeof sourceB !== 'object' || sourceB === null) return sourceB\n\n const merge: MergeCallback = (sourceA, sourceB, prop) => {\n return _mergeDeep(sourceA, sourceB, propStack, prop, options)\n }\n for (const rule of options.rules) {\n if (rule.matches(sourceB)) {\n propStack.push(sourceA, sourceB, prop)\n const result = rule.merge(\n rule.matches(sourceA) ? sourceA : undefined,\n sourceB,\n merge\n )\n propStack.pop()\n return result\n }\n }\n if (!options.allowReferenceCopy) {\n // push before throwing to get the full currentPath:\n propStack.push(sourceA, sourceB, prop)\n throw new MergeReferenceError(propStack.currentPath, sourceB)\n }\n return sourceB\n}\n\nexport class MergeReferenceError extends ReportableError {\n constructor(propPath: string, source: any) {\n super(\n substitute(locale.mergeReferenceError, {\n path: propPath,\n source,\n })\n )\n Object.setPrototypeOf(this, MergeReferenceError.prototype)\n }\n}\n\n/**\n * Cloneable objects are not expected to be mergeable, but should be cloned.\n */\nexport const cloneableMergeRule: MergeRule<Cloneable<any>> = {\n matches(object: any): object is Cloneable<any> {\n return isCloneable(object)\n },\n\n merge(\n _1: Cloneable<any> | undefined,\n sourceB: Cloneable<any>,\n _2: MergeCallback\n ): Cloneable<any> {\n return sourceB.clone()\n },\n}\n\nexport const arrayMergeRule: MergeRule<any[]> = {\n matches(object: any): object is any[] {\n return Array.isArray(object)\n },\n\n merge(\n sourceA: any[] | undefined,\n sourceB: any[],\n merge: MergeCallback\n ): any[] {\n const out = []\n if (sourceA) {\n for (const element of sourceA) {\n out.push(merge(undefined, element, out.length))\n }\n }\n for (const element of sourceB) {\n out.push(merge(undefined, element, out.length))\n }\n return out\n },\n} as const\n\nexport const plainObjectMergeRule: MergeRule<Record<any, any>> = {\n matches(object: any): object is Record<any, any> {\n return isPlainObject(object)\n },\n\n merge(\n sourceA: Record<any, any> | undefined,\n sourceB: Record<any, any>,\n merge: MergeCallback\n ): Record<any, any> {\n const out: any = {}\n // Iterate over the unique set of the union of keys between the two objects.\n for (const key of union(ownKeys(sourceA), ownKeys(sourceB))) {\n if (sourceA && key in sourceB && key in sourceA) {\n out[key] = merge(sourceA[key], sourceB[key], key)\n } else if (sourceA && key in sourceA) {\n out[key] = merge(undefined, sourceA[key], key)\n } else {\n out[key] = merge(undefined, sourceB[key], key)\n }\n }\n return out\n },\n} as const\n\nexport const regexpMergeRule: MergeRule<RegExp> = {\n matches(object: any): object is RegExp {\n return object instanceof RegExp\n },\n merge(_1: RegExp | undefined, sourceB: RegExp, _2: MergeCallback): RegExp {\n // Clone the regex; they are stateful.\n return new RegExp(sourceB.source, sourceB.flags)\n },\n} as const\n\nexport const dateMergeRule: MergeRule<Date> = {\n matches(object: any): object is Date {\n return object instanceof Date\n },\n merge(_1: Date | undefined, sourceB: Date, _2: MergeCallback): Date {\n return new Date(sourceB.getTime())\n },\n} as const\n\nexport const mapMergeRule: MergeRule<Map<any, any>> = {\n matches(object: any): object is Map<any, any> {\n return object instanceof Map\n },\n merge(\n sourceA: Map<any, any> | undefined,\n sourceB: Map<any, any>,\n merge: MergeCallback\n ): Map<any, any> {\n const out = new Map()\n // Iterate over the unique set of the union of keys between the two objects.\n for (const key of new Set([\n ...(sourceA?.keys() ?? []),\n ...sourceB.keys(),\n ])) {\n if (sourceB.has(key) && sourceA?.has(key)) {\n out.set(key, merge(sourceA.get(key), sourceB.get(key), key))\n } else if (sourceA?.has(key)) {\n out.set(key, merge(undefined, sourceA.get(key), key))\n } else {\n out.set(key, merge(undefined, sourceB.get(key), key))\n }\n }\n return out\n },\n} as const\n\nexport const setMergeRule: MergeRule<Set<any>> = {\n matches(object: any): object is Set<any> {\n return object instanceof Set\n },\n merge(\n sourceA: Set<any> | undefined,\n sourceB: Set<any>,\n merge: MergeCallback\n ): Set<any> {\n return new Set(\n [...(sourceA?.values() ?? []), ...sourceB.values()].map(\n (element, index) => {\n return merge(undefined, element, index)\n }\n )\n )\n },\n} as const\n\n/**\n * Typed arrays will not concatenate by default like arrays. Typed arrays generally represent data,\n * not configuration, and the more reasonable default is to clone, not concatenate.\n */\nexport const typedArrayMergeRule: MergeRule<TypedArray> = {\n matches(object: any): object is TypedArray {\n return isTypedArray(object)\n },\n merge(\n _1: TypedArray | undefined,\n sourceB: TypedArray,\n _2: MergeCallback\n ): TypedArray {\n return cloneTypedArray(sourceB)\n },\n} as const\n\nexport const urlMergeRule: MergeRule<URL> = {\n matches(object: any): object is URL {\n return object instanceof URL\n },\n merge(_1: URL | undefined, sourceB: URL, _2: MergeCallback): URL {\n return new URL(sourceB.toString())\n },\n} as const\n\n/**\n * The default merge options provide rules for merging arrays, plain objects, RegExp, Date,\n * Map, Set, and TypedArray.\n */\nexport const defaultMergeOptions: MergeOptions = {\n allowReferenceCopy: true,\n rules: [\n cloneableMergeRule,\n arrayMergeRule,\n plainObjectMergeRule,\n regexpMergeRule,\n dateMergeRule,\n mapMergeRule,\n setMergeRule,\n typedArrayMergeRule,\n urlMergeRule,\n ],\n} as const\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * An intersection of T & U where common keys of T and U are overwritten by U.\n */\nexport type Merge<T, U> = Omit<T, keyof U> & U\n\n/**\n * Copy the values of all the enumerable own properties from one or more source objects to a new\n * object.\n *\n * This will use `Object.assign` using a new object as the target parameter.\n * Unlike `Object.assign`, the return type accounts for common keys.\n *\n * @param source1 The first source object from which to copy properties.\n * @return Returns the new merged object.\n */\nexport function merge<T>(source1: T): T\n\n/**\n * Concatenates arrays.\n *\n * @return Returns a new concatenated array.\n */\nexport function merge<T>(...sources: T[][]): T[]\n\n/**\n * Copy the values of all the enumerable own properties from one or more source objects to a new\n * object.\n *\n * This will use `Object.assign` using a new object as the target parameter.\n * Unlike `Object.assign`, the return type accounts for common keys.\n *\n * @param source1 The first source object from which to copy properties.\n * @param source2 The second source object from which to copy properties.\n * @return Returns the new merged object.\n */\nexport function merge<T, U>(source1: T, source2: U): Merge<T, U>\n\n/**\n * Copy the values of all the enumerable own properties from one or more source objects to a new\n * object.\n *\n * This will use `Object.assign` using a new object as the target parameter.\n * Unlike `Object.assign`, the return type accounts for common keys.\n *\n * @param source1 The first source object from which to copy properties.\n * @param source2 The second source object from which to copy properties.\n * @param source3 The third source object from which to copy properties.\n * @return Returns the new merged object.\n */\nexport function merge<T, U, V>(\n source1: T,\n source2: U,\n source3: V\n): Merge<Merge<T, U>, V>\n\n/**\n * Copy the values of all the enumerable own properties from one or more source objects to a new\n * object.\n *\n * This will use `Object.assign` using a new object as the target parameter.\n * Unlike `Object.assign`, the return type accounts for common keys.\n *\n * @param source1 The first source object from which to copy properties.\n * @param source2 The second source object from which to copy properties.\n * @param source3 The third source object from which to copy properties.\n * @param source4 The third source object from which to copy properties.\n * @return Returns the new merged object.\n */\nexport function merge<T, U, V, W>(\n source1: T,\n source2: U,\n source3: V,\n source4: W\n): Merge<Merge<Merge<T, U>, V>, W>\n\n/**\n * Copy the values of all the enumerable own properties from one or more source objects to a new\n * object.\n *\n * This will use `Object.assign` using a new object as the target parameter.\n * Unlike `Object.assign`, the return type accounts for common keys.\n *\n * @param sources\n * @return Returns the new merged object.\n */\nexport function merge(...sources: any[]): any\n\n/**\n * Copy the values of all the enumerable own properties from one or more source objects to a\n * new object.\n *\n * This will use `Object.assign` using a new object as the target parameter.\n *\n * @param sources One or more source objects from which to copy properties\n */\nexport function merge(...sources: any[]): any {\n if (!sources.length) return undefined\n if (Array.isArray(sources[0])) return Array.prototype.concat(...sources)\n return Object.assign({}, ...sources)\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ReportableError } from './ReportableError'\n\n/**\n * An error indicating an unexpected state.\n */\nexport class IllegalStateError extends ReportableError {\n get [Symbol.toStringTag](): string {\n return 'IllegalStateError'\n }\n\n constructor(message: string) {\n super(message)\n Object.setPrototypeOf(this, IllegalStateError.prototype)\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IllegalStateError } from '@/error/IllegalStateError'\nimport type { Unsubscribe } from '@/core/Unsubscribe'\nimport type { Maybe } from '@/util/type'\n\n/**\n * Any object that may be disposed.\n */\nexport interface Disposable {\n dispose(): void\n}\n\n/**\n * Returns true if the given value is disposable.\n *\n * @param value Any value. The value will be considered Disposable if it contains a method named\n * 'dispose', and that function requires zero parameters. This value will be type guarded to\n * Disposable if true is returned.\n */\nexport function isDisposable(value: any): value is Disposable {\n return (\n value != null &&\n typeof value.dispose === 'function' &&\n value.dispose.length === 0\n )\n}\n\n/**\n * Disposes all the given {@link Disposable} objects.\n *\n * @param disposables\n */\nexport function disposeAll(disposables: Iterable<Disposable>): void {\n for (const disposable of disposables) {\n disposable.dispose()\n }\n}\n\n/**\n * Returns a Disposable that invokes the given function on dispose.\n *\n * @param unsub\n */\nexport function toDisposable(unsub: () => void): Disposable {\n return { dispose: unsub }\n}\n\nexport type AddDisposable = <T extends Maybe<Disposable | Unsubscribe>>(\n disposable: T\n) => T\n\n/**\n * A Disposer disposes added disposables as a group.\n * The method members may be called without a receiver.\n */\nexport interface Disposer extends Disposable {\n readonly disposed: boolean\n readonly add: AddDisposable\n readonly dispose: () => void\n}\n\n/**\n * Creates a Disposer, an object on which {@link Disposable} instances may be added, and disposed\n * as a group.\n *\n * The method members may be called without a receiver, thus allowing destructuring.\n * Example:\n * ```\n * function create(): Disposable {\n * const { dispose, add } = disposer()\n * add(someDisposable)\n * add(anotherDisposable)\n * return {\n * dispose\n * }\n * }\n * ```\n *\n */\nexport function createDisposer(): Disposer {\n const disposables: Disposable[] = []\n let _disposed = false\n const add = <T extends Maybe<Unsubscribe | Disposable>>(\n disposableOrUnsub: T\n ): T => {\n if (_disposed) throw new DisposedError()\n if (disposableOrUnsub) {\n disposables.push(\n 'dispose' in disposableOrUnsub\n ? disposableOrUnsub\n : toDisposable(disposableOrUnsub)\n )\n }\n return disposableOrUnsub\n }\n return {\n dispose() {\n if (_disposed) throw new DisposedError()\n _disposed = true\n disposeAll(disposables)\n },\n add,\n get disposed() {\n return _disposed\n },\n }\n}\n\n/**\n * An illegal state error indicating that an object has been disposed.\n */\nexport class DisposedError extends IllegalStateError {\n get [Symbol.toStringTag](): string {\n return 'DisposedError'\n }\n\n constructor(message = 'Instance is disposed') {\n super(message)\n Object.setPrototypeOf(this, DisposedError.prototype)\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Disposable } from '@/core/disposable'\nimport { DisposedError, isDisposable } from '@/core/disposable'\nimport { IllegalStateError } from '@/error/IllegalStateError'\n\nexport interface ReadonlyLazy<T> {\n /**\n * True if the lazy instance has been constructed.\n */\n readonly constructed: boolean\n\n /**\n * When invoked the first time, constructs the value and returns it.\n * Consecutive calls will return that cached value.\n * @throws DisposedError If this lazy factory is disposed.\n */\n get value(): T\n}\n\nexport interface Lazy<T> extends ReadonlyLazy<T>, Disposable {\n /**\n * Sets the lazy instance's value.\n * If disposed, a {@link DisposedError} will be thrown.\n * @param value\n */\n set value(value: T)\n\n /**\n * Clears the lazy instance, disposing its value.\n * Unlike dispose(), this allows the lazy instance to be reconstructed upon the next get.\n * Typically used only in unit testing. May be used after {@link dispose}.\n */\n clear(): void\n}\n\n/**\n * A factory to lazily instantiate a single cached instance.\n */\nexport class LazyImpl<T> implements Lazy<T>, Disposable {\n private _constructing = false\n private _constructed = false\n private disposed = false\n private _value: T | undefined = undefined\n\n /**\n * @param factory A factory function that will be invoked at most once.\n */\n constructor(private readonly factory: () => T) {}\n\n get constructed(): boolean {\n return this._constructed\n }\n\n get value(): T {\n if (this.disposed) throw new DisposedError()\n if (this._constructing)\n throw new IllegalStateError('Lazy instance is constructing')\n if (this._constructed) return this._value as T\n this._constructing = true\n this._value = this.factory()\n this._constructing = false\n this._constructed = true\n return this._value\n }\n\n set value(value: T) {\n if (this.disposed) throw new DisposedError()\n this.clear()\n this._constructed = true\n this._value = value\n }\n\n clear(): void {\n this.disposed = false\n if (this._constructed) {\n if (isDisposable(this._value)) {\n this._value.dispose()\n }\n this._constructed = false\n this._value = undefined\n }\n }\n\n dispose() {\n if (this.disposed) throw new DisposedError()\n this.clear()\n this.disposed = true\n }\n}\n\n/**\n * Creates a new {@link Lazy} instance.\n *\n * @param factory A factory function that will be invoked at most once. If the instance produced\n * is disposable, it will be disposed on clear.\n */\nexport function lazy<T>(factory: () => T): Lazy<T> {\n return new LazyImpl<T>(factory)\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { TypedArray } from '@/util/collection/typedArray'\nimport { isTypedArray } from '@/util/collection/typedArray'\nimport { isPlainObject, ownKeys } from './object'\n\n/**\n * Recursively compares the values of all the enumerable own properties from two source objects.\n *\n * @param objectA\n * @param objectB\n * @param options\n */\nexport function equalDeep<T>(\n objectA: T,\n objectB: T,\n options: EqualOptions = defaultEqualOptions\n): boolean {\n if (objectA === objectB) return true\n if (objectA == null || objectB == null) return false\n const callback: EqualCallback = (subA, subB) =>\n equalDeep(subA, subB, options)\n for (const rule of options.rules) {\n if (rule.matches(objectA)) {\n if (!rule.matches(objectB)) return false\n return rule.equal(objectA, objectB, callback)\n }\n }\n return false\n}\n\n/**\n * Configuration for the equalDeep comparator.\n */\nexport interface EqualOptions {\n /**\n * The first equal rule where the first source object matches will be used.\n * If the second object does not match, the two objects will not be considered equal.\n */\n readonly rules: readonly EqualRule<any>[]\n}\n\n/**\n * A equal function to be provided to equal rules.\n */\nexport type EqualCallback<T = any> = (objectA: T, objectB: T) => boolean\n\nexport interface EqualRule<T> {\n /**\n * Returns true if this EqualRule should be applied for the given object.\n * @param object\n */\n readonly matches: (object: any) => object is T\n\n /**\n * Equals the two sources.\n * @param objectA May be undefined, the first object to equal.\n * @param objectB The second object to equal or clone if objectA is undefined.\n * @param equal This callback may be used to equal or clone sub-properties.\n */\n readonly equal: (objectA: T, objectB: T, equal: EqualCallback) => boolean\n}\n\nexport const arrayEqualRule: EqualRule<any[]> = {\n matches(object: any): object is any[] {\n return Array.isArray(object)\n },\n\n equal(objectA: any[], objectB: any[], equal: EqualCallback): boolean {\n if (objectA.length !== objectB.length) return false\n for (let i = 0; i < objectA.length; i++) {\n if (!equal(objectA[i], objectB[i])) return false\n }\n return true\n },\n} as const\n\nexport const plainObjectEqualRule: EqualRule<Record<any, any>> = {\n matches(object: any): object is Record<any, any> {\n return isPlainObject(object)\n },\n\n equal(\n objectA: Record<any, any>,\n objectB: Record<any, any>,\n equal: EqualCallback\n ): boolean {\n const keysA = ownKeys(objectA)\n const keysB = ownKeys(objectB)\n if (keysA.size !== keysB.size) return false\n for (const key of keysA) {\n if (!(key in objectB)) return false\n if (!equal(objectA[key], objectB[key])) return false\n }\n return true\n },\n} as const\n\nexport const regexpEqualRule: EqualRule<RegExp> = {\n matches(object: any): object is RegExp {\n return object instanceof RegExp\n },\n equal(objectA: RegExp, objectB: RegExp, _: EqualCallback): boolean {\n return (\n // Note: legacy edge does not support flags property\n objectA.toString() === objectB.toString() &&\n objectA.lastIndex === objectB.lastIndex\n )\n },\n} as const\n\nexport const dateEqualRule: EqualRule<Date> = {\n matches(object: any): object is Date {\n return object instanceof Date\n },\n equal(objectA: Date, objectB: Date, _: EqualCallback): boolean {\n return objectA.getTime() === objectB.getTime()\n },\n} as const\n\nexport const mapEqualRule: EqualRule<Map<any, any>> = {\n matches(object: any): object is Map<any, any> {\n return object instanceof Map\n },\n equal(\n objectA: Map<any, any>,\n objectB: Map<any, any>,\n equal: EqualCallback\n ): boolean {\n if (objectA.size !== objectB.size) return false\n for (const key of objectA.keys()) {\n if (!objectB.has(key)) return false\n if (!equal(objectA.get(key), objectB.get(key))) return false\n }\n return true\n },\n} as const\n\nexport const setEqualRule: EqualRule<Set<any>> = {\n matches(object: any): object is Set<any> {\n return object instanceof Set\n },\n equal(objectA: Set<any>, objectB: Set<any>, _: EqualCallback): boolean {\n if (objectA.size !== objectB.size) return false\n for (const key of objectA.keys()) {\n if (!objectB.has(key)) return false\n }\n return true\n },\n} as const\n\n/**\n * A typed array will always have primitive elements, compare that the lengths are equal and every\n * element is equal.\n */\nexport const typedArrayEqualRule: EqualRule<TypedArray> = {\n matches(object: any): object is TypedArray {\n return isTypedArray(object)\n },\n equal(objectA: TypedArray, objectB: TypedArray, _: EqualCallback): boolean {\n if (objectA.length !== objectB.length) return false\n if (objectA.byteLength !== objectB.byteLength) return false\n for (let i = 0; i < objectA.length; i++) {\n if (objectA[i] !== objectB[i]) return false\n }\n return true\n },\n} as const\n\n/**\n * The default equal options provide rules for comparing arrays, plain objects, RegExp, Date,\n * Map, Set, and TypedArray.\n */\nexport const defaultEqualOptions: EqualOptions = {\n rules: [\n arrayEqualRule,\n plainObjectEqualRule,\n regexpEqualRule,\n dateEqualRule,\n mapEqualRule,\n setEqualRule,\n typedArrayEqualRule,\n ],\n} as const\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { MergeCallback, MergeRule } from './mergeDeep'\nimport { defaultMergeOptions, mergeDeep } from './mergeDeep'\nimport type { MutableDeep } from './mutableType'\n\n/**\n * Merge options defines the behavior for {@link mergeDeep}.\n * See the {@link defaultMergeOptions} for defaults that will be used if any merge options are\n * omitted.\n */\nexport interface CloneOptions {\n /**\n * If an object does not pass any of the rules, if this is true the reference will be\n * copied. If false (default), a {@link MergeReferenceError} will be thrown.\n * This only applies to objects, not functions or primitives.\n */\n readonly allowReferenceCopy: boolean\n\n /**\n * The first clone rule that matches will be used.\n *\n * If no rules match, the value will be copied by reference unless `allowReferenceCopy` is\n * false (default), in which case, a {@link MergeReferenceError} will be thrown.\n */\n readonly rules: readonly CloneRule<any>[]\n}\n\n/**\n * A CloneRule defines if and how an object should be cloned.\n */\nexport interface CloneRule<T> {\n /**\n * Returns true if this MergeRule should be applied for the given object.\n * @param object\n */\n readonly matches: (object: any) => object is T\n\n /**\n * Clones the given value.\n *\n * @param source A value guaranteed to have matched with `matches`.\n * @param clone This callback may be used to clone sub-properties.\n */\n readonly clone: (source: T, clone: CloneCallback) => MutableDeep<T>\n}\n\n/**\n * A function to clone a sub-object from a clone rule.\n */\nexport type CloneCallback = <T>(\n /**\n * The source object to clone.\n */\n source: T,\n\n /**\n * The identifier to be used in error reporting.\n */\n prop: string | number\n) => MutableDeep<T>\n\n/**\n * Performs a deep clone on the target object.\n *\n * This is an alias for `mergeDeep(target)` that additionally converts clone rules to one-sided\n * merge rules.\n *\n * @param target The target object to clone.\n * @param options The merge options to use.\n * `clone`, unlike `mergeDeep`, `allowReferenceCopy` will default to false.\n * @see mergeDeep\n */\nexport function clone<T>(\n target: T,\n options?: Partial<CloneOptions>\n): MutableDeep<T> {\n // mergeDeep works as a deep clone if given a single source.\n return mergeDeep<T>([target], {\n allowReferenceCopy: options?.allowReferenceCopy ?? false,\n rules: options?.rules?.map(toMergeRule) ?? defaultMergeOptions.rules,\n }) as MutableDeep<T>\n}\n\n/**\n * Creates a wrapper to convert a clone rule to a merge rule.\n */\nexport function toMergeRule<T>(cloneRule: CloneRule<T>): MergeRule<T> {\n return {\n matches: cloneRule.matches,\n merge(_sourceA: T | undefined, sourceB: T, merge: MergeCallback): T {\n return cloneRule.clone(\n sourceB,\n <S>(source: S, prop: string | number): MutableDeep<S> => {\n return merge(undefined, source, prop) as MutableDeep<S>\n }\n ) as T\n },\n } as const\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Maybe } from '@/util/type'\nimport { IllegalArgumentError } from '@/error/IllegalArgumentError'\n\n/**\n * Given request parameters, returns the header for the given key, or null.\n */\nexport function getHeaderFromRequestParams(\n input: RequestInfo | URL,\n init: Maybe<RequestInit>,\n key: string\n): string | null {\n if (input instanceof Request) {\n return getHeaderFromHeadersInit(input.headers, key)\n } else if (init?.headers) {\n return getHeaderFromHeadersInit(init.headers, key)\n }\n return null\n}\n\nexport function getHeaderFromHeadersInit(\n headers: Readonly<HeadersInit>,\n key: string\n): string | null {\n key = key.toLowerCase()\n if (headers instanceof Headers) {\n return headers.get(key)\n } else if (Array.isArray(headers)) {\n const header = headers.find(([iKey]) => iKey.toLowerCase() === key)\n return header ? header[1] : null\n } else if (typeof headers === 'object') {\n const foundKey: string | undefined = Object.keys(headers).find(\n (iKey) => iKey.toLowerCase() === key\n )\n return foundKey ? (headers as any)[foundKey] : null\n }\n throw new IllegalArgumentError('Unexpected headers type')\n}\n\n/**\n * Given fetch input, clones the input, transforms the URL and returns a new `RequestInfo | URL` input parameter.\n */\nexport function changeRequestInputUrl(\n input: RequestInfo | URL,\n transform: (url: URL) => void\n): RequestInfo | URL {\n if (input instanceof URL) {\n const url = new URL(input)\n transform(url)\n return url\n } else if (typeof input === 'string') {\n const url = new URL(input)\n transform(url)\n return url\n } else {\n const url = new URL(input.url)\n transform(url)\n return new Request(url.toString(), input)\n }\n}\n\n/**\n * Given an object of HeadersInit type (a Headers instance, array of key-value pairs, or and object of key-value pairs),\n * returns a Record of key-value pairs.\n *\n * @param headers\n */\nexport function normalizeHeadersInit(\n headers: Maybe<HeadersInit>\n): Record<string, string> {\n if (!headers) return {}\n if (Array.isArray(headers)) {\n const out: Record<string, string> = {}\n for (const [key, value] of headers) {\n out[key] = value\n }\n return out\n } else if (headers instanceof Headers) {\n const out: Record<string, string> = {}\n for (const [key, value] of headers.entries()) {\n out[key] = value\n }\n return out\n } else {\n return headers\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Maybe } from '@/util/type'\n\n/**\n * Converts a byte buffer to an 8-bit width string.\n *\n * @return Returns a single-byte string.\n * @param buffer\n */\nexport function bufferToByteStr(\n buffer: ArrayLike<number> | ArrayBuffer\n): string {\n return String.fromCharCode.apply(\n null,\n new Uint8Array(buffer) as unknown as number[]\n )\n}\n\n/**\n * Converts a byte string to a byte array.\n *\n * @param byteStr The 8 bit-width string to convert to a byte array.\n * @return Returns a byte array representing the byte string.\n */\nexport function byteStrToByteArray(byteStr: string): Uint8Array<ArrayBuffer> {\n // This does the same thing as {@link TextEncoder.encode}, but TextEncoder is not available on\n // Edge Legacy, which we require for PlayReady testing.\n const n = byteStr.length\n const bytes = new Uint8Array(n)\n for (let i = 0; i < n; i++) {\n bytes[i] = byteStr.charCodeAt(i)\n }\n return bytes\n}\n\n/**\n * Converts an array buffer of binary data to a Base64 encoded string.\n *\n * @param buffer a buffer of binary data.\n * @return Returns a Base64 encoded string representing the provided binary data.\n */\nexport function bufferToBase64(\n buffer: ArrayLike<number> | ArrayBuffer\n): string {\n return global.btoa(bufferToByteStr(buffer))\n}\n\n/**\n * Converts a Base64 encoded string into a byte array.\n * The 6-bit width Base64 data is converted to a binary string then written to a byte array.\n *\n * @param base64 A Base64 encoded string.\n */\nexport function base64ToByteArray(base64: string): Uint8Array<ArrayBuffer> {\n return byteStrToByteArray(global.atob(base64))\n}\n\n/**\n * Converts a 16-bit buffer of any length to a utf-16 string.\n *\n * @see https://developer.chrome.com/blog/how-to-convert-arraybuffer-to-and-from-string\n *\n * @param buffer An iterable of double-byte code points.\n * @return Returns a UTF-16 string.\n */\nexport function bufferToUtf16(buffer: ArrayLike<number> | ArrayBuffer): string {\n return String.fromCharCode.apply(\n null,\n new Uint16Array(buffer) as unknown as number[]\n )\n}\n\n/**\n * Converts a UTF-16 string to a Uint16Array.\n *\n * @see https://developer.chrome.com/blog/how-to-convert-arraybuffer-to-and-from-string\n * @param str A UTF-16 string.\n */\nexport function utf16ToUint16Array(str: string): Uint16Array<ArrayBuffer> {\n const n = str.length\n const uint16Array = new Uint16Array(n)\n for (let i = 0; i < n; i++) {\n uint16Array[i] = str.charCodeAt(i)\n }\n return uint16Array\n}\n\n/**\n * If a byte array is provided, returns as is, otherwise creates a Uint8Array from an array buffer like.\n * @param buffer\n */\nexport function bufferToByteArray(\n buffer: Uint8Array<ArrayBuffer> | ArrayLike<number> | ArrayBuffer\n): Uint8Array<ArrayBuffer> {\n return buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer)\n}\n\n/**\n * Returns true if the two buffers are equal.\n */\nexport function buffersEqual(\n bufferA: Maybe<Uint8Array | ArrayLike<number> | ArrayBuffer>,\n bufferB: Maybe<Uint8Array | ArrayLike<number> | ArrayBuffer>\n): boolean {\n if (bufferA === bufferB) return true\n if (!bufferA && !bufferB) return true\n if (!bufferA || !bufferB) return false\n\n const arrA = bufferToByteArray(bufferA)\n const arrB = bufferToByteArray(bufferB)\n\n if (arrA.byteLength !== arrB.byteLength) return false\n for (let i = 0; i < arrA.byteLength; i++) {\n if (arrA[i] !== arrB[i]) return false\n }\n return true\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ErrorOrigin } from '@/error/ErrorOrigin'\nimport { ErrorLevel, ReportableError } from '@/error/ReportableError'\n\nexport class BufferError extends ReportableError {\n get [Symbol.toStringTag](): string {\n return 'BufferError'\n }\n\n constructor(\n message: string,\n origin: string = ErrorOrigin.MEDIA,\n level: ErrorLevel = ErrorLevel.FATAL\n ) {\n super(message, origin, level)\n Object.setPrototypeOf(this, BufferError.prototype)\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { bufferToByteStr, bufferToUtf16 } from '@/util/buffer/buffer'\nimport { BufferError } from '@/util/buffer/BufferError'\n\nexport class BufferReader {\n position: number = 0\n\n private dataView: DataView<ArrayBuffer>\n\n constructor(buffer: ArrayBuffer) {\n this.dataView = new DataView(buffer)\n }\n\n /**\n * Asserts that at least `size` bytes are remaining.\n * @param size\n */\n assertRemaining(size: number) {\n if (this.remaining < size) {\n throw new BufferError(\n `Unexpected end of buffer reached at position: ${this.position}. Reading ${size} bytes, ${this.remaining} available.`\n )\n }\n }\n\n hasNext(): boolean {\n return this.remaining > 0\n }\n\n get remaining(): number {\n return this.dataView.byteLength - this.position\n }\n\n skip(bytes: number) {\n this.assertRemaining(bytes)\n this.position += bytes\n }\n\n /**\n * Reads the next Float32 value.\n * @param littleEndian If false or undefined, a big-endian value should be read.\n */\n readFloat32(littleEndian?: boolean): number {\n this.assertRemaining(4)\n const value = this.dataView.getFloat32(this.position, littleEndian)\n this.position += 4\n return value\n }\n\n /**\n * Reads the next Float64 value.\n * @param littleEndian If false or undefined, a big-endian value should be read.\n */\n readFloat64(littleEndian?: boolean): number {\n this.assertRemaining(8)\n const value = this.dataView.getFloat64(this.position, littleEndian)\n this.position += 8\n return value\n }\n\n /**\n * Reads the next Int8 value.\n */\n readInt8(): number {\n this.assertRemaining(1)\n return this.dataView.getInt8(this.position++)\n }\n\n /**\n * Reads the next Int16 value.\n * @param littleEndian If false or undefined, a big-endian value should be read.\n */\n readInt16(littleEndian?: boolean): number {\n this.assertRemaining(2)\n const value = this.dataView.getInt16(this.position, littleEndian)\n this.position += 2\n return value\n }\n\n /**\n * Reads the next Int32 value.\n * @param littleEndian If false or undefined, a big-endian value should be read.\n */\n readInt32(littleEndian?: boolean): number {\n this.assertRemaining(4)\n const value = this.dataView.getInt32(this.position, littleEndian)\n this.position += 4\n return value\n }\n\n /**\n * Reads the next Int64 value.\n * @param littleEndian If false or undefined, a big-endian value should be read.\n */\n readInt64(littleEndian?: boolean): bigint {\n this.assertRemaining(8)\n const value = this.dataView.getBigInt64(this.position, littleEndian)\n this.position += 8\n return value\n }\n\n /**\n * Reads the next Uint8 value.\n */\n readUint8(): number {\n this.assertRemaining(1)\n return this.dataView.getUint8(this.position++)\n }\n\n /**\n * Reads the next Uint16 value.\n * @param littleEndian If false or undefined, a big-endian value should be read.\n */\n readUint16(littleEndian?: boolean): number {\n this.assertRemaining(2)\n const value = this.dataView.getUint16(this.position, littleEndian)\n this.position += 2\n return value\n }\n\n /**\n * Reads the next Uint32 value.\n * @param littleEndian If false or undefined, a big-endian value should be read.\n */\n readUint32(littleEndian?: boolean): number {\n this.assertRemaining(4)\n const value = this.dataView.getUint32(this.position, littleEndian)\n this.position += 4\n return value\n }\n\n /**\n * Reads the next Uint64 value.\n * @param littleEndian If false or undefined, a big-endian value should be read.\n */\n readUint64(littleEndian?: boolean): bigint {\n this.assertRemaining(8)\n const value = this.dataView.getBigUint64(this.position, littleEndian)\n this.position += 8\n return value\n }\n\n /**\n * Reads from the current position into a sliced array buffer of the given size.\n * @param count\n */\n readBytes(count: number): ArrayBuffer {\n this.assertRemaining(count)\n const buffer = this.dataView.buffer.slice(\n this.position,\n this.position + count\n )\n this.position += count\n return buffer\n }\n\n /**\n * Reads the given number of characters into a byte string.\n * @param length\n */\n readString(length: number): string {\n return bufferToByteStr(this.readBytes(length))\n }\n\n /**\n * Reads the given number of characters into a UTF-16 string.\n * @param length\n */\n readUtf16String(length: number): string {\n return bufferToUtf16(this.readBytes(length))\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ReportableError } from '@/error/ReportableError'\nimport { ErrorOrigin } from '@/error/ErrorOrigin'\nimport type { Json } from '@/util/serialization/json'\n\n/**\n * An error indicating that input had an invalid shape.\n */\nexport class ValidationError extends ReportableError {\n get [Symbol.toStringTag](): string {\n return 'ValidationError'\n }\n\n /**\n * @param message The validation error message.\n * @param origin The error origin, typically API (default) or SERVICE_EXTERNAL\n * @param path The property path to the invalid field.\n */\n constructor(\n message: string,\n origin: string = ErrorOrigin.API,\n readonly path: readonly string[] = []\n ) {\n super(message, origin)\n Object.setPrototypeOf(this, ValidationError.prototype)\n }\n\n toJSON(): Json {\n return {\n ...super.toJSON(),\n origin: this.origin,\n path: this.path,\n }\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ErrorOrigin } from '@/error/ErrorOrigin'\nimport { ReportableError } from '@/error/ReportableError'\nimport type { Json } from '@/util/serialization/json'\n\nexport class MediaUnsupportedError extends ReportableError {\n constructor(\n message: string,\n readonly code: string\n ) {\n super(message, ErrorOrigin.MEDIA)\n Object.setPrototypeOf(this, MediaUnsupportedError.prototype)\n }\n\n toJSON(): Json {\n return { ...super.toJSON(), code: this.code }\n }\n\n get [Symbol.toStringTag](): string {\n return 'MediaUnsupportedError'\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { BufferReader } from '@/util/buffer/BufferReader'\nimport { ValidationError } from '@/error/ValidationError'\nimport { ErrorOrigin } from '@/error/ErrorOrigin'\nimport { MediaUnsupportedError } from '@/error/MediaUnsupportedError'\n\n/**\n * ISO_IEC_14496-12 Segment Index Box\n * @module\n */\n\n/**\n * Represents the base structure of a Segment Index ('sidx') Box.\n * The 'sidx' box is used in MPEG-4 media files to provide indexing information for efficient data access and retrieval.\n */\nexport interface SidxBoxBase {\n /**\n * The version, 0 and 1 supported.\n */\n readonly version: number\n\n /**\n * The ID of the track.\n */\n readonly referenceId: number\n\n /**\n * The timescale for the media in this 'sidx' box. It is a 32-bit unsigned integer.\n * This value represents the number of time units that pass in one second.\n */\n readonly timescale: number\n\n /**\n * An array of segment references. Each segment reference provides information about individual media segments.\n */\n readonly references: readonly SidxSegmentReference[]\n}\n\n/**\n * Properties specific to version 0 of a Segment Index ('sidx') Box.\n */\nexport interface SidxBoxV0 extends SidxBoxBase {\n readonly version: 0\n\n /**\n * The earliest presentation time of any access unit in the media segments that are referenced by this 'sidx' box.\n */\n readonly earliestPresentationTime: number\n\n /**\n * The byte offset from the end of this 'sidx' box to the first media segment in this 'sidx'.\n * For version 0, this is a 32-bit unsigned integer.\n */\n readonly firstOffset: number\n}\n\n/**\n * Properties specific to version 1 of a Segment Index ('sidx') Box.\n */\nexport interface SidxBoxV1 extends SidxBoxBase {\n readonly version: 1\n\n /**\n * The earliest presentation time of any access unit in the media segments that are referenced by this 'sidx' box.\n */\n readonly earliestPresentationTime: bigint\n\n /**\n * The byte offset from the end of this 'sidx' box to the first media segment in this 'sidx'.\n */\n readonly firstOffset: bigint\n}\n\nexport type SidxBox = SidxBoxV0 | SidxBoxV1\n\n/**\n * A single segment reference within a sidx box.\n */\nexport interface SidxSegmentReference {\n /**\n * Indicates the reference type. A value of 0 means the reference is to a media segment. A value of 1 indicates\n * the reference is to a hint track segment.\n */\n readonly referenceType: number\n\n /**\n * The size of the referenced segment in bytes.\n */\n readonly referencedSize: number\n\n /**\n * The duration of the subsegment. This is expressed in the timescale provided in the 'sidx' box.\n */\n readonly subsegmentDuration: number\n\n /**\n * Indicates if the segment starts with a SAP (Stream Access Point). If `true`, the segment starts with a SAP,\n * facilitating random access and efficient streaming.\n */\n readonly startsWithSap: boolean\n\n /**\n * The SAP type indicates the type of stream access point that starts the segment. This is a 3-bit field. The\n * SAP types are defined in ISO/IEC 14496-12, and they describe the characteristics of the stream access points.\n */\n readonly sapType: number\n\n /**\n * The SAP delta time specifies the difference in time (in the timescale of the 'sidx' box) between the earliest\n * presentation time of the segment and the first SAP within it. This allows players to quickly locate the SAP\n * for efficient playback startup or seeking.\n */\n readonly sapDeltaTime: number\n}\n\nexport function parseSidxBox(buffer: ArrayBuffer): SidxBox {\n const reader = new BufferReader(buffer)\n\n reader.skip(4) // box size\n const boxType = reader.readString(4)\n if (boxType !== 'sidx')\n throw new ValidationError(\n `expected 'sidx' box but had box type: '${boxType}'`,\n ErrorOrigin.MEDIA\n )\n\n const version = reader.readUint8()\n\n // Skip flags\n reader.skip(3)\n\n const referenceId = reader.readUint32()\n const timescale = reader.readUint32()\n\n let versionedProps:\n | {\n // v0\n readonly version: 0\n readonly earliestPresentationTime: number\n readonly firstOffset: number\n }\n | {\n // v1\n readonly version: 1\n readonly earliestPresentationTime: bigint\n readonly firstOffset: bigint\n }\n\n if (version === 0) {\n versionedProps = {\n version: 0,\n earliestPresentationTime: reader.readUint32(),\n firstOffset: reader.readUint32(),\n }\n } else {\n // version > 1 may be backwards compatible for our use cases, but may not be. Log a warning.\n if (version !== 1)\n throw new MediaUnsupportedError(\n `sidx box version ${version} not supported`,\n 'unsupported-sidx-version'\n )\n if (typeof BigInt === 'undefined')\n throw new MediaUnsupportedError(\n `sidx box version 1 not supported on this platform`,\n 'client-unsupported-sidx-version'\n )\n versionedProps = {\n version: 1,\n earliestPresentationTime: reader.readUint64(),\n firstOffset: reader.readUint64(),\n }\n }\n\n // Skip reserved bits\n reader.skip(2)\n\n const referenceCount = reader.readUint16()\n const references: SidxSegmentReference[] = new Array(referenceCount)\n\n for (let i = 0; i < referenceCount; i++) {\n const refTypeAndSize = reader.readUint32()\n // 1 bit\n const referenceType = (refTypeAndSize & 0x80000000) >>> 31\n\n if (referenceType !== 0) {\n // ISO_IEC_14496-12 K.2.2\n throw new MediaUnsupportedError(\n 'hierarchical sidx reference type not supported',\n 'unsupported-sidx-reference-type'\n )\n }\n\n // 31 bits\n const referencedSize = refTypeAndSize & 0x7fffffff\n\n const subsegmentDuration = reader.readUint32()\n\n const sap = reader.readUint32()\n const startsWithSap = (sap & 0x80000000) >>> 31 === 1\n const sapType = (sap >>> 28) & 0x07\n const sapDeltaTime = sap & 0x0fffffff\n\n references[i] = {\n referenceType,\n referencedSize,\n subsegmentDuration,\n startsWithSap,\n sapType,\n sapDeltaTime,\n }\n }\n return {\n ...versionedProps,\n referenceId,\n timescale,\n references,\n }\n}\n\n/**\n * Creates a timeline of the segment start times, in timescale units.\n * The last element will be the last segment's end time.\n *\n * @param sidx\n */\nexport function getSidxSampleTimes(sidx: SidxBox) {\n let sampleTime = Number(sidx.earliestPresentationTime)\n const n = sidx.references.length\n const sampleTimes: number[] = new Array<number>(n + 1)\n for (let i = 0; i < n; i++) {\n sampleTimes[i] = sampleTime\n sampleTime += sidx.references[i].subsegmentDuration\n }\n sampleTimes[n] = sampleTime\n return sampleTimes\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IllegalArgumentError } from '@/error/IllegalArgumentError'\n\n/**\n * Returns an array of numbers between start and end, incrementing by step.\n *\n * E.g.\n * ```\n * range(1, 10) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n * range(5, 2) // [5, 4, 3, 2]\n * range(5, 4, -0.2) // [5.0, 4.8, 4.6, 4.4, 4.2, 4.0]\n * ```\n * @param start Start position (inclusive)\n * @param endInclusive End position (inclusive)\n * @param step The amount to increment.\n */\nexport function createRangeIter(\n start: number,\n endInclusive: number,\n step = 1\n): IterableIterator<number> {\n const positive = endInclusive >= start\n if (\n (endInclusive > start && step <= 0) ||\n (endInclusive < start && step >= 0)\n ) {\n throw new IllegalArgumentError('Iterator will never complete.')\n }\n let i = start\n return {\n [Symbol.iterator](): IterableIterator<number> {\n return this\n },\n\n next: (): IteratorResult<number> => {\n const result = {\n value: i,\n done: positive ? i > endInclusive : i < endInclusive,\n }\n i += step\n return result\n },\n }\n}\n\n/**\n * Maps an iterable object using the given transform.\n * Unlike `Array#map`, this doesn't create a new Array in memory, the transform is done on\n * iteration.\n *\n * @param iterable\n * @param transform Transforms each element as it's requested.\n */\nexport function mapIter<T, U>(\n iterable: Iterable<T>,\n transform: (element: T) => U\n): IterableIterator<U> {\n const it: Iterator<T> = iterable[Symbol.iterator]()\n return {\n [Symbol.iterator](): IterableIterator<U> {\n return mapIter(iterable, transform)\n },\n next: (): IteratorResult<U> => {\n const result = it.next()\n if (result.done) return result\n return {\n value: transform(result.value),\n done: false,\n }\n },\n }\n}\n\nexport function filterIter<T, S extends T>(\n iterable: Iterable<T>,\n predicate: (value: T) => value is S\n): IterableIterator<S>\n\nexport function filterIter<T>(\n iterable: Iterable<T>,\n predicate: (value: T) => boolean\n): IterableIterator<T>\n\n/**\n * Filters an iterable object using the given predicate.\n * Unlike `Array#filter`, this doesn't create a new Array in memory, the filter is done on\n * iteration.\n *\n * @param iterable\n * @param predicate Returns true if the element should be included in the new iteration.\n */\nexport function filterIter<T>(\n iterable: Iterable<T>,\n predicate: (value: T) => boolean\n): IterableIterator<T> {\n const it = iterable[Symbol.iterator]()\n return {\n [Symbol.iterator](): IterableIterator<T> {\n return filterIter(iterable, predicate)\n },\n\n next: (): IteratorResult<T> => {\n while (true) {\n const next = it.next()\n if (next.done) {\n return {\n value: undefined,\n done: true,\n }\n } else if (predicate(next.value)) {\n return {\n value: next.value,\n done: false,\n }\n }\n }\n },\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Disposable } from '@/core/disposable'\nimport { DisposedError } from '@/core/disposable'\nimport type { TimeoutId } from '@/global/environment'\n\n/**\n * A TimeoutSlot provides a way to have a managed window timeout that can be added to a\n * disposer, and guarantee that there is only one timeout active at a time.\n */\nexport class TimeoutSlot implements Disposable {\n private timeoutId: TimeoutId | null = null\n private disposed = false\n\n /**\n * Returns true if there is an active timeout pending.\n */\n get active(): boolean {\n return this.timeoutId != null\n }\n\n /**\n * Sets a timeout, clearing any existing timeout first.\n *\n * @param callback The callback to invoke after the given time has elapsed.\n * @param time The amount of time to wait, in seconds.\n */\n set(callback: () => void, time?: number) {\n if (this.disposed) throw new DisposedError()\n this.clear()\n this.timeoutId = setTimeout(\n () => {\n this.timeoutId = null\n callback()\n },\n time == null ? time : time * 1000\n )\n }\n\n /**\n * Clears the existing timeout.\n */\n clear() {\n if (this.timeoutId == null) return\n clearTimeout(this.timeoutId)\n this.timeoutId = null\n }\n\n /**\n * Clears the timeout and throws an error if a new one is attempted to be set.\n */\n dispose(): void {\n this.clear()\n this.disposed = true\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Disposable } from '@/core/disposable'\nimport { DisposedError } from '@/core/disposable'\nimport { IllegalArgumentError } from '@/error/IllegalArgumentError'\nimport { TimeoutSlot } from '@/util/async/TimeoutSlot'\n\nexport interface ThrottleOptions {\n /**\n * If true, the first invocation of a throttled function will pass through.\n */\n readonly leading: boolean\n\n /**\n * If true, when the throttle window time has elapsed, the function will be invoked.\n * Either leading or trailing must be true.\n * When trailing is true, timers will be used\n */\n readonly trailing: boolean\n}\n\nexport interface ThrottledCallback extends Disposable {\n (): void\n\n /**\n * Resets the throttle timer.\n * If an inner call is pending, it will be immediately invoked.\n */\n reset(): void\n}\n\nconst defaultThrottleOptions: ThrottleOptions = {\n leading: true,\n trailing: true,\n} as const\n\n/**\n * Throttle returns a function that limits the rate of invocations.\n *\n * @param inner The function to invoke at a throttled rate.\n * @param duration The interval (in seconds) for which the throttled function will be limited.\n * @param options Options for which ends of the window the function should be invoked. If omitted,\n * leading and trailing will be true.\n * @return Returns a method that, when invoked, will invoke the inner method at a throttled rate.\n * The returned method will have a `dispose` handle to clear any active timers and prevent\n * further invocation.\n */\nexport function throttle(\n inner: () => void,\n duration: number,\n options: Partial<ThrottleOptions> = defaultThrottleOptions\n): ThrottledCallback {\n options = {\n leading: false,\n trailing: false,\n ...options,\n }\n if (!options.leading && !options.trailing)\n throw new IllegalArgumentError(\n 'One of leading or trailing must be true.'\n )\n // The last timestamp the inner method was invoked.\n let lastTime = Number.NEGATIVE_INFINITY\n const timeout = new TimeoutSlot()\n let disposed = false\n return Object.assign(\n () => {\n if (disposed) throw new DisposedError()\n const now = Date.now() / 1000\n const pastDuration = now - lastTime >= duration\n if (pastDuration) {\n lastTime = now\n if (options.leading) inner()\n }\n if (\n !timeout.active &&\n options.trailing &&\n !(pastDuration && options.leading)\n ) {\n timeout.set(\n () => {\n lastTime = Date.now() / 1000\n inner()\n },\n duration - now + lastTime\n )\n }\n },\n {\n reset() {\n lastTime = Number.NEGATIVE_INFINITY\n if (timeout.active) {\n timeout.clear()\n inner()\n }\n },\n\n dispose() {\n disposed = true\n timeout.dispose()\n },\n }\n )\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { CacheMap } from './CacheMap'\nimport { mapIter } from '@/util/iteration/iterable'\nimport type { LinkedNode } from './LinkedList'\nimport { LinkedList } from './LinkedList'\nimport { IllegalStateError } from '@/error/IllegalStateError'\n\n/**\n * An LRU Cache implementation.\n * An LRU (Least Recently Used) Cache is a Map with a fixed capacity. When the capacity is\n * exceeded, the least recently used element will be removed.\n * An element is considered to be used when it has been retrieved via `get`, or when it's been\n * `set`.\n * Iteration does not affect ordering.\n */\nexport class LruCache<K, V> implements CacheMap<K, V> {\n /**\n * A map of the list nodes.\n *\n * @private\n */\n private cache: Map<K, LinkedNode<[K, V]>> = /* @__PURE__ */ new Map()\n\n /**\n * Most recently used elements are at the tail, least recently used are at the head.\n * @private\n */\n private list = /* @__PURE__ */ new LinkedList<[K, V]>()\n\n /**\n * An element is about to be removed. Should return true if the element may be evicted,\n * otherwise false.\n * If false is returned for all elements, an IllegalStateError is thrown.\n */\n onEvicting: ((element: V, key: K, list: CacheMap<K, V>) => boolean) | null =\n null\n\n /**\n * When an element is added when at capacity, the least recently used element will be removed.\n * This callback can be set to be notified with the element being evicted, which may be used\n * for disposal.\n */\n onEvict: ((element: V, key: K, list: CacheMap<K, V>) => void) | null = null\n\n private _capacity = 0\n\n constructor(initialCapacity: number) {\n this._capacity = initialCapacity\n }\n\n get capacity(): number {\n return this._capacity\n }\n\n set capacity(value: number) {\n this._capacity = value\n while (this.cache.size > this.capacity) {\n this.evictLeastRecentlyUsed()\n }\n }\n\n /**\n * @returns the number of elements in the Map.\n */\n get size(): number {\n return this.cache.size\n }\n\n /**\n * @returns boolean indicating whether an element with the specified key exists or not.\n */\n has(key: K): boolean {\n return this.cache.has(key)\n }\n\n /**\n * Returns the mapped value for the given key, and moves the element to the most recently\n * used position.\n *\n * @returns Returns the element associated with the given key, or undefined if no such\n * element exists.\n */\n get(key: K): V | undefined {\n const node = this.cache.get(key)\n if (!node) return undefined\n this.list.pushNode(node)\n return node.value[1]\n }\n\n /**\n * Adds a new element with a specified key and value to the Map. If an element with the\n * same key already exists, the element will be updated and position moved to most recently\n * used.\n */\n set(key: K, value: V): this {\n if (this.has(key)) {\n const node = this.cache.get(key)!\n node.value[1] = value\n this.list.pushNode(node)\n } else {\n const node = this.list.push([key, value])\n this.cache.set(key, node)\n if (this.cache.size > this.capacity) {\n this.evictLeastRecentlyUsed()\n }\n }\n return this\n }\n\n private evictLeastRecentlyUsed() {\n let node = this.list.head\n while (node) {\n const [key, value] = node.value\n const allowed =\n this.onEvicting?.call(null, value, key, this) ?? true\n if (allowed) break\n node = node.next\n }\n if (!node)\n throw new IllegalStateError(\n 'onEvicting returned false for all elements'\n )\n const [key, value] = node.value\n this.list.remove(node)\n this.cache.delete(node.value[0])\n this.onEvict?.call(null, value, key, this)\n }\n\n /**\n * Clears all elements from the cache.\n */\n clear(): void {\n this.list.clear()\n this.cache.clear()\n }\n\n /**\n * @returns true if an element in the Map existed and has been removed, or false if the element does not exist.\n */\n delete(key: K): boolean {\n if (!this.has(key)) return false\n const node = this.cache.get(key)!\n this.cache.delete(key)\n this.list.remove(node)\n return true\n }\n\n /**\n * Executes a provided function once per each key/value pair in the Map, in insertion order.\n *\n * @param callback A callback to invoke for every element in the cache.\n * @param thisArg Value to use as this when executing callback\n */\n forEach(\n callback: (value: V, key: K, map: this) => void,\n thisArg?: any\n ): void {\n return this.list.forEach((entry) => {\n callback.call(thisArg, entry[1], entry[0], this)\n })\n }\n\n /**\n * Returns an iterable of key, value pairs for every entry in the map.\n */\n entries(): IterableIterator<[K, V]> {\n return this[Symbol.iterator]()\n }\n\n /**\n * Returns an iterable of keys in the map. This will be ordered from least recently used to\n * most.\n */\n keys(): IterableIterator<K> {\n return mapIter(this.list, ([key]) => key)\n }\n\n /**\n * Returns an iterable of values in the map. This will be ordered from least recently used to\n * most.\n */\n values(): IterableIterator<V> {\n return mapIter(this.list, ([, value]) => value)\n }\n\n [Symbol.iterator](): IterableIterator<[K, V]> {\n return this.list[Symbol.iterator]()\n }\n\n get [Symbol.toStringTag](): string {\n return 'LruCache'\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { LruCache } from '@/util/collection/LruCache'\nimport { getOrSet } from '@/util/map/map'\nimport type { Fun } from '@/util/type'\n\nexport interface MemoizedFunction {\n clear(): void\n}\n\n/**\n * Returns a wrapper function where when called, retains the return value of `inner`, returning that\n * value on consecutive calls without invoking `inner` again.\n *\n * @param inner The function to memoize results.\n * @return Returns a memoized function with a `clear` method to reset the cached value.\n */\nexport function memoize<T extends () => any>(inner: T): MemoizedFunction & T\n\n/**\n * Returns a wrapper function where when called, retains the return value of `inner`, returning that\n * value on consecutive calls without invoking `inner` again.\n *\n * @param inner The function to memoize results.\n * @param keyProvider When more than one parameter is expected, a keyProvider is required, which\n * returns a unique key given the arguments provided to the memoized function.\n * @param capacity\n * @return Returns a memoized function with a `clear` method to reset the cache.\n */\nexport function memoize<T extends Fun>(\n inner: T,\n keyProvider: (...args: Parameters<T>) => any,\n capacity?: number\n): MemoizedFunction & T\n\nexport function memoize<T extends Fun>(\n inner: T,\n keyProvider?: (...args: Parameters<T>) => any,\n capacity = 500\n): MemoizedFunction & T {\n if (!keyProvider) {\n let cached = false\n let value: ReturnType<T> | undefined = undefined\n const memoized = (): ReturnType<T> => {\n if (!cached) {\n cached = true\n value = inner()\n }\n return value as ReturnType<T>\n }\n return Object.assign(\n memoized as T,\n {\n clear: () => {\n cached = false\n value = undefined\n },\n } as const\n )\n } else if (capacity === 0) {\n const memoized = (...args: Parameters<T>): ReturnType<T> =>\n inner(...args)\n return Object.assign(\n memoized as T,\n {\n clear: () => {},\n } as const\n )\n } else if (capacity === 1) {\n let hasValue = false\n let cachedKey: any\n let cachedValue: ReturnType<T>\n const memoized = (...args: Parameters<T>): ReturnType<T> => {\n const key = keyProvider(...args)\n if (!hasValue || cachedKey !== key) {\n hasValue = true\n cachedKey = key\n cachedValue = inner(...args)\n }\n return cachedValue\n }\n return Object.assign(\n memoized as T,\n {\n clear: () => {\n hasValue = false\n },\n } as const\n )\n } else {\n const cache = new LruCache<any, ReturnType<T>>(capacity)\n const memoized = (...args: Parameters<T>): ReturnType<T> => {\n const key = keyProvider(...args)\n return getOrSet(cache, key, () => inner(...args))\n }\n return Object.assign(\n memoized as T,\n {\n clear: () => {\n cache.clear()\n },\n } as const\n )\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { MaybePromise } from '../type'\n\n/**\n * Creates a function that is the composition of the provided functions.\n * Each function consumes the return value of the function that follows.\n */\nexport function flow<A, B>(f1: (a: A) => B): (a: A) => B\nexport function flow<A, B, C>(f1: (a: A) => B, f2: (b: B) => C): (a: A) => C\nexport function flow<A, B, C, D>(\n f1: (a: A) => B,\n f2: (b: B) => C,\n f3: (c: C) => D\n): (a: A) => D\nexport function flow<A, B, C, D, E>(\n f1: (a: A) => B,\n f2: (b: B) => C,\n f3: (c: C) => D,\n f4: (d: D) => E\n): (a: A) => E\nexport function flow<A, B, C, D, E, F>(\n f1: (a: A) => B,\n f2: (b: B) => C,\n f3: (c: C) => D,\n f4: (d: D) => E,\n f5: (e: E) => F\n): (a: A) => F\nexport function flow(...fns: Array<(arg: any) => any>): (arg: any) => any {\n return (arg: any) => fns.reduce((acc, fn) => fn(acc), arg)\n}\n\n/**\n * Creates a function that is the composition of the provided functions.\n * Each function consumes the return value of the function that precedes.\n */\nexport function flowRight<A, B>(f1: (a: A) => B): (a: A) => B\nexport function flowRight<A, B, C>(\n f1: (b: B) => C,\n f2: (a: A) => B\n): (a: A) => C\nexport function flowRight<A, B, C, D>(\n f1: (c: C) => D,\n f2: (b: B) => C,\n f3: (a: A) => B\n): (a: A) => D\nexport function flowRight<A, B, C, D, E>(\n f1: (d: D) => E,\n f2: (c: C) => D,\n f3: (b: B) => C,\n f4: (a: A) => B\n): (a: A) => E\nexport function flowRight<A, B, C, D, E, F>(\n f1: (e: E) => F,\n f2: (d: D) => E,\n f3: (c: C) => D,\n f4: (b: B) => C,\n f5: (a: A) => B\n): (a: A) => F\nexport function flowRight(...fns: Array<(arg: any) => any>): (arg: any) => any {\n return (arg: any) => fns.reduceRight((acc, fn) => fn(acc), arg)\n}\n\n/**\n * Creates a function that is the composition of the provided async functions.\n * Each function consumes the return value of the function that follows.\n */\nexport function flowAsync<A, B>(\n f1: (a: A) => MaybePromise<B>\n): (a: A) => Promise<B>\nexport function flowAsync<A, B, C>(\n f1: (a: A) => MaybePromise<B>,\n f2: (b: B) => MaybePromise<C>\n): (a: A) => Promise<C>\nexport function flowAsync<A, B, C, D>(\n f1: (a: A) => MaybePromise<B>,\n f2: (b: B) => MaybePromise<C>,\n f3: (c: C) => MaybePromise<D>\n): (a: A) => Promise<D>\nexport function flowAsync<A, B, C, D, E>(\n f1: (a: A) => MaybePromise<B>,\n f2: (b: B) => MaybePromise<C>,\n f3: (c: C) => MaybePromise<D>,\n f4: (d: D) => MaybePromise<E>\n): (a: A) => Promise<E>\nexport function flowAsync<A, B, C, D, E, F>(\n f1: (a: A) => MaybePromise<B>,\n f2: (b: B) => MaybePromise<C>,\n f3: (c: C) => MaybePromise<D>,\n f4: (d: D) => MaybePromise<E>,\n f5: (e: E) => MaybePromise<F>\n): (a: A) => Promise<F>\nexport function flowAsync(\n ...fns: Array<(arg: any) => MaybePromise<any>>\n): (arg: any) => Promise<any> {\n return async (arg: any) => {\n let result = arg\n for (const fn of fns) {\n result = await fn(result)\n }\n return result\n }\n}\n\n/**\n * Creates a function that is the composition of the provided async functions.\n * Each function consumes the return value of the function that precedes.\n */\nexport function flowRightAsync<A, B>(\n f1: (a: A) => MaybePromise<B>\n): (a: A) => Promise<B>\nexport function flowRightAsync<A, B, C>(\n f1: (b: B) => MaybePromise<C>,\n f2: (a: A) => MaybePromise<B>\n): (a: A) => Promise<C>\nexport function flowRightAsync<A, B, C, D>(\n f1: (c: C) => MaybePromise<D>,\n f2: (b: B) => MaybePromise<C>,\n f3: (a: A) => MaybePromise<B>\n): (a: A) => Promise<D>\nexport function flowRightAsync<A, B, C, D, E>(\n f1: (d: D) => MaybePromise<E>,\n f2: (c: C) => MaybePromise<D>,\n f3: (b: B) => MaybePromise<C>,\n f4: (a: A) => MaybePromise<B>\n): (a: A) => Promise<E>\nexport function flowRightAsync<A, B, C, D, E, F>(\n f1: (e: E) => MaybePromise<F>,\n f2: (d: D) => MaybePromise<E>,\n f3: (c: C) => MaybePromise<D>,\n f4: (b: B) => MaybePromise<C>,\n f5: (a: A) => MaybePromise<B>\n): (a: A) => Promise<F>\nexport function flowRightAsync(\n ...fns: Array<(arg: any) => MaybePromise<any>>\n): (arg: any) => Promise<any> {\n return async (arg: any) => {\n let result = arg\n for (let i = fns.length - 1; i >= 0; i--) {\n result = await fns[i](result)\n }\n return result\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Disposable } from '@/core/disposable'\nimport { DisposedError } from '@/core/disposable'\nimport { TimeoutSlot } from '@/util/async/TimeoutSlot'\n\nexport type DebounceCallback = Disposable & (() => void)\n\n/**\n * Debounce wraps a callback, ensuring it only executes after a certain period of inactivity.\n *\n * @param inner The function to execute after a given period of inactivity.\n * @param duration The number of seconds the returned wrapper function must not be called before the inner function\n * is invoked.\n * @return Returns callback wrapper that enforces inactivity. This may be disposed.\n */\nexport function debounce(\n inner: () => void,\n duration: number\n): DebounceCallback {\n const timeout = new TimeoutSlot()\n let disposed = false\n return Object.assign(\n () => {\n if (disposed) throw new DisposedError()\n timeout.set(inner, duration)\n },\n {\n dispose() {\n disposed = true\n timeout.dispose()\n },\n }\n )\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { compareBy } from '@/util/comparison/compare'\nimport { lazy } from '@/util/object/lazy'\nimport type { Maybe } from '@/util/type'\n\n/**\n * A location in code.\n */\nexport interface CodeLocation {\n /**\n * The source location - may provide the function name or in some browsers the source file if\n * source maps are enabled.\n */\n readonly source: string | null\n\n /**\n * The url to the file.\n */\n readonly file: string | null\n\n /**\n * The row (line) number.\n */\n readonly row: number\n\n /**\n * The column number. May not be present on all browsers (e.g. Firefox < 30).\n */\n readonly col: number | null\n}\n\n/**\n * A Comparator for determining if one code location is before or after another.\n *\n * @private\n */\nexport const codeLocationComparator = /* @__PURE__ */ compareBy<CodeLocation>(\n (stack) => stack.file,\n (stack) => stack.row,\n (stack) => stack.col\n)\n\n/**\n * Boundary code locations, used to determine if an error is within a certain range of code.\n * The start and end boundaries must be the same path and file to be a valid range.\n */\nexport interface CodeRange {\n /**\n * The starting code location (inclusive)\n */\n readonly start: CodeLocation | null\n\n /**\n * The ending code location (exclusive)\n */\n readonly end: CodeLocation | null\n}\n\n/**\n * Creates a code range object from two error markers.\n * @see parseStackLocation\n */\nexport function createRangeFromErrorMarkers(\n start: Error | undefined,\n end: Error | undefined\n): CodeRange {\n return {\n start: parseStackLocation(start?.stack),\n end: parseStackLocation(end?.stack),\n }\n}\n\n/**\n * Returns true if the given location is within a range of code.\n *\n * @param location The location of the code to check if within bounds. If falsy, false is\n * returned.\n * @param range The boundaries to check against. If both start and end are null, false is\n * returned. The range will consider `range.start` to be inclusive, and `range.end` to be exclusive.\n */\nexport function isCodeLocationInRange(\n location: Maybe<CodeLocation>,\n range: CodeRange\n): boolean {\n if (!location) return false\n const { start, end } = range\n if (!start && !end) return false\n if (start && codeLocationComparator(location, start) < 0) return false\n return !(end && codeLocationComparator(location, end) >= 0)\n}\n\ninterface StackParseOptions {\n /**\n * A regex for parsing an error stack string.\n * This should be non-stateful (not sticky or global)\n *\n * If a stateful stack regex is needed, (e.g. parsing every location of a stack trace) a new\n * regex can be created using the source of this one.\n */\n readonly regex: RegExp\n\n /**\n * The group index for the source file.\n */\n readonly sourceGroup: number | null\n\n /**\n * The group index for the file name.\n */\n readonly fileGroup: number\n\n /**\n * The group index for the row/line. (Should be digits only)\n */\n readonly rowGroup: number\n\n /**\n * The group index for the column. (Should be digits only)\n * Some browsers (e.g. Firefox < 30) may not provide a column number.\n */\n readonly colGroup: number | null\n}\n\n/**\n * Regex possibilities to parse the stack.\n * The first one to match will be used.\n */\nconst parseOptions: StackParseOptions[] = [\n {\n // V8 (Chrome/Node) / Chakra (Edge), with source location\n regex: /^\\s*at\\s*(.*)\\s+\\(((?:.+\\/)?[^:]*):(\\d+)(?::(\\d+))?\\)/m,\n sourceGroup: 1,\n fileGroup: 2,\n rowGroup: 3,\n colGroup: 4,\n },\n {\n // V8 (Chrome/Node) / Chakra (Edge), no source location\n regex: /^\\s*at\\s*((?:.+\\/)?[^:]*):(\\d+)(?::(\\d+))?/m,\n sourceGroup: null,\n fileGroup: 1,\n rowGroup: 2,\n colGroup: 3,\n },\n {\n // SpiderMonkey (Firefox) / JavaScriptCore (Safari)\n regex: /^\\s*(.+)?@((?:.+\\/)?[^:]*):(\\d+)(?::(\\d+))?/m,\n sourceGroup: 1,\n fileGroup: 2,\n rowGroup: 3,\n colGroup: 4,\n },\n]\n\n/**\n * Returns the value of the group by index, or null if the group doesn't exist or the group\n * index is null. The value will be parsed if it exists.\n */\nfunction getOptionalGroup<T>(\n match: RegExpMatchArray,\n index: number | null,\n parse: (value: string) => T\n): T | null {\n if (index == null) return null\n const value = match[index] as Maybe<string>\n if (value == null) return null\n return parse(value)\n}\n\n/**\n * Returns the location of the stack's first line match; the location the error was constructed.\n *\n * @param stack\n */\nexport function parseStackLocation(stack?: Maybe<string>): CodeLocation | null {\n if (!stack) return null\n const noise = stackNoise.value\n if (stack.substring(0, noise.length) === noise) {\n stack = stack.substring(noise.length)\n }\n for (const o of parseOptions) {\n const match = o.regex.exec(stack)\n if (!match) continue\n return {\n source: getOptionalGroup(match, o.sourceGroup, String),\n file: match[o.fileGroup],\n row: parseInt(match[o.rowGroup]),\n col: getOptionalGroup(match, o.colGroup, parseInt),\n }\n }\n return null\n}\n\n/**\n * Used in comparison with `stackNoiseError2` to determine what leading stack lines should be\n * trimmed.\n * @private\n */\nexport const stackNoiseError1 = /* @__PURE__ */ new Error()\n\n/**\n * @private\n */\nexport const stackNoiseError2 = /* @__PURE__ */ new Error()\n\n/**\n * When corejs polyfills Error with clearErrorStack, the stack may begin with the polyfill\n * location. Trim the beginning of stacks with the leading lines common to all errors.\n */\nexport const stackNoise = /* @__PURE__ */ lazy<string>(() => {\n if (!stackNoiseError1.stack) return ''\n const stack1 = stackNoiseError1.stack.split('\\n')\n const stack2 = stackNoiseError2.stack!.split('\\n')\n let noise = ''\n for (let i = 0; i < Math.min(stack1.length, stack2.length); i++) {\n if (stack1[i] === stack2[i]) noise += stack1[i] + '\\n'\n else break\n }\n return noise\n})\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ErrorOrigin } from '@/error/ErrorOrigin'\nimport type { ReadonlyDate } from '@/util/object/readonlyType'\nimport { substitute } from '@/util/string/string'\nimport { ValidationError } from '@/error/ValidationError'\n\n/**\n * @private\n */\nconst locale = {\n invalidDateError: `\"{value}\" is an invalid date`,\n} as const\n\n/**\n * Returns the signed time difference of end - start, in seconds.\n *\n * @param start The beginning date\n * @param end The later date\n */\nexport function timeDelta(start: ReadonlyDate, end: ReadonlyDate): number {\n return (end.getTime() - start.getTime()) / 1000\n}\n\n/**\n * A type alias to clarify that a number represents a unix timestamp\n * (milliseconds from 1970-1-1 00:00).\n */\nexport type Timestamp = number\n\n/**\n * Parses a string into a unix Timestamp using `Date.parse`, if the date is invalid, throws a\n * `ValidationError`\n * @param str\n */\nexport function parseTimestamp(str: string): Timestamp {\n const timestamp = Date.parse(str)\n if (Number.isNaN(timestamp))\n throw new ValidationError(\n substitute(locale.invalidDateError, { value: str }),\n ErrorOrigin.PARSING\n )\n return timestamp\n}\n\n/**\n * Parses a string into a date using `Date.parse`, if the date is invalid, throws a\n * `ValidationError`\n * @param str\n */\nexport function parseDate(str: string): Date {\n return new Date(parseTimestamp(str))\n}\n\n/**\n * Returns the iso 8601 string representation of a `Date` value.\n *\n * @param value\n */\nexport function stringifyDate(value: ReadonlyDate): string {\n return value.toISOString()\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { MaybePromise } from '@/util/type'\n\n/**\n * A value of type T, a function returning T, or an async function returning a Promise<T>.\n * To be used with `resolveValueProvider`.\n */\nexport type ValueProvider<T> = T | (() => MaybePromise<T>)\n\n/**\n * Resolves a ValueProvider to its underlying value.\n *\n * Handles all three ValueProvider forms: direct values, synchronous functions,\n * and async functions, returning a Promise that resolves to the value.\n *\n * @param valueProvider - The value, function, or async function to resolve\n * @returns A Promise resolving to the provided value of type T\n */\nexport function resolveValueProvider<T>(\n valueProvider: ValueProvider<T>\n): Promise<T> {\n return Promise.resolve(\n typeof valueProvider === 'function'\n ? (valueProvider as () => MaybePromise<T>)()\n : valueProvider\n )\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * A growable binary buffer writer. Writes big-endian by default, matching\n * network byte order used by MP4 and MPEG-TS.\n */\nexport class BufferWriter {\n private buffer: ArrayBuffer\n private dataView: DataView\n position: number = 0\n\n constructor(initialCapacity: number = 256) {\n this.buffer = new ArrayBuffer(initialCapacity)\n this.dataView = new DataView(this.buffer)\n }\n\n private ensureCapacity(additionalBytes: number) {\n const required = this.position + additionalBytes\n if (required <= this.buffer.byteLength) return\n let newCapacity = this.buffer.byteLength\n while (newCapacity < required) newCapacity *= 2\n const newBuffer = new ArrayBuffer(newCapacity)\n new Uint8Array(newBuffer).set(new Uint8Array(this.buffer))\n this.buffer = newBuffer\n this.dataView = new DataView(this.buffer)\n }\n\n writeUint8(value: number) {\n this.ensureCapacity(1)\n this.dataView.setUint8(this.position++, value)\n }\n\n writeUint16(value: number, littleEndian?: boolean) {\n this.ensureCapacity(2)\n this.dataView.setUint16(this.position, value, littleEndian)\n this.position += 2\n }\n\n writeUint32(value: number, littleEndian?: boolean) {\n this.ensureCapacity(4)\n this.dataView.setUint32(this.position, value, littleEndian)\n this.position += 4\n }\n\n writeInt16(value: number, littleEndian?: boolean) {\n this.ensureCapacity(2)\n this.dataView.setInt16(this.position, value, littleEndian)\n this.position += 2\n }\n\n writeInt32(value: number, littleEndian?: boolean) {\n this.ensureCapacity(4)\n this.dataView.setInt32(this.position, value, littleEndian)\n this.position += 4\n }\n\n writeBytes(data: ArrayBuffer | Uint8Array) {\n const bytes = data instanceof Uint8Array ? data : new Uint8Array(data)\n this.ensureCapacity(bytes.byteLength)\n new Uint8Array(this.buffer).set(bytes, this.position)\n this.position += bytes.byteLength\n }\n\n /**\n * Writes a fixed-length ASCII string.\n */\n writeString(str: string) {\n this.ensureCapacity(str.length)\n for (let i = 0; i < str.length; i++) {\n this.dataView.setUint8(this.position++, str.charCodeAt(i))\n }\n }\n\n /**\n * Returns the written data as a trimmed ArrayBuffer.\n */\n toArrayBuffer(): ArrayBuffer {\n return this.buffer.slice(0, this.position)\n }\n\n /**\n * Returns the written data as a Uint8Array view.\n */\n toUint8Array(): Uint8Array {\n return new Uint8Array(this.buffer, 0, this.position)\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nlet _isNode: boolean | null = null\n\n/**\n * Returns true if this is a nodejs environment.\n */\nexport function isNode(): boolean {\n if (_isNode === null) {\n _isNode =\n typeof process !== 'undefined' &&\n 'versions' in process &&\n typeof process.versions.node === 'string'\n }\n return _isNode\n}\n/**\n * Node's global setTimeout differs slightly from the browser. Use this when storing timeout ids.\n */\nexport type TimeoutId = ReturnType<typeof setTimeout>\n\n/**\n * A subset of `Location` properties available in all environments.\n */\nexport interface PartialLocation {\n readonly origin: string\n readonly search: string\n readonly href: string\n}\n\n/**\n * Returns the global `location` object, or a default with empty values\n * when `location` is not defined (e.g. Node, Web Workers).\n */\nexport function getLocation(): PartialLocation {\n return typeof location === 'object' ? location : defaultLocation\n}\n\nconst defaultLocation: PartialLocation = {\n origin: '',\n search: '',\n href: '',\n}\n\n/**\n * Node's global setInterval differs slightly from the browser. Use this when storing interval ids.\n */\nexport type IntervalId = ReturnType<typeof setInterval>\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { memoize } from '@/util/fun/memoize'\nimport { getLocation } from '../../global/environment'\n\n/**\n * Returns a `URLSearchParams` object for the given search substring. This is memoized for the\n * last search provided.\n * @param search (Optional) The window's search substring. Defaults to `location.search`, overridden\n * only for unit tests.\n */\nexport const getSearchParams = /* @__PURE__ */ memoize(\n (search: string = getLocationSearch()): URLSearchParams => {\n const url = new URL('about:blank')\n url.search = search\n // Uses `URL.searchParams` over `new URLSearchParams`; URLSearchParams constructor is not\n // as widely supported.\n return url.searchParams\n },\n (search: string = getLocationSearch()) => search,\n 1\n)\n\n/**\n * If the environment has a `location` object, returns the location's search. Otherwise,\n * an empty string.\n */\nexport function getLocationSearch(): string {\n return getLocation().search\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ErrorLevel, ReportableError } from './ReportableError'\nimport { ErrorOrigin } from '@/error/ErrorOrigin'\n\nexport class TimeoutError extends ReportableError {\n get [Symbol.toStringTag](): string {\n return 'TimeoutError'\n }\n\n constructor(\n message: string,\n origin: string = ErrorOrigin.INTERNAL,\n level: ErrorLevel = ErrorLevel.FATAL\n ) {\n super(message, origin, level)\n Object.setPrototypeOf(this, TimeoutError.prototype)\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * A Deferred object is a Promise with public methods to resolve and reject.\n *\n * Example:\n *\n * ```\n * const deferred = new Deferred<number>()\n * setTimeout(() => {\n * deferred.resolve(42)\n * }, 1000)\n *\n * deferred.then(value => console.log('Resolved to:', value))\n * ```\n */\nexport class Deferred<T> implements Promise<T> {\n private readonly promise: Promise<T>\n resolve!: (value: T | PromiseLike<T>) => void\n reject!: (reason?: any) => void\n\n constructor() {\n this.promise = new Promise<T>((resolve, reject) => {\n this.resolve = resolve\n this.reject = reject\n })\n }\n\n catch<TResult = never>(\n onrejected?: ((reason: any) => PromiseLike<TResult> | TResult) | null\n ): Promise<T | TResult> {\n return this.promise.catch(onrejected)\n }\n\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => PromiseLike<TResult1> | TResult1) | null,\n onrejected?: ((reason: any) => PromiseLike<TResult2> | TResult2) | null\n ): Promise<TResult1 | TResult2> {\n return this.promise.then(onfulfilled, onrejected)\n }\n\n finally(onfinally?: (() => void) | null): Promise<T> {\n return this.promise.finally(onfinally)\n }\n\n get [Symbol.toStringTag](): string {\n return this.promise[Symbol.toStringTag]\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Unsubscribe } from '@/core/Unsubscribe'\nimport { Abort, type ReadonlyAbort } from './Abort'\nimport { Deferred } from './Deferred'\nimport type { Maybe } from '@/util/type'\nimport { type Disposable, DisposedError, isDisposable } from '@/core/disposable'\nimport { withAbort } from '@/util/async/abortUtils'\n\n/**\n * Creates a promise that can be rejected early from an abort signal and can optionally provide\n * cleanup handling when the promise is settled.\n *\n * Common cases that require clean-up would be promises based on event listeners that must be\n * removed, or timers that need to be cleared.\n *\n * Promises are always expected to settle. They cannot be canceled, but they can be rejected.\n * This promise wrapper can be given an {@link ReadonlyAbort} object which rejects the promise\n * if abort is emitted before the promise settles.\n *\n * @param executor A method that will be invoked at most once immediately with two arguments,\n * `resolve` and `reject`. `resolve` must be called when the promise should be resolved, reject\n * may be called if the promise should be rejected. An optional function may be returned that\n * performs any cleanup necessary when the promise settles. This is called immediately before\n * resolve or reject. The executor may not be invoked if the abortSignal is already in an\n * aborted state.\n * @param abort If provided, will reject the returned promise with the signal's abort\n * reason when aborted.\n */\nexport function promise<T>(\n executor: (\n resolve: (value: T | PromiseLike<T>) => void,\n reject: (reason?: any) => void\n ) => Unsubscribe | void,\n abort?: Maybe<ReadonlyAbort>\n): Promise<T> {\n if (abort?.aborted()) return Promise.reject(abort.reason!)\n\n const deferred = new Deferred<T>()\n let resolved = false\n let resolvedTo: T | PromiseLike<T> | undefined = undefined\n let rejected = false\n let rejectionReason: any = undefined\n\n const abortSub = abort?.on('abort', (e) => reject(e.reason), {\n once: true,\n })\n\n function settled(): boolean {\n return resolved || rejected\n }\n\n function complete() {\n if (resolved) {\n deferred.resolve(resolvedTo!)\n } else {\n deferred.reject(rejectionReason)\n }\n if (unsub) unsub()\n if (abortSub) abortSub()\n }\n\n function resolve(value: T | PromiseLike<T>) {\n if (settled()) return\n resolved = true\n resolvedTo = value\n if (initialized) complete()\n }\n\n function reject(reason: any) {\n if (settled()) return\n rejected = true\n rejectionReason = reason\n if (initialized) complete()\n }\n\n let initialized = false\n const unsub = executor(resolve, reject)\n initialized = true\n if (settled()) complete()\n return deferred\n}\n\n/**\n * Determines whether a value implements the `PromiseLike<T>` interface.\n *\n * This function checks if the given value is a non-null object with a `then` method,\n * which is the structural requirement for `PromiseLike` in TypeScript.\n *\n * @typeParam T - The type the promise resolves to (optional, used for type narrowing).\n * @param value - The value to check.\n * @returns `true` if the value is `PromiseLike<T>`, otherwise `false`.\n *\n * @example\n * ```ts\n * const maybePromise: unknown = Promise.resolve(42)\n * if (isPromiseLike(maybePromise)) {\n * maybePromise.then(value => console.log(value)) // value is type-safe\n * }\n * ```\n */\nexport function isPromiseLike<T = any>(\n value: unknown\n): value is PromiseLike<T> {\n return (\n typeof value === 'object' &&\n value !== null &&\n typeof (value as any).then === 'function'\n )\n}\n\n/**\n * Wraps a `PromiseLike<Disposable>` with a `Disposable` interface.\n * Disposing will abort the operation and dispose the resolved value (if/when it resolves).\n *\n * @param promise - A Promise-like object that resolves to a `Disposable`\n * @returns An object that implements both `PromiseLike<T>` and `Disposable`\n */\nexport function toDisposablePromise<T extends PromiseLike<any>>(\n promise: T\n): T & Disposable {\n const abort = new Abort()\n let disposed = false\n let resolved: Disposable | null = null\n\n const wrapped = withAbort(\n new Promise((resolve, reject) => {\n promise.then(\n (result) => {\n resolved = result\n if (disposed && isDisposable(result)) {\n result.dispose()\n }\n resolve(result)\n },\n (err: Error) => reject(err)\n )\n }),\n abort\n ) as unknown as T & Disposable\n\n wrapped.dispose = () => {\n if (disposed) throw new DisposedError()\n disposed = true\n abort.abort()\n if (isDisposable(resolved)) {\n resolved.dispose()\n }\n }\n\n return wrapped\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ReadonlyAbort } from './Abort'\nimport { promise } from './promise'\n\n/**\n * Returns a promise that resolves after the given amount of time.\n *\n * Usage example:\n * ```\n * async function doThingsWithAbort(abort) {\n * await foo();\n * await sleep(2, abort);\n * await foo();\n * await sleep(5, abort);\n * await foo();\n * }\n *\n * const abort = new Abort();\n * doThingsWithAbort(abort).catch(() => console.log('aborted'))';\n *\n * abort.abort();\n * ```\n *\n * @param time The time to sleep, in seconds.\n * @param abort If provided, will reject the returned promise with the signal's abort\n * reason when aborted. If the signal is already aborted and time is less than or equal to zero,\n * the abort signal takes precedence.\n */\nexport function sleep(\n time: number,\n abort?: ReadonlyAbort | null\n): Promise<void> {\n if (abort?.aborted()) return Promise.reject(abort.reason!)\n if (time <= 0.0) return Promise.resolve(void 0)\n return promise((resolve) => {\n const timeoutId = setTimeout(() => {\n resolve(void 0)\n }, time * 1000)\n return () => clearTimeout(timeoutId)\n }, abort)\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { TimeoutError } from '@/error/TimeoutError'\nimport type { ReadonlyAbort } from './Abort'\nimport { Abort } from './Abort'\nimport { sleep } from './sleep'\nimport { substitute } from '@/util/string/string'\nimport { ErrorOrigin } from '@/error/ErrorOrigin'\nimport { ErrorLevel } from '@/error/ReportableError'\n\nexport const DEFAULT_TIMEOUT_MESSAGE = 'Timed out after {time}s'\n\n/**\n * Races a promise with a timeout, rejecting with a {@link TimeoutError} if the timeout is\n * reached before the provided promise.\n *\n * @param promise The promise to race against a timeout.\n * @param time The number of seconds to wait. If undefined, the promise is returned without\n * wrapping.\n * @param message The message to set in the {@link TimeoutError}. Uses `{time}` token.\n * @param origin The error origin. (default: `ErrorOrigin.INTERNAL`)\n * @param level The error level (default: `ErrorLevel.FATAL`)\n */\nexport function withTimeout<T>(\n promise: PromiseLike<T>,\n time?: number,\n message = DEFAULT_TIMEOUT_MESSAGE,\n origin: string = ErrorOrigin.INTERNAL,\n level: ErrorLevel = ErrorLevel.FATAL\n): Promise<T> {\n if (time === undefined) return Promise.resolve(promise)\n const abort = new Abort()\n return Promise.race([\n promise,\n timeout(time, abort, message, origin, level),\n ]).then(() => {\n abort.abort()\n return promise\n })\n}\n\n/**\n * Returns a promise that will reject after the provided number of seconds.\n * If the optional abort signal is aborted, the timer will be canceled and the promise resolved.\n * This is the inverse of {@link sleep}\n *\n * @param time The number of seconds to wait.\n * @param abort If provided, when aborted (regardless of reason) will resolve the returned\n * promise.\n * @param message The message to be used in the TimeoutError in case of timeout. Uses `{time}` token.\n * @param origin The error origin. (default: `ErrorOrigin.INTERNAL`)\n * @param level The error level (default: `ErrorLevel.FATAL`)\n */\nexport function timeout(\n time: number,\n abort?: ReadonlyAbort,\n message = 'Timed out after {time}s',\n origin: string = ErrorOrigin.INTERNAL,\n level: ErrorLevel = ErrorLevel.FATAL\n): Promise<void> {\n return new Promise((resolve, reject) => {\n sleep(time, abort)\n .then(() => {\n reject(\n new TimeoutError(\n substitute(message, { time }),\n origin,\n level\n )\n )\n })\n .catch(() => resolve(void 0))\n })\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nclass Never implements Promise<never> {\n catch<TResult = never>(\n _onrejected?: ((reason: any) => PromiseLike<TResult> | TResult) | null\n ): Promise<never> {\n return this\n }\n\n then<TResult1 = never, TResult2 = never>(\n _onfulfilled?:\n | ((value: never) => PromiseLike<TResult1> | TResult1)\n | null,\n _onrejected?: ((reason: any) => PromiseLike<TResult2> | TResult2) | null\n ): Promise<never> {\n return this\n }\n\n finally(_onfinally?: (() => void) | null): Promise<never> {\n return this\n }\n\n get [Symbol.toStringTag](): 'Never' {\n return 'Never'\n }\n}\n\n/**\n * A promise that never settles.\n */\nexport const never: Promise<never> = /* @__PURE__ */ new Never()\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Disposable } from '@/core/disposable'\nimport type { TimeoutId } from '@/global/environment'\nimport { TimeoutError } from '@/error/TimeoutError'\nimport { Abort, type ReadonlyAbort } from './Abort'\nimport { sleep } from './sleep'\nimport type { Timestamp } from '@/util/date/date'\nimport { substitute } from '@/util/string/string'\nimport type { Maybe } from '@/util/type'\n\n/**\n * A `TimeoutController` is an {@link ReadonlyAbort} implementation that will abort either after\n * an elapsed timeout, an explicit abort call, or if the optional external abort signal fires.\n *\n * This allows a function (such as the network fetch layer) to abort from an externally provided\n * abort signal, while maintaining its own timeout and abort logic internally.\n */\nexport class TimeoutController\n extends Abort\n implements ReadonlyAbort, Disposable\n{\n private readonly timeoutId: TimeoutId\n private readonly abortSub: (() => void) | null\n\n private readonly startedAt: Timestamp = /* @__PURE__ */ Date.now()\n\n /**\n * @param timeout The number of seconds before the returned abort signal will abort with a\n * {@link TimeoutError}.\n * @param abort An abort signal to cascade.\n * @param message The timeout message. Uses one token `{time}` which will be replaced by the\n * timeout.\n */\n constructor(\n readonly timeout: number,\n abort?: Maybe<ReadonlyAbort>,\n private readonly message = 'Timed out after {time}s'\n ) {\n super()\n this.timeoutId = setTimeout(\n () => this.abortWithTimeout(),\n timeout * 1000\n )\n const abortHandler = () => this.abort(abort!.reason!)\n this.abortSub = abort?.on('abort', abortHandler) ?? null\n if (abort?.aborted()) abortHandler()\n }\n\n /**\n * Aborts with a {@link TimeoutError}\n */\n abortWithTimeout() {\n this.abort(\n new TimeoutError(substitute(this.message, { time: this.timeout }))\n )\n }\n\n /**\n * Sleeps the given amount of time, or immediately rejects if the sleep will cause a timeout.\n * @param time The number of seconds to sleep.\n */\n sleep(time: number): Promise<void> {\n const elapsed = (Date.now() - this.startedAt) / 1000\n if (elapsed + time >= this.timeout) {\n this.abortWithTimeout()\n return Promise.reject(this.reason!)\n }\n return sleep(time, this)\n }\n\n dispose() {\n clearTimeout(this.timeoutId)\n if (this.abortSub) this.abortSub()\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { isDisposable } from '@/core/disposable'\nimport { IllegalStateError } from '@/error/IllegalStateError'\nimport { remove } from '@/util/collection/array'\nimport type { Maybe } from '@/util/type'\n\n/**\n * Manages global initializers.\n */\nexport class GlobalRegistry {\n private registry: GlobalRef<any>[] = []\n\n /**\n * Returns the number of references currently in the registry.\n */\n get size(): number {\n return this.registry.length\n }\n\n /**\n * Registers an initializer that will be invoked during global state initialization.\n * @param initializer\n */\n register<T extends GlobalRef<any>>(initializer: T): T {\n this.registry.push(initializer)\n return initializer\n }\n\n /**\n * Removes a global ref from the registry.\n * May be called at any time.\n * @param ref\n * @return Returns true if the global ref was removed.\n */\n unregister(ref: GlobalRef<any>): boolean {\n return remove(this.registry, ref)\n }\n\n /**\n * Resets all registered initializers and sets this registry back to its pre-initialized state.\n * This is typically only done within unit tests, but may be called if all players are\n * disposed and the consumer intends to teardown global state.\n */\n reset() {\n for (const registryElement of this.registry) {\n registryElement.reset()\n }\n }\n}\n\nlet _registry: GlobalRegistry | null = null\n\n/**\n * Gets or creates the global registry instance.\n */\nexport function getGlobalRegistry(): GlobalRegistry {\n if (!_registry) _registry = new GlobalRegistry()\n return _registry\n}\n\nexport interface GlobalRef<T> {\n /**\n * True if this has been initialized.\n */\n readonly initialized: boolean\n\n /**\n * Returns the factory-produced value.\n * Throws an {@link IllegalStateError} if the global registry has not been initialized.\n */\n readonly value: T\n\n /**\n * Overrides this initializer.\n * The previous initializer will be provided as an argument for extension.\n *\n * Throws an {@link IllegalStateError} if the global registry has been initialized.\n * @return Returns this\n */\n set(newInitializer: (previousInitializer: () => T) => T): GlobalRef<T>\n\n /**\n * Resets this initializer back to its pre-initialized state.\n * If the initializer produced a disposable value, it will be disposed.\n */\n reset(): void\n\n /**\n * Initializes the global ref.\n * This is done automatically on first use of `value`, but may be initialized eagerly.\n */\n initialize(): void\n}\n\n/**\n * When set, GlobalRefImpl records a stack trace each time it is initialized,\n * so a later \"Cannot call when initialized\" error can include the stack of\n * whoever last touched the ref. Used to diagnose async leakage between specs.\n *\n * Tests opt in via setGlobalRefDebug(true).\n */\nlet globalRefDebug = false\n\nexport function setGlobalRefDebug(enabled: boolean): void {\n globalRefDebug = enabled\n}\n\nexport class GlobalRefImpl<T> implements GlobalRef<T> {\n private _value: T | undefined\n private _initialized = false\n private constructing = false\n private initializer: () => T\n private lastInitStack: Maybe<string> = null\n\n constructor(private readonly defaultInitializer: () => T) {\n this.initializer = defaultInitializer\n }\n\n get initialized(): boolean {\n return this._initialized\n }\n\n get value(): T {\n this.initialize()\n return this._value!\n }\n\n reset(): void {\n this.initializer = this.defaultInitializer\n if (!this._initialized) return\n this.assertNotConstructing()\n this._initialized = false\n this.lastInitStack = null\n if (isDisposable(this._value)) {\n this._value.dispose()\n }\n this._value = undefined\n }\n\n initialize(): void {\n if (this._initialized) return\n this.assertNotConstructing()\n this.constructing = true\n try {\n this._value = this.initializer()\n } catch (error) {\n this.constructing = false\n throw error\n }\n this.constructing = false\n this._initialized = true\n if (globalRefDebug) {\n this.lastInitStack = new Error('globalRef initialized').stack\n }\n }\n\n set(newInitializer: (previousInitializer: () => T) => T): GlobalRef<T> {\n this.assertNotInitialized()\n const overriddenInitializer = () => {\n return newInitializer(this.defaultInitializer)\n }\n this.initializer = overriddenInitializer\n return new GlobalRefOverride(\n this,\n overriddenInitializer,\n (newInitializer) => {\n this.initializer = newInitializer\n }\n )\n }\n\n private assertNotInitialized() {\n if (this._initialized) {\n const detail = this.lastInitStack\n ? `\\nLast initialized at:\\n${this.lastInitStack}`\n : ''\n throw new IllegalStateError(`Cannot call when initialized${detail}`)\n }\n }\n\n private assertNotConstructing() {\n if (this.constructing)\n throw new IllegalStateError('Cannot call during construction')\n }\n}\n\nclass GlobalRefOverride<T> implements GlobalRef<T> {\n private initializer: () => T\n\n constructor(\n private readonly original: GlobalRef<T>,\n private readonly defaultInitializer: () => T,\n private readonly setInitializer: (value: () => T) => void\n ) {\n this.initializer = defaultInitializer\n }\n\n get initialized(): boolean {\n return this.original.initialized\n }\n\n get value(): T {\n return this.original.value\n }\n\n initialize(): void {\n this.setInitializer(this.initializer)\n this.original.initialize()\n }\n\n reset(): void {\n this.initializer = this.defaultInitializer\n this.original.reset()\n this.setInitializer(this.initializer)\n }\n\n set(newInitializer: (previousInitializer: () => T) => T): GlobalRef<T> {\n const overriddenInitializer = () => {\n return newInitializer(this.defaultInitializer)\n }\n this.initializer = overriddenInitializer\n this.setInitializer(overriddenInitializer)\n return new GlobalRefOverride(\n this,\n overriddenInitializer,\n this.setInitializer\n )\n }\n}\n\n/**\n * Creates a global reference that can be lazily initialized.\n * This function is tree-shakable as it doesn't perform any side effects on import.\n *\n * @param init Factory function that creates the value\n */\nexport function globalRef<T>(init: () => T): GlobalRef<T> {\n return getGlobalRegistry().register(new GlobalRefImpl(init))\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { KeyValuePersistence } from '@/persistence/KeyValuePersistence'\nimport type { Maybe } from '@/util/type'\n\nexport class StoragePersistence implements KeyValuePersistence<string> {\n constructor(private readonly storage: Maybe<Storage>) {}\n\n clear(): Promise<void> {\n this.storage?.clear()\n return Promise.resolve()\n }\n\n get(key: string): Promise<string | null> {\n return Promise.resolve(this.storage?.getItem(key) ?? null)\n }\n\n remove(key: string): Promise<void> {\n this.storage?.removeItem(key)\n return Promise.resolve()\n }\n\n set(key: string, value: string): Promise<void> {\n this.storage?.setItem(key, value)\n return Promise.resolve()\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { globalRef } from '@/global/globalRegistry'\nimport type { KeyValuePersistence } from '@/persistence/KeyValuePersistence'\nimport { StoragePersistence } from '@/persistence/StoragePersistence'\n\n/**\n * The default storage persistence for simple key / value pairs.\n * This may be overridden, and by default resolves to local storage persistence.\n */\nexport const persistenceRef = /* @__PURE__ */ globalRef<KeyValuePersistence<string>>(() => {\n return new StoragePersistence(\n typeof localStorage !== 'undefined' ? localStorage : null\n )\n})\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { getLocationSearch, getSearchParams } from '@/util/browser/searchParams'\nimport { LogLevel, parseLogLevel } from '@/logging/Logger'\n\n/**\n * Returns the current vinyl logging level, as set by the querystring parameter: vinylLogLevel.\n * @param search\n * @param defaultLevel\n */\nexport function getLogLevelFromSearch(\n search: string = getLocationSearch(),\n defaultLevel: LogLevel = LogLevel.WARN\n): LogLevel {\n const str = getSearchParams(search).get('vinylLogLevel')\n if (!str) return defaultLevel\n return parseLogLevel(str) ?? defaultLevel\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ReadonlyEventHost } from '@/event/EventHost'\nimport { EventHostImpl } from '@/event/EventHost'\nimport { globalRef } from '@/global/globalRegistry'\nimport { toJson } from '@/util/serialization/json'\nimport type { LogTarget } from '@/logging/LogTarget'\nimport { getLogLevelFromSearch } from '@/logging/getLogLevelFromSearch'\n\nexport enum LogLevel {\n VERBOSE,\n DEBUG,\n INFO,\n WARN,\n ERROR,\n NONE,\n}\n\nexport interface LogEvent {\n readonly messages: any[]\n readonly target: LogTarget\n readonly level: LogLevel\n}\n\nexport interface LogEventMap {\n readonly log: LogEvent\n}\n\n/**\n * The interface for a basic logger implementation.\n */\nexport interface Logger extends ReadonlyEventHost<LogEventMap> {\n logLevel: LogLevel\n\n log(target: LogTarget, level: LogLevel, ...messages: readonly any[]): void\n}\n\nexport class LoggerImpl extends EventHostImpl<LogEventMap> implements Logger {\n get [Symbol.toStringTag](): string {\n return 'Logger'\n }\n\n constructor(public logLevel: LogLevel = LogLevel.DEBUG) {\n super()\n }\n\n log(target: LogTarget, level: LogLevel, ...messages: readonly any[]): void {\n if (level === LogLevel.NONE || level < this.logLevel) return\n this.dispatch('log', {\n level,\n messages: toJson(messages),\n target,\n })\n }\n}\n\n/**\n * A global reference to the logger.\n * @private\n */\nexport const loggerRef = /* @__PURE__ */ globalRef<Logger>(\n () =>\n new LoggerImpl(\n // The logger is initialized to VERBOSE if vinylLogLevel=verbose is in the query string\n // Otherwise use DEBUG.\n getLogLevelFromSearch() === LogLevel.VERBOSE\n ? LogLevel.VERBOSE\n : LogLevel.DEBUG\n )\n)\n\n/**\n * Returns the current log level.\n */\nexport function getLogLevel(): LogLevel {\n return loggerRef.value.logLevel\n}\n\n/**\n * Sets the current log level.\n *\n * @param value\n */\nexport function setLogLevel(value: LogLevel): void {\n loggerRef.value.logLevel = value\n}\n\nexport function log(\n target: LogTarget,\n level: LogLevel,\n ...messages: readonly any[]\n): void {\n loggerRef.value.log(target, level, ...messages)\n}\n\nexport function logVerbose(\n target: LogTarget,\n ...messages: readonly any[]\n): void {\n loggerRef.value.log(target, LogLevel.VERBOSE, ...messages)\n}\n\nexport function logDebug(target: LogTarget, ...messages: readonly any[]): void {\n loggerRef.value.log(target, LogLevel.DEBUG, ...messages)\n}\n\nexport function logInfo(target: LogTarget, ...messages: readonly any[]): void {\n loggerRef.value.log(target, LogLevel.INFO, ...messages)\n}\n\nexport function logWarn(target: LogTarget, ...messages: readonly any[]): void {\n loggerRef.value.log(target, LogLevel.WARN, ...messages)\n}\n\nexport function logError(target: LogTarget, ...messages: readonly any[]): void {\n loggerRef.value.log(target, LogLevel.ERROR, ...messages)\n}\n\nconst strToLogLevel: Record<string, LogLevel> = {\n verbose: LogLevel.VERBOSE,\n debug: LogLevel.DEBUG,\n info: LogLevel.INFO,\n warn: LogLevel.WARN,\n error: LogLevel.ERROR,\n none: LogLevel.NONE,\n} as const\n\n/**\n * From a case-insensitive string, returns the log level.\n * Possible values match to the keys in {@link LogLevel}.\n *\n * @param str\n */\nexport function parseLogLevel(str: string): LogLevel | null {\n return strToLogLevel[str.toLowerCase()] ?? null\n}\n\nconst logLevelToString: Record<LogLevel, string> = {\n [LogLevel.VERBOSE]: 'verbose',\n [LogLevel.DEBUG]: 'debug',\n [LogLevel.INFO]: 'info',\n [LogLevel.WARN]: 'warn',\n [LogLevel.ERROR]: 'error',\n [LogLevel.NONE]: 'none',\n} as const\n\n/**\n * Returns the log level as a lowercase string.\n * E.g. stringifyLogLevel(LogLevel.DEBUG) returns 'debug'\n */\nexport function stringifyLogLevel(logLevel: LogLevel): string {\n return logLevelToString[logLevel]\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { LogTarget } from '@/logging/LogTarget'\nimport { logError, logVerbose } from '@/logging/Logger'\nimport type { KeyValuePersistence } from '@/persistence/KeyValuePersistence'\nimport { persistenceRef } from '@/persistence/persistenceRef'\nimport type { Maybe } from '@/util/type'\nimport { lazy, type Lazy } from '@/util/object/lazy'\n\n/**\n * Configuration for PersistentItemImpl\n * These values will not be accessed until the persistent item is first used.\n */\nexport interface PersistentItemOptions<T, FormatType> {\n /**\n * The key to use in the Persistence layer.\n */\n readonly key: string\n\n /**\n * The default to use when the key is not present or deserialization fails.\n */\n readonly defaultValue: T\n\n /**\n * If provided, will be invoked on the persisted value.\n */\n readonly validator?: Maybe<(input: unknown) => asserts input is T>\n\n /**\n * The key/value persistence raw data provider.\n *\n * Provides the KeyValuePersistence controller.\n * Can be a method to lazily provide the controller, will be invoked once on first access.\n */\n readonly persistence:\n | KeyValuePersistence<FormatType>\n | (() => KeyValuePersistence<FormatType>)\n\n /**\n * Serializes the value for persistence.\n */\n readonly serialize: (value: T) => FormatType\n\n /**\n * Deserializes value into the output value.\n */\n readonly deserialize: (value: FormatType) => T\n}\n\nexport interface PersistentItem<T> {\n /**\n * Gets this item from persistence.\n */\n get(): Promise<T>\n\n /**\n * Saves this item to persistence.\n */\n set(value: T): Promise<void>\n\n /**\n * Removes this item from persistence.\n */\n remove(): Promise<void>\n}\n\nexport class PersistentItemImpl<T, FormatType>\n implements PersistentItem<T>, LogTarget\n{\n readonly logPrefix: string\n private readonly persistence: Lazy<KeyValuePersistence<FormatType>>\n\n constructor(\n private readonly options: PersistentItemOptions<T, FormatType>\n ) {\n this.logPrefix = `PersistentItem_${options.key}`\n this.persistence = lazy(() => {\n return typeof options.persistence === 'function'\n ? options.persistence()\n : options.persistence\n })\n }\n\n /**\n * Gets this item from persistence.\n */\n async get(): Promise<T> {\n const { key, defaultValue, deserialize, validator } = this.options\n const persistence = this.persistence.value\n const rawStr = await persistence.get(key)\n if (rawStr == null) return defaultValue\n try {\n const value = deserialize(rawStr)\n validator?.(value)\n return value\n } catch (error) {\n logError(this, `could not revive <${key}> from persistence`, error)\n await persistence.remove(key)\n return defaultValue\n }\n }\n\n /**\n * Saves this item to persistence.\n */\n set(value: T): Promise<void> {\n const { key, serialize } = this.options\n logVerbose(this, 'set', value)\n const persistence = this.persistence.value\n return persistence.set(key, serialize(value))\n }\n\n /**\n * Removes this item from persistence.\n */\n remove(): Promise<void> {\n const { key } = this.options\n logVerbose(this, 'remove')\n const persistence = this.persistence.value\n return persistence.remove(key)\n }\n}\n\nconst persistentItemStringOptionDefaults = {\n serialize: JSON.stringify,\n deserialize: JSON.parse,\n persistence: () => persistenceRef.value,\n} as const satisfies Partial<PersistentItemOptions<any, string>>\n\n/**\n * An alias for persistent item options with reasonable defaults for string\n * serialization.\n * This will use JSON stringify/parse and the global KeyValuePersistence object\n * from `persistenceRef`.\n */\nexport type DefaultStringPersistentItemOptions<T> = Omit<\n PersistentItemOptions<T, string>,\n 'persistence' | 'deserialize' | 'serialize'\n> &\n Partial<\n Pick<\n PersistentItemOptions<T, string>,\n 'persistence' | 'deserialize' | 'serialize'\n >\n >\n\n/**\n * Creates a new PersistenceItem from the given options.\n * If serializer, deserializer, and persistence is omitted, then\n * JSON stringify/parse and the global KeyValuePersistence object\n * from `persistenceRef` will be used.\n *\n * @param options\n */\nexport function createPersistentItem<T>(\n options: DefaultStringPersistentItemOptions<T>\n): PersistentItemImpl<T, string>\nexport function createPersistentItem<T, U>(\n options: PersistentItemOptions<T, U>\n): PersistentItemImpl<T, U>\nexport function createPersistentItem<T>(\n options: DefaultStringPersistentItemOptions<any>\n): PersistentItemImpl<T, any> {\n return new PersistentItemImpl<T, any>({\n ...persistentItemStringOptionDefaults,\n ...options,\n })\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n createDisposer,\n type Disposable,\n DisposedError,\n} from '@/core/disposable'\nimport type { Unsubscribe } from '@/core/Unsubscribe'\nimport { IllegalArgumentError } from '@/error/IllegalArgumentError'\nimport { EventHostImpl } from '@/event/EventHost'\nimport { emptySignal, type Signal, SignalImpl } from '@/event/Signal'\nimport { logDebug } from '@/logging/Logger'\nimport type { AnyRecord } from '@/util/type'\nimport { createLogPrefix, type LogTarget } from '@/logging/LogTarget'\n\nexport interface Patch<in T, in EventMap = AnyRecord> extends Disposable {\n /**\n * A signal that emits synthetic events.\n * These events will be dispatched on the proxy, not on the original event target.\n * If undefined, no events are fabricated.\n */\n readonly eventFabricated?: Signal<Event>\n\n /**\n * Overridden properties.\n */\n readonly properties?: PropertyPatches<T>\n\n /**\n * Overridden events.\n * Event patches may provide an alternate event to emit, or null to prevent an event from\n * dispatching on the proxy.\n *\n * Note:\n * Patched events have divergent behavior when using Event.stopImmediatePropagation.\n * All handlers added to the patched Proxy will still be called after stopImmediatePropagation.\n * It is the author's opinion that using stopImmediatePropagation is an anti-pattern, and one\n * handler should not be allowed to influence the behavior of neighboring handlers.\n */\n readonly events?: EventPatches<EventMap>\n}\n\n/**\n * A record of property key to property patch.\n */\nexport type PropertyPatches<in T> = {\n readonly [P in keyof T]?: PropertyPatch<T, P>\n}\n\n/**\n * An override to a patched property.\n */\nexport interface PropertyPatch<T, K extends keyof T> {\n /**\n * @return Returns the value to return on the proxy.\n */\n get?(): T[K]\n\n /**\n * @param newValue The property value attempting to be set.\n */\n set?(newValue: T[K]): void\n}\n\n/**\n * Handles an event emitted from the event target. The returned event will be emitted in its\n * place on the proxy.\n *\n * Fabricated events from `eventFabricated` will not be passed to this handler and cannot be\n * squelched.\n *\n * @param event The original event from the event target. This should not be modified\n * directly, but may be cloned and a modified clone may be returned.\n *\n * @return Returns the event to emit on the proxy or null to squelch the event.\n */\nexport type EventPatch<T> = (event: T) => T | null\n\n/**\n * A record of event type to an event patch.\n */\nexport type EventPatches<in EventMap> = {\n readonly [P in keyof EventMap]?: EventPatch<EventMap[P]>\n}\n\nexport type PatchFactory<T, EventMap> = (target: T) => Patch<T, EventMap>\n\nexport interface PatchedRef<T> extends Disposable {\n /**\n * The patched target.\n */\n readonly patched: T\n\n /**\n * A signal for when a synthetic event was fabricated.\n */\n eventFabricated: Signal<Event>\n\n /**\n * A signal for when an event was squelched.\n */\n eventSquelched: Signal<Event>\n}\n\n/**\n * Creates a Proxy for patched event and properties on the target. All patches from the provided\n * factory list will be used in creating a proxy chain. Each patch is applied in order, and\n * patches can rely on their target having been patched with all previous patches.\n *\n * @param target\n * @param patchFactories A list of factories that each produce a new patch for the target.\n * @return Returns a disposable object with a Proxy reference with overridden event and property\n * behavior. When disposed, the event listeners are removed.\n */\nexport function patchTarget<T extends object, EventMap = AnyRecord>(\n target: T,\n ...patchFactories: PatchFactory<T, EventMap>[]\n): PatchedRef<T> {\n const n = patchFactories.length\n if (n === 0) {\n // Not patched\n let disposed = false\n return {\n patched: target,\n eventFabricated: emptySignal,\n eventSquelched: emptySignal,\n dispose: () => {\n // For consistency:\n if (disposed) throw new DisposedError()\n disposed = true\n },\n }\n } else if (n === 1) {\n return _patchTarget(target, patchFactories[0])\n } else {\n const { add, dispose } = createDisposer()\n let patched = target\n const eventFabricated = add(new SignalImpl<Event>())\n const eventSquelched = add(new SignalImpl<Event>())\n const patchedChain: PatchedRef<T>[] = []\n patchFactories.forEach((factory) => {\n const next = patchTarget(patched, factory)\n patched = next.patched\n patchedChain.push(next)\n next.eventFabricated.listen((event) =>\n eventFabricated.dispatch(event)\n )\n next.eventSquelched.listen((event) =>\n eventSquelched.dispatch(event)\n )\n })\n // Patches must be disposed in reverse order\n for (let i = patchedChain.length - 1; i >= 0; i--) {\n add(patchedChain[i])\n }\n return {\n patched,\n eventFabricated,\n eventSquelched,\n dispose,\n }\n }\n}\n\n/**\n * Creates a proxy to an event target that can patch properties and events.\n *\n * There are no modifications to the target, the returned proxy should be used in place of the\n * target.\n *\n * @param target\n * @param patchFactory Produces a new patch for the target.\n * @return Returns a disposable object with a Proxy reference with overridden event and property\n * behavior. When disposed, event listeners will be removed and the created patch and proxy will\n * be disposed.\n */\nfunction _patchTarget<T extends object, EventMap>(\n target: T,\n patchFactory: PatchFactory<T, EventMap>\n): PatchedRef<T> {\n const { add, dispose } = createDisposer()\n const eventFabricated = add(new SignalImpl<Event>())\n const eventSquelched = add(new SignalImpl<Event>())\n\n // This method takes a factory instead of the EventTargetPatch directly to ensure that the\n // patch disposal is handled with the proxy disposal.\n const patch = add(patchFactory(target))\n\n // An event target used in place of the original target for patched events.\n const proxyEventHost = add(new EventHostImpl<Record<string, Event>>())\n patch.eventFabricated?.listen((event) => {\n eventFabricated.dispatch(event)\n proxyEventHost.dispatch(event.type, event)\n })\n const delegatedEvents = new Set<string>()\n const subs = new Map<EventListener, Unsubscribe>()\n let addEventListener: EventTarget['addEventListener'] | undefined =\n undefined\n let removeEventListener: EventTarget['removeEventListener'] | undefined =\n undefined\n if (isEventTarget(target)) {\n if (patch.events || patch.eventFabricated) {\n const eventPatches: EventPatches<any> = patch.events ?? {}\n const observeTargetEvent = (type: string) => {\n if (!delegatedEvents.has(type)) {\n delegatedEvents.add(type)\n const targetHandler = (event: Event) => {\n const patchedEvent =\n event.type in eventPatches\n ? eventPatches[event.type]!(event)\n : event\n if (patchedEvent)\n proxyEventHost.dispatch(\n patchedEvent.type,\n patchedEvent\n )\n else eventSquelched.dispatch(event)\n }\n target.addEventListener(type, targetHandler)\n }\n }\n\n addEventListener = (type, callback: EventListener, options) => {\n if (typeof callback !== 'function')\n throw new IllegalArgumentError(\n 'only function callbacks are supported'\n )\n observeTargetEvent(type)\n subs.set(\n callback,\n proxyEventHost.on(type, callback, {\n once:\n typeof options === 'object'\n ? (options.once ?? false)\n : false,\n })\n )\n }\n\n removeEventListener = (_, callback) => {\n if (typeof callback !== 'function')\n throw new IllegalArgumentError(\n 'only function callbacks are supported'\n )\n const sub = subs.get(callback)\n if (sub) {\n subs.delete(callback)\n sub()\n }\n }\n\n for (const eventPatchesKey in eventPatches) {\n observeTargetEvent(eventPatchesKey)\n }\n } else {\n addEventListener = target.addEventListener.bind(target)\n removeEventListener = target.removeEventListener.bind(target)\n }\n }\n\n const propertyPatches: PropertyPatches<T> = patch.properties ?? {}\n\n const patched = new Proxy<T>(target, {\n get(target, p, receiver): any {\n const key = p as keyof T\n if (key === 'addEventListener') {\n return addEventListener\n } else if (key === 'removeEventListener') {\n return removeEventListener\n }\n const patch = propertyPatches[key]\n const value = patch && patch.get ? patch.get() : target[key]\n if (typeof value === 'function') {\n // Redirect the receiver from the Proxy to the target.\n // While it may make more sense to just use the Proxy as the receiver (Liskov\n // substitution principle), HTML DOM methods oddly have checks that enforce that the\n // receiver is strictly the Element.\n return function (this: any, ...args: any[]) {\n return value.apply(this === receiver ? target : this, args)\n }\n }\n return value\n },\n\n set(target, p, newValue): boolean {\n const key = p as keyof T\n const patch = propertyPatches[key]\n if (patch && patch.set) patch.set(newValue)\n else target[key] = newValue\n return true\n },\n } as const)\n\n return {\n patched,\n\n eventFabricated,\n eventSquelched,\n\n // Certain supported platforms do not support Proxy.revocable, but this is not a\n // requirement; we do not need to provide a Proxy to a consumer that needs its\n // lifespan controlled.\n dispose,\n }\n}\n\n/**\n * Logs debug messages when an event was squelched or fabricated.\n *\n * @param pathTarget\n * @param patched\n * @return Returns a function that when invoked, removes the logging.\n */\nexport function logPatchedEvents(\n pathTarget: LogTarget,\n patched: PatchedRef<any>\n): Unsubscribe {\n const eventSquelchedSub = patched.eventSquelched.listen((event) =>\n logDebug(pathTarget, `'${event.type}' event squelched`)\n )\n const eventFabricatedSub = patched.eventFabricated.listen((event) =>\n logDebug(pathTarget, `'${event.type}' event fabricated`)\n )\n return () => {\n eventSquelchedSub()\n eventFabricatedSub()\n }\n}\n\nfunction isEventTarget(target: AnyRecord): target is EventTarget {\n return 'addEventListener' in target\n}\n\n/**\n * A tuple of `[flag, factory]`.\n * Patches will be applied when flag is true.\n */\nexport type FlagAndPatchEntry<T extends object, EventMap, Key> = readonly [\n flagKey: Key,\n factory: PatchFactory<T, EventMap>,\n]\n\n/**\n * Given a list of [flagKey, patchFactory] tuples, patches the target with patches where flag is true.\n */\nexport function patchTargetFromFlags<T extends object, EventMap, Flags>(\n target: T,\n flags: Flags,\n ...patchEntries: readonly FlagAndPatchEntry<T, EventMap, keyof Flags>[]\n): PatchedRef<T> {\n const pathTarget: LogTarget = {\n logPrefix: createLogPrefix('Patch'),\n }\n const filtered = patchEntries.filter(([key]) => {\n const enabled = flags[key] === true\n if (enabled) logDebug(pathTarget, `Applying '${String(key)}' patch`)\n return enabled\n })\n const patchedRef = patchTarget(\n target,\n ...filtered.map(([_, factory]) => factory)\n )\n // Logs fabricated and squelched events.\n logPatchedEvents(pathTarget, patchedRef)\n return patchedRef\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Comparator } from '@/util/comparison/compare'\nimport { compareBy } from '@/util/comparison/compare'\nimport type { Maybe } from '@/util/type'\nimport { parseIntSafe } from '@/util/serialization/primitives'\n\n/**\n * An object representing a version.\n */\nexport interface Version {\n readonly str: string\n readonly major: number\n readonly minor: number | null\n readonly patch: number | null\n readonly build: number | null\n}\n\n/**\n * A comparator for Version objects.\n * This strict comparator will consider 1.0.0 > 1.0. Use {@link compareVersions} if null\n * segments should be treated as zero values.\n * Use this comparator when stable sorting.\n */\nexport const compareVersionsStrict: Comparator<Version | null> =\n /* @__PURE__ */ compareBy<Version>(\n (v) => v.major,\n (v) => v.minor,\n (v) => v.patch,\n (v) => v.build,\n (v) => v.str\n )\n\n/**\n * A comparator for Version objects.\n * Unlike {@link compareVersionsStrict}, 1.0.0.0 === 1.\n * Use this comparator when comparing two versions and order does not need to be stable.\n */\nexport const compareVersions: Comparator<Version | null> = /* @__PURE__ */ compareBy<Version>(\n (v) => v.major,\n (v) => v.minor ?? 0,\n (v) => v.patch ?? 0,\n (v) => v.build ?? 0\n)\n\nconst versionRegex = /(\\b\\w*\\d(?:[._-]\\d+)*[\\w-._]*)/\n\n/**\n * Given a string containing a semver-like version string, finds and returns the parsed Version.\n *\n * @param str\n */\nexport function parseVersion(str: string): Version\n\n/**\n * Given a string containing a semver-like version string, finds and returns the parsed Version.\n *\n * @param str\n */\nexport function parseVersion(str: Maybe<string>): Version | null\n\n/**\n * Given a string containing a semver-like version string, finds and returns the parsed Version.\n *\n * @param str\n */\nexport function parseVersion(str: Maybe<string>): Version | null {\n if (!str) return null\n const match = versionRegex.exec(str)\n if (!match) return null\n const parts = match[0].match(/\\d+/g)!\n return {\n str: match[0],\n major: parseInt(parts[0]),\n minor: parseIntSafe(parts[1]),\n patch: parseIntSafe(parts[2]),\n build: parseIntSafe(parts[3]),\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { last } from '@/util/collection/array'\nimport { memoize } from '@/util/fun/memoize'\nimport { substringBefore, tokenizeWords } from '@/util/string/string'\nimport type { Maybe } from '@/util/type'\nimport type { Version } from '@/client/Version'\nimport { parseVersion } from '@/client/Version'\nimport type { UaDeviceInfo, UaSystemInfo } from './UserAgentInfo'\n\nconst MAX_USER_AGENT_LENGTH = 500\n\n/**\n * Separates system and platform parts.\n * group 1 - System group (The entire parenthetical)\n * group 2 - Platform name part\n * group 3 - Platform version part\n */\nconst userAgentRegex = /[([]([^\\])]*)[\\])]|([^\\s/([]+)(?:\\/(\\S+))?/g\n\n/**\n * In system parts, (semicolon separated sections within a parenthetical), captures the parts when\n * there is a version part separated by a slash.\n *\n * group 1 - The part before the Name/Version\n * group 2 - The Name in Name/Version\n * group 3 - The Version in Name/Version\n */\nconst nameVersionRegex = /(.*?)([^\\s/([]+)\\/(\\S+)\\s*$/i\n\n/**\n * Matches a version-like string in a system part.\n * Slightly more strict than the {@link parseVersion} Regex.\n */\nconst versionRegex = /\\s\\w*\\d(?:[._]\\d+)*[\\w-._]*/g\n\n/**\n * Builds a tokenized user agent for faster queries.\n *\n * @param userAgent\n */\nexport function tokenizeUserAgent(userAgent: string): TokenizedUserAgent {\n userAgent = userAgent.substring(0, MAX_USER_AGENT_LENGTH)\n const systemParts: UserAgentPart[] = []\n const platformParts: UserAgentPart[] = []\n let match: Array<string | undefined> | null\n while ((match = userAgentRegex.exec(userAgent))) {\n if (match[1]) {\n // System part\n const split = match[1].split(';')\n split.forEach((section) => {\n const versionMatch = nameVersionRegex.exec(section)\n if (versionMatch) {\n // name is the part before the Name/Version pair\n const name = versionMatch[1].trim()\n const versionStr = versionMatch[3]\n systemParts.push({\n name,\n version: parseVersion(versionStr),\n tokens: tokenizeWords(section),\n })\n } else {\n // No Name/Version pair\n // Finds the last version-like string in the section, if any exists.\n const versionMatches = section.match(versionRegex)\n systemParts.push({\n name: section.trim(),\n // Finds the first version-like string in the section, if any exists.\n version: parseVersion(last(versionMatches)),\n tokens: tokenizeWords(section),\n })\n }\n })\n } else {\n // Platform part\n const name = match[2]!\n platformParts.push({\n name,\n version: parseVersionPart(match[3] ?? ''),\n tokens: tokenizeWords(name),\n })\n }\n }\n return {\n userAgent,\n system: new TokenizedInfo(systemParts),\n platform: new TokenizedInfo(platformParts),\n } as const\n}\n\nfunction parseVersionPart(str: string): Version | null {\n // If there are multiple versions, e.g. `Firefox/85.0/10csO9CgK-99` use the first.\n return parseVersion(substringBefore(str, '/'))\n}\n\n/**\n * A User Agent rule takes a tokenized user agent, and if the rule matches, returns the Browser\n * or Platform\n * information. Otherwise, returns null.\n */\nexport type SystemInfoRule = (\n tokenizedUa: TokenizedUserAgent\n) => UaSystemInfo | null\n\n/**\n * A User Agent rule takes a tokenized user agent, and if the rule matches, returns the Device\n * information. Otherwise, returns null.\n */\nexport type DeviceInfoRule = (\n tokenizedUa: TokenizedUserAgent\n) => UaDeviceInfo | null\n\n/**\n * A User Agent rule takes a tokenized user agent, and if the rule matches, returns the Browser\n * or Platform\n * information. Otherwise, returns null.\n */\nexport type SystemInfoLikeRule = (\n tokenizedUa: TokenizedUserAgent,\n systemInfo: UaSystemInfo | null\n) => UaSystemInfo | null\n\n/**\n * The ruleset to use when parsing a user agent.\n * Rules are expected to be from most specific to least.\n */\nexport interface UserAgentRules {\n readonly browserRules: readonly SystemInfoRule[]\n readonly browserLikeRules: readonly SystemInfoLikeRule[]\n readonly osRules: readonly SystemInfoRule[]\n readonly osLikeRules: readonly SystemInfoLikeRule[]\n readonly deviceRules: readonly DeviceInfoRule[]\n}\n\n/**\n * A tokenized user agent.\n * A common format for user agents:\n * `Mozilla/5.0 (<system-information>) <platform> (<platform-details>) [extensions]`\n *\n */\nexport interface TokenizedUserAgent {\n /**\n * The original user agent.\n */\n readonly userAgent: string\n\n /**\n * The tokenized system and platform details or extensions (parts within parenthetical sections\n * separated by semicolons.)\n */\n readonly system: TokenizedInfo\n\n /**\n * The tokenized platform info (parts outside parenthetical sections, separated by\n * whitespace.)\n */\n readonly platform: TokenizedInfo\n}\n\n/**\n * A parsed system or extension part of the user agent. (A section within a parenthetical)\n */\nexport interface UserAgentPart extends UaSystemInfo {\n readonly name: string\n readonly version: Version | null\n readonly tokens: readonly string[]\n}\n\nexport class TokenizedInfo {\n /**\n * A token map of lowercase token strings to name/version pairs.\n */\n private readonly tokenMap: ReadonlyMap<string, UserAgentPart>\n\n constructor(readonly parts: UserAgentPart[]) {\n const map: Map<string, UserAgentPart> = new Map()\n parts.forEach((part) => {\n part.tokens.forEach((token) => {\n if (\n !map.has(token) ||\n map.get(token)!.tokens.length > part.tokens.length\n )\n // When there is a token key collision, the parts with fewer tokens take\n // precedence in the map. This allows the parts with more tokens to be\n // disambiguated using the tokens not shared.\n map.set(token, part)\n })\n })\n this.tokenMap = map\n }\n\n /**\n * Given lowercase tokens of only alpha characters, returns the mapped token part if all tokens\n * are contained in the section.\n */\n get(...tokens: readonly string[]): UaSystemInfo | null {\n for (const token of tokens) {\n const part = this.tokenMap.get(token)\n if (!part) return null\n if (tokens.every((iToken) => part.tokens.includes(iToken))) {\n return { name: part.name, version: part.version }\n }\n }\n return null\n }\n\n /**\n * Given an expression of logical operators, returns the name and version of the part\n * that matches the expression.\n *\n * Logical operators currently supported: | for OR and & for AND.\n * Operands between operators will be tokenized via {@link tokenizeWords}.\n *\n * @param expr The expression of tokens and operators. Example: 'windows phone|windows&mobile'\n * will match when one part has both 'windows' and 'phone' or there are two parts, one with\n * 'windows' and another part with 'mobile'\n * (Case insensitive)\n */\n query(expr: string): UaSystemInfo | null {\n return tokenQuery(expr, (tokens) => this.get(...tokens))\n }\n}\n\n/**\n * Executes a logical expression mapping tokens with a predicate, using the result as operands.\n *\n * Logical operators currently supported: | for OR and & for AND.\n * Operands between operators will be tokenized via {@link tokenizeWords}.\n *\n * @param expr The expression of tokens and operators.\n * @param predicate Each token set operand will be mapped using this function.\n */\nexport function tokenQuery<T>(\n expr: string,\n predicate: (tokens: readonly string[]) => Maybe<T>\n): T | null {\n const parsedExpr = parsedExpression(expr)\n for (const orGroup of parsedExpr) {\n let found: Maybe<T> = null\n for (const words of orGroup) {\n found = predicate(words)\n if (found == null) break\n }\n if (found) return found\n }\n return null\n}\n\nconst parsedExpression = /* @__PURE__ */ memoize(\n (expr: string): readonly string[][][] => {\n return expr.split('|').map((g) => g.split('&').map(tokenizeWords))\n },\n (expr) => expr\n)\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Maybe } from '@/util/type'\nimport type {\n DeviceInfoRule,\n SystemInfoLikeRule,\n SystemInfoRule,\n TokenizedUserAgent,\n} from './tokenizeUserAgent'\nimport { tokenQuery } from './tokenizeUserAgent'\nimport type { UaDeviceInfo } from './UserAgentInfo'\n\n/**\n * A rule to match platform information (parts outside parentheticals).\n *\n * @param name The exact name to use if there's a match.\n * @param expr\n */\nexport function uaPlatformRule(name: string, expr: string): SystemInfoRule {\n return uaName(name, (t) => t.platform.query(expr))\n}\n\n/**\n * A rule to match system information. (Matches parts within parentheticals.)\n *\n * @param name The exact name to use if there's a match.\n * @param expr\n * @param hasVersion If true, the version will be inferred from the matched part.\n */\nexport function uaSystemRule(\n name: string,\n expr: string,\n hasVersion: boolean\n): SystemInfoRule {\n return (t) => {\n const found = t.system.query(expr)\n if (!found) return null\n const version = hasVersion ? found.version : null\n return { name, version }\n }\n}\n\n/**\n * A rule to match platform or system information.\n *\n * @param name The exact name to use if there's a match.\n * @param expr A token expression.\n */\nexport function uaPlatformOrSystemRule(\n name: string,\n expr: string\n): SystemInfoRule {\n return uaName(name, (t) =>\n tokenQuery(\n expr,\n (tokens) => t.platform.get(...tokens) || t.system.get(...tokens)\n )\n )\n}\n\n/**\n * Changes the name of the Name/Version part returned from the given rule.\n *\n * @param name\n * @param rule\n */\nexport function uaName(name: string, rule: SystemInfoRule): SystemInfoRule {\n return (t) => {\n const found = rule(t)\n return found && { name, version: found.version }\n }\n}\n\nexport function uaSystemLike(\n name: string,\n derived: readonly string[]\n): SystemInfoLikeRule {\n return (_, systemInfo) => {\n return derived.some((name) => name === systemInfo?.name)\n ? {\n name,\n version: null,\n }\n : null\n }\n}\n\n/**\n * A rule to match system or platform information, providing vendor and type information.\n *\n * @param vendor The device make/vendor to use when there's a match.\n * @param type The type of device, e.g. 'mobile' or 'tablet'.\n * @param expr The token expression to use to determine a match. If there is a match, the\n * matched name will be used as the model unless model is explicit.\n * @param model If defined, will be used as the model string instead of the matched expression\n * name.\n */\nexport function uaDeviceRule(\n vendor: string | null,\n type: string | null,\n expr: string,\n model?: Maybe<string>\n): DeviceInfoRule {\n return (t: TokenizedUserAgent): UaDeviceInfo | null => {\n const found = tokenQuery(\n expr,\n (tokens) => t.system.get(...tokens) || t.platform.get(...tokens)\n )\n return (\n found && {\n vendor: vendor,\n model: model === undefined ? found.name : model,\n type,\n }\n )\n }\n}\n\n/**\n * A rule that executes a regex, transforming the match result.\n *\n * @param expr\n * @param onMatch When the expression matches, onMatch will be given the RegExpExecArray and return\n * the final info object.\n */\nexport function regexRule<T>(\n expr: RegExp,\n onMatch: (match: RegExpMatchArray) => T\n): (t: TokenizedUserAgent) => T | null {\n return (t) => {\n const match = expr.exec(t.userAgent)\n if (!match) return null\n return onMatch(match)\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { UserAgentRules } from './tokenizeUserAgent'\nimport type { UaDeviceInfo } from './UserAgentInfo'\nimport {\n regexRule,\n uaDeviceRule as device,\n uaPlatformOrSystemRule as platformOrSystem,\n uaPlatformRule as platform,\n uaSystemLike,\n uaSystemRule as system,\n} from './userAgentRuleHelpers'\n\n/**\n * An enumeration of operating systems that can be detected from the user agent.\n */\nexport enum Os {\n ANDROID = 'Android',\n ANDROID_OSP = 'Android OSP',\n CHROME_OS = 'chromeOS',\n CHROMECAST = 'Chromecast',\n FEDORA = 'Fedora',\n FIREFOX_OS = 'Firefox OS', // Firefox OS (legacy) does not have a differentiable user agent\n FIRE_OS = 'Fire OS',\n FREE_BSD = 'FreeBSD',\n HARMONY_OS = 'HarmonyOS',\n I_OS = 'iOS',\n KAIOS = 'KaiOS', // Based on the discontinued Firefox OS\n LINUX = 'Linux',\n MAC_OS = 'macOS',\n MIUI = 'MIUI',\n ORBIS = 'Orbis OS',\n SMART_CAST = 'SmartCast',\n SYMBIAN = 'Symbian',\n TIZEN = 'Tizen',\n UBUNTU = 'Ubuntu',\n VEGA = 'Vega',\n WEB_OS = 'webOS',\n WINDOWS = 'Windows',\n WINDOWS_PHONE = 'Windows Phone',\n}\n\n/**\n * An enumeration of browsers that can be detected from the user agent.\n */\nexport enum Browser {\n BRAVE = 'Brave',\n CHROME = 'Chrome',\n CHROME_HEADLESS = 'Chrome Headless',\n CHROMIUM = 'Chromium',\n DUCK_DUCK_GO = 'DuckDuckGo',\n EDGE_CHROMIUM = 'Edge Chromium',\n EDGE_LEGACY = 'Edge Legacy',\n ELECTRON = 'Electron',\n FIREFOX = 'Firefox',\n HUAWEI = 'Huawei',\n IE = 'IE',\n IE_MOBILE = 'IE Mobile', // AKA Pocket Internet Explorer\n OCULUS = 'Oculus Browser',\n OPENWAVE = 'Openwave',\n OPERA = 'Opera',\n OPERA_TOUCH = 'Opera Touch',\n QUARK = 'Quark',\n SILK = 'Silk',\n SAFARI = 'Safari',\n SAMSUNG_BROWSER = 'Samsung Browser',\n UC_BROWSER = 'UC Browser',\n WPE = 'WPE WebKit',\n YANDEX = 'Yandex',\n WEBKIT = 'WebKit',\n}\n\nexport enum DeviceVendor {\n AMAZON = 'Amazon',\n APPLE = 'Apple',\n FACEBOOK = 'Facebook',\n GOOGLE = 'Google',\n HISENSE = 'Hisense',\n HTC = 'HTC',\n HUAWEI = 'Huawei',\n K = 'K',\n LG = 'LG',\n MEIZU = 'Meizu',\n MICROSOFT = 'Microsoft',\n MOTOROLA = 'Motorola',\n NINTENDO = 'Nintendo',\n NOKIA = 'Nokia',\n NVIDIA = 'Nvidia',\n ONE_PLUS = 'OnePlus',\n OPPO = 'OPPO',\n ROKU = 'Roku',\n SAMSUNG = 'Samsung',\n SKY = 'Sky',\n SKY_DEVICES = 'SKY Devices', // Not related to the set-top boxes.\n SONY = 'Sony',\n TESLA = 'Tesla',\n VIZIO = 'VIZIO',\n}\n\nexport enum DeviceType {\n AUTOMOTIVE = 'automotive',\n CONSOLE = 'console',\n DESKTOP = 'desktop',\n SMART_TV = 'smarttv',\n MOBILE = 'mobile',\n WEARABLE = 'wearable',\n}\n\nexport const defaultUserAgentRules: UserAgentRules = {\n browserRules: [\n // IE based:\n /* @__PURE__ */ platform(Browser.EDGE_LEGACY, 'edge'),\n /* @__PURE__ */ platformOrSystem(Browser.IE, 'msie|trident'),\n /* @__PURE__ */ platformOrSystem(Browser.IE_MOBILE, 'iemobile'),\n\n // Firefox based:\n /* @__PURE__ */ platform(Browser.FIREFOX, 'firefox|fxios'),\n\n // Chromium based:\n /* @__PURE__ */ platformOrSystem(Browser.BRAVE, 'brave'),\n /* @__PURE__ */ platform(Browser.DUCK_DUCK_GO, 'duckduckgo'),\n /* @__PURE__ */ platform(Browser.EDGE_CHROMIUM, 'edg|edgios|edga'),\n /* @__PURE__ */ platform(Browser.ELECTRON, 'electron'),\n /* @__PURE__ */ platform(Browser.OCULUS, 'oculusbrowser'),\n /* @__PURE__ */ platform(Browser.OPENWAVE, 'up.link|up.browser'),\n /* @__PURE__ */ platform(Browser.OPERA, 'opr|opera'),\n /* @__PURE__ */ platform(Browser.OPERA_TOUCH, 'opt'),\n /* @__PURE__ */ platform(Browser.QUARK, 'quark'),\n /* @__PURE__ */ platform(Browser.HUAWEI, 'huaweibrowser'),\n /* @__PURE__ */ platform(Browser.SAMSUNG_BROWSER, 'samsungbrowser'),\n /* @__PURE__ */ platform(Browser.SILK, 'silk'),\n /* @__PURE__ */ platform(Browser.UC_BROWSER, 'ucbrowser'),\n /* @__PURE__ */ platform(Browser.YANDEX, 'yasearchbrowser|yabrowser'),\n /* @__PURE__ */ platform(Browser.CHROME_HEADLESS, 'headlesschrome'),\n /* @__PURE__ */ platform(Browser.CHROMIUM, 'chromium'),\n /* @__PURE__ */ platform(Browser.CHROME, 'chrome|crios'),\n\n // WebKit based:\n /* @__PURE__ */ platform(Browser.WPE, 'wpe'),\n\n /* @__PURE__ */ platform(Browser.SAFARI, 'safari&version'),\n /* @__PURE__ */ platformOrSystem(Browser.SAFARI, 'like safari&version'),\n ],\n\n browserLikeRules: [\n /* @__PURE__ */ uaSystemLike(Browser.WEBKIT, [Browser.SAFARI]),\n (t) =>\n // All iOS devices use WebKit\n t.system.query('iphone|ipad|ipod') &&\n t.platform.get('applewebkit') && {\n name: Browser.WEBKIT,\n version: null,\n },\n /* @__PURE__ */ platformOrSystem(Browser.FIREFOX, 'firefox'),\n (t) => {\n const systemInfo = t.platform.query(\n 'chrome|headlesschrome|crios|chromium'\n )\n if (systemInfo == null || t.platform.query('edge'))\n // Edge legacy\n return null\n return {\n name: Browser.CHROMIUM,\n version: systemInfo.version,\n }\n },\n ],\n\n osRules: [\n /* @__PURE__ */ system(Os.WINDOWS_PHONE, 'windows phone', true),\n /* @__PURE__ */ system(Os.WINDOWS, 'windows', true),\n /* @__PURE__ */ system(Os.TIZEN, 'tizen', true),\n /* @__PURE__ */ system(Os.I_OS, 'cpu os|iphone os', true),\n /* @__PURE__ */ system(Os.MAC_OS, 'os x', true),\n /* @__PURE__ */ system(Os.CHROME_OS, 'cros', true),\n /* @__PURE__ */ platform(Os.SMART_CAST, 'smartcast'), // VIZIO SmartCast has built-in chromecast (CrKey)\n /* @__PURE__ */ platformOrSystem(Os.CHROMECAST, 'crkey'),\n /* @__PURE__ */ system(Os.WEB_OS, 'webos', true),\n /* @__PURE__ */ system(Os.SYMBIAN, 'symbian', false),\n /* @__PURE__ */ system(Os.HARMONY_OS, 'harmonyos', false),\n /* @__PURE__ */ platformOrSystem(Os.MIUI, 'linux&xiaomi'),\n /* @__PURE__ */ platformOrSystem(Os.FIRE_OS, 'fireos'),\n /* @__PURE__ */ system(Os.ANDROID, 'android', true),\n /* @__PURE__ */ system(Os.FREE_BSD, 'freebsd', false),\n /* @__PURE__ */ system(Os.FEDORA, 'fedora', false),\n /* @__PURE__ */ system(Os.ORBIS, 'orbis|playstation', false),\n /* @__PURE__ */ system(Os.UBUNTU, 'ubuntu', false),\n /* @__PURE__ */ system(Os.VEGA, 'kepler', false),\n /* @__PURE__ */ system(Os.LINUX, 'linux', false),\n /* @__PURE__ */ platform(Os.KAIOS, 'kaios'), // [sic] KAIOS is in platform section\n ],\n\n osLikeRules: [\n /* @__PURE__ */ system(Os.ANDROID_OSP, 'android', true),\n /* @__PURE__ */ uaSystemLike(Os.ANDROID_OSP, [\n Os.ANDROID,\n Os.HARMONY_OS,\n Os.FIRE_OS,\n Os.MIUI,\n ]),\n /* @__PURE__ */ uaSystemLike(Os.FIREFOX_OS, [Os.KAIOS]),\n /* @__PURE__ */ uaSystemLike(Os.LINUX, [\n Os.FREE_BSD,\n Os.FEDORA,\n Os.ORBIS,\n Os.UBUNTU,\n Os.LINUX,\n ]),\n ],\n\n deviceRules: [\n // Desktop\n\n /* @__PURE__ */ device(DeviceVendor.APPLE, DeviceType.DESKTOP, 'macintosh'),\n\n // Mobile\n\n /* @__PURE__ */ device(DeviceVendor.APPLE, DeviceType.MOBILE, 'iphone|ipod|ipad'),\n /* @__PURE__ */ device(DeviceVendor.SAMSUNG, DeviceType.MOBILE, 'sm|samsung'),\n /* @__PURE__ */ device(DeviceVendor.GOOGLE, DeviceType.MOBILE, 'pixel|nexus'),\n /* @__PURE__ */ device(DeviceVendor.HUAWEI, DeviceType.MOBILE, 'ine'),\n /* @__PURE__ */ device(DeviceVendor.HTC, DeviceType.MOBILE, 'htc'),\n /* @__PURE__ */ device(DeviceVendor.MEIZU, DeviceType.MOBILE, 'meizu'),\n /* @__PURE__ */ device(DeviceVendor.ONE_PLUS, DeviceType.MOBILE, 'oneplus'),\n /* @__PURE__ */ device(\n DeviceVendor.MOTOROLA,\n DeviceType.MOBILE,\n 'mot|motorola|motorizr'\n ),\n /* @__PURE__ */ device(DeviceVendor.NOKIA, DeviceType.MOBILE, 'nokia'),\n /* @__PURE__ */ device(DeviceVendor.OPPO, DeviceType.MOBILE, 'oppo'),\n /* @__PURE__ */ device(DeviceVendor.AMAZON, DeviceType.MOBILE, 'kindle'),\n /* @__PURE__ */ device(DeviceVendor.NVIDIA, DeviceType.MOBILE, 'shield tablet'),\n /* @__PURE__ */ device(DeviceVendor.K, DeviceType.MOBILE, 'android&k'),\n /* @__PURE__ */ device(DeviceVendor.LG, DeviceType.MOBILE, 'android&mobile&lg'),\n /* @__PURE__ */ device(DeviceVendor.SKY_DEVICES, DeviceType.MOBILE, 'android&sky'),\n\n // Consoles\n\n /* @__PURE__ */ device(DeviceVendor.SONY, DeviceType.CONSOLE, 'playstation'),\n /* @__PURE__ */ device(DeviceVendor.MICROSOFT, DeviceType.CONSOLE, 'xbox one|xbox'),\n /* @__PURE__ */ device(DeviceVendor.NINTENDO, DeviceType.CONSOLE, 'switch|nintendo'),\n\n // Wearables\n\n /* @__PURE__ */ device(DeviceVendor.APPLE, DeviceType.WEARABLE, 'airwatch'),\n /* @__PURE__ */ device(DeviceVendor.FACEBOOK, DeviceType.WEARABLE, 'quest'),\n\n // Smart TVs:\n\n /* @__PURE__ */ device(DeviceVendor.AMAZON, DeviceType.SMART_TV, 'afts|aftwmst'),\n /* @__PURE__ */ device(DeviceVendor.APPLE, DeviceType.SMART_TV, 'appletv'),\n /* @__PURE__ */ device(DeviceVendor.GOOGLE, DeviceType.SMART_TV, 'nexus player'),\n /* @__PURE__ */ device(DeviceVendor.HISENSE, DeviceType.SMART_TV, 'hisense'),\n /* @__PURE__ */ device(DeviceVendor.LG, DeviceType.SMART_TV, 'lg'),\n /* @__PURE__ */ device(DeviceVendor.ROKU, DeviceType.SMART_TV, 'roku'),\n /* @__PURE__ */ device(DeviceVendor.AMAZON, DeviceType.SMART_TV, 'kepler'),\n /* @__PURE__ */ regexRule<UaDeviceInfo>(/linux.*\\(sky,\\s*(\\w+)/i, (match) => {\n return {\n vendor: DeviceVendor.SKY,\n model: match[1],\n type: DeviceType.SMART_TV,\n }\n }),\n /* @__PURE__ */ regexRule<UaDeviceInfo>(\n /vizio smartcast.+model\\/([\\w-]+)/i,\n (match) => {\n return {\n vendor: DeviceVendor.VIZIO,\n model: match[1],\n type: DeviceType.SMART_TV,\n }\n }\n ),\n\n /* @__PURE__ */ device(DeviceVendor.VIZIO, DeviceType.SMART_TV, 'vizio'),\n /* @__PURE__ */ device(DeviceVendor.GOOGLE, DeviceType.SMART_TV, 'crkey', 'Chromecast'),\n\n // Automotive:\n\n /* @__PURE__ */ device(DeviceVendor.TESLA, DeviceType.AUTOMOTIVE, 'tesla'),\n\n // Generic\n\n // WPE is a WebKit browser designed for embedded systems:\n /* @__PURE__ */ device(null, DeviceType.SMART_TV, 'wpe', null),\n\n /* @__PURE__ */ device(null, DeviceType.MOBILE, 'mobile|android', null),\n /* @__PURE__ */ device(null, DeviceType.DESKTOP, 'windows|linux|cros', null),\n ],\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Version } from '@/client/Version'\n\n/**\n * A parsed user agent.\n */\nexport interface UserAgentInfo {\n readonly userAgent: string\n readonly browser: UaSystemInfo | null\n readonly browserLike: UaSystemInfo | null\n readonly device: UaDeviceInfo | null\n readonly os: UaSystemInfo | null\n readonly osLike: UaSystemInfo | null\n}\n\n/**\n * Platform or system information.\n */\nexport interface UaSystemInfo {\n readonly name: string\n readonly version: Version | null\n}\n\n/**\n * Device information from the user agent.\n */\nexport interface UaDeviceInfo {\n readonly vendor: string | null\n readonly model: string | null\n readonly type: string | null\n}\n\nexport const emptyUserAgentInfo = {\n userAgent: '',\n browser: null,\n browserLike: null,\n os: null,\n osLike: null,\n device: null,\n} as const satisfies UserAgentInfo\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Maybe } from '@/util/type'\nimport { defaultUserAgentRules } from './defaultUserAgentRules'\nimport type { UserAgentRules } from './tokenizeUserAgent'\nimport { tokenizeUserAgent } from './tokenizeUserAgent'\nimport type { UaDeviceInfo, UaSystemInfo, UserAgentInfo } from './UserAgentInfo'\nimport { emptyUserAgentInfo } from './UserAgentInfo'\nimport { globalRef } from '@/global/globalRegistry'\n\n/**\n * Parses the user agent into a {@link UserAgentInfo} object.\n *\n * @param userAgent The User Agent. Default: `navigator.userAgent`.\n * @param rules The user agent rules.\n */\nexport function parseUserAgent(\n userAgent?: Maybe<string>,\n rules: UserAgentRules = defaultUserAgentRules\n): UserAgentInfo {\n if (userAgent === undefined && typeof navigator === 'object')\n userAgent = navigator.userAgent\n if (!userAgent) return emptyUserAgentInfo\n const tokenizedUa = tokenizeUserAgent(userAgent)\n\n let browserInfo: UaSystemInfo | null = null\n for (const rule of rules.browserRules) {\n browserInfo = rule(tokenizedUa)\n if (browserInfo) break\n }\n\n let browserLikeInfo: UaSystemInfo | null = null\n for (const rule of rules.browserLikeRules) {\n browserLikeInfo = rule(tokenizedUa, browserInfo)\n if (browserLikeInfo) break\n }\n\n let osInfo: UaSystemInfo | null = null\n for (const rule of rules.osRules) {\n osInfo = rule(tokenizedUa)\n if (osInfo) break\n }\n\n let osLikeInfo: UaSystemInfo | null = null\n for (const rule of rules.osLikeRules) {\n osLikeInfo = rule(tokenizedUa, osInfo)\n if (osLikeInfo) break\n }\n\n let deviceInfo: UaDeviceInfo | null = null\n for (const rule of rules.deviceRules) {\n deviceInfo = rule(tokenizedUa)\n if (deviceInfo) break\n }\n\n return {\n userAgent,\n browser: browserInfo,\n browserLike: browserLikeInfo,\n os: osInfo,\n osLike: osLikeInfo,\n device: deviceInfo,\n }\n}\n\nexport const userAgentInfoRef = /* @__PURE__ */ globalRef(() => parseUserAgent())\n\nexport function getUserAgentInfo(): UserAgentInfo {\n return userAgentInfoRef.value\n}\n\nexport function setUserAgent(value: string) {\n userAgentInfoRef.reset()\n userAgentInfoRef.set(() => parseUserAgent(value))\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Browser } from './defaultUserAgentRules'\nimport { getUserAgentInfo } from './parseUserAgent'\nimport type { UserAgentInfo } from './UserAgentInfo'\nimport type { Version } from '@/client/Version'\nimport { compareVersions, parseVersion } from '@/client/Version'\nimport type { Maybe } from '@/util/type'\n\nexport interface HasBrowserOptions {\n /**\n * If true (default), checks both {@link UserAgentInfo.browserLike} (first) and\n * {@link UserAgentInfo.browser} for a name match.\n */\n readonly checkBrowserLike?: boolean\n\n /**\n * The parsed user agent to query. Default is the browser's parsed user agent.\n */\n readonly userAgentInfo?: UserAgentInfo\n}\n\n/**\n * Returns true if the current user agent matches the given browser.\n *\n * @param browser\n * @param minVersionStr If provided, only returns true if the browser version is at least this version.\n * Must be parsable by {@link parseVersion}.\n * @param maxVersionStr If provided, only returns true if the browser version is at most this version.\n * Must be parsable by {@link parseVersion}.\n * @param options Additional optional configuration.\n */\nexport function hasBrowser(\n browser: Browser,\n minVersionStr?: Maybe<string>,\n maxVersionStr?: Maybe<string>,\n options?: HasBrowserOptions\n): boolean {\n const userAgent = options?.userAgentInfo ?? getUserAgentInfo()\n const systemInfo =\n (options?.checkBrowserLike ?? true) &&\n userAgent.browserLike?.name === browser\n ? userAgent.browserLike\n : userAgent.browser?.name === browser\n ? userAgent.browser\n : null\n if (systemInfo == null) return false\n\n let atMostMaxVersion = false\n if (!maxVersionStr) atMostMaxVersion = true\n else {\n // When a maxVersionStr has been provided, consider null sub-versions to always match.\n // For example maxVersionStr 53 will match the version 53.1.234, but 53.0 would not.\n const maxInt = Number.MAX_SAFE_INTEGER\n const maxVersion = parseVersion(maxVersionStr)\n const finalMaxVersion = {\n major: maxVersion.major,\n minor: maxVersion.minor ?? maxInt,\n patch: maxVersion.patch ?? maxInt,\n build: maxVersion.build ?? maxInt,\n str: '',\n } as const satisfies Version\n atMostMaxVersion =\n compareVersions(systemInfo.version, finalMaxVersion) <= 0\n }\n\n return (\n (minVersionStr == null ||\n compareVersions(systemInfo.version, parseVersion(minVersionStr)) >=\n 0) &&\n atMostMaxVersion\n )\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Fetch } from '@/network/Requester'\nimport { hasBrowser } from '@/client/userAgent/hasBrowser'\nimport { Browser } from '@/client/userAgent/defaultUserAgentRules'\nimport {\n changeRequestInputUrl,\n getHeaderFromRequestParams,\n} from '@/util/network/request'\nimport { createShortUid } from '@/util/string/uid'\n\nexport function requiresPreventCacheRangeRequestsPatch(): boolean {\n return hasBrowser(Browser.CHROMIUM, null, '64')\n}\n\n/**\n * On affected UAs, Range requests from cache can fail with a TypeError.\n *\n * A message will display in the browser such as net::ERR_CONNECTION_FAILED, which isn't accessible from the Error.\n * @param original\n */\nexport function preventCacheRangeRequestsPatch(original: Fetch): Fetch {\n return async (input: RequestInfo | URL, init?: RequestInit) => {\n try {\n return await original(input, init)\n } catch (error) {\n if (\n error instanceof TypeError &&\n getHeaderFromRequestParams(input, init, 'range')\n ) {\n input = changeRequestInputUrl(input, (url) => {\n // Note - the browsers affected do not support the cache: no-cache init parameter.\n url.searchParams.append('__cache', createShortUid())\n })\n return original(input, init)\n }\n throw error\n }\n }\n}\n\nexport function patchFetch(original: Fetch): Fetch {\n if (requiresPreventCacheRangeRequestsPatch()) {\n return preventCacheRangeRequestsPatch(original)\n } else {\n return original\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Timestamp } from '@/util/date/date'\nimport type { ErrorBodyType } from '@/network/Requester'\n\n/**\n * Events {@link RequesterImpl} emits.\n */\nexport interface RequesterImplEventMap {\n /**\n * A request has been requested.\n * This is emitted immediately when {@link Requester.request} is called.\n */\n readonly request: RequestEvent\n\n /**\n * A request attempt has begun. For implementations with retry behavior, this is expected to be\n * emitted for each try.\n */\n readonly requestAttemptStart: RequestAttemptStartEvent\n\n /**\n * A request attempt has completed.\n */\n readonly requestAttemptComplete: RequestCompletedEvent\n\n /**\n * The request promise is about to settle.\n */\n readonly requestComplete: RequestCompletedEvent\n}\n\nexport interface RequestEvent {\n /**\n * Information about the request.\n */\n readonly requestInfo: FetchRequestInfo\n}\n\nexport interface RequestAttemptStartEvent {\n /**\n * Information about the request.\n */\n readonly requestInfo: FetchRequestInfo\n\n /**\n * Information about the current attempt.\n */\n readonly attemptInfo: RequestAttemptInfo\n}\n\n/**\n * When a request has been made, information about the request is gathered for logging.\n */\nexport interface FetchRequestInfo {\n /**\n * The identifier for the request. The request id for the `requesting` event will match its\n * corresponding `requestComplete` event.\n */\n readonly requestId: string\n\n /**\n * The input parameter passed to `request`.\n */\n readonly input: RequestInfo | URL\n\n /**\n * The init parameter passed to `request`.\n */\n readonly init: RequestInit\n\n /**\n * The maximum number of retries.\n */\n readonly maxRetries: number\n\n /**\n * Options the request is using.\n */\n readonly requestOptions: {\n /**\n * The resolved service id.\n */\n readonly serviceId: string | null\n\n /**\n * Determines how error responses are read and reported.\n */\n readonly readErrorBody: ErrorBodyType\n }\n\n /**\n * The timestamp the request was originally requested.\n */\n readonly timestamp: Timestamp\n}\n\n/**\n * Information about the current try.\n */\nexport interface RequestAttemptInfo {\n /**\n * The current try (1 = first).\n */\n readonly currentTry: number\n\n /**\n * The timestamp the actual request attempt began. This will be after awaiting network\n * availability.\n */\n readonly timestamp: Timestamp\n}\n\n/**\n * Information about a request completion, either from a successful response or a failure.\n */\nexport type RequestCompletedEvent = RequestSuccessEvent | RequestErrorEvent\n\nexport interface RequestCompletedEventBase {\n /**\n * True if the request was successful.\n */\n readonly ok: boolean\n\n /**\n * The local timestamp of the request result or error.\n */\n readonly timestamp: Timestamp\n\n /**\n * Information about the request.\n */\n readonly requestInfo: FetchRequestInfo\n}\n\nexport interface RequestSuccessEvent extends RequestCompletedEventBase {\n /**\n * The response was successful.\n */\n readonly ok: true\n\n /**\n * The serializable and loggable response.\n */\n readonly responseInfo: ResponseInfo\n\n /**\n * Information about the current attempt.\n */\n readonly attemptInfo: RequestAttemptInfo\n}\n\nexport enum RequestFailureType {\n /**\n * The request has been aborted.\n */\n ABORT = 'abort',\n\n /**\n * The request failed due to a caught internal error.\n */\n INTERNAL = 'internal',\n\n /**\n * The request failed with a caught error.\n */\n NETWORK = 'network',\n\n /**\n * An `!ok` response was received.\n */\n RESPONSE = 'response',\n}\n\nexport type RequestErrorEvent =\n | RequestCaughtErrorEvent\n | RequestNetworkErrorEvent\n | RequestResponseErrorEvent\n\nexport interface RequestErrorEventBase extends RequestCompletedEventBase {\n /**\n * The request failed.\n */\n readonly ok: false\n\n /**\n * The failure type.\n */\n readonly type: RequestFailureType\n\n /**\n * If false, the request will not be retried, even if there are more tries remaining.\n *\n * This will be false if the error is an internal error, retries have been exhausted or the\n * response did not pass the `shouldRetry` filter.\n */\n readonly willRetry: boolean\n\n /**\n * The timestamp of the next try.\n * If `willRetry` is true, the request will try again at this timestamp.\n */\n readonly retryAfter: Timestamp | null\n\n /**\n * The caught or rejected reason.\n */\n readonly reason: any\n}\n\nexport interface RequestCaughtErrorEvent extends RequestErrorEventBase {\n readonly type: RequestFailureType.INTERNAL | RequestFailureType.ABORT\n\n /**\n * Caught errors will not be retried.\n */\n readonly willRetry: false\n}\n\nexport interface RequestNetworkErrorEvent extends RequestErrorEventBase {\n readonly type: RequestFailureType.NETWORK\n\n /**\n * Information about the current attempt.\n */\n readonly attemptInfo: RequestAttemptInfo\n}\n\nexport interface RequestResponseErrorEvent extends RequestErrorEventBase {\n readonly type: RequestFailureType.RESPONSE\n\n /**\n * The serializable and loggable response.\n */\n readonly responseInfo: ResponseInfo\n\n /**\n * Information about the current attempt.\n */\n readonly attemptInfo: RequestAttemptInfo\n}\n\n/**\n * Serializable response metadata, excluding the body.\n */\nexport interface ResponseInfo {\n /**\n * True if status is in the 200\u2013299 range.\n */\n readonly ok: boolean\n\n /**\n * True if the response resulted from a redirect.\n */\n readonly redirected: boolean\n\n /**\n * HTTP status code (e.g. 200).\n */\n readonly status: number\n\n /**\n * HTTP status text (e.g. \"OK\").\n */\n readonly statusText: string\n\n /**\n * Type of response (e.g. \"basic\", \"cors\").\n */\n readonly type: ResponseType\n\n /**\n * Final resolved URL of the response.\n */\n readonly url: string\n\n /**\n * Size of the response body in bytes, or null if unknown.\n */\n readonly contentLength: number | null\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ErrorOrigin } from '@/error/ErrorOrigin'\nimport { ErrorLevel, ReportableError } from '@/error/ReportableError'\nimport {\n type RequestErrorEvent,\n RequestFailureType,\n} from './RequesterImplEventMap'\nimport { type Json, toJson } from '@/util/serialization/json'\nimport { substitute } from '@/util/string/string'\n\nconst locale = {\n requestFailed: 'request failed, attempt {current} of {total}',\n requestFailedNoRetry: 'request failed, will not retry',\n requestFailedExhaustedRetries: 'request failed, exhausted {total} tries',\n} as const\n\n/**\n * An error reported from a service response.\n */\nexport class RequestError extends ReportableError {\n get [Symbol.toStringTag](): string {\n return 'RequestError'\n }\n\n private static getErrorMessage(info: RequestErrorEvent): string {\n const tries = info.requestInfo.maxRetries + 1\n if (info.willRetry) {\n return substitute(locale.requestFailed, {\n current: info.attemptInfo.currentTry,\n total: tries,\n })\n } else if (\n info.type === RequestFailureType.NETWORK ||\n info.type === RequestFailureType.RESPONSE\n ) {\n const currentTry = info.attemptInfo.currentTry\n return currentTry < tries\n ? locale.requestFailedNoRetry\n : substitute(locale.requestFailedExhaustedRetries, {\n total: tries,\n })\n } else {\n return locale.requestFailedNoRetry\n }\n }\n\n /**\n * 500 errors are external service errors, all other errors are considered internal.\n */\n static getErrorOrigin(info: RequestErrorEvent): string {\n if (info.type === RequestFailureType.RESPONSE) {\n const status = info.responseInfo.status\n if (status >= 500 && status < 600)\n return ErrorOrigin.SERVICE_EXTERNAL\n else return ErrorOrigin.SERVICE_INTERNAL\n } else {\n return ErrorOrigin.SERVICE_INTERNAL\n }\n }\n\n constructor(\n /**\n * When the request failure is a !ok response, this will be set.\n */\n readonly response: Response | null,\n readonly info: RequestErrorEvent\n ) {\n super(\n RequestError.getErrorMessage(info),\n RequestError.getErrorOrigin(info),\n info.type === RequestFailureType.ABORT\n ? ErrorLevel.SILENT\n : ErrorLevel.FATAL\n )\n Object.setPrototypeOf(this, RequestError.prototype)\n }\n\n toJSON(): Json {\n return {\n ...super.toJSON(),\n info: toJson(this.info),\n }\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { RequestResponseErrorEvent } from './RequesterImplEventMap'\nimport { RequestFailureType } from './RequesterImplEventMap'\nimport { RequestError } from './RequestError'\n\n/**\n * Returns true if the given object is a RequestError with type RESPONSE.\n * @param error\n */\nexport function isResponseError(error: any): error is RequestError & {\n readonly info: RequestResponseErrorEvent\n} {\n return (\n error instanceof RequestError &&\n error.info.type === RequestFailureType.RESPONSE\n )\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { LogTarget } from '@/logging/LogTarget'\n\n/**\n * The global path target.\n * Global systems such as logging or uncaught error handling may use this when a pathTarget\n * is needed.\n */\nexport const globalTarget: LogTarget = {\n logPrefix: '<global>',\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/*\n * Network utility methods to support RequesterImpl.\n *\n * @brief\n */\n\nimport { globalTarget } from '@/global/globalTarget'\nimport { logWarn } from '@/logging/Logger'\nimport type { ResponseInfo } from './RequesterImplEventMap'\nimport type { Timestamp } from '@/util/date/date'\nimport type { Maybe } from '@/util/type'\nimport { parseIntSafe } from '@/util/serialization/primitives'\n\nconst retryableStatusCodes = /* @__PURE__ */ new Set([\n 429, // Too many requests\n 503, // Service unavailable\n 504, // Gateway timeout\n])\n\n/**\n * Returns true if the failed request should be retried.\n * @private\n */\nexport function shouldRetry(status: number): boolean {\n return retryableStatusCodes.has(status)\n}\n\n/**\n * The default jitter amount after waiting for a retry-after timestamp.\n */\nexport function retryAfterJitter(): number {\n return 90 * Math.random()\n}\n\nconst NUMBER_REGEXP = /^\\s*\\d+\\s*$/\n\n/**\n * Retry-After = \"Retry-After\" \":\" ( HTTP-date | delta-seconds )\n * https://www.rfc-editor.org/rfc/rfc2616#page-141\n *\n * @param retryAfter The string to parse into a timestamp. If nullish, null is returned.\n * @returns The unix timestamp to wait until before retrying. If the Retry-After header\n * could not be found, or provided a date that cannot be parsed, returns null.\n */\nexport function parseRetryAfter(retryAfter: Maybe<string>): Timestamp | null {\n if (retryAfter == null) return null\n if (NUMBER_REGEXP.test(retryAfter)) {\n return Date.now() + parseInt(retryAfter) * 1000\n }\n if (!retryAfter.toLowerCase().includes('gmt')) retryAfter += ' GMT'\n const timestamp = Date.parse(retryAfter)\n if (Number.isNaN(timestamp)) {\n logWarn(globalTarget, `Invalid retry-after header: ${retryAfter}`)\n return null\n }\n return timestamp\n}\n\n/**\n * Returns serializable response information.\n *\n * @param response The Response object. The body will not be read, this does not need to be cloned.\n */\nexport function getResponseInfo(response: Response): ResponseInfo {\n const contentLength = parseIntSafe(response.headers.get('content-length'))\n return {\n ok: response.ok,\n redirected: response.redirected,\n status: response.status,\n statusText: response.statusText,\n type: response.type,\n url: response.url,\n contentLength,\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Disposable } from '@/core/disposable'\nimport { createDisposer } from '@/core/disposable'\nimport type { ReadonlyEventHost } from '@/event/EventHost'\nimport { logDebug } from '@/logging/Logger'\nimport type {\n RequestAttemptStartEvent,\n RequestCompletedEvent,\n RequesterImplEventMap,\n} from '@/network/RequesterImplEventMap'\nimport { truncate } from '@/util/string/string'\nimport { createLogPrefix, type LogTarget } from '@/logging/LogTarget'\n\n/**\n * The max length to truncate the logged service id.\n * @private\n */\nconst SERVICE_ID_TRUNC = 20\n\n/**\n * Logs all network events.\n *\n * @param requester The event host with request events to observe.\n * @return Returns a disposable handle to remove all added handlers.\n */\nexport function networkLoggingHandler(\n requester: ReadonlyEventHost<RequesterImplEventMap>\n): Disposable & { readonly target: LogTarget } {\n const { dispose, add } = createDisposer()\n const target: LogTarget = {\n logPrefix: createLogPrefix('Network'),\n }\n add(\n requester.on(\n 'requestAttemptStart',\n (event: RequestAttemptStartEvent) => {\n const url = getInputUrl(event.requestInfo.input)\n logDebug(\n target,\n 'requestAttemptStart',\n truncate(\n event.requestInfo.requestOptions.serviceId,\n SERVICE_ID_TRUNC\n ),\n {\n requestInfo: {\n url,\n requestId: event.requestInfo.requestId,\n maxRetries: event.requestInfo.maxRetries,\n requestOptions: event.requestInfo.requestOptions,\n timestamp: event.requestInfo.timestamp,\n },\n attemptInfo: event.attemptInfo,\n }\n )\n }\n )\n )\n add(\n requester.on(\n 'requestAttemptComplete',\n (event: RequestCompletedEvent) => {\n const url = getInputUrl(event.requestInfo.input)\n logDebug(\n target,\n 'requestAttemptComplete',\n truncate(\n event.requestInfo.requestOptions.serviceId,\n SERVICE_ID_TRUNC\n ),\n {\n ok: event.ok,\n timestamp: event.timestamp,\n durationMs:\n event.timestamp - event.requestInfo.timestamp,\n requestInfo: {\n url,\n requestId: event.requestInfo.requestId,\n maxRetries: event.requestInfo.maxRetries,\n requestOptions: event.requestInfo.requestOptions,\n timestamp: event.requestInfo.timestamp,\n },\n }\n )\n }\n )\n )\n return {\n target,\n dispose,\n }\n}\n\n/**\n * Returns the URL string of the request.\n * @param input\n */\nfunction getInputUrl(input: RequestInfo | URL): string {\n let url: string | null\n if (input instanceof URL) {\n url = input.toString()\n } else if (typeof input === 'string') {\n url = input\n } else {\n url = input.url\n }\n return url\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport interface NetworkInformationEventMap {\n readonly change: Event\n}\n\nexport type NetworkInformationEffectiveType = 'slow-2g' | '2g' | '3g' | '4g'\nexport type NetworkInformationType =\n | 'bluetooth'\n | 'cellular'\n | 'ethernet'\n | 'none'\n | 'wifi'\n | 'wimax'\n | 'other'\n | 'unknown'\n\n/**\n * Provides information about the system\u2019s current network connection,\n * such as estimated bandwidth, round-trip time, and connection type.\n * Also exposes events for monitoring changes to the network state.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation\n */\nexport interface NetworkInformation extends EventTarget {\n /**\n * Approximate downlink speed in megabits per second.\n * Rounded to the nearest 25 kbps, based on recent throughput\n * over active connections. May be undefined if no estimate is available.\n */\n readonly downlink: number | undefined\n\n /**\n * A string describing the general quality of the connection\n * (for example, \"4g\", \"3g\"). Determined from both downlink\n * and latency estimates.\n */\n readonly effectiveType: NetworkInformationEffectiveType\n\n /**\n * Estimated round-trip latency of the current connection in milliseconds,\n * rounded to the nearest multiple of 25 ms.\n */\n readonly rtt: number\n\n /**\n * Indicates whether the user has requested reduced data usage\n * in the user agent\u2019s settings.\n */\n readonly saveData: boolean\n\n /**\n * Type of underlying network connection in use\n * (for example, \"wifi\", \"cellular\"). May be omitted if unknown.\n */\n readonly type?: NetworkInformationType\n\n addEventListener<K extends keyof NetworkInformationEventMap>(\n type: K,\n listener: (\n this: NetworkInformation,\n ev: NetworkInformationEventMap[K]\n ) => any,\n options?: boolean | AddEventListenerOptions\n ): void\n\n removeEventListener<K extends keyof NetworkInformationEventMap>(\n type: K,\n listener: (\n this: NetworkInformation,\n ev: NetworkInformationEventMap[K]\n ) => any,\n options?: boolean | EventListenerOptions\n ): void\n}\n\n/**\n * Returns the browser's NetworkInformation interface, if it's defined.\n */\nexport function getNetworkInformation(): NetworkInformation | undefined {\n if (\n typeof window !== 'undefined' &&\n typeof window.navigator !== 'undefined' &&\n 'connection' in window.navigator\n ) {\n return window.navigator.connection as NetworkInformation\n } else {\n return undefined\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Timestamp } from '@/util/date/date'\nimport type { ReadonlyRecord } from '@/util/object/readonlyType'\nimport type { Maybe } from '@/util/type'\n\n/**\n * Statistics for service calls and content transfers.\n * Immutable\n */\nexport interface NetworkMetrics {\n /**\n * Totals for all service metrics, including requests without service ids.\n */\n readonly totals: ServiceMetrics\n\n /**\n * Requests that were made with a service id will have their statistics tracked in this map.\n * key - The serviceId provided to fetch options.\n * value - cumulative metrics for that service.\n */\n readonly serviceMetrics: ReadonlyRecord<string, ServiceMetrics>\n\n /**\n * The estimated client bandwidth. Uses data points from totals, network information downlink changes,\n * and the fallback P90 downlink estimate.\n */\n readonly estimatedDownlinkBandwidth: StatMetrics\n}\n\nexport interface ServiceMetrics {\n /**\n * Metrics for OK responses.\n */\n readonly successTotals: ServiceTotals\n\n /**\n * Metrics for !OK responses.\n */\n readonly failureTotals: ServiceTotals\n\n /**\n * If the last request was !ok and there was a retry-after header, this will be set.\n */\n readonly retryAfter: Timestamp | null\n\n /**\n * Metrics describing the response timing for this service, in seconds.\n */\n readonly responseTime: StatMetrics\n}\n\n/**\n * Basic statistical values describing the distribution of a datapoint.\n */\nexport interface StatMetrics {\n /**\n * The lowest value this stat has recorded.\n */\n readonly min: number\n\n /**\n * The highest value this stat has recorded.\n */\n readonly max: number\n\n /**\n * The simple average.\n */\n readonly average: number\n\n /**\n * The last value recorded.\n */\n readonly latest: number\n\n /**\n * The Exponentially Weighted Moving Average, weighing lower values more than high.\n */\n readonly ewmaLow: number\n\n /**\n * The Exponentially Weighted Moving Average, weighing higher values more than low.\n */\n readonly ewmaHigh: number\n\n /**\n * The Exponentially Weighted Moving Average.\n */\n readonly ewma: number\n\n /**\n * The number of data points these averages represent.\n */\n readonly dataPoints: number\n}\n\nexport interface ServiceTotals {\n /**\n * The number of consecutive results with this result.\n */\n readonly consecutiveCount: number\n\n /**\n * The total count with this result.\n */\n readonly totalCount: number\n}\n\n/**\n * Information about a completed request attempt.\n */\nexport interface NetworkMetricsEntry {\n /**\n * True if the request was successful.\n */\n readonly ok: boolean\n\n /**\n * The id of the service, or null.\n */\n readonly serviceId: string | null\n\n /**\n * If the request was !ok and there was a retry-after header, this will be set.\n */\n readonly retryAfter: Timestamp | null\n\n /**\n * The number of seconds the response took or null for no response.\n */\n readonly responseTime: number | null\n}\n\n/**\n * Information about a completed content transfer.\n */\nexport interface NetworkTransferEntry {\n /**\n * The id of the service, or null.\n */\n readonly serviceId: string | null\n\n /**\n * Timestamp when the request was initiated.\n */\n readonly requestStart: Timestamp\n\n /**\n * Timestamp when the first byte of the response was transferred.\n * This should only be provided if performance resource timing\n * is available.\n */\n readonly responseStart?: Maybe<Timestamp>\n\n /**\n * Timestamp when the response was received.\n */\n readonly responseEnd: Timestamp\n\n /**\n * Timestamp when the full response body was received.\n */\n readonly contentEnd: Timestamp\n\n /**\n * The content-length of the transfer.\n */\n readonly bytes: number\n}\n\nexport const EMPTY_SERVICE_TOTALS: ServiceTotals = {\n consecutiveCount: 0,\n totalCount: 0,\n} as const\n\nexport const EMPTY_STAT_METRICS: StatMetrics = {\n average: 0,\n dataPoints: 0,\n ewma: 0,\n ewmaHigh: 0,\n ewmaLow: 0,\n latest: 0,\n max: 0,\n min: 0,\n} as const\n\nexport const EMPTY_SERVICE_METRICS: ServiceMetrics = {\n failureTotals: EMPTY_SERVICE_TOTALS,\n successTotals: EMPTY_SERVICE_TOTALS,\n retryAfter: null,\n responseTime: EMPTY_STAT_METRICS,\n} as const\n\nexport const EMPTY_NETWORK_METRICS: NetworkMetrics = {\n serviceMetrics: {},\n totals: EMPTY_SERVICE_METRICS,\n estimatedDownlinkBandwidth: EMPTY_STAT_METRICS,\n} as const\n\nexport const EMPTY_NETWORK_METRICS_ENTRY: NetworkMetricsEntry = {\n ok: false,\n retryAfter: null,\n serviceId: null,\n responseTime: null,\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { EventHostImpl } from '@/event/EventHost'\nimport type { NetworkInformation } from '@/network/browser/NetworkInformation'\nimport type {\n NetworkMetricsController,\n NetworkMetricsEventMap,\n} from './NetworkMetricsController'\nimport type {\n NetworkMetrics,\n NetworkMetricsEntry,\n NetworkTransferEntry,\n ServiceMetrics,\n StatMetrics,\n} from './networkMetricsModel'\nimport {\n EMPTY_NETWORK_METRICS,\n EMPTY_SERVICE_METRICS,\n} from './networkMetricsModel'\nimport { lerp } from '@/util/math/math'\nimport { clone } from '@/util/object/clone'\nimport type { ReadonlyDeep } from '@/util/object/readonlyType'\nimport type { Mutable, MutableDeep } from '@/util/object/mutableType'\nimport { getOrSetProp } from '@/util/object/object'\nimport type { Maybe } from '@/util/type'\nimport { logVerbose } from '@/logging/Logger'\nimport type { Timestamp } from '@/util/date/date'\nimport { throttle, type ThrottledCallback } from '@/util/fun/throttle'\nimport { createDisposer } from '@/core/disposable'\nimport { UnionRanges } from '@/util/range/UnionRanges'\nimport type { Range } from '@/util/range/Ranges'\nimport { rangesOf } from '@/util/range/Ranges'\n\n/*\n * Worldwide customer bandwidth for all devices was obtained using:\n *\n * select PERCENTILE_CONT(0.10) within group (order by transfer_speed_bps) as P10\n * from amevents.o_business_event_t3mnths t\n * where t.event_type = 'streamingTerminated'\n * and t.transfer_speed_bps > 0\n *\n * This yielded 276,376 bytes per second, or 2,211,008 bits per second.\n */\n\nexport interface NetworkMetricsControllerImplOptions {\n /**\n * The smoothing factor for EWMA (Exponential Moving Weighted Average), used in\n * bandwidth and response time moving averages.\n *\n * The purpose is to give more weight to recent events than old events, while keeping\n * calculations simple and avoiding the need to keep histories as a rolling average would.\n *\n * This value should be between 0 and 1.\n * The closer to 1 this value is, the more weight new values have.\n * A value of 0.2 for example would mean that after 10 updates, the current average after\n * ten new data points would influence the new average by (1-0.2)^10 \u2248 10% and the latest\n * update would influence the average by 20%.\n */\n readonly ewmaSmoothing: number\n\n /**\n * For biased values such as ewmaHigh/ewmaLow, when the value is in the direction of the\n * bias, this smoothing will be used.\n * This should be a value between 0 and 1 and be more than bias negative smoothing.\n */\n readonly ewmaBiasPositiveSmoothing: number\n\n /**\n * For biased values such as ewmaHigh/ewmaLow, when the value is not in the direction of the\n * bias, this smoothing will be used.\n * This should be a value between 0 and 1 and be less than bias positive smoothing.\n */\n readonly ewmaBiasNegativeSmoothing: number\n\n /**\n * When the user's bandwidth cannot be determined due to lack of NetworkInformation support\n * and no reported downlink history, then this value will be used.\n * This should be in bits per second.\n */\n readonly unknownDownlinkBandwidthEstimate: number\n\n /**\n * Maximum bandwidth in bps we will attribute to any single measurement.\n * Transfers measured above this are clamped; zero-duration transfers are\n * treated as this speed rather than discarded.\n * Default: 30_000_000\n */\n readonly maxMeasuredBandwidthBps: number\n\n /**\n * Time window (in seconds) for amortizing network transfer entries in bandwidth estimation.\n *\n * This window enables accurate bandwidth calculation across multiple concurrent streams\n * (audio, video, etc.) by aggregating transfer data over time.\n *\n * - Too low: Streams won't be properly combined, leading to inaccurate estimates\n * - Too high: Bandwidth estimation becomes slow to adapt to network changes\n *\n * @default 4\n */\n readonly bandwidthEstimationWindow: number\n}\n\n/**\n * Default configuration for NetworkMetricsControllerImpl\n */\nexport const defaultNetworkMetricsControllerImplOptions = {\n ewmaSmoothing: 0.2,\n ewmaBiasNegativeSmoothing: 0.1,\n ewmaBiasPositiveSmoothing: 0.5,\n\n // Using the p10 value for customer bandwidth worldwide, which should be enough bandwidth for\n // 90% of customers. This is high enough for HD content, but not UHD.\n unknownDownlinkBandwidthEstimate: 2_200_000,\n\n maxMeasuredBandwidthBps: 30_000_000,\n bandwidthEstimationWindow: 4,\n} as const satisfies NetworkMetricsControllerImplOptions\n\nexport interface NetworkMetricsControllerImplDependencies {\n readonly networkInformation?: Maybe<NetworkInformation>\n}\n\nexport class NetworkMetricsControllerImpl\n extends EventHostImpl<NetworkMetricsEventMap>\n implements NetworkMetricsController\n{\n private _metrics: MutableDeep<NetworkMetrics> = /* @__PURE__ */ clone(EMPTY_NETWORK_METRICS)\n\n /**\n * A clone of _metrics, copied on read after a change.\n * @private\n */\n private _metricsSnapshot = EMPTY_NETWORK_METRICS\n private hasChanged = false\n\n private readonly options: NetworkMetricsControllerImplOptions\n private readonly transferEntries: NetworkTransferEntry[] = []\n private readonly refreshEstimatedBandwidthThrottled: ThrottledCallback\n\n private readonly disposer = /* @__PURE__ */ createDisposer()\n\n constructor(\n private readonly deps: NetworkMetricsControllerImplDependencies,\n options?: Partial<NetworkMetricsControllerImplOptions>\n ) {\n super()\n const { add } = this.disposer\n this.options = {\n ...defaultNetworkMetricsControllerImplOptions,\n ...options,\n }\n this.onDownloadSpeedChange()\n this.deps.networkInformation?.addEventListener(\n 'change',\n this.onDownloadSpeedChange\n )\n add(() => {\n this.deps.networkInformation?.removeEventListener(\n 'change',\n this.onDownloadSpeedChange\n )\n })\n\n this.refreshEstimatedBandwidthThrottled = add(\n throttle(\n this.refreshEstimatedBandwidth,\n this.options.bandwidthEstimationWindow,\n {\n leading: false,\n trailing: true,\n }\n )\n )\n }\n\n get [Symbol.toStringTag](): string {\n return 'NetworkMetricsControllerImpl'\n }\n\n get metrics(): NetworkMetrics {\n if (this.hasChanged) {\n this.hasChanged = false\n this._metricsSnapshot = clone(this._metrics)\n }\n return this._metricsSnapshot\n }\n\n getServiceMetrics(serviceId: Maybe<string>): ReadonlyDeep<ServiceMetrics> {\n if (serviceId == null) return EMPTY_SERVICE_METRICS\n return this.metrics.serviceMetrics[serviceId] ?? EMPTY_SERVICE_METRICS\n }\n\n addMetricsEntry(entry: NetworkMetricsEntry): void {\n const metrics = this._metrics\n\n if (entry.serviceId) {\n const serviceMetrics = getOrSetProp(\n metrics.serviceMetrics,\n entry.serviceId,\n () => clone(EMPTY_SERVICE_METRICS)\n )\n updateServiceMetrics(serviceMetrics, entry, this.options)\n }\n updateServiceMetrics(metrics.totals, entry, this.options)\n this.notifyMetricsChange()\n }\n\n private readonly refreshEstimatedBandwidth = () => {\n const ranges: Range[] = []\n let bytes = 0\n for (const entry of this.transferEntries) {\n const start = estimateResponseStart(entry)\n const end = entry.contentEnd\n ranges.push([start, end])\n bytes += entry.bytes\n }\n this.transferEntries.length = 0\n\n const union = new UnionRanges([rangesOf(ranges)])\n let time = Number.MIN_VALUE\n for (const [start, end] of union) {\n time += (end - start) / 1000\n }\n\n const bps = Math.min(\n (bytes * 8) / time,\n this.options.maxMeasuredBandwidthBps\n )\n updateStatMetrics(\n this._metrics.estimatedDownlinkBandwidth,\n bps,\n this.options\n )\n logVerbose(\n this,\n 'addDownlinkTransferEntry',\n this._metrics.estimatedDownlinkBandwidth\n )\n this.notifyMetricsChange()\n }\n\n addDownlinkTransferEntry(entry: NetworkTransferEntry): void {\n if (entry.bytes <= 0) return\n this.transferEntries.push(entry)\n this.refreshEstimatedBandwidthThrottled()\n }\n\n private onDownloadSpeedChange = () => {\n const downlink = this.deps.networkInformation?.downlink // mbps\n const estimatedSpeed = downlink\n ? downlink * 1024 * 1024 // bps\n : this.options.unknownDownlinkBandwidthEstimate\n updateStatMetrics(\n this._metrics.estimatedDownlinkBandwidth,\n estimatedSpeed,\n this.options\n )\n this.notifyMetricsChange()\n }\n\n private notifyMetricsChange() {\n this.hasChanged = true\n this.dispatch('metricsChange', {})\n }\n\n dispose() {\n super.dispose()\n this.disposer.dispose()\n }\n}\n\n/**\n * Updates totals and consecutive counts for the service metrics.\n */\nfunction updateServiceMetrics(\n serviceMetrics: MutableDeep<ServiceMetrics>,\n entry: NetworkMetricsEntry,\n options: NetworkMetricsControllerImplOptions\n) {\n const totals = entry.ok\n ? serviceMetrics.successTotals\n : serviceMetrics.failureTotals\n totals.totalCount++\n totals.consecutiveCount++\n if (entry.responseTime) {\n updateStatMetrics(\n serviceMetrics.responseTime,\n entry.responseTime,\n options\n )\n }\n if (entry.ok) serviceMetrics.failureTotals.consecutiveCount = 0\n else serviceMetrics.successTotals.consecutiveCount = 0\n if (entry.retryAfter)\n serviceMetrics.retryAfter = Math.max(\n serviceMetrics.retryAfter ?? 0,\n entry.retryAfter\n )\n}\n\nfunction updateStatMetrics(\n statMetrics: Mutable<StatMetrics>,\n newValue: number,\n options: NetworkMetricsControllerImplOptions\n): void {\n if (!statMetrics.dataPoints) {\n statMetrics.min = newValue\n statMetrics.max = newValue\n statMetrics.average = newValue\n statMetrics.latest = newValue\n statMetrics.ewma = newValue\n statMetrics.ewmaHigh = newValue\n statMetrics.ewmaLow = newValue\n statMetrics.dataPoints = 1\n return\n }\n statMetrics.dataPoints++\n statMetrics.min = Math.min(statMetrics.min, newValue)\n statMetrics.max = Math.max(statMetrics.max, newValue)\n statMetrics.average = lerp(\n statMetrics.average,\n newValue,\n 1 / statMetrics.dataPoints\n )\n statMetrics.latest = newValue\n\n // Weighted averages\n statMetrics.ewma = lerp(statMetrics.ewma, newValue, options.ewmaSmoothing)\n const highAlpha =\n newValue > statMetrics.ewmaHigh\n ? options.ewmaBiasPositiveSmoothing\n : options.ewmaBiasNegativeSmoothing\n statMetrics.ewmaHigh = lerp(statMetrics.ewmaHigh, newValue, highAlpha)\n\n const lowAlpha =\n newValue < statMetrics.ewmaLow\n ? options.ewmaBiasPositiveSmoothing\n : options.ewmaBiasNegativeSmoothing\n statMetrics.ewmaLow = lerp(statMetrics.ewmaLow, newValue, lowAlpha)\n}\n\n/**\n * Estimates the timestamp when the first response byte was received for a network transfer.\n *\n * When the browser's Resource Timing API provides `responseStart`, that value is used directly.\n * Otherwise, a logistic model estimates the latency fraction (the proportion of total\n * request time spent waiting for the first byte) from the transfer size and total duration.\n *\n * The model uses a sigmoid function parameterized on a feature combining `log(bytes)` and\n * `log(totalTime)`. Larger transfers relative to their duration are assumed to have a smaller\n * latency fraction (most time is spent downloading), while small or slow transfers are assumed\n * to be latency-dominated.\n *\n * `responseEnd` represents when the fetch promise settled (approximately when HTTP headers\n * arrived). This provides an upper bound on when the first byte was received \u2014 the actual\n * responseStart is at or before this point.\n *\n * @param entry - A completed network transfer entry with timing information.\n * @returns The estimated timestamp (ms since epoch) when the first response byte arrived.\n */\nexport function estimateResponseStart(entry: NetworkTransferEntry): Timestamp {\n if (entry.responseStart) return entry.responseStart\n // responseEnd is when the fetch settled (headers received), which is an upper bound on\n // when the first byte arrived. Use it as the estimate \u2014 the actual first byte is at or\n // slightly before this point, but never after it.\n if (entry.responseEnd <= entry.requestStart) return entry.requestStart\n const totalTime = entry.contentEnd - entry.requestStart\n if (totalTime === 0) return entry.requestStart\n // The sigmoid estimates what fraction of the total request-to-content time was spent\n // waiting (DNS, TCP, TLS, server processing) vs. receiving bytes.\n const feature = 0.2 * Math.log(entry.bytes) - Math.log(totalTime)\n const latencyFraction = 0.87 / (1 + Math.exp(-(feature + 3.8) / 0.3))\n // Clamp the estimate to not exceed responseEnd (when headers arrived).\n const estimated = entry.requestStart + latencyFraction * totalTime\n return Math.min(estimated, entry.responseEnd)\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { globalRef } from '@/global/globalRegistry'\nimport { getNetworkInformation } from '@/network/browser/NetworkInformation'\nimport type { NetworkMetricsController } from './NetworkMetricsController'\nimport { NetworkMetricsControllerImpl } from './NetworkMetricsControllerImpl'\nimport type { NetworkMetrics } from './networkMetricsModel'\n\n/**\n * A global reference to the network metrics controller.\n */\nexport const networkMetricsController = /* @__PURE__ */ globalRef<NetworkMetricsController>(\n () =>\n new NetworkMetricsControllerImpl({\n networkInformation: getNetworkInformation(),\n })\n)\n\n/**\n * Returns the global network metrics.\n */\nexport function getNetworkMetrics(): NetworkMetrics {\n return networkMetricsController.value.metrics\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ReadonlyAbort } from '@/util/async/Abort'\nimport type { Maybe } from '@/util/type'\n\n/**\n * Init options for the request.\n *\n * This mirrors the fetch init parameter omitting `signal`. For request cancellation, use\n * `abort` on RequestOptions.\n */\nexport type RequestInitOptions = Readonly<Omit<RequestInit, 'signal'>>\n\n/**\n * Encapsulates the parameters needed to make a request.\n */\nexport interface RequestParams {\n readonly input: RequestInfo | Readonly<URL>\n readonly init?: Maybe<Readonly<RequestInitOptions>>\n readonly requestOptions?: Maybe<RequestOptions>\n}\n\n/**\n * An abstraction to fetching resources.\n * Implementations may have retry or throttling behaviors.\n */\nexport interface Requester {\n /**\n * Requests a resource.\n *\n * Note: Unlike `window.fetch`, the returned promise is expected to reject if the\n * response is !ok.\n */\n request(\n input: RequestInfo | Readonly<URL>,\n init?: Maybe<RequestInitOptions>,\n requestOptions?: Maybe<RequestOptions>\n ): Promise<Response>\n}\n\n/**\n * Configuration for a fetch request.\n */\nexport interface RequestOptions {\n /**\n * If supplied, will cancel the request on abort.\n */\n readonly abort?: Maybe<ReadonlyAbort>\n\n /**\n * Determines how error responses are read and reported.\n */\n readonly readErrorBody?: ErrorBodyType\n\n /**\n * The service id is used to obtain a service controller for that service.\n * If nullish, then empty service metrics will be used.\n */\n readonly serviceId?: Maybe<string>\n}\n\nexport enum ErrorBodyType {\n DISABLED,\n TEXT,\n JSON,\n}\n\n/**\n * The signature of `window.fetch`. Provided as a dependency for testing.\n */\nexport type Fetch = (\n input: RequestInfo | URL,\n init?: RequestInit\n) => Promise<Response>\n\n/**\n * Capped exponential backoff timing with jitter.\n *\n * The timing follows the equation:\n * `distribution() * min(interval * pow(exponentBase, failureCount), max)`\n */\nexport interface BackoffOptions {\n /**\n * The maximum time to wait between tries, in seconds, regardless of how many consecutive\n * failures.\n */\n readonly maxTime: number\n\n /**\n * The interval in seconds, multiplied by `pow(exponentBase, failureCount)`.\n */\n readonly interval: number\n\n /**\n * pow(exponentBase, failureCount)\n */\n readonly exponentBase: number\n\n /**\n * The distribution function to randomize request retry timing.\n * This is to prevent all users from making retries at the same time.\n */\n readonly distribution: () => number\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IllegalArgumentError } from '@/error/IllegalArgumentError'\nimport { EventHostImpl } from '@/event/EventHost'\nimport { globalRef } from '@/global/globalRegistry'\nimport type { NetworkMetricsController } from './metrics/NetworkMetricsController'\nimport {\n type BackoffOptions,\n ErrorBodyType,\n type Fetch,\n type Requester,\n type RequestInitOptions,\n type RequestOptions,\n} from './Requester'\nimport type {\n FetchRequestInfo,\n RequestAttemptInfo,\n RequestCaughtErrorEvent,\n RequestCompletedEvent,\n RequesterImplEventMap,\n RequestNetworkErrorEvent,\n RequestResponseErrorEvent,\n RequestSuccessEvent,\n} from './RequesterImplEventMap'\nimport { RequestFailureType } from './RequesterImplEventMap'\nimport { RequestError } from './RequestError'\nimport {\n getResponseInfo,\n parseRetryAfter,\n retryAfterJitter,\n shouldRetry,\n} from './requesterUtil'\nimport { withAbort } from '@/util/async/abortUtils'\nimport { TimeoutController } from '@/util/async/TimeoutController'\nimport { mergeDeep } from '@/util/object/mergeDeep'\nimport { substitute } from '@/util/string/string'\nimport { createShortUid } from '@/util/string/uid'\nimport type { Maybe, PartialDeep } from '@/util/type'\nimport { patchFetch } from '@/patch/network/fetch'\n\n/**\n * Request impl options configuring retry and timeout behavior.\n */\nexport interface RequesterImplOptions {\n /**\n * Retry configuration.\n */\n readonly retryOptions: RetryOptions\n\n /**\n * The timeout (in seconds) before the request is aborted.\n */\n readonly timeout: number\n}\n\nexport interface RetryOptions {\n /**\n * The maximum number of retries for a single request.\n * Default: 1\n * For requests with side effects, this should be set to 0.\n *\n * \"Various studies have collected data which shows that one max retry is sufficient to\n * achieve 99.999% success. The idea is that a truly transient failure should succeed on\n * the first retry. And if the retry fails then it is likely more than a transient failure\n * and additional retries are exhausting resources in the system for no benefit.\"\n */\n readonly retries: number\n\n /**\n * The number of consecutive failures before retries are no longer attempted, only tries.\n */\n readonly retryFailureCutoff: number\n\n /**\n * Retry backoff timing.\n */\n readonly retryBackoff: BackoffOptions\n\n /**\n * First try backoff timing.\n */\n readonly tryBackoff: BackoffOptions\n\n /**\n * If there is a retry-after header, add the returned amount of time (in seconds) to prevent\n * clustered retry behavior.\n */\n readonly retryAfterJitter: () => number\n\n /**\n * Given the network status code, returns true if the fetch should retry.\n */\n readonly shouldRetry: (status: number) => boolean\n}\n\n/**\n * The minimum amount of time to leave for network calls. If the `max try time -\n * timeout` is less than this value, an IllegalArgumentError will be thrown.\n */\nexport const MIN_SERVICE_TIME = 10\n\n/**\n * @private\n */\nconst locale = {\n tryBackoffTooSmall: 'timeout - tryBackoff.maxTime must be at least {value}',\n fetchNotFoundError: 'global fetch not found',\n} as const\n\n/**\n * Distribute requests across the last 50% of the exponential back-off time\n */\nexport function defaultBackoffDistribution(): number {\n return Math.random() * 0.5 + 0.5\n}\n\n/**\n * Calculates the timer delay according to an exponential back off strategy.\n *\n * @param failedCount The number of times the service has consecutively failed.\n * @param options Retry timing options (default values from:\n * `defaultRetryOptions`)\n *\n * @returns The delay to retry a network request in seconds. This will be clamped\n * between 1 and `options.maxRetryTime`.\n */\nexport function getBackoffTime(\n failedCount: number,\n options: BackoffOptions\n): number {\n if (failedCount <= 0) return 0\n return (\n options.distribution() *\n Math.min(\n options.interval * Math.pow(options.exponentBase, failedCount - 1),\n options.maxTime\n )\n )\n}\n\n/**\n * Dependencies for {@link RequesterImpl}\n */\nexport interface RequesterImplDeps {\n readonly fetch: Fetch\n readonly networkMetricsController: NetworkMetricsController\n}\n\nexport const RetryStrategy = {\n get NO_RETRIES(): RetryOptions {\n /**\n * Defaults for first try behavior.\n * Tries should have minimal throttling, enough to be a safety against aberrant client behavior\n * during a network outage.\n */\n const defaultTryBackoff: BackoffOptions = {\n exponentBase: 2,\n interval: 0.5,\n maxTime: 15,\n distribution: defaultBackoffDistribution,\n }\n\n /**\n * Defaults for retry behavior.\n */\n const defaultRetryBackoff: BackoffOptions = {\n exponentBase: 2,\n interval: 3,\n maxTime: 60,\n distribution: defaultBackoffDistribution,\n }\n\n return {\n retries: 0,\n retryBackoff: defaultRetryBackoff,\n retryFailureCutoff: 5,\n tryBackoff: defaultTryBackoff,\n retryAfterJitter,\n shouldRetry,\n }\n },\n\n get ONE_RETRY(): RetryOptions {\n return {\n ...this.NO_RETRIES,\n retries: 1,\n }\n },\n}\n\n/**\n * The return type of doRequest, contains the completion info and optional response.\n */\ntype RequestResult =\n | {\n readonly info: RequestSuccessEvent | RequestResponseErrorEvent\n readonly response: Response\n }\n | {\n readonly info: RequestCaughtErrorEvent | RequestNetworkErrorEvent\n readonly response: null\n }\n\n/**\n * A quality of service wrapper to `global.fetch`.\n * Handles retries, network status, and emits events that may be used in reporting or metrics.\n */\nexport class RequesterImpl\n extends EventHostImpl<RequesterImplEventMap>\n implements Requester\n{\n get [Symbol.toStringTag](): string {\n return 'RequesterImpl'\n }\n\n /**\n * Default values for fetch options.\n */\n private _options: RequesterImplOptions = {\n timeout: 60,\n retryOptions: RetryStrategy.NO_RETRIES,\n }\n\n constructor(protected readonly deps: RequesterImplDeps) {\n super()\n }\n\n /**\n * The current base options.\n * {@link request} may override these values.\n */\n get options(): RequesterImplOptions {\n return this._options\n }\n\n /**\n * Applies the given partial configuration.\n *\n * @param newOptions\n */\n configure(newOptions: PartialDeep<RequesterImplOptions>) {\n this._options = mergeDeep([this._options, newOptions])\n }\n\n async request(\n input: RequestInfo | Readonly<URL>,\n init?: Maybe<RequestInitOptions>,\n requestOptions?: Maybe<RequestOptions>\n ): Promise<Response> {\n requestOptions = requestOptions ?? {}\n const options = this._options\n const retryOptions = options.retryOptions\n if (\n options.timeout - retryOptions.tryBackoff.maxTime <\n MIN_SERVICE_TIME\n ) {\n throw new IllegalArgumentError(\n substitute(locale.tryBackoffTooSmall, {\n value: MIN_SERVICE_TIME,\n })\n )\n }\n const timeoutController = new TimeoutController(\n options.timeout,\n requestOptions.abort\n )\n // Replace the request init to use the timeout controller's signal.\n const finalInit: RequestInit = {\n ...init,\n signal: timeoutController.nativeSignal,\n }\n\n const requestInfo: FetchRequestInfo = {\n requestId: createShortUid(),\n init: finalInit,\n input,\n maxRetries: retryOptions.retries,\n timestamp: Date.now(),\n requestOptions: {\n serviceId: requestOptions.serviceId ?? null,\n readErrorBody:\n requestOptions.readErrorBody ?? ErrorBodyType.DISABLED,\n },\n }\n this.dispatch('request', { requestInfo })\n\n let lastResult: RequestResult | null = null\n let currentTry = 0\n do {\n ++currentTry\n const attemptInfo: RequestAttemptInfo = {\n currentTry,\n timestamp: Date.now(),\n }\n this.dispatch('requestAttemptStart', {\n requestInfo,\n attemptInfo,\n })\n lastResult = await this.doRequest(\n requestInfo,\n requestOptions,\n attemptInfo,\n timeoutController\n ).catch((reason) => {\n const completeInfo: RequestCaughtErrorEvent = {\n ok: false,\n type: requestOptions.abort?.aborted()\n ? RequestFailureType.ABORT\n : RequestFailureType.INTERNAL,\n requestInfo,\n reason,\n willRetry: false,\n timestamp: Date.now(),\n retryAfter: null,\n }\n return { info: completeInfo, response: null } as const\n })\n timeoutController.dispose()\n this.reportMetricsEntry(lastResult.info)\n this.dispatch('requestAttemptComplete', lastResult.info)\n } while (!lastResult.info.ok && lastResult.info.willRetry)\n this.dispatch('requestComplete', lastResult.info)\n if (lastResult.info.ok) return lastResult.response!\n else throw new RequestError(lastResult.response, lastResult.info)\n }\n\n /**\n * Executes a single fetch.\n * If the request is aborted via `requestInfo.init.signal` the promise will be rejected with\n * the abort reason.\n *\n * @throws RequestError\n * @private\n */\n private async doRequest(\n requestInfo: FetchRequestInfo,\n requestOptions: RequestOptions,\n attemptInfo: RequestAttemptInfo,\n timeoutController: TimeoutController\n ): Promise<RequestResult> {\n const deps = this.deps\n const retryOptions = this._options.retryOptions\n\n const firstTry = attemptInfo.currentTry === 1\n const serviceId = requestInfo.requestOptions.serviceId\n const serviceMetrics =\n deps.networkMetricsController.getServiceMetrics(serviceId)\n const failedCount = serviceMetrics.failureTotals.consecutiveCount\n const lastTry =\n attemptInfo.currentTry === retryOptions.retries + 1 ||\n failedCount + 1 >= retryOptions.retryFailureCutoff\n if (serviceMetrics.retryAfter) {\n await timeoutController.sleep(\n // OK to give sleep negative values.\n // Immediately rejects if sleep duration is beyond the timeout.\n (serviceMetrics.retryAfter - Date.now()) / 1000 +\n retryOptions.retryAfterJitter()\n )\n } else {\n const backoffTime = getBackoffTime(\n failedCount,\n firstTry ? retryOptions.tryBackoff : retryOptions.retryBackoff\n )\n await timeoutController.sleep(backoffTime)\n }\n\n // Modern browsers support request cancellation by providing an abortSignal.\n // Whether the browsers support request cancellation or not, we want to stop\n // waiting for the fetch when the signal is aborted.\n let failureReason: any = null\n const response: Response | null = await withAbort(\n deps.fetch(requestInfo.input, requestInfo.init).catch((reason) => {\n failureReason = reason\n return null\n }),\n requestOptions.abort\n )\n if (response?.ok)\n return {\n info: {\n ok: true,\n requestInfo,\n attemptInfo,\n responseInfo: getResponseInfo(response),\n timestamp: Date.now(),\n },\n response,\n }\n\n const errorCommon = {\n ok: false,\n requestInfo,\n attemptInfo,\n timestamp: Date.now(),\n } as const\n if (response) {\n const shouldRetry = retryOptions.shouldRetry(response.status)\n let reason: any = null\n try {\n switch (requestInfo.requestOptions.readErrorBody) {\n case ErrorBodyType.TEXT:\n reason = await response.text()\n break\n case ErrorBodyType.JSON:\n reason = await response.json()\n break\n }\n } catch (e: any) {\n reason = `Failed to read error body: ${e}`\n }\n return {\n info: {\n type: RequestFailureType.RESPONSE,\n ...errorCommon,\n reason,\n responseInfo: getResponseInfo(response),\n retryAfter: parseRetryAfter(\n response.headers.get('retry-after')\n ),\n willRetry: shouldRetry && !lastTry,\n },\n response,\n }\n } else {\n if (\n failureReason?.name === 'AbortError' ||\n // Firefox:\n (failureReason &&\n failureReason === requestOptions.abort?.reason)\n ) {\n return {\n info: {\n type: RequestFailureType.ABORT,\n ...errorCommon,\n reason: requestOptions.abort?.reason,\n retryAfter: null,\n willRetry: false,\n },\n response: null,\n }\n } else {\n return {\n info: {\n type: RequestFailureType.NETWORK,\n ...errorCommon,\n reason: failureReason,\n retryAfter: null,\n willRetry: !lastTry,\n },\n response: null,\n }\n }\n }\n }\n\n private reportMetricsEntry(event: RequestCompletedEvent) {\n // Do not add a metrics entry for aborts or non-response errors.\n if (!event.ok && event.type !== RequestFailureType.RESPONSE) return\n this.deps.networkMetricsController.addMetricsEntry({\n ok: event.ok,\n serviceId: event.requestInfo.requestOptions.serviceId,\n retryAfter: event.ok ? null : event.retryAfter,\n responseTime: event.ok\n ? (event.timestamp - event.requestInfo.timestamp) / 1000\n : null,\n })\n }\n}\n\nexport const nativeFetchRef = /* @__PURE__ */ globalRef<Fetch>(() => {\n if (typeof global.fetch !== 'function')\n return () => {\n throw new Error(locale.fetchNotFoundError)\n }\n const fetch = global.fetch.bind(global)\n return patchFetch(fetch)\n})\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { networkLoggingHandler } from './logging/networkLoggingHandler'\nimport { networkMetricsController } from './metrics/networkMetricsGlobal'\nimport type { Requester } from './Requester'\nimport type { RequesterImplDeps, RequesterImplOptions } from './RequesterImpl'\nimport { nativeFetchRef, RequesterImpl } from './RequesterImpl'\nimport { merge } from '@/util/object/merge'\nimport type { Maybe, PartialDeep } from '@/util/type'\n\n/**\n * Creates a default Requester implementation with optional configuration or dependency overrides.\n * The new Requester is watched for global logging and network metrics.\n *\n * @param options\n * @param deps\n */\nexport function createRequester(\n options?: Maybe<PartialDeep<RequesterImplOptions>>,\n deps?: Partial<RequesterImplDeps>\n): Requester {\n const defaultDeps = {\n networkMetricsController: networkMetricsController.value,\n fetch: nativeFetchRef.value,\n } as const satisfies RequesterImplDeps\n const finalDeps = merge(defaultDeps, deps)\n const requester = new RequesterImpl(finalDeps)\n if (options) requester.configure(options)\n // The logging handler does not need to be disposed, when the requester is disposed\n // the handlers will no longer be referenced.\n networkLoggingHandler(requester)\n return requester\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { globalRef } from '@/global/globalRegistry'\nimport type { Maybe } from '@/util/type'\nimport { createRequester } from './createRequester'\nimport type { Requester, RequestInitOptions, RequestOptions } from './Requester'\nimport { RetryStrategy } from './RequesterImpl'\n\n/**\n * @private\n */\nexport const requesterWithRetryRef = /* @__PURE__ */ globalRef<Requester>(() => {\n return createRequester({\n retryOptions: RetryStrategy.ONE_RETRY,\n })\n})\n\n/**\n * Requests a resource.\n *\n * Note: Unlike `window.fetch`, the returned promise is expected to reject if the\n * response is !ok.\n *\n * @param input A url string, URL Object, or RequestInfo object.\n * @param init A RequestInit object.\n * @param options Additional configuration such as an abort reference or service id for metrics\n * and retries.\n */\nexport function requestWithRetry(\n input: RequestInfo | URL,\n init?: Maybe<RequestInitOptions>,\n options?: Partial<RequestOptions>\n): Promise<Response> {\n return requesterWithRetryRef.value.request(input, init, options)\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Disposable } from '@/core/disposable'\nimport type { ReadonlyEventHost } from './EventHost'\nimport type { EventHandler, SignalOptions } from './Signal'\nimport type { Unsubscribe } from '@/core/Unsubscribe'\nimport { remove } from '@/util/collection/array'\nimport type { ExtractValues } from '@/util/type'\nimport { covariant } from '@/util/type'\n\n/**\n * Picks the keys from T that satisfy: `[keyof T extends string]: Event`\n */\nexport type DomEventMap<T> = ExtractValues<Pick<T, keyof T & string>, Event>\n\nexport interface DomReadonlyEventHost<EventMap> extends ReadonlyEventHost<\n DomEventMap<EventMap>\n> {\n /**\n * Adds an event handler for the given typed event.\n *\n * @param type A case-sensitive string representing the event type to listen for.\n * @param handler A callback to invoke when the event with the given type is dispatched.\n * @param options An options object specifies characteristics about the event listener.\n * @return Returns a method, when invoked, removes the handler.\n */\n on<K extends keyof DomEventMap<EventMap>>(\n type: K,\n handler: EventHandler<DomEventMap<EventMap>[K]>,\n options?: DomEventListenerOptions\n ): Unsubscribe\n}\n\n/**\n * Event listener options for DOM events.\n *\n * Note: signal not supported, use abort utilities.\n */\nexport interface DomEventListenerOptions\n extends SignalOptions, Omit<AddEventListenerOptions, 'signal'> {}\n\n/**\n * Wraps a js `EventTarget` with a {@link ReadonlyEventHost} interface.\n */\nexport class DomEventHost<EventMap>\n implements DomReadonlyEventHost<EventMap>, Disposable\n{\n private activeSubs: Unsubscribe[] = []\n private listenerCounts: {\n [P in keyof EventMap]?: number\n } = {}\n\n constructor(protected readonly eventTarget: EventTarget) {}\n\n hasAnyListeners(): boolean {\n return this.activeSubs.length > 0\n }\n\n hasListeners(type: keyof DomEventMap<EventMap>): boolean {\n return (this.listenerCounts[type] ?? 0) > 0\n }\n\n on<K extends keyof DomEventMap<EventMap>>(\n type: K,\n handler: EventHandler<DomEventMap<EventMap>[K]>,\n options?: DomEventListenerOptions\n ): Unsubscribe {\n this.listenerCounts[type] = (this.listenerCounts[type] ?? 0) + 1\n // If options.once is true, wrap the callback in order to decrement listener counts and\n // remove the tracked subscription. Otherwise, the callback can be used directly.\n const eventListener: EventListener = options?.once\n ? (event: Event) => {\n handler(event as DomEventMap<EventMap>[K])\n unsub()\n }\n : (handler as EventListener)\n const unsub = () => {\n remove(this.activeSubs, unsub)\n this.listenerCounts[type]!--\n this.eventTarget.removeEventListener(type, eventListener, options)\n }\n this.eventTarget.addEventListener(type, eventListener, options)\n this.activeSubs.push(unsub)\n return unsub\n }\n\n /**\n * Disposal of a DomEventHost removes all listeners.\n */\n dispose() {\n for (let i = this.activeSubs.length - 1; i >= 0; i--) {\n // unsubscribing will remove the element from activeSubs, iterating in reverse\n // keeps the cursor correct.\n this.activeSubs[i]()\n }\n }\n\n __eventMapType = /* @__PURE__ */ covariant<EventMap>()\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ReadonlyEventHost } from './EventHost'\nimport type { ReadonlyAbort } from '@/util/async/Abort'\nimport { promise } from '@/util/async/promise'\nimport { withTimeout } from '@/util/async/timeout'\nimport type { Maybe } from '@/util/type'\n\nexport interface NextEventAsPromiseOptions<EventMap, K extends keyof EventMap> {\n /**\n * (Optional) If provided, will only resolve if the event passes this predicate.\n */\n filter?: ((event: EventMap[K]) => boolean) | undefined | null\n\n /**\n * (Optional) If provided, will reject the promise if the signal is aborted.\n */\n abort?: Maybe<ReadonlyAbort>\n\n /**\n * If provided, the promise will reject after this duration, in seconds, if not resolved.\n */\n timeout?: number\n\n /**\n * The timeout message. If not provided will use `DEFAULT_TIMEOUT_MESSAGE`.\n */\n timeoutMessage?: string\n}\n\n/**\n * Promisifies the next event.\n *\n * @param host The event host to observe.\n * @param type The name of the event.\n * @param options Optional configuration, to provide abort\n */\nexport function nextEventAsPromise<EventMap, K extends keyof EventMap>(\n host: ReadonlyEventHost<EventMap>,\n type: K,\n options?: Maybe<NextEventAsPromiseOptions<EventMap, K>>\n): Promise<EventMap[K]> {\n return withTimeout(\n promise((resolve) => {\n return host.on(type, (event: EventMap[K]) => {\n if (!options?.filter || options.filter(event)) {\n resolve(event)\n }\n })\n }, options?.abort),\n options?.timeout,\n options?.timeoutMessage ??\n `Event '${String(type)}' was not received within {time}s`\n )\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { DomEventHost } from '@/event/DomEventHost'\nimport type { ReadonlyEventHost } from '@/event/EventHost'\nimport { nextEventAsPromise } from '@/event/nextEventAsPromise'\nimport { globalRef } from '@/global/globalRegistry'\nimport type { ReadonlyAbort } from '@/util/async/Abort'\nimport type { Maybe } from '@/util/type'\n\nexport type DomEventTarget = EventTarget\n\nexport interface NetworkStateEventMap {\n readonly offline: Event\n readonly online: Event\n}\n\n/**\n * Online status.\n */\nexport interface NetworkState extends ReadonlyEventHost<NetworkStateEventMap> {\n /**\n * Returns the online status of the browser.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Navigator/onLine\n */\n readonly onLine: boolean\n\n /**\n * Returns a promise that resolves when the network state is next online.\n * Rejects immediately if the given `abortSignal` is in an aborted state.\n * Resolves immediately if the navigator is currently online.\n * @param abort If provided, rejects the returned promise when aborted.\n */\n nextOnLine(abort?: Maybe<ReadonlyAbort>): Promise<void>\n}\n\nexport interface NetworkStateImplDeps {\n readonly eventTarget: DomEventTarget\n readonly navigator: { readonly onLine: boolean }\n}\n\nexport class NetworkStateImpl\n extends DomEventHost<NetworkStateEventMap>\n implements NetworkState\n{\n static createDefaultDeps(): NetworkStateImplDeps {\n if (typeof window === 'undefined') {\n return {\n eventTarget: {\n addEventListener() {},\n removeEventListener() {},\n dispatchEvent() {\n return true\n },\n },\n navigator: {\n onLine: true,\n },\n }\n }\n return {\n eventTarget: window,\n navigator: window.navigator,\n }\n }\n\n constructor(\n protected readonly deps: NetworkStateImplDeps = NetworkStateImpl.createDefaultDeps()\n ) {\n super(deps.eventTarget)\n }\n\n get onLine(): boolean {\n return this.deps.navigator.onLine\n }\n\n nextOnLine(abort?: Maybe<ReadonlyAbort>): Promise<void> {\n if (abort?.aborted()) return Promise.reject(abort.reason!)\n if (this.onLine) return Promise.resolve()\n return nextEventAsPromise<NetworkStateEventMap, 'online'>(\n this,\n 'online',\n { abort }\n ).then(() => void 0)\n }\n}\n\n/**\n * A global reference to the network state.\n */\nexport const networkState = /* @__PURE__ */ globalRef<NetworkState>(\n () => new NetworkStateImpl()\n)\n\nexport function getNetworkState(): NetworkState {\n return networkState.value\n}\n\nexport function onLine(): boolean {\n return networkState.value.onLine\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { logDebug } from '@/logging/Logger'\nimport type { LogTarget } from '@/logging/LogTarget'\n\n/**\n * Creates a timer that logs elapsed time when called.\n *\n * @param target - The log target\n * @param message - Message to log with the elapsed time\n * @returns Function that logs the elapsed time since creation\n */\nexport function logTimer(target: LogTarget, message: string): () => void {\n const start = Date.now()\n return () => {\n logDebug(target, message, `${Date.now() - start}ms`)\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Disposable } from '@/core/disposable'\nimport type { ReadonlyEventHost } from '@/event/EventHost'\nimport type { Unsubscribe } from '@/core/Unsubscribe'\nimport type { LogEventMap } from './Logger'\nimport { LogLevel } from './Logger'\n\nexport interface ConsoleLike {\n log(message?: any, ...optionalParams: any[]): void\n debug(message?: any, ...optionalParams: any[]): void\n warn(message?: any, ...optionalParams: any[]): void\n error(message?: any, ...optionalParams: any[]): void\n}\n\n/**\n * A log target that logs to a console.\n */\nexport interface ConsoleLogHandler {\n logLevel: LogLevel\n}\n\n/**\n * A {@link ConsoleLogHandler} implementation.\n */\nexport class ConsoleLogHandlerImpl implements ConsoleLogHandler, Disposable {\n private readonly logSub: Unsubscribe\n\n constructor(\n host: ReadonlyEventHost<LogEventMap>,\n public logLevel: LogLevel = LogLevel.DEBUG,\n consoleLike: ConsoleLike = console\n ) {\n this.logSub = host.on('log', (event) => {\n if (event.level < this.logLevel) return\n let consoleFun: (message?: any, ...optionalParams: any[]) => void\n switch (event.level) {\n case LogLevel.INFO:\n consoleFun = consoleLike['log']\n break\n case LogLevel.WARN:\n consoleFun = consoleLike['warn']\n break\n case LogLevel.ERROR:\n consoleFun = consoleLike['error']\n break\n case LogLevel.DEBUG:\n case LogLevel.VERBOSE:\n default:\n consoleFun = consoleLike['debug']\n break\n }\n const now = new Date()\n const minutes = String(now.getMinutes()).padStart(2, '0')\n const seconds = String(now.getSeconds()).padStart(2, '0')\n consoleFun.call(\n consoleLike,\n `[${minutes}:${seconds} ${event.target.logPrefix}]`,\n ...event.messages\n )\n })\n }\n\n dispose(): void {\n this.logSub()\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Disposable } from '@/core/disposable'\nimport type { ReadonlyEventHost } from '@/event/EventHost'\nimport type { Unsubscribe } from '@/core/Unsubscribe'\nimport type { LogEventMap } from './Logger'\nimport { LogLevel } from './Logger'\nimport type { ReadonlyDate } from '@/util/object/readonlyType'\n\n/**\n * The default maximum history size for the history log handler.\n */\nexport const DEFAULT_MAX_HISTORY = 100\n\nexport interface HistoryLogItem {\n readonly timestamp: ReadonlyDate\n readonly messages: readonly any[]\n readonly level: LogLevel\n\n /**\n * The LogTarget's logPrefix.\n */\n readonly logPrefix: string\n}\n\n/**\n * Logs to a rolling list.\n */\nexport interface HistoryLogHandler {\n /**\n * This level and higher will be logged to the history.\n * Default is {@link LogLevel.DEBUG}\n */\n logLevel: LogLevel\n\n /**\n * The maximum number of logs to keep.\n */\n maxHistorySize: number\n\n /**\n * The log history, kept up to {@link maxHistorySize}\n */\n get history(): readonly HistoryLogItem[]\n\n /**\n * Clears the log history.\n */\n clear(): void\n}\n\n/**\n * A basic HistoryLogHandler implementation.\n */\nexport class HistoryLogHandlerImpl implements HistoryLogHandler, Disposable {\n private readonly _history: HistoryLogItem[] = []\n private readonly logSub: Unsubscribe\n private _maxHistorySize: number = DEFAULT_MAX_HISTORY\n\n constructor(\n host: ReadonlyEventHost<LogEventMap>,\n public logLevel: LogLevel = LogLevel.DEBUG\n ) {\n this.logSub = host.on('log', (event) => {\n if (event.level < this.logLevel) return\n this._history.push({\n level: event.level,\n messages: event.messages,\n timestamp: new Date(),\n logPrefix: event.target.logPrefix,\n })\n if (this._history.length > this.maxHistorySize) {\n this._history.shift()\n }\n })\n }\n\n get maxHistorySize(): number {\n return this._maxHistorySize\n }\n\n set maxHistorySize(value: number) {\n value = Math.max(0, value)\n while (value < this._history.length) {\n this._history.shift()\n }\n this._maxHistorySize = value\n }\n\n get history(): readonly HistoryLogItem[] {\n return this._history\n }\n\n clear() {\n this._history.length = 0\n }\n\n dispose(): void {\n this.clear()\n this.logSub()\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { globalRef } from '@/global/globalRegistry'\nimport type { ConsoleLogHandler } from './ConsoleLogHandler'\nimport { ConsoleLogHandlerImpl } from './ConsoleLogHandler'\nimport type { HistoryLogHandler } from './HistoryLogHandler'\nimport { HistoryLogHandlerImpl } from './HistoryLogHandler'\nimport { loggerRef } from './Logger'\nimport { getLogLevelFromSearch } from './getLogLevelFromSearch'\n\nexport const historyLogHandler = /* @__PURE__ */ globalRef(\n (): HistoryLogHandler | undefined => {\n return new HistoryLogHandlerImpl(loggerRef.value)\n }\n)\n\nexport const consoleLogHandler = /* @__PURE__ */ globalRef(\n (): ConsoleLogHandler | undefined => {\n return new ConsoleLogHandlerImpl(\n loggerRef.value,\n getLogLevelFromSearch()\n )\n }\n)\n\n/**\n * Initializes vinyl logging.\n */\nexport function initializeLogging() {\n historyLogHandler.initialize()\n consoleLogHandler.initialize()\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createDisposer } from '@/core/disposable'\nimport type { EventDispatcher, ReadonlyEventHost } from './EventHost'\nimport type { Unsubscribe } from '@/core/Unsubscribe'\n\n/**\n * Listens to an event host for a list of events, re-dispatching those events on this target\n * dispatcher.\n * Useful for event delegation.\n *\n * @param dispatcher The dispatcher on which to re-dispatch events.\n * @param eventHost The readonly event host that emits the events to be re-dispatched.\n * @param eventTypes The event types from eventHost to delegate to the dispatcher. These are the\n * keys in the event map that should be delegated.\n * @return Returns a method that when invoked, will unsubscribe from all delegated events.\n */\nexport function redispatchEvents<EventMap, K extends keyof EventMap>(\n dispatcher: EventDispatcher<Pick<EventMap, K>>,\n eventHost: ReadonlyEventHost<EventMap>,\n eventTypes: readonly K[]\n): Unsubscribe {\n const { dispose, add } = createDisposer()\n for (const type of eventTypes) {\n add(eventHost.on(type, (e: any) => dispatcher.dispatch(type, e)))\n }\n return dispose\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createDisposer } from '@/core/disposable'\nimport type { Unsubscribe } from '@/core/Unsubscribe'\nimport type { ReadonlyEventHost } from './EventHost'\nimport type { SignalOptions } from './Signal'\n\n/**\n * Adds a single handler to all given event types on an event host.\n *\n * @param host The event host.\n * @param types An array of event types.\n * @param handler A handler to be called if any of the given event types are dispatched.\n * @param options If once is true, the first event called will remove the handler.\n */\nexport function onAny<EventMap, K extends keyof EventMap>(\n host: ReadonlyEventHost<EventMap>,\n types: readonly K[],\n handler: <U extends K>(event: EventMap[U], type: U) => void,\n options?: SignalOptions\n): Unsubscribe {\n const { dispose, add } = createDisposer()\n for (const type of types) {\n add(\n host.on(type, (e) => {\n if (options?.once) dispose()\n handler(e, type)\n })\n )\n }\n return dispose\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ReportableError } from './ReportableError'\n\n/**\n * An error indicating that a line of code was hit that should not be possible.\n */\nexport class UnreachableCodeError extends ReportableError {\n get [Symbol.toStringTag](): string {\n return 'UnreachableCodeError'\n }\n\n constructor() {\n super('Code location expected to be unreachable')\n Object.setPrototypeOf(this, UnreachableCodeError.prototype)\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ReportableError } from './ReportableError'\n\n/**\n * An error indicating a stack overflow has occurred.\n */\nexport class StackOverflowError extends ReportableError {\n get [Symbol.toStringTag](): string {\n return 'StackOverflowError'\n }\n\n constructor(message: string) {\n super(message)\n Object.setPrototypeOf(this, StackOverflowError.prototype)\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ErrorOrigin } from './ErrorOrigin'\nimport { ReportableError } from './ReportableError'\nimport { type Json, toJson } from '@/util/serialization/json'\n\nexport const SERVICE_RESPONSE_ERROR_MESSAGE = 'Unexpected service response'\n\nexport class ServiceResponseError extends ReportableError {\n constructor(readonly reason: any) {\n super(\n reason?.message ?? SERVICE_RESPONSE_ERROR_MESSAGE,\n ErrorOrigin.SERVICE_EXTERNAL\n )\n Object.setPrototypeOf(this, ServiceResponseError.prototype)\n }\n\n get [Symbol.toStringTag](): string {\n return 'ServiceResponseError'\n }\n\n toJSON(): Json {\n return {\n ...super.toJSON(),\n reason: toJson(this.reason),\n }\n }\n}\n\n/**\n * When used in a catch clause of a promise, wraps the reason in a {@link ServiceResponseError}.\n */\nexport function throwServiceResponse(reason: any): never {\n throw new ServiceResponseError(reason)\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport interface Clearable {\n /**\n * Clears this object.\n */\n clear(): void\n}\n\n/**\n * Returns true if the value implements Clearable.\n *\n * @param value\n */\nexport function isClearable(value: any): value is Clearable {\n return (\n value != null &&\n 'clear' in value &&\n typeof value.clear === 'function' &&\n value.clear.length === 0\n )\n}\n\n/**\n * If the given object implements Clearable, executes clear.\n *\n * @param value\n */\nexport function maybeClear(value: any): void {\n if (isClearable(value)) value.clear()\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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",
|
|
6
|
+
"names": ["schemeEnd", "ErrorLevel", "map", "min", "max", "locale", "location", "value", "remove", "signal", "promise", "locale", "last", "merge", "sourceA", "sourceB", "prop", "merge", "timeout", "key", "value", "timeout", "location", "locale", "promise", "promise", "timeout", "newInitializer", "LogLevel", "_a", "target", "patch", "versionRegex", "map", "name", "Os", "Browser", "DeviceVendor", "DeviceType", "RequestFailureType", "locale", "union", "_a", "ErrorBodyType", "locale", "_a", "shouldRetry"]
|
|
7
|
+
}
|