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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
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' });
}
|