Ctrl K
ComunidadGuías…

app/utils/polyfills.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
declare global {
  interface ObjectConstructor {
    hasOwn(target: object, property: PropertyKey): boolean;
  }
}

// Applied at module scope so dependencies that call it during evaluation, or on
// first render, are covered. Unavailable before Chrome 93 and Safari 15.4.
if (typeof Object.hasOwn !== "function") {
  Object.defineProperty(Object, "hasOwn", {
    value: (target: object, property: PropertyKey) =>
      Object.prototype.hasOwnProperty.call(target, property),
    writable: true,
    configurable: true,
  });
}

// Used by slug. Unavailable before Chrome 111, Firefox 119 and Safari 16.4.
if (typeof String.prototype.toWellFormed !== "function") {
  Object.defineProperty(String.prototype, "toWellFormed", {
    value: function toWellFormed(this: string) {
      let result = "";
      for (let i = 0; i < this.length; i++) {
        const code = this.charCodeAt(i);
        const next = this.charCodeAt(i + 1);
        if (
          code >= 0xd800 &&
          code <= 0xdbff &&
          next >= 0xdc00 &&
          next <= 0xdfff
        ) {
          result += this[i] + this[i + 1];
          i++;
        } else if (code >= 0xd800 && code <= 0xdfff) {
          result += String.fromCharCode(0xfffd);
        } else {
          result += this[i];
        }
      }
      return result;
    },
    writable: true,
    configurable: true,
  });
}

if (typeof String.prototype.isWellFormed !== "function") {
  Object.defineProperty(String.prototype, "isWellFormed", {
    value: function isWellFormed(this: string) {
      return this.toWellFormed() === String(this);
    },
    writable: true,
    configurable: true,
  });
}

export {};