Commit the functional vite config and dependencies while I have them at a baseline working state
This commit is contained in:
parent
10c1760afe
commit
19a2bdc32f
4 changed files with 3042 additions and 0 deletions
95
eslint.config.mjs
Normal file
95
eslint.config.mjs
Normal file
|
|
@ -0,0 +1,95 @@
|
||||||
|
import globals from "globals";
|
||||||
|
import pluginJs from "@eslint/js";
|
||||||
|
import stylistic from "@stylistic/eslint-plugin";
|
||||||
|
|
||||||
|
export default [
|
||||||
|
// Tell eslint to ignore files that I don't mind being formatted slightly differently
|
||||||
|
{ ignores: [ `scripts/`, `*.dist/` ] },
|
||||||
|
{
|
||||||
|
languageOptions: {
|
||||||
|
globals: globals.browser,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
pluginJs.configs.recommended,
|
||||||
|
// MARK: Foundry Globals
|
||||||
|
{
|
||||||
|
languageOptions: {
|
||||||
|
globals: {
|
||||||
|
CONFIG: `writable`,
|
||||||
|
CONST: `readonly`,
|
||||||
|
game: `readonly`,
|
||||||
|
Handlebars: `readonly`,
|
||||||
|
Hooks: `readonly`,
|
||||||
|
ui: `readonly`,
|
||||||
|
Actor: `readonly`,
|
||||||
|
Item: `readonly`,
|
||||||
|
foundry: `readonly`,
|
||||||
|
ChatMessage: `readonly`,
|
||||||
|
ActiveEffect: `readonly`,
|
||||||
|
Dialog: `readonly`,
|
||||||
|
renderTemplate: `readonly`,
|
||||||
|
TextEditor: `readonly`,
|
||||||
|
fromUuid: `readonly`,
|
||||||
|
Combat: `readonly`,
|
||||||
|
Combatant: `readonly`,
|
||||||
|
canvas: `readonly`,
|
||||||
|
Token: `readonly`,
|
||||||
|
Tour: `readonly`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// MARK: Project Specific
|
||||||
|
{
|
||||||
|
plugins: {
|
||||||
|
"@stylistic": stylistic,
|
||||||
|
},
|
||||||
|
languageOptions: {
|
||||||
|
globals: {
|
||||||
|
__ID__: `readonly`,
|
||||||
|
__VERSION__: `readonly`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
"curly": `error`,
|
||||||
|
"func-names": [`warn`, `as-needed`],
|
||||||
|
"grouped-accessor-pairs": `error`,
|
||||||
|
"no-alert": `error`,
|
||||||
|
"no-empty": [`error`, { allowEmptyCatch: true }],
|
||||||
|
"no-implied-eval": `error`,
|
||||||
|
"no-invalid-this": `error`,
|
||||||
|
"no-lonely-if": `error`,
|
||||||
|
"no-unneeded-ternary": `error`,
|
||||||
|
"no-nested-ternary": `error`,
|
||||||
|
"no-var": `error`,
|
||||||
|
"no-unused-vars": [
|
||||||
|
`error`,
|
||||||
|
{
|
||||||
|
"vars": `local`,
|
||||||
|
"args": `after-used`,
|
||||||
|
"varsIgnorePattern": `^_`,
|
||||||
|
"argsIgnorePattern": `^_`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
"sort-imports": [`warn`, { "ignoreCase": true, "allowSeparatedGroups": true }],
|
||||||
|
"@stylistic/semi": [`warn`, `always`, { "omitLastInOneLineBlock": true }],
|
||||||
|
"@stylistic/no-trailing-spaces": `warn`,
|
||||||
|
"@stylistic/space-before-blocks": [`warn`, `always`],
|
||||||
|
"@stylistic/space-infix-ops": `warn`,
|
||||||
|
"@stylistic/eol-last": `warn`,
|
||||||
|
"@stylistic/operator-linebreak": [`warn`, `before`],
|
||||||
|
"@stylistic/indent": [`warn`, `tab`],
|
||||||
|
"@stylistic/brace-style": [`warn`, `1tbs`, { "allowSingleLine": true }],
|
||||||
|
"@stylistic/quotes": [`warn`, `backtick`, { "avoidEscape": true }],
|
||||||
|
"@stylistic/comma-dangle": [`warn`, { arrays: `always-multiline`, objects: `always-multiline`, imports: `always-multiline`, exports: `always-multiline`, functions: `always-multiline` }],
|
||||||
|
"@stylistic/comma-style": [`warn`, `last`],
|
||||||
|
"@stylistic/dot-location": [`error`, `property`],
|
||||||
|
"@stylistic/no-confusing-arrow": `error`,
|
||||||
|
"@stylistic/no-whitespace-before-property": `error`,
|
||||||
|
"@stylistic/nonblock-statement-body-position": [
|
||||||
|
`error`,
|
||||||
|
`beside`,
|
||||||
|
{ "overrides": { "while": `below` } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
||||||
2836
package-lock.json
generated
Normal file
2836
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
22
package.json
Normal file
22
package.json
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
"name": "stat-tracker",
|
||||||
|
"private": true,
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"lint": "eslint --fix",
|
||||||
|
"lint:nofix": "eslint",
|
||||||
|
"dev": "NODE_ENV=development vite build --mode dev --watch",
|
||||||
|
"dev:once": "NODE_ENV=development vite build --mode dev",
|
||||||
|
"build": "NODE_ENV=production vite build --mode prod"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@stylistic/eslint-plugin": "^4.2.0",
|
||||||
|
"eslint": "^9.25.0",
|
||||||
|
"glob": "^11.0.1",
|
||||||
|
"terser": "^5.39.0",
|
||||||
|
"vite": "^6.3.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"chart.js": "^4.4.9"
|
||||||
|
}
|
||||||
|
}
|
||||||
89
vite.config.js
Normal file
89
vite.config.js
Normal file
|
|
@ -0,0 +1,89 @@
|
||||||
|
/* eslint-disable no-undef */
|
||||||
|
|
||||||
|
import { defineConfig } from "vite";
|
||||||
|
import { glob } from "glob";
|
||||||
|
import path from "path";
|
||||||
|
import { readFileSync } from "fs";
|
||||||
|
|
||||||
|
// MARK: custom plugins
|
||||||
|
function fileMarkerPlugin() {
|
||||||
|
return {
|
||||||
|
name: `file-marker-plugin`,
|
||||||
|
|
||||||
|
transform(code, id) {
|
||||||
|
const basePath = __dirname;
|
||||||
|
const relative = path.relative(basePath, id);
|
||||||
|
|
||||||
|
const comment = `/*! --- ${relative} --- */\n`;
|
||||||
|
return {
|
||||||
|
code: comment + code,
|
||||||
|
map: null,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
function watcher(...globs) {
|
||||||
|
return {
|
||||||
|
buildStart() {
|
||||||
|
for (const item of globs) {
|
||||||
|
glob.sync(path.resolve(item)).forEach((filename) => {
|
||||||
|
this.addWatchFile(filename);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// MARK: config
|
||||||
|
export default defineConfig(({ mode }) => {
|
||||||
|
const isProd = mode === `prod`;
|
||||||
|
|
||||||
|
const plugins = [];
|
||||||
|
|
||||||
|
if (!isProd) {
|
||||||
|
plugins.push(
|
||||||
|
watcher(
|
||||||
|
`./public/module.json`,
|
||||||
|
),
|
||||||
|
fileMarkerPlugin(),
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const manifest = JSON.parse(readFileSync(`./public/module.json`, `utf-8`));
|
||||||
|
|
||||||
|
return {
|
||||||
|
plugins,
|
||||||
|
define: {
|
||||||
|
__ID__: JSON.stringify(manifest.id),
|
||||||
|
__VERSION__: JSON.stringify(manifest.version),
|
||||||
|
},
|
||||||
|
mode: isProd ? `production` : `development`,
|
||||||
|
build: {
|
||||||
|
minify: isProd ? `terser` : false,
|
||||||
|
sourcemap: true,
|
||||||
|
rollupOptions: {
|
||||||
|
input: {
|
||||||
|
module: `./module/main.mjs`,
|
||||||
|
// TODO: Figure out how to get handlebars files being used here
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
entryFileNames: `[name].mjs`,
|
||||||
|
format: `esm`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
include: [
|
||||||
|
`module/**`,
|
||||||
|
`public/**`,
|
||||||
|
],
|
||||||
|
// skipWrite: false,
|
||||||
|
// onInvalidate: console.log
|
||||||
|
},
|
||||||
|
outDir: `${mode}.dist`,
|
||||||
|
emptyOutDir: true,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
/* eslint-enable no-undef */
|
||||||
Loading…
Add table
Add a link
Reference in a new issue