{"version":3,"file":"wrapAssembly.js","names":["Unit","Direction","YGEnums","wrapAssembly","lib","patch","prototype","name","fn","original","_len","arguments","length","args","Array","_key","call","fnName","methods","Point","Node","Percent","Auto","_len2","_key2","value","pop","unit","asNumber","undefined","valueOf","endsWith","parseFloat","Number","isNaN","Error","wrapMeasureFunction","measureFunction","MeasureCallback","implement","measure","width","height","NaN","measureFunc","unsetMeasureFunc","wrapDirtiedFunc","dirtiedFunction","DirtiedCallback","dirtied","dirtiedFunc","Config","destroy","_","config","createWithConfig","createDefault","t","T","getChildCount","getChild","freeRecursive","free","direction","LTR"],"sources":["../../src/wrapAssembly.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n// @ts-nocheck\n\nimport {Unit, Direction} from './generated/YGEnums.ts';\nimport YGEnums from './generated/YGEnums.ts';\n\nimport type {\n  Align,\n  BoxSizing,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Wrap,\n} from './generated/YGEnums.ts';\n\ntype Layout = {\n  left: number;\n  right: number;\n  top: number;\n  bottom: number;\n  width: number;\n  height: number;\n};\n\ntype Size = {\n  width: number;\n  height: number;\n};\n\ntype Value = {\n  unit: Unit;\n  value: number;\n};\n\nexport type Config = {\n  free(): void;\n  isExperimentalFeatureEnabled(feature: ExperimentalFeature): boolean;\n  setExperimentalFeatureEnabled(\n    feature: ExperimentalFeature,\n    enabled: boolean,\n  ): void;\n  setPointScaleFactor(factor: number): void;\n  getErrata(): Errata;\n  setErrata(errata: Errata): void;\n  useWebDefaults(): boolean;\n  setUseWebDefaults(useWebDefaults: boolean): void;\n};\n\nexport type DirtiedFunction = (node: Node) => void;\n\nexport type MeasureFunction = (\n  width: number,\n  widthMode: MeasureMode,\n  height: number,\n  heightMode: MeasureMode,\n) => Size;\n\nexport type Node = {\n  calculateLayout(\n    width: number | 'auto' | undefined,\n    height: number | 'auto' | undefined,\n    direction?: Direction,\n  ): void;\n  copyStyle(node: Node): void;\n  free(): void;\n  freeRecursive(): void;\n  getAlignContent(): Align;\n  getAlignItems(): Align;\n  getAlignSelf(): Align;\n  getAspectRatio(): number;\n  getBorder(edge: Edge): number;\n  getChild(index: number): Node;\n  getChildCount(): number;\n  getComputedBorder(edge: Edge): number;\n  getComputedBottom(): number;\n  getComputedHeight(): number;\n  getComputedLayout(): Layout;\n  getComputedLeft(): number;\n  getComputedMargin(edge: Edge): number;\n  getComputedPadding(edge: Edge): number;\n  getComputedRight(): number;\n  getComputedTop(): number;\n  getComputedWidth(): number;\n  getDirection(): Direction;\n  getDisplay(): Display;\n  getFlexBasis(): Value;\n  getFlexDirection(): FlexDirection;\n  getFlexGrow(): number;\n  getFlexShrink(): number;\n  getFlexWrap(): Wrap;\n  getHeight(): Value;\n  getJustifyContent(): Justify;\n  getGap(gutter: Gutter): Value;\n  getMargin(edge: Edge): Value;\n  getMaxHeight(): Value;\n  getMaxWidth(): Value;\n  getMinHeight(): Value;\n  getMinWidth(): Value;\n  getOverflow(): Overflow;\n  getPadding(edge: Edge): Value;\n  getParent(): Node | null;\n  getPosition(edge: Edge): Value;\n  getPositionType(): PositionType;\n  getBoxSizing(): BoxSizing;\n  getWidth(): Value;\n  insertChild(child: Node, index: number): void;\n  isDirty(): boolean;\n  isReferenceBaseline(): boolean;\n  markDirty(): void;\n  hasNewLayout(): boolean;\n  markLayoutSeen(): void;\n  removeChild(child: Node): void;\n  reset(): void;\n  setAlignContent(alignContent: Align): void;\n  setAlignItems(alignItems: Align): void;\n  setAlignSelf(alignSelf: Align): void;\n  setAspectRatio(aspectRatio: number | undefined): void;\n  setBorder(edge: Edge, borderWidth: number | undefined): void;\n  setDirection(direction: Direction): void;\n  setDisplay(display: Display): void;\n  setFlex(flex: number | undefined): void;\n  setFlexBasis(flexBasis: number | 'auto' | `${number}%` | undefined): void;\n  setFlexBasisPercent(flexBasis: number | undefined): void;\n  setFlexBasisAuto(): void;\n  setFlexDirection(flexDirection: FlexDirection): void;\n  setFlexGrow(flexGrow: number | undefined): void;\n  setFlexShrink(flexShrink: number | undefined): void;\n  setFlexWrap(flexWrap: Wrap): void;\n  setHeight(height: number | 'auto' | `${number}%` | undefined): void;\n  setIsReferenceBaseline(isReferenceBaseline: boolean): void;\n  setHeightAuto(): void;\n  setHeightPercent(height: number | undefined): void;\n  setJustifyContent(justifyContent: Justify): void;\n  setGap(gutter: Gutter, gapLength: number | `${number}%` | undefined): Value;\n  setGapPercent(gutter: Gutter, gapLength: number | undefined): Value;\n  setMargin(\n    edge: Edge,\n    margin: number | 'auto' | `${number}%` | undefined,\n  ): void;\n  setMarginAuto(edge: Edge): void;\n  setMarginPercent(edge: Edge, margin: number | undefined): void;\n  setMaxHeight(maxHeight: number | `${number}%` | undefined): void;\n  setMaxHeightPercent(maxHeight: number | undefined): void;\n  setMaxWidth(maxWidth: number | `${number}%` | undefined): void;\n  setMaxWidthPercent(maxWidth: number | undefined): void;\n  setDirtiedFunc(dirtiedFunc: DirtiedFunction | null): void;\n  setMeasureFunc(measureFunc: MeasureFunction | null): void;\n  setMinHeight(minHeight: number | `${number}%` | undefined): void;\n  setMinHeightPercent(minHeight: number | undefined): void;\n  setMinWidth(minWidth: number | `${number}%` | undefined): void;\n  setMinWidthPercent(minWidth: number | undefined): void;\n  setOverflow(overflow: Overflow): void;\n  setPadding(edge: Edge, padding: number | `${number}%` | undefined): void;\n  setPaddingPercent(edge: Edge, padding: number | undefined): void;\n  setPosition(edge: Edge, position: number | `${number}%` | undefined): void;\n  setPositionPercent(edge: Edge, position: number | undefined): void;\n  setPositionType(positionType: PositionType): void;\n  setPositionAuto(edge: Edge): void;\n  setBoxSizing(boxSizing: BoxSizing): void;\n  setWidth(width: number | 'auto' | `${number}%` | undefined): void;\n  setWidthAuto(): void;\n  setWidthPercent(width: number | undefined): void;\n  unsetDirtiedFunc(): void;\n  unsetMeasureFunc(): void;\n  setAlwaysFormsContainingBlock(alwaysFormsContainingBlock: boolean): void;\n};\n\nexport type Yoga = {\n  Config: {\n    create(): Config;\n    destroy(config: Config): void;\n  };\n  Node: {\n    create(config?: Config): Node;\n    createDefault(): Node;\n    createWithConfig(config: Config): Node;\n    destroy(node: Node): void;\n  };\n} & typeof YGEnums;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport default function wrapAssembly(lib: any): Yoga {\n  function patch(prototype, name, fn) {\n    const original = prototype[name];\n\n    prototype[name] = function (...args) {\n      return fn.call(this, original, ...args);\n    };\n  }\n\n  for (const fnName of [\n    'setPosition',\n    'setMargin',\n    'setFlexBasis',\n    'setWidth',\n    'setHeight',\n    'setMinWidth',\n    'setMinHeight',\n    'setMaxWidth',\n    'setMaxHeight',\n    'setPadding',\n    'setGap',\n  ]) {\n    const methods = {\n      [Unit.Point]: lib.Node.prototype[fnName],\n      [Unit.Percent]: lib.Node.prototype[`${fnName}Percent`],\n      [Unit.Auto]: lib.Node.prototype[`${fnName}Auto`],\n    };\n\n    patch(lib.Node.prototype, fnName, function (original, ...args) {\n      // We patch all these functions to add support for the following calls:\n      // .setWidth(100) / .setWidth(\"100%\") / .setWidth(.getWidth()) / .setWidth(\"auto\")\n\n      const value = args.pop();\n      let unit, asNumber;\n\n      if (value === 'auto') {\n        unit = Unit.Auto;\n        asNumber = undefined;\n      } else if (typeof value === 'object') {\n        unit = value.unit;\n        asNumber = value.valueOf();\n      } else {\n        unit =\n          typeof value === 'string' && value.endsWith('%')\n            ? Unit.Percent\n            : Unit.Point;\n        asNumber = parseFloat(value);\n        if (\n          value !== undefined &&\n          !Number.isNaN(value) &&\n          Number.isNaN(asNumber)\n        ) {\n          throw new Error(`Invalid value ${value} for ${fnName}`);\n        }\n      }\n\n      if (!methods[unit])\n        throw new Error(\n          `Failed to execute \"${fnName}\": Unsupported unit '${value}'`,\n        );\n\n      if (asNumber !== undefined) {\n        return methods[unit].call(this, ...args, asNumber);\n      } else {\n        return methods[unit].call(this, ...args);\n      }\n    });\n  }\n\n  function wrapMeasureFunction(measureFunction) {\n    return lib.MeasureCallback.implement({\n      measure: (...args) => {\n        const {width, height} = measureFunction(...args);\n        return {\n          width: width ?? NaN,\n          height: height ?? NaN,\n        };\n      },\n    });\n  }\n\n  patch(lib.Node.prototype, 'setMeasureFunc', function (original, measureFunc) {\n    // This patch is just a convenience patch, since it helps write more\n    // idiomatic source code (such as .setMeasureFunc(null))\n    if (measureFunc) {\n      return original.call(this, wrapMeasureFunction(measureFunc));\n    } else {\n      return this.unsetMeasureFunc();\n    }\n  });\n\n  function wrapDirtiedFunc(dirtiedFunction) {\n    return lib.DirtiedCallback.implement({dirtied: dirtiedFunction});\n  }\n\n  patch(lib.Node.prototype, 'setDirtiedFunc', function (original, dirtiedFunc) {\n    original.call(this, wrapDirtiedFunc(dirtiedFunc));\n  });\n\n  patch(lib.Config.prototype, 'free', function () {\n    // Since we handle the memory allocation ourselves (via lib.Config.create),\n    // we also need to handle the deallocation\n    lib.Config.destroy(this);\n  });\n\n  patch(lib.Node, 'create', (_, config) => {\n    // We decide the constructor we want to call depending on the parameters\n    return config\n      ? lib.Node.createWithConfig(config)\n      : lib.Node.createDefault();\n  });\n\n  patch(lib.Node.prototype, 'free', function () {\n    // Since we handle the memory allocation ourselves (via lib.Node.create),\n    // we also need to handle the deallocation\n    lib.Node.destroy(this);\n  });\n\n  patch(lib.Node.prototype, 'freeRecursive', function () {\n    for (let t = 0, T = this.getChildCount(); t < T; ++t) {\n      this.getChild(0).freeRecursive();\n    }\n    this.free();\n  });\n\n  patch(\n    lib.Node.prototype,\n    'calculateLayout',\n    function (original, width = NaN, height = NaN, direction = Direction.LTR) {\n      // Just a small patch to add support for the function default parameters\n      return original.call(this, width, height, direction);\n    },\n  );\n\n  return {\n    Config: lib.Config,\n    Node: lib.Node,\n    ...YGEnums,\n  };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAAQA,IAAI,EAAEC,SAAS,QAAO,wBAAwB;AACtD,OAAOC,OAAO,MAAM,wBAAwB;AAuL5C;AACA,eAAe,SAASC,YAAYA,CAACC,GAAQ,EAAQ;EACnD,SAASC,KAAKA,CAACC,SAAS,EAAEC,IAAI,EAAEC,EAAE,EAAE;IAClC,MAAMC,QAAQ,GAAGH,SAAS,CAACC,IAAI,CAAC;IAEhCD,SAAS,CAACC,IAAI,CAAC,GAAG,YAAmB;MAAA,SAAAG,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAANC,IAAI,OAAAC,KAAA,CAAAJ,IAAA,GAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;QAAJF,IAAI,CAAAE,IAAA,IAAAJ,SAAA,CAAAI,IAAA;MAAA;MACjC,OAAOP,EAAE,CAACQ,IAAI,CAAC,IAAI,EAAEP,QAAQ,EAAE,GAAGI,IAAI,CAAC;IACzC,CAAC;EACH;EAEA,KAAK,MAAMI,MAAM,IAAI,CACnB,aAAa,EACb,WAAW,EACX,cAAc,EACd,UAAU,EACV,WAAW,EACX,aAAa,EACb,cAAc,EACd,aAAa,EACb,cAAc,EACd,YAAY,EACZ,QAAQ,CACT,EAAE;IACD,MAAMC,OAAO,GAAG;MACd,CAAClB,IAAI,CAACmB,KAAK,GAAGf,GAAG,CAACgB,IAAI,CAACd,SAAS,CAACW,MAAM,CAAC;MACxC,CAACjB,IAAI,CAACqB,OAAO,GAAGjB,GAAG,CAACgB,IAAI,CAACd,SAAS,CAAC,GAAGW,MAAM,SAAS,CAAC;MACtD,CAACjB,IAAI,CAACsB,IAAI,GAAGlB,GAAG,CAACgB,IAAI,CAACd,SAAS,CAAC,GAAGW,MAAM,MAAM;IACjD,CAAC;IAEDZ,KAAK,CAACD,GAAG,CAACgB,IAAI,CAACd,SAAS,EAAEW,MAAM,EAAE,UAAUR,QAAQ,EAAW;MAAA,SAAAc,KAAA,GAAAZ,SAAA,CAAAC,MAAA,EAANC,IAAI,OAAAC,KAAA,CAAAS,KAAA,OAAAA,KAAA,WAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;QAAJX,IAAI,CAAAW,KAAA,QAAAb,SAAA,CAAAa,KAAA;MAAA;MAC3D;MACA;;MAEA,MAAMC,KAAK,GAAGZ,IAAI,CAACa,GAAG,CAAC,CAAC;MACxB,IAAIC,IAAI,EAAEC,QAAQ;MAElB,IAAIH,KAAK,KAAK,MAAM,EAAE;QACpBE,IAAI,GAAG3B,IAAI,CAACsB,IAAI;QAChBM,QAAQ,GAAGC,SAAS;MACtB,CAAC,MAAM,IAAI,OAAOJ,KAAK,KAAK,QAAQ,EAAE;QACpCE,IAAI,GAAGF,KAAK,CAACE,IAAI;QACjBC,QAAQ,GAAGH,KAAK,CAACK,OAAO,CAAC,CAAC;MAC5B,CAAC,MAAM;QACLH,IAAI,GACF,OAAOF,KAAK,KAAK,QAAQ,IAAIA,KAAK,CAACM,QAAQ,CAAC,GAAG,CAAC,GAC5C/B,IAAI,CAACqB,OAAO,GACZrB,IAAI,CAACmB,KAAK;QAChBS,QAAQ,GAAGI,UAAU,CAACP,KAAK,CAAC;QAC5B,IACEA,KAAK,KAAKI,SAAS,IACnB,CAACI,MAAM,CAACC,KAAK,CAACT,KAAK,CAAC,IACpBQ,MAAM,CAACC,KAAK,CAACN,QAAQ,CAAC,EACtB;UACA,MAAM,IAAIO,KAAK,CAAC,iBAAiBV,KAAK,QAAQR,MAAM,EAAE,CAAC;QACzD;MACF;MAEA,IAAI,CAACC,OAAO,CAACS,IAAI,CAAC,EAChB,MAAM,IAAIQ,KAAK,CACb,sBAAsBlB,MAAM,wBAAwBQ,KAAK,GAC3D,CAAC;MAEH,IAAIG,QAAQ,KAAKC,SAAS,EAAE;QAC1B,OAAOX,OAAO,CAACS,IAAI,CAAC,CAACX,IAAI,CAAC,IAAI,EAAE,GAAGH,IAAI,EAAEe,QAAQ,CAAC;MACpD,CAAC,MAAM;QACL,OAAOV,OAAO,CAACS,IAAI,CAAC,CAACX,IAAI,CAAC,IAAI,EAAE,GAAGH,IAAI,CAAC;MAC1C;IACF,CAAC,CAAC;EACJ;EAEA,SAASuB,mBAAmBA,CAACC,eAAe,EAAE;IAC5C,OAAOjC,GAAG,CAACkC,eAAe,CAACC,SAAS,CAAC;MACnCC,OAAO,EAAE,SAAAA,CAAA,EAAa;QACpB,MAAM;UAACC,KAAK;UAAEC;QAAM,CAAC,GAAGL,eAAe,CAAC,GAAA1B,SAAO,CAAC;QAChD,OAAO;UACL8B,KAAK,EAAEA,KAAK,IAAIE,GAAG;UACnBD,MAAM,EAAEA,MAAM,IAAIC;QACpB,CAAC;MACH;IACF,CAAC,CAAC;EACJ;EAEAtC,KAAK,CAACD,GAAG,CAACgB,IAAI,CAACd,SAAS,EAAE,gBAAgB,EAAE,UAAUG,QAAQ,EAAEmC,WAAW,EAAE;IAC3E;IACA;IACA,IAAIA,WAAW,EAAE;MACf,OAAOnC,QAAQ,CAACO,IAAI,CAAC,IAAI,EAAEoB,mBAAmB,CAACQ,WAAW,CAAC,CAAC;IAC9D,CAAC,MAAM;MACL,OAAO,IAAI,CAACC,gBAAgB,CAAC,CAAC;IAChC;EACF,CAAC,CAAC;EAEF,SAASC,eAAeA,CAACC,eAAe,EAAE;IACxC,OAAO3C,GAAG,CAAC4C,eAAe,CAACT,SAAS,CAAC;MAACU,OAAO,EAAEF;IAAe,CAAC,CAAC;EAClE;EAEA1C,KAAK,CAACD,GAAG,CAACgB,IAAI,CAACd,SAAS,EAAE,gBAAgB,EAAE,UAAUG,QAAQ,EAAEyC,WAAW,EAAE;IAC3EzC,QAAQ,CAACO,IAAI,CAAC,IAAI,EAAE8B,eAAe,CAACI,WAAW,CAAC,CAAC;EACnD,CAAC,CAAC;EAEF7C,KAAK,CAACD,GAAG,CAAC+C,MAAM,CAAC7C,SAAS,EAAE,MAAM,EAAE,YAAY;IAC9C;IACA;IACAF,GAAG,CAAC+C,MAAM,CAACC,OAAO,CAAC,IAAI,CAAC;EAC1B,CAAC,CAAC;EAEF/C,KAAK,CAACD,GAAG,CAACgB,IAAI,EAAE,QAAQ,EAAE,CAACiC,CAAC,EAAEC,MAAM,KAAK;IACvC;IACA,OAAOA,MAAM,GACTlD,GAAG,CAACgB,IAAI,CAACmC,gBAAgB,CAACD,MAAM,CAAC,GACjClD,GAAG,CAACgB,IAAI,CAACoC,aAAa,CAAC,CAAC;EAC9B,CAAC,CAAC;EAEFnD,KAAK,CAACD,GAAG,CAACgB,IAAI,CAACd,SAAS,EAAE,MAAM,EAAE,YAAY;IAC5C;IACA;IACAF,GAAG,CAACgB,IAAI,CAACgC,OAAO,CAAC,IAAI,CAAC;EACxB,CAAC,CAAC;EAEF/C,KAAK,CAACD,GAAG,CAACgB,IAAI,CAACd,SAAS,EAAE,eAAe,EAAE,YAAY;IACrD,KAAK,IAAImD,CAAC,GAAG,CAAC,EAAEC,CAAC,GAAG,IAAI,CAACC,aAAa,CAAC,CAAC,EAAEF,CAAC,GAAGC,CAAC,EAAE,EAAED,CAAC,EAAE;MACpD,IAAI,CAACG,QAAQ,CAAC,CAAC,CAAC,CAACC,aAAa,CAAC,CAAC;IAClC;IACA,IAAI,CAACC,IAAI,CAAC,CAAC;EACb,CAAC,CAAC;EAEFzD,KAAK,CACHD,GAAG,CAACgB,IAAI,CAACd,SAAS,EAClB,iBAAiB,EACjB,UAAUG,QAAQ,EAAwD;IAAA,IAAtDgC,KAAK,GAAA9B,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAkB,SAAA,GAAAlB,SAAA,MAAGgC,GAAG;IAAA,IAAED,MAAM,GAAA/B,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAkB,SAAA,GAAAlB,SAAA,MAAGgC,GAAG;IAAA,IAAEoB,SAAS,GAAApD,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAkB,SAAA,GAAAlB,SAAA,MAAGV,SAAS,CAAC+D,GAAG;IACtE;IACA,OAAOvD,QAAQ,CAACO,IAAI,CAAC,IAAI,EAAEyB,KAAK,EAAEC,MAAM,EAAEqB,SAAS,CAAC;EACtD,CACF,CAAC;EAED,OAAO;IACLZ,MAAM,EAAE/C,GAAG,CAAC+C,MAAM;IAClB/B,IAAI,EAAEhB,GAAG,CAACgB,IAAI;IACd,GAAGlB;EACL,CAAC;AACH","ignoreList":[]}