Finish creating the build step for prod to handle the compendia pack(s)

This commit is contained in:
Oliver-Akins 2025-05-30 23:50:59 -06:00
parent 66edecc217
commit 9e037818a6
3 changed files with 38 additions and 8 deletions

View file

@ -2,14 +2,16 @@ import { existsSync } from "fs";
import { readFile } from "fs/promises"; import { readFile } from "fs/promises";
import { join } from "path"; import { join } from "path";
import { compilePack } from "@foundryvtt/foundryvtt-cli"; import { compilePack } from "@foundryvtt/foundryvtt-cli";
import { pathToFileURL } from "url";
async function main() { export async function buildCompendia() {
const manifest = JSON.parse(await readFile(`./public/module.json`, `utf-8`)); const manifest = JSON.parse(await readFile(`./public/module.json`, `utf-8`));
if (!manifest.packs || manifest.packs.length === 0) { if (!manifest.packs || manifest.packs.length === 0) {
console.log(`No compendium packs defined`); console.log(`No compendium packs defined`);
process.exit(0); process.exit(0);
}; };
console.log(`Packing compendia`);
for (const compendium of manifest.packs) { for (const compendium of manifest.packs) {
console.debug(`Packing ${compendium.label} (${compendium.name})`); console.debug(`Packing ${compendium.label} (${compendium.name})`);
@ -29,4 +31,6 @@ async function main() {
console.log(`Finished packing compendia`) console.log(`Finished packing compendia`)
}; };
main(); if (import.meta.url === pathToFileURL(process.argv[1]).href) {
buildCompendia();
};

View file

@ -2,13 +2,14 @@ import { readFile } from "fs/promises";
import { join } from "path"; import { join } from "path";
import { extractPack } from "@foundryvtt/foundryvtt-cli"; import { extractPack } from "@foundryvtt/foundryvtt-cli";
async function main() { export async function extractCompendia() {
const manifest = JSON.parse(await readFile(`./public/module.json`, `utf-8`)); const manifest = JSON.parse(await readFile(`./public/module.json`, `utf-8`));
if (!manifest.packs || manifest.packs.length === 0) { if (!manifest.packs || manifest.packs.length === 0) {
console.log(`No compendium packs defined`); console.log(`No compendium packs defined`);
process.exit(0); process.exit(0);
}; };
console.log(`Extracting compendia`);
for (const compendium of manifest.packs) { for (const compendium of manifest.packs) {
console.debug(`Unpacking ${compendium.label} (${compendium.name})`); console.debug(`Unpacking ${compendium.label} (${compendium.name})`);
@ -24,4 +25,6 @@ async function main() {
console.log(`Finished unpacking compendia`); console.log(`Finished unpacking compendia`);
}; };
main(); if (import.meta.url === pathToFileURL(process.argv[1]).href) {
extractCompendia();
};

View file

@ -1,6 +1,8 @@
/* eslint-disable no-undef */ /* eslint-disable no-undef */
import { cp, rm } from "fs/promises";
import { readFileSync, symlinkSync } from "fs"; import { readFileSync, symlinkSync } from "fs";
import { buildCompendia } from "./scripts/buildCompendia.mjs";
import { defineConfig } from "vite"; import { defineConfig } from "vite";
import { glob } from "glob"; import { glob } from "glob";
import path from "path"; import path from "path";
@ -46,10 +48,9 @@ The intent of this plugin is to handle the symlinking of the compendium packs
so that they can modified during dev without needing to worry about the rebuild so that they can modified during dev without needing to worry about the rebuild
destroying the in-progress compendia data. destroying the in-progress compendia data.
*/ */
function handlePacks() { function symlinkPacks() {
return { return {
writeBundle(options) { writeBundle(options) {
console.log(options.dir);
symlinkSync( symlinkSync(
path.resolve(__dirname, `packs`), path.resolve(__dirname, `packs`),
`${options.dir}/packs`, `${options.dir}/packs`,
@ -59,15 +60,37 @@ function handlePacks() {
}; };
}; };
/*
The intent of this plugin is to handle the copying, cleaning and compiling of
compendia packs for production
*/
function buildPacks() {
return {
async writeBundle(options) {
// console.log(options);
const buildDir = options.dir;
await buildCompendia();
await cp(`${__dirname}/packs`, `${buildDir}/packs`, { recursive: true, force: true });
for (const file of glob.sync(`${buildDir}/packs/**/_source/`)) {
await rm(file, { recursive: true, force: true });
};
},
};
};
// MARK: config // MARK: config
export default defineConfig(({ mode }) => { export default defineConfig(({ mode }) => {
const isProd = mode === `prod`; const isProd = mode === `prod`;
const plugins = []; const plugins = [];
if (!isProd) { if (isProd) {
plugins.push( plugins.push(
handlePacks(), buildPacks(),
);
} else {
plugins.push(
symlinkPacks(),
watcher( watcher(
`./public`, `./public`,
), ),