Moving to TypeScript #1

closed
opened by cass.cityboundforest.com targeting main from ts-vite-svelte
src/styles/kingdom-sheet.css public/styles/kingdom-sheet.css
src/templates/levels/level-1.hbs public/templates/levels/level-1.hbs
src/templates/levels/level-10.hbs public/templates/levels/level-10.hbs
src/templates/levels/level-11.hbs public/templates/levels/level-11.hbs
src/templates/levels/level-12.hbs public/templates/levels/level-12.hbs
src/templates/levels/level-13.hbs public/templates/levels/level-13.hbs
src/templates/levels/level-14.hbs public/templates/levels/level-14.hbs
src/templates/levels/level-15.hbs public/templates/levels/level-15.hbs
src/templates/levels/level-16.hbs public/templates/levels/level-16.hbs
src/templates/levels/level-17.hbs public/templates/levels/level-17.hbs
src/templates/levels/level-18.hbs public/templates/levels/level-18.hbs
src/templates/levels/level-19.hbs public/templates/levels/level-19.hbs
src/templates/levels/level-2.hbs public/templates/levels/level-2.hbs
src/templates/levels/level-20.hbs public/templates/levels/level-20.hbs
src/templates/levels/level-3.hbs public/templates/levels/level-3.hbs
src/templates/levels/level-4.hbs public/templates/levels/level-4.hbs
src/templates/levels/level-5.hbs public/templates/levels/level-5.hbs
src/templates/levels/level-6.hbs public/templates/levels/level-6.hbs
src/templates/levels/level-7.hbs public/templates/levels/level-7.hbs
src/templates/levels/level-8.hbs public/templates/levels/level-8.hbs
src/templates/levels/level-9.hbs public/templates/levels/level-9.hbs
src/templates/sheet.hbs public/templates/sheet.hbs
src/templates/tab-link.hbs public/templates/tab-link.hbs
src/templates/tab.hbs public/templates/tab.hbs
src/templates/tabs/tab-effects.hbs public/templates/tabs/tab-effects.hbs
src/templates/tabs/tab-kingdom.hbs public/templates/tabs/tab-kingdom.hbs
src/templates/tabs/tab-relations.hbs public/templates/tabs/tab-relations.hbs
src/templates/tabs/tab-settlements.hbs public/templates/tabs/tab-settlements.hbs
src/templates/tabs/tab-turn.hbs public/templates/tabs/tab-turn.hbs
+14
package-lock.json
···
"@league-of-foundry-developers/foundry-vtt-types": "^13.346.0-beta.20250812191140",
"@sveltejs/vite-plugin-svelte": "^6.2.1",
"@tsconfig/svelte": "^5.0.5",
+
"dotenv": "^17.2.3",
"terser": "^5.44.0",
"vite": "^7.1.7"
}
···
"url": "https://github.com/fb55/domutils?sponsor=1"
},
+
"node_modules/dotenv": {
+
"version": "17.2.3",
+
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz",
+
"integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==",
+
"dev": true,
+
"license": "BSD-2-Clause",
+
"engines": {
+
"node": ">=12"
+
},
+
"funding": {
+
"url": "https://dotenvx.com"
+
}
+
},
"node_modules/dunder-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+1
package.json
···
"@league-of-foundry-developers/foundry-vtt-types": "^13.346.0-beta.20250812191140",
"@sveltejs/vite-plugin-svelte": "^6.2.1",
"@tsconfig/svelte": "^5.0.5",
+
"dotenv": "^17.2.3",
"terser": "^5.44.0",
"vite": "^7.1.7"
},
+38
config.ts
···
+
import dotenv from "dotenv";
+
import path from "path";
+
+
dotenv.config({ path: path.resolve(__dirname, ".env") });
+
+
interface ENV {
+
MODULE_DIR: string | undefined;
+
}
+
+
interface Config {
+
outdir: string;
+
}
+
+
const getConfig = (): ENV => {
+
return {
+
MODULE_DIR: process.env.MODULE_DIR
+
};
+
}
+
+
const getSanitizedConfig = (config: ENV): Config => {
+
let outdir: string;
+
+
if (config.MODULE_DIR === undefined) {
+
outdir = path.join(process.cwd(), "dist");
+
} else {
+
outdir = config.MODULE_DIR;
+
}
+
+
return {
+
outdir
+
} as Config;
+
}
+
+
const config = getConfig();
+
+
const sanitizedConfig = getSanitizedConfig(config);
+
+
export default sanitizedConfig;
+36
src/module/data/charter.json
···
+
[
+
{
+
"id": "conquest",
+
"boosts": [
+
"loyalty",
+
"free"
+
]
+
},
+
{
+
"id": "expansion",
+
"boosts": [
+
"culture",
+
"free"
+
]
+
},
+
{
+
"id": "exploration",
+
"boosts": [
+
"stability",
+
"free"
+
]
+
},
+
{
+
"id": "grant",
+
"boosts": [
+
"economy",
+
"free"
+
]
+
},
+
{
+
"id": "open",
+
"boosts": [
+
"free"
+
]
+
}
+
]
+56
src/module/data/governments.json
···
+
[
+
{
+
"id": "despotism",
+
"boosts": [
+
"stability",
+
"economy",
+
"free"
+
],
+
"feat": "crush-dissent"
+
},
+
{
+
"id": "feudalism",
+
"boosts": [
+
"stability",
+
"culture",
+
"free"
+
],
+
"feat": "fortified-fiefs"
+
},
+
{
+
"id": "oligarchy",
+
"boosts": [
+
"loyalty",
+
"economy",
+
"free"
+
],
+
"feat": "insider-trading"
+
},
+
{
+
"id": "republic",
+
"boosts": [
+
"stability",
+
"loyalty",
+
"free"
+
],
+
"feat": "pull-together"
+
},
+
{
+
"id": "thaumocracy",
+
"boosts": [
+
"economy",
+
"culture",
+
"free"
+
],
+
"feat": "practical-magic"
+
},
+
{
+
"id": "yeomanry",
+
"boosts": [
+
"loyalty",
+
"culture",
+
"free"
+
],
+
"feat": "muddle-through"
+
}
+
]
+18
src/module/data/heartland.json
···
+
[
+
{
+
"id": "forest-swamp",
+
"boost": "culture"
+
},
+
{
+
"id": "hill-plain",
+
"boost": "loyalty"
+
},
+
{
+
"id": "lake-river",
+
"boost": "economy"
+
},
+
{
+
"id": "mountain-ruins",
+
"boost": "stability"
+
}
+
]
src/module/data/charter.json src/data/charter.json
src/module/data/governments.json src/data/governments.json
src/module/data/heartland.json src/data/heartland.json
+1 -1
vite.config.ts
···
}
},
lib: {
-
"entry": "src/module/main.ts",
+
"entry": "src/main.ts",
name: "app",
fileName: "main",
formats: [
src/data/governments.json src/data/government.json
+42
src/data/index.ts
···
+
import charters from "./charter.json";
+
import governments from "./government.json";
+
import heartlands from "./heartland.json";
+
+
export interface Charter {
+
id: string;
+
boosts: Boost[];
+
}
+
+
export interface Government {
+
id: string;
+
boosts: Boost[];
+
feat: string;
+
}
+
+
export interface Heartland {
+
id: string;
+
boost: Boost;
+
}
+
+
export enum Attribute {
+
Loyalty = "loyalty",
+
Culture = "culture",
+
Stability = "stability",
+
Economy = "economy",
+
None = ""
+
}
+
+
export enum Boost {
+
Loyalty = "loyalty",
+
Culture = "culture",
+
Stability = "stability",
+
Economy = "economy",
+
None = "",
+
Free = "free"
+
}
+
+
export const data = {
+
charters,
+
governments,
+
heartlands
+
};
+2 -1
tsconfig.json
···
"node"
],
"allowUmdGlobalAccess": true,
-
"strict": true
+
"strict": true,
+
"resolveJsonModule": true
},
"include": [
"src/**/*"
+2 -1
src/kingdom-sheet.ts
···
foundry.documents.collections.Actors.registerSheet("pf2e", KingdomSheet, {
types: [
"npc"
-
]
+
],
+
label: (game as foundry.Game).i18n!.localize("kingdom-homebrew.kingdom-title")
});
}