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;
}