export function transformManifestKeys()

in packages/plugin-pha/src/manifestHelpers.ts [53:113]


export function transformManifestKeys(manifest: Manifest, options?: TransformOptions): PHAManifest {
  const { parentKey, isRoot } = options || {};
  const data = {};

  for (let key in manifest) {
    // Filter not need transform key.
    if (isRoot && !decamelizeKeys.includes(key)) {
      continue;
    }
    const value = manifest[key];

    // Compatible with pageHeader.
    if (key === 'pageHeader') {
      key = 'tabHeader';
    }

    let transformKey = key;
    if (!camelizeKeys.includes(key)) {
      transformKey = decamelize(key);
    }
    if (typeof value === 'string' || typeof value === 'number') {
      data[transformKey] = value;
    } else if (Array.isArray(value)) {
      data[transformKey] = value.map((item) => {
        if (parentKey === 'tabBar' && item.text) {
          item.name = item.text;
          delete item.text;
        }
        if (typeof item === 'object') {
          if (key === 'dataPrefetch') {
            // Hack: No header will crash in Android
            if (!item.header) {
              item.header = {};
            }
            // No prefetchKey will crash in Android TaoBao 9.26.0.
            if (!item.prefetchKey) {
              item.prefetchKey = 'mtop';
            }
          }
          return transformManifestKeys(item, { isRoot: false, parentKey: key });
        }
        return item;
      });
    } else if (key === 'pullRefresh') {
      if (value && value.reload) {
        // Need reload.
        data['pull_refresh'] = true;
      } else {
        data['enable_pull_refresh'] = true;
      }
    } else if (key === 'requestHeaders') {
      // Keys of requestHeaders should not be transformed.
      data[transformKey] = value;
    } else if (typeof value === 'object' && !(parentKey === 'dataPrefetch' && (key === 'header' || key === 'data'))) {
      data[transformKey] = transformManifestKeys(value, { isRoot: false, parentKey: key });
    } else {
      data[transformKey] = value;
    }
  }
  return data;
}