rx-player 3.29.0-dev.2022091600 → 3.29.0-dev.2022103100

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 (184) hide show
  1. package/CHANGELOG.md +22 -10
  2. package/MAINTAINERS.md +2 -1
  3. package/VERSION +1 -1
  4. package/dist/_esm5.processed/compat/browser_detection.d.ts +4 -1
  5. package/dist/_esm5.processed/compat/browser_detection.js +7 -1
  6. package/dist/_esm5.processed/compat/can_reuse_media_keys.d.ts +12 -0
  7. package/dist/_esm5.processed/compat/can_reuse_media_keys.js +15 -0
  8. package/dist/_esm5.processed/compat/enable_audio_track.d.ts +11 -0
  9. package/dist/_esm5.processed/compat/enable_audio_track.js +26 -0
  10. package/dist/_esm5.processed/compat/index.d.ts +4 -2
  11. package/dist/_esm5.processed/compat/index.js +4 -2
  12. package/dist/_esm5.processed/compat/{should_renew_media_keys.d.ts → should_renew_media_key_system_access.d.ts} +3 -3
  13. package/dist/_esm5.processed/compat/{should_renew_media_keys.js → should_renew_media_key_system_access.js} +3 -3
  14. package/dist/_esm5.processed/config.d.ts +1 -0
  15. package/dist/_esm5.processed/core/api/playback_observer.d.ts +14 -5
  16. package/dist/_esm5.processed/core/api/playback_observer.js +54 -22
  17. package/dist/_esm5.processed/core/api/public_api.d.ts +7 -4
  18. package/dist/_esm5.processed/core/api/public_api.js +79 -61
  19. package/dist/_esm5.processed/core/api/tracks_management/media_element_track_choice_manager.js +9 -10
  20. package/dist/_esm5.processed/core/decrypt/__tests__/__global__/utils.js +1 -1
  21. package/dist/_esm5.processed/core/decrypt/find_key_system.js +3 -3
  22. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +4 -1
  23. package/dist/_esm5.processed/core/fetchers/cdn_prioritizer.d.ts +98 -0
  24. package/dist/_esm5.processed/core/fetchers/cdn_prioritizer.js +173 -0
  25. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +4 -4
  26. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +2 -1
  27. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +15 -16
  28. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.d.ts +3 -1
  29. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +5 -2
  30. package/dist/_esm5.processed/core/fetchers/utils/schedule_request.d.ts +103 -0
  31. package/dist/_esm5.processed/core/fetchers/utils/schedule_request.js +414 -0
  32. package/dist/_esm5.processed/core/init/content_time_boundaries_observer.d.ts +4 -3
  33. package/dist/_esm5.processed/core/init/content_time_boundaries_observer.js +21 -22
  34. package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +18 -4
  35. package/dist/_esm5.processed/core/init/initialize_media_source.js +10 -2
  36. package/dist/_esm5.processed/core/init/load_on_media_source.js +7 -1
  37. package/dist/_esm5.processed/core/init/stall_avoider.js +3 -1
  38. package/dist/_esm5.processed/default_config.d.ts +11 -0
  39. package/dist/_esm5.processed/default_config.js +11 -0
  40. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +1 -1
  41. package/dist/_esm5.processed/manifest/manifest.js +11 -2
  42. package/dist/_esm5.processed/manifest/representation.d.ts +12 -1
  43. package/dist/_esm5.processed/manifest/representation.js +1 -0
  44. package/dist/_esm5.processed/manifest/representation_index/static.d.ts +1 -1
  45. package/dist/_esm5.processed/manifest/representation_index/static.js +2 -2
  46. package/dist/_esm5.processed/manifest/representation_index/types.d.ts +32 -15
  47. package/dist/_esm5.processed/manifest/update_period_in_place.js +1 -0
  48. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +10 -9
  49. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +11 -11
  50. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.d.ts +1 -1
  51. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.js +3 -3
  52. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +1 -1
  53. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +4 -4
  54. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +7 -7
  55. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +12 -8
  56. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +5 -6
  57. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +16 -16
  58. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +11 -10
  59. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +14 -13
  60. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/tokens.d.ts +3 -4
  61. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/tokens.js +4 -12
  62. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +2 -4
  63. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +1 -3
  64. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +6 -2
  65. package/dist/_esm5.processed/parsers/manifest/dash/common/resolve_base_urls.d.ts +1 -2
  66. package/dist/_esm5.processed/parsers/manifest/dash/common/resolve_base_urls.js +3 -8
  67. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/BaseURL.d.ts +1 -1
  68. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/BaseURL.js +2 -20
  69. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +0 -6
  70. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.js +0 -11
  71. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/types.d.ts +5 -1
  72. package/dist/_esm5.processed/parsers/manifest/local/parse_local_manifest.js +2 -1
  73. package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +2 -2
  74. package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.js +7 -1
  75. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +17 -11
  76. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +2 -2
  77. package/dist/_esm5.processed/parsers/manifest/types.d.ts +24 -0
  78. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_extent.js +8 -1
  79. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_origin.js +9 -1
  80. package/dist/_esm5.processed/parsers/texttracks/ttml/html/create_element.js +2 -1
  81. package/dist/_esm5.processed/transports/dash/construct_segment_url.d.ts +18 -0
  82. package/dist/_esm5.processed/transports/dash/construct_segment_url.js +21 -0
  83. package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +3 -2
  84. package/dist/_esm5.processed/transports/dash/image_pipelines.js +5 -3
  85. package/dist/_esm5.processed/transports/dash/segment_loader.js +4 -2
  86. package/dist/_esm5.processed/transports/dash/text_loader.js +4 -2
  87. package/dist/_esm5.processed/transports/dash/text_parser.js +3 -1
  88. package/dist/_esm5.processed/transports/local/segment_loader.d.ts +3 -2
  89. package/dist/_esm5.processed/transports/local/segment_loader.js +2 -2
  90. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +8 -8
  91. package/dist/_esm5.processed/transports/smooth/pipelines.js +11 -7
  92. package/dist/_esm5.processed/transports/smooth/utils.d.ts +4 -2
  93. package/dist/_esm5.processed/transports/smooth/utils.js +7 -1
  94. package/dist/_esm5.processed/transports/types.d.ts +5 -3
  95. package/dist/_esm5.processed/utils/event_emitter.d.ts +1 -2
  96. package/dist/_esm5.processed/utils/resolve_url.d.ts +7 -4
  97. package/dist/_esm5.processed/utils/resolve_url.js +11 -8
  98. package/dist/mpd-parser.wasm +0 -0
  99. package/dist/rx-player.js +5656 -13236
  100. package/dist/rx-player.min.js +1 -1
  101. package/jest.config.js +28 -23
  102. package/package.json +29 -29
  103. package/sonar-project.properties +1 -1
  104. package/src/compat/__tests__/can_reuse_media_keys.test.ts +54 -0
  105. package/src/compat/__tests__/enable_audio_track.test.ts +341 -0
  106. package/src/compat/__tests__/{should_renew_media_keys.test.ts → should_renew_media_key_system_access.test.ts} +7 -5
  107. package/src/compat/browser_detection.ts +10 -0
  108. package/src/compat/can_reuse_media_keys.ts +19 -0
  109. package/src/compat/enable_audio_track.ts +33 -0
  110. package/src/compat/index.ts +6 -2
  111. package/src/compat/{should_renew_media_keys.ts → should_renew_media_key_system_access.ts} +3 -3
  112. package/src/core/api/playback_observer.ts +97 -33
  113. package/src/core/api/public_api.ts +126 -74
  114. package/src/core/api/tracks_management/media_element_track_choice_manager.ts +3 -11
  115. package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +182 -0
  116. package/src/core/decrypt/__tests__/__global__/utils.ts +2 -0
  117. package/src/core/decrypt/find_key_system.ts +3 -3
  118. package/src/core/decrypt/get_media_keys.ts +5 -1
  119. package/src/core/fetchers/cdn_prioritizer.ts +198 -0
  120. package/src/core/fetchers/manifest/manifest_fetcher.ts +7 -11
  121. package/src/core/fetchers/segment/segment_fetcher.ts +12 -10
  122. package/src/core/fetchers/segment/segment_fetcher_creator.ts +10 -1
  123. package/src/core/fetchers/utils/schedule_request.ts +482 -0
  124. package/src/core/init/content_time_boundaries_observer.ts +12 -12
  125. package/src/core/init/initialize_media_source.ts +31 -4
  126. package/src/core/init/load_on_media_source.ts +11 -2
  127. package/src/core/init/stall_avoider.ts +4 -1
  128. package/src/core/stream/orchestrator/stream_orchestrator.ts +0 -1
  129. package/src/default_config.ts +12 -0
  130. package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.ts +1 -0
  131. package/src/manifest/manifest.ts +11 -2
  132. package/src/manifest/representation.ts +15 -0
  133. package/src/manifest/representation_index/__tests__/static.test.ts +1 -1
  134. package/src/manifest/representation_index/static.ts +3 -3
  135. package/src/manifest/representation_index/types.ts +33 -15
  136. package/src/manifest/update_period_in_place.ts +1 -0
  137. package/src/parsers/manifest/dash/common/indexes/base.ts +22 -23
  138. package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +6 -4
  139. package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +5 -5
  140. package/src/parsers/manifest/dash/common/indexes/list.ts +19 -20
  141. package/src/parsers/manifest/dash/common/indexes/template.ts +23 -27
  142. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +25 -23
  143. package/src/parsers/manifest/dash/common/indexes/tokens.ts +7 -18
  144. package/src/parsers/manifest/dash/common/parse_mpd.ts +2 -4
  145. package/src/parsers/manifest/dash/common/parse_representation_index.ts +1 -6
  146. package/src/parsers/manifest/dash/common/parse_representations.ts +9 -0
  147. package/src/parsers/manifest/dash/common/resolve_base_urls.ts +5 -9
  148. package/src/parsers/manifest/dash/js-parser/node_parsers/BaseURL.ts +2 -29
  149. package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/AdaptationSet.test.ts +7 -11
  150. package/src/parsers/manifest/dash/node_parser_types.ts +0 -7
  151. package/src/parsers/manifest/dash/wasm-parser/rs/events.rs +3 -1
  152. package/src/parsers/manifest/dash/wasm-parser/rs/processor/attributes.rs +1 -8
  153. package/src/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.ts +0 -13
  154. package/src/parsers/manifest/dash/wasm-parser/ts/types.ts +8 -0
  155. package/src/parsers/manifest/local/parse_local_manifest.ts +1 -0
  156. package/src/parsers/manifest/local/representation_index.ts +2 -2
  157. package/src/parsers/manifest/metaplaylist/metaplaylist_parser.ts +7 -1
  158. package/src/parsers/manifest/smooth/create_parser.ts +17 -13
  159. package/src/parsers/manifest/smooth/representation_index.ts +2 -2
  160. package/src/parsers/manifest/types.ts +26 -1
  161. package/src/parsers/manifest/utils/__tests__/get_first_time_from_adaptations.test.ts +15 -0
  162. package/src/parsers/manifest/utils/__tests__/get_last_time_from_adaptation.test.ts +15 -0
  163. package/src/parsers/texttracks/ttml/html/apply_extent.ts +8 -1
  164. package/src/parsers/texttracks/ttml/html/apply_origin.ts +9 -1
  165. package/src/parsers/texttracks/ttml/html/create_element.ts +2 -2
  166. package/src/transports/dash/construct_segment_url.ts +28 -0
  167. package/src/transports/dash/image_pipelines.ts +5 -2
  168. package/src/transports/dash/segment_loader.ts +5 -2
  169. package/src/transports/dash/text_loader.ts +5 -2
  170. package/src/transports/dash/text_parser.ts +3 -1
  171. package/src/transports/local/segment_loader.ts +3 -2
  172. package/src/transports/metaplaylist/pipelines.ts +28 -9
  173. package/src/transports/smooth/pipelines.ts +12 -6
  174. package/src/transports/smooth/utils.ts +13 -1
  175. package/src/transports/types.ts +6 -3
  176. package/src/utils/__tests__/event_emitter.test.ts +72 -67
  177. package/src/utils/__tests__/initialization_segment_cache.test.ts +7 -7
  178. package/src/utils/__tests__/resolve_url.test.ts +27 -23
  179. package/src/utils/event_emitter.ts +1 -3
  180. package/src/utils/resolve_url.ts +11 -8
  181. package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.d.ts +0 -85
  182. package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +0 -264
  183. package/dummy +0 -1
  184. package/src/core/fetchers/utils/try_urls_with_backoff.ts +0 -287
@@ -23,6 +23,7 @@ import Manifest, {
23
23
  Period,
24
24
  Representation,
25
25
  } from "../manifest";
26
+ import { ICdnMetadata } from "../parsers/manifest";
26
27
  import {
27
28
  IBifThumbnail,
28
29
  ILoadedManifestFormat,
@@ -52,6 +53,7 @@ export type ITransportFunction = (options : ITransportOptions) =>
52
53
  export interface ITransportPipelines {
53
54
  /** Functions allowing to load an parse the Manifest for this transport. */
54
55
  manifest : ITransportManifestPipeline;
56
+
55
57
  /** Functions allowing to load an parse audio segments. */
56
58
  audio : ISegmentPipeline<ILoadedAudioVideoSegmentFormat,
57
59
  Uint8Array | ArrayBuffer | null>;
@@ -222,8 +224,9 @@ export interface ISegmentPipeline<
222
224
 
223
225
  /**
224
226
  * Segment loader function, allowing to load a segment of any type.
225
- * @param {string|null} url - URL at which the segment should be downloaded.
226
- * `null` if we do not have an URL (in which case the segment should be loaded
227
+ * @param {string|null} wantedCdn - CDN metadata for the CDN on which the
228
+ * segment should be downloaded.
229
+ * `null` if we do not have such CDN (in which case the segment should be loaded
227
230
  * through other means, such as information taken from the segment's content).
228
231
  * @param {Object} content - Content linked to the wanted segment.
229
232
  * @param {CancellationSignal} cancelSignal - Cancellation signal which will
@@ -237,7 +240,7 @@ export interface ISegmentPipeline<
237
240
  * the segment.
238
241
  */
239
242
  export type ISegmentLoader<TLoadedFormat> = (
240
- url : string | null,
243
+ wantedCdn : ICdnMetadata | null,
241
244
  content : ISegmentContext,
242
245
  options : ISegmentLoaderOptions,
243
246
  cancelSignal : CancellationSignal,
@@ -14,6 +14,11 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
+ /* eslint-disable @typescript-eslint/no-unsafe-member-access */
18
+ /* eslint-disable @typescript-eslint/no-unsafe-call */
19
+ /* eslint-disable @typescript-eslint/no-unsafe-return */
20
+ /* eslint-disable @typescript-eslint/no-explicit-any */
21
+
17
22
  import { take } from "rxjs";
18
23
  import log from "../../log";
19
24
  import EventEmitter, {
@@ -32,9 +37,9 @@ describe("utils - EventEmitter", () => {
32
37
  });
33
38
 
34
39
  expect(wasCalled).toEqual(0);
35
- eventEmitter.trigger("something", undefined);
40
+ (eventEmitter as any).trigger("something", undefined);
36
41
  expect(wasCalled).toEqual(1);
37
- eventEmitter.trigger("nope", undefined);
42
+ (eventEmitter as any).trigger("nope", undefined);
38
43
  expect(wasCalled).toEqual(1);
39
44
  eventEmitter.removeEventListener();
40
45
  });
@@ -59,33 +64,33 @@ describe("utils - EventEmitter", () => {
59
64
  expect(wasCalledWithString).toEqual(0);
60
65
  expect(wasCalledWithObject).toEqual(0);
61
66
 
62
- eventEmitter.trigger("something", undefined);
67
+ (eventEmitter as any).trigger("something", undefined);
63
68
  expect(wasCalledWithString).toEqual(0);
64
69
  expect(wasCalledWithObject).toEqual(0);
65
70
 
66
- eventEmitter.trigger("something", "a");
71
+ (eventEmitter as any).trigger("something", "a");
67
72
  expect(wasCalledWithString).toEqual(1);
68
73
  expect(wasCalledWithObject).toEqual(0);
69
74
 
70
- eventEmitter.trigger("nope", undefined);
75
+ (eventEmitter as any).trigger("nope", undefined);
71
76
  expect(wasCalledWithString).toEqual(1);
72
77
  expect(wasCalledWithObject).toEqual(0);
73
78
 
74
- eventEmitter.trigger("nope", undefined);
79
+ (eventEmitter as any).trigger("nope", undefined);
75
80
  expect(wasCalledWithString).toEqual(1);
76
81
  expect(wasCalledWithObject).toEqual(0);
77
82
 
78
- eventEmitter.trigger("something", { a: "b" });
83
+ (eventEmitter as any).trigger("something", { a: "b" });
79
84
  expect(wasCalledWithString).toEqual(1);
80
85
  expect(wasCalledWithObject).toEqual(1);
81
86
 
82
- eventEmitter.trigger("something", "a");
83
- eventEmitter.trigger("something", "a");
84
- eventEmitter.trigger("something", "a");
87
+ (eventEmitter as any).trigger("something", "a");
88
+ (eventEmitter as any).trigger("something", "a");
89
+ (eventEmitter as any).trigger("something", "a");
85
90
  expect(wasCalledWithString).toEqual(4);
86
91
  expect(wasCalledWithObject).toEqual(1);
87
92
 
88
- eventEmitter.trigger("nope", undefined);
93
+ (eventEmitter as any).trigger("nope", undefined);
89
94
  expect(wasCalledWithString).toEqual(4);
90
95
  expect(wasCalledWithObject).toEqual(1);
91
96
  eventEmitter.removeEventListener();
@@ -111,38 +116,38 @@ describe("utils - EventEmitter", () => {
111
116
  expect(wasCalledWithString).toEqual(0);
112
117
  expect(wasCalledWithObject).toEqual(0);
113
118
 
114
- eventEmitter.trigger("something", undefined);
119
+ (eventEmitter as any).trigger("something", undefined);
115
120
  expect(wasCalledWithString).toEqual(0);
116
121
  expect(wasCalledWithObject).toEqual(0);
117
122
 
118
- eventEmitter.trigger("something", "a");
123
+ (eventEmitter as any).trigger("something", "a");
119
124
  expect(wasCalledWithString).toEqual(1);
120
125
  expect(wasCalledWithObject).toEqual(0);
121
126
 
122
- eventEmitter.trigger("nope", undefined);
127
+ (eventEmitter as any).trigger("nope", undefined);
123
128
  expect(wasCalledWithString).toEqual(1);
124
129
  expect(wasCalledWithObject).toEqual(0);
125
130
 
126
- eventEmitter.trigger("nope", "a");
131
+ (eventEmitter as any).trigger("nope", "a");
127
132
  expect(wasCalledWithString).toEqual(2);
128
133
  expect(wasCalledWithObject).toEqual(0);
129
134
 
130
- eventEmitter.trigger("something", { a: "b" });
135
+ (eventEmitter as any).trigger("something", { a: "b" });
131
136
  expect(wasCalledWithString).toEqual(2);
132
137
  expect(wasCalledWithObject).toEqual(1);
133
138
 
134
139
  eventEmitter.removeEventListener("something", callback);
135
- eventEmitter.trigger("something", "a");
136
- eventEmitter.trigger("something", "a");
137
- eventEmitter.trigger("something", "a");
140
+ (eventEmitter as any).trigger("something", "a");
141
+ (eventEmitter as any).trigger("something", "a");
142
+ (eventEmitter as any).trigger("something", "a");
138
143
  expect(wasCalledWithString).toEqual(2);
139
144
  expect(wasCalledWithObject).toEqual(1);
140
145
 
141
- eventEmitter.trigger("nope", undefined);
146
+ (eventEmitter as any).trigger("nope", undefined);
142
147
  expect(wasCalledWithString).toEqual(2);
143
148
  expect(wasCalledWithObject).toEqual(1);
144
149
 
145
- eventEmitter.trigger("nope", "a");
150
+ (eventEmitter as any).trigger("nope", "a");
146
151
  expect(wasCalledWithString).toEqual(3);
147
152
  expect(wasCalledWithObject).toEqual(1);
148
153
  eventEmitter.removeEventListener();
@@ -192,7 +197,7 @@ describe("utils - EventEmitter", () => {
192
197
  expect(wasCalledWithString3).toEqual(0);
193
198
  expect(wasCalledWithObject3).toEqual(0);
194
199
 
195
- eventEmitter.trigger("something", undefined);
200
+ (eventEmitter as any).trigger("something", undefined);
196
201
  expect(wasCalledWithString1).toEqual(0);
197
202
  expect(wasCalledWithObject1).toEqual(0);
198
203
  expect(wasCalledWithString2).toEqual(0);
@@ -200,7 +205,7 @@ describe("utils - EventEmitter", () => {
200
205
  expect(wasCalledWithString3).toEqual(0);
201
206
  expect(wasCalledWithObject3).toEqual(0);
202
207
 
203
- eventEmitter.trigger("something", "a");
208
+ (eventEmitter as any).trigger("something", "a");
204
209
  expect(wasCalledWithString1).toEqual(1);
205
210
  expect(wasCalledWithObject1).toEqual(0);
206
211
  expect(wasCalledWithString2).toEqual(1);
@@ -216,7 +221,7 @@ describe("utils - EventEmitter", () => {
216
221
  expect(wasCalledWithString3).toEqual(0);
217
222
  expect(wasCalledWithObject3).toEqual(0);
218
223
 
219
- eventEmitter.trigger("something", "a");
224
+ (eventEmitter as any).trigger("something", "a");
220
225
  expect(wasCalledWithString1).toEqual(2);
221
226
  expect(wasCalledWithObject1).toEqual(0);
222
227
  expect(wasCalledWithString2).toEqual(2);
@@ -224,7 +229,7 @@ describe("utils - EventEmitter", () => {
224
229
  expect(wasCalledWithString3).toEqual(1);
225
230
  expect(wasCalledWithObject3).toEqual(0);
226
231
 
227
- eventEmitter.trigger("nope", undefined);
232
+ (eventEmitter as any).trigger("nope", undefined);
228
233
  expect(wasCalledWithString1).toEqual(2);
229
234
  expect(wasCalledWithObject1).toEqual(0);
230
235
  expect(wasCalledWithString2).toEqual(2);
@@ -232,7 +237,7 @@ describe("utils - EventEmitter", () => {
232
237
  expect(wasCalledWithString3).toEqual(1);
233
238
  expect(wasCalledWithObject3).toEqual(0);
234
239
 
235
- eventEmitter.trigger("nope", "a");
240
+ (eventEmitter as any).trigger("nope", "a");
236
241
  expect(wasCalledWithString1).toEqual(3);
237
242
  expect(wasCalledWithObject1).toEqual(0);
238
243
  expect(wasCalledWithString2).toEqual(2);
@@ -240,7 +245,7 @@ describe("utils - EventEmitter", () => {
240
245
  expect(wasCalledWithString3).toEqual(2);
241
246
  expect(wasCalledWithObject3).toEqual(0);
242
247
 
243
- eventEmitter.trigger("something", { a: "b" });
248
+ (eventEmitter as any).trigger("something", { a: "b" });
244
249
  expect(wasCalledWithString1).toEqual(3);
245
250
  expect(wasCalledWithObject1).toEqual(1);
246
251
  expect(wasCalledWithString2).toEqual(2);
@@ -256,7 +261,7 @@ describe("utils - EventEmitter", () => {
256
261
  expect(wasCalledWithString3).toEqual(2);
257
262
  expect(wasCalledWithObject3).toEqual(1);
258
263
 
259
- eventEmitter.trigger("something", { a: "b" });
264
+ (eventEmitter as any).trigger("something", { a: "b" });
260
265
  expect(wasCalledWithString1).toEqual(3);
261
266
  expect(wasCalledWithObject1).toEqual(2);
262
267
  expect(wasCalledWithString2).toEqual(2);
@@ -264,7 +269,7 @@ describe("utils - EventEmitter", () => {
264
269
  expect(wasCalledWithString3).toEqual(2);
265
270
  expect(wasCalledWithObject3).toEqual(2);
266
271
 
267
- eventEmitter.trigger("nope", { a: "b" });
272
+ (eventEmitter as any).trigger("nope", { a: "b" });
268
273
  expect(wasCalledWithString1).toEqual(3);
269
274
  expect(wasCalledWithObject1).toEqual(3);
270
275
  expect(wasCalledWithString2).toEqual(2);
@@ -320,7 +325,7 @@ describe("utils - EventEmitter", () => {
320
325
  expect(wasCalledWithString3).toEqual(0);
321
326
  expect(wasCalledWithObject3).toEqual(0);
322
327
 
323
- eventEmitter.trigger("something", undefined);
328
+ (eventEmitter as any).trigger("something", undefined);
324
329
  expect(wasCalledWithString1).toEqual(0);
325
330
  expect(wasCalledWithObject1).toEqual(0);
326
331
  expect(wasCalledWithString2).toEqual(0);
@@ -328,7 +333,7 @@ describe("utils - EventEmitter", () => {
328
333
  expect(wasCalledWithString3).toEqual(0);
329
334
  expect(wasCalledWithObject3).toEqual(0);
330
335
 
331
- eventEmitter.trigger("something", "a");
336
+ (eventEmitter as any).trigger("something", "a");
332
337
  expect(wasCalledWithString1).toEqual(1);
333
338
  expect(wasCalledWithObject1).toEqual(0);
334
339
  expect(wasCalledWithString2).toEqual(1);
@@ -344,7 +349,7 @@ describe("utils - EventEmitter", () => {
344
349
  expect(wasCalledWithString3).toEqual(0);
345
350
  expect(wasCalledWithObject3).toEqual(0);
346
351
 
347
- eventEmitter.trigger("something", "a");
352
+ (eventEmitter as any).trigger("something", "a");
348
353
  expect(wasCalledWithString1).toEqual(2);
349
354
  expect(wasCalledWithObject1).toEqual(0);
350
355
  expect(wasCalledWithString2).toEqual(2);
@@ -352,7 +357,7 @@ describe("utils - EventEmitter", () => {
352
357
  expect(wasCalledWithString3).toEqual(1);
353
358
  expect(wasCalledWithObject3).toEqual(0);
354
359
 
355
- eventEmitter.trigger("nope", undefined);
360
+ (eventEmitter as any).trigger("nope", undefined);
356
361
  expect(wasCalledWithString1).toEqual(2);
357
362
  expect(wasCalledWithObject1).toEqual(0);
358
363
  expect(wasCalledWithString2).toEqual(2);
@@ -360,7 +365,7 @@ describe("utils - EventEmitter", () => {
360
365
  expect(wasCalledWithString3).toEqual(1);
361
366
  expect(wasCalledWithObject3).toEqual(0);
362
367
 
363
- eventEmitter.trigger("nope", "a");
368
+ (eventEmitter as any).trigger("nope", "a");
364
369
  expect(wasCalledWithString1).toEqual(3);
365
370
  expect(wasCalledWithObject1).toEqual(0);
366
371
  expect(wasCalledWithString2).toEqual(2);
@@ -368,7 +373,7 @@ describe("utils - EventEmitter", () => {
368
373
  expect(wasCalledWithString3).toEqual(2);
369
374
  expect(wasCalledWithObject3).toEqual(0);
370
375
 
371
- eventEmitter.trigger("something", { a: "b" });
376
+ (eventEmitter as any).trigger("something", { a: "b" });
372
377
  expect(wasCalledWithString1).toEqual(3);
373
378
  expect(wasCalledWithObject1).toEqual(1);
374
379
  expect(wasCalledWithString2).toEqual(2);
@@ -384,7 +389,7 @@ describe("utils - EventEmitter", () => {
384
389
  expect(wasCalledWithString3).toEqual(2);
385
390
  expect(wasCalledWithObject3).toEqual(1);
386
391
 
387
- eventEmitter.trigger("something", { a: "b" });
392
+ (eventEmitter as any).trigger("something", { a: "b" });
388
393
  expect(wasCalledWithString1).toEqual(3);
389
394
  expect(wasCalledWithObject1).toEqual(1);
390
395
  expect(wasCalledWithString2).toEqual(2);
@@ -392,7 +397,7 @@ describe("utils - EventEmitter", () => {
392
397
  expect(wasCalledWithString3).toEqual(2);
393
398
  expect(wasCalledWithObject3).toEqual(1);
394
399
 
395
- eventEmitter.trigger("nope", { a: "b" });
400
+ (eventEmitter as any).trigger("nope", { a: "b" });
396
401
  expect(wasCalledWithString1).toEqual(3);
397
402
  expect(wasCalledWithObject1).toEqual(2);
398
403
  expect(wasCalledWithString2).toEqual(2);
@@ -448,7 +453,7 @@ describe("utils - EventEmitter", () => {
448
453
  expect(wasCalledWithString3).toEqual(0);
449
454
  expect(wasCalledWithObject3).toEqual(0);
450
455
 
451
- eventEmitter.trigger("something", undefined);
456
+ (eventEmitter as any).trigger("something", undefined);
452
457
  expect(wasCalledWithString1).toEqual(0);
453
458
  expect(wasCalledWithObject1).toEqual(0);
454
459
  expect(wasCalledWithString2).toEqual(0);
@@ -456,7 +461,7 @@ describe("utils - EventEmitter", () => {
456
461
  expect(wasCalledWithString3).toEqual(0);
457
462
  expect(wasCalledWithObject3).toEqual(0);
458
463
 
459
- eventEmitter.trigger("something", "a");
464
+ (eventEmitter as any).trigger("something", "a");
460
465
  expect(wasCalledWithString1).toEqual(1);
461
466
  expect(wasCalledWithObject1).toEqual(0);
462
467
  expect(wasCalledWithString2).toEqual(1);
@@ -472,7 +477,7 @@ describe("utils - EventEmitter", () => {
472
477
  expect(wasCalledWithString3).toEqual(0);
473
478
  expect(wasCalledWithObject3).toEqual(0);
474
479
 
475
- eventEmitter.trigger("something", "a");
480
+ (eventEmitter as any).trigger("something", "a");
476
481
  expect(wasCalledWithString1).toEqual(2);
477
482
  expect(wasCalledWithObject1).toEqual(0);
478
483
  expect(wasCalledWithString2).toEqual(2);
@@ -480,7 +485,7 @@ describe("utils - EventEmitter", () => {
480
485
  expect(wasCalledWithString3).toEqual(1);
481
486
  expect(wasCalledWithObject3).toEqual(0);
482
487
 
483
- eventEmitter.trigger("nope", undefined);
488
+ (eventEmitter as any).trigger("nope", undefined);
484
489
  expect(wasCalledWithString1).toEqual(2);
485
490
  expect(wasCalledWithObject1).toEqual(0);
486
491
  expect(wasCalledWithString2).toEqual(2);
@@ -488,7 +493,7 @@ describe("utils - EventEmitter", () => {
488
493
  expect(wasCalledWithString3).toEqual(1);
489
494
  expect(wasCalledWithObject3).toEqual(0);
490
495
 
491
- eventEmitter.trigger("nope", "a");
496
+ (eventEmitter as any).trigger("nope", "a");
492
497
  expect(wasCalledWithString1).toEqual(3);
493
498
  expect(wasCalledWithObject1).toEqual(0);
494
499
  expect(wasCalledWithString2).toEqual(2);
@@ -496,7 +501,7 @@ describe("utils - EventEmitter", () => {
496
501
  expect(wasCalledWithString3).toEqual(2);
497
502
  expect(wasCalledWithObject3).toEqual(0);
498
503
 
499
- eventEmitter.trigger("something", { a: "b" });
504
+ (eventEmitter as any).trigger("something", { a: "b" });
500
505
  expect(wasCalledWithString1).toEqual(3);
501
506
  expect(wasCalledWithObject1).toEqual(1);
502
507
  expect(wasCalledWithString2).toEqual(2);
@@ -512,7 +517,7 @@ describe("utils - EventEmitter", () => {
512
517
  expect(wasCalledWithString3).toEqual(2);
513
518
  expect(wasCalledWithObject3).toEqual(1);
514
519
 
515
- eventEmitter.trigger("something", { a: "b" });
520
+ (eventEmitter as any).trigger("something", { a: "b" });
516
521
  expect(wasCalledWithString1).toEqual(3);
517
522
  expect(wasCalledWithObject1).toEqual(1);
518
523
  expect(wasCalledWithString2).toEqual(2);
@@ -520,7 +525,7 @@ describe("utils - EventEmitter", () => {
520
525
  expect(wasCalledWithString3).toEqual(2);
521
526
  expect(wasCalledWithObject3).toEqual(1);
522
527
 
523
- eventEmitter.trigger("nope", { a: "b" });
528
+ (eventEmitter as any).trigger("nope", { a: "b" });
524
529
  expect(wasCalledWithString1).toEqual(3);
525
530
  expect(wasCalledWithObject1).toEqual(1);
526
531
  expect(wasCalledWithString2).toEqual(2);
@@ -568,7 +573,7 @@ describe("utils - EventEmitter", () => {
568
573
  eventEmitter.addEventListener("t", cb);
569
574
 
570
575
  expect(spy).toHaveBeenCalledTimes(0);
571
- eventEmitter.trigger("t", undefined);
576
+ (eventEmitter as any).trigger("t", undefined);
572
577
 
573
578
  expect(spy).toHaveBeenCalledTimes(1);
574
579
  expect(spy).toHaveBeenCalledWith(errMessage, thrownErr);
@@ -595,23 +600,23 @@ describe("utils - fromEvent", () => {
595
600
  }
596
601
  },
597
602
  complete() {
598
- eventEmitter.trigger("fooba", 6);
603
+ (eventEmitter as any).trigger("fooba", 6);
599
604
  expect(numberItemsReceived).toBe(2);
600
605
  expect(stringItemsReceived).toBe(3);
601
606
  done();
602
607
  },
603
608
  });
604
609
 
605
- eventEmitter.trigger("test", undefined);
606
- eventEmitter.trigger("fooba", undefined);
607
- eventEmitter.trigger("fooba", 5);
608
- eventEmitter.trigger("fooba", "a");
609
- eventEmitter.trigger("test", undefined);
610
- eventEmitter.trigger("test", undefined);
611
- eventEmitter.trigger("test", undefined);
612
- eventEmitter.trigger("fooba", "b");
613
- eventEmitter.trigger("fooba", "c");
614
- eventEmitter.trigger("fooba", 6);
610
+ (eventEmitter as any).trigger("test", undefined);
611
+ (eventEmitter as any).trigger("fooba", undefined);
612
+ (eventEmitter as any).trigger("fooba", 5);
613
+ (eventEmitter as any).trigger("fooba", "a");
614
+ (eventEmitter as any).trigger("test", undefined);
615
+ (eventEmitter as any).trigger("test", undefined);
616
+ (eventEmitter as any).trigger("test", undefined);
617
+ (eventEmitter as any).trigger("fooba", "b");
618
+ (eventEmitter as any).trigger("fooba", "c");
619
+ (eventEmitter as any).trigger("fooba", 6);
615
620
  });
616
621
 
617
622
  it("should remove the event listener on unsubscription", () => {
@@ -631,17 +636,17 @@ describe("utils - fromEvent", () => {
631
636
  }
632
637
  });
633
638
 
634
- eventEmitter.trigger("test", undefined);
635
- eventEmitter.trigger("fooba", undefined);
636
- eventEmitter.trigger("fooba", 5);
637
- eventEmitter.trigger("fooba", "a");
639
+ (eventEmitter as any).trigger("test", undefined);
640
+ (eventEmitter as any).trigger("fooba", undefined);
641
+ (eventEmitter as any).trigger("fooba", 5);
642
+ (eventEmitter as any).trigger("fooba", "a");
638
643
  subscription.unsubscribe();
639
- eventEmitter.trigger("test", undefined);
640
- eventEmitter.trigger("test", undefined);
641
- eventEmitter.trigger("test", undefined);
642
- eventEmitter.trigger("fooba", "b");
643
- eventEmitter.trigger("fooba", "c");
644
- eventEmitter.trigger("fooba", 6);
644
+ (eventEmitter as any).trigger("test", undefined);
645
+ (eventEmitter as any).trigger("test", undefined);
646
+ (eventEmitter as any).trigger("test", undefined);
647
+ (eventEmitter as any).trigger("fooba", "b");
648
+ (eventEmitter as any).trigger("fooba", "c");
649
+ (eventEmitter as any).trigger("fooba", 6);
645
650
 
646
651
  expect(stringItemsReceived).toBe(1);
647
652
  expect(numberItemsReceived).toBe(1);
@@ -40,11 +40,11 @@ const representation2 = {
40
40
  const initSegment1 = {
41
41
  id: "init1",
42
42
  isInit: true,
43
+ url: "some.URLinit1",
43
44
  time: 0,
44
45
  end: 0,
45
46
  duration: 0,
46
47
  timescale: 1 as const,
47
- mediaURLs: ["http://www.example.com/some.URLinit1"],
48
48
  complete: true,
49
49
  privateInfos: {},
50
50
  };
@@ -52,11 +52,11 @@ const initSegment1 = {
52
52
  const initSegment2 = {
53
53
  id: "init2",
54
54
  isInit: true,
55
+ url: "some.URLinit2",
55
56
  time: 0,
56
57
  end: 0,
57
58
  duration: 0,
58
59
  timescale: 1 as const,
59
- mediaURLs: ["http://www.example.com/some.URLinit2"],
60
60
  complete: true,
61
61
  privateInfos: {},
62
62
  };
@@ -64,11 +64,11 @@ const initSegment2 = {
64
64
  const initSegment3 = {
65
65
  id: "init3",
66
66
  isInit: true,
67
+ url: "some.URLinit3",
67
68
  time: 0,
68
69
  end: 0,
69
70
  duration: 0,
70
71
  timescale: 1 as const,
71
- mediaURLs: ["http://www.example.com/some.URLinit3"],
72
72
  complete: true,
73
73
  privateInfos: {},
74
74
  };
@@ -76,11 +76,11 @@ const initSegment3 = {
76
76
  const segment1 = {
77
77
  id: "seg1",
78
78
  isInit: false,
79
+ url: "some.URL1",
79
80
  time: 0,
80
81
  duration: 2,
81
82
  end: 2,
82
83
  timescale: 1 as const,
83
- mediaURLs: ["http://www.example.com/some.URL2"],
84
84
  complete: true,
85
85
  privateInfos: {},
86
86
  };
@@ -88,11 +88,11 @@ const segment1 = {
88
88
  const segment2 = {
89
89
  id: "seg2",
90
90
  isInit: false,
91
+ url: "some.URL2",
91
92
  time: 2,
92
93
  duration: 2,
93
94
  end: 4,
94
95
  timescale: 1 as const,
95
- mediaURLs: ["http://www.example.com/some.URL2"],
96
96
  complete: true,
97
97
  privateInfos: {},
98
98
  };
@@ -100,11 +100,11 @@ const segment2 = {
100
100
  const segment3 = {
101
101
  id: "seg3",
102
102
  isInit: false,
103
+ url: "some.URL3",
103
104
  time: 4,
104
105
  duration: 2,
105
106
  end: 6,
106
107
  timescale: 1 as const,
107
- mediaURLs: ["http://www.example.com/some.URL3"],
108
108
  complete: true,
109
109
  privateInfos: {},
110
110
  };
@@ -112,11 +112,11 @@ const segment3 = {
112
112
  const segment4 = {
113
113
  id: "seg4",
114
114
  isInit: false,
115
+ url: "some.URL4",
115
116
  time: 6,
116
117
  duration: 2,
117
118
  end: 8,
118
119
  timescale: 1 as const,
119
- mediaURLs: ["http://www.example.com/some.URL4"],
120
120
  complete: true,
121
121
  privateInfos: {},
122
122
  };
@@ -15,7 +15,7 @@
15
15
  */
16
16
 
17
17
  import resolveURL, {
18
- normalizeBaseURL,
18
+ getFilenameIndexInUrl,
19
19
  } from "../resolve_url";
20
20
 
21
21
  describe("utils - resolveURL", () => {
@@ -66,31 +66,35 @@ describe("utils - resolveURL", () => {
66
66
  });
67
67
  });
68
68
 
69
- describe("utils - normalizeBaseURL", () => {
70
- it("should do nothing if there is no / in the given string", () => {
71
- expect(normalizeBaseURL(";.<;L'dl'02984lirsahg;oliwr"))
72
- .toBe(";.<;L'dl'02984lirsahg;oliwr");
69
+ describe("utils - getFilenameIndexInUrl", () => {
70
+ it("should return the length for a string without slash", () => {
71
+ const str = ";.<;L'dl'02984lirsahg;oliwr";
72
+ expect(getFilenameIndexInUrl(str))
73
+ .toEqual(str.length);
73
74
  });
74
- it("should remove the content of a string after the last /", () => {
75
- expect(normalizeBaseURL(";ojdsfgje/eprowig/tohjroj/9ohyjwoij/s"))
76
- .toBe(";ojdsfgje/eprowig/tohjroj/9ohyjwoij/");
75
+ it("should return the index after the last / if one in URL", () => {
76
+ expect(getFilenameIndexInUrl(";ojdsfgje/eprowig/tohjroj/9ohyjwoij/s"))
77
+ .toEqual(36);
77
78
  });
78
- it("should do nothing if the only slash are part of the protocol", () => {
79
- expect(normalizeBaseURL("http://www.example.com"))
80
- .toBe("http://www.example.com");
81
- expect(normalizeBaseURL("https://a.t"))
82
- .toBe("https://a.t");
83
- expect(normalizeBaseURL("ftp://s"))
84
- .toBe("ftp://s");
79
+ it("should return length if the only slash are part of the protocol", () => {
80
+ const url1 = "http://www.example.com";
81
+ expect(getFilenameIndexInUrl(url1))
82
+ .toEqual(url1.length);
83
+ const url2 = "https://a.t";
84
+ expect(getFilenameIndexInUrl(url2))
85
+ .toEqual(url2.length);
86
+ const url3 = "ftp://s";
87
+ expect(getFilenameIndexInUrl(url3))
88
+ .toEqual(url3.length);
85
89
  });
86
90
  it("should not include slash coming in query parameters", () => {
87
- expect(normalizeBaseURL("http://www.example.com?test/toto"))
88
- .toBe("http://www.example.com");
89
- expect(normalizeBaseURL("https://ww/ddd?test/toto/efewf/ffe/"))
90
- .toBe("https://ww/");
91
- expect(normalizeBaseURL("https://ww/rr/d?test/toto/efewf/ffe/"))
92
- .toBe("https://ww/rr/");
93
- expect(normalizeBaseURL("https://ww/rr/d/?test/toto/efewf/ffe/"))
94
- .toBe("https://ww/rr/d/");
91
+ expect(getFilenameIndexInUrl("http://www.example.com?test/toto"))
92
+ .toEqual(22);
93
+ expect(getFilenameIndexInUrl("https://ww/ddd?test/toto/efewf/ffe/"))
94
+ .toEqual(11);
95
+ expect(getFilenameIndexInUrl("https://ww/rr/d?test/toto/efewf/ffe/"))
96
+ .toEqual(14);
97
+ expect(getFilenameIndexInUrl("https://ww/rr/d/?test/toto/efewf/ffe/"))
98
+ .toEqual(16);
95
99
  });
96
100
  });
@@ -29,8 +29,6 @@ export interface IEventEmitter<T> {
29
29
  removeEventListener<TEventName extends keyof T>(evt : TEventName,
30
30
  fn : IListener<T, TEventName>) :
31
31
  void;
32
- trigger?<TEventName extends keyof T>(evt : TEventName,
33
- arg : IArgs<T, TEventName>) : void;
34
32
  }
35
33
 
36
34
  // Type of the argument in the listener's callback
@@ -131,7 +129,7 @@ export default class EventEmitter<T> implements IEventEmitter<T> {
131
129
  * @param {*} arg - The eventual payload for that event. All triggered
132
130
  * callbacks will recieve this payload as argument.
133
131
  */
134
- public trigger<TEventName extends keyof T>(
132
+ protected trigger<TEventName extends keyof T>(
135
133
  evt : TEventName,
136
134
  arg : IArgs<T, TEventName>
137
135
  ) : void {
@@ -91,14 +91,17 @@ export default function resolveURL(...args : Array<string|undefined>) : string {
91
91
  }
92
92
 
93
93
  /**
94
- * Remove string after the last '/'.
94
+ * In a given URL, find the index at which the filename begins.
95
+ * That is, this function finds the index of the last `/` character and returns
96
+ * the index after it, returning the length of the whole URL if no `/` was found
97
+ * after the scheme (i.e. in `http://`, the slashes are not considered).
95
98
  * @param {string} url
96
- * @returns {string}
99
+ * @returns {number}
97
100
  */
98
- function normalizeBaseURL(url : string) : string {
101
+ function getFilenameIndexInUrl(url : string) : number {
99
102
  const indexOfLastSlash = url.lastIndexOf("/");
100
103
  if (indexOfLastSlash < 0) {
101
- return url;
104
+ return url.length;
102
105
  }
103
106
 
104
107
  if (schemeRe.test(url)) {
@@ -106,7 +109,7 @@ function normalizeBaseURL(url : string) : string {
106
109
  if (firstSlashIndex >= 0 && indexOfLastSlash === firstSlashIndex + 1) {
107
110
  // The "/" detected is actually the one from the protocol part of the URL
108
111
  // ("https://")
109
- return url;
112
+ return url.length;
110
113
  }
111
114
  }
112
115
 
@@ -114,10 +117,10 @@ function normalizeBaseURL(url : string) : string {
114
117
  if (indexOfQuestionMark >= 0 && indexOfQuestionMark < indexOfLastSlash) {
115
118
  // There are query parameters. Let's ignore them and re-run the logic
116
119
  // without
117
- return normalizeBaseURL(url.substring(0, indexOfQuestionMark));
120
+ return getFilenameIndexInUrl(url.substring(0, indexOfQuestionMark));
118
121
  }
119
122
 
120
- return url.substring(0, indexOfLastSlash + 1);
123
+ return indexOfLastSlash + 1;
121
124
  }
122
125
 
123
- export { normalizeBaseURL };
126
+ export { getFilenameIndexInUrl };