create-lt-adventure 0.0.16 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +85 -85
  2. package/addons/github-workflow/addon.json +5 -5
  3. package/addons/github-workflow/main.yml +96 -48
  4. package/addons/github-workflow/{setup.ts → setup.mjs} +115 -112
  5. package/addons/sf2e-pf2e-redirects/addon.json +5 -0
  6. package/addons/sf2e-pf2e-redirects/setup.mjs +119 -0
  7. package/dist/bin.js +223 -84
  8. package/dist/bin.js.map +1 -1
  9. package/dist/migrate.d.ts +2 -0
  10. package/dist/migrate.d.ts.map +1 -0
  11. package/dist/migrate.js +169 -0
  12. package/dist/migrate.js.map +1 -0
  13. package/dist/options.d.ts +5 -2
  14. package/dist/options.d.ts.map +1 -1
  15. package/dist/options.js +14 -5
  16. package/dist/options.js.map +1 -1
  17. package/package.json +68 -66
  18. package/templates/vite/.env.example +1 -1
  19. package/templates/vite/CHANGELOG +1 -0
  20. package/templates/vite/gitignore +37 -37
  21. package/templates/vite/module.json +37 -36
  22. package/templates/vite/package.json +3 -2
  23. package/templates/vite/scripts/extractPacks.mjs +54 -49
  24. package/templates/vite/scripts/jsonReplacer.mjs +11 -0
  25. package/templates/vite/scripts/onCreate.mjs +41 -13
  26. package/templates/vite/scripts/symlink.mjs +78 -78
  27. package/templates/vite/src/adventureSheet/index.js +497 -497
  28. package/templates/vite/src/hooks.ts +22 -0
  29. package/templates/vite/src/index.js +4 -4
  30. package/templates/vite/src/lib/utils.ts +1 -0
  31. package/templates/vite/src/misc/prosemirror.js +46 -46
  32. package/templates/vite/src/module.css +306 -306
  33. package/templates/vite/src/types.d.ts +7 -7
  34. package/templates/vite/tsconfig.json +33 -29
  35. package/templates/vite/vite.config.ts +129 -128
  36. package/templates/vite/bun.lock +0 -802
@@ -0,0 +1,169 @@
1
+ import * as p from "@clack/prompts";
2
+ import { mkdir, readdir, rm, readFile, writeFile, stat, copyFile, cp } from "fs/promises";
3
+ import { existsSync, readdirSync, statSync } from "fs";
4
+ import { tmpdir } from "os";
5
+ import { join } from "path";
6
+ import AdmZip from "adm-zip";
7
+ import { extractPack } from "@foundryvtt/foundryvtt-cli";
8
+ import { yellow, cyan } from "kolorist";
9
+ function isUrl(input) {
10
+ return input.startsWith("http://") || input.startsWith("https://");
11
+ }
12
+ async function readModuleJson(source) {
13
+ if (isUrl(source)) {
14
+ const spinner = p.spinner();
15
+ spinner.start(`Fetching module.json from ${cyan(source)}...`);
16
+ const response = await fetch(source);
17
+ if (!response.ok) {
18
+ throw new Error(`Failed to fetch module.json: ${response.status} ${response.statusText}`);
19
+ }
20
+ const text = await response.text();
21
+ const parsed = JSON.parse(text);
22
+ spinner.stop(`module.json fetched successfully`);
23
+ return parsed;
24
+ }
25
+ if (!existsSync(source)) {
26
+ throw new Error(`Path does not exist: ${source}`);
27
+ }
28
+ const sourceStat = await stat(source);
29
+ const jsonPath = sourceStat.isDirectory() ? join(source, "module.json") : source;
30
+ if (!existsSync(jsonPath)) {
31
+ throw new Error(`module.json not found at ${source}`);
32
+ }
33
+ const content = await readFile(jsonPath, "utf8");
34
+ return JSON.parse(content);
35
+ }
36
+ async function downloadZipBuffer(url) {
37
+ const response = await fetch(url);
38
+ if (!response.ok) {
39
+ throw new Error(`Failed to download zip: ${response.status} ${response.statusText}`);
40
+ }
41
+ return Buffer.from(await response.arrayBuffer());
42
+ }
43
+ function findModuleRoot(extractDir) {
44
+ const entries = readdirSync(extractDir);
45
+ const moduleJsonCandidates = entries.filter((e) => e === "module.json");
46
+ if (moduleJsonCandidates.length > 0) {
47
+ return extractDir;
48
+ }
49
+ for (const entry of entries) {
50
+ const entryPath = join(extractDir, entry);
51
+ try {
52
+ const entryStat = statSync(entryPath);
53
+ if (entryStat.isDirectory()) {
54
+ const subEntries = readdirSync(entryPath);
55
+ if (subEntries.includes("module.json")) {
56
+ return entryPath;
57
+ }
58
+ }
59
+ }
60
+ catch {
61
+ // skip
62
+ }
63
+ }
64
+ return extractDir;
65
+ }
66
+ async function isLevelDBFolder(folderPath) {
67
+ if (!existsSync(folderPath))
68
+ return false;
69
+ const statResult = await stat(folderPath);
70
+ if (!statResult.isDirectory())
71
+ return false;
72
+ const entries = await readdir(folderPath);
73
+ const levelDBMarkers = ["CURRENT", "LOCK", "MANIFEST-000001", "MANIFEST-000002"];
74
+ return entries.some((e) => levelDBMarkers.some((m) => e === m || e.endsWith(".ldb") || e.endsWith(".log")));
75
+ }
76
+ export async function migrateFrom(source, modulePath) {
77
+ const sourceModuleJson = await readModuleJson(source);
78
+ if (!sourceModuleJson.download) {
79
+ throw new Error("No download URL found in module.json. The source module does not have a download property.");
80
+ }
81
+ if (!sourceModuleJson.packs || sourceModuleJson.packs.length === 0) {
82
+ p.log.warn("No packs found in the source module.json.");
83
+ return;
84
+ }
85
+ p.log.step(`Downloading module from ${cyan(sourceModuleJson.download)}`);
86
+ const tempDir = join(tmpdir(), `fvtt-migrate-${Date.now()}`);
87
+ const extractDir = join(tempDir, "extracted");
88
+ try {
89
+ await mkdir(tempDir, { recursive: true });
90
+ const zipBuffer = await downloadZipBuffer(sourceModuleJson.download);
91
+ const zip = new AdmZip(zipBuffer);
92
+ zip.extractAllTo(extractDir, true);
93
+ const moduleRoot = findModuleRoot(extractDir);
94
+ p.log.step(`Found ${sourceModuleJson.packs.length} pack(s) in module.json: ${sourceModuleJson.packs.map((p) => p.name).join(", ")}`);
95
+ const targetPacksDir = join(modulePath, "packs");
96
+ const targetDataDir = join(modulePath, "data");
97
+ await mkdir(targetPacksDir, { recursive: true });
98
+ await mkdir(targetDataDir, { recursive: true });
99
+ const newPacks = [];
100
+ const newPackNames = [];
101
+ for (const pack of sourceModuleJson.packs) {
102
+ const sourcePackPath = join(moduleRoot, pack.path);
103
+ const dbFileName = `${pack.name}.db`;
104
+ const sourceDbFile = join(sourcePackPath, dbFileName);
105
+ let sourceInputPath = null;
106
+ let isFolder = false;
107
+ if (await isLevelDBFolder(sourcePackPath)) {
108
+ sourceInputPath = sourcePackPath;
109
+ isFolder = true;
110
+ }
111
+ else if (existsSync(sourceDbFile)) {
112
+ sourceInputPath = sourceDbFile;
113
+ }
114
+ if (!sourceInputPath) {
115
+ p.log.warn(`Pack not found at ${sourcePackPath} or ${sourceDbFile}. Skipping ${pack.name}.`);
116
+ continue;
117
+ }
118
+ p.log.step(`Extracting ${yellow(pack.name)}...`);
119
+ if (isFolder) {
120
+ await cp(sourceInputPath, join(targetPacksDir, pack.name), { recursive: true });
121
+ }
122
+ else {
123
+ await copyFile(sourceInputPath, join(targetPacksDir, dbFileName));
124
+ }
125
+ const targetDataPath = join(targetDataDir, pack.name);
126
+ await mkdir(targetDataPath, { recursive: true });
127
+ const extractInput = isFolder ? join(targetPacksDir, pack.name) : join(targetPacksDir, dbFileName);
128
+ await extractPack(extractInput, targetDataPath, {
129
+ expandAdventures: true,
130
+ omitVolatile: true,
131
+ folders: true,
132
+ clean: true,
133
+ jsonOptions: {
134
+ space: "\t",
135
+ },
136
+ });
137
+ newPacks.push({
138
+ label: pack.label || pack.name.charAt(0).toUpperCase() + pack.name.slice(1).replace(/-/g, " "),
139
+ name: pack.name,
140
+ path: `packs/${pack.name}`,
141
+ system: pack.system || "",
142
+ type: pack.type,
143
+ ownership: pack.ownership || {
144
+ PLAYER: "OBSERVER",
145
+ ASSISTANT: "OBSERVER",
146
+ },
147
+ });
148
+ newPackNames.push(pack.name);
149
+ }
150
+ if (newPacks.length > 0) {
151
+ const targetModuleJsonPath = join(modulePath, "module.json");
152
+ if (existsSync(targetModuleJsonPath)) {
153
+ const content = await readFile(targetModuleJsonPath, "utf8");
154
+ const targetModuleJson = JSON.parse(content);
155
+ targetModuleJson.packs = newPacks;
156
+ if (sourceModuleJson.packFolders) {
157
+ targetModuleJson.packFolders = sourceModuleJson.packFolders;
158
+ }
159
+ await writeFile(targetModuleJsonPath, JSON.stringify(targetModuleJson, null, "\t"));
160
+ p.log.step("Updated module.json with migrated packs");
161
+ }
162
+ }
163
+ p.log.info(`Migration complete! ${newPacks.length} pack(s) processed.`);
164
+ }
165
+ finally {
166
+ await rm(tempDir, { recursive: true, force: true });
167
+ }
168
+ }
169
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"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"}
package/dist/options.d.ts CHANGED
@@ -12,10 +12,13 @@ declare const packs: {
12
12
  declare const systems: {
13
13
  id: string;
14
14
  type: string;
15
- manifest: string;
16
15
  compatibility: {
17
16
  minimum: string;
18
17
  };
19
18
  }[];
20
- export { packs, systems };
19
+ declare const foundryVersions: {
20
+ label: string;
21
+ value: string;
22
+ }[];
23
+ export { packs, systems, foundryVersions };
21
24
  //# sourceMappingURL=options.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,KAAK;;;;;;;;;;GA6CV,CAAC;AAEF,QAAA,MAAM,OAAO;;;;;;;GAmBZ,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,KAAK;;;;;;;;;;GA6CV,CAAC;AAEF,QAAA,MAAM,OAAO;;;;;;GAsBZ,CAAC;AAEF,QAAA,MAAM,eAAe;;;GAGpB,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC"}
package/dist/options.js CHANGED
@@ -48,19 +48,28 @@ const systems = [
48
48
  {
49
49
  id: "dnd5e",
50
50
  type: "system",
51
- manifest: "https://github.com/foundryvtt/dnd5e/releases/latest/download/system.json",
52
51
  compatibility: {
53
- minimum: "5.2",
52
+ minimum: "5",
54
53
  },
55
54
  },
56
55
  {
57
56
  id: "pf2e",
58
57
  type: "system",
59
- manifest: "https://github.com/foundryvtt/pf2e/releases/latest/download/system.json",
60
58
  compatibility: {
61
- minimum: "7.8",
59
+ minimum: "8",
62
60
  },
63
61
  },
62
+ {
63
+ id: "sf2e",
64
+ type: "system",
65
+ compatibility: {
66
+ minimum: "1",
67
+ },
68
+ },
69
+ ];
70
+ const foundryVersions = [
71
+ { label: "V13", value: "13" },
72
+ { label: "V14", value: "14" },
64
73
  ];
65
- export { packs, systems };
74
+ export { packs, systems, foundryVersions };
66
75
  //# sourceMappingURL=options.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG;IACb;QACC,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE;YACV,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,UAAU;SACrB;KACD;IACD;QACC,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE;YACV,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,UAAU;SACrB;KACD;IACD;QACC,KAAK,EAAE,UAAU;QACjB,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,cAAc;QACpB,SAAS,EAAE;YACV,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,UAAU;SACrB;KACD;IACD;QACC,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,OAAO;QACb,SAAS,EAAE;YACV,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,OAAO;SAClB;KACD;CACD,CAAC;AAEF,MAAM,OAAO,GAAG;IACf;QACC,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,QAAQ;QACd,QAAQ,EACP,0EAA0E;QAC3E,aAAa,EAAE;YACd,OAAO,EAAE,KAAK;SACd;KACD;IACD;QACC,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,QAAQ;QACd,QAAQ,EACP,yEAAyE;QAC1E,aAAa,EAAE;YACd,OAAO,EAAE,KAAK;SACd;KACD;CACD,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG;IACb;QACC,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE;YACV,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,UAAU;SACrB;KACD;IACD;QACC,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE;YACV,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,UAAU;SACrB;KACD;IACD;QACC,KAAK,EAAE,UAAU;QACjB,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,cAAc;QACpB,SAAS,EAAE;YACV,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,UAAU;SACrB;KACD;IACD;QACC,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,OAAO;QACb,SAAS,EAAE;YACV,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,OAAO;SAClB;KACD;CACD,CAAC;AAEF,MAAM,OAAO,GAAG;IACf;QACC,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,QAAQ;QACd,aAAa,EAAE;YACd,OAAO,EAAE,GAAG;SACZ;KACD;IACD;QACC,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,QAAQ;QACd,aAAa,EAAE;YACd,OAAO,EAAE,GAAG;SACZ;KACD;IACD;QACC,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,QAAQ;QACd,aAAa,EAAE;YACd,OAAO,EAAE,GAAG;SACZ;KACD;CACD,CAAC;AAEF,MAAM,eAAe,GAAG;IACvB,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;IAC7B,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;CAC7B,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,66 +1,68 @@
1
- {
2
- "name": "create-lt-adventure",
3
- "version": "0.0.16",
4
- "description": "A CLI tool to scaffold Foundry VTT modules",
5
- "keywords": [
6
- "foundry-vtt",
7
- "module",
8
- "scaffold",
9
- "cli"
10
- ],
11
- "license": "MIT",
12
- "author": "mrvauxs",
13
- "repository": {
14
- "type": "git",
15
- "url": "https://github.com/MrVauxs/create-lt-adventure"
16
- },
17
- "homepage": "https://github.com/MrVauxs/create-lt-adventure#readme",
18
- "bugs": {
19
- "url": "https://github.com/MrVauxs/create-lt-adventure/issues"
20
- },
21
- "type": "module",
22
- "main": "./dist/index.js",
23
- "exports": {
24
- ".": {
25
- "import": "./dist/index.js",
26
- "types": "./dist/index.d.ts"
27
- },
28
- "./bin": {
29
- "import": "./dist/bin.js",
30
- "types": "./dist/bin.d.ts"
31
- }
32
- },
33
- "bin": {
34
- "create-lt-adventure": "./dist/bin.js"
35
- },
36
- "files": [
37
- "dist/",
38
- "templates/",
39
- "addons/",
40
- "LICENSE",
41
- "README.md"
42
- ],
43
- "scripts": {
44
- "create": "bun src/bin.ts",
45
- "build": "tsc",
46
- "build:watch": "tsc --watch",
47
- "prepublishOnly": "npm run build",
48
- "prepack": "npm run build",
49
- "dev": "bun src/bin.ts \"My New Module\" --auto-id"
50
- },
51
- "dependencies": {
52
- "kolorist": "^1.8.0",
53
- "@clack/prompts": "^1.0.0-alpha.9"
54
- },
55
- "devDependencies": {
56
- "@types/bun": "latest",
57
- "@types/node": "^20",
58
- "typescript": "^5"
59
- },
60
- "peerDependencies": {
61
- "typescript": "^5"
62
- },
63
- "engines": {
64
- "node": ">=18.0.0"
65
- }
66
- }
1
+ {
2
+ "name": "create-lt-adventure",
3
+ "version": "0.1.3",
4
+ "description": "A CLI tool to scaffold Foundry VTT modules",
5
+ "keywords": [
6
+ "foundry-vtt",
7
+ "module",
8
+ "scaffold",
9
+ "cli"
10
+ ],
11
+ "license": "MIT",
12
+ "author": "mrvauxs",
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "https://github.com/Loot-Foundry/create-lt-adventure"
16
+ },
17
+ "homepage": "https://github.com/Loot-Foundry/create-lt-adventure#readme",
18
+ "bugs": {
19
+ "url": "https://github.com/Loot-Foundry/create-lt-adventure/issues"
20
+ },
21
+ "type": "module",
22
+ "main": "./dist/index.js",
23
+ "exports": {
24
+ ".": {
25
+ "import": "./dist/index.js",
26
+ "types": "./dist/index.d.ts"
27
+ },
28
+ "./bin": {
29
+ "import": "./dist/bin.js",
30
+ "types": "./dist/bin.d.ts"
31
+ }
32
+ },
33
+ "bin": {
34
+ "create-lt-adventure": "./dist/bin.js"
35
+ },
36
+ "files": [
37
+ "dist/",
38
+ "templates/",
39
+ "addons/",
40
+ "LICENSE",
41
+ "README.md"
42
+ ],
43
+ "scripts": {
44
+ "create": "bun src/bin.ts",
45
+ "build": "tsc",
46
+ "build:watch": "tsc --watch",
47
+ "prepublishOnly": "npm run build",
48
+ "prepack": "npm run build",
49
+ "dev": "bun src/bin.ts \"My New Module\" --auto-id"
50
+ },
51
+ "dependencies": {
52
+ "kolorist": "^1.8.0",
53
+ "adm-zip": "^0.5.16",
54
+ "@foundryvtt/foundryvtt-cli": "^1.0.0",
55
+ "@clack/prompts": "^1.0.0-alpha.9"
56
+ },
57
+ "devDependencies": {
58
+ "@types/adm-zip": "^0.5.7",
59
+ "@types/node": "^20.19.39",
60
+ "typescript": "^5"
61
+ },
62
+ "peerDependencies": {
63
+ "typescript": "^5"
64
+ },
65
+ "engines": {
66
+ "node": ">=18.0.0"
67
+ }
68
+ }
@@ -1,2 +1,2 @@
1
- FOUNDRY_PORT=30000 # Which port your FoundryVTT instance is hosted at.
1
+ FOUNDRY_PORT=30000 # Which port your FoundryVTT instance is hosted at.
2
2
  DEV_PORT=30001 # Which port you want to use for development.
@@ -0,0 +1 @@
1
+ # 1.0.0
@@ -1,37 +1,37 @@
1
- packs
2
-
3
- # dependencies (bun install)
4
- node_modules
5
-
6
- # output
7
- out
8
- dist
9
- *.tgz
10
-
11
- # code coverage
12
- coverage
13
- *.lcov
14
-
15
- # logs
16
- logs
17
- _.log
18
- report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
19
-
20
- # dotenv environment variable files
21
- .env
22
- .env.development.local
23
- .env.test.local
24
- .env.production.local
25
- .env.local
26
-
27
- # caches
28
- .eslintcache
29
- .cache
30
- *.tsbuildinfo
31
- .vite-cache
32
-
33
- # IntelliJ based IDEs
34
- .idea
35
-
36
- # Finder (MacOS) folder config
37
- .DS_Store
1
+ packs
2
+
3
+ # dependencies (bun install)
4
+ node_modules
5
+
6
+ # output
7
+ out
8
+ dist
9
+ *.tgz
10
+
11
+ # code coverage
12
+ coverage
13
+ *.lcov
14
+
15
+ # logs
16
+ logs
17
+ _.log
18
+ report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
19
+
20
+ # dotenv environment variable files
21
+ .env
22
+ .env.development.local
23
+ .env.test.local
24
+ .env.production.local
25
+ .env.local
26
+
27
+ # caches
28
+ .eslintcache
29
+ .cache
30
+ *.tsbuildinfo
31
+ .vite-cache
32
+
33
+ # IntelliJ based IDEs
34
+ .idea
35
+
36
+ # Finder (MacOS) folder config
37
+ .DS_Store
@@ -1,36 +1,37 @@
1
- {
2
- "id": "module-template",
3
- "title": "Module Template",
4
- "description": "",
5
- "authors": [
6
- {
7
- "name": "Vauxs",
8
- "discord": "vauxs",
9
- "twitter": "@ThatVauxs",
10
- "email": "mrvauxs@gmail.com",
11
- "ko-fi": "MrVauxs",
12
- "patreon": "MrVauxs"
13
- }
14
- ],
15
- "version": "dev",
16
- "compatibility": {
17
- "minimum": "13",
18
- "verified": "13"
19
- },
20
- "esmodules": [],
21
- "styles": [],
22
- "relationships": {},
23
- "packs": [],
24
- "packFolders": [],
25
- "flags": {
26
- "canUpload": true,
27
- "hotReload": {
28
- "extensions": ["css", "json"],
29
- "paths": ["styles"]
30
- }
31
- },
32
- "url": "",
33
- "bugs": "",
34
- "manifest": "",
35
- "download": ""
36
- }
1
+ {
2
+ "id": "module-template",
3
+ "title": "Module Template",
4
+ "description": "",
5
+ "authors": [
6
+ {
7
+ "name": "Vauxs",
8
+ "discord": "vauxs",
9
+ "twitter": "@ThatVauxs",
10
+ "email": "mrvauxs@gmail.com",
11
+ "ko-fi": "MrVauxs",
12
+ "patreon": "MrVauxs"
13
+ }
14
+ ],
15
+ "version": "dev",
16
+ "compatibility": {
17
+ "minimum": "13",
18
+ "verified": "13"
19
+ },
20
+ "esmodules": [],
21
+ "styles": [],
22
+ "relationships": {},
23
+ "packs": [],
24
+ "packFolders": [],
25
+ "flags": {
26
+ "canUpload": true,
27
+ "hotReload": {
28
+ "extensions": ["css", "json"],
29
+ "paths": ["dist"]
30
+ }
31
+ },
32
+ "url": "https://github.com/AUTHOR/REPO",
33
+ "bugs": "https://github.com/AUTHOR/REPO/issues",
34
+ "changelog": "https://github.com/AUTHOR/REPO/blob/main/CHANGELOG",
35
+ "manifest": "https://raw.githubusercontent.com/AUTHOR/REPO/latest/releases/module.json",
36
+ "download": "https://raw.githubusercontent.com/AUTHOR/REPO/latest/releases/module.zip"
37
+ }
@@ -24,7 +24,8 @@
24
24
  "vite": "^7.3.0"
25
25
  },
26
26
  "browserslist": [
27
- ">5%",
28
- "not IE 11"
27
+ "last 2 Chrome versions",
28
+ "last 2 Firefox versions",
29
+ "last 2 Edge versions"
29
30
  ]
30
31
  }
@@ -1,50 +1,55 @@
1
- #!/usr/bin/env node
2
-
3
- import { existsSync } from "node:fs";
4
- import fs from "node:fs/promises";
5
- import path from "node:path";
6
- import * as p from "@clack/prompts";
7
- import { extractPack } from "@foundryvtt/foundryvtt-cli";
8
- import { yellow } from "kolorist";
9
- // import moduleJSON from "../module.json" with { type: "json" };
10
-
11
- const foundryDataDir = "packs/";
12
- const jsonDataDir = "data/";
13
-
14
- p.intro(`Extracting ${foundryDataDir} into ${jsonDataDir}...`)
15
-
16
- const outDir = path.resolve(process.cwd());
17
- const packsCompiled = path.resolve(outDir, foundryDataDir);
18
- if (!existsSync(packsCompiled)) {
19
- p.log.warn("Packs directory does not exist in the build!")
20
- }
21
-
22
- const packFolders = await fs.readdir(packsCompiled);
23
-
24
- if (packFolders.length === 0) p.log.info("No packs to extract!")
25
-
26
- await p.tasks(
27
- packFolders.map(pack => ({
28
- title: `Extracting ${pack}...`,
29
- task: async () => {
30
- if (!existsSync(`${jsonDataDir}/${pack}`)) {
31
- await fs.mkdir(`${jsonDataDir}/${pack}`);
32
- }
33
- await extractPack(
34
- path.resolve(packsCompiled, pack),
35
- `${jsonDataDir}/${pack}`,
36
- {
37
- expandAdventures: true,
38
- omitVolatile: true,
39
- folders: false,
40
- clean: true,
41
- log: false
42
- },
43
- );
44
- return `Extracted ${yellow(pack)}!`
45
- }
46
- })),
47
- {}
48
- );
49
-
1
+ #!/usr/bin/env node
2
+
3
+ import { existsSync } from "node:fs";
4
+ import fs from "node:fs/promises";
5
+ import path from "node:path";
6
+ import * as p from "@clack/prompts";
7
+ import { extractPack } from "@foundryvtt/foundryvtt-cli";
8
+ import { yellow } from "kolorist";
9
+ import { replacer } from "./jsonReplacer.mjs";
10
+ // import moduleJSON from "../module.json" with { type: "json" };
11
+
12
+ const foundryDataDir = "packs/";
13
+ const jsonDataDir = "data/";
14
+
15
+ p.intro(`Extracting ${foundryDataDir} into ${jsonDataDir}...`)
16
+
17
+ const outDir = path.resolve(process.cwd());
18
+ const packsCompiled = path.resolve(outDir, foundryDataDir);
19
+ if (!existsSync(packsCompiled)) {
20
+ p.log.warn("Packs directory does not exist in the build!")
21
+ }
22
+
23
+ const packFolders = await fs.readdir(packsCompiled);
24
+
25
+ if (packFolders.length === 0) p.log.info("No packs to extract!")
26
+
27
+ await p.tasks(
28
+ packFolders.map(pack => ({
29
+ title: `Extracting ${pack}...`,
30
+ task: async () => {
31
+ if (!existsSync(`${jsonDataDir}/${pack}`)) {
32
+ await fs.mkdir(`${jsonDataDir}/${pack}`);
33
+ }
34
+ await extractPack(
35
+ path.resolve(packsCompiled, pack),
36
+ `${jsonDataDir}/${pack}`,
37
+ {
38
+ expandAdventures: true, // If false, you can remove ignoreAdventureHMR in vite.config
39
+ omitVolatile: true,
40
+ folders: true,
41
+ clean: true,
42
+ log: false,
43
+ jsonOptions: {
44
+ replacer,
45
+ space: "\t"
46
+ }
47
+ },
48
+ );
49
+ return `Extracted ${yellow(pack)}!`
50
+ }
51
+ })),
52
+ {}
53
+ );
54
+
50
55
  p.outro("Finished!");