( pathSource: string, pathTarget: string, overwrites: PackDataOverwrite[], )
| 1026 | await writeCopyPack(pathSource, pathTarget, toAdd); |
| 1027 | }; |
| 1028 | export 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); |
no test coverage detected