@brndts/brndts-ads 1.14.2 → 1.14.3

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.js CHANGED
@@ -49920,18 +49920,18 @@ var browserPerformanceTimeOrigin = function() {
49920
49920
  // node_modules/@sentry/core/build/esm/utils-hoist/misc.js
49921
49921
  function uuid4() {
49922
49922
  var gbl = GLOBAL_OBJ;
49923
- var crypto = gbl.crypto || gbl.msCrypto;
49923
+ var crypto2 = gbl.crypto || gbl.msCrypto;
49924
49924
  var getRandomByte = function() {
49925
49925
  return Math.random() * 16;
49926
49926
  };
49927
49927
  try {
49928
- if (crypto && crypto.randomUUID) {
49929
- return crypto.randomUUID().replace(/-/g, "");
49928
+ if (crypto2 && crypto2.randomUUID) {
49929
+ return crypto2.randomUUID().replace(/-/g, "");
49930
49930
  }
49931
- if (crypto && crypto.getRandomValues) {
49931
+ if (crypto2 && crypto2.getRandomValues) {
49932
49932
  getRandomByte = function() {
49933
49933
  var typedArray = new Uint8Array(1);
49934
- crypto.getRandomValues(typedArray);
49934
+ crypto2.getRandomValues(typedArray);
49935
49935
  return typedArray[0];
49936
49936
  };
49937
49937
  }
@@ -75400,6 +75400,7 @@ var DailymotionMediaElement = /*#__PURE__*/ function(GenericMediaElement) {
75400
75400
  var container = document.createElement("div");
75401
75401
  this.rootNode = target;
75402
75402
  container.id = "BRNDTS";
75403
+ container.dataset.__brndts_k = target.dataset.__brndts_k;
75403
75404
  elements_default.wrap(target, container);
75404
75405
  window.dailymotion.createPlayer(target.id, {
75405
75406
  video: videoId
@@ -84296,37 +84297,118 @@ var VideoAd = /*#__PURE__*/ function() {
84296
84297
  return VideoAd;
84297
84298
  }();
84298
84299
  // src/Ads/VideoAds/VideoAds.ts
84300
+ function makeKey() {
84301
+ var _crypto;
84302
+ if ((_crypto = crypto) === null || _crypto === void 0 ? void 0 : _crypto.getRandomValues) {
84303
+ var a = new Uint32Array(2);
84304
+ crypto.getRandomValues(a);
84305
+ return a[0].toString(36) + a[1].toString(36);
84306
+ }
84307
+ return Math.random().toString(36).slice(2) + Date.now().toString(36);
84308
+ }
84309
+ function ensureKey(el) {
84310
+ if (!el.dataset.__brndts_k) {
84311
+ var key;
84312
+ if (el.closest("[data-__brndts_k]")) {
84313
+ var _el_closest;
84314
+ key = (_el_closest = el.closest("[data-__brndts_k]")) === null || _el_closest === void 0 ? void 0 : _el_closest.dataset.__brndts_k;
84315
+ }
84316
+ el.dataset.__brndts_k = key || makeKey();
84317
+ }
84318
+ return el.dataset.__brndts_k;
84319
+ }
84299
84320
  var VideoAds = /*#__PURE__*/ function() {
84300
84321
  function VideoAds(context) {
84301
84322
  _class_call_check(this, VideoAds);
84302
- this.videoAdElements = [];
84323
+ this.byEl = /* @__PURE__ */ new WeakMap();
84324
+ // Element -> VideoAd
84325
+ this.byKey = /* @__PURE__ */ new Map();
84326
+ // key -> { inst: VideoAd, el: Element }
84327
+ this.pendingCleanup = /* @__PURE__ */ new Map();
84303
84328
  this.handlePageMutation = this.handlePageMutation.bind(this);
84329
+ this.attachOrTransfer = this.attachOrTransfer.bind(this);
84330
+ this.scheduleCleanupIfGone = this.scheduleCleanupIfGone.bind(this);
84331
+ this.scanAndAttach = functions_default.debounce(this.scanAndAttach.bind(this), 50);
84304
84332
  this.context = context;
84305
84333
  }
84306
84334
  _create_class(VideoAds, [
84307
84335
  {
84308
- key: "handleMedias",
84309
- value: function handleMedias() {
84310
- try {
84311
- var elements2 = [];
84312
- for(var index = 0; index < this.videoAdElements.length; index++){
84313
- var element = this.videoAdElements[index];
84314
- if (element.isBroken()) {
84315
- element.destroy();
84316
- } else {
84317
- elements2.push(element);
84336
+ key: "attachOrTransfer",
84337
+ value: function attachOrTransfer(el) {
84338
+ if (!_instanceof(el, Element)) {
84339
+ return;
84340
+ }
84341
+ ;
84342
+ var key = ensureKey(el);
84343
+ var known = this.byKey.get(key);
84344
+ if (known) {
84345
+ if (known.el !== el) {
84346
+ var tid = this.pendingCleanup.get(key);
84347
+ if (tid) {
84348
+ clearTimeout(tid);
84349
+ this.pendingCleanup.delete(key);
84318
84350
  }
84351
+ var inst2 = known.inst;
84352
+ this.byEl.delete(known.el);
84353
+ this.byEl.set(el, inst2);
84354
+ known.el = el;
84355
+ this.byKey.set(key, known);
84319
84356
  }
84320
- this.videoAdElements = elements2;
84321
- var medias = MediaElementFactory.getElements(this.context.selectors.targets);
84322
- for(var index1 = 0; index1 < medias.length; index1++){
84323
- if (!medias[index1] || medias[index1].closest("#BRNDTS_R") || medias[index1].querySelector("#BRNDTS_R")) {
84324
- continue;
84325
- }
84326
- var videoAd = new VideoAd(this.context, medias[index1]);
84327
- this.videoAdElements.push(videoAd);
84328
- videoAd.start();
84357
+ return;
84358
+ }
84359
+ var inst = new VideoAd(this.context, el);
84360
+ this.byEl.set(el, inst);
84361
+ this.byKey.set(key, {
84362
+ inst: inst,
84363
+ el: el
84364
+ });
84365
+ inst.start();
84366
+ }
84367
+ },
84368
+ {
84369
+ // --- cleanup when nodes are actually gone (with a grace period) ---
84370
+ key: "scheduleCleanupIfGone",
84371
+ value: function scheduleCleanupIfGone(el) {
84372
+ var _this = this;
84373
+ var delayMs = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 800;
84374
+ var _el_dataset;
84375
+ var key = (_el_dataset = el.dataset) === null || _el_dataset === void 0 ? void 0 : _el_dataset.__brndts_k;
84376
+ if (!key) {
84377
+ return;
84378
+ }
84379
+ if (!this.byKey.has(key) || this.pendingCleanup.has(key)) {
84380
+ return;
84381
+ }
84382
+ var tid = setTimeout(function() {
84383
+ var entry = _this.byKey.get(key);
84384
+ if (entry && !entry.el.isConnected) {
84385
+ var _entry_inst_destroy, _entry_inst;
84386
+ (_entry_inst_destroy = (_entry_inst = entry.inst).destroy) === null || _entry_inst_destroy === void 0 ? void 0 : _entry_inst_destroy.call(_entry_inst);
84387
+ _this.byEl.delete(entry.el);
84388
+ _this.byKey.delete(key);
84329
84389
  }
84390
+ _this.pendingCleanup.delete(key);
84391
+ }, delayMs);
84392
+ this.pendingCleanup.set(key, tid);
84393
+ }
84394
+ },
84395
+ {
84396
+ // --- DOM wiring: scan + observer ---
84397
+ key: "scanAndAttach",
84398
+ value: function scanAndAttach() {
84399
+ var _this = this;
84400
+ var medias = MediaElementFactory.getElements(this.context.selectors.targets);
84401
+ medias.forEach(function(el) {
84402
+ return _this.attachOrTransfer(el);
84403
+ });
84404
+ }
84405
+ },
84406
+ {
84407
+ // small debounce
84408
+ key: "handleMedias",
84409
+ value: function handleMedias() {
84410
+ try {
84411
+ this.scanAndAttach();
84330
84412
  } catch (error) {
84331
84413
  if (_instanceof(error, Error)) {
84332
84414
  ErrorHandler.handle(error);
@@ -84337,49 +84419,41 @@ var VideoAds = /*#__PURE__*/ function() {
84337
84419
  {
84338
84420
  key: "start",
84339
84421
  value: function start() {
84422
+ var _this = this;
84340
84423
  if (!this.context.supports.api) {
84341
84424
  this.context.logger.error("Setup failed: no support");
84342
84425
  return;
84343
84426
  }
84344
- this.handleMedias();
84427
+ var medias = MediaElementFactory.getElements(this.context.selectors.targets);
84428
+ medias.forEach(function(el) {
84429
+ return _this.attachOrTransfer(el);
84430
+ });
84345
84431
  }
84346
84432
  },
84347
84433
  {
84348
84434
  key: "handlePageMutation",
84349
84435
  value: function handlePageMutation(mutations) {
84350
- var medias = [];
84351
84436
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
84352
84437
  try {
84353
84438
  for(var _iterator = mutations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
84354
- var mutation = _step.value;
84355
- if (mutation.type === "childList") {
84356
- var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
84357
- try {
84358
- for(var _iterator1 = mutation.addedNodes[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
84359
- var node = _step1.value;
84360
- var _node_matches;
84361
- if ((_node_matches = node.matches) === null || _node_matches === void 0 ? void 0 : _node_matches.call(node, this.context.selectors.targets)) {
84362
- var mediaElement = MediaElementFactory.isElement(node);
84363
- if (mediaElement) {
84364
- medias.push(mediaElement);
84365
- }
84366
- }
84367
- }
84368
- } catch (err) {
84369
- _didIteratorError1 = true;
84370
- _iteratorError1 = err;
84371
- } finally{
84372
- try {
84373
- if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
84374
- _iterator1.return();
84375
- }
84376
- } finally{
84377
- if (_didIteratorError1) {
84378
- throw _iteratorError1;
84439
+ var rec = _step.value;
84440
+ rec.removedNodes.forEach(function(n) {
84441
+ if (n.nodeType === 1) {
84442
+ var stack = [
84443
+ n
84444
+ ];
84445
+ while(stack.length){
84446
+ var _node_dataset;
84447
+ var node = stack.pop();
84448
+ if ((_node_dataset = node.dataset) === null || _node_dataset === void 0 ? void 0 : _node_dataset.__brndts_k) {}
84449
+ ;
84450
+ for(var c = node.firstElementChild; c; c = c.nextElementSibling){
84451
+ stack.push(c);
84379
84452
  }
84453
+ ;
84380
84454
  }
84381
84455
  }
84382
- }
84456
+ });
84383
84457
  }
84384
84458
  } catch (err) {
84385
84459
  _didIteratorError = true;
@@ -84395,58 +84469,64 @@ var VideoAds = /*#__PURE__*/ function() {
84395
84469
  }
84396
84470
  }
84397
84471
  }
84398
- for(var index = 0; index < medias.length; index++){
84399
- if (!medias[index] || medias[index].closest("#BRNDTS_R") || medias[index].querySelector("#BRNDTS_R") || medias[index].brndts_VE !== void 0) {
84400
- continue;
84401
- }
84402
- var videoAd = new VideoAd(this.context, medias[index]);
84403
- this.videoAdElements.push(videoAd);
84404
- videoAd.start();
84405
- }
84472
+ this.scanAndAttach();
84406
84473
  }
84407
84474
  },
84408
84475
  {
84409
84476
  key: "updateSize",
84410
84477
  value: function updateSize() {
84411
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
84412
- try {
84413
- for(var _iterator = this.videoAdElements[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
84414
- var videoAd = _step.value;
84415
- videoAd.updateSize();
84416
- }
84417
- } catch (err) {
84418
- _didIteratorError = true;
84419
- _iteratorError = err;
84420
- } finally{
84421
- try {
84422
- if (!_iteratorNormalCompletion && _iterator.return != null) {
84423
- _iterator.return();
84424
- }
84425
- } finally{
84426
- if (_didIteratorError) {
84427
- throw _iteratorError;
84428
- }
84478
+ var _this = this;
84479
+ this.byKey.forEach(function(value2, key) {
84480
+ var tid = _this.pendingCleanup.get(key);
84481
+ if (!tid) {
84482
+ var _value2_inst_updateSize, _value2_inst;
84483
+ (_value2_inst_updateSize = (_value2_inst = value2.inst).updateSize) === null || _value2_inst_updateSize === void 0 ? void 0 : _value2_inst_updateSize.call(_value2_inst);
84429
84484
  }
84430
- }
84485
+ });
84431
84486
  }
84432
84487
  },
84433
84488
  {
84434
84489
  key: "getVideoAd",
84435
84490
  value: function getVideoAd(index) {
84491
+ if (this.byKey.size === 0) {
84492
+ return void 0;
84493
+ }
84436
84494
  if (index === void 0) {
84437
- return this.videoAdElements[0];
84495
+ return this.byKey.values().next().value.inst;
84496
+ }
84497
+ if (index < 0 || index >= this.byKey.size) {
84498
+ return void 0;
84438
84499
  }
84439
- return this.videoAdElements[index];
84500
+ var keys = Array.from(this.byKey.keys());
84501
+ var key = keys[index];
84502
+ if (!key) {
84503
+ return void 0;
84504
+ }
84505
+ var entry = this.byKey.get(key);
84506
+ if (!entry) {
84507
+ return void 0;
84508
+ }
84509
+ return entry.inst;
84440
84510
  }
84441
84511
  },
84442
84512
  {
84443
84513
  key: "destroy",
84444
84514
  value: function destroy() {
84515
+ var _this = this;
84445
84516
  this.context.logger.log("destroying video ads");
84446
- this.videoAdElements.forEach(function(videoAd) {
84447
- videoAd.destroy();
84517
+ this.byKey.forEach(function(value2, key) {
84518
+ var _value2_inst_destroy, _value2_inst;
84519
+ var tid = _this.pendingCleanup.get(key);
84520
+ if (tid) {
84521
+ clearTimeout(tid);
84522
+ _this.pendingCleanup.delete(key);
84523
+ }
84524
+ (_value2_inst_destroy = (_value2_inst = value2.inst).destroy) === null || _value2_inst_destroy === void 0 ? void 0 : _value2_inst_destroy.call(_value2_inst);
84525
+ _this.byEl.delete(value2.el);
84526
+ _this.byKey.delete(key);
84448
84527
  });
84449
- this.videoAdElements = [];
84528
+ this.pendingCleanup.clear();
84529
+ this.byEl = /* @__PURE__ */ new WeakMap();
84450
84530
  this.context.logger.log("destroyed video ads");
84451
84531
  }
84452
84532
  }