isaacscript 6.0.1 → 6.0.4

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 (66) hide show
  1. package/dist/commands/check/check.js +36 -23
  2. package/dist/commands/check/check.js.map +1 -1
  3. package/dist/commands/check/check.test.js +1 -1
  4. package/dist/commands/check/check.test.js.map +1 -1
  5. package/dist/commands/copy/copy.js +1 -0
  6. package/dist/commands/copy/copy.js.map +1 -1
  7. package/dist/commands/init/checkModSubdirectory.js +4 -3
  8. package/dist/commands/init/checkModSubdirectory.js.map +1 -1
  9. package/dist/commands/init/createProject.js +5 -5
  10. package/dist/commands/init/createProject.js.map +1 -1
  11. package/dist/commands/init/getProjectPath.js +9 -6
  12. package/dist/commands/init/getProjectPath.js.map +1 -1
  13. package/dist/commands/init/init.js +3 -2
  14. package/dist/commands/init/init.js.map +1 -1
  15. package/dist/commands/init/vsCode.js +5 -5
  16. package/dist/commands/init/vsCode.js.map +1 -1
  17. package/dist/commands/monitor/modDirectorySyncer/modDirectorySyncer.js +3 -1
  18. package/dist/commands/monitor/modDirectorySyncer/modDirectorySyncer.js.map +1 -1
  19. package/dist/commands/monitor/monitor.js +1 -0
  20. package/dist/commands/monitor/monitor.js.map +1 -1
  21. package/dist/commands/monitor/notifyGame.js +1 -1
  22. package/dist/commands/monitor/notifyGame.js.map +1 -1
  23. package/dist/commands/monitor/saveDatWriter/saveDatWriter.js +4 -2
  24. package/dist/commands/monitor/saveDatWriter/saveDatWriter.js.map +1 -1
  25. package/dist/commands/monitor/spawnSaveDatWriter.js +1 -0
  26. package/dist/commands/monitor/spawnSaveDatWriter.js.map +1 -1
  27. package/dist/commands/monitor/spawnTSTLWatcher.js +1 -0
  28. package/dist/commands/monitor/spawnTSTLWatcher.js.map +1 -1
  29. package/dist/commands/publish/isaacscriptMod.js +1 -1
  30. package/dist/commands/publish/isaacscriptMod.js.map +1 -1
  31. package/dist/commands/publish/publish.js +8 -7
  32. package/dist/commands/publish/publish.js.map +1 -1
  33. package/dist/commands/publish/validate.js +6 -15
  34. package/dist/commands/publish/validate.js.map +1 -1
  35. package/dist/common.js +5 -1
  36. package/dist/common.js.map +1 -1
  37. package/dist/customStage.js +14 -14
  38. package/dist/customStage.js.map +1 -1
  39. package/dist/enums/copied/DoorSlotFlag.js +1 -0
  40. package/dist/enums/copied/DoorSlotFlag.js.map +1 -1
  41. package/dist/enums/copied/RoomShape.js +3 -0
  42. package/dist/enums/copied/RoomShape.js.map +1 -1
  43. package/dist/exec.js +9 -3
  44. package/dist/exec.js.map +1 -1
  45. package/dist/git.js +3 -3
  46. package/dist/git.js.map +1 -1
  47. package/dist/parseArgs.js +1 -0
  48. package/dist/parseArgs.js.map +1 -1
  49. package/dist/prompt.js +2 -2
  50. package/dist/prompt.js.map +1 -1
  51. package/dist/tsconfig.js +25 -25
  52. package/dist/tsconfig.js.map +1 -1
  53. package/dist/validateMod.js +8 -6
  54. package/dist/validateMod.js.map +1 -1
  55. package/file-templates/dynamic/Node.gitignore +4 -2
  56. package/file-templates/dynamic/package.json +1 -0
  57. package/file-templates/static/.vscode/extensions.json +1 -1
  58. package/file-templates/static/.vscode/settings.json +64 -12
  59. package/file-templates/static/prettier.config.mjs +6 -6
  60. package/file-templates/static/scripts/lint.ts +32 -36
  61. package/file-templates/static/scripts/tsconfig.json +4 -0
  62. package/package.json +13 -13
  63. package/plugins/addCrashDebugStatements.cjs +1 -1
  64. package/plugins/addCrashDebugStatements.ts +1 -1
  65. package/plugins/package.json +7 -0
  66. package/plugins/tsconfig.json +5 -2
package/dist/tsconfig.js CHANGED
@@ -1,32 +1,9 @@
1
1
  import { Ajv } from "ajv";
2
2
  import chalk from "chalk";
3
- import { assertObject, isObject } from "complete-common";
3
+ import { assertObject, isArray, isObject } from "complete-common";
4
4
  import { fatalError, getJSONC } from "complete-node";
5
5
  import { ISAACSCRIPT_SCHEMA_PATH, PROJECT_NAME, TSCONFIG_JSON, TSCONFIG_JSON_PATH, } from "./constants.js";
6
6
  const ADVICE = `Try copying the "${TSCONFIG_JSON}" from a brand new ${PROJECT_NAME} project.`;
7
- const isaacScriptSchema = await getJSONC(ISAACSCRIPT_SCHEMA_PATH);
8
- assertObject(isaacScriptSchema, `The IsaacScript schema was not an object: ${ISAACSCRIPT_SCHEMA_PATH}`);
9
- const ajv = new Ajv();
10
- const schemaValidate = ajv.compile(isaacScriptSchema);
11
- async function getTSConfigJSON() {
12
- const tsconfig = await getJSONC(TSCONFIG_JSON_PATH);
13
- assertObject(tsconfig, `The TSConfig was not an object: ${TSCONFIG_JSON_PATH}`);
14
- return tsconfig;
15
- }
16
- async function getIsaacScriptSection() {
17
- const tsConfig = await getTSConfigJSON();
18
- // We allow different kinds of casing for the field name.
19
- for (const fieldName of ["isaacscript", "isaacScript", "IsaacScript"]) {
20
- const field = tsConfig[fieldName];
21
- if (field !== undefined) {
22
- if (!isObject(field)) {
23
- fatalError(`Your "${chalk.green(TSCONFIG_JSON_PATH)}" file has a non-object value for the "${fieldName}" field, which is surely a mistake. ${ADVICE}`);
24
- }
25
- return field;
26
- }
27
- }
28
- return undefined;
29
- }
30
7
  /**
31
8
  * Parses the "tsconfig.json" file and returns the "customStages" section. If the section does not
32
9
  * exist, returns an empty array.
@@ -38,6 +15,10 @@ export async function getCustomStagesFromTSConfig() {
38
15
  if (isaacScriptSection === undefined) {
39
16
  return [];
40
17
  }
18
+ const isaacScriptSchema = await getJSONC(ISAACSCRIPT_SCHEMA_PATH);
19
+ assertObject(isaacScriptSchema, `The IsaacScript schema was not an object: ${ISAACSCRIPT_SCHEMA_PATH}`);
20
+ const ajv = new Ajv();
21
+ const schemaValidate = ajv.compile(isaacScriptSchema);
41
22
  const valid = schemaValidate(isaacScriptSection);
42
23
  if (!valid) {
43
24
  console.error('Your "isaacscript" section in the "tsconfig.json" file has the following errors:');
@@ -50,7 +31,7 @@ export async function getCustomStagesFromTSConfig() {
50
31
  return [];
51
32
  }
52
33
  // The type of "customStages" should be validated by Ajv, but check again just in case.
53
- if (!Array.isArray(customStages)) {
34
+ if (!isArray(customStages)) {
54
35
  fatalError(`Failed to parse the "customStages" field, since it was not an array. ${ADVICE}.`);
55
36
  }
56
37
  // Perform some extra validation that can't be automatically done by Ajv.
@@ -79,4 +60,23 @@ export async function getCustomStagesFromTSConfig() {
79
60
  }
80
61
  return customStages;
81
62
  }
63
+ async function getIsaacScriptSection() {
64
+ const tsConfig = await getTSConfigJSON();
65
+ // We allow different kinds of casing for the field name.
66
+ for (const fieldName of ["isaacscript", "isaacScript", "IsaacScript"]) {
67
+ const field = tsConfig[fieldName];
68
+ if (field !== undefined) {
69
+ if (!isObject(field)) {
70
+ fatalError(`Your "${chalk.green(TSCONFIG_JSON_PATH)}" file has a non-object value for the "${fieldName}" field, which is surely a mistake. ${ADVICE}`);
71
+ }
72
+ return field;
73
+ }
74
+ }
75
+ return undefined;
76
+ }
77
+ async function getTSConfigJSON() {
78
+ const tsconfig = await getJSONC(TSCONFIG_JSON_PATH);
79
+ assertObject(tsconfig, `The TSConfig was not an object: ${TSCONFIG_JSON_PATH}`);
80
+ return tsconfig;
81
+ }
82
82
  //# sourceMappingURL=tsconfig.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tsconfig.js","sourceRoot":"","sources":["../src/tsconfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tsconfig.js","sourceRoot":"","sources":["../src/tsconfig.ts"],"names":[],"mappings":"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"}
@@ -74,16 +74,18 @@ export async function validatePackageJSONDependencies() {
74
74
  const devDependencies = (await getPackageJSONDependencies(packageJSON, "devDependencies")) ?? {};
75
75
  const devDependenciesArray = Object.keys(devDependencies);
76
76
  for (const devDependency of REQUIRED_PACKAGE_JSON_DEV_DEPENDENCIES) {
77
- if (dependenciesArray.includes(devDependency)) {
78
- const addDevCommand = getPackageManagerAddDevCommand(packageManager, devDependency);
79
- fatalError(`The "${devDependency}" dependency is located in the "dependencies" object instead of the "devDependencies" object in the "${packageJSONPath}" file. You can fix this with the following command:\n${chalk.green(addDevCommand)}`);
77
+ if (!dependenciesArray.includes(devDependency)) {
78
+ continue;
80
79
  }
80
+ const command = getPackageManagerAddDevCommand(packageManager, devDependency);
81
+ fatalError(`The "${devDependency}" dependency is located in the "dependencies" object instead of the "devDependencies" object in the "${packageJSONPath}" file. You can fix this with the following command:\n${chalk.green(command)}`);
81
82
  }
82
83
  for (const devDependency of REQUIRED_PACKAGE_JSON_DEV_DEPENDENCIES) {
83
- if (!devDependenciesArray.includes(devDependency)) {
84
- const addDevCommand = getPackageManagerAddDevCommand(packageManager, devDependency);
85
- fatalError(`IsaacScript projects require a "devDependencies" entry of "${devDependency}" in the "${packageJSONPath}" file. You can add it with the following command:\n${chalk.green(addDevCommand)}`);
84
+ if (devDependenciesArray.includes(devDependency)) {
85
+ continue;
86
86
  }
87
+ const command = getPackageManagerAddDevCommand(packageManager, devDependency);
88
+ fatalError(`IsaacScript projects require a "devDependencies" entry of "${devDependency}" in the "${packageJSONPath}" file. You can add it with the following command:\n${chalk.green(command)}`);
87
89
  }
88
90
  }
89
91
  export async function validateDepsInstalled(isaacScriptCommonDev, verbose) {
@@ -1 +1 @@
1
- {"version":3,"file":"validateMod.js","sourceRoot":"","sources":["../src/validateMod.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validateMod.js","sourceRoot":"","sources":["../src/validateMod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,UAAU,EACV,WAAW,EACX,cAAc,EACd,0BAA0B,EAC1B,8BAA8B,EAC9B,+BAA+B,EAC/B,WAAW,EACX,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,uCAAuC,EAAE,MAAM,qBAAqB,CAAC;AAE9E;;;;GAIG;AACH,MAAM,sCAAsC,GAAG;IAC7C,aAAa;IACb,wCAAwC;IACxC,yCAAyC;IACzC,4CAA4C;IAC5C,YAAY;IACZ,mBAAmB;CACX,CAAC;AAEX,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,4BAA4B;IAChD,MAAM,yBAAyB,GAAG,MAAM,4BAA4B,CAAC,GAAG,CAAC,CAAC;IAC1E,IAAI,yBAAyB,KAAK,SAAS,EAAE,CAAC;QAC5C,MAAM,cAAc,CAAC,yBAAyB,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,aAAqB;IAErB,QAAQ;IACR,KAAK,MAAM,QAAQ,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QACpD,4CAA4C;QAC5C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,KAAK,MAAM,gBAAgB,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;QACpE,4CAA4C;QAC5C,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,CAAC;QACtD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,gBAAgB,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,CAAC;QACC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,QAAgB;IAC5C,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;IACjD,OAAO,CAAC,KAAK,CACX,mDAAmD,KAAK,CAAC,KAAK,CAC5D,GAAG,CACJ,eAAe,YAAY,eAAe,QAAQ,KAAK,IAAI,mBAAmB,CAChF,CAAC;IACF,OAAO,CAAC,KAAK,CACX,gCAAgC,YAAY,kBAAkB,KAAK,CAAC,KAAK,CACvE,sBAAsB,CACvB,IAAI,CACN,CAAC;IACF,OAAO,CAAC,KAAK,CACX,2DAA2D,YAAY,WAAW,CACnF,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B;IACnD,MAAM,cAAc,GAAG,MAAM,uCAAuC,EAAE,CAAC;IACvE,MAAM,eAAe,GAAG,MAAM,WAAW,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,eAAe,CAAC,CAAC;IAC1D,MAAM,YAAY,GAChB,CAAC,MAAM,0BAA0B,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC;IACxE,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAEpD,MAAM,eAAe,GACnB,CAAC,MAAM,0BAA0B,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3E,MAAM,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAE1D,KAAK,MAAM,aAAa,IAAI,sCAAsC,EAAE,CAAC;QACnE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YAC/C,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,8BAA8B,CAC5C,cAAc,EACd,aAAa,CACd,CAAC;QACF,UAAU,CACR,QAAQ,aAAa,wGAAwG,eAAe,yDAAyD,KAAK,CAAC,KAAK,CAC9M,OAAO,CACR,EAAE,CACJ,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,aAAa,IAAI,sCAAsC,EAAE,CAAC;QACnE,IAAI,oBAAoB,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACjD,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,8BAA8B,CAC5C,cAAc,EACd,aAAa,CACd,CAAC;QACF,UAAU,CACR,8DAA8D,aAAa,aAAa,eAAe,uDAAuD,KAAK,CAAC,KAAK,CACvK,OAAO,CACR,EAAE,CACJ,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,oBAAyC,EACzC,OAAgB;IAEhB,+CAA+C;IAC/C,IAAI,oBAAoB,KAAK,IAAI,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,uCAAuC,EAAE,CAAC;IACvE,MAAM,OAAO,GAAG,+BAA+B,CAAC,cAAc,CAAC,CAAC;IAEhE,OAAO,CAAC,GAAG,CACT,YAAY,OAAO,sEAAsE,CAC1F,CAAC;IAEF,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC"}
@@ -92,9 +92,8 @@ dist
92
92
  # vuepress build output
93
93
  .vuepress/dist
94
94
 
95
- # vuepress v2.x temp and cache directory
95
+ # vuepress v2.x temp directory
96
96
  .temp
97
- .cache
98
97
 
99
98
  # Sveltekit cache directory
100
99
  .svelte-kit/
@@ -126,6 +125,9 @@ dist
126
125
  # Stores VSCode versions used for testing VSCode extensions
127
126
  .vscode-test
128
127
 
128
+ # pnpm
129
+ .pnpm-store
130
+
129
131
  # yarn v3
130
132
  .pnp.*
131
133
  .yarn/*
@@ -24,6 +24,7 @@
24
24
  "isaacscript-common": "0.0.1"
25
25
  },
26
26
  "devDependencies": {
27
+ "complete-node": "0.0.1",
27
28
  "isaacscript": "0.0.1",
28
29
  "isaacscript-lint": "0.0.1",
29
30
  "typescript": "0.0.1",
@@ -2,8 +2,8 @@
2
2
  // repository: https://go.microsoft.com/fwlink/?LinkId=827846
3
3
  {
4
4
  "recommendations": [
5
- "esbenp.prettier-vscode", // The TypeScript formatter
6
5
  "dbaeumer.vscode-eslint", // The TypeScript linter
6
+ "esbenp.prettier-vscode", // The TypeScript formatter
7
7
  "streetsidesoftware.code-spell-checker", // A spell-checker extension based on CSpell
8
8
  "typescript-to-lua.vscode-typescript-to-lua", // The TypeScriptToLua extension
9
9
  "redhat.vscode-xml", // The XML language server
@@ -43,34 +43,86 @@
43
43
  // Use Prettier to format "cspell.config.jsonc".
44
44
  "cSpell.autoFormatConfigFile": true,
45
45
 
46
+ // Change all ESLint errors to have yellow squigglies instead of red squigglies.
47
+ // https://www.joshuakgoldberg.com/blog/if-i-wrote-a-linter-part-2-developer-experience/#only-errors
48
+ "eslint.rules.customizations": [{ "rule": "*", "severity": "warn" }],
49
+
46
50
  // -----------------
47
51
  // Language settings
48
52
  // -----------------
49
53
 
50
- // By default, VSCode will not automatically fill-in function arguments.
51
- "javascript.suggest.completeFunctionCalls": true,
52
- "typescript.suggest.completeFunctionCalls": true,
54
+ // By default, Visual Studio Code will not automatically fill-in function arguments.
55
+ "js/ts.suggest.completeFunctionCalls": true,
53
56
 
54
- // By default, VSCode will prefer non-relative paths for deeply nested files.
55
- "javascript.preferences.importModuleSpecifier": "project-relative",
56
- "typescript.preferences.importModuleSpecifier": "project-relative",
57
+ // By default, Visual Studio Code will prefer non-relative paths for deeply nested files.
58
+ "js/ts.preferences.importModuleSpecifier": "project-relative",
57
59
 
58
- // By default, VSCode will not add `import type` automatically.
59
- "typescript.preferences.preferTypeOnlyAutoImports": true,
60
+ // By default, Visual Studio Code will not add `import type` automatically.
61
+ "js/ts.preferences.preferTypeOnlyAutoImports": true,
60
62
 
61
63
  // Show TypeScript errors for files that don't happen to be currently open, which makes TypeScript
62
64
  // work similar to other compiled languages like Golang or Rust.
63
- "typescript.tsserver.experimental.enableProjectDiagnostics": true,
65
+ "js/ts.tsserver.experimental.enableProjectDiagnostics": true,
64
66
 
65
- // Automatically run the formatter when certain files are saved.
66
- "[javascript][typescript][javascriptreact][typescriptreact]": {
67
+ // Automatically run the formatter when certain files are saved. We intentionally do not group
68
+ // languages together because of this bug: https://github.com/microsoft/vscode/issues/168411
69
+ "[javascript]": {
70
+ "editor.codeActionsOnSave": {
71
+ "source.fixAll.eslint": "explicit",
72
+ },
73
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
74
+ "editor.formatOnSave": true,
75
+ },
76
+ "[typescript]": {
77
+ "editor.codeActionsOnSave": {
78
+ "source.fixAll.eslint": "explicit",
79
+ },
80
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
81
+ "editor.formatOnSave": true,
82
+ },
83
+ "[javascriptreact]": {
84
+ "editor.codeActionsOnSave": {
85
+ "source.fixAll.eslint": "explicit",
86
+ },
87
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
88
+ "editor.formatOnSave": true,
89
+ },
90
+ "[typescriptreact]": {
67
91
  "editor.codeActionsOnSave": {
68
92
  "source.fixAll.eslint": "explicit",
69
93
  },
70
94
  "editor.defaultFormatter": "esbenp.prettier-vscode",
71
95
  "editor.formatOnSave": true,
72
96
  },
73
- "[css][html][json][jsonc][markdown][postcss][xml][yaml]": {
97
+ "[css]": {
98
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
99
+ "editor.formatOnSave": true,
100
+ },
101
+ "[html]": {
102
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
103
+ "editor.formatOnSave": true,
104
+ },
105
+ "[json]": {
106
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
107
+ "editor.formatOnSave": true,
108
+ },
109
+ "[jsonc]": {
110
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
111
+ "editor.formatOnSave": true,
112
+ },
113
+ "[markdown]": {
114
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
115
+ "editor.formatOnSave": true,
116
+ },
117
+ "[postcss]": {
118
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
119
+ "editor.formatOnSave": true,
120
+ },
121
+ "[xml]": {
122
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
123
+ "editor.formatOnSave": true,
124
+ },
125
+ "[yaml]": {
74
126
  "editor.defaultFormatter": "esbenp.prettier-vscode",
75
127
  "editor.formatOnSave": true,
76
128
  },
@@ -5,12 +5,6 @@
5
5
 
6
6
  /** @type {import("prettier").Config} */
7
7
  const config = {
8
- plugins: [
9
- "prettier-plugin-organize-imports", // Prettier does not format imports by default.
10
- "prettier-plugin-packagejson", // Prettier does not format "package.json" by default.
11
- "@prettier/plugin-xml", // Prettier does not format XML files by default.
12
- ],
13
-
14
8
  overrides: [
15
9
  // Allow proper formatting of JSONC files that have JSON file extensions.
16
10
  {
@@ -36,6 +30,12 @@ const config = {
36
30
  },
37
31
  ],
38
32
 
33
+ plugins: [
34
+ "prettier-plugin-organize-imports", // Prettier does not format imports by default.
35
+ "prettier-plugin-packagejson", // Prettier does not format "package.json" by default.
36
+ "@prettier/plugin-xml", // Prettier does not format XML files by default.
37
+ ],
38
+
39
39
  // We break from the default Prettier config for only a single option: operator position. There
40
40
  // are no known arguments for placing operators at the end of the line, as outlined in this
41
41
  // thread: https://github.com/prettier/prettier/issues/3806
@@ -1,36 +1,32 @@
1
- import { $, commandExists, lintScript } from "complete-node"; // eslint-disable-line import-x/no-extraneous-dependencies
2
-
3
- await lintScript(import.meta.dirname, async () => {
4
- const promises = [
5
- // Use TypeScript to type-check the code.
6
- $`tsc --noEmit`,
7
- $`tsc --noEmit --project ./scripts/tsconfig.json`,
8
-
9
- // Use ESLint to lint the TypeScript code.
10
- // - "--max-warnings 0" makes warnings fail, since we set all ESLint errors to warnings.
11
- $`eslint --max-warnings 0 .`,
12
-
13
- // Use Prettier to check formatting.
14
- // - "--log-level=warn" makes it only output errors.
15
- $`prettier --log-level=warn --check .`,
16
-
17
- // Use ts-prune to check for unused exports.
18
- // - "--error" makes it return an error code of 1 if unused exports are found.
19
- $`ts-prune --error`,
20
-
21
- // Use CSpell to spell check every file.
22
- // - "--no-progress" and "--no-summary" make it only output errors.
23
- $`cspell --no-progress --no-summary .`,
24
-
25
- // Check for unused words in the CSpell configuration file.
26
- $`cspell-check-unused-words`,
27
- ];
28
-
29
- const pythonExists = await commandExists("python");
30
- if (pythonExists) {
31
- await $`pip install isaac-xml-validator --upgrade --quiet`;
32
- promises.push($`isaac-xml-validator --quiet`);
33
- }
34
-
35
- await Promise.all(promises);
36
- });
1
+ import { commandExists, lintCommands } from "complete-node";
2
+
3
+ const commands = [
4
+ // Use TypeScript to type-check the code.
5
+ "tsc --noEmit",
6
+ "tsc --noEmit --project ./scripts/tsconfig.json",
7
+
8
+ // Use ESLint to lint the TypeScript code.
9
+ "eslint",
10
+
11
+ // Use Prettier to check formatting.
12
+ // - "--log-level=warn" makes it only output errors.
13
+ "prettier --log-level=warn --check .",
14
+
15
+ // Use ts-prune to check for unused exports.
16
+ // - "--error" makes it return an error code of 1 if unused exports are found.
17
+ "ts-prune --error",
18
+
19
+ // Use CSpell to spell check every file.
20
+ // - "--no-progress" and "--no-summary" make it only output errors.
21
+ "cspell --no-progress --no-summary",
22
+
23
+ // Check for unused words in the CSpell configuration file.
24
+ "cspell-check-unused-words",
25
+ ];
26
+
27
+ const pythonExists = await commandExists("uvx");
28
+ if (pythonExists) {
29
+ commands.push("uvx isaac-xml-validator --quiet");
30
+ }
31
+
32
+ await lintCommands(import.meta.dirname, commands);
@@ -10,5 +10,9 @@
10
10
  "complete-tsconfig/tsconfig.node.json",
11
11
  ],
12
12
 
13
+ "compilerOptions": {
14
+ "rootDir": ".",
15
+ },
16
+
13
17
  "include": ["./**/*.ts"],
14
18
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "isaacscript",
3
- "version": "6.0.1",
3
+ "version": "6.0.4",
4
4
  "description": "A command line tool for managing Isaac mods written in TypeScript.",
5
5
  "keywords": [
6
6
  "isaac",
@@ -37,25 +37,25 @@
37
37
  "build": "tsx ./scripts/build.ts",
38
38
  "lint": "tsx ./scripts/lint.ts",
39
39
  "start": "tsx ./src/main.ts",
40
- "test": "glob \"./src/**/*.test.ts\" --cmd=\"node --import tsx --test --test-reporter spec\""
40
+ "test": "tsx --test \"src/**/*.test.ts\""
41
41
  },
42
42
  "dependencies": {
43
- "@commander-js/extra-typings": "14.0.0",
43
+ "@commander-js/extra-typings": "15.0.0",
44
44
  "@zamiell/sync-directory": "6.0.5",
45
- "ajv": "8.17.1",
46
- "chalk": "5.6.2",
47
- "commander": "14.0.1",
48
- "complete-common": "2.5.0",
49
- "complete-node": "12.0.0",
45
+ "ajv": "8.20.0",
46
+ "chalk": "6.0.0",
47
+ "commander": "15.0.0",
48
+ "complete-common": "2.32.0",
49
+ "complete-node": "18.0.1",
50
50
  "figlet": "1.9.2-beta.0",
51
51
  "jsonc-parser": "3.3.1",
52
- "klaw-sync": "7.0.0",
52
+ "klaw-sync": "8.0.0",
53
53
  "moment": "2.30.1",
54
54
  "prompt": "1.3.0",
55
- "source-map": "0.7.6",
55
+ "source-map": "0.8.0",
56
56
  "source-map-support": "0.5.21",
57
57
  "xml2js": "0.6.2",
58
- "yaml": "2.8.1"
58
+ "yaml": "2.9.0"
59
59
  },
60
60
  "devDependencies": {
61
61
  "@types/figlet": "1.7.0",
@@ -63,8 +63,8 @@
63
63
  "@types/prompt": "1.1.9",
64
64
  "@types/source-map-support": "0.5.10",
65
65
  "@types/xml2js": "0.4.14",
66
- "ts-json-schema-generator": "2.4.0",
67
- "typescript-eslint": "8.43.0"
66
+ "ts-json-schema-generator": "2.9.0",
67
+ "typescript-eslint": "8.69.0"
68
68
  },
69
69
  "peerDependencies": {
70
70
  "typescript": ">= 5.0.0",
@@ -61,6 +61,6 @@ class CustomPrinter extends tstl.LuaPrinter {
61
61
  }
62
62
  }
63
63
  const plugin = {
64
- printer: (program, emitHost, fileName, file) => new CustomPrinter(emitHost, program, fileName).print(file),
64
+ printer: (program, emitHost, fileName, file) => new CustomPrinter(emitHost, program, fileName).print(file), // eslint-disable-line unicorn/no-unreadable-new-expression
65
65
  };
66
66
  exports.default = plugin;
@@ -33,7 +33,7 @@ const plugin: tstl.Plugin = {
33
33
  emitHost: tstl.EmitHost,
34
34
  fileName: string,
35
35
  file: tstl.File,
36
- ) => new CustomPrinter(emitHost, program, fileName).print(file),
36
+ ) => new CustomPrinter(emitHost, program, fileName).print(file), // eslint-disable-line unicorn/no-unreadable-new-expression
37
37
  };
38
38
 
39
39
  export default plugin;
@@ -0,0 +1,7 @@
1
+ {
2
+ "type": "commonjs",
3
+ "peerDependencies": {
4
+ "typescript": ">= 5.0.0",
5
+ "typescript-to-lua": ">= 1.0.0"
6
+ }
7
+ }
@@ -10,12 +10,15 @@
10
10
  ],
11
11
 
12
12
  "compilerOptions": {
13
+ // The plugin source files live directly in this directory instead of the default "src".
14
+ "rootDir": ".",
15
+
13
16
  // We need to overwrite the default compilation output directory of "dist".
14
17
  "outDir": ".",
15
18
 
16
19
  // Plugins need to be in CJS format so that CJS mods can use them.
17
- "module": "CommonJS",
18
- "moduleResolution": "Node10",
20
+ "module": "Node16",
21
+ "moduleResolution": "Node16",
19
22
  },
20
23
 
21
24
  "include": ["*.ts"],