@amazon/vinyl-hls-parser 1.1.1 → 1.2.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.
Files changed (44) hide show
  1. package/dist/hlsTestAssets/types/current/tsconfig.tsbuildinfo +1 -1
  2. package/dist/index.cjs +8 -1
  3. package/dist/index.cjs.map +2 -2
  4. package/dist/index.js +9 -2
  5. package/dist/index.js.map +3 -3
  6. package/dist/test/benchmark.es5.js +56 -248
  7. package/dist/test/benchmark.js +164 -972
  8. package/dist/test/benchmark.js.map +4 -4
  9. package/dist/types/current/parse/parseMainPlaylist.d.ts.map +1 -1
  10. package/dist/types/current/parse/parseMainPlaylist.js +16 -2
  11. package/dist/types/current/parse/parseMediaPlaylist.d.ts.map +1 -1
  12. package/dist/types/current/tsconfig.tsbuildinfo +1 -1
  13. package/package.json +24 -13
  14. package/dist/test/benchmark.css +0 -71
  15. package/dist/test/benchmark.html +0 -67
  16. package/dist/test/favicon.png +0 -0
  17. package/dist/test/index.html +0 -61
  18. package/dist/test/integ.es5.js +0 -410
  19. package/dist/test/integ.js +0 -2127
  20. package/dist/test/integ.js.map +0 -7
  21. package/dist/test/jasmine.css +0 -304
  22. package/dist/test/jasmineHtml.es5.js +0 -670
  23. package/dist/test/jasmineHtml.js +0 -10851
  24. package/dist/test/jasmineHtml.js.map +0 -7
  25. package/dist/test/styles.css +0 -42
  26. package/dist/unit/types/current/index.d.ts +0 -7
  27. package/dist/unit/types/current/index.d.ts.map +0 -1
  28. package/dist/unit/types/current/index.js +0 -6
  29. package/dist/unit/types/current/parse/parseAttributes.test.d.ts +0 -2
  30. package/dist/unit/types/current/parse/parseAttributes.test.d.ts.map +0 -1
  31. package/dist/unit/types/current/parse/parseAttributes.test.js +0 -70
  32. package/dist/unit/types/current/parse/parseMainPlaylist.test.d.ts +0 -2
  33. package/dist/unit/types/current/parse/parseMainPlaylist.test.d.ts.map +0 -1
  34. package/dist/unit/types/current/parse/parseMainPlaylist.test.js +0 -194
  35. package/dist/unit/types/current/parse/parseMediaPlaylist.test.d.ts +0 -2
  36. package/dist/unit/types/current/parse/parseMediaPlaylist.test.d.ts.map +0 -1
  37. package/dist/unit/types/current/parse/parseMediaPlaylist.test.js +0 -401
  38. package/dist/unit/types/current/parse/parseUtil.test.d.ts +0 -2
  39. package/dist/unit/types/current/parse/parseUtil.test.d.ts.map +0 -1
  40. package/dist/unit/types/current/parse/parseUtil.test.js +0 -67
  41. package/dist/unit/types/current/setup.d.ts +0 -2
  42. package/dist/unit/types/current/setup.d.ts.map +0 -1
  43. package/dist/unit/types/current/setup.js +0 -19
  44. package/dist/unit/types/current/tsconfig.tsbuildinfo +0 -1
@@ -1 +1 @@
1
- {"fileNames":["../../../../../../node_modules/typescript/lib/lib.es5.d.ts","../../../../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../../../../node_modules/typescript/lib/lib.dom.d.ts","../../../../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../../test/hlsTestAssets/hls_mainPlaylist.ts","../../../../test/hlsTestAssets/hls_mediaPlaylist.ts","../../../../test/hlsTestAssets/hls_mediaPlaylistWithByteRanges.ts","../../../../test/hlsTestAssets/index.ts","../../../../../../node_modules/@types/node/compatibility/disposable.d.ts","../../../../../../node_modules/@types/node/compatibility/indexable.d.ts","../../../../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../../../../node_modules/@types/node/compatibility/index.d.ts","../../../../../../node_modules/@types/node/globals.typedarray.d.ts","../../../../../../node_modules/@types/node/buffer.buffer.d.ts","../../../../../../node_modules/@types/node/globals.d.ts","../../../../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../../../../node_modules/@types/node/web-globals/events.d.ts","../../../../../../node_modules/buffer/index.d.ts","../../../../../../node_modules/undici-types/header.d.ts","../../../../../../node_modules/undici-types/readable.d.ts","../../../../../../node_modules/undici-types/file.d.ts","../../../../../../node_modules/undici-types/fetch.d.ts","../../../../../../node_modules/undici-types/formdata.d.ts","../../../../../../node_modules/undici-types/connector.d.ts","../../../../../../node_modules/undici-types/client.d.ts","../../../../../../node_modules/undici-types/errors.d.ts","../../../../../../node_modules/undici-types/dispatcher.d.ts","../../../../../../node_modules/undici-types/global-dispatcher.d.ts","../../../../../../node_modules/undici-types/global-origin.d.ts","../../../../../../node_modules/undici-types/pool-stats.d.ts","../../../../../../node_modules/undici-types/pool.d.ts","../../../../../../node_modules/undici-types/handlers.d.ts","../../../../../../node_modules/undici-types/balanced-pool.d.ts","../../../../../../node_modules/undici-types/agent.d.ts","../../../../../../node_modules/undici-types/mock-interceptor.d.ts","../../../../../../node_modules/undici-types/mock-agent.d.ts","../../../../../../node_modules/undici-types/mock-client.d.ts","../../../../../../node_modules/undici-types/mock-pool.d.ts","../../../../../../node_modules/undici-types/mock-errors.d.ts","../../../../../../node_modules/undici-types/proxy-agent.d.ts","../../../../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../../../../node_modules/undici-types/retry-handler.d.ts","../../../../../../node_modules/undici-types/retry-agent.d.ts","../../../../../../node_modules/undici-types/api.d.ts","../../../../../../node_modules/undici-types/interceptors.d.ts","../../../../../../node_modules/undici-types/util.d.ts","../../../../../../node_modules/undici-types/cookies.d.ts","../../../../../../node_modules/undici-types/patch.d.ts","../../../../../../node_modules/undici-types/websocket.d.ts","../../../../../../node_modules/undici-types/eventsource.d.ts","../../../../../../node_modules/undici-types/filereader.d.ts","../../../../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../../../../node_modules/undici-types/content-type.d.ts","../../../../../../node_modules/undici-types/cache.d.ts","../../../../../../node_modules/undici-types/index.d.ts","../../../../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../../../../node_modules/@types/node/assert.d.ts","../../../../../../node_modules/@types/node/assert/strict.d.ts","../../../../../../node_modules/@types/node/async_hooks.d.ts","../../../../../../node_modules/@types/node/buffer.d.ts","../../../../../../node_modules/@types/node/child_process.d.ts","../../../../../../node_modules/@types/node/cluster.d.ts","../../../../../../node_modules/@types/node/console.d.ts","../../../../../../node_modules/@types/node/constants.d.ts","../../../../../../node_modules/@types/node/crypto.d.ts","../../../../../../node_modules/@types/node/dgram.d.ts","../../../../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../../../../node_modules/@types/node/dns.d.ts","../../../../../../node_modules/@types/node/dns/promises.d.ts","../../../../../../node_modules/@types/node/domain.d.ts","../../../../../../node_modules/@types/node/events.d.ts","../../../../../../node_modules/@types/node/fs.d.ts","../../../../../../node_modules/@types/node/fs/promises.d.ts","../../../../../../node_modules/@types/node/http.d.ts","../../../../../../node_modules/@types/node/http2.d.ts","../../../../../../node_modules/@types/node/https.d.ts","../../../../../../node_modules/@types/node/inspector.generated.d.ts","../../../../../../node_modules/@types/node/module.d.ts","../../../../../../node_modules/@types/node/net.d.ts","../../../../../../node_modules/@types/node/os.d.ts","../../../../../../node_modules/@types/node/path.d.ts","../../../../../../node_modules/@types/node/perf_hooks.d.ts","../../../../../../node_modules/@types/node/process.d.ts","../../../../../../node_modules/@types/node/punycode.d.ts","../../../../../../node_modules/@types/node/querystring.d.ts","../../../../../../node_modules/@types/node/readline.d.ts","../../../../../../node_modules/@types/node/readline/promises.d.ts","../../../../../../node_modules/@types/node/repl.d.ts","../../../../../../node_modules/@types/node/sea.d.ts","../../../../../../node_modules/@types/node/stream.d.ts","../../../../../../node_modules/@types/node/stream/promises.d.ts","../../../../../../node_modules/@types/node/stream/consumers.d.ts","../../../../../../node_modules/@types/node/stream/web.d.ts","../../../../../../node_modules/@types/node/string_decoder.d.ts","../../../../../../node_modules/@types/node/test.d.ts","../../../../../../node_modules/@types/node/timers.d.ts","../../../../../../node_modules/@types/node/timers/promises.d.ts","../../../../../../node_modules/@types/node/tls.d.ts","../../../../../../node_modules/@types/node/trace_events.d.ts","../../../../../../node_modules/@types/node/tty.d.ts","../../../../../../node_modules/@types/node/url.d.ts","../../../../../../node_modules/@types/node/util.d.ts","../../../../../../node_modules/@types/node/v8.d.ts","../../../../../../node_modules/@types/node/vm.d.ts","../../../../../../node_modules/@types/node/wasi.d.ts","../../../../../../node_modules/@types/node/worker_threads.d.ts","../../../../../../node_modules/@types/node/zlib.d.ts","../../../../../../node_modules/@types/node/index.d.ts","../../../../../../node_modules/@types/jasmine/index.d.ts"],"fileIdsList":[[57,104],[57,101,104],[57,103,104],[104],[57,104,109,137],[57,104,105,110,115,123,134,145],[57,104,105,106,115,123],[52,53,54,57,104],[57,104,107,146],[57,104,108,109,116,124],[57,104,109,134,142],[57,104,110,112,115,123],[57,103,104,111],[57,104,112,113],[57,104,114,115],[57,103,104,115],[57,104,115,116,117,134,145],[57,104,115,116,117,130,134,137],[57,104,112,115,118,123,134,145],[57,104,115,116,118,119,123,134,142,145],[57,104,118,120,134,142,145],[55,56,57,58,59,60,61,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151],[57,104,115,121],[57,104,122,145,150],[57,104,112,115,123,134],[57,104,124],[57,104,125],[57,103,104,126],[57,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151],[57,104,128],[57,104,129],[57,104,115,130,131],[57,104,130,132,146,148],[57,104,115,134,135,137],[57,104,136,137],[57,104,134,135],[57,104,137],[57,104,138],[57,101,104,134,139],[57,104,115,140,141],[57,104,140,141],[57,104,109,123,134,142],[57,104,143],[57,104,123,144],[57,104,118,129,145],[57,104,109,146],[57,104,134,147],[57,104,122,148],[57,104,149],[57,99,104],[57,99,104,115,117,126,134,137,145,148,150],[57,104,134,151],[57,71,75,104,145],[57,71,104,134,145],[57,66,104],[57,68,71,104,142,145],[57,104,123,142],[57,104,152],[57,66,104,152],[57,68,71,104,123,145],[57,63,64,67,70,104,115,134,145],[57,71,78,104],[57,63,69,104],[57,71,92,93,104],[57,67,71,104,137,145,152],[57,92,104,152],[57,65,66,104,152],[57,71,104],[57,65,66,67,68,69,70,71,72,73,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,93,94,95,96,97,98,104],[57,71,86,104],[57,71,78,79,104],[57,69,71,79,80,104],[57,70,104],[57,63,66,71,104],[57,71,75,79,80,104],[57,75,104],[57,69,71,74,104,145],[57,63,68,71,78,104],[57,104,134],[57,66,71,92,104,150,152],[48,49,50,57,104]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"35ad6218bc43a3026fd0f0a0da1be138bdcc73cc60cd771342964e0ddc19d06d","signature":"0c15556afbc51a72cc2abd86addd2a9b0e875b775b3592dfc6769e2cd2c1d620"},{"version":"5c89fe81d2e8026ac515568ac6de7449ffe5ee96f7e7b98ed4b3b8f68bf2d281","signature":"5c23e548048f732f5791bd1699be048958cf9a50e17153bfa5cc900faf7a27f9"},{"version":"551e93f8a2f7b9876ecebcf65ab871b1bdf539bdf91b941a7cfb831b68aa20f2","signature":"54b6fbe6876cc0da4006acd56a1f226d2199972e69abd432ad29dfe69524dd69"},{"version":"646e012416a387f49af744d92f7f9cc5145b7d900a989ca082399c00f1828310","signature":"04348d43cfdfb3af10c20607fabbe68ce13236c728addaacd872f47f981560f4"},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"641942a78f9063caa5d6b777c99304b7d1dc7328076038c6d94d8a0b81fc95c1","impliedFormat":1},{"version":"2de7636e6fbb9e54a61a38bcb7505b94ec5be61197fe9e840cff629ca920c4bc","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e20d899c28ca26a2a7afc98beaa69e63ff7fba0a8bc47b4e3bf3ede5e09e424","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"372413016d17d804e1d139418aca0c68e47a83fb6669490857f4b318de8cccb3","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"085f552d005479e2e6a7311cdbbe5d8c55c497b4d19274285df161ee9684cd9c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"007faacc9268357caa21d24169f3f3f2497af3e9241308df2d89f6e6d9bb3f2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"809821b8a065e3234a55b3a9d7846231ed18d66dd749f2494c66288d890daf7f","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7c5e2ea4a9749097c347454805e933844ed207b6eefec6b7cfd418b5f5f7b28","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1},{"version":"ee9520d0ddb073cf2c4ea30fe544466bbc3057f63183b760e1685b17a56a13be","affectsGlobalScope":true,"impliedFormat":1}],"root":[[48,51]],"options":{"alwaysStrict":true,"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"exactOptionalPropertyTypes":true,"module":99,"noImplicitAny":true,"noImplicitThis":true,"outDir":"./","skipLibCheck":true,"strict":true,"strictBindCallApply":true,"strictFunctionTypes":true,"strictNullChecks":true,"strictPropertyInitialization":true,"target":99,"useUnknownInCatchVariables":true},"referencedMap":[[153,1],[101,2],[102,2],[103,3],[57,4],[104,5],[105,6],[106,7],[52,1],[55,8],[53,1],[54,1],[107,9],[108,10],[109,11],[110,12],[111,13],[112,14],[113,14],[114,15],[115,16],[116,17],[117,18],[58,1],[56,1],[118,19],[119,20],[120,21],[152,22],[121,23],[122,24],[123,25],[124,26],[125,27],[126,28],[127,29],[128,30],[129,31],[130,32],[131,32],[132,33],[133,1],[134,34],[136,35],[135,36],[137,37],[138,38],[139,39],[140,40],[141,41],[142,42],[143,43],[144,44],[145,45],[146,46],[147,47],[148,48],[149,49],[59,1],[60,1],[61,1],[100,50],[150,51],[151,52],[62,1],[46,1],[47,1],[8,1],[9,1],[11,1],[10,1],[2,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[3,1],[20,1],[21,1],[4,1],[22,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[5,1],[30,1],[31,1],[32,1],[33,1],[6,1],[37,1],[34,1],[35,1],[36,1],[38,1],[7,1],[39,1],[44,1],[45,1],[40,1],[41,1],[42,1],[43,1],[1,1],[78,53],[88,54],[77,53],[98,55],[69,56],[68,57],[97,58],[91,59],[96,60],[71,61],[85,62],[70,63],[94,64],[66,65],[65,58],[95,66],[67,67],[72,68],[73,1],[76,68],[63,1],[99,69],[89,70],[80,71],[81,72],[83,73],[79,74],[82,75],[92,58],[74,76],[75,77],[84,78],[64,79],[87,70],[86,68],[90,1],[93,80],[48,1],[49,1],[50,1],[51,81]],"latestChangedDtsFile":"./index.d.ts","version":"5.9.3"}
1
+ {"fileNames":["../../../../../../node_modules/typescript/lib/lib.es5.d.ts","../../../../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../../../../node_modules/typescript/lib/lib.dom.d.ts","../../../../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../../../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../../../../node_modules/typescript/lib/lib.esnext.float16.d.ts","../../../../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../../test/hlsTestAssets/hls_mainPlaylist.ts","../../../../test/hlsTestAssets/hls_mediaPlaylist.ts","../../../../test/hlsTestAssets/hls_mediaPlaylistWithByteRanges.ts","../../../../test/hlsTestAssets/index.ts","../../../../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../../../../node_modules/@types/node/globals.typedarray.d.ts","../../../../../../node_modules/@types/node/buffer.buffer.d.ts","../../../../../../node_modules/@types/node/globals.d.ts","../../../../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../../../../node_modules/@types/node/web-globals/crypto.d.ts","../../../../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../../../../node_modules/@types/node/web-globals/events.d.ts","../../../../../../node_modules/buffer/index.d.ts","../../../../../../node_modules/undici-types/utility.d.ts","../../../../../../node_modules/undici-types/header.d.ts","../../../../../../node_modules/undici-types/readable.d.ts","../../../../../../node_modules/undici-types/fetch.d.ts","../../../../../../node_modules/undici-types/formdata.d.ts","../../../../../../node_modules/undici-types/connector.d.ts","../../../../../../node_modules/undici-types/client-stats.d.ts","../../../../../../node_modules/undici-types/client.d.ts","../../../../../../node_modules/undici-types/errors.d.ts","../../../../../../node_modules/undici-types/dispatcher.d.ts","../../../../../../node_modules/undici-types/global-dispatcher.d.ts","../../../../../../node_modules/undici-types/global-origin.d.ts","../../../../../../node_modules/undici-types/pool-stats.d.ts","../../../../../../node_modules/undici-types/pool.d.ts","../../../../../../node_modules/undici-types/handlers.d.ts","../../../../../../node_modules/undici-types/balanced-pool.d.ts","../../../../../../node_modules/undici-types/h2c-client.d.ts","../../../../../../node_modules/undici-types/agent.d.ts","../../../../../../node_modules/undici-types/mock-interceptor.d.ts","../../../../../../node_modules/undici-types/mock-call-history.d.ts","../../../../../../node_modules/undici-types/mock-agent.d.ts","../../../../../../node_modules/undici-types/mock-client.d.ts","../../../../../../node_modules/undici-types/mock-pool.d.ts","../../../../../../node_modules/undici-types/snapshot-agent.d.ts","../../../../../../node_modules/undici-types/mock-errors.d.ts","../../../../../../node_modules/undici-types/proxy-agent.d.ts","../../../../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../../../../node_modules/undici-types/retry-handler.d.ts","../../../../../../node_modules/undici-types/retry-agent.d.ts","../../../../../../node_modules/undici-types/api.d.ts","../../../../../../node_modules/undici-types/cache-interceptor.d.ts","../../../../../../node_modules/undici-types/interceptors.d.ts","../../../../../../node_modules/undici-types/util.d.ts","../../../../../../node_modules/undici-types/cookies.d.ts","../../../../../../node_modules/undici-types/patch.d.ts","../../../../../../node_modules/undici-types/websocket.d.ts","../../../../../../node_modules/undici-types/eventsource.d.ts","../../../../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../../../../node_modules/undici-types/content-type.d.ts","../../../../../../node_modules/undici-types/cache.d.ts","../../../../../../node_modules/undici-types/index.d.ts","../../../../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../../../../node_modules/@types/node/web-globals/navigator.d.ts","../../../../../../node_modules/@types/node/web-globals/storage.d.ts","../../../../../../node_modules/@types/node/web-globals/streams.d.ts","../../../../../../node_modules/@types/node/assert.d.ts","../../../../../../node_modules/@types/node/assert/strict.d.ts","../../../../../../node_modules/@types/node/async_hooks.d.ts","../../../../../../node_modules/@types/node/buffer.d.ts","../../../../../../node_modules/@types/node/child_process.d.ts","../../../../../../node_modules/@types/node/cluster.d.ts","../../../../../../node_modules/@types/node/console.d.ts","../../../../../../node_modules/@types/node/constants.d.ts","../../../../../../node_modules/@types/node/crypto.d.ts","../../../../../../node_modules/@types/node/dgram.d.ts","../../../../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../../../../node_modules/@types/node/dns.d.ts","../../../../../../node_modules/@types/node/dns/promises.d.ts","../../../../../../node_modules/@types/node/domain.d.ts","../../../../../../node_modules/@types/node/events.d.ts","../../../../../../node_modules/@types/node/fs.d.ts","../../../../../../node_modules/@types/node/fs/promises.d.ts","../../../../../../node_modules/@types/node/http.d.ts","../../../../../../node_modules/@types/node/http2.d.ts","../../../../../../node_modules/@types/node/https.d.ts","../../../../../../node_modules/@types/node/inspector.d.ts","../../../../../../node_modules/@types/node/inspector.generated.d.ts","../../../../../../node_modules/@types/node/module.d.ts","../../../../../../node_modules/@types/node/net.d.ts","../../../../../../node_modules/@types/node/os.d.ts","../../../../../../node_modules/@types/node/path.d.ts","../../../../../../node_modules/@types/node/perf_hooks.d.ts","../../../../../../node_modules/@types/node/process.d.ts","../../../../../../node_modules/@types/node/punycode.d.ts","../../../../../../node_modules/@types/node/querystring.d.ts","../../../../../../node_modules/@types/node/readline.d.ts","../../../../../../node_modules/@types/node/readline/promises.d.ts","../../../../../../node_modules/@types/node/repl.d.ts","../../../../../../node_modules/@types/node/sea.d.ts","../../../../../../node_modules/@types/node/sqlite.d.ts","../../../../../../node_modules/@types/node/stream.d.ts","../../../../../../node_modules/@types/node/stream/promises.d.ts","../../../../../../node_modules/@types/node/stream/consumers.d.ts","../../../../../../node_modules/@types/node/stream/web.d.ts","../../../../../../node_modules/@types/node/string_decoder.d.ts","../../../../../../node_modules/@types/node/test.d.ts","../../../../../../node_modules/@types/node/timers.d.ts","../../../../../../node_modules/@types/node/timers/promises.d.ts","../../../../../../node_modules/@types/node/tls.d.ts","../../../../../../node_modules/@types/node/trace_events.d.ts","../../../../../../node_modules/@types/node/tty.d.ts","../../../../../../node_modules/@types/node/url.d.ts","../../../../../../node_modules/@types/node/util.d.ts","../../../../../../node_modules/@types/node/v8.d.ts","../../../../../../node_modules/@types/node/vm.d.ts","../../../../../../node_modules/@types/node/wasi.d.ts","../../../../../../node_modules/@types/node/worker_threads.d.ts","../../../../../../node_modules/@types/node/zlib.d.ts","../../../../../../node_modules/@types/node/index.d.ts","../../../../../../node_modules/@types/jasmine/index.d.ts"],"fileIdsList":[[56,111,128,129],[56,108,109,111,128,129],[56,110,111,128,129],[111,128,129],[56,111,116,128,129,146],[56,111,112,117,122,128,129,131,143,154],[56,111,112,113,122,128,129,131],[56,111,114,128,129,155],[56,111,115,116,123,128,129,132],[56,111,116,128,129,143,151],[56,111,117,119,122,128,129,131],[56,110,111,118,128,129],[56,111,119,120,128,129],[56,111,121,122,128,129],[56,110,111,122,128,129],[56,111,122,123,124,128,129,143,154],[56,111,122,123,124,128,129,138,143,146],[56,103,111,119,122,125,128,129,131,143,154],[56,111,122,123,125,126,128,129,131,143,151,154],[56,111,125,127,128,129,143,151,154],[54,55,56,57,58,59,60,61,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160],[56,111,122,128,129],[56,111,128,129,130,154],[56,111,119,122,128,129,131,143],[56,111,128,129,132],[56,111,128,129,133],[56,110,111,128,129,134],[56,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160],[56,111,128,129,136],[56,111,128,129,137],[56,111,122,128,129,138,139],[56,111,128,129,138,140,155,157],[56,111,123,128,129],[56,111,122,128,129,143,144,146],[56,111,128,129,145,146],[56,111,128,129,143,144],[56,111,128,129,146],[56,111,128,129,147],[56,108,111,128,129,143,148,154],[56,111,122,128,129,149,150],[56,111,128,129,149,150],[56,111,116,128,129,131,143,151],[56,111,128,129,152],[56,111,128,129,131,153],[56,111,125,128,129,137,154],[56,111,116,128,129,155],[56,111,128,129,143,156],[56,111,128,129,130,157],[56,111,128,129,158],[56,111,116,128,129],[56,103,111,128,129],[56,111,128,129,159],[56,103,111,122,124,128,129,134,143,146,154,156,157,159],[56,111,128,129,143,160],[56,69,72,75,76,111,128,129,154],[56,72,111,128,129,143,154],[56,72,76,111,128,129,154],[56,111,128,129,143],[56,66,111,128,129],[56,70,111,128,129],[56,68,69,72,111,128,129,154],[56,111,128,129,131,151],[56,111,128,129,161],[56,66,111,128,129,161],[56,68,72,111,128,129,131,154],[56,63,64,65,67,71,111,122,128,129,143,154],[56,72,80,88,111,128,129],[56,64,70,111,128,129],[56,72,97,98,111,128,129],[56,64,67,72,111,128,129,146,154,161],[56,72,111,128,129],[56,68,72,111,128,129,154],[56,63,111,128,129],[56,66,67,68,70,71,72,73,74,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,98,99,100,101,102,111,128,129],[56,72,90,93,111,119,128,129],[56,72,80,81,82,111,128,129],[56,70,72,81,83,111,128,129],[56,71,111,128,129],[56,64,66,72,111,128,129],[56,72,76,81,83,111,128,129],[56,76,111,128,129],[56,70,72,75,111,128,129,154],[56,64,68,72,80,111,128,129],[56,72,90,111,128,129],[56,83,111,128,129],[56,66,72,97,111,128,129,146,159,161],[50,51,52,56,111,128,129]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"35ad6218bc43a3026fd0f0a0da1be138bdcc73cc60cd771342964e0ddc19d06d","signature":"0c15556afbc51a72cc2abd86addd2a9b0e875b775b3592dfc6769e2cd2c1d620"},{"version":"5c89fe81d2e8026ac515568ac6de7449ffe5ee96f7e7b98ed4b3b8f68bf2d281","signature":"5c23e548048f732f5791bd1699be048958cf9a50e17153bfa5cc900faf7a27f9"},{"version":"551e93f8a2f7b9876ecebcf65ab871b1bdf539bdf91b941a7cfb831b68aa20f2","signature":"54b6fbe6876cc0da4006acd56a1f226d2199972e69abd432ad29dfe69524dd69"},{"version":"646e012416a387f49af744d92f7f9cc5145b7d900a989ca082399c00f1828310","signature":"04348d43cfdfb3af10c20607fabbe68ce13236c728addaacd872f47f981560f4"},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"378281aa35786c27d5811af7e6bcaa492eebd0c7013d48137c35bbc69a2b9751","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"1b2dd1cbeb0cc6ae20795958ba5950395ebb2849b7c8326853dd15530c77ab0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"387a023d363f755eb63450a66c28b14cdd7bc30a104565e2dbf0a8988bb4a56c","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"f724236417941ea77ec8d38c6b7021f5fb7f8521c7f8c1538e87661f2c6a0774","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ea15fd99b2e34cb25fe8346c955000bb70c8b423ae4377a972ef46bfb37f595","impliedFormat":1},{"version":"7cf69dd5502c41644c9e5106210b5da7144800670cbe861f66726fa209e231c4","impliedFormat":1},{"version":"72c1f5e0a28e473026074817561d1bc9647909cf253c8d56c41d1df8d95b85f7","impliedFormat":1},{"version":"f9b4137a0d285bd77dba2e6e895530112264310ae47e07bf311feae428fb8b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"c06b2652ffeb89afd0f1c52c165ced77032f9cd09bc481153fbd6b5504c69494","impliedFormat":1},{"version":"51aecd2df90a3cffea1eb4696b33b2d78594ea2aa2138e6b9471ec4841c6c2ee","impliedFormat":1},{"version":"9d8f9e63e29a3396285620908e7f14d874d066caea747dc4b2c378f0599166b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"612422d5ba6b4a5c4537f423e9199645468ad80a689801da63ab7edb43f7b835","impliedFormat":1},{"version":"db9ada976f9e52e13f7ae8b9a320f4b67b87685938c5879187d8864b2fbe97f3","impliedFormat":1},{"version":"9f39e70a354d0fba29ac3cdf6eca00b7f9e96f64b2b2780c432e8ea27f133743","impliedFormat":1},{"version":"0dace96cc0f7bc6d0ee2044921bdf19fe42d16284dbcc8ae200800d1c9579335","impliedFormat":1},{"version":"a2e2bbde231b65c53c764c12313897ffdfb6c49183dd31823ee2405f2f7b5378","impliedFormat":1},{"version":"ad1cc0ed328f3f708771272021be61ab146b32ecf2b78f3224959ff1e2cd2a5c","impliedFormat":1},{"version":"c64e1888baaa3253ca4405b455e4bf44f76357868a1bd0a52998ade9a092ad78","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc8c6f5322961b56d9906601b20798725df60baeab45ec014fba9f795d5596fd","impliedFormat":1},{"version":"0904660ae854e6d41f6ff25356db1d654436c6305b0f0aa89d1532df0253486e","impliedFormat":1},{"version":"060d305fe4494d8cb2b99d620928d369d1ee55c1645f5e729a2aca07d0f108cb","impliedFormat":1},{"version":"a016b2a26863dd6acb1f18c4ff37363c2b51e27ca7b3374dc6342aff1ddead2d","impliedFormat":1},{"version":"0c50296ee73dae94efc3f0da4936b1146ca6ce2217acfabb44c19c9a33fa30e5","impliedFormat":1},{"version":"bbf42f98a5819f4f06e18c8b669a994afe9a17fe520ae3454a195e6eabf7700d","impliedFormat":1},{"version":"0e5974dfff7a97181c7c376545f126b20acf2f1341db7d3fccea4977bf3ce19c","impliedFormat":1},{"version":"c7f977ea78a1b060a30554c1c4ec0e2269c6e305a349ca2ada14931ac27ecc0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"3806cdd6b48ba01a9198134e62a384ec217a98f316d4baef74dd46d62c947a63","impliedFormat":1},{"version":"ff65b8a8bd380c6d129becc35de02f7c29ad7ce03300331ca91311fb4044d1a9","impliedFormat":1},{"version":"04bf1aa481d1adfb16d93d76e44ce71c51c8ef68039d849926551199489637f6","impliedFormat":1},{"version":"2c9adcc85574b002c9a6311ff2141055769e0071856ec979d92ff989042b1f1b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b8bf3fe89ec8baa335f6370b9fa36308e1bc7a72e2eb2dad1e94f31e27fa28b5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a58a15da4c5ba3df60c910a043281256fa52d36a0fcdef9b9100c646282e88dd","impliedFormat":1},{"version":"b36beffbf8acdc3ebc58c8bb4b75574b31a2169869c70fc03f82895b93950a12","impliedFormat":1},{"version":"de263f0089aefbfd73c89562fb7254a7468b1f33b61839aafc3f035d60766cb4","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"8c81fd4a110490c43d7c578e8c6f69b3af01717189196899a6a44f93daa57a3a","impliedFormat":1},{"version":"5fb39858b2459864b139950a09adae4f38dad87c25bf572ce414f10e4bd7baab","impliedFormat":1},{"version":"35390d6fa94bdb432c5d0bcb6547bdd11406c2692a6b90b9e47be2105ea19bd6","impliedFormat":1},{"version":"3910dab597c40e173bf0e0d419d3ce9682c54ebf6ae84849f9b829b1451a17ec","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"486c074a5c0f2254345c0d1c9540380f5463999e42d7e1a159305ea823d3c4b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"c119835edf36415081dfd9ed15fc0cd37aaa28d232be029ad073f15f3d88c323","impliedFormat":1},{"version":"8e7c3bed5f19ade8f911677ddc83052e2283e25b0a8654cd89db9079d4b323c7","impliedFormat":1},{"version":"9705cd157ffbb91c5cab48bdd2de5a437a372e63f870f8a8472e72ff634d47c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae86f30d5d10e4f75ce8dcb6e1bd3a12ecec3d071a21e8f462c5c85c678efb41","impliedFormat":1},{"version":"ccf3afaeebbeee4ca9092101e99fd6abd681116b6e5ec23e381bbb1e1f32262c","impliedFormat":1},{"version":"e03460fe72b259f6d25ad029f085e4bedc3f90477da4401d8fbc1efa9793230e","impliedFormat":1},{"version":"4286a3a6619514fca656089aee160bb6f2e77f4dd53dc5a96b26a0b4fc778055","impliedFormat":1},{"version":"ab7818a9d57a9297b90e456fc68b77f84d74395a9210a3cfa9d87db33aff8b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb08062718a5470cd864c1fae0eb5b3a3adc5bcd05dcf87608d6f60b65eca3f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"3a815b7d1aebc0646b91548eab2fc19dada09ff255d04c71ced00bbd3058c8eb","impliedFormat":1},{"version":"255d948f87f24ffd57bcb2fdf95792fd418a2e1f712a98cf2cce88744d75085c","impliedFormat":1},{"version":"0d5b085f36e6dc55bc6332ecb9c733be3a534958c238fb8d8d18d4a2b6f2a15a","impliedFormat":1},{"version":"836b36913830645ac3b28fe33731aac3fdb3524ee8adbb4cdab9a5c189f41943","affectsGlobalScope":true,"impliedFormat":1},{"version":"bfd3b3c21a56104693183942e221c1896ee23bcb8f8d91ab0b941f7b32985411","impliedFormat":1},{"version":"d7e9ab1b0996639047c61c1e62f85c620e4382206b3abb430d9a21fb7bc23c77","impliedFormat":1},{"version":"ee9520d0ddb073cf2c4ea30fe544466bbc3057f63183b760e1685b17a56a13be","affectsGlobalScope":true,"impliedFormat":1}],"root":[[50,53]],"options":{"alwaysStrict":true,"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"exactOptionalPropertyTypes":true,"module":99,"noImplicitAny":true,"noImplicitThis":true,"outDir":"./","skipLibCheck":true,"strict":true,"strictBindCallApply":true,"strictFunctionTypes":true,"strictNullChecks":true,"strictPropertyInitialization":true,"target":99,"useUnknownInCatchVariables":true},"referencedMap":[[162,1],[108,2],[109,2],[110,3],[56,4],[111,5],[112,6],[113,7],[54,1],[114,8],[115,9],[116,10],[117,11],[118,12],[119,13],[120,13],[121,14],[122,15],[123,16],[124,17],[57,1],[55,1],[125,18],[126,19],[127,20],[161,21],[128,22],[129,1],[130,23],[131,24],[132,25],[133,26],[134,27],[135,28],[136,29],[137,30],[138,31],[139,31],[140,32],[141,1],[142,33],[143,34],[145,35],[144,36],[146,37],[147,38],[148,39],[149,40],[150,41],[151,42],[152,43],[153,44],[154,45],[155,46],[156,47],[157,48],[158,49],[58,1],[59,50],[60,1],[61,1],[104,51],[105,52],[106,1],[107,37],[159,53],[160,54],[62,1],[48,1],[49,1],[8,1],[9,1],[11,1],[10,1],[2,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[3,1],[20,1],[21,1],[4,1],[22,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[5,1],[30,1],[31,1],[32,1],[33,1],[6,1],[37,1],[34,1],[35,1],[36,1],[38,1],[7,1],[39,1],[44,1],[45,1],[40,1],[41,1],[42,1],[43,1],[1,1],[46,1],[47,1],[80,55],[92,56],[78,57],[93,58],[102,59],[69,60],[70,61],[68,62],[101,63],[96,64],[100,65],[72,66],[89,67],[71,68],[99,69],[66,70],[67,64],[73,71],[74,1],[79,72],[77,71],[64,73],[103,74],[94,75],[83,76],[82,71],[84,77],[87,78],[81,79],[85,80],[97,63],[75,81],[76,82],[88,83],[65,58],[91,84],[90,71],[86,85],[95,1],[63,1],[98,86],[50,1],[51,1],[52,1],[53,87]],"latestChangedDtsFile":"./index.d.ts","version":"5.9.3"}
package/dist/index.cjs CHANGED
@@ -327,7 +327,7 @@ function parseMainPlaylist(text) {
327
327
  addIfPresent(
328
328
  __spreadValues(__spreadValues({
329
329
  bandwidth: Number(attrs["BANDWIDTH"]),
330
- uri
330
+ uri: substituteHlsVariables(uri, defines)
331
331
  }, attrs["FRAME-RATE"] && {
332
332
  frameRate: Number(attrs["FRAME-RATE"])
333
333
  }), attrs.RESOLUTION && parseResolution(attrs.RESOLUTION)),
@@ -347,6 +347,9 @@ function parseMainPlaylist(text) {
347
347
  const attrs = parseAttributes(attrReader);
348
348
  const type = attrs["TYPE"];
349
349
  renditionTypeValidator.assert(type);
350
+ if (attrs["URI"]) {
351
+ attrs["URI"] = substituteHlsVariables(attrs["URI"], defines);
352
+ }
350
353
  alternativeRenditions.push(
351
354
  addIfPresent(
352
355
  __spreadValues(__spreadValues({
@@ -393,6 +396,10 @@ function parseMainPlaylist(text) {
393
396
  }
394
397
  return { variants, alternativeRenditions, sessionData, defines };
395
398
  }
399
+ function substituteHlsVariables(value, variables) {
400
+ if (!value || Object.keys(variables).length === 0) return value;
401
+ return (0, import_vinyl_util4.substitute)(value, variables, HLS_VARIABLE_PATTERN);
402
+ }
396
403
  function parseResolution(resolution) {
397
404
  const parts = resolution.split("x");
398
405
  if (parts.length !== 2) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts", "../src/types/EncryptionKey.ts", "../src/types/AlternativeRendition.ts", "../src/parse/parseUtil.ts", "../src/parse/parseMediaPlaylist.ts", "../src/parse/parseAttributes.ts", "../src/parse/parseMainPlaylist.ts"],
4
- "sourcesContent": ["/** Auto-generated from build scripts */\nexport * from './types/VariantStream'\nexport * from './types/SessionData'\nexport * from './types/MediaPlaylist'\nexport * from './types/MainPlaylist'\nexport * from './types/HlsSegment'\nexport * from './types/EncryptionKey'\nexport * from './types/AlternativeRendition'\nexport * from './parse/parseUtil'\nexport * from './parse/parseMediaPlaylist'\nexport * from './parse/parseMainPlaylist'\nexport * from './parse/parseAttributes'\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ValueSchema } from '@amazon/vinyl-validation'\nimport { isOneOf } from '@amazon/vinyl-validation'\n\n/**\n * Encryption key metadata for an HLS media segment (EXT-X-KEY).\n *\n * Specifies how media segments are encrypted and provides the information needed to decrypt them.\n *\n * @see https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.2.4\n */\nexport interface EncryptionKey {\n /** The encryption method applied to media segments (METHOD). */\n readonly method: EncryptionMethod\n\n /** The URI for obtaining the decryption key (URI). Required unless method is NONE. */\n readonly uri?: string\n\n /** The initialization vector for decryption as a hexadecimal string (IV). */\n readonly iv?: string\n\n /** The format of the key in the response (KEYFORMAT). Identifies the DRM system, e.g. FairPlay. */\n readonly keyFormat?: string\n\n /** A slash-separated list of integers indicating compatible key format versions (KEYFORMATVERSIONS). */\n readonly keyFormatVersions?: string\n}\n\n/**\n * The encryption method for an HLS segment (EXT-X-KEY METHOD attribute).\n *\n * @see https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.2.4\n */\nexport type EncryptionMethod =\n | 'NONE'\n | 'AES-128'\n | 'SAMPLE-AES'\n | 'SAMPLE-AES-CTR'\n\nexport const encryptionMethodValidator: ValueSchema<EncryptionMethod> = /* @__PURE__ */ isOneOf(\n 'NONE',\n 'AES-128',\n 'SAMPLE-AES',\n 'SAMPLE-AES-CTR'\n)\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ValueSchema } from '@amazon/vinyl-validation'\nimport { isOneOf } from '@amazon/vinyl-validation'\n\n/**\n * An alternative rendition defined by EXT-X-MEDIA in an HLS Master Playlist.\n *\n * Alternative renditions allow a presentation to offer multiple versions of the same content,\n * such as audio in different languages or subtitles, that can be selected independently of the\n * variant stream.\n *\n * @see https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.4.1\n */\nexport interface AlternativeRendition {\n /** The media type of this rendition (AUDIO, VIDEO, SUBTITLES, or CLOSED-CAPTIONS). */\n readonly type: RenditionType\n\n /** The group to which this rendition belongs (GROUP-ID). Variants reference groups to associate renditions. */\n readonly groupId: string\n\n /** A human-readable description of this rendition (NAME). */\n readonly name: string\n\n /** The URI of the Media Playlist for this rendition. Absent for CLOSED-CAPTIONS or when muxed into the variant. */\n readonly uri?: string\n\n /** The primary language of this rendition as a BCP 47 tag (LANGUAGE). */\n readonly language?: string\n\n /** Whether this rendition should be played when the user has not expressed a preference (DEFAULT). */\n readonly default?: boolean\n\n /** Whether the client may choose to play this rendition without explicit user selection (AUTOSELECT). */\n readonly autoSelect?: boolean\n}\n\n/**\n * The media type of an alternative rendition (EXT-X-MEDIA TYPE attribute).\n *\n * @see https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.4.1\n */\nexport type RenditionType = 'AUDIO' | 'VIDEO' | 'SUBTITLES' | 'CLOSED-CAPTIONS'\n\nexport const renditionTypeValidator: ValueSchema<RenditionType> = /* @__PURE__ */ isOneOf(\n 'AUDIO',\n 'VIDEO',\n 'SUBTITLES',\n 'CLOSED-CAPTIONS'\n)\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { char, isWhitespaceChar, type StringReader } from '@amazon/vinyl-util'\n\nconst LF = /* @__PURE__ */ char('\\n')\nconst CR = /* @__PURE__ */ char('\\r')\n\n/**\n * Reads a line from the StringReader, advancing past the line ending.\n * Returns the line content without the line ending.\n */\nexport function readLine(reader: StringReader): string {\n const line = reader.substringUntil((cc) => cc === LF || cc === CR)\n if (reader.hasNext() && reader.peek === CR) reader.next()\n if (reader.hasNext() && reader.peek === LF) reader.next()\n return line\n}\n\n/**\n * Skips whitespace-only content at the current position up to and including\n * the next line ending. Returns true if a whitespace-only line was skipped.\n */\nexport function skipWhitespaceLine(reader: StringReader): boolean {\n const start = reader.position\n reader.while((cc) => isWhitespaceChar(cc) && cc !== LF && cc !== CR)\n if (!reader.hasNext() || reader.peek === LF || reader.peek === CR) {\n if (reader.hasNext()) {\n if (reader.peek === CR) reader.next()\n if (reader.hasNext() && reader.peek === LF) reader.next()\n }\n return true\n }\n reader.position = start\n return false\n}\n\n/**\n * Conditionally adds properties from an attribute map to an object.\n * Only adds a property if the corresponding attribute key exists and is truthy.\n */\nexport function addIfPresent<T extends Record<string, any>>(\n obj: T,\n attrs: Record<string, string>,\n mappings: Record<string, string>\n): T {\n for (const [attrKey, objKey] of Object.entries(mappings)) {\n if (attrs[attrKey]) {\n ;(obj as any)[objKey] = attrs[attrKey]\n }\n }\n return obj\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { StringReader, substitute } from '@amazon/vinyl-util'\nimport type { EncryptionKey } from '@/types/EncryptionKey'\nimport { encryptionMethodValidator } from '@/types/EncryptionKey'\nimport type { HlsSegment, HlsMap } from '@/types/HlsSegment'\nimport type { MediaPlaylist } from '@/types/MediaPlaylist'\nimport { parseAttributes } from './parseAttributes'\nimport { readLine, skipWhitespaceLine, addIfPresent } from './parseUtil'\n\nexport const HLS_VARIABLE_PATTERN = /\\{\\$([^}]+)}/g\n\nconst EXTM3U = '#EXTM3U'\nconst EXTINF = '#EXTINF:'\nconst EXT_X_TARGETDURATION = '#EXT-X-TARGETDURATION:'\nconst EXT_X_MEDIA_SEQUENCE = '#EXT-X-MEDIA-SEQUENCE:'\nconst EXT_X_ENDLIST = '#EXT-X-ENDLIST'\nconst EXT_X_PLAYLIST_TYPE = '#EXT-X-PLAYLIST-TYPE:'\nconst EXT_X_VERSION = '#EXT-X-VERSION:'\nconst EXT_X_KEY = '#EXT-X-KEY:'\nconst EXT_X_BYTERANGE = '#EXT-X-BYTERANGE:'\nconst EXT_X_DISCONTINUITY = '#EXT-X-DISCONTINUITY'\nconst EXT_X_PROGRAM_DATE_TIME = '#EXT-X-PROGRAM-DATE-TIME:'\nconst EXT_X_MAP = '#EXT-X-MAP:'\n\n/**\n * Parses an HLS media playlist from M3U8 text.\n *\n * @param text The raw M3U8 manifest string.\n * @param variables Optional variable definitions from the master playlist's #EXT-X-DEFINE tags.\n * @returns A readonly MediaPlaylist structure.\n * @throws StringParseError if the manifest is malformed.\n */\nexport function parseMediaPlaylist(\n text: string,\n variables?: Readonly<Record<string, string>>\n): MediaPlaylist {\n const reader = new StringReader(text)\n\n reader.white()\n if (!reader.stringIf(EXTM3U)) {\n reader.err('Expected #EXTM3U')\n }\n readLine(reader)\n\n let version = 1\n let targetDuration = 0\n let mediaSequence = 0\n let playlistType: 'VOD' | 'EVENT' | 'LIVE' = 'LIVE'\n let ended = false\n\n let currentKey: EncryptionKey | undefined\n let currentMap: HlsMap | undefined\n let pendingByteRange: { length: number; offset: number } | undefined\n let pendingDiscontinuity = false\n let pendingDateTime: string | undefined\n\n const segments: HlsSegment[] = []\n let sequenceCounter = 0\n\n while (reader.hasNext()) {\n if (skipWhitespaceLine(reader)) continue\n\n const line = readLine(reader)\n const trimmed = line.trim()\n if (!trimmed) continue\n\n if (trimmed.startsWith(EXTINF)) {\n const durationStr = trimmed.substring(EXTINF.length).split(',')[0]\n const duration = Number(durationStr)\n\n // Find the URI, skipping any tags that come between EXTINF and URI\n let uri = ''\n while (reader.hasNext()) {\n if (skipWhitespaceLine(reader)) continue\n const nextLine = readLine(reader).trim()\n if (!nextLine.startsWith('#')) {\n uri = variables\n ? substitute(nextLine, variables, HLS_VARIABLE_PATTERN)\n : nextLine\n break\n }\n // Process tags that come between EXTINF and URI\n if (nextLine.startsWith(EXT_X_BYTERANGE)) {\n const rangeStr = nextLine.substring(EXT_X_BYTERANGE.length)\n pendingByteRange = parseByteRangeString(rangeStr)\n } else if (nextLine === EXT_X_DISCONTINUITY) {\n pendingDiscontinuity = true\n } else if (nextLine.startsWith(EXT_X_PROGRAM_DATE_TIME)) {\n pendingDateTime = nextLine.substring(\n EXT_X_PROGRAM_DATE_TIME.length\n )\n } else if (nextLine.startsWith(EXT_X_MAP)) {\n const attrStr = nextLine.substring(EXT_X_MAP.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n const mapUri = attrs['URI']\n if (mapUri) {\n const byteRangeStr = attrs['BYTERANGE']\n currentMap = {\n uri: mapUri,\n ...(byteRangeStr && {\n byteRange: parseByteRangeString(byteRangeStr),\n }),\n }\n }\n }\n }\n\n segments.push({\n uri,\n duration,\n sequenceNumber: mediaSequence + sequenceCounter,\n ...(currentKey && { key: currentKey }),\n ...(currentMap && { map: currentMap }),\n ...(pendingByteRange && { byteRange: pendingByteRange }),\n discontinuity: pendingDiscontinuity,\n ...(pendingDateTime && { programDateTime: pendingDateTime }),\n })\n\n sequenceCounter++\n pendingByteRange = undefined\n pendingDiscontinuity = false\n pendingDateTime = undefined\n } else if (trimmed.startsWith(EXT_X_TARGETDURATION)) {\n targetDuration = Number(\n trimmed.substring(EXT_X_TARGETDURATION.length)\n )\n } else if (trimmed.startsWith(EXT_X_MEDIA_SEQUENCE)) {\n mediaSequence = Number(\n trimmed.substring(EXT_X_MEDIA_SEQUENCE.length)\n )\n } else if (trimmed === EXT_X_ENDLIST) {\n ended = true\n } else if (trimmed.startsWith(EXT_X_PLAYLIST_TYPE)) {\n const val = trimmed.substring(EXT_X_PLAYLIST_TYPE.length).trim()\n if (val === 'VOD' || val === 'EVENT') {\n playlistType = val\n }\n } else if (trimmed.startsWith(EXT_X_VERSION)) {\n version = Number(trimmed.substring(EXT_X_VERSION.length))\n } else if (trimmed.startsWith(EXT_X_KEY)) {\n const attrStr = trimmed.substring(EXT_X_KEY.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n\n const method = attrs['METHOD']\n encryptionMethodValidator.assert(method)\n\n currentKey = addIfPresent(\n {\n method,\n },\n attrs,\n {\n URI: 'uri',\n IV: 'iv',\n KEYFORMAT: 'keyFormat',\n KEYFORMATVERSIONS: 'keyFormatVersions',\n }\n )\n } else if (trimmed.startsWith(EXT_X_MAP)) {\n const attrStr = trimmed.substring(EXT_X_MAP.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n\n const mapUri = attrs['URI']\n if (mapUri) {\n const byteRangeStr = attrs['BYTERANGE']\n currentMap = {\n uri: mapUri,\n ...(byteRangeStr && {\n byteRange: parseByteRangeString(byteRangeStr),\n }),\n }\n }\n } else if (trimmed.startsWith(EXT_X_BYTERANGE)) {\n const rangeStr = trimmed.substring(EXT_X_BYTERANGE.length)\n pendingByteRange = parseByteRangeString(rangeStr)\n } else if (trimmed === EXT_X_DISCONTINUITY) {\n pendingDiscontinuity = true\n } else if (trimmed.startsWith(EXT_X_PROGRAM_DATE_TIME)) {\n pendingDateTime = trimmed.substring(EXT_X_PROGRAM_DATE_TIME.length)\n }\n // Unrecognized tags and comments are silently skipped\n }\n\n return {\n version,\n targetDuration,\n mediaSequence,\n playlistType,\n ended,\n segments,\n }\n}\n\n/**\n * Parses a byte range string (e.g. \"1000@500\" or \"1000\") into length and offset.\n */\nfunction parseByteRangeString(str: string): {\n length: number\n offset: number\n} {\n const parts = str.split('@')\n return {\n length: Number(parts[0]),\n offset: parts.length > 1 ? Number(parts[1]) : 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 type { StringReader } from '@amazon/vinyl-util'\nimport { char } from '@amazon/vinyl-util'\n\nconst EQUALS = /* @__PURE__ */ char('=')\nconst COMMA = /* @__PURE__ */ char(',')\nconst QUOTE = /* @__PURE__ */ char('\"')\n\n/**\n * Parses an HLS attribute list (e.g. `KEY=VALUE,KEY=\"quoted,value\"`) using\n * StringReader cursor-based parsing. Handles quoted values with embedded commas.\n */\nexport function parseAttributes(reader: StringReader): Record<string, string> {\n const attrs: Record<string, string> = {}\n\n while (\n reader.hasNext() &&\n reader.peek !== char('\\n') &&\n reader.peek !== char('\\r')\n ) {\n const key = reader.substringUntilChar(EQUALS)\n if (!key || !reader.hasNext()) break\n reader.next() // skip '='\n\n let value: string\n if (reader.peek === QUOTE) {\n reader.next() // skip opening quote\n value = reader.substringUntilChar(QUOTE)\n if (reader.hasNext()) reader.next() // skip closing quote\n } else {\n value = reader.substringUntil(\n (cc) => cc === COMMA || cc === char('\\n') || cc === char('\\r')\n )\n }\n\n attrs[key] = value\n\n if (reader.hasNext() && reader.peek === COMMA) {\n reader.next() // skip ','\n }\n }\n\n return attrs\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { StringReader, ValidationError } from '@amazon/vinyl-util'\nimport type { AlternativeRendition } from '@/types/AlternativeRendition'\nimport { renditionTypeValidator } from '@/types/AlternativeRendition'\nimport type { MainPlaylist } from '@/types/MainPlaylist'\nimport type { SessionData } from '@/types/SessionData'\nimport type { VariantStream } from '@/types/VariantStream'\nimport { parseAttributes } from './parseAttributes'\nimport { readLine, skipWhitespaceLine, addIfPresent } from './parseUtil'\n\nconst EXTM3U = '#EXTM3U'\nconst EXT_X_STREAM_INF = '#EXT-X-STREAM-INF:'\nconst EXT_X_MEDIA = '#EXT-X-MEDIA:'\nconst EXT_X_SESSION_DATA = '#EXT-X-SESSION-DATA:'\nconst EXT_X_DEFINE = '#EXT-X-DEFINE:'\n\n/**\n * Parses an HLS master playlist from M3U8 text.\n *\n * @param text The raw M3U8 manifest string.\n * @returns A readonly MainPlaylist structure.\n * @throws StringParseError if the manifest is malformed.\n */\nexport function parseMainPlaylist(text: string): MainPlaylist {\n const reader = new StringReader(text)\n\n reader.white()\n if (!reader.stringIf(EXTM3U)) {\n reader.err('Expected #EXTM3U')\n }\n // Advance past the rest of the #EXTM3U line\n readLine(reader)\n\n const variants: VariantStream[] = []\n const alternativeRenditions: AlternativeRendition[] = []\n const sessionData: SessionData[] = []\n const defines: Record<string, string> = {}\n\n while (reader.hasNext()) {\n if (skipWhitespaceLine(reader)) continue\n\n const line = readLine(reader)\n const trimmed = line.trim()\n if (!trimmed) continue\n\n if (trimmed.startsWith(EXT_X_STREAM_INF)) {\n const attrStr = trimmed.substring(EXT_X_STREAM_INF.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n\n // Next non-empty line is the URI\n let uri = ''\n while (reader.hasNext()) {\n if (skipWhitespaceLine(reader)) continue\n uri = readLine(reader).trim()\n break\n }\n\n variants.push(\n addIfPresent(\n {\n bandwidth: Number(attrs['BANDWIDTH']),\n uri,\n ...(attrs['FRAME-RATE'] && {\n frameRate: Number(attrs['FRAME-RATE']),\n }),\n ...(attrs.RESOLUTION &&\n parseResolution(attrs.RESOLUTION)),\n },\n attrs,\n {\n CODECS: 'codecs',\n AUDIO: 'audioGroup',\n VIDEO: 'videoGroup',\n SUBTITLES: 'subtitlesGroup',\n 'CLOSED-CAPTIONS': 'closedCaptionsGroup',\n }\n )\n )\n } else if (trimmed.startsWith(EXT_X_MEDIA)) {\n const attrStr = trimmed.substring(EXT_X_MEDIA.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n\n const type = attrs['TYPE']\n renditionTypeValidator.assert(type)\n\n alternativeRenditions.push(\n addIfPresent(\n {\n type,\n groupId: attrs['GROUP-ID'],\n name: attrs['NAME'],\n ...(attrs['DEFAULT'] && {\n default: attrs['DEFAULT'] === 'YES',\n }),\n ...(attrs['AUTOSELECT'] && {\n autoSelect: attrs['AUTOSELECT'] === 'YES',\n }),\n },\n attrs,\n {\n URI: 'uri',\n LANGUAGE: 'language',\n }\n )\n )\n } else if (trimmed.startsWith(EXT_X_SESSION_DATA)) {\n const attrStr = trimmed.substring(EXT_X_SESSION_DATA.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n\n sessionData.push(\n addIfPresent(\n {\n dataId: attrs['DATA-ID'],\n },\n attrs,\n {\n VALUE: 'value',\n URI: 'uri',\n LANGUAGE: 'language',\n }\n )\n )\n } else if (trimmed.startsWith(EXT_X_DEFINE)) {\n const attrStr = trimmed.substring(EXT_X_DEFINE.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n if (attrs['NAME'] && attrs['VALUE']) {\n defines[attrs['NAME']] = attrs['VALUE']\n }\n }\n // Unrecognized tags and comments are silently skipped\n }\n\n return { variants, alternativeRenditions, sessionData, defines }\n}\n\n/**\n * Parses a resolution string (e.g., \"1920x1080\") into width and height numbers.\n * Throws ValidationError for invalid formats per HLS spec.\n */\nfunction parseResolution(resolution: string): {\n width: number\n height: number\n} {\n const parts = resolution.split('x')\n if (parts.length !== 2) {\n throw new ValidationError(\n 'Invalid resolution format, expected WIDTHxHEIGHT'\n )\n }\n\n const width = Number(parts[0])\n const height = Number(parts[1])\n\n if (\n !Number.isInteger(width) ||\n !Number.isInteger(height) ||\n width <= 0 ||\n height <= 0\n ) {\n throw new ValidationError(\n 'Invalid resolution values, width and height must be positive integers'\n )\n }\n\n return { width, height }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/** Auto-generated from build scripts */\nexport * from './types/VariantStream'\nexport * from './types/SessionData'\nexport * from './types/MediaPlaylist'\nexport * from './types/MainPlaylist'\nexport * from './types/HlsSegment'\nexport * from './types/EncryptionKey'\nexport * from './types/AlternativeRendition'\nexport * from './parse/parseUtil'\nexport * from './parse/parseMediaPlaylist'\nexport * from './parse/parseMainPlaylist'\nexport * from './parse/parseAttributes'\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ValueSchema } from '@amazon/vinyl-validation'\nimport { isOneOf } from '@amazon/vinyl-validation'\n\n/**\n * Encryption key metadata for an HLS media segment (EXT-X-KEY).\n *\n * Specifies how media segments are encrypted and provides the information needed to decrypt them.\n *\n * @see https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.2.4\n */\nexport interface EncryptionKey {\n /** The encryption method applied to media segments (METHOD). */\n readonly method: EncryptionMethod\n\n /** The URI for obtaining the decryption key (URI). Required unless method is NONE. */\n readonly uri?: string\n\n /** The initialization vector for decryption as a hexadecimal string (IV). */\n readonly iv?: string\n\n /** The format of the key in the response (KEYFORMAT). Identifies the DRM system, e.g. FairPlay. */\n readonly keyFormat?: string\n\n /** A slash-separated list of integers indicating compatible key format versions (KEYFORMATVERSIONS). */\n readonly keyFormatVersions?: string\n}\n\n/**\n * The encryption method for an HLS segment (EXT-X-KEY METHOD attribute).\n *\n * @see https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.2.4\n */\nexport type EncryptionMethod =\n | 'NONE'\n | 'AES-128'\n | 'SAMPLE-AES'\n | 'SAMPLE-AES-CTR'\n\nexport const encryptionMethodValidator: ValueSchema<EncryptionMethod> = /* @__PURE__ */ isOneOf(\n 'NONE',\n 'AES-128',\n 'SAMPLE-AES',\n 'SAMPLE-AES-CTR'\n)\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ValueSchema } from '@amazon/vinyl-validation'\nimport { isOneOf } from '@amazon/vinyl-validation'\n\n/**\n * An alternative rendition defined by EXT-X-MEDIA in an HLS Master Playlist.\n *\n * Alternative renditions allow a presentation to offer multiple versions of the same content,\n * such as audio in different languages or subtitles, that can be selected independently of the\n * variant stream.\n *\n * @see https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.4.1\n */\nexport interface AlternativeRendition {\n /** The media type of this rendition (AUDIO, VIDEO, SUBTITLES, or CLOSED-CAPTIONS). */\n readonly type: RenditionType\n\n /** The group to which this rendition belongs (GROUP-ID). Variants reference groups to associate renditions. */\n readonly groupId: string\n\n /** A human-readable description of this rendition (NAME). */\n readonly name: string\n\n /** The URI of the Media Playlist for this rendition. Absent for CLOSED-CAPTIONS or when muxed into the variant. */\n readonly uri?: string\n\n /** The primary language of this rendition as a BCP 47 tag (LANGUAGE). */\n readonly language?: string\n\n /** Whether this rendition should be played when the user has not expressed a preference (DEFAULT). */\n readonly default?: boolean\n\n /** Whether the client may choose to play this rendition without explicit user selection (AUTOSELECT). */\n readonly autoSelect?: boolean\n}\n\n/**\n * The media type of an alternative rendition (EXT-X-MEDIA TYPE attribute).\n *\n * @see https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.4.1\n */\nexport type RenditionType = 'AUDIO' | 'VIDEO' | 'SUBTITLES' | 'CLOSED-CAPTIONS'\n\nexport const renditionTypeValidator: ValueSchema<RenditionType> = /* @__PURE__ */ isOneOf(\n 'AUDIO',\n 'VIDEO',\n 'SUBTITLES',\n 'CLOSED-CAPTIONS'\n)\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { char, isWhitespaceChar, type StringReader } from '@amazon/vinyl-util'\n\nconst LF = /* @__PURE__ */ char('\\n')\nconst CR = /* @__PURE__ */ char('\\r')\n\n/**\n * Reads a line from the StringReader, advancing past the line ending.\n * Returns the line content without the line ending.\n */\nexport function readLine(reader: StringReader): string {\n const line = reader.substringUntil((cc) => cc === LF || cc === CR)\n if (reader.hasNext() && reader.peek === CR) reader.next()\n if (reader.hasNext() && reader.peek === LF) reader.next()\n return line\n}\n\n/**\n * Skips whitespace-only content at the current position up to and including\n * the next line ending. Returns true if a whitespace-only line was skipped.\n */\nexport function skipWhitespaceLine(reader: StringReader): boolean {\n const start = reader.position\n reader.while((cc) => isWhitespaceChar(cc) && cc !== LF && cc !== CR)\n if (!reader.hasNext() || reader.peek === LF || reader.peek === CR) {\n if (reader.hasNext()) {\n if (reader.peek === CR) reader.next()\n if (reader.hasNext() && reader.peek === LF) reader.next()\n }\n return true\n }\n reader.position = start\n return false\n}\n\n/**\n * Conditionally adds properties from an attribute map to an object.\n * Only adds a property if the corresponding attribute key exists and is truthy.\n */\nexport function addIfPresent<T extends Record<string, any>>(\n obj: T,\n attrs: Record<string, string>,\n mappings: Record<string, string>\n): T {\n for (const [attrKey, objKey] of Object.entries(mappings)) {\n if (attrs[attrKey]) {\n ;(obj as any)[objKey] = attrs[attrKey]\n }\n }\n return obj\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { StringReader, substitute } from '@amazon/vinyl-util'\nimport type { EncryptionKey } from '../types/EncryptionKey'\nimport { encryptionMethodValidator } from '../types/EncryptionKey'\nimport type { HlsSegment, HlsMap } from '../types/HlsSegment'\nimport type { MediaPlaylist } from '../types/MediaPlaylist'\nimport { parseAttributes } from './parseAttributes'\nimport { readLine, skipWhitespaceLine, addIfPresent } from './parseUtil'\n\nexport const HLS_VARIABLE_PATTERN = /\\{\\$([^}]+)}/g\n\nconst EXTM3U = '#EXTM3U'\nconst EXTINF = '#EXTINF:'\nconst EXT_X_TARGETDURATION = '#EXT-X-TARGETDURATION:'\nconst EXT_X_MEDIA_SEQUENCE = '#EXT-X-MEDIA-SEQUENCE:'\nconst EXT_X_ENDLIST = '#EXT-X-ENDLIST'\nconst EXT_X_PLAYLIST_TYPE = '#EXT-X-PLAYLIST-TYPE:'\nconst EXT_X_VERSION = '#EXT-X-VERSION:'\nconst EXT_X_KEY = '#EXT-X-KEY:'\nconst EXT_X_BYTERANGE = '#EXT-X-BYTERANGE:'\nconst EXT_X_DISCONTINUITY = '#EXT-X-DISCONTINUITY'\nconst EXT_X_PROGRAM_DATE_TIME = '#EXT-X-PROGRAM-DATE-TIME:'\nconst EXT_X_MAP = '#EXT-X-MAP:'\n\n/**\n * Parses an HLS media playlist from M3U8 text.\n *\n * @param text The raw M3U8 manifest string.\n * @param variables Optional variable definitions from the master playlist's #EXT-X-DEFINE tags.\n * @returns A readonly MediaPlaylist structure.\n * @throws StringParseError if the manifest is malformed.\n */\nexport function parseMediaPlaylist(\n text: string,\n variables?: Readonly<Record<string, string>>\n): MediaPlaylist {\n const reader = new StringReader(text)\n\n reader.white()\n if (!reader.stringIf(EXTM3U)) {\n reader.err('Expected #EXTM3U')\n }\n readLine(reader)\n\n let version = 1\n let targetDuration = 0\n let mediaSequence = 0\n let playlistType: 'VOD' | 'EVENT' | 'LIVE' = 'LIVE'\n let ended = false\n\n let currentKey: EncryptionKey | undefined\n let currentMap: HlsMap | undefined\n let pendingByteRange: { length: number; offset: number } | undefined\n let pendingDiscontinuity = false\n let pendingDateTime: string | undefined\n\n const segments: HlsSegment[] = []\n let sequenceCounter = 0\n\n while (reader.hasNext()) {\n if (skipWhitespaceLine(reader)) continue\n\n const line = readLine(reader)\n const trimmed = line.trim()\n if (!trimmed) continue\n\n if (trimmed.startsWith(EXTINF)) {\n const durationStr = trimmed.substring(EXTINF.length).split(',')[0]\n const duration = Number(durationStr)\n\n // Find the URI, skipping any tags that come between EXTINF and URI\n let uri = ''\n while (reader.hasNext()) {\n if (skipWhitespaceLine(reader)) continue\n const nextLine = readLine(reader).trim()\n if (!nextLine.startsWith('#')) {\n uri = variables\n ? substitute(nextLine, variables, HLS_VARIABLE_PATTERN)\n : nextLine\n break\n }\n // Process tags that come between EXTINF and URI\n if (nextLine.startsWith(EXT_X_BYTERANGE)) {\n const rangeStr = nextLine.substring(EXT_X_BYTERANGE.length)\n pendingByteRange = parseByteRangeString(rangeStr)\n } else if (nextLine === EXT_X_DISCONTINUITY) {\n pendingDiscontinuity = true\n } else if (nextLine.startsWith(EXT_X_PROGRAM_DATE_TIME)) {\n pendingDateTime = nextLine.substring(\n EXT_X_PROGRAM_DATE_TIME.length\n )\n } else if (nextLine.startsWith(EXT_X_MAP)) {\n const attrStr = nextLine.substring(EXT_X_MAP.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n const mapUri = attrs['URI']\n if (mapUri) {\n const byteRangeStr = attrs['BYTERANGE']\n currentMap = {\n uri: mapUri,\n ...(byteRangeStr && {\n byteRange: parseByteRangeString(byteRangeStr),\n }),\n }\n }\n }\n }\n\n segments.push({\n uri,\n duration,\n sequenceNumber: mediaSequence + sequenceCounter,\n ...(currentKey && { key: currentKey }),\n ...(currentMap && { map: currentMap }),\n ...(pendingByteRange && { byteRange: pendingByteRange }),\n discontinuity: pendingDiscontinuity,\n ...(pendingDateTime && { programDateTime: pendingDateTime }),\n })\n\n sequenceCounter++\n pendingByteRange = undefined\n pendingDiscontinuity = false\n pendingDateTime = undefined\n } else if (trimmed.startsWith(EXT_X_TARGETDURATION)) {\n targetDuration = Number(\n trimmed.substring(EXT_X_TARGETDURATION.length)\n )\n } else if (trimmed.startsWith(EXT_X_MEDIA_SEQUENCE)) {\n mediaSequence = Number(\n trimmed.substring(EXT_X_MEDIA_SEQUENCE.length)\n )\n } else if (trimmed === EXT_X_ENDLIST) {\n ended = true\n } else if (trimmed.startsWith(EXT_X_PLAYLIST_TYPE)) {\n const val = trimmed.substring(EXT_X_PLAYLIST_TYPE.length).trim()\n if (val === 'VOD' || val === 'EVENT') {\n playlistType = val\n }\n } else if (trimmed.startsWith(EXT_X_VERSION)) {\n version = Number(trimmed.substring(EXT_X_VERSION.length))\n } else if (trimmed.startsWith(EXT_X_KEY)) {\n const attrStr = trimmed.substring(EXT_X_KEY.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n\n const method = attrs['METHOD']\n encryptionMethodValidator.assert(method)\n\n currentKey = addIfPresent(\n {\n method,\n },\n attrs,\n {\n URI: 'uri',\n IV: 'iv',\n KEYFORMAT: 'keyFormat',\n KEYFORMATVERSIONS: 'keyFormatVersions',\n }\n )\n } else if (trimmed.startsWith(EXT_X_MAP)) {\n const attrStr = trimmed.substring(EXT_X_MAP.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n\n const mapUri = attrs['URI']\n if (mapUri) {\n const byteRangeStr = attrs['BYTERANGE']\n currentMap = {\n uri: mapUri,\n ...(byteRangeStr && {\n byteRange: parseByteRangeString(byteRangeStr),\n }),\n }\n }\n } else if (trimmed.startsWith(EXT_X_BYTERANGE)) {\n const rangeStr = trimmed.substring(EXT_X_BYTERANGE.length)\n pendingByteRange = parseByteRangeString(rangeStr)\n } else if (trimmed === EXT_X_DISCONTINUITY) {\n pendingDiscontinuity = true\n } else if (trimmed.startsWith(EXT_X_PROGRAM_DATE_TIME)) {\n pendingDateTime = trimmed.substring(EXT_X_PROGRAM_DATE_TIME.length)\n }\n // Unrecognized tags and comments are silently skipped\n }\n\n return {\n version,\n targetDuration,\n mediaSequence,\n playlistType,\n ended,\n segments,\n }\n}\n\n/**\n * Parses a byte range string (e.g. \"1000@500\" or \"1000\") into length and offset.\n */\nfunction parseByteRangeString(str: string): {\n length: number\n offset: number\n} {\n const parts = str.split('@')\n return {\n length: Number(parts[0]),\n offset: parts.length > 1 ? Number(parts[1]) : 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 type { StringReader } from '@amazon/vinyl-util'\nimport { char } from '@amazon/vinyl-util'\n\nconst EQUALS = /* @__PURE__ */ char('=')\nconst COMMA = /* @__PURE__ */ char(',')\nconst QUOTE = /* @__PURE__ */ char('\"')\n\n/**\n * Parses an HLS attribute list (e.g. `KEY=VALUE,KEY=\"quoted,value\"`) using\n * StringReader cursor-based parsing. Handles quoted values with embedded commas.\n */\nexport function parseAttributes(reader: StringReader): Record<string, string> {\n const attrs: Record<string, string> = {}\n\n while (\n reader.hasNext() &&\n reader.peek !== char('\\n') &&\n reader.peek !== char('\\r')\n ) {\n const key = reader.substringUntilChar(EQUALS)\n if (!key || !reader.hasNext()) break\n reader.next() // skip '='\n\n let value: string\n if (reader.peek === QUOTE) {\n reader.next() // skip opening quote\n value = reader.substringUntilChar(QUOTE)\n if (reader.hasNext()) reader.next() // skip closing quote\n } else {\n value = reader.substringUntil(\n (cc) => cc === COMMA || cc === char('\\n') || cc === char('\\r')\n )\n }\n\n attrs[key] = value\n\n if (reader.hasNext() && reader.peek === COMMA) {\n reader.next() // skip ','\n }\n }\n\n return attrs\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { StringReader, substitute, ValidationError } from '@amazon/vinyl-util'\nimport type { AlternativeRendition } from '../types/AlternativeRendition'\nimport { renditionTypeValidator } from '../types/AlternativeRendition'\nimport type { MainPlaylist } from '../types/MainPlaylist'\nimport type { SessionData } from '../types/SessionData'\nimport type { VariantStream } from '../types/VariantStream'\nimport { HLS_VARIABLE_PATTERN } from './parseMediaPlaylist'\nimport { parseAttributes } from './parseAttributes'\nimport { readLine, skipWhitespaceLine, addIfPresent } from './parseUtil'\n\nconst EXTM3U = '#EXTM3U'\nconst EXT_X_STREAM_INF = '#EXT-X-STREAM-INF:'\nconst EXT_X_MEDIA = '#EXT-X-MEDIA:'\nconst EXT_X_SESSION_DATA = '#EXT-X-SESSION-DATA:'\nconst EXT_X_DEFINE = '#EXT-X-DEFINE:'\n\n/**\n * Parses an HLS master playlist from M3U8 text.\n *\n * @param text The raw M3U8 manifest string.\n * @returns A readonly MainPlaylist structure.\n * @throws StringParseError if the manifest is malformed.\n */\nexport function parseMainPlaylist(text: string): MainPlaylist {\n const reader = new StringReader(text)\n\n reader.white()\n if (!reader.stringIf(EXTM3U)) {\n reader.err('Expected #EXTM3U')\n }\n // Advance past the rest of the #EXTM3U line\n readLine(reader)\n\n const variants: VariantStream[] = []\n const alternativeRenditions: AlternativeRendition[] = []\n const sessionData: SessionData[] = []\n const defines: Record<string, string> = {}\n\n while (reader.hasNext()) {\n if (skipWhitespaceLine(reader)) continue\n\n const line = readLine(reader)\n const trimmed = line.trim()\n if (!trimmed) continue\n\n if (trimmed.startsWith(EXT_X_STREAM_INF)) {\n const attrStr = trimmed.substring(EXT_X_STREAM_INF.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n\n // Next non-empty line is the URI\n let uri = ''\n while (reader.hasNext()) {\n if (skipWhitespaceLine(reader)) continue\n uri = readLine(reader).trim()\n break\n }\n\n variants.push(\n addIfPresent(\n {\n bandwidth: Number(attrs['BANDWIDTH']),\n uri: substituteHlsVariables(uri, defines),\n ...(attrs['FRAME-RATE'] && {\n frameRate: Number(attrs['FRAME-RATE']),\n }),\n ...(attrs.RESOLUTION &&\n parseResolution(attrs.RESOLUTION)),\n },\n attrs,\n {\n CODECS: 'codecs',\n AUDIO: 'audioGroup',\n VIDEO: 'videoGroup',\n SUBTITLES: 'subtitlesGroup',\n 'CLOSED-CAPTIONS': 'closedCaptionsGroup',\n }\n )\n )\n } else if (trimmed.startsWith(EXT_X_MEDIA)) {\n const attrStr = trimmed.substring(EXT_X_MEDIA.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n\n const type = attrs['TYPE']\n renditionTypeValidator.assert(type)\n\n if (attrs['URI']) {\n attrs['URI'] = substituteHlsVariables(attrs['URI'], defines)\n }\n\n alternativeRenditions.push(\n addIfPresent(\n {\n type,\n groupId: attrs['GROUP-ID'],\n name: attrs['NAME'],\n ...(attrs['DEFAULT'] && {\n default: attrs['DEFAULT'] === 'YES',\n }),\n ...(attrs['AUTOSELECT'] && {\n autoSelect: attrs['AUTOSELECT'] === 'YES',\n }),\n },\n attrs,\n {\n URI: 'uri',\n LANGUAGE: 'language',\n }\n )\n )\n } else if (trimmed.startsWith(EXT_X_SESSION_DATA)) {\n const attrStr = trimmed.substring(EXT_X_SESSION_DATA.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n\n sessionData.push(\n addIfPresent(\n {\n dataId: attrs['DATA-ID'],\n },\n attrs,\n {\n VALUE: 'value',\n URI: 'uri',\n LANGUAGE: 'language',\n }\n )\n )\n } else if (trimmed.startsWith(EXT_X_DEFINE)) {\n const attrStr = trimmed.substring(EXT_X_DEFINE.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n if (attrs['NAME'] && attrs['VALUE']) {\n defines[attrs['NAME']] = attrs['VALUE']\n }\n }\n // Unrecognized tags and comments are silently skipped\n }\n\n return { variants, alternativeRenditions, sessionData, defines }\n}\n\n/**\n * Applies EXT-X-DEFINE variable substitution (per RFC 8216 \u00A74.2) to a manifest\n * value, replacing `{$NAME}` tokens with the values declared earlier in the\n * playlist. Returns the input unchanged when no variables have been declared.\n */\nfunction substituteHlsVariables(\n value: string,\n variables: Readonly<Record<string, string>>\n): string {\n if (!value || Object.keys(variables).length === 0) return value\n return substitute(value, variables, HLS_VARIABLE_PATTERN)\n}\n\n/**\n * Parses a resolution string (e.g., \"1920x1080\") into width and height numbers.\n * Throws ValidationError for invalid formats per HLS spec.\n */\nfunction parseResolution(resolution: string): {\n width: number\n height: number\n} {\n const parts = resolution.split('x')\n if (parts.length !== 2) {\n throw new ValidationError(\n 'Invalid resolution format, expected WIDTHxHEIGHT'\n )\n }\n\n const width = Number(parts[0])\n const height = Number(parts[1])\n\n if (\n !Number.isInteger(width) ||\n !Number.isInteger(height) ||\n width <= 0 ||\n height <= 0\n ) {\n throw new ValidationError(\n 'Invalid resolution values, width and height must be positive integers'\n )\n }\n\n return { width, height }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_vinyl_validation", "import_vinyl_util", "import_vinyl_util", "import_vinyl_util", "EXTM3U"]
7
7
  }
package/dist/index.js CHANGED
@@ -260,7 +260,7 @@ function parseByteRangeString(str) {
260
260
  }
261
261
 
262
262
  // src/parse/parseMainPlaylist.ts
263
- import { StringReader as StringReader2, ValidationError } from "@amazon/vinyl-util";
263
+ import { StringReader as StringReader2, substitute as substitute2, ValidationError } from "@amazon/vinyl-util";
264
264
  var EXTM3U2 = "#EXTM3U";
265
265
  var EXT_X_STREAM_INF = "#EXT-X-STREAM-INF:";
266
266
  var EXT_X_MEDIA = "#EXT-X-MEDIA:";
@@ -296,7 +296,7 @@ function parseMainPlaylist(text) {
296
296
  addIfPresent(
297
297
  __spreadValues(__spreadValues({
298
298
  bandwidth: Number(attrs["BANDWIDTH"]),
299
- uri
299
+ uri: substituteHlsVariables(uri, defines)
300
300
  }, attrs["FRAME-RATE"] && {
301
301
  frameRate: Number(attrs["FRAME-RATE"])
302
302
  }), attrs.RESOLUTION && parseResolution(attrs.RESOLUTION)),
@@ -316,6 +316,9 @@ function parseMainPlaylist(text) {
316
316
  const attrs = parseAttributes(attrReader);
317
317
  const type = attrs["TYPE"];
318
318
  renditionTypeValidator.assert(type);
319
+ if (attrs["URI"]) {
320
+ attrs["URI"] = substituteHlsVariables(attrs["URI"], defines);
321
+ }
319
322
  alternativeRenditions.push(
320
323
  addIfPresent(
321
324
  __spreadValues(__spreadValues({
@@ -362,6 +365,10 @@ function parseMainPlaylist(text) {
362
365
  }
363
366
  return { variants, alternativeRenditions, sessionData, defines };
364
367
  }
368
+ function substituteHlsVariables(value, variables) {
369
+ if (!value || Object.keys(variables).length === 0) return value;
370
+ return substitute2(value, variables, HLS_VARIABLE_PATTERN);
371
+ }
365
372
  function parseResolution(resolution) {
366
373
  const parts = resolution.split("x");
367
374
  if (parts.length !== 2) {
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/types/EncryptionKey.ts", "../src/types/AlternativeRendition.ts", "../src/parse/parseUtil.ts", "../src/parse/parseMediaPlaylist.ts", "../src/parse/parseAttributes.ts", "../src/parse/parseMainPlaylist.ts"],
4
- "sourcesContent": ["/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ValueSchema } from '@amazon/vinyl-validation'\nimport { isOneOf } from '@amazon/vinyl-validation'\n\n/**\n * Encryption key metadata for an HLS media segment (EXT-X-KEY).\n *\n * Specifies how media segments are encrypted and provides the information needed to decrypt them.\n *\n * @see https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.2.4\n */\nexport interface EncryptionKey {\n /** The encryption method applied to media segments (METHOD). */\n readonly method: EncryptionMethod\n\n /** The URI for obtaining the decryption key (URI). Required unless method is NONE. */\n readonly uri?: string\n\n /** The initialization vector for decryption as a hexadecimal string (IV). */\n readonly iv?: string\n\n /** The format of the key in the response (KEYFORMAT). Identifies the DRM system, e.g. FairPlay. */\n readonly keyFormat?: string\n\n /** A slash-separated list of integers indicating compatible key format versions (KEYFORMATVERSIONS). */\n readonly keyFormatVersions?: string\n}\n\n/**\n * The encryption method for an HLS segment (EXT-X-KEY METHOD attribute).\n *\n * @see https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.2.4\n */\nexport type EncryptionMethod =\n | 'NONE'\n | 'AES-128'\n | 'SAMPLE-AES'\n | 'SAMPLE-AES-CTR'\n\nexport const encryptionMethodValidator: ValueSchema<EncryptionMethod> = /* @__PURE__ */ isOneOf(\n 'NONE',\n 'AES-128',\n 'SAMPLE-AES',\n 'SAMPLE-AES-CTR'\n)\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ValueSchema } from '@amazon/vinyl-validation'\nimport { isOneOf } from '@amazon/vinyl-validation'\n\n/**\n * An alternative rendition defined by EXT-X-MEDIA in an HLS Master Playlist.\n *\n * Alternative renditions allow a presentation to offer multiple versions of the same content,\n * such as audio in different languages or subtitles, that can be selected independently of the\n * variant stream.\n *\n * @see https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.4.1\n */\nexport interface AlternativeRendition {\n /** The media type of this rendition (AUDIO, VIDEO, SUBTITLES, or CLOSED-CAPTIONS). */\n readonly type: RenditionType\n\n /** The group to which this rendition belongs (GROUP-ID). Variants reference groups to associate renditions. */\n readonly groupId: string\n\n /** A human-readable description of this rendition (NAME). */\n readonly name: string\n\n /** The URI of the Media Playlist for this rendition. Absent for CLOSED-CAPTIONS or when muxed into the variant. */\n readonly uri?: string\n\n /** The primary language of this rendition as a BCP 47 tag (LANGUAGE). */\n readonly language?: string\n\n /** Whether this rendition should be played when the user has not expressed a preference (DEFAULT). */\n readonly default?: boolean\n\n /** Whether the client may choose to play this rendition without explicit user selection (AUTOSELECT). */\n readonly autoSelect?: boolean\n}\n\n/**\n * The media type of an alternative rendition (EXT-X-MEDIA TYPE attribute).\n *\n * @see https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.4.1\n */\nexport type RenditionType = 'AUDIO' | 'VIDEO' | 'SUBTITLES' | 'CLOSED-CAPTIONS'\n\nexport const renditionTypeValidator: ValueSchema<RenditionType> = /* @__PURE__ */ isOneOf(\n 'AUDIO',\n 'VIDEO',\n 'SUBTITLES',\n 'CLOSED-CAPTIONS'\n)\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { char, isWhitespaceChar, type StringReader } from '@amazon/vinyl-util'\n\nconst LF = /* @__PURE__ */ char('\\n')\nconst CR = /* @__PURE__ */ char('\\r')\n\n/**\n * Reads a line from the StringReader, advancing past the line ending.\n * Returns the line content without the line ending.\n */\nexport function readLine(reader: StringReader): string {\n const line = reader.substringUntil((cc) => cc === LF || cc === CR)\n if (reader.hasNext() && reader.peek === CR) reader.next()\n if (reader.hasNext() && reader.peek === LF) reader.next()\n return line\n}\n\n/**\n * Skips whitespace-only content at the current position up to and including\n * the next line ending. Returns true if a whitespace-only line was skipped.\n */\nexport function skipWhitespaceLine(reader: StringReader): boolean {\n const start = reader.position\n reader.while((cc) => isWhitespaceChar(cc) && cc !== LF && cc !== CR)\n if (!reader.hasNext() || reader.peek === LF || reader.peek === CR) {\n if (reader.hasNext()) {\n if (reader.peek === CR) reader.next()\n if (reader.hasNext() && reader.peek === LF) reader.next()\n }\n return true\n }\n reader.position = start\n return false\n}\n\n/**\n * Conditionally adds properties from an attribute map to an object.\n * Only adds a property if the corresponding attribute key exists and is truthy.\n */\nexport function addIfPresent<T extends Record<string, any>>(\n obj: T,\n attrs: Record<string, string>,\n mappings: Record<string, string>\n): T {\n for (const [attrKey, objKey] of Object.entries(mappings)) {\n if (attrs[attrKey]) {\n ;(obj as any)[objKey] = attrs[attrKey]\n }\n }\n return obj\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { StringReader, substitute } from '@amazon/vinyl-util'\nimport type { EncryptionKey } from '@/types/EncryptionKey'\nimport { encryptionMethodValidator } from '@/types/EncryptionKey'\nimport type { HlsSegment, HlsMap } from '@/types/HlsSegment'\nimport type { MediaPlaylist } from '@/types/MediaPlaylist'\nimport { parseAttributes } from './parseAttributes'\nimport { readLine, skipWhitespaceLine, addIfPresent } from './parseUtil'\n\nexport const HLS_VARIABLE_PATTERN = /\\{\\$([^}]+)}/g\n\nconst EXTM3U = '#EXTM3U'\nconst EXTINF = '#EXTINF:'\nconst EXT_X_TARGETDURATION = '#EXT-X-TARGETDURATION:'\nconst EXT_X_MEDIA_SEQUENCE = '#EXT-X-MEDIA-SEQUENCE:'\nconst EXT_X_ENDLIST = '#EXT-X-ENDLIST'\nconst EXT_X_PLAYLIST_TYPE = '#EXT-X-PLAYLIST-TYPE:'\nconst EXT_X_VERSION = '#EXT-X-VERSION:'\nconst EXT_X_KEY = '#EXT-X-KEY:'\nconst EXT_X_BYTERANGE = '#EXT-X-BYTERANGE:'\nconst EXT_X_DISCONTINUITY = '#EXT-X-DISCONTINUITY'\nconst EXT_X_PROGRAM_DATE_TIME = '#EXT-X-PROGRAM-DATE-TIME:'\nconst EXT_X_MAP = '#EXT-X-MAP:'\n\n/**\n * Parses an HLS media playlist from M3U8 text.\n *\n * @param text The raw M3U8 manifest string.\n * @param variables Optional variable definitions from the master playlist's #EXT-X-DEFINE tags.\n * @returns A readonly MediaPlaylist structure.\n * @throws StringParseError if the manifest is malformed.\n */\nexport function parseMediaPlaylist(\n text: string,\n variables?: Readonly<Record<string, string>>\n): MediaPlaylist {\n const reader = new StringReader(text)\n\n reader.white()\n if (!reader.stringIf(EXTM3U)) {\n reader.err('Expected #EXTM3U')\n }\n readLine(reader)\n\n let version = 1\n let targetDuration = 0\n let mediaSequence = 0\n let playlistType: 'VOD' | 'EVENT' | 'LIVE' = 'LIVE'\n let ended = false\n\n let currentKey: EncryptionKey | undefined\n let currentMap: HlsMap | undefined\n let pendingByteRange: { length: number; offset: number } | undefined\n let pendingDiscontinuity = false\n let pendingDateTime: string | undefined\n\n const segments: HlsSegment[] = []\n let sequenceCounter = 0\n\n while (reader.hasNext()) {\n if (skipWhitespaceLine(reader)) continue\n\n const line = readLine(reader)\n const trimmed = line.trim()\n if (!trimmed) continue\n\n if (trimmed.startsWith(EXTINF)) {\n const durationStr = trimmed.substring(EXTINF.length).split(',')[0]\n const duration = Number(durationStr)\n\n // Find the URI, skipping any tags that come between EXTINF and URI\n let uri = ''\n while (reader.hasNext()) {\n if (skipWhitespaceLine(reader)) continue\n const nextLine = readLine(reader).trim()\n if (!nextLine.startsWith('#')) {\n uri = variables\n ? substitute(nextLine, variables, HLS_VARIABLE_PATTERN)\n : nextLine\n break\n }\n // Process tags that come between EXTINF and URI\n if (nextLine.startsWith(EXT_X_BYTERANGE)) {\n const rangeStr = nextLine.substring(EXT_X_BYTERANGE.length)\n pendingByteRange = parseByteRangeString(rangeStr)\n } else if (nextLine === EXT_X_DISCONTINUITY) {\n pendingDiscontinuity = true\n } else if (nextLine.startsWith(EXT_X_PROGRAM_DATE_TIME)) {\n pendingDateTime = nextLine.substring(\n EXT_X_PROGRAM_DATE_TIME.length\n )\n } else if (nextLine.startsWith(EXT_X_MAP)) {\n const attrStr = nextLine.substring(EXT_X_MAP.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n const mapUri = attrs['URI']\n if (mapUri) {\n const byteRangeStr = attrs['BYTERANGE']\n currentMap = {\n uri: mapUri,\n ...(byteRangeStr && {\n byteRange: parseByteRangeString(byteRangeStr),\n }),\n }\n }\n }\n }\n\n segments.push({\n uri,\n duration,\n sequenceNumber: mediaSequence + sequenceCounter,\n ...(currentKey && { key: currentKey }),\n ...(currentMap && { map: currentMap }),\n ...(pendingByteRange && { byteRange: pendingByteRange }),\n discontinuity: pendingDiscontinuity,\n ...(pendingDateTime && { programDateTime: pendingDateTime }),\n })\n\n sequenceCounter++\n pendingByteRange = undefined\n pendingDiscontinuity = false\n pendingDateTime = undefined\n } else if (trimmed.startsWith(EXT_X_TARGETDURATION)) {\n targetDuration = Number(\n trimmed.substring(EXT_X_TARGETDURATION.length)\n )\n } else if (trimmed.startsWith(EXT_X_MEDIA_SEQUENCE)) {\n mediaSequence = Number(\n trimmed.substring(EXT_X_MEDIA_SEQUENCE.length)\n )\n } else if (trimmed === EXT_X_ENDLIST) {\n ended = true\n } else if (trimmed.startsWith(EXT_X_PLAYLIST_TYPE)) {\n const val = trimmed.substring(EXT_X_PLAYLIST_TYPE.length).trim()\n if (val === 'VOD' || val === 'EVENT') {\n playlistType = val\n }\n } else if (trimmed.startsWith(EXT_X_VERSION)) {\n version = Number(trimmed.substring(EXT_X_VERSION.length))\n } else if (trimmed.startsWith(EXT_X_KEY)) {\n const attrStr = trimmed.substring(EXT_X_KEY.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n\n const method = attrs['METHOD']\n encryptionMethodValidator.assert(method)\n\n currentKey = addIfPresent(\n {\n method,\n },\n attrs,\n {\n URI: 'uri',\n IV: 'iv',\n KEYFORMAT: 'keyFormat',\n KEYFORMATVERSIONS: 'keyFormatVersions',\n }\n )\n } else if (trimmed.startsWith(EXT_X_MAP)) {\n const attrStr = trimmed.substring(EXT_X_MAP.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n\n const mapUri = attrs['URI']\n if (mapUri) {\n const byteRangeStr = attrs['BYTERANGE']\n currentMap = {\n uri: mapUri,\n ...(byteRangeStr && {\n byteRange: parseByteRangeString(byteRangeStr),\n }),\n }\n }\n } else if (trimmed.startsWith(EXT_X_BYTERANGE)) {\n const rangeStr = trimmed.substring(EXT_X_BYTERANGE.length)\n pendingByteRange = parseByteRangeString(rangeStr)\n } else if (trimmed === EXT_X_DISCONTINUITY) {\n pendingDiscontinuity = true\n } else if (trimmed.startsWith(EXT_X_PROGRAM_DATE_TIME)) {\n pendingDateTime = trimmed.substring(EXT_X_PROGRAM_DATE_TIME.length)\n }\n // Unrecognized tags and comments are silently skipped\n }\n\n return {\n version,\n targetDuration,\n mediaSequence,\n playlistType,\n ended,\n segments,\n }\n}\n\n/**\n * Parses a byte range string (e.g. \"1000@500\" or \"1000\") into length and offset.\n */\nfunction parseByteRangeString(str: string): {\n length: number\n offset: number\n} {\n const parts = str.split('@')\n return {\n length: Number(parts[0]),\n offset: parts.length > 1 ? Number(parts[1]) : 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 type { StringReader } from '@amazon/vinyl-util'\nimport { char } from '@amazon/vinyl-util'\n\nconst EQUALS = /* @__PURE__ */ char('=')\nconst COMMA = /* @__PURE__ */ char(',')\nconst QUOTE = /* @__PURE__ */ char('\"')\n\n/**\n * Parses an HLS attribute list (e.g. `KEY=VALUE,KEY=\"quoted,value\"`) using\n * StringReader cursor-based parsing. Handles quoted values with embedded commas.\n */\nexport function parseAttributes(reader: StringReader): Record<string, string> {\n const attrs: Record<string, string> = {}\n\n while (\n reader.hasNext() &&\n reader.peek !== char('\\n') &&\n reader.peek !== char('\\r')\n ) {\n const key = reader.substringUntilChar(EQUALS)\n if (!key || !reader.hasNext()) break\n reader.next() // skip '='\n\n let value: string\n if (reader.peek === QUOTE) {\n reader.next() // skip opening quote\n value = reader.substringUntilChar(QUOTE)\n if (reader.hasNext()) reader.next() // skip closing quote\n } else {\n value = reader.substringUntil(\n (cc) => cc === COMMA || cc === char('\\n') || cc === char('\\r')\n )\n }\n\n attrs[key] = value\n\n if (reader.hasNext() && reader.peek === COMMA) {\n reader.next() // skip ','\n }\n }\n\n return attrs\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { StringReader, ValidationError } from '@amazon/vinyl-util'\nimport type { AlternativeRendition } from '@/types/AlternativeRendition'\nimport { renditionTypeValidator } from '@/types/AlternativeRendition'\nimport type { MainPlaylist } from '@/types/MainPlaylist'\nimport type { SessionData } from '@/types/SessionData'\nimport type { VariantStream } from '@/types/VariantStream'\nimport { parseAttributes } from './parseAttributes'\nimport { readLine, skipWhitespaceLine, addIfPresent } from './parseUtil'\n\nconst EXTM3U = '#EXTM3U'\nconst EXT_X_STREAM_INF = '#EXT-X-STREAM-INF:'\nconst EXT_X_MEDIA = '#EXT-X-MEDIA:'\nconst EXT_X_SESSION_DATA = '#EXT-X-SESSION-DATA:'\nconst EXT_X_DEFINE = '#EXT-X-DEFINE:'\n\n/**\n * Parses an HLS master playlist from M3U8 text.\n *\n * @param text The raw M3U8 manifest string.\n * @returns A readonly MainPlaylist structure.\n * @throws StringParseError if the manifest is malformed.\n */\nexport function parseMainPlaylist(text: string): MainPlaylist {\n const reader = new StringReader(text)\n\n reader.white()\n if (!reader.stringIf(EXTM3U)) {\n reader.err('Expected #EXTM3U')\n }\n // Advance past the rest of the #EXTM3U line\n readLine(reader)\n\n const variants: VariantStream[] = []\n const alternativeRenditions: AlternativeRendition[] = []\n const sessionData: SessionData[] = []\n const defines: Record<string, string> = {}\n\n while (reader.hasNext()) {\n if (skipWhitespaceLine(reader)) continue\n\n const line = readLine(reader)\n const trimmed = line.trim()\n if (!trimmed) continue\n\n if (trimmed.startsWith(EXT_X_STREAM_INF)) {\n const attrStr = trimmed.substring(EXT_X_STREAM_INF.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n\n // Next non-empty line is the URI\n let uri = ''\n while (reader.hasNext()) {\n if (skipWhitespaceLine(reader)) continue\n uri = readLine(reader).trim()\n break\n }\n\n variants.push(\n addIfPresent(\n {\n bandwidth: Number(attrs['BANDWIDTH']),\n uri,\n ...(attrs['FRAME-RATE'] && {\n frameRate: Number(attrs['FRAME-RATE']),\n }),\n ...(attrs.RESOLUTION &&\n parseResolution(attrs.RESOLUTION)),\n },\n attrs,\n {\n CODECS: 'codecs',\n AUDIO: 'audioGroup',\n VIDEO: 'videoGroup',\n SUBTITLES: 'subtitlesGroup',\n 'CLOSED-CAPTIONS': 'closedCaptionsGroup',\n }\n )\n )\n } else if (trimmed.startsWith(EXT_X_MEDIA)) {\n const attrStr = trimmed.substring(EXT_X_MEDIA.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n\n const type = attrs['TYPE']\n renditionTypeValidator.assert(type)\n\n alternativeRenditions.push(\n addIfPresent(\n {\n type,\n groupId: attrs['GROUP-ID'],\n name: attrs['NAME'],\n ...(attrs['DEFAULT'] && {\n default: attrs['DEFAULT'] === 'YES',\n }),\n ...(attrs['AUTOSELECT'] && {\n autoSelect: attrs['AUTOSELECT'] === 'YES',\n }),\n },\n attrs,\n {\n URI: 'uri',\n LANGUAGE: 'language',\n }\n )\n )\n } else if (trimmed.startsWith(EXT_X_SESSION_DATA)) {\n const attrStr = trimmed.substring(EXT_X_SESSION_DATA.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n\n sessionData.push(\n addIfPresent(\n {\n dataId: attrs['DATA-ID'],\n },\n attrs,\n {\n VALUE: 'value',\n URI: 'uri',\n LANGUAGE: 'language',\n }\n )\n )\n } else if (trimmed.startsWith(EXT_X_DEFINE)) {\n const attrStr = trimmed.substring(EXT_X_DEFINE.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n if (attrs['NAME'] && attrs['VALUE']) {\n defines[attrs['NAME']] = attrs['VALUE']\n }\n }\n // Unrecognized tags and comments are silently skipped\n }\n\n return { variants, alternativeRenditions, sessionData, defines }\n}\n\n/**\n * Parses a resolution string (e.g., \"1920x1080\") into width and height numbers.\n * Throws ValidationError for invalid formats per HLS spec.\n */\nfunction parseResolution(resolution: string): {\n width: number\n height: number\n} {\n const parts = resolution.split('x')\n if (parts.length !== 2) {\n throw new ValidationError(\n 'Invalid resolution format, expected WIDTHxHEIGHT'\n )\n }\n\n const width = Number(parts[0])\n const height = Number(parts[1])\n\n if (\n !Number.isInteger(width) ||\n !Number.isInteger(height) ||\n width <= 0 ||\n height <= 0\n ) {\n throw new ValidationError(\n 'Invalid resolution values, width and height must be positive integers'\n )\n }\n\n return { width, height }\n}\n"],
5
- "mappings": "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",
6
- "names": ["isOneOf", "char", "StringReader", "EXTM3U", "StringReader"]
4
+ "sourcesContent": ["/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ValueSchema } from '@amazon/vinyl-validation'\nimport { isOneOf } from '@amazon/vinyl-validation'\n\n/**\n * Encryption key metadata for an HLS media segment (EXT-X-KEY).\n *\n * Specifies how media segments are encrypted and provides the information needed to decrypt them.\n *\n * @see https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.2.4\n */\nexport interface EncryptionKey {\n /** The encryption method applied to media segments (METHOD). */\n readonly method: EncryptionMethod\n\n /** The URI for obtaining the decryption key (URI). Required unless method is NONE. */\n readonly uri?: string\n\n /** The initialization vector for decryption as a hexadecimal string (IV). */\n readonly iv?: string\n\n /** The format of the key in the response (KEYFORMAT). Identifies the DRM system, e.g. FairPlay. */\n readonly keyFormat?: string\n\n /** A slash-separated list of integers indicating compatible key format versions (KEYFORMATVERSIONS). */\n readonly keyFormatVersions?: string\n}\n\n/**\n * The encryption method for an HLS segment (EXT-X-KEY METHOD attribute).\n *\n * @see https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.2.4\n */\nexport type EncryptionMethod =\n | 'NONE'\n | 'AES-128'\n | 'SAMPLE-AES'\n | 'SAMPLE-AES-CTR'\n\nexport const encryptionMethodValidator: ValueSchema<EncryptionMethod> = /* @__PURE__ */ isOneOf(\n 'NONE',\n 'AES-128',\n 'SAMPLE-AES',\n 'SAMPLE-AES-CTR'\n)\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ValueSchema } from '@amazon/vinyl-validation'\nimport { isOneOf } from '@amazon/vinyl-validation'\n\n/**\n * An alternative rendition defined by EXT-X-MEDIA in an HLS Master Playlist.\n *\n * Alternative renditions allow a presentation to offer multiple versions of the same content,\n * such as audio in different languages or subtitles, that can be selected independently of the\n * variant stream.\n *\n * @see https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.4.1\n */\nexport interface AlternativeRendition {\n /** The media type of this rendition (AUDIO, VIDEO, SUBTITLES, or CLOSED-CAPTIONS). */\n readonly type: RenditionType\n\n /** The group to which this rendition belongs (GROUP-ID). Variants reference groups to associate renditions. */\n readonly groupId: string\n\n /** A human-readable description of this rendition (NAME). */\n readonly name: string\n\n /** The URI of the Media Playlist for this rendition. Absent for CLOSED-CAPTIONS or when muxed into the variant. */\n readonly uri?: string\n\n /** The primary language of this rendition as a BCP 47 tag (LANGUAGE). */\n readonly language?: string\n\n /** Whether this rendition should be played when the user has not expressed a preference (DEFAULT). */\n readonly default?: boolean\n\n /** Whether the client may choose to play this rendition without explicit user selection (AUTOSELECT). */\n readonly autoSelect?: boolean\n}\n\n/**\n * The media type of an alternative rendition (EXT-X-MEDIA TYPE attribute).\n *\n * @see https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.4.1\n */\nexport type RenditionType = 'AUDIO' | 'VIDEO' | 'SUBTITLES' | 'CLOSED-CAPTIONS'\n\nexport const renditionTypeValidator: ValueSchema<RenditionType> = /* @__PURE__ */ isOneOf(\n 'AUDIO',\n 'VIDEO',\n 'SUBTITLES',\n 'CLOSED-CAPTIONS'\n)\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { char, isWhitespaceChar, type StringReader } from '@amazon/vinyl-util'\n\nconst LF = /* @__PURE__ */ char('\\n')\nconst CR = /* @__PURE__ */ char('\\r')\n\n/**\n * Reads a line from the StringReader, advancing past the line ending.\n * Returns the line content without the line ending.\n */\nexport function readLine(reader: StringReader): string {\n const line = reader.substringUntil((cc) => cc === LF || cc === CR)\n if (reader.hasNext() && reader.peek === CR) reader.next()\n if (reader.hasNext() && reader.peek === LF) reader.next()\n return line\n}\n\n/**\n * Skips whitespace-only content at the current position up to and including\n * the next line ending. Returns true if a whitespace-only line was skipped.\n */\nexport function skipWhitespaceLine(reader: StringReader): boolean {\n const start = reader.position\n reader.while((cc) => isWhitespaceChar(cc) && cc !== LF && cc !== CR)\n if (!reader.hasNext() || reader.peek === LF || reader.peek === CR) {\n if (reader.hasNext()) {\n if (reader.peek === CR) reader.next()\n if (reader.hasNext() && reader.peek === LF) reader.next()\n }\n return true\n }\n reader.position = start\n return false\n}\n\n/**\n * Conditionally adds properties from an attribute map to an object.\n * Only adds a property if the corresponding attribute key exists and is truthy.\n */\nexport function addIfPresent<T extends Record<string, any>>(\n obj: T,\n attrs: Record<string, string>,\n mappings: Record<string, string>\n): T {\n for (const [attrKey, objKey] of Object.entries(mappings)) {\n if (attrs[attrKey]) {\n ;(obj as any)[objKey] = attrs[attrKey]\n }\n }\n return obj\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { StringReader, substitute } from '@amazon/vinyl-util'\nimport type { EncryptionKey } from '../types/EncryptionKey'\nimport { encryptionMethodValidator } from '../types/EncryptionKey'\nimport type { HlsSegment, HlsMap } from '../types/HlsSegment'\nimport type { MediaPlaylist } from '../types/MediaPlaylist'\nimport { parseAttributes } from './parseAttributes'\nimport { readLine, skipWhitespaceLine, addIfPresent } from './parseUtil'\n\nexport const HLS_VARIABLE_PATTERN = /\\{\\$([^}]+)}/g\n\nconst EXTM3U = '#EXTM3U'\nconst EXTINF = '#EXTINF:'\nconst EXT_X_TARGETDURATION = '#EXT-X-TARGETDURATION:'\nconst EXT_X_MEDIA_SEQUENCE = '#EXT-X-MEDIA-SEQUENCE:'\nconst EXT_X_ENDLIST = '#EXT-X-ENDLIST'\nconst EXT_X_PLAYLIST_TYPE = '#EXT-X-PLAYLIST-TYPE:'\nconst EXT_X_VERSION = '#EXT-X-VERSION:'\nconst EXT_X_KEY = '#EXT-X-KEY:'\nconst EXT_X_BYTERANGE = '#EXT-X-BYTERANGE:'\nconst EXT_X_DISCONTINUITY = '#EXT-X-DISCONTINUITY'\nconst EXT_X_PROGRAM_DATE_TIME = '#EXT-X-PROGRAM-DATE-TIME:'\nconst EXT_X_MAP = '#EXT-X-MAP:'\n\n/**\n * Parses an HLS media playlist from M3U8 text.\n *\n * @param text The raw M3U8 manifest string.\n * @param variables Optional variable definitions from the master playlist's #EXT-X-DEFINE tags.\n * @returns A readonly MediaPlaylist structure.\n * @throws StringParseError if the manifest is malformed.\n */\nexport function parseMediaPlaylist(\n text: string,\n variables?: Readonly<Record<string, string>>\n): MediaPlaylist {\n const reader = new StringReader(text)\n\n reader.white()\n if (!reader.stringIf(EXTM3U)) {\n reader.err('Expected #EXTM3U')\n }\n readLine(reader)\n\n let version = 1\n let targetDuration = 0\n let mediaSequence = 0\n let playlistType: 'VOD' | 'EVENT' | 'LIVE' = 'LIVE'\n let ended = false\n\n let currentKey: EncryptionKey | undefined\n let currentMap: HlsMap | undefined\n let pendingByteRange: { length: number; offset: number } | undefined\n let pendingDiscontinuity = false\n let pendingDateTime: string | undefined\n\n const segments: HlsSegment[] = []\n let sequenceCounter = 0\n\n while (reader.hasNext()) {\n if (skipWhitespaceLine(reader)) continue\n\n const line = readLine(reader)\n const trimmed = line.trim()\n if (!trimmed) continue\n\n if (trimmed.startsWith(EXTINF)) {\n const durationStr = trimmed.substring(EXTINF.length).split(',')[0]\n const duration = Number(durationStr)\n\n // Find the URI, skipping any tags that come between EXTINF and URI\n let uri = ''\n while (reader.hasNext()) {\n if (skipWhitespaceLine(reader)) continue\n const nextLine = readLine(reader).trim()\n if (!nextLine.startsWith('#')) {\n uri = variables\n ? substitute(nextLine, variables, HLS_VARIABLE_PATTERN)\n : nextLine\n break\n }\n // Process tags that come between EXTINF and URI\n if (nextLine.startsWith(EXT_X_BYTERANGE)) {\n const rangeStr = nextLine.substring(EXT_X_BYTERANGE.length)\n pendingByteRange = parseByteRangeString(rangeStr)\n } else if (nextLine === EXT_X_DISCONTINUITY) {\n pendingDiscontinuity = true\n } else if (nextLine.startsWith(EXT_X_PROGRAM_DATE_TIME)) {\n pendingDateTime = nextLine.substring(\n EXT_X_PROGRAM_DATE_TIME.length\n )\n } else if (nextLine.startsWith(EXT_X_MAP)) {\n const attrStr = nextLine.substring(EXT_X_MAP.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n const mapUri = attrs['URI']\n if (mapUri) {\n const byteRangeStr = attrs['BYTERANGE']\n currentMap = {\n uri: mapUri,\n ...(byteRangeStr && {\n byteRange: parseByteRangeString(byteRangeStr),\n }),\n }\n }\n }\n }\n\n segments.push({\n uri,\n duration,\n sequenceNumber: mediaSequence + sequenceCounter,\n ...(currentKey && { key: currentKey }),\n ...(currentMap && { map: currentMap }),\n ...(pendingByteRange && { byteRange: pendingByteRange }),\n discontinuity: pendingDiscontinuity,\n ...(pendingDateTime && { programDateTime: pendingDateTime }),\n })\n\n sequenceCounter++\n pendingByteRange = undefined\n pendingDiscontinuity = false\n pendingDateTime = undefined\n } else if (trimmed.startsWith(EXT_X_TARGETDURATION)) {\n targetDuration = Number(\n trimmed.substring(EXT_X_TARGETDURATION.length)\n )\n } else if (trimmed.startsWith(EXT_X_MEDIA_SEQUENCE)) {\n mediaSequence = Number(\n trimmed.substring(EXT_X_MEDIA_SEQUENCE.length)\n )\n } else if (trimmed === EXT_X_ENDLIST) {\n ended = true\n } else if (trimmed.startsWith(EXT_X_PLAYLIST_TYPE)) {\n const val = trimmed.substring(EXT_X_PLAYLIST_TYPE.length).trim()\n if (val === 'VOD' || val === 'EVENT') {\n playlistType = val\n }\n } else if (trimmed.startsWith(EXT_X_VERSION)) {\n version = Number(trimmed.substring(EXT_X_VERSION.length))\n } else if (trimmed.startsWith(EXT_X_KEY)) {\n const attrStr = trimmed.substring(EXT_X_KEY.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n\n const method = attrs['METHOD']\n encryptionMethodValidator.assert(method)\n\n currentKey = addIfPresent(\n {\n method,\n },\n attrs,\n {\n URI: 'uri',\n IV: 'iv',\n KEYFORMAT: 'keyFormat',\n KEYFORMATVERSIONS: 'keyFormatVersions',\n }\n )\n } else if (trimmed.startsWith(EXT_X_MAP)) {\n const attrStr = trimmed.substring(EXT_X_MAP.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n\n const mapUri = attrs['URI']\n if (mapUri) {\n const byteRangeStr = attrs['BYTERANGE']\n currentMap = {\n uri: mapUri,\n ...(byteRangeStr && {\n byteRange: parseByteRangeString(byteRangeStr),\n }),\n }\n }\n } else if (trimmed.startsWith(EXT_X_BYTERANGE)) {\n const rangeStr = trimmed.substring(EXT_X_BYTERANGE.length)\n pendingByteRange = parseByteRangeString(rangeStr)\n } else if (trimmed === EXT_X_DISCONTINUITY) {\n pendingDiscontinuity = true\n } else if (trimmed.startsWith(EXT_X_PROGRAM_DATE_TIME)) {\n pendingDateTime = trimmed.substring(EXT_X_PROGRAM_DATE_TIME.length)\n }\n // Unrecognized tags and comments are silently skipped\n }\n\n return {\n version,\n targetDuration,\n mediaSequence,\n playlistType,\n ended,\n segments,\n }\n}\n\n/**\n * Parses a byte range string (e.g. \"1000@500\" or \"1000\") into length and offset.\n */\nfunction parseByteRangeString(str: string): {\n length: number\n offset: number\n} {\n const parts = str.split('@')\n return {\n length: Number(parts[0]),\n offset: parts.length > 1 ? Number(parts[1]) : 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 type { StringReader } from '@amazon/vinyl-util'\nimport { char } from '@amazon/vinyl-util'\n\nconst EQUALS = /* @__PURE__ */ char('=')\nconst COMMA = /* @__PURE__ */ char(',')\nconst QUOTE = /* @__PURE__ */ char('\"')\n\n/**\n * Parses an HLS attribute list (e.g. `KEY=VALUE,KEY=\"quoted,value\"`) using\n * StringReader cursor-based parsing. Handles quoted values with embedded commas.\n */\nexport function parseAttributes(reader: StringReader): Record<string, string> {\n const attrs: Record<string, string> = {}\n\n while (\n reader.hasNext() &&\n reader.peek !== char('\\n') &&\n reader.peek !== char('\\r')\n ) {\n const key = reader.substringUntilChar(EQUALS)\n if (!key || !reader.hasNext()) break\n reader.next() // skip '='\n\n let value: string\n if (reader.peek === QUOTE) {\n reader.next() // skip opening quote\n value = reader.substringUntilChar(QUOTE)\n if (reader.hasNext()) reader.next() // skip closing quote\n } else {\n value = reader.substringUntil(\n (cc) => cc === COMMA || cc === char('\\n') || cc === char('\\r')\n )\n }\n\n attrs[key] = value\n\n if (reader.hasNext() && reader.peek === COMMA) {\n reader.next() // skip ','\n }\n }\n\n return attrs\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { StringReader, substitute, ValidationError } from '@amazon/vinyl-util'\nimport type { AlternativeRendition } from '../types/AlternativeRendition'\nimport { renditionTypeValidator } from '../types/AlternativeRendition'\nimport type { MainPlaylist } from '../types/MainPlaylist'\nimport type { SessionData } from '../types/SessionData'\nimport type { VariantStream } from '../types/VariantStream'\nimport { HLS_VARIABLE_PATTERN } from './parseMediaPlaylist'\nimport { parseAttributes } from './parseAttributes'\nimport { readLine, skipWhitespaceLine, addIfPresent } from './parseUtil'\n\nconst EXTM3U = '#EXTM3U'\nconst EXT_X_STREAM_INF = '#EXT-X-STREAM-INF:'\nconst EXT_X_MEDIA = '#EXT-X-MEDIA:'\nconst EXT_X_SESSION_DATA = '#EXT-X-SESSION-DATA:'\nconst EXT_X_DEFINE = '#EXT-X-DEFINE:'\n\n/**\n * Parses an HLS master playlist from M3U8 text.\n *\n * @param text The raw M3U8 manifest string.\n * @returns A readonly MainPlaylist structure.\n * @throws StringParseError if the manifest is malformed.\n */\nexport function parseMainPlaylist(text: string): MainPlaylist {\n const reader = new StringReader(text)\n\n reader.white()\n if (!reader.stringIf(EXTM3U)) {\n reader.err('Expected #EXTM3U')\n }\n // Advance past the rest of the #EXTM3U line\n readLine(reader)\n\n const variants: VariantStream[] = []\n const alternativeRenditions: AlternativeRendition[] = []\n const sessionData: SessionData[] = []\n const defines: Record<string, string> = {}\n\n while (reader.hasNext()) {\n if (skipWhitespaceLine(reader)) continue\n\n const line = readLine(reader)\n const trimmed = line.trim()\n if (!trimmed) continue\n\n if (trimmed.startsWith(EXT_X_STREAM_INF)) {\n const attrStr = trimmed.substring(EXT_X_STREAM_INF.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n\n // Next non-empty line is the URI\n let uri = ''\n while (reader.hasNext()) {\n if (skipWhitespaceLine(reader)) continue\n uri = readLine(reader).trim()\n break\n }\n\n variants.push(\n addIfPresent(\n {\n bandwidth: Number(attrs['BANDWIDTH']),\n uri: substituteHlsVariables(uri, defines),\n ...(attrs['FRAME-RATE'] && {\n frameRate: Number(attrs['FRAME-RATE']),\n }),\n ...(attrs.RESOLUTION &&\n parseResolution(attrs.RESOLUTION)),\n },\n attrs,\n {\n CODECS: 'codecs',\n AUDIO: 'audioGroup',\n VIDEO: 'videoGroup',\n SUBTITLES: 'subtitlesGroup',\n 'CLOSED-CAPTIONS': 'closedCaptionsGroup',\n }\n )\n )\n } else if (trimmed.startsWith(EXT_X_MEDIA)) {\n const attrStr = trimmed.substring(EXT_X_MEDIA.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n\n const type = attrs['TYPE']\n renditionTypeValidator.assert(type)\n\n if (attrs['URI']) {\n attrs['URI'] = substituteHlsVariables(attrs['URI'], defines)\n }\n\n alternativeRenditions.push(\n addIfPresent(\n {\n type,\n groupId: attrs['GROUP-ID'],\n name: attrs['NAME'],\n ...(attrs['DEFAULT'] && {\n default: attrs['DEFAULT'] === 'YES',\n }),\n ...(attrs['AUTOSELECT'] && {\n autoSelect: attrs['AUTOSELECT'] === 'YES',\n }),\n },\n attrs,\n {\n URI: 'uri',\n LANGUAGE: 'language',\n }\n )\n )\n } else if (trimmed.startsWith(EXT_X_SESSION_DATA)) {\n const attrStr = trimmed.substring(EXT_X_SESSION_DATA.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n\n sessionData.push(\n addIfPresent(\n {\n dataId: attrs['DATA-ID'],\n },\n attrs,\n {\n VALUE: 'value',\n URI: 'uri',\n LANGUAGE: 'language',\n }\n )\n )\n } else if (trimmed.startsWith(EXT_X_DEFINE)) {\n const attrStr = trimmed.substring(EXT_X_DEFINE.length)\n const attrReader = new StringReader(attrStr)\n const attrs = parseAttributes(attrReader)\n if (attrs['NAME'] && attrs['VALUE']) {\n defines[attrs['NAME']] = attrs['VALUE']\n }\n }\n // Unrecognized tags and comments are silently skipped\n }\n\n return { variants, alternativeRenditions, sessionData, defines }\n}\n\n/**\n * Applies EXT-X-DEFINE variable substitution (per RFC 8216 \u00A74.2) to a manifest\n * value, replacing `{$NAME}` tokens with the values declared earlier in the\n * playlist. Returns the input unchanged when no variables have been declared.\n */\nfunction substituteHlsVariables(\n value: string,\n variables: Readonly<Record<string, string>>\n): string {\n if (!value || Object.keys(variables).length === 0) return value\n return substitute(value, variables, HLS_VARIABLE_PATTERN)\n}\n\n/**\n * Parses a resolution string (e.g., \"1920x1080\") into width and height numbers.\n * Throws ValidationError for invalid formats per HLS spec.\n */\nfunction parseResolution(resolution: string): {\n width: number\n height: number\n} {\n const parts = resolution.split('x')\n if (parts.length !== 2) {\n throw new ValidationError(\n 'Invalid resolution format, expected WIDTHxHEIGHT'\n )\n }\n\n const width = Number(parts[0])\n const height = Number(parts[1])\n\n if (\n !Number.isInteger(width) ||\n !Number.isInteger(height) ||\n width <= 0 ||\n height <= 0\n ) {\n throw new ValidationError(\n 'Invalid resolution values, width and height must be positive integers'\n )\n }\n\n return { width, height }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["isOneOf", "char", "StringReader", "substitute", "EXTM3U", "StringReader", "substitute"]
7
7
  }