MCPcopy Create free account
hub / github.com/Shazbot/WH3-Mod-Manager / createOverwritePack

Function createOverwritePack

src/packFileSerializer.ts:1028–1134  ·  view source on GitHub ↗
(
  pathSource: string,
  pathTarget: string,
  overwrites: PackDataOverwrite[],
)

Source from the content-addressed store, hash-verified

1026 await writeCopyPack(pathSource, pathTarget, toAdd);
1027};
1028export const createOverwritePack = async (
1029 pathSource: string,
1030 pathTarget: string,
1031 overwrites: PackDataOverwrite[],
1032) => {
1033 if (overwrites.length == 0) return;
1034 const tablesToRead = overwrites.map((overwrite) => overwrite.packFilePath);
1035 console.log("to read for new overwrite pack:", tablesToRead);
1036 const sourceMod = await readPack(pathSource, { tablesToRead });
1037 const packFilesToAdd: PackedFile[] = [];
1038 for (const packedFile of sourceMod.packedFiles) {
1039 if (tablesToRead.includes(packedFile.name)) {
1040 const packViewData = getPackViewData(sourceMod, packedFile.name);
1041 if (packViewData) {
1042 const packTableDatas = getPackTableData(packedFile.name, packViewData);
1043 if (!packTableDatas) continue;
1044 const packTableData = packTableDatas[packedFile.name];
1045 console.log("PARSED packTableData for", packedFile.name, packTableData);
1046 const currentTableOverwrites = overwrites.filter(
1047 (iterOverwrite) => iterOverwrite.packFilePath == packedFile.name,
1048 );
1049 if (currentTableOverwrites.length == 0) continue;
1050 const dbversion = getDBVersion(packedFile);
1051 if (!dbversion) {
1052 continue;
1053 }
1054 let clonedTableData = deepClone(packTableData) as PlainPackFileData;
1055 for (const overwrite of currentTableOverwrites) {
1056 if (overwrite.operation == "EDIT" || overwrite.operation == "REMOVE") {
1057 clonedTableData = clonedTableData.reduce<PlainPackFileData>((acc, item) => {
1058 const isMatch = overwrite.columnIndices.reduce((isMatch, columnIndex, index) => {
1059 return isMatch && overwrite.columnValues[index] == item[columnIndex];
1060 }, true);
1061 if (isMatch) {
1062 console.log("isMatch FOR", overwrite.columnValues);
1063 console.log("item is", item);
1064 console.log("operation is", overwrite.operation);
1065 if (overwrite.operation == "REMOVE") return acc;
1066 if (
1067 overwrite.operation == "EDIT" &&
1068 overwrite.overwriteIndex &&
1069 overwrite.overwriteData != undefined
1070 ) {
1071 const clonedRow = deepClone(item);
1072 clonedRow[overwrite.overwriteIndex] = overwrite.overwriteData;
1073 acc.push(clonedRow);
1074 return acc;
1075 }
1076 }
1077 acc.push(item);
1078 return acc;
1079 }, [] as PlainPackFileData);
1080 }
1081 }
1082 console.log("NEW clonedTableData is:", clonedTableData);
1083 const newPackFile = deepClone(packedFile) as PackedFile;
1084 packFilesToAdd.push(newPackFile);
1085 // console.log("chunked into ", chunkedSchemaIntoRows.length);

Callers 1

registerIpcMainListenersFunction · 0.90

Calls 6

getPackViewDataFunction · 0.85
getPackTableDataFunction · 0.85
typeToBufferFunction · 0.85
writeCopyPackFunction · 0.85
readPackFunction · 0.70
getDBVersionFunction · 0.70

Tested by

no test coverage detected