@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.mjs CHANGED
@@ -49906,18 +49906,18 @@ var browserPerformanceTimeOrigin = function() {
49906
49906
  // node_modules/@sentry/core/build/esm/utils-hoist/misc.js
49907
49907
  function uuid4() {
49908
49908
  var gbl = GLOBAL_OBJ;
49909
- var crypto = gbl.crypto || gbl.msCrypto;
49909
+ var crypto2 = gbl.crypto || gbl.msCrypto;
49910
49910
  var getRandomByte = function() {
49911
49911
  return Math.random() * 16;
49912
49912
  };
49913
49913
  try {
49914
- if (crypto && crypto.randomUUID) {
49915
- return crypto.randomUUID().replace(/-/g, "");
49914
+ if (crypto2 && crypto2.randomUUID) {
49915
+ return crypto2.randomUUID().replace(/-/g, "");
49916
49916
  }
49917
- if (crypto && crypto.getRandomValues) {
49917
+ if (crypto2 && crypto2.getRandomValues) {
49918
49918
  getRandomByte = function() {
49919
49919
  var typedArray = new Uint8Array(1);
49920
- crypto.getRandomValues(typedArray);
49920
+ crypto2.getRandomValues(typedArray);
49921
49921
  return typedArray[0];
49922
49922
  };
49923
49923
  }
@@ -75487,6 +75487,7 @@ var DailymotionMediaElement = /*#__PURE__*/ function(GenericMediaElement) {
75487
75487
  var container = document.createElement("div");
75488
75488
  this.rootNode = target;
75489
75489
  container.id = "BRNDTS";
75490
+ container.dataset.__brndts_k = target.dataset.__brndts_k;
75490
75491
  elements_default.wrap(target, container);
75491
75492
  window.dailymotion.createPlayer(target.id, {
75492
75493
  video: videoId
@@ -84435,38 +84436,119 @@ var VideoAd = /*#__PURE__*/ function() {
84435
84436
  return VideoAd;
84436
84437
  }();
84437
84438
  // src/Ads/VideoAds/VideoAds.ts
84439
+ function makeKey() {
84440
+ var _crypto;
84441
+ if ((_crypto = crypto) === null || _crypto === void 0 ? void 0 : _crypto.getRandomValues) {
84442
+ var a = new Uint32Array(2);
84443
+ crypto.getRandomValues(a);
84444
+ return a[0].toString(36) + a[1].toString(36);
84445
+ }
84446
+ return Math.random().toString(36).slice(2) + Date.now().toString(36);
84447
+ }
84448
+ function ensureKey(el) {
84449
+ if (!el.dataset.__brndts_k) {
84450
+ var key;
84451
+ if (el.closest("[data-__brndts_k]")) {
84452
+ var _el_closest;
84453
+ key = (_el_closest = el.closest("[data-__brndts_k]")) === null || _el_closest === void 0 ? void 0 : _el_closest.dataset.__brndts_k;
84454
+ }
84455
+ el.dataset.__brndts_k = key || makeKey();
84456
+ }
84457
+ return el.dataset.__brndts_k;
84458
+ }
84438
84459
  var VideoAds = /*#__PURE__*/ function() {
84439
84460
  "use strict";
84440
84461
  function VideoAds(context) {
84441
84462
  _class_call_check(this, VideoAds);
84442
- this.videoAdElements = [];
84463
+ this.byEl = /* @__PURE__ */ new WeakMap();
84464
+ // Element -> VideoAd
84465
+ this.byKey = /* @__PURE__ */ new Map();
84466
+ // key -> { inst: VideoAd, el: Element }
84467
+ this.pendingCleanup = /* @__PURE__ */ new Map();
84443
84468
  this.handlePageMutation = this.handlePageMutation.bind(this);
84469
+ this.attachOrTransfer = this.attachOrTransfer.bind(this);
84470
+ this.scheduleCleanupIfGone = this.scheduleCleanupIfGone.bind(this);
84471
+ this.scanAndAttach = functions_default.debounce(this.scanAndAttach.bind(this), 50);
84444
84472
  this.context = context;
84445
84473
  }
84446
84474
  _create_class(VideoAds, [
84447
84475
  {
84448
- key: "handleMedias",
84449
- value: function handleMedias() {
84450
- try {
84451
- var elements2 = [];
84452
- for(var index = 0; index < this.videoAdElements.length; index++){
84453
- var element = this.videoAdElements[index];
84454
- if (element.isBroken()) {
84455
- element.destroy();
84456
- } else {
84457
- elements2.push(element);
84476
+ key: "attachOrTransfer",
84477
+ value: function attachOrTransfer(el) {
84478
+ if (!_instanceof(el, Element)) {
84479
+ return;
84480
+ }
84481
+ ;
84482
+ var key = ensureKey(el);
84483
+ var known = this.byKey.get(key);
84484
+ if (known) {
84485
+ if (known.el !== el) {
84486
+ var tid = this.pendingCleanup.get(key);
84487
+ if (tid) {
84488
+ clearTimeout(tid);
84489
+ this.pendingCleanup.delete(key);
84458
84490
  }
84491
+ var inst2 = known.inst;
84492
+ this.byEl.delete(known.el);
84493
+ this.byEl.set(el, inst2);
84494
+ known.el = el;
84495
+ this.byKey.set(key, known);
84459
84496
  }
84460
- this.videoAdElements = elements2;
84461
- var medias = MediaElementFactory.getElements(this.context.selectors.targets);
84462
- for(var index1 = 0; index1 < medias.length; index1++){
84463
- if (!medias[index1] || medias[index1].closest("#BRNDTS_R") || medias[index1].querySelector("#BRNDTS_R")) {
84464
- continue;
84465
- }
84466
- var videoAd = new VideoAd(this.context, medias[index1]);
84467
- this.videoAdElements.push(videoAd);
84468
- videoAd.start();
84497
+ return;
84498
+ }
84499
+ var inst = new VideoAd(this.context, el);
84500
+ this.byEl.set(el, inst);
84501
+ this.byKey.set(key, {
84502
+ inst: inst,
84503
+ el: el
84504
+ });
84505
+ inst.start();
84506
+ }
84507
+ },
84508
+ {
84509
+ // --- cleanup when nodes are actually gone (with a grace period) ---
84510
+ key: "scheduleCleanupIfGone",
84511
+ value: function scheduleCleanupIfGone(el) {
84512
+ var _this = this;
84513
+ var delayMs = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 800;
84514
+ var _el_dataset;
84515
+ var key = (_el_dataset = el.dataset) === null || _el_dataset === void 0 ? void 0 : _el_dataset.__brndts_k;
84516
+ if (!key) {
84517
+ return;
84518
+ }
84519
+ if (!this.byKey.has(key) || this.pendingCleanup.has(key)) {
84520
+ return;
84521
+ }
84522
+ var tid = setTimeout(function() {
84523
+ var entry = _this.byKey.get(key);
84524
+ if (entry && !entry.el.isConnected) {
84525
+ var _entry_inst_destroy, _entry_inst;
84526
+ (_entry_inst_destroy = (_entry_inst = entry.inst).destroy) === null || _entry_inst_destroy === void 0 ? void 0 : _entry_inst_destroy.call(_entry_inst);
84527
+ _this.byEl.delete(entry.el);
84528
+ _this.byKey.delete(key);
84469
84529
  }
84530
+ _this.pendingCleanup.delete(key);
84531
+ }, delayMs);
84532
+ this.pendingCleanup.set(key, tid);
84533
+ }
84534
+ },
84535
+ {
84536
+ // --- DOM wiring: scan + observer ---
84537
+ key: "scanAndAttach",
84538
+ value: function scanAndAttach() {
84539
+ var _this = this;
84540
+ var medias = MediaElementFactory.getElements(this.context.selectors.targets);
84541
+ medias.forEach(function(el) {
84542
+ return _this.attachOrTransfer(el);
84543
+ });
84544
+ }
84545
+ },
84546
+ {
84547
+ // small debounce
84548
+ key: "handleMedias",
84549
+ value: function handleMedias() {
84550
+ try {
84551
+ this.scanAndAttach();
84470
84552
  } catch (error) {
84471
84553
  if (_instanceof(error, Error)) {
84472
84554
  ErrorHandler.handle(error);
@@ -84477,49 +84559,41 @@ var VideoAds = /*#__PURE__*/ function() {
84477
84559
  {
84478
84560
  key: "start",
84479
84561
  value: function start() {
84562
+ var _this = this;
84480
84563
  if (!this.context.supports.api) {
84481
84564
  this.context.logger.error("Setup failed: no support");
84482
84565
  return;
84483
84566
  }
84484
- this.handleMedias();
84567
+ var medias = MediaElementFactory.getElements(this.context.selectors.targets);
84568
+ medias.forEach(function(el) {
84569
+ return _this.attachOrTransfer(el);
84570
+ });
84485
84571
  }
84486
84572
  },
84487
84573
  {
84488
84574
  key: "handlePageMutation",
84489
84575
  value: function handlePageMutation(mutations) {
84490
- var medias = [];
84491
84576
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
84492
84577
  try {
84493
84578
  for(var _iterator = mutations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
84494
- var mutation = _step.value;
84495
- if (mutation.type === "childList") {
84496
- var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
84497
- try {
84498
- for(var _iterator1 = mutation.addedNodes[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
84499
- var node = _step1.value;
84500
- var _node_matches;
84501
- if ((_node_matches = node.matches) === null || _node_matches === void 0 ? void 0 : _node_matches.call(node, this.context.selectors.targets)) {
84502
- var mediaElement = MediaElementFactory.isElement(node);
84503
- if (mediaElement) {
84504
- medias.push(mediaElement);
84505
- }
84506
- }
84507
- }
84508
- } catch (err) {
84509
- _didIteratorError1 = true;
84510
- _iteratorError1 = err;
84511
- } finally{
84512
- try {
84513
- if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
84514
- _iterator1.return();
84515
- }
84516
- } finally{
84517
- if (_didIteratorError1) {
84518
- throw _iteratorError1;
84579
+ var rec = _step.value;
84580
+ rec.removedNodes.forEach(function(n) {
84581
+ if (n.nodeType === 1) {
84582
+ var stack = [
84583
+ n
84584
+ ];
84585
+ while(stack.length){
84586
+ var _node_dataset;
84587
+ var node = stack.pop();
84588
+ if ((_node_dataset = node.dataset) === null || _node_dataset === void 0 ? void 0 : _node_dataset.__brndts_k) {}
84589
+ ;
84590
+ for(var c = node.firstElementChild; c; c = c.nextElementSibling){
84591
+ stack.push(c);
84519
84592
  }
84593
+ ;
84520
84594
  }
84521
84595
  }
84522
- }
84596
+ });
84523
84597
  }
84524
84598
  } catch (err) {
84525
84599
  _didIteratorError = true;
@@ -84535,58 +84609,64 @@ var VideoAds = /*#__PURE__*/ function() {
84535
84609
  }
84536
84610
  }
84537
84611
  }
84538
- for(var index = 0; index < medias.length; index++){
84539
- if (!medias[index] || medias[index].closest("#BRNDTS_R") || medias[index].querySelector("#BRNDTS_R") || medias[index].brndts_VE !== void 0) {
84540
- continue;
84541
- }
84542
- var videoAd = new VideoAd(this.context, medias[index]);
84543
- this.videoAdElements.push(videoAd);
84544
- videoAd.start();
84545
- }
84612
+ this.scanAndAttach();
84546
84613
  }
84547
84614
  },
84548
84615
  {
84549
84616
  key: "updateSize",
84550
84617
  value: function updateSize() {
84551
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
84552
- try {
84553
- for(var _iterator = this.videoAdElements[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
84554
- var videoAd = _step.value;
84555
- videoAd.updateSize();
84556
- }
84557
- } catch (err) {
84558
- _didIteratorError = true;
84559
- _iteratorError = err;
84560
- } finally{
84561
- try {
84562
- if (!_iteratorNormalCompletion && _iterator.return != null) {
84563
- _iterator.return();
84564
- }
84565
- } finally{
84566
- if (_didIteratorError) {
84567
- throw _iteratorError;
84568
- }
84618
+ var _this = this;
84619
+ this.byKey.forEach(function(value2, key) {
84620
+ var tid = _this.pendingCleanup.get(key);
84621
+ if (!tid) {
84622
+ var _value2_inst_updateSize, _value2_inst;
84623
+ (_value2_inst_updateSize = (_value2_inst = value2.inst).updateSize) === null || _value2_inst_updateSize === void 0 ? void 0 : _value2_inst_updateSize.call(_value2_inst);
84569
84624
  }
84570
- }
84625
+ });
84571
84626
  }
84572
84627
  },
84573
84628
  {
84574
84629
  key: "getVideoAd",
84575
84630
  value: function getVideoAd(index) {
84631
+ if (this.byKey.size === 0) {
84632
+ return void 0;
84633
+ }
84576
84634
  if (index === void 0) {
84577
- return this.videoAdElements[0];
84635
+ return this.byKey.values().next().value.inst;
84636
+ }
84637
+ if (index < 0 || index >= this.byKey.size) {
84638
+ return void 0;
84578
84639
  }
84579
- return this.videoAdElements[index];
84640
+ var keys = Array.from(this.byKey.keys());
84641
+ var key = keys[index];
84642
+ if (!key) {
84643
+ return void 0;
84644
+ }
84645
+ var entry = this.byKey.get(key);
84646
+ if (!entry) {
84647
+ return void 0;
84648
+ }
84649
+ return entry.inst;
84580
84650
  }
84581
84651
  },
84582
84652
  {
84583
84653
  key: "destroy",
84584
84654
  value: function destroy() {
84655
+ var _this = this;
84585
84656
  this.context.logger.log("destroying video ads");
84586
- this.videoAdElements.forEach(function(videoAd) {
84587
- videoAd.destroy();
84657
+ this.byKey.forEach(function(value2, key) {
84658
+ var _value2_inst_destroy, _value2_inst;
84659
+ var tid = _this.pendingCleanup.get(key);
84660
+ if (tid) {
84661
+ clearTimeout(tid);
84662
+ _this.pendingCleanup.delete(key);
84663
+ }
84664
+ (_value2_inst_destroy = (_value2_inst = value2.inst).destroy) === null || _value2_inst_destroy === void 0 ? void 0 : _value2_inst_destroy.call(_value2_inst);
84665
+ _this.byEl.delete(value2.el);
84666
+ _this.byKey.delete(key);
84588
84667
  });
84589
- this.videoAdElements = [];
84668
+ this.pendingCleanup.clear();
84669
+ this.byEl = /* @__PURE__ */ new WeakMap();
84590
84670
  this.context.logger.log("destroyed video ads");
84591
84671
  }
84592
84672
  }