@amazon/vinyl 3.2.0 → 3.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +30 -24
- package/dist/index.cjs.map +2 -2
- package/dist/index.js +30 -24
- package/dist/index.js.map +2 -2
- package/dist/test/integ.es5.js +167 -155
- package/dist/test/integ.js +260 -50
- package/dist/test/integ.js.map +2 -2
- package/dist/types/current/ad/AdControllerImpl.d.ts +18 -2
- package/dist/types/current/ad/AdControllerImpl.d.ts.map +1 -1
- package/dist/types/current/ad/AdControllerImpl.js +42 -20
- package/dist/types/current/playback/createStallMonitor.d.ts.map +1 -1
- package/dist/types/current/playback/createStallMonitor.js +19 -14
- package/dist/types/current/tsconfig.tsbuildinfo +1 -1
- package/dist/types/ts3.7/ad/AdControllerImpl.d.ts +18 -2
- package/dist/types/ts4.1/ad/AdControllerImpl.d.ts +18 -2
- package/dist/types/ts4.7/ad/AdControllerImpl.d.ts +18 -2
- package/dist/unit/types/current/ad/AdControllerImpl.test.js +110 -4
- package/dist/unit/types/current/playback/createStallMonitor.test.js +38 -0
- package/dist/unit/types/current/tsconfig.tsbuildinfo +1 -1
- package/dist/vinylTestUtil/index.js +10 -1
- package/dist/vinylTestUtil/index.js.map +2 -2
- package/dist/vinylTestUtil/types/current/assets/vinylTestAssets.d.ts +5 -0
- package/dist/vinylTestUtil/types/current/assets/vinylTestAssets.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/assets/vinylTestAssets.js +9 -0
- package/dist/vinylTestUtil/types/current/tsconfig.tsbuildinfo +1 -1
- package/dist/vinylTestUtil/types/ts3.7/assets/vinylTestAssets.d.ts +5 -0
- package/dist/vinylTestUtil/types/ts4.1/assets/vinylTestAssets.d.ts +5 -0
- package/dist/vinylTestUtil/types/ts4.7/assets/vinylTestAssets.d.ts +5 -0
- package/package.json +10 -10
package/dist/index.cjs
CHANGED
|
@@ -84,6 +84,7 @@ __export(index_exports, {
|
|
|
84
84
|
MsCommonMediaKeySystemAccess: () => MsCommonMediaKeySystemAccess,
|
|
85
85
|
MsCommonMediaKeys: () => MsCommonMediaKeys,
|
|
86
86
|
MseTrack: () => MseTrack,
|
|
87
|
+
PLAYOUT_LIMIT_TOLERANCE: () => PLAYOUT_LIMIT_TOLERANCE,
|
|
87
88
|
PLAY_READY_KEY_SYSTEMS: () => PLAY_READY_KEY_SYSTEMS,
|
|
88
89
|
POLL_BUFFER_THROTTLE: () => POLL_BUFFER_THROTTLE,
|
|
89
90
|
PREFETCH_POLL_THROTTLE: () => PREFETCH_POLL_THROTTLE,
|
|
@@ -353,6 +354,7 @@ var AdError = class _AdError extends import_vinyl_util.ReportableError {
|
|
|
353
354
|
|
|
354
355
|
// src/ad/AdControllerImpl.ts
|
|
355
356
|
var AD_START_TOLERANCE = 0.05;
|
|
357
|
+
var PLAYOUT_LIMIT_TOLERANCE = 1;
|
|
356
358
|
var defaultAdControllerImplOptions = {
|
|
357
359
|
adLoadTimeout: 15,
|
|
358
360
|
preloadAheadTime: 10
|
|
@@ -843,23 +845,29 @@ var AdControllerImpl = class extends import_vinyl_util2.EventHostImpl {
|
|
|
843
845
|
});
|
|
844
846
|
}
|
|
845
847
|
/**
|
|
846
|
-
*
|
|
847
|
-
*
|
|
848
|
+
* Enforces the break-level playout limit (X-PLAYOUT-LIMIT): a budget shared
|
|
849
|
+
* across all of the break's ads. When cumulative playout reaches it, the
|
|
850
|
+
* whole break ends, dropping any ads that have not started.
|
|
851
|
+
*
|
|
852
|
+
* This is deliberately NOT a per-ad cap. Each ad asset is its own source and
|
|
853
|
+
* ends on its media `ended` (see the 'ended' handler), which is what advances
|
|
854
|
+
* a multi-ad break. Ending an ad at its declared per-ad DURATION instead would
|
|
855
|
+
* truncate the real asset whenever a packager under-declares it — e.g. rounds
|
|
856
|
+
* a 6.732s asset down to a whole-second 6 — cutting off the fractional tail.
|
|
848
857
|
*/
|
|
849
858
|
enforcePlayoutLimits(adState) {
|
|
859
|
+
if (!adState.started) return;
|
|
860
|
+
const { parentBreak } = adState;
|
|
861
|
+
const limit = parentBreak.adBreak.playoutLimit;
|
|
862
|
+
if (limit == null) return;
|
|
850
863
|
const pC = this.deps.playbackController;
|
|
851
|
-
const
|
|
852
|
-
if (
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
const limit = adBreak.playoutLimit;
|
|
856
|
-
if (limit != null && parentBreak.playoutElapsed + elapsed >= limit) {
|
|
857
|
-
parentBreak.clear();
|
|
858
|
-
this.endAd(adState);
|
|
859
|
-
} else if (ad.duration != null && elapsed >= ad.duration) {
|
|
860
|
-
this.endAd(adState);
|
|
861
|
-
}
|
|
864
|
+
const elapsed = Math.max(0, pC.currentTime - adState.timeStart);
|
|
865
|
+
if (parentBreak.playoutElapsed + elapsed < limit) return;
|
|
866
|
+
if (isFinite(pC.duration) && pC.duration > 0 && pC.duration - pC.currentTime <= PLAYOUT_LIMIT_TOLERANCE) {
|
|
867
|
+
return;
|
|
862
868
|
}
|
|
869
|
+
parentBreak.clear();
|
|
870
|
+
this.endAd(adState);
|
|
863
871
|
}
|
|
864
872
|
setPendingBreaks(newPending) {
|
|
865
873
|
this.pendingAdBreaks = newPending.filter(
|
|
@@ -2817,7 +2825,7 @@ function configureVinylGlobal(options) {
|
|
|
2817
2825
|
var import_vinyl_util27 = require("@amazon/vinyl-util");
|
|
2818
2826
|
var vinylVersion = /* @__PURE__ */ (0, import_vinyl_util27.parseVersion)(
|
|
2819
2827
|
/* istanbul ignore next */
|
|
2820
|
-
"3.2.
|
|
2828
|
+
"3.2.1"
|
|
2821
2829
|
);
|
|
2822
2830
|
|
|
2823
2831
|
// src/global/globalRef.ts
|
|
@@ -3016,6 +3024,7 @@ var PlaybackNetworkState = /* @__PURE__ */ ((PlaybackNetworkState2) => {
|
|
|
3016
3024
|
})(PlaybackNetworkState || {});
|
|
3017
3025
|
|
|
3018
3026
|
// src/playback/createStallMonitor.ts
|
|
3027
|
+
var PROGRESS_EPSILON = 1e-6;
|
|
3019
3028
|
function createStallMonitor(controller, callbacks, options = {}) {
|
|
3020
3029
|
var _a, _b;
|
|
3021
3030
|
const stallThresholdMs = ((_a = options.stallThreshold) != null ? _a : 1) * 1e3;
|
|
@@ -3024,6 +3033,7 @@ function createStallMonitor(controller, callbacks, options = {}) {
|
|
|
3024
3033
|
let lastProgressAt = Date.now();
|
|
3025
3034
|
let inStall = false;
|
|
3026
3035
|
let pollId = null;
|
|
3036
|
+
const { add, dispose } = (0, import_vinyl_util30.createDisposer)();
|
|
3027
3037
|
const endStall = (reason) => {
|
|
3028
3038
|
if (!inStall) return;
|
|
3029
3039
|
inStall = false;
|
|
@@ -3040,6 +3050,7 @@ function createStallMonitor(controller, callbacks, options = {}) {
|
|
|
3040
3050
|
clearInterval(pollId);
|
|
3041
3051
|
pollId = null;
|
|
3042
3052
|
};
|
|
3053
|
+
add(stopPoll);
|
|
3043
3054
|
const startPoll = () => {
|
|
3044
3055
|
if (pollId != null) return;
|
|
3045
3056
|
pollId = setInterval(() => {
|
|
@@ -3055,17 +3066,18 @@ function createStallMonitor(controller, callbacks, options = {}) {
|
|
|
3055
3066
|
observedPlaying = false;
|
|
3056
3067
|
stopPoll();
|
|
3057
3068
|
};
|
|
3058
|
-
const { add, dispose } = (0, import_vinyl_util30.createDisposer)();
|
|
3059
3069
|
add(
|
|
3060
3070
|
controller.on("playing", () => {
|
|
3061
3071
|
if (inStall) endStall("playing" /* PLAYING */);
|
|
3062
|
-
|
|
3072
|
+
lastProgressAt = Date.now();
|
|
3063
3073
|
observedPlaying = true;
|
|
3064
3074
|
startPoll();
|
|
3065
3075
|
})
|
|
3066
3076
|
);
|
|
3067
3077
|
add(
|
|
3068
|
-
controller.on("timeUpdate", () => {
|
|
3078
|
+
controller.on("timeUpdate", ({ previous, current }) => {
|
|
3079
|
+
if (previous != null && current - previous <= PROGRESS_EPSILON)
|
|
3080
|
+
return;
|
|
3069
3081
|
if (inStall) endStall("playing" /* PLAYING */);
|
|
3070
3082
|
lastProgressAt = Date.now();
|
|
3071
3083
|
})
|
|
@@ -3073,13 +3085,7 @@ function createStallMonitor(controller, callbacks, options = {}) {
|
|
|
3073
3085
|
add(controller.on("pause", () => suspend("pause" /* PAUSE */)));
|
|
3074
3086
|
add(controller.on("seeking", () => suspend("seeking" /* SEEKING */)));
|
|
3075
3087
|
add(controller.on("emptied", () => suspend("emptied" /* EMPTIED */)));
|
|
3076
|
-
|
|
3077
|
-
return () => {
|
|
3078
|
-
if (stopped) return;
|
|
3079
|
-
stopped = true;
|
|
3080
|
-
stopPoll();
|
|
3081
|
-
dispose();
|
|
3082
|
-
};
|
|
3088
|
+
return dispose;
|
|
3083
3089
|
}
|
|
3084
3090
|
|
|
3085
3091
|
// src/playback/error/InvalidSeekError.ts
|