function getFragmentIdentifier()

in packages/relay-runtime/util/getFragmentIdentifier.js [28:86]


function getFragmentIdentifier(
  fragmentNode: ReaderFragment,
  fragmentRef: mixed,
): string {
  const selector = getSelector(fragmentNode, fragmentRef);
  const fragmentOwnerIdentifier =
    selector == null
      ? 'null'
      : selector.kind === 'SingularReaderSelector'
      ? selector.owner.identifier
      : '[' +
        selector.selectors.map(sel => sel.owner.identifier).join(',') +
        ']';
  const fragmentVariables = getVariablesFromFragment(fragmentNode, fragmentRef);
  const dataIDs = getDataIDsFromFragment(fragmentNode, fragmentRef);

  if (RelayFeatureFlags.ENABLE_GETFRAGMENTIDENTIFIER_OPTIMIZATION) {
    let ids =
      typeof dataIDs === 'undefined'
        ? 'missing'
        : dataIDs == null
        ? 'null'
        : Array.isArray(dataIDs)
        ? '[' + dataIDs.join(',') + ']'
        : dataIDs;
    ids =
      RelayFeatureFlags.STRING_INTERN_LEVEL <= 1
        ? ids
        : intern(ids, RelayFeatureFlags.MAX_DATA_ID_LENGTH);

    return (
      fragmentOwnerIdentifier +
      '/' +
      fragmentNode.name +
      '/' +
      (fragmentVariables == null || isEmptyObject(fragmentVariables)
        ? '{}'
        : JSON.stringify(stableCopy(fragmentVariables))) +
      '/' +
      ids
    );
  } else {
    let ids = JSON.stringify(dataIDs) ?? 'missing';
    ids =
      RelayFeatureFlags.STRING_INTERN_LEVEL <= 1
        ? ids
        : intern(ids, RelayFeatureFlags.MAX_DATA_ID_LENGTH);

    return (
      fragmentOwnerIdentifier +
      '/' +
      fragmentNode.name +
      '/' +
      JSON.stringify(stableCopy(fragmentVariables)) +
      '/' +
      ids
    );
  }
}