* Copyright (c) 2024 Huawei Technologies Co., Ltd.
*
* This source code is licensed under the MIT license found in the
* LICENSE-MIT file in the root directory of this source tree.
*/
const pathSep = require('path').sep;
const fs = require('fs');
const SHA256 = require('crypto-js/sha256');
const basicNameArray = require('./map/basicNameMap.json');
const homepageArray = require('./map/pageNameMap.json');
function getModuleId(projectRootPath, modulePath, ...bundles) {
let startIndex = modulePath.indexOf(projectRootPath);
let pathRelative = modulePath.substr(startIndex + projectRootPath.length + 1);
return String(SHA256(pathRelative));
}
function createModuleIdFactoryWrap(projectRootPath, ...bundles) {
console.log('----------createModuleIdFactoryWrap', projectRootPath);
return () => {
return (path) => {
let moduleId = getModuleId(projectRootPath, path);
let jsItem = path + ' ---> ' + moduleId;
if ('basic' == bundles[0]) {
if (!basicNameArray.includes(jsItem)) {
basicNameArray.push(jsItem);
fs.writeFileSync(
__dirname + pathSep + 'map' + pathSep + 'basicNameMap.json',
JSON.stringify(basicNameArray),
);
}
} else {
if (!homepageArray.includes(jsItem)) {
homepageArray.push(jsItem);
fs.writeFileSync(
__dirname + pathSep + 'map' + pathSep + 'pageNameMap.json',
JSON.stringify(homepageArray),
);
}
}
return moduleId;
};
};
}
function postProcessModulesFilterWrap(projectRootPath) {
console.log('----------postProcessModulesFilterWrap');
return (module) => {
const path = module.path;
if (
path.indexOf('__prelude__') >= 0 ||
path.indexOf(
pathSep +
'node_modules' +
pathSep +
'@react-native' +
pathSep +
'polyfills',
) >= 0 ||
path.indexOf(
pathSep +
'node_modules' +
pathSep +
'metro-runtime' +
pathSep +
'src' +
pathSep +
'polyfills',
) >= 0
) {
return false;
}
const moduleId = getModuleId(projectRootPath, path);
let jsItem = path + ' ---> ' + moduleId;
if (path.indexOf(pathSep + 'node_modules' + pathSep) > 0) {
if (
'js' + pathSep + 'script' + pathSep + 'virtual' == module.output[0].type
) {
return true;
}
}
if (
basicNameArray.includes(jsItem)
) {
return false;
}
return true;
};
}
module.exports = { createModuleIdFactoryWrap, postProcessModulesFilterWrap };