Files
2026-05-05 13:55:42 +02:00

59 lines
1.9 KiB
JavaScript

import { extractPack, compilePack } from '@foundryvtt/foundryvtt-cli';
import { promises as fs } from 'fs';
import path from 'path';
const MODULE_ID = process.cwd();
export class CompendiumsManager {
static async packToDistDir(srcDir = 'packs_src', distDir = 'packs-system', mode = 'yaml') {
const yaml = mode === 'yaml';
const packs = await fs.readdir('./' + srcDir);
for (const pack of packs) {
if (pack === '.gitattributes') continue;
console.log('Packing ' + pack);
await compilePack(
`${MODULE_ID}/${srcDir}/${pack}`,
`${MODULE_ID}/${distDir}/${pack}`,
{ yaml }
);
}
}
static async unpackToSrcDir(srcDir = 'packs_src', distDir = 'packs-system', mode = 'yaml') {
const yaml = mode === 'yaml';
const packs = await fs.readdir('./' + distDir);
for (const pack of packs) {
if (pack === '.gitattributes') continue;
if (pack === '.directory') continue;
if (pack.endsWith('.db')) continue;
console.log('Unpacking ' + pack);
const directory = `./${srcDir}/${pack}`;
await fs.mkdir(directory, { recursive: true });
try {
for (const file of await fs.readdir(directory)) {
await fs.unlink(path.join(directory, file));
}
} catch (error) {
if (error.code === 'ENOENT') console.log('No files inside of ' + pack);
else console.log(error);
}
await extractPack(
`${MODULE_ID}/${distDir}/${pack}`,
`${MODULE_ID}/${srcDir}/${pack}`,
{
yaml: mode === 'yaml',
transformName: doc => CompendiumsManager.transformName(doc, mode === 'yaml'),
}
);
}
}
static transformName(doc, yaml) {
const safeFileName = doc.name.replace(/[^a-zA-Z0-9]/g, '_');
const type = doc._key.split('!')[1];
const prefix = ['actors', 'items'].includes(type) ? doc.type : type;
return `${prefix}_${safeFileName}.${yaml ? 'yaml' : 'json'}`;
}
}