UNPKG

zephyr-xpack-internal

Version:

Xpack internals for Zephyr

102 lines (101 loc) • 4.62 kB
import "node:module"; import { join, sep } from "node:path"; import { readFileSync } from "node:fs"; import { ze_log } from "zephyr-agent"; import { getLicenses } from "./get-licenses.mjs"; function isString(value) { return 'string' == typeof value; } function modulePartOne(modules) { const consumes = []; const consumesByName = {}; const modulesObj = {}; const npmModules = new Map(); modules?.forEach((mod)=>{ const { identifier, reasons, moduleType, nameForCondition, size } = mod; const data = identifier?.split(' '); if ('remote-module' === moduleType) { if (data?.length === 4 && isString(data[3]) && isString(data[2])) { const name = data[3].replace('./', ''); let applicationID = data[2].replace('webpack/container/reference/', ''); if (applicationID.includes('?')) applicationID = new URLSearchParams(applicationID.split('?')[1]).get('remoteName'); const consume = { consumingApplicationID: name, applicationID, name, usedIn: new Set() }; consumes.push(consume); if (nameForCondition) consumesByName[nameForCondition] = consume; } if (reasons) reasons.forEach(({ userRequest, resolvedModule })=>{ if (!userRequest || !consumesByName[userRequest] || !resolvedModule) return; const module = resolvedModule.replace('./', ''); consumesByName[userRequest].usedIn.add(module); }); } else if (data && 'container' === data[0] && 'entry' === data[1] && data[3]) JSON.parse(data[3]).forEach(([prefixedName, file])=>{ const name = prefixedName.replace('./', ''); modulesObj[file.import[0]] = { id: `${name}:${name}`, name, applicationID: name, requires: [], file: file.import[0] }; }); else if (nameForCondition && nameForCondition.includes('node_modules')) { const contextArray = nameForCondition.split(sep); const afterModule = nameForCondition.split('node_modules' + sep); const search = afterModule[1] && afterModule[1].startsWith('@') ? 3 : 2; contextArray.splice(contextArray.indexOf('node_modules') + search); const context = contextArray.join(sep); const packageJsonFile = join(context, 'package.json'); const packageJson = safe_read_package_json_sync(packageJsonFile); if (packageJson) { const existingPackage = npmModules.get(packageJson.name); if (existingPackage) { const existingReference = existingPackage[packageJson.version]; if (!existingReference) ze_log.buildstats('Duplicate dependency detected:', `${packageJson.name}@${packageJson.version}`, 'already tracking:', Object.keys(existingPackage).join(', '), 'in:', nameForCondition); const existingSize = existingReference?.size ?? 0; const data = { name: packageJson.name, version: packageJson.version, homepage: packageJson.homepage, license: getLicenses(packageJson), size: (Number(existingSize) || 0) + (size ?? 0) }; if (existingReference) Object.assign(existingReference, data); else existingPackage[packageJson.version] = data; npmModules.set(packageJson.name, existingPackage); } else { const newDep = { [packageJson.version]: { name: packageJson.name, version: packageJson.version, homepage: packageJson.homepage, license: getLicenses(packageJson), size } }; npmModules.set(packageJson.name, newDep); } } } }); return { consumes, modulesObj, npmModules }; } function safe_read_package_json_sync(file_path) { try { return JSON.parse(readFileSync(file_path, { encoding: 'utf-8' })); } catch { return; } } export { modulePartOne }; //# sourceMappingURL=module-part-one.mjs.map