#98 jsconfig and symlink setup (#99)

* FEAT: add jsconfig.json file

* FEAT: add new script createSymlink
FEAT: add new file tools/create-symlink.mjs
FEAT: add d.ts files
FIX: add new foundry symlink to .gitignore

---------

Co-authored-by: Joaquin Pereyra <joaquinpereyra98@users.noreply.github.com>
This commit is contained in:
joaquinpereyra98 2025-05-31 21:54:45 -03:00 committed by GitHub
parent d30ae91109
commit 879299b661
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 92 additions and 2 deletions

3
.gitignore vendored
View file

@ -2,4 +2,5 @@
node_modules node_modules
/packs /packs
Build Build
/build /build
foundry

21
daggerheart.d.ts vendored Normal file
View file

@ -0,0 +1,21 @@
import './module/_types';
import '@client/global.mjs';
import Canvas from '@client/canvas/board.mjs';
// Foundry's use of `Object.assign(globalThis) means many globally available objects are not read as such
// This declare global hopefully fixes that
declare global {
/**
* A simple event framework used throughout Foundry Virtual Tabletop.
* When key actions or events occur, a "hook" is defined where user-defined callback functions can execute.
* This class manages the registration and execution of hooked callback functions.
*/
class Hooks extends foundry.helpers.Hooks {}
const fromUuid = foundry.utils.fromUuid;
const fromUuidSync = foundry.utils.fromUuidSync;
/**
* The singleton game canvas
*/
const canvas: Canvas;
}

15
jsconfig.json Normal file
View file

@ -0,0 +1,15 @@
{
"compilerOptions": {
"module": "ES6",
"target": "ES6",
"paths": {
"@client/*": ["./foundry/client/*"],
"@common/*": ["./foundry/common/*"]
}
},
"exclude": ["node_modules", "**/node_modules/*"],
"include": ["daggerheart.mjs", "foundry/client/client.mjs", "daggerheart.d.ts"],
"typeAcquisition": {
"include": ["jquery"]
}
}

0
module/_types.d.ts vendored Normal file
View file

View file

@ -9,7 +9,8 @@
"start": "concurrently \"rollup -c --watch\" \"node ../../../../FoundryDev/main.js --dataPath=../../../ --noupnp\" \"gulp\"", "start": "concurrently \"rollup -c --watch\" \"node ../../../../FoundryDev/main.js --dataPath=../../../ --noupnp\" \"gulp\"",
"start-test": "node ./resources/app/main.js --dataPath=./ && rollup -c --watch && gulp", "start-test": "node ./resources/app/main.js --dataPath=./ && rollup -c --watch && gulp",
"pushLDBtoYML": "node ./tools/pushLDBtoYML.mjs", "pushLDBtoYML": "node ./tools/pushLDBtoYML.mjs",
"pullYMLtoLDB": "node ./tools/pullYMLtoLDB.mjs" "pullYMLtoLDB": "node ./tools/pullYMLtoLDB.mjs",
"createSymlink": "node ./tools/create-symlink.mjs"
}, },
"devDependencies": { "devDependencies": {
"@foundryvtt/foundryvtt-cli": "^1.0.2", "@foundryvtt/foundryvtt-cli": "^1.0.2",

52
tools/create-symlink.mjs Normal file
View file

@ -0,0 +1,52 @@
import fs from "fs";
import path from "path";
import readline from "readline";
console.log("Reforging Symlinks");
const askQuestion = (question) => {
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
return new Promise((resolve) =>
rl.question(question, (answer) => {
rl.close();
resolve(answer);
})
);
};
const installPath = await askQuestion("Enter your Foundry install path: ");
// Determine if it's an Electron install (nested structure)
const nested = fs.existsSync(path.join(installPath, "resources", "app"));
const fileRoot = nested
? path.join(installPath, "resources", "app")
: installPath;
try {
await fs.promises.mkdir("foundry");
} catch (e) {
if (e.code !== "EEXIST") throw e;
}
// JavaScript files
for (const p of ["client", "common", "tsconfig.json"]) {
try {
await fs.promises.symlink(path.join(fileRoot, p), path.join("foundry", p));
} catch (e) {
if (e.code !== "EEXIST") throw e;
}
}
// Language files
try {
await fs.promises.symlink(
path.join(fileRoot, "public", "lang"),
path.join("foundry", "lang")
);
} catch (e) {
if (e.code !== "EEXIST") throw e;
}