tracer4b b526677126 Questbook Update + Buildscript Improvements (#681)
[EXPAND]
[[messages]]
messageTitle = "QB Update for GT 2.8 (#681)"
messageBody = """
[QB]
[DETAILS]
details = ["Fixes many Quest Book issues", "Updates QB with changes in GT 2.8"]
[DETAILS]
"""

[[messages]]
messageTitle = "Buildscript Refactor (#681)"
messageBody = """
[INTERNAL]
[DETAILS]
details = ["**Important: Buildscript has changed from `npx gulp...` or `gulp...` to `npm run gulp...`**!", "Moves to Node 16 Package Management + Typescript Strict Mode", "New Port QB, Check QB and Fix QB Tasks"]
[DETAILS]
"""
[EXPAND]


Co-authored-by: Integer Limit <103940576+IntegerLimit@users.noreply.github.com>
Co-authored-by: Ghzdude <44148655+ghzdude@users.noreply.github.com>
Co-authored-by: SparkedTheorem <162088357+SparkedTheorem@users.noreply.github.com>
2024-05-14 21:57:00 +10:00

105 lines
3.0 KiB
TypeScript

import fs from "fs";
import upath from "upath";
import { rootDirectory } from "#globals";
import { Quest, QuestBook, QuestLine } from "#types/bqQuestBook.ts";
import { getFileAtRevision } from "#utils/util.ts";
import { getChanged, id, save, setupUtils } from "../actionQBUtils.ts";
import PortQBData from "./portQBData.ts";
import {
additions,
modifications,
removals,
setupLogic,
} from "./portQBLogic.ts";
import { setupModifications } from "./portQBModifications.ts";
import logInfo, { logError } from "../../../utils/log.ts";
let data: PortQBData;
export default async function portQBChanges(): Promise<void> {
data = new PortQBData();
await data.setup();
setupLogic(data);
setupModifications(data);
setupUtils(data);
const current = JSON.parse(
await fs.promises.readFile(
upath.join(rootDirectory, data.srcPath),
"utf-8",
),
) as QuestBook;
const old = JSON.parse(
await getFileAtRevision(data.srcPath, data.ref),
) as QuestBook;
const currentQuests = Object.values(current["questDatabase:9"]);
const oldQuests = Object.values(old["questDatabase:9"]);
const toChange = JSON.parse(
await fs.promises.readFile(
upath.join(rootDirectory, data.srcPathToChange),
"utf-8",
),
) as QuestBook;
const quests = Object.values(toChange["questDatabase:9"]);
data.currentIDsToQuests = new Map<number, Quest>(
currentQuests.map((quest) => [id(quest), quest]),
);
data.toChangeIDsToQuests = new Map<number, Quest>(
quests.map((quest) => [id(quest), quest]),
);
await data.readSavedPorter();
data.changed = getChanged(currentQuests, oldQuests);
const addedQuestIDs = data.changed.added.map((quest) => id(quest));
const modifiedQuestIDs = data.changed.modified.map((mod) => id(mod.oldQuest));
const removedQuestIDs = data.changed.removed.map((quest) => id(quest));
logInfo(`Quests Added: [${addedQuestIDs.join(", ")}]`);
logInfo(`Quests Modified: [${modifiedQuestIDs.join(", ")}]`);
logInfo(`Quests Removed: [${removedQuestIDs.join(", ")}]`);
if (
addedQuestIDs.length === 0 &&
modifiedQuestIDs.length === 0 &&
removedQuestIDs.length === 0
) {
logError("Files are the Same! No Changes Detected! Exiting...");
return;
}
if (addedQuestIDs.length > 0) await additions();
if (modifiedQuestIDs.length > 0) await modifications();
if (removedQuestIDs.length > 0) {
// Set the Old IDs to Quests
data.oldIDsToQuests = new Map<number, Quest>(
oldQuests.map((quest) => [id(quest), quest]),
);
// Set the Quest Line Changeable
data.questLines = Object.values(toChange["questLines:9"]);
await removals();
}
// Save Quest Database
const obj = {} as { [key: string]: Quest };
const iter = data.toChangeIDsToQuests.values();
for (let i = 0; i < data.toChangeIDsToQuests.size; i++) {
obj[`${i}:10`] = iter.next().value;
}
toChange["questDatabase:9"] = obj;
// Save Quest Lines, if Changed
if (data.questLines) {
const obj = {} as { [key: string]: QuestLine };
for (let i = 0; i < data.questLines.length; i++) {
obj[`${i}:10`] = data.questLines[i];
}
toChange["questLines:9"] = obj;
}
return save(toChange);
}