aboutsummaryrefslogtreecommitdiffstats
path: root/utils/zipExporter.ts
blob: 635e89d97feddb9c51743c1b5cbae0e35901605b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import JSZip from "jszip";
import { stringify } from "yaml";
import { mapJsonCategoryToYamlObject, mapJsonItemToYamlObject, mapJsonQuestToYamlObject } from "~/lib/questsLoader";

//TODO include the main configuration
export async function prepareZip(quests: EditorQuest[], categories: EditorCategory[], items: EditorItem[]) {
  const transformedQuests = Object.fromEntries(quests.map((quest) => [quest.id, stringify(mapJsonQuestToYamlObject(quest))]));
  const transformedItems = Object.fromEntries(items.map((item) => [item.id, stringify(mapJsonItemToYamlObject(item))]));
  const transformedCategories = stringify(Object.fromEntries(categories.map((category) => [category.id, mapJsonCategoryToYamlObject(category)])));

  return {
    transformedQuests,
    transformedItems,
    transformedCategories
  }
}

export async function createZip(quests: { [key: string]: string }, categories: string, items: { [key: string]: string }) {
  const zip = new JSZip();

  zip.file("categories.yml", categories);

  const questsDirectory = zip.folder("quests");
  Object.entries(quests).forEach(([key, value]) => {
    questsDirectory?.file(`${key}.yml`, value)
  })
  const itemsDirectory = zip.folder("items");
  Object.entries(items).forEach(([key, value]) => {
    itemsDirectory?.file(`${key}.yml`, value)
  })

  return await zip.generateAsync({ type: "blob" });
}