diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 2cb7d2a..0000000 --- a/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -**/*.js diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index a83b081..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "root": true, - "env": { - "browser": true, - "es2020": true - }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended", - "prettier", - "prettier/@typescript-eslint" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 11, - "sourceType": "module" - }, - "plugins": ["unused-imports", "@typescript-eslint", "prettier"], - "rules": { - "prettier/prettier": "error", - "no-unused-vars": "off", - "unused-imports/no-unused-imports-ts": "error", - "@typescript-eslint/no-unused-vars": ["warn", { "argsIgnorePattern": "^_" }], - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/explicit-module-boundary-types": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/ban-ts-comment": "off" - } -} diff --git a/custom.d.ts b/custom.d.ts index f1f7948..0d0511c 100644 --- a/custom.d.ts +++ b/custom.d.ts @@ -3,3 +3,6 @@ declare module '*.glsl' { const content: string; export default content; } + +/** Injected at build time by webpack's DefinePlugin. @internal */ +declare const __VERSION__: string; diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..3f45f24 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,43 @@ +import js from '@eslint/js'; +import tsPlugin from '@typescript-eslint/eslint-plugin'; +import prettier from 'eslint-plugin-prettier'; +import prettierConfig from 'eslint-config-prettier'; +import unusedImports from 'eslint-plugin-unused-imports'; +import globals from 'globals'; + +export default [ + { + ignores: ['lib/**', 'docs/**', 'node_modules/**', '**/*.js', '**/*.mjs', '**/*.cjs'], + }, + js.configs.recommended, + tsPlugin.configs['flat/eslint-recommended'], + ...tsPlugin.configs['flat/recommended'], + prettierConfig, + { + files: ['src/**/*.ts'], + languageOptions: { + ecmaVersion: 2020, + sourceType: 'module', + globals: { + ...globals.browser, + __VERSION__: 'readonly', + }, + }, + plugins: { + 'unused-imports': unusedImports, + prettier, + }, + rules: { + 'prettier/prettier': 'error', + // Newly part of eslint:recommended in v9+; would require ES2022 Error `cause`. + 'preserve-caught-error': 'off', + 'no-unused-vars': 'off', + 'unused-imports/no-unused-imports': 'error', + '@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }], + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/ban-ts-comment': 'off', + }, + }, +]; diff --git a/package.json b/package.json index 97b7bd9..d8f506b 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "scripts": { "start": "rm -rf lib/* && webpack --mode development -w", "build": "rm -rf lib/* docs/* && npx typedoc && webpack --mode production", - "lint": "eslint src/**/*.{js,ts,json} --fix && prettier --write src/**/*.{js,ts,json}" + "lint": "eslint src --fix && prettier --write \"src/**/*.{ts,json}\"" }, "main": "lib/main.js", "types": "lib/src/main.d.ts", @@ -46,26 +46,26 @@ "src/main.ts" ], "dependencies": { - "gl-matrix": "^3.3.0", + "gl-matrix": "^3.4.4", "resize-observer-polyfill": "^1.5.1" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^3.10.1", - "@typescript-eslint/parser": "^3.10.1", - "eslint": "^7.9.0", - "eslint-config-prettier": "^6.11.0", - "eslint-plugin-import": "^2.22.0", - "eslint-plugin-json-format": "^2.0.1", - "eslint-plugin-prettier": "^3.1.4", - "eslint-plugin-unused-imports": "^0.1.3", - "prettier": "^2.1.2", - "raw-loader": "^4.0.1", - "terser-webpack-plugin": "^2.3.8", - "ts-loader": "^8.0.3", - "typedoc": "^0.19.2", - "typedoc-plugin-extras": "^1.1.6", - "typescript": "^3.9.7", - "webpack": "^4.44.2", - "webpack-cli": "^3.3.11" + "@eslint/js": "^10.0.1", + "@typescript-eslint/eslint-plugin": "^8.60.1", + "@typescript-eslint/parser": "^8.60.1", + "eslint": "^10.4.1", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-prettier": "^5.5.6", + "eslint-plugin-unused-imports": "^4.4.1", + "globals": "^17.6.0", + "prettier": "^3.8.3", + "raw-loader": "^4.0.2", + "terser-webpack-plugin": "^5.6.1", + "ts-loader": "^9.6.0", + "typedoc": "^0.28.19", + "typedoc-plugin-extras": "^4.0.1", + "typescript": "^6.0.3", + "webpack": "^5.107.2", + "webpack-cli": "^7.0.3" } } diff --git a/src/drawables/lights/light-drawable.ts b/src/drawables/lights/light-drawable.ts index dfa75aa..2fb0534 100644 --- a/src/drawables/lights/light-drawable.ts +++ b/src/drawables/lights/light-drawable.ts @@ -5,7 +5,11 @@ import { Drawable } from '../../main'; export abstract class LightDrawable extends Drawable { protected lightnessRatio = 1; - constructor(public center: vec2, public color: vec3, public intensity: number) { + constructor( + public center: vec2, + public color: vec3, + public intensity: number + ) { super(); } diff --git a/src/drawables/shapes/circle-factory.ts b/src/drawables/shapes/circle-factory.ts index f611bea..b88b5cd 100644 --- a/src/drawables/shapes/circle-factory.ts +++ b/src/drawables/shapes/circle-factory.ts @@ -7,7 +7,10 @@ import { EmptyDrawable } from '../empty-drawable'; * @category Drawable */ class CircleBase extends EmptyDrawable { - constructor(public center: vec2, public radius: number) { + constructor( + public center: vec2, + public radius: number + ) { super(); } } diff --git a/src/drawables/shapes/colorful-circle.ts b/src/drawables/shapes/colorful-circle.ts index a06465e..1a2e8d9 100644 --- a/src/drawables/shapes/colorful-circle.ts +++ b/src/drawables/shapes/colorful-circle.ts @@ -35,7 +35,11 @@ export class ColorfulCircle extends Drawable { empty: new ColorfulCircle(vec2.create(), 0, 0), }; - constructor(public center: vec2, public radius: number, public colorIndex: number) { + constructor( + public center: vec2, + public radius: number, + public colorIndex: number + ) { super(); } diff --git a/src/drawables/shapes/hexagon-factory.ts b/src/drawables/shapes/hexagon-factory.ts index ba9ecc9..956b896 100644 --- a/src/drawables/shapes/hexagon-factory.ts +++ b/src/drawables/shapes/hexagon-factory.ts @@ -7,7 +7,10 @@ import { EmptyDrawable } from '../empty-drawable'; * @category Drawable */ class HexagonBase extends EmptyDrawable { - constructor(public center: vec2, public radius: number) { + constructor( + public center: vec2, + public radius: number + ) { super(); } } diff --git a/src/drawables/shapes/meta-circle-factory.ts b/src/drawables/shapes/meta-circle-factory.ts index c716fbd..cf8b548 100644 --- a/src/drawables/shapes/meta-circle-factory.ts +++ b/src/drawables/shapes/meta-circle-factory.ts @@ -8,7 +8,10 @@ import { numberToGlslFloat } from '../../helper/number-to-glsl-float'; * @category Drawable */ class MetaCircleBase extends EmptyDrawable { - constructor(public center: vec2, public radius: number) { + constructor( + public center: vec2, + public radius: number + ) { super(); } } diff --git a/src/drawables/shapes/noisy-polygon-factory.ts b/src/drawables/shapes/noisy-polygon-factory.ts index d1ff919..3ca55fa 100644 --- a/src/drawables/shapes/noisy-polygon-factory.ts +++ b/src/drawables/shapes/noisy-polygon-factory.ts @@ -112,9 +112,9 @@ export const NoisyPolygonFactory = ( }, uniformCountMacroName: `NOISY_POLYGON${vertexCount}_COUNT`, shaderCombinationSteps: [0, 1, 2, 3, 8, 16], - empty: (new NoisyPolygon( + empty: new NoisyPolygon( new Array(vertexCount).fill(vec2.create()) - ) as unknown) as Drawable, + ) as unknown as Drawable, }; public randomOffset = 0; diff --git a/src/drawables/shapes/rotated-rectangle-factory.ts b/src/drawables/shapes/rotated-rectangle-factory.ts index c740ece..1672669 100644 --- a/src/drawables/shapes/rotated-rectangle-factory.ts +++ b/src/drawables/shapes/rotated-rectangle-factory.ts @@ -7,7 +7,11 @@ import { EmptyDrawable } from '../empty-drawable'; * @category Drawable */ class RotatedRectangleBase extends EmptyDrawable { - constructor(public center: vec2, public size: vec2, public rotation: number) { + constructor( + public center: vec2, + public size: vec2, + public rotation: number + ) { super(); } } diff --git a/src/graphics/graphics-library/parallel-compiler.ts b/src/graphics/graphics-library/parallel-compiler.ts index 268c039..bb170cb 100644 --- a/src/graphics/graphics-library/parallel-compiler.ts +++ b/src/graphics/graphics-library/parallel-compiler.ts @@ -135,7 +135,7 @@ export class ParallelCompiler { private prettyPrintErrorsIfThereAreAny(shader: ShaderWithSource) { try { this.checkShader(shader); - } catch (e) { + } catch (e: any) { for (const match of e.toString().matchAll(/ERROR: 0:(\d+): (.*)$/gm)) { const line = Number.parseInt(match[1]); const error = match[2]; diff --git a/src/graphics/graphics-library/texture/palette-texture.ts b/src/graphics/graphics-library/texture/palette-texture.ts index f98dcc5..faee8a1 100644 --- a/src/graphics/graphics-library/texture/palette-texture.ts +++ b/src/graphics/graphics-library/texture/palette-texture.ts @@ -6,7 +6,10 @@ import { Texture } from './texture'; export class PaletteTexture extends Texture { public static readonly textureUnitId = 2; - constructor(gl: UniversalRenderingContext, private readonly paletteSize: number) { + constructor( + gl: UniversalRenderingContext, + private readonly paletteSize: number + ) { super(gl, PaletteTexture.textureUnitId); } diff --git a/src/graphics/rendering/renderer/renderer-implementation.ts b/src/graphics/rendering/renderer/renderer-implementation.ts index 872b94a..f5b8480 100644 --- a/src/graphics/rendering/renderer/renderer-implementation.ts +++ b/src/graphics/rendering/renderer/renderer-implementation.ts @@ -230,7 +230,8 @@ export class RendererImplementation implements Renderer { this.stopwatch.start(); } else { this.stopwatch.tryGetResults(); - this.gl.insights.gpuRenderTimeInMilliseconds = this.stopwatch.resultsInMilliseconds; + this.gl.insights.gpuRenderTimeInMilliseconds = + this.stopwatch.resultsInMilliseconds; } } diff --git a/src/main.ts b/src/main.ts index c98086c..1fa29db 100644 --- a/src/main.ts +++ b/src/main.ts @@ -23,6 +23,11 @@ declare global { x: number; y: number; } + + interface Iterable { + x: T; + y: T; + } } applyArrayPlugins(); diff --git a/src/run-animation.ts b/src/run-animation.ts index 98c49d3..47a4b0b 100644 --- a/src/run-animation.ts +++ b/src/run-animation.ts @@ -60,7 +60,7 @@ export async function runAnimation( const deltaTimeCalculator = new DeltaTimeCalculator(); let triggerIsOver: () => void; - const isOver = new Promise((resolve) => (triggerIsOver = resolve)); + const isOver = new Promise((resolve) => (triggerIsOver = resolve)); renderer.setRuntimeSettings(settings); const autoscaler = new FpsQualityAutoscaler(renderer); diff --git a/tsconfig.json b/tsconfig.json index b8c22f0..ad5e2cd 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,9 @@ "declaration": true, "declarationMap": true, "target": "es5", + "ignoreDeprecations": "6.0", "esModuleInterop": true, + "skipLibCheck": true, "strict": true, "downlevelIteration": true, "moduleResolution": "Node", diff --git a/typedoc.json b/typedoc.json index 5de5e0c..c6072da 100644 --- a/typedoc.json +++ b/typedoc.json @@ -1,18 +1,15 @@ { - "mode": "file", "out": "docs", "name": "SDF-2D", - "includeDeclarations": true, + "entryPoints": ["src"], + "entryPointStrategy": "expand", "excludeExternals": true, - "excludeNotExported": true, "excludePrivate": true, - "stripInternal": true, - "media": "media", + "excludeInternal": true, "includeVersion": true, "hideGenerator": true, - "inputFiles": "src", + "readme": "documentation-readme.md", "favicon": "media/favicon.ico", - "ignoreCompilerErrors": true, - "listInvalidSymbolLinks": true, - "readme": "documentation-readme.md" + "skipErrorChecking": true, + "plugin": ["typedoc-plugin-extras"] } diff --git a/webpack.config.js b/webpack.config.js index 2c57e7f..f28bacf 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -38,7 +38,6 @@ module.exports = { usedExports: true, minimizer: [ new TerserJSPlugin({ - sourceMap: true, test: /\.js$/i, }), ],