create-lt-adventure 0.0.1

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 (125) hide show
  1. package/README.md +79 -0
  2. package/addons/github-workflow/addon.json +5 -0
  3. package/addons/github-workflow/main.yml +48 -0
  4. package/addons/github-workflow/setup.ts +112 -0
  5. package/dist/bin.d.ts +3 -0
  6. package/dist/bin.d.ts.map +1 -0
  7. package/dist/bin.js +283 -0
  8. package/dist/bin.js.map +1 -0
  9. package/dist/index.d.ts +2 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +3 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/options.d.ts +21 -0
  14. package/dist/options.d.ts.map +1 -0
  15. package/dist/options.js +66 -0
  16. package/dist/options.js.map +1 -0
  17. package/package.json +66 -0
  18. package/templates/vite/.env.example +2 -0
  19. package/templates/vite/README.md +0 -0
  20. package/templates/vite/assets/journals/Read-Aloud_Corner.webp +0 -0
  21. package/templates/vite/assets/journals/Sidebar_Frame_Brown.webp +0 -0
  22. package/templates/vite/assets/journals/Sidebar_Frame_Green.webp +0 -0
  23. package/templates/vite/assets/journals/borders/panel-border-000.webp +0 -0
  24. package/templates/vite/assets/journals/borders/panel-border-001.webp +0 -0
  25. package/templates/vite/assets/journals/borders/panel-border-002.webp +0 -0
  26. package/templates/vite/assets/journals/borders/panel-border-003.webp +0 -0
  27. package/templates/vite/assets/journals/borders/panel-border-004.webp +0 -0
  28. package/templates/vite/assets/journals/borders/panel-border-005.webp +0 -0
  29. package/templates/vite/assets/journals/borders/panel-border-006.webp +0 -0
  30. package/templates/vite/assets/journals/borders/panel-border-007.webp +0 -0
  31. package/templates/vite/assets/journals/borders/panel-border-008.webp +0 -0
  32. package/templates/vite/assets/journals/borders/panel-border-009.webp +0 -0
  33. package/templates/vite/assets/journals/borders/panel-border-010.webp +0 -0
  34. package/templates/vite/assets/journals/borders/panel-border-011.webp +0 -0
  35. package/templates/vite/assets/journals/borders/panel-border-012.webp +0 -0
  36. package/templates/vite/assets/journals/borders/panel-border-013.webp +0 -0
  37. package/templates/vite/assets/journals/borders/panel-border-014.webp +0 -0
  38. package/templates/vite/assets/journals/borders/panel-border-015.webp +0 -0
  39. package/templates/vite/assets/journals/borders/panel-border-016.webp +0 -0
  40. package/templates/vite/assets/journals/borders/panel-border-017.webp +0 -0
  41. package/templates/vite/assets/journals/borders/panel-border-018.webp +0 -0
  42. package/templates/vite/assets/journals/borders/panel-border-019.webp +0 -0
  43. package/templates/vite/assets/journals/borders/panel-border-020.webp +0 -0
  44. package/templates/vite/assets/journals/borders/panel-border-021.webp +0 -0
  45. package/templates/vite/assets/journals/borders/panel-border-022.webp +0 -0
  46. package/templates/vite/assets/journals/borders/panel-border-023.webp +0 -0
  47. package/templates/vite/assets/journals/borders/panel-border-024.webp +0 -0
  48. package/templates/vite/assets/journals/borders/panel-border-025.webp +0 -0
  49. package/templates/vite/assets/journals/borders/panel-border-026.webp +0 -0
  50. package/templates/vite/assets/journals/borders/panel-border-027.webp +0 -0
  51. package/templates/vite/assets/journals/borders/panel-border-028.webp +0 -0
  52. package/templates/vite/assets/journals/borders/panel-border-029.webp +0 -0
  53. package/templates/vite/assets/journals/borders/panel-border-030.webp +0 -0
  54. package/templates/vite/assets/journals/borders/panel-border-031.webp +0 -0
  55. package/templates/vite/assets/journals/fonts/Candara.ttf +0 -0
  56. package/templates/vite/assets/journals/fonts/CoinageCapsKrugerGray.ttf +0 -0
  57. package/templates/vite/assets/journals/fonts/GeizerModifiedO.otf +0 -0
  58. package/templates/vite/assets/journals/fonts/Kings Caslon/Kings_Caslon_Bold.otf +0 -0
  59. package/templates/vite/assets/journals/fonts/Kings Caslon/Kings_Caslon_BoldItalic.otf +0 -0
  60. package/templates/vite/assets/journals/fonts/Kings Caslon/Kings_Caslon_Italic.otf +0 -0
  61. package/templates/vite/assets/journals/fonts/Kings Caslon/Kings_Caslon_Regular.otf +0 -0
  62. package/templates/vite/assets/journals/fonts/Modesto/ModestoText_Bold.otf +0 -0
  63. package/templates/vite/assets/journals/fonts/Modesto/ModestoText_BoldItalic.otf +0 -0
  64. package/templates/vite/assets/journals/fonts/Modesto/ModestoText_Light.otf +0 -0
  65. package/templates/vite/assets/journals/fonts/Modesto/ModestoText_LightItalic.otf +0 -0
  66. package/templates/vite/assets/journals/fonts/Modesto/ModestoText_Medium.otf +0 -0
  67. package/templates/vite/assets/journals/fonts/Modesto/ModestoText_MediumItalic.otf +0 -0
  68. package/templates/vite/assets/journals/fonts/Modesto/Modesto_Condensed_Bold.otf +0 -0
  69. package/templates/vite/assets/journals/fonts/Modesto/Modesto_Condensed_Light.otf +0 -0
  70. package/templates/vite/assets/journals/fonts/Modesto/Modesto_Condensed_Regular.otf +0 -0
  71. package/templates/vite/assets/journals/headers/bg-header-length-01.svg +61 -0
  72. package/templates/vite/assets/journals/headers/bg-header-length-02.svg +59 -0
  73. package/templates/vite/assets/journals/headers/bg-header-length-03.svg +66 -0
  74. package/templates/vite/assets/journals/headers/bg-header-length-04.svg +58 -0
  75. package/templates/vite/assets/journals/headers/bg-header-length-05.svg +75 -0
  76. package/templates/vite/assets/journals/headers/bg-header-length-06.svg +73 -0
  77. package/templates/vite/assets/journals/headers/bg-header-length-07.svg +69 -0
  78. package/templates/vite/assets/journals/masks/flipped/mask-brush-02.webp +0 -0
  79. package/templates/vite/assets/journals/masks/flipped/mask-brush-03.webp +0 -0
  80. package/templates/vite/assets/journals/masks/flipped/mask-brush-04.webp +0 -0
  81. package/templates/vite/assets/journals/masks/flipped/mask-brush-05.webp +0 -0
  82. package/templates/vite/assets/journals/masks/flipped/mask-brush-06.webp +0 -0
  83. package/templates/vite/assets/journals/masks/flipped/mask-hard-01.webp +0 -0
  84. package/templates/vite/assets/journals/masks/flipped/mask-hard-02.webp +0 -0
  85. package/templates/vite/assets/journals/masks/flipped/mask-hard-03.webp +0 -0
  86. package/templates/vite/assets/journals/masks/flipped/mask-hard-04.webp +0 -0
  87. package/templates/vite/assets/journals/masks/flipped/mask-hard-05.webp +0 -0
  88. package/templates/vite/assets/journals/masks/flipped/mask-hard-06.webp +0 -0
  89. package/templates/vite/assets/journals/masks/flipped/mask-soft-01.webp +0 -0
  90. package/templates/vite/assets/journals/masks/flipped/mask-soft-02.webp +0 -0
  91. package/templates/vite/assets/journals/masks/flipped/mask-soft-03.webp +0 -0
  92. package/templates/vite/assets/journals/masks/flipped/mask-soft-04.webp +0 -0
  93. package/templates/vite/assets/journals/masks/flipped/mask-soft-05.webp +0 -0
  94. package/templates/vite/assets/journals/masks/flipped/mask-soft-06.webp +0 -0
  95. package/templates/vite/assets/journals/masks/mask-brush-02.webp +0 -0
  96. package/templates/vite/assets/journals/masks/mask-brush-03.webp +0 -0
  97. package/templates/vite/assets/journals/masks/mask-brush-04.webp +0 -0
  98. package/templates/vite/assets/journals/masks/mask-brush-05.webp +0 -0
  99. package/templates/vite/assets/journals/masks/mask-brush-06.webp +0 -0
  100. package/templates/vite/assets/journals/masks/mask-hard-01.webp +0 -0
  101. package/templates/vite/assets/journals/masks/mask-hard-02.webp +0 -0
  102. package/templates/vite/assets/journals/masks/mask-hard-03.webp +0 -0
  103. package/templates/vite/assets/journals/masks/mask-hard-04.webp +0 -0
  104. package/templates/vite/assets/journals/masks/mask-hard-05.webp +0 -0
  105. package/templates/vite/assets/journals/masks/mask-hard-06.webp +0 -0
  106. package/templates/vite/assets/journals/masks/mask-soft-01.webp +0 -0
  107. package/templates/vite/assets/journals/masks/mask-soft-02.webp +0 -0
  108. package/templates/vite/assets/journals/masks/mask-soft-03.webp +0 -0
  109. package/templates/vite/assets/journals/masks/mask-soft-04.webp +0 -0
  110. package/templates/vite/assets/journals/masks/mask-soft-05.webp +0 -0
  111. package/templates/vite/assets/journals/masks/mask-soft-06.webp +0 -0
  112. package/templates/vite/assets/setup.webp +0 -0
  113. package/templates/vite/bun.lock +983 -0
  114. package/templates/vite/lang/en.json +1 -0
  115. package/templates/vite/module.json +36 -0
  116. package/templates/vite/package.json +29 -0
  117. package/templates/vite/scripts/extractPacks.mjs +50 -0
  118. package/templates/vite/scripts/onCreate.mjs +14 -0
  119. package/templates/vite/scripts/symlink.mjs +79 -0
  120. package/templates/vite/src/adventureSheet/index.js +498 -0
  121. package/templates/vite/src/index.js +5 -0
  122. package/templates/vite/src/misc/fonts.js +50 -0
  123. package/templates/vite/src/misc/prosemirror.js +47 -0
  124. package/templates/vite/src/module.css +284 -0
  125. package/templates/vite/vite.config.ts +110 -0
package/README.md ADDED
@@ -0,0 +1,79 @@
1
+ # create-lt-adventure
2
+
3
+ A CLI scaffolding tool for creating Foundry VTT modules.
4
+
5
+ ## Installation
6
+
7
+ ### Global Installation (for end users)
8
+
9
+ Once published to npm, you can install this globally:
10
+
11
+ ```bash
12
+ bun install -g create-lt-adventure
13
+ ```
14
+
15
+ Then run it from anywhere:
16
+
17
+ ```bash
18
+ create-lt-adventure
19
+ ```
20
+
21
+ ### Development Installation
22
+
23
+ For development purposes:
24
+
25
+ ```bash
26
+ git clone https://github.com/Loot-Foundry/create-lt-adventure
27
+ cd create-lt-adventure
28
+ bun install
29
+ bun run dev
30
+ ```
31
+ ### Development
32
+
33
+ ```bash
34
+ # Install dependencies
35
+ bun install
36
+
37
+ # Run in development mode (requires Bun)
38
+ bun run dev
39
+
40
+ # Watch for TypeScript changes
41
+ bun run build:watch
42
+ ```
43
+
44
+ ## Scripts
45
+
46
+ - `bun run build` - Compile TypeScript to JavaScript
47
+ - `bun run build:watch` - Watch TypeScript files and rebuild on changes
48
+ - `bun run dev` - Run the CLI in development mode (requires Bun)
49
+ - `bun run prepublishOnly` - Automatically run before publishing
50
+
51
+ ## System Support
52
+
53
+ Currently supports:
54
+ - **dnd5e** - Dungeons & Dragons 5th Edition
55
+ - **pf2e** - Pathfinder 2nd Edition
56
+
57
+ Additional systems can be added in `src/options.ts`.
58
+
59
+ ## Resources
60
+
61
+ ### Foundry VTT Documentation
62
+ - [dnd5e System Wiki](https://github.com/foundryvtt/dnd5e/wiki)
63
+ - [dnd5e Module Registration](https://github.com/foundryvtt/dnd5e/wiki/Module-Registration)
64
+ - [PF2e Wiki](https://github.com/foundryvtt/pf2e/wiki)
65
+
66
+ ### Module Development
67
+ - [Foundry VTT Module Development](https://foundryvtt.com/article/modules/)
68
+
69
+ ## License
70
+
71
+ MIT
72
+
73
+ ## Contributing
74
+
75
+ Contributions are welcome! Please feel free to submit pull requests.
76
+
77
+ ## Issues
78
+
79
+ Found a bug? Please open an issue on [GitHub](https://github.com/Loot-Foundry/create-lt-adventure/issues).
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "Github Workflow",
3
+ "description": "Adds support for automated releases via Github workflows",
4
+ "default": true
5
+ }
@@ -0,0 +1,48 @@
1
+ name: Release Creation
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ build:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v4
12
+ - uses: oven-sh/setup-bun@v2
13
+
14
+ - name: Extract version from tag without the v
15
+ id: get-version
16
+ run: echo "v=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
17
+
18
+ - name: Substitute Manifest and Download Links For Versioned Ones
19
+ id: sub_manifest_link_version
20
+ uses: microsoft/variable-substitution@v1
21
+ with:
22
+ files: module.json
23
+ env:
24
+ flags.canUpload: false
25
+ version: ${{ steps.get-version.outputs.v }}
26
+
27
+ - name: Install packages
28
+ run: bun ci
29
+
30
+ - name: Build distribution
31
+ run: bun run build
32
+
33
+ # Create a zip file with all files required by the module to add to the release.
34
+ - name: Bundle into ZIP file
35
+ run: zip -r ./module.zip module.json assets/ dist/ packs/
36
+
37
+ # Create a release for this specific version.
38
+ - name: Update Release with Files
39
+ id: create_version_release
40
+ uses: ncipollo/release-action@v1
41
+ with:
42
+ allowUpdates: true # Set this to false if you want to prevent updating existing releases.
43
+ name: ${{ github.event.release.name }}
44
+ tag: ${{ github.event.release.tag_name }}
45
+ body: ${{ github.event.release.body }}
46
+ artifacts: "./module.json, ./module.zip"
47
+ omitDraftDuringUpdate: true
48
+ omitPrereleaseDuringUpdate: true
@@ -0,0 +1,112 @@
1
+ // Creates a .github/workflows/main.yml file.
2
+ // Additional options include:
3
+ // - Support for prereleases (requires a seperate branch)
4
+ // - Supports for uploading via FTP to external servers
5
+ // - Discord webhook notifications
6
+
7
+ import * as p from "@clack/prompts";
8
+ import { cyan } from "kolorist";
9
+ import { mkdir } from "fs/promises";
10
+
11
+ const data = await p.group(
12
+ {
13
+ features: () =>
14
+ p.multiselect({
15
+ message: "Additional features?",
16
+ initialValues: ["ftp", "discord"],
17
+ required: false,
18
+ options: [
19
+ // { label: "Prereleases", value: "prereleases" },
20
+ { label: "Uploading via FTP", value: "ftp" },
21
+ { label: "Discord webhook on updates", value: "discord" },
22
+ ],
23
+ }),
24
+ },
25
+ { onCancel: () => process.exit(0) },
26
+ );
27
+
28
+ // Grab main.yml template
29
+ const addonDir = import.meta.dir;
30
+ const mainYmlTemplate = await Bun.file(`${addonDir}/main.yml`).text();
31
+
32
+ // Get the module directory from environment variable
33
+ const moduleDir = process.env.MODULE_DIR || process.cwd();
34
+
35
+ let mainYml = mainYmlTemplate;
36
+
37
+ // I should probably just make this a JSON and convert it to accursed YAML at the end step...
38
+ if (data.features.includes("discord") || data.features.includes("ftp")) {
39
+ mainYml += `
40
+ # https://stackoverflow.com/questions/61919141/read-json-file-in-github-actions
41
+ - id: set_var
42
+ run: echo "PACKAGE_JSON=$(jq -c . < module.json)" >> $GITHUB_OUTPUT
43
+
44
+ - name: Get FTP Path
45
+ id: ftp
46
+ run: echo "ftp=\${{fromJson(steps.set_var.outputs.PACKAGE_JSON).flags.ftpPath}}" >> "$GITHUB_OUTPUT"
47
+
48
+ - name: Get Module ID
49
+ id: module_id
50
+ run: echo "module_id=\${{fromJson(steps.set_var.outputs.PACKAGE_JSON).id}}" >> "$GITHUB_OUTPUT"
51
+
52
+ - name: Get Module Title
53
+ id: title
54
+ run: echo "title=\${{fromJson(steps.set_var.outputs.PACKAGE_JSON).title}}" >> "$GITHUB_OUTPUT"
55
+ `;
56
+ }
57
+
58
+ if (data.features.includes("ftp")) {
59
+ mainYml += `
60
+ - name: Put Files into FTP Folder
61
+ env:
62
+ FTP_PASSWORD: \${{ secrets.FTP_PASSWORD }}
63
+ if: \${{ env.FTP_PASSWORD != '' }}
64
+ run: |
65
+ ls
66
+ mkdir _ftp
67
+ cp module.json _ftp/
68
+ cp module.zip _ftp/
69
+ mkdir _ftp/\${{steps.module_id.outputs.module_id}}
70
+ cp module.json _ftp/\${{steps.module_id.outputs.module_id}}/
71
+
72
+ - name: Upload FTP
73
+ uses: sebastianpopp/ftp-action@releases/v2
74
+ env:
75
+ FTP_PASSWORD: \${{ secrets.FTP_PASSWORD }}
76
+ if: \${{ env.FTP_PASSWORD != '' }}
77
+ with:
78
+ host: \${{ secrets.FTP_SERVER }}
79
+ user: \${{ secrets.FTP_USERNAME }}
80
+ password: \${{ env.FTP_PASSWORD }}
81
+ localDir: _ftp
82
+ remoteDir: \${{steps.ftp.outputs.ftp}}
83
+ `;
84
+ }
85
+
86
+ if (data.features.includes("discord")) {
87
+ mainYml += `
88
+ - name: Send Discord Ping
89
+ uses: Ilshidur/action-discord@0.3.2
90
+ env:
91
+ DISCORD_WEBHOOK: \${{ secrets.DISCORD_WEBHOOK }}
92
+ if: \${{ env.DISCORD_WEBHOOK != '' && !github.event.release.prerelease }}
93
+ with:
94
+ args: "\${{steps.title.outputs.title}} has been updated to version \`\${{github.event.release.tag_name}}\`!"
95
+ `;
96
+ }
97
+
98
+ // Create main.yml file
99
+ const workflowDir = `${moduleDir}/.github/workflows`;
100
+ await mkdir(workflowDir, { recursive: true });
101
+ await Bun.write(`${workflowDir}/main.yml`, mainYml);
102
+
103
+ let note = "✅ Installed!";
104
+ note += "\nThe Github workflow is triggered by making a new release. To make a new release go to your repository's Releases page which can be found in the sidebar on the right and press \"Draft a new release.\" Fill in the version number and you're done!"
105
+
106
+ if (data.features.includes("discord"))
107
+ note +=
108
+ "\n - For the Discord integration, make sure to create a DISCORD_WEBHOOK secret with the webhook url.";
109
+ if (data.features.includes("ftp"))
110
+ note += `\n - For the FTP integration, make sure to include the FTP_SERVER, FTP_USERNAME, and FTP_PASSWORD secrets.\n\tThe module JSON also can include a flag stating its subdirectory on the FTP server under ${cyan("flags.ftpPath")}.`;
111
+
112
+ p.note(note, "Github Workflow");
package/dist/bin.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
package/dist/bin.js ADDED
@@ -0,0 +1,283 @@
1
+ #!/usr/bin/env node
2
+ import * as p from "@clack/prompts";
3
+ import { cyan } from "kolorist";
4
+ import { mkdir, cp } from "fs/promises";
5
+ import { packs, systems } from "./options.js";
6
+ import { existsSync, readdirSync, rmSync, statSync } from "fs";
7
+ import { dirname, join } from "path";
8
+ import { fileURLToPath } from "url";
9
+ p.intro(`Creating a new Foundry VTT module...`);
10
+ const __dirname = dirname(fileURLToPath(import.meta.url));
11
+ // Change to script directory so relative paths work
12
+ process.chdir(join(__dirname, ".."));
13
+ let deleteFolder = false;
14
+ const cliArgs = process.argv.slice(2);
15
+ const cliTitle = cliArgs[0];
16
+ const autoId = cliArgs.includes("--auto-id");
17
+ // Grab available templates from dir
18
+ const templates = readdirSync("./templates");
19
+ // Grab addons from addons/dirs
20
+ const addonDirs = readdirSync("./addons").filter((item) => {
21
+ const stat = statSync(`./addons/${item}`);
22
+ return stat.isDirectory();
23
+ });
24
+ const addons = await Promise.all(addonDirs.map(async (dir) => {
25
+ const addonJson = (await Bun.file(`./addons/${dir}/addon.json`).json());
26
+ return {
27
+ ...addonJson,
28
+ id: dir,
29
+ };
30
+ }));
31
+ const data = await p.group({
32
+ template: async () => {
33
+ if (templates.length === 1) {
34
+ return templates[0];
35
+ }
36
+ const template = await p.select({
37
+ message: "Select a template",
38
+ options: templates.map((template) => ({
39
+ label: template,
40
+ value: template,
41
+ })),
42
+ });
43
+ return template;
44
+ },
45
+ title: () => cliTitle
46
+ ? Promise.resolve(cliTitle)
47
+ : p.text({
48
+ message: "Module Title?",
49
+ placeholder: "My New Module",
50
+ defaultValue: "My New Module",
51
+ }),
52
+ id: ({ results }) => {
53
+ const defaultId = results.title
54
+ ?.toLowerCase()
55
+ .replace(/\s+/g, "-")
56
+ .replace(/[^a-z0-9-]/g, "") ?? "my-module";
57
+ return autoId
58
+ ? Promise.resolve(defaultId)
59
+ : p.text({
60
+ message: "Module ID?",
61
+ initialValue: defaultId,
62
+ defaultValue: defaultId,
63
+ placeholder: defaultId,
64
+ });
65
+ },
66
+ exists: async ({ results }) => {
67
+ const exists = existsSync(`./${results.id}`);
68
+ if (exists) {
69
+ const confirm = await p.confirm({
70
+ message: "Folder already exists. Overwrite?",
71
+ initialValue: false,
72
+ });
73
+ if (!confirm) {
74
+ p.cancel("Cancelled due to already existing folder.");
75
+ process.exit(0);
76
+ }
77
+ else {
78
+ deleteFolder = true;
79
+ }
80
+ }
81
+ return Promise.resolve();
82
+ },
83
+ description: () => p.text({ message: "Module Description?", defaultValue: "" }),
84
+ version: () => p.select({
85
+ message: "Foundry Version?",
86
+ initialValue: "13",
87
+ options: [
88
+ // Just V13 and V14
89
+ { label: "V13", value: "13" },
90
+ { label: "V14", value: "14" },
91
+ ],
92
+ }),
93
+ system: () => p.multiselect({
94
+ message: "What System?",
95
+ initialValues: ["dnd5e"],
96
+ options: systems.map((system) => ({
97
+ label: system.id,
98
+ value: system.id,
99
+ })),
100
+ }),
101
+ packs: () => p.multiselect({
102
+ message: "What Packs?",
103
+ required: false,
104
+ initialValues: packs,
105
+ options: packs.map((pack) => ({
106
+ label: pack.label,
107
+ value: pack,
108
+ })),
109
+ }),
110
+ containPacks: ({ results }) => results.packs?.length > 0
111
+ ? p.confirm({
112
+ message: "Put Packs in a Folder?",
113
+ initialValue: true,
114
+ })
115
+ : Promise.resolve(false),
116
+ containPacksFolder: ({ results }) => results.containPacks
117
+ ? p.text({
118
+ message: "Folder Name?",
119
+ placeholder: results.title,
120
+ defaultValue: results.title,
121
+ })
122
+ : Promise.resolve(),
123
+ enabledAddons: () => {
124
+ if (addons.length > 0) {
125
+ return p.multiselect({
126
+ message: "Enable addons?",
127
+ required: false,
128
+ initialValues: addons.filter(x => x.default).map(x => x.id),
129
+ options: addons.map((addon) => ({
130
+ label: `${addon.name} - ${addon.description}`,
131
+ value: addon.id,
132
+ })),
133
+ });
134
+ }
135
+ else {
136
+ return Promise.resolve([]);
137
+ }
138
+ },
139
+ }, { onCancel: () => process.exit(0) });
140
+ function hasPackageJSON(path = data.id) {
141
+ try {
142
+ return existsSync(`${path}/package.json`);
143
+ }
144
+ catch {
145
+ return false;
146
+ }
147
+ }
148
+ await p.tasks([
149
+ {
150
+ title: "[Task] Deleting existing directory",
151
+ enabled: deleteFolder,
152
+ task: async () => {
153
+ if (deleteFolder)
154
+ rmSync(data.id, { recursive: true });
155
+ return "✅ Existing directory deleted";
156
+ },
157
+ },
158
+ {
159
+ title: "[Task] Making directory",
160
+ task: async () => {
161
+ await mkdir(data.id, { recursive: true });
162
+ return `✅ ${data.id} directory created`;
163
+ },
164
+ },
165
+ {
166
+ title: "[Task] Copying template",
167
+ task: async () => {
168
+ await cp(new URL(`../templates/${data.template}`, import.meta.url), data.id, {
169
+ recursive: true,
170
+ });
171
+ return "✅ Template copied";
172
+ },
173
+ },
174
+ {
175
+ title: "[Task] Writing module.json",
176
+ task: async () => {
177
+ const modPath = `${data.id}/module.json`;
178
+ const mod = (await Bun.file(modPath).json());
179
+ // inject user data
180
+ mod.id = data.id;
181
+ mod.title = data.title;
182
+ mod.description = data.description;
183
+ mod.compatibility = {
184
+ minimum: data.version,
185
+ verified: data.version,
186
+ // maximum: data.version + 1,
187
+ };
188
+ mod.relationships.system = data.system.map((system) => systems.find((s) => s.id === system));
189
+ mod.packs = data.packs.flatMap((pack) => data.system.map((system) => ({ ...pack, system })));
190
+ if (data.containPacks) {
191
+ mod.packFolders = [
192
+ {
193
+ name: data.containPacksFolder,
194
+ sorting: "m",
195
+ color: "#00000f",
196
+ packs: data.packs.map((x) => x.name),
197
+ },
198
+ ];
199
+ }
200
+ if (data.system.includes("dnd5e")) {
201
+ mod.flags.dnd5e = {
202
+ sourceBooks: {
203
+ [data.id]: data.title,
204
+ },
205
+ spellLists: [],
206
+ };
207
+ }
208
+ await Bun.write(modPath, JSON.stringify(mod, null, "\t"));
209
+ return "✅ module.json created";
210
+ },
211
+ },
212
+ {
213
+ title: "[Task] Writing README.md",
214
+ task: async () => {
215
+ const readmePath = `${data.id}/README.md`;
216
+ const readme = `# ${data.title}
217
+ ${data.description}
218
+
219
+ ## Installation
220
+
221
+ \`\`\`
222
+ cd ${data.id} ${hasPackageJSON() ? "&& bun install" : "and get to making stuff!"}
223
+ \`\`\`
224
+
225
+ ## Resources
226
+
227
+ ${data.system.includes("dnd5e")
228
+ ? `
229
+ D&D5e Wiki: https://github.com/foundryvtt/dnd5e/wiki
230
+ D&D5e Specific Module Flags: https://github.com/foundryvtt/dnd5e/wiki/Module-Registration`
231
+ : ""}
232
+
233
+ ${data.system.includes("pf2e")
234
+ ? `
235
+ PF2e Wiki: https://github.com/foundryvtt/pf2e/wiki
236
+ `
237
+ : ""}
238
+ `;
239
+ await Bun.write(readmePath, readme);
240
+ return "✅ README.md created";
241
+ },
242
+ },
243
+ ]);
244
+ // Run enabled addons
245
+ if (data.enabledAddons && data.enabledAddons.length > 0) {
246
+ for (const addonId of data.enabledAddons) {
247
+ p.note(`[Addon] Running ${addonId} setup...`);
248
+ const addonProcess = Bun.spawn(["bun", "run", `addons/${addonId}/setup.ts`], {
249
+ stdio: ["inherit", "inherit", "inherit"],
250
+ env: {
251
+ ...process.env,
252
+ MODULE_DIR: data.id,
253
+ ADDON_ID: addonId,
254
+ },
255
+ });
256
+ await addonProcess.exited;
257
+ if (addonProcess.exitCode !== 0) {
258
+ throw new Error(`❗ Addon ${addonId} setup failed`);
259
+ }
260
+ }
261
+ }
262
+ // Check if template has an scripts/onCreate, ask to run it
263
+ const onCreatePath = `${data.id}/scripts/onCreate.ts`;
264
+ if (await Bun.file(onCreatePath).exists()) {
265
+ const runOnCreate = await p.confirm({
266
+ message: `Run onCreate script?`,
267
+ initialValue: true,
268
+ });
269
+ if (runOnCreate) {
270
+ const spin = p.spinner();
271
+ spin.start("[Task] Running onCreate script...");
272
+ const process = Bun.spawn(["bun", "run", "onCreate.ts"], {
273
+ cwd: `${data.id}/scripts`,
274
+ });
275
+ await process.exited;
276
+ if (process.exitCode !== 0) {
277
+ throw new Error(`❗ onCreate script failed`);
278
+ }
279
+ spin.stop("✅ onCreate script completed");
280
+ }
281
+ }
282
+ p.outro(`cd ${cyan(data.id)} ${hasPackageJSON() ? "&& bun install" : "and get to making stuff!"}`);
283
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { packs, systems } from "./options.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ // Main export file for create-fvtt-module
2
+ export { packs, systems } from "./options.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,21 @@
1
+ declare const packs: {
2
+ label: string;
3
+ name: string;
4
+ path: string;
5
+ system: string;
6
+ type: string;
7
+ ownership: {
8
+ PLAYER: string;
9
+ ASSISTANT: string;
10
+ };
11
+ }[];
12
+ declare const systems: {
13
+ id: string;
14
+ type: string;
15
+ manifest: string;
16
+ compatibility: {
17
+ minimum: string;
18
+ };
19
+ }[];
20
+ export { packs, systems };
21
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,66 @@
1
+ const packs = [
2
+ {
3
+ label: "Adventures",
4
+ name: "adventure",
5
+ path: "packs/adventure",
6
+ system: "",
7
+ type: "Adventure",
8
+ ownership: {
9
+ PLAYER: "OBSERVER",
10
+ ASSISTANT: "OBSERVER",
11
+ },
12
+ },
13
+ {
14
+ label: "Items",
15
+ name: "items",
16
+ path: "packs/items",
17
+ system: "",
18
+ type: "Item",
19
+ ownership: {
20
+ PLAYER: "OBSERVER",
21
+ ASSISTANT: "OBSERVER",
22
+ },
23
+ },
24
+ {
25
+ label: "Journals",
26
+ name: "journals",
27
+ path: "packs/journals",
28
+ system: "",
29
+ type: "JournalEntry",
30
+ ownership: {
31
+ PLAYER: "OBSERVER",
32
+ ASSISTANT: "OBSERVER",
33
+ },
34
+ },
35
+ {
36
+ label: "Actors",
37
+ name: "actors",
38
+ path: "packs/actors",
39
+ system: "",
40
+ type: "Actor",
41
+ ownership: {
42
+ PLAYER: "OBSERVER",
43
+ ASSISTANT: "OWNER",
44
+ },
45
+ },
46
+ ];
47
+ const systems = [
48
+ {
49
+ id: "dnd5e",
50
+ type: "system",
51
+ manifest: "https://github.com/foundryvtt/dnd5e/releases/latest/download/system.json",
52
+ compatibility: {
53
+ minimum: "5.2",
54
+ },
55
+ },
56
+ {
57
+ id: "pf2e",
58
+ type: "system",
59
+ manifest: "https://github.com/foundryvtt/pf2e/releases/latest/download/system.json",
60
+ compatibility: {
61
+ minimum: "7.8",
62
+ },
63
+ },
64
+ ];
65
+ export { packs, systems };
66
+ //# sourceMappingURL=options.js.map
@@ -0,0 +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"}