function fbtJenkinsHash()

in packages/babel-plugin-fbt/src/fbtJenkinsHash.js [19:58]


function fbtJenkinsHash(jsfbt: $ReadOnly<TableJSFBTTree>): number {
  let desc = null;
  let leavesHaveSameDesc = true;
  onEachLeaf({jsfbt: {t: jsfbt, m: []}}, (leaf: TableJSFBTTreeLeaf) => {
    if (desc == null) {
      desc = leaf.desc;
    } else if (desc !== leaf.desc) {
      leavesHaveSameDesc = false;
    }
  });

  if (leavesHaveSameDesc) {
    const hashInputTree = mapLeaves(
      jsfbt,
      (leaf: $ReadOnly<TableJSFBTTreeLeaf>) => {
        return leaf.tokenAliases != null
          ? {text: leaf.text, tokenAliases: leaf.tokenAliases}
          : leaf.text;
      },
    );
    invariant(
      desc != null,
      'Expect `desc` to be nonnull as `TableJSFBTTree` should contain at least ' +
        'one leaf.',
    );
    const key = JSON.stringify(hashInputTree) + '|' + desc;
    return jenkinsHash(key);
  }

  const hashInputTree = mapLeaves(
    jsfbt,
    (leaf: $ReadOnly<TableJSFBTTreeLeaf>) => {
      const newLeaf = {desc: leaf.desc, text: leaf.text};
      return leaf.tokenAliases != null
        ? {...newLeaf, tokenAliases: leaf.tokenAliases}
        : newLeaf;
    },
  );
  return jenkinsHash(JSON.stringify(hashInputTree));
}