All entries

April 30, 2026

b3f8e93d72da2f7e93da161e4435245e86fcdf685a9569403c4904ba5bca2406
Previous: e35faefd Bundle: 88.7 KB

Internal refactoring of private field utilities with a minor defensive hasOwnProperty improvement.

Highlights

  • The private field access guard in _utilities.js was updated to use {}.hasOwnProperty.call instead of Object.prototype.hasOwnProperty.call, making it more resilient to prototype pollution.
  • Internal private field helpers were renamed and reorganized in _utilities.js: the counter variable and key-creation and field-check functions swapped names.
  • _bootstrap.js was updated to call the renamed private field helpers privateKeyCounter and checkPrivateField consistently.
3 files changed +18 -18

Infrastructure Changes

REPORT.md
+3 -3
@@ -1,6 +1,6 @@
# Shopify App Bridge — Unminification Report

Generated: 2026-04-22T08:31:20.292Z
Generated: 2026-04-30T08:43:10.147Z

## Files

@@ -8,7 +8,7 @@ Generated: 2026-04-22T08:31:20.292Z
|------|------|-------|------|
| _bootstrap.js | 31.8KB | 1119 | Infrastructure |
| _remote-ui.js | 6.0KB | 255 | Infrastructure |
| _utilities.js | 69.2KB | 2574 | Infrastructure |
| _utilities.js | 69.1KB | 2574 | Infrastructure |
| _web-vitals.js | 11.6KB | 527 | Infrastructure |
| analytics.js | 211B | 11 | Module |
| app.js | 346B | 15 | Module |
@@ -46,7 +46,7 @@ Generated: 2026-04-22T08:31:20.292Z
| user.js | 940B | 37 | Module |
| visibility.js | 973B | 34 | Module |
| web-vitals.js | 1.8KB | 64 | Module |
| **Total** | **169.7KB** | **6449** | |
| **Total** | **169.6KB** | **6449** | |

## Pipeline Stages


modules/_bootstrap.js
+9 -9
@@ -171,8 +171,8 @@
  const c = (function (t = false) {
    let n = null;
    let e = t ? null : new Set();
    var i = createPrivateKey('value');
    var i = checkPrivateField('value');
    var o = createPrivateKey('callbacks');
    var o = checkPrivateField('callbacks');
    class r {
      constructor(t) {
        var n;
@@ -184,24 +184,24 @@
          writable: true,
          value: new Set(),
        });
        checkPrivateField(this, i)[i] = t;
        privateKeyCounter(this, i)[i] = t;
        if (!((n = e) == null)) {
          n.add(this);
        }
      }
      get value() {
        return checkPrivateField(this, i)[i];
        return privateKeyCounter(this, i)[i];
      }
      set value(t) {
        if (t !== checkPrivateField(this, i)[i]) {
        if (t !== privateKeyCounter(this, i)[i]) {
          checkPrivateField(this, i)[i] = t;
          privateKeyCounter(this, i)[i] = t;
          checkPrivateField(this, o)[o].forEach((n) => n(t));
          privateKeyCounter(this, o)[o].forEach((n) => n(t));
        }
      }
      subscribe(t) {
        checkPrivateField(this, o)[o].add(t);
        privateKeyCounter(this, o)[o].add(t);
        return () => {
          checkPrivateField(this, o)[o].delete(t);
          privateKeyCounter(this, o)[o].delete(t);
        };
      }
    }

modules/_utilities.js
+6 -6
@@ -558,15 +558,15 @@ function gt(t) {
    }
  }
}
var privateKeyCounter = 0;
function privateKeyCounter(t, n) {
function createPrivateKey(t) {
  if (!{}.hasOwnProperty.call(t, n))
  return `__private_${privateKeyCounter++}_${t}`;
}
function checkPrivateField(t, n) {
  if (!Object.prototype.hasOwnProperty.call(t, n))
    throw new TypeError('attempted to use private field on non-instance');
  return t;
}
var createPrivateKey = 0;
function checkPrivateField(t) {
  return `__private_${createPrivateKey++}_${t}`;
}
const interceptProperty = Symbol();
function ORIGINAL_SYMBOL(t, n, e) {
  const i = t[n];