From f9f2c33e29e2d08d5996e16cc73633397df2ca5f Mon Sep 17 00:00:00 2001 From: mob Date: Mon, 17 Jan 2022 11:29:24 +0800 Subject: [PATCH] fix all eslint error --- .eslintignore | 3 ++ .vscode/settings.json | 3 +- .vscode/tasks.json | 30 +++++++++++++++++++ global.d.ts | 19 ++++++++---- packages/mondrian/src/container-manager.ts | 12 ++++++-- .../mondrian/src/data-manager/data-manager.ts | 15 ++++++++-- packages/mondrian/src/data-manager/data.ts | 4 +-- packages/mondrian/src/data-manager/stream.ts | 1 - packages/mondrian/src/mondrian.ts | 3 +- .../mondrian/src/player/player-manager.ts | 3 +- packages/mondrian/src/player/producer.ts | 18 ++++++----- packages/mondrian/src/plugin/brush-plugin.ts | 13 +++++--- packages/mondrian/src/plugin/circle-plugin.ts | 7 +---- packages/mondrian/src/plugin/clear-plugin.ts | 9 ++---- packages/mondrian/src/plugin/cursor-plugin.ts | 10 ++++--- packages/mondrian/src/plugin/eraser-plugin.ts | 6 +--- .../mondrian/src/plugin/highlighter-plugin.ts | 9 ++---- .../mondrian/src/plugin/history-plugin.ts | 7 +---- packages/mondrian/src/plugin/pencil-plugin.ts | 16 ++++------ .../mondrian/src/plugin/plugin-manager.ts | 13 +++----- packages/mondrian/src/plugin/plugin.ts | 10 +++---- .../mondrian/src/plugin/rectangle-plugin.ts | 6 +--- packages/mondrian/src/plugin/stroke-plugin.ts | 6 +--- .../mondrian/src/plugin/triangle-plugin.ts | 6 +--- .../mondrian/src/plugin/viewport-plugin.ts | 2 ++ .../mondrian/src/renderer/grapichs-handler.ts | 24 +++++++++++---- packages/mondrian/src/renderer/renderer.ts | 8 +++-- tests/command.spec.ts | 2 +- tests/mondrian-page.ts | 16 ++++++---- tests/tsconfig.json | 2 +- 30 files changed, 164 insertions(+), 119 deletions(-) create mode 100644 .vscode/tasks.json delete mode 100644 packages/mondrian/src/data-manager/stream.ts diff --git a/.eslintignore b/.eslintignore index 2d095f5..ea67784 100644 --- a/.eslintignore +++ b/.eslintignore @@ -5,3 +5,6 @@ dist .eslintrc.js server *.js +out +**/types/**/* +!tests diff --git a/.vscode/settings.json b/.vscode/settings.json index 9803151..386df7d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,6 @@ { "javascript.preferences.importModuleSpecifier": "relative", "typescript.preferences.importModuleSpecifier": "relative", - "yarn.enableTouchbar": true + "eslint.alwaysShowStatus": true, + "eslint.lintTask.enable": true } diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..88aef58 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,30 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "eslint project", + "type": "npm", + "script": "eslint", + "problemMatcher": [ + { + "owner": "eslint", + "fileLocation": ["relative", "${workspaceFolder}"], + "pattern": { + "regexp": "^(.+):\\s(.+)\\((.+)\\)\\sat\\s(.+):(\\d+):(\\d+):$", + "severity": 1, + "message": 2, + "code": 3, + "file": 4, + "line": 5, + "column": 6 + } + } + ], + "options": { + "cwd": "${workspaceFolder}" + } + } + ] +} diff --git a/global.d.ts b/global.d.ts index ba01384..b581c50 100644 --- a/global.d.ts +++ b/global.d.ts @@ -1,27 +1,36 @@ +import { Mondrian } from "mondrian/lib/mondrian"; declare module "*.svg" { const value: string; - export default value; } declare module "*.jpg" { const value: string; - export default value; } declare module "*.png" { - const value: any; + const value: string; export default value; } declare module "*.frag" { const value: string; - export default value; } declare module "*.vert" { const value: string; - export default value; } + +declare global { + interface Window { + mo: Mondrian; + moApp: { + mo: Mondrian; + [key: string]: unknown; + }; + } +} + +export {}; diff --git a/packages/mondrian/src/container-manager.ts b/packages/mondrian/src/container-manager.ts index 5161220..6ffc10a 100644 --- a/packages/mondrian/src/container-manager.ts +++ b/packages/mondrian/src/container-manager.ts @@ -8,7 +8,7 @@ export class MondrianContainerManager extends MondrianModuleBase { */ private _$container: HTMLElement; - private _$panel: HTMLDivElement | undefined; + private _$panel?: HTMLDivElement; constructor(private shared: MondrianShared) { super(); @@ -76,10 +76,16 @@ export class MondrianContainerManager extends MondrianModuleBase { } hidePannel() { - this._$panel!.style.visibility = "hidden"; + if (!this._$panel) { + return; + } + this._$panel.style.visibility = "hidden"; } showPannel() { - this._$panel!.style.visibility = "visible"; + if (!this._$panel) { + return; + } + this._$panel.style.visibility = "visible"; } } diff --git a/packages/mondrian/src/data-manager/data-manager.ts b/packages/mondrian/src/data-manager/data-manager.ts index 83e1d0a..55ea7ed 100644 --- a/packages/mondrian/src/data-manager/data-manager.ts +++ b/packages/mondrian/src/data-manager/data-manager.ts @@ -72,7 +72,10 @@ export class MondrianDataManager extends MondrianModuleBase { } async startRead() { - this.reader = this.downStream!.getReader(); + if (!this.downStream) { + throw new Error("downStream is not initialized"); + } + this.reader = this.downStream.getReader(); // eslint-disable-next-line no-constant-condition while (true) { const { done, value } = await this.reader.read(); @@ -83,7 +86,10 @@ export class MondrianDataManager extends MondrianModuleBase { } async startWrite() { - this.writer = this.upStream!.getWriter(); + if (!this.upStream) { + throw new Error("upStream is not initialized"); + } + this.writer = this.upStream.getWriter(); } private delayTime = 300; @@ -114,7 +120,10 @@ export class MondrianDataManager extends MondrianModuleBase { } async push(datas: IMondrianData[]) { - await this.writer!.write(datas); + if (!this.writer) { + throw new Error("writer is not initialized"); + } + await this.writer.write(datas); } static EVENT_RECOVER_CONSUMED = "recover:consumed"; diff --git a/packages/mondrian/src/data-manager/data.ts b/packages/mondrian/src/data-manager/data.ts index 9733902..937dcc8 100644 --- a/packages/mondrian/src/data-manager/data.ts +++ b/packages/mondrian/src/data-manager/data.ts @@ -46,7 +46,7 @@ export interface IMondrianInteractData extends IMondrianCommonData { export interface IMondrianState { player: IMondrianPlayerState; - [key: string]: any; + [key: string]: string | number | boolean | object; } export interface IMondrianStateData extends IMondrianCommonData { @@ -58,7 +58,7 @@ export interface IMondrianActionData extends IMondrianCommonData { type: MondrianDataType.COMMAND; data: { subType: MondrianActionType; - [key: string]: any; + [key: string]: string | number | boolean | object; }; } diff --git a/packages/mondrian/src/data-manager/stream.ts b/packages/mondrian/src/data-manager/stream.ts deleted file mode 100644 index 75c5a3c..0000000 --- a/packages/mondrian/src/data-manager/stream.ts +++ /dev/null @@ -1 +0,0 @@ -import { IMondrianData } from "."; diff --git a/packages/mondrian/src/mondrian.ts b/packages/mondrian/src/mondrian.ts index 4da1572..7d0bdc2 100644 --- a/packages/mondrian/src/mondrian.ts +++ b/packages/mondrian/src/mondrian.ts @@ -85,8 +85,7 @@ export class Mondrian extends MondrianModuleBase { this.start(); } - // todo debug only - (window as any).mo = this; + window.mo = this; } override async start() { diff --git a/packages/mondrian/src/player/player-manager.ts b/packages/mondrian/src/player/player-manager.ts index 16ba777..6eb110d 100644 --- a/packages/mondrian/src/player/player-manager.ts +++ b/packages/mondrian/src/player/player-manager.ts @@ -78,7 +78,8 @@ export class MondrianPlayerManager extends MondrianModuleBase { this.consumers.set(consumerId, consumer); } - getConsumerByID(id: string) { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + getConsumerByID(_id: string) { console.warn("to be implemented"); } diff --git a/packages/mondrian/src/player/producer.ts b/packages/mondrian/src/player/producer.ts index 71afa20..50312e3 100644 --- a/packages/mondrian/src/player/producer.ts +++ b/packages/mondrian/src/player/producer.ts @@ -1,4 +1,3 @@ -import { Application, Container } from "pixi.js"; import { MondrianShared } from "../shared"; import { IMondrianInteractor, @@ -12,7 +11,7 @@ import { MondrianActionType, IMondrianState, } from "../data-manager"; -import { MondrianPlayer, IMondrianPlayerState } from "./player"; +import { MondrianPlayer } from "./player"; import { MondrianRenderer } from "../renderer/renderer"; export class MondrianProducer @@ -65,7 +64,8 @@ export class MondrianProducer ]); } - onUndo(event: any): void { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onUndo(_event: unknown): void { this.dataManager.push([ { playerID: this.id, @@ -75,7 +75,8 @@ export class MondrianProducer ]); } - onRedo(event: any): void { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onRedo(_event: unknown): void { this.dataManager.push([ { playerID: this.id, @@ -85,7 +86,8 @@ export class MondrianProducer ]); } - onClear(event: any): void { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onClear(_event: unknown): void { this.dataManager.push([ { playerID: this.id, @@ -129,11 +131,13 @@ export class MondrianProducer } } - onClick(event: any): void { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onClick(_event: unknown): void { console.log("implement it"); } - onInput(event: any): void { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onInput(_event: unknown): void { console.log("implement it"); } diff --git a/packages/mondrian/src/plugin/brush-plugin.ts b/packages/mondrian/src/plugin/brush-plugin.ts index f08aaf9..3d1967f 100644 --- a/packages/mondrian/src/plugin/brush-plugin.ts +++ b/packages/mondrian/src/plugin/brush-plugin.ts @@ -1,4 +1,8 @@ -import { IMondrianData, IMondrianStateData } from "../data-manager"; +import { + IMondrianData, + IMondrianInteractData, + IMondrianStateData, +} from "../data-manager"; import { MondrianPlugin, PluginType } from "./plugin"; import { ILineStyleOptions, LINE_CAP, LINE_JOIN } from "@pixi/graphics"; @@ -106,7 +110,7 @@ export class BrushPlugin extends MondrianPlugin { return true; } - override reactDragStart(data: IMondrianData): boolean { + override reactDragStart(data: IMondrianInteractData): boolean { // todo if we should handle isDrawing === ture here? const p = { x: data.data.x, y: data.data.y }; this.isDrawing = true; @@ -116,14 +120,15 @@ export class BrushPlugin extends MondrianPlugin { return true; } - override reactDragMove(data: IMondrianData): boolean { + override reactDragMove(data: IMondrianInteractData): boolean { if (!this.isDrawing) return false; const p = { x: data.data.x, y: data.data.y }; this.currentPos = { ...p }; return true; } - override reactDragEnd(data: IMondrianData): boolean { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + override reactDragEnd(_data: IMondrianInteractData): boolean { if (!this.isDrawing) return false; this.isDrawing = false; this.handler.stop(); diff --git a/packages/mondrian/src/plugin/circle-plugin.ts b/packages/mondrian/src/plugin/circle-plugin.ts index cff3d5f..afd4b0b 100644 --- a/packages/mondrian/src/plugin/circle-plugin.ts +++ b/packages/mondrian/src/plugin/circle-plugin.ts @@ -1,10 +1,8 @@ -import { MondrianUtils } from "../common/utils"; import { IMondrianData, IMondrianStateData, MondrianDataType, } from "../data-manager"; -import { MondrianShared } from "../shared"; import { BrushName } from "./brush-plugin"; import { PluginType } from "./plugin"; import { ShapePlugin } from "./shape-plugin"; @@ -14,10 +12,7 @@ export class CirclePlugin extends ShapePlugin { static override PID = Symbol("circle-plugin"); - static override predicate( - data: IMondrianData | null, - shared?: MondrianShared - ): boolean { + static override predicate(data: IMondrianData | null): boolean { if (data === null) return false; if (data.type === MondrianDataType.SET_STATE) { if (data as IMondrianStateData) { diff --git a/packages/mondrian/src/plugin/clear-plugin.ts b/packages/mondrian/src/plugin/clear-plugin.ts index ff34b49..d558c8a 100644 --- a/packages/mondrian/src/plugin/clear-plugin.ts +++ b/packages/mondrian/src/plugin/clear-plugin.ts @@ -1,8 +1,6 @@ import { BLEND_MODES } from "@pixi/constants"; import { IMondrianData } from "../data-manager"; import { MondrianGraphicsHandler } from "../renderer/grapichs-handler"; -import { MondrianRenderer } from "../renderer/renderer"; -import { MondrianShared } from "../shared"; import { MondrianPlugin, PluginType } from "./plugin"; export class ClearPlugin extends MondrianPlugin { @@ -10,10 +8,7 @@ export class ClearPlugin extends MondrianPlugin { static override PID = Symbol("clear-plugin"); - static override predicate( - data: IMondrianData | null, - shared?: MondrianShared - ): boolean { + static override predicate(data: IMondrianData | null): boolean { if (data === null) { return true; } @@ -24,7 +19,7 @@ export class ClearPlugin extends MondrianPlugin { // todo do have racing issue in this kind of command // todo don't react continuous clear command - override reactClear(event: any): boolean { + override reactClear(): boolean { this.handler = this.renderer.startGraphicsHandler(); this.handler.config({ enableDiscrete: false, diff --git a/packages/mondrian/src/plugin/cursor-plugin.ts b/packages/mondrian/src/plugin/cursor-plugin.ts index ffd06a0..8699735 100644 --- a/packages/mondrian/src/plugin/cursor-plugin.ts +++ b/packages/mondrian/src/plugin/cursor-plugin.ts @@ -1,4 +1,4 @@ -import { IMondrianData } from "../data-manager"; +import { IMondrianData, IMondrianInteractData } from "../data-manager"; import { MondrianRenderer } from "../renderer/renderer"; import { Sprite, Texture } from "pixi.js"; import { MondrianPlugin, PluginType } from "./plugin"; @@ -61,7 +61,7 @@ export class CursorPlugin extends MondrianPlugin { this.triggerHideWhenIdle(); } - override reactDragMove(data: IMondrianData): boolean { + override reactDragMove(data: IMondrianInteractData): boolean { this.cursor.visible = true; this.cursor.x = data.data.x; this.cursor.y = data.data.y - this.cursor.height; @@ -83,7 +83,8 @@ export class CursorPlugin extends MondrianPlugin { }, 1000); } - override reactKeyDown(data: IMondrianData) { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + override reactKeyDown(_data: IMondrianInteractData) { if (this.shared.settings.viewport) { this.cursor.texture = this.cursorDargTexture; return true; @@ -91,7 +92,8 @@ export class CursorPlugin extends MondrianPlugin { return false; } - override reactKeyUp(data: IMondrianData) { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + override reactKeyUp(_data: IMondrianInteractData) { if (this.shared.settings.viewport) { this.cursor.texture = this.cursorDrawTexture; return true; diff --git a/packages/mondrian/src/plugin/eraser-plugin.ts b/packages/mondrian/src/plugin/eraser-plugin.ts index a36fcb3..0d387a9 100644 --- a/packages/mondrian/src/plugin/eraser-plugin.ts +++ b/packages/mondrian/src/plugin/eraser-plugin.ts @@ -4,7 +4,6 @@ import { IMondrianStateData, MondrianDataType, } from "../data-manager"; -import { MondrianShared } from "../shared"; import { BrushName } from "./brush-plugin"; import { PencilBrushPlugin } from "./pencil-plugin"; import { PluginType } from "./plugin"; @@ -14,10 +13,7 @@ export class EraserBrushPlugin extends PencilBrushPlugin { static override PID = Symbol("eraser-plugin"); - static override predicate( - data: IMondrianData | null, - shared?: MondrianShared - ): boolean { + static override predicate(data: IMondrianData | null): boolean { if (data === null) return false; if (data.type === MondrianDataType.SET_STATE) { if (data as IMondrianStateData) { diff --git a/packages/mondrian/src/plugin/highlighter-plugin.ts b/packages/mondrian/src/plugin/highlighter-plugin.ts index 0ecbb15..ea1cf6f 100644 --- a/packages/mondrian/src/plugin/highlighter-plugin.ts +++ b/packages/mondrian/src/plugin/highlighter-plugin.ts @@ -1,9 +1,9 @@ import { IMondrianData, + IMondrianInteractData, IMondrianStateData, MondrianDataType, } from "../data-manager"; -import { MondrianShared } from "../shared"; import { BrushName } from "./brush-plugin"; import { PencilBrushPlugin } from "./pencil-plugin"; import { PluginType } from "./plugin"; @@ -13,10 +13,7 @@ export class HighlighterBrushPlugin extends PencilBrushPlugin { static override PID = Symbol("highlighter-plugin"); - static override predicate( - data: IMondrianData | null, - shared?: MondrianShared - ): boolean { + static override predicate(data: IMondrianData | null): boolean { if (data === null) return false; if (data.type === MondrianDataType.SET_STATE) { if (data as IMondrianStateData) { @@ -28,7 +25,7 @@ export class HighlighterBrushPlugin extends PencilBrushPlugin { return false; } - override reactDragStart(data: IMondrianData): boolean { + override reactDragStart(data: IMondrianInteractData): boolean { if (!super.reactDragStart(data)) return false; this.handler.config({ enableDiscrete: false, diff --git a/packages/mondrian/src/plugin/history-plugin.ts b/packages/mondrian/src/plugin/history-plugin.ts index a7d6ef3..f7bf92e 100644 --- a/packages/mondrian/src/plugin/history-plugin.ts +++ b/packages/mondrian/src/plugin/history-plugin.ts @@ -1,6 +1,4 @@ import { IMondrianData } from "../data-manager"; -import { MondrianRenderer } from "../renderer/renderer"; -import { MondrianShared } from "../shared"; import { MondrianPlugin, PluginType } from "./plugin"; export class HistoryPlugin extends MondrianPlugin { @@ -8,10 +6,7 @@ export class HistoryPlugin extends MondrianPlugin { static override PID = Symbol("history-plugin"); - static override predicate( - data: IMondrianData | null, - shared?: MondrianShared - ): boolean { + static override predicate(data: IMondrianData | null): boolean { if (data === null) { return true; } diff --git a/packages/mondrian/src/plugin/pencil-plugin.ts b/packages/mondrian/src/plugin/pencil-plugin.ts index 8a56ecc..eaf9ba4 100644 --- a/packages/mondrian/src/plugin/pencil-plugin.ts +++ b/packages/mondrian/src/plugin/pencil-plugin.ts @@ -1,14 +1,11 @@ import { IPointData } from "@pixi/math"; -import { ILineStyleOptions } from "pixi.js"; import { MondrianUtils } from "../common/utils"; import { IMondrianData, + IMondrianInteractData, IMondrianStateData, MondrianDataType, } from "../data-manager"; -import { IMondrianPlayerState } from "../player"; -import { MondrianGraphicsHandler } from "../renderer/grapichs-handler"; -import { MondrianShared } from "../shared"; import { BrushName, BrushPlugin } from "./brush-plugin"; import { PluginType } from "./plugin"; @@ -17,10 +14,7 @@ export class PencilBrushPlugin extends BrushPlugin { static override PID = Symbol("pencil-plugin"); - static override predicate( - data: IMondrianData | null, - shared?: MondrianShared - ): boolean { + static override predicate(data: IMondrianData | null): boolean { if (data === null) return false; if (data.type === MondrianDataType.SET_STATE) { if (data as IMondrianStateData) { @@ -34,14 +28,14 @@ export class PencilBrushPlugin extends BrushPlugin { private pointCache: IPointData[] = []; - override reactDragStart(data: IMondrianData): boolean { + override reactDragStart(data: IMondrianInteractData): boolean { if (!super.reactDragStart(data)) return false; const p = { x: data.data.x, y: data.data.y }; this.pointCache = [p]; return true; } - override reactDragMove(data: IMondrianData): boolean { + override reactDragMove(data: IMondrianInteractData): boolean { if (!super.reactDragMove(data)) return false; const p = { x: data.data.x, y: data.data.y }; const l = this.pointCache.length; @@ -58,7 +52,7 @@ export class PencilBrushPlugin extends BrushPlugin { } // todo handle unclosed drag event properly - override reactDragEnd(data: IMondrianData): boolean { + override reactDragEnd(data: IMondrianInteractData): boolean { this.pointCache = []; if (!super.reactDragEnd(data)) return false; return true; diff --git a/packages/mondrian/src/plugin/plugin-manager.ts b/packages/mondrian/src/plugin/plugin-manager.ts index 3ed60eb..e0599e8 100644 --- a/packages/mondrian/src/plugin/plugin-manager.ts +++ b/packages/mondrian/src/plugin/plugin-manager.ts @@ -62,12 +62,10 @@ export class MondrianPluginManager { pluginClassRef.Type === PluginType.ConsumerExcludesive || pluginClassRef.Type === PluginType.ConsumerTemp ) { - if (this._instanceRecordMap[PluginType.ConsumerExcludesive]) { + const record = this._instanceRecordMap[PluginType.ConsumerExcludesive]; + if (record) { const i = this._instanceRecordList.findIndex((instanceRecord) => { - return ( - instanceRecord.classRef === - this._instanceRecordMap[PluginType.ConsumerExcludesive]!.classRef - ); + return instanceRecord.classRef === record.classRef; }); const [removed] = this._instanceRecordList.splice(i, 1); this._instanceRecordMap[PluginType.ConsumerExcludesive] = undefined; @@ -100,10 +98,7 @@ export class MondrianPluginManager { const current = this._instanceRecordMap[PluginType.ConsumerExcludesive]; if (current) { const i = this._instanceRecordList.findIndex((instanceRecord) => { - return ( - instanceRecord.classRef === - this._instanceRecordMap[PluginType.ConsumerExcludesive]!.classRef - ); + return instanceRecord.classRef === current.classRef; }); this._instanceRecordList.splice(i, 1, this._suspendedInstanceRecord); this._instanceRecordMap[PluginType.ConsumerExcludesive] = diff --git a/packages/mondrian/src/plugin/plugin.ts b/packages/mondrian/src/plugin/plugin.ts index f7f08d1..29179fe 100644 --- a/packages/mondrian/src/plugin/plugin.ts +++ b/packages/mondrian/src/plugin/plugin.ts @@ -82,11 +82,11 @@ export class MondrianPlugin return true; } - reactUndo(event: any): boolean { + reactUndo(event: unknown): boolean { return true; } - reactRedo(event: any): boolean { + reactRedo(event: unknown): boolean { return true; } @@ -98,15 +98,15 @@ export class MondrianPlugin return true; } - reactClear(event: any): boolean { + reactClear(event: unknown): boolean { return true; } - reactClick(event: any): boolean { + reactClick(event: unknown): boolean { return true; } - reactInput(event: any): boolean { + reactInput(event: unknown): boolean { return true; } } diff --git a/packages/mondrian/src/plugin/rectangle-plugin.ts b/packages/mondrian/src/plugin/rectangle-plugin.ts index 9491fec..affc187 100644 --- a/packages/mondrian/src/plugin/rectangle-plugin.ts +++ b/packages/mondrian/src/plugin/rectangle-plugin.ts @@ -3,7 +3,6 @@ import { IMondrianStateData, MondrianDataType, } from "../data-manager"; -import { MondrianShared } from "../shared"; import { BrushName } from "./brush-plugin"; import { PluginType } from "./plugin"; import { ShapePlugin } from "./shape-plugin"; @@ -13,10 +12,7 @@ export class RectanglePlugin extends ShapePlugin { static override PID = Symbol("rectangle-plugin"); - static override predicate( - data: IMondrianData | null, - shared?: MondrianShared - ): boolean { + static override predicate(data: IMondrianData | null): boolean { if (data === null) return false; if (data.type === MondrianDataType.SET_STATE) { if (data as IMondrianStateData) { diff --git a/packages/mondrian/src/plugin/stroke-plugin.ts b/packages/mondrian/src/plugin/stroke-plugin.ts index 5ae753b..72eb06f 100644 --- a/packages/mondrian/src/plugin/stroke-plugin.ts +++ b/packages/mondrian/src/plugin/stroke-plugin.ts @@ -3,7 +3,6 @@ import { IMondrianStateData, MondrianDataType, } from "../data-manager"; -import { MondrianShared } from "../shared"; import { BrushName } from "./brush-plugin"; import { PluginType } from "./plugin"; import { ShapePlugin } from "./shape-plugin"; @@ -13,10 +12,7 @@ export class StrokePlugin extends ShapePlugin { static override PID = Symbol("stroke-plugin"); - static override predicate( - data: IMondrianData | null, - shared?: MondrianShared - ): boolean { + static override predicate(data: IMondrianData | null): boolean { if (data === null) return false; if (data.type === MondrianDataType.SET_STATE) { if (data as IMondrianStateData) { diff --git a/packages/mondrian/src/plugin/triangle-plugin.ts b/packages/mondrian/src/plugin/triangle-plugin.ts index 92aee07..d8a238a 100644 --- a/packages/mondrian/src/plugin/triangle-plugin.ts +++ b/packages/mondrian/src/plugin/triangle-plugin.ts @@ -3,7 +3,6 @@ import { IMondrianStateData, MondrianDataType, } from "../data-manager"; -import { MondrianShared } from "../shared"; import { BrushName } from "./brush-plugin"; import { PluginType } from "./plugin"; import { ShapePlugin } from "./shape-plugin"; @@ -13,10 +12,7 @@ export class TrianglePlugin extends ShapePlugin { static override PID = Symbol("triangle-plugin"); - static override predicate( - data: IMondrianData | null, - shared?: MondrianShared - ): boolean { + static override predicate(data: IMondrianData | null): boolean { if (data === null) return false; if (data.type === MondrianDataType.SET_STATE) { if (data as IMondrianStateData) { diff --git a/packages/mondrian/src/plugin/viewport-plugin.ts b/packages/mondrian/src/plugin/viewport-plugin.ts index 16723ed..da86567 100644 --- a/packages/mondrian/src/plugin/viewport-plugin.ts +++ b/packages/mondrian/src/plugin/viewport-plugin.ts @@ -33,11 +33,13 @@ export class ViewportPlugin extends MondrianPlugin { return false; } + // eslint-disable-next-line @typescript-eslint/no-unused-vars override reactKeyDown(data: IMondrianData) { this.renderer.viewport.pause = false; return true; } + // eslint-disable-next-line @typescript-eslint/no-unused-vars override reactKeyUp(data: IMondrianData) { this.renderer.viewport.pause = true; this.manager.restore(); diff --git a/packages/mondrian/src/renderer/grapichs-handler.ts b/packages/mondrian/src/renderer/grapichs-handler.ts index dc4a1ac..3ad052c 100644 --- a/packages/mondrian/src/renderer/grapichs-handler.ts +++ b/packages/mondrian/src/renderer/grapichs-handler.ts @@ -38,9 +38,12 @@ export class MondrianGraphicsHandler { constructor( private renderer: MondrianRenderer, private layer: Container | undefined, - private shared: MondrianShared | undefined, + private shared: MondrianShared, options?: MondrianGraphicsHandlerOptions ) { + if (layer === undefined) { + throw new Error("layer for graphics handler is undefined"); + } this.options = { ...MondrianGraphicsHandler.DefaultOptions, ...(options || {}), @@ -78,15 +81,18 @@ export class MondrianGraphicsHandler { if (this._finished) { throw new Error("Accessing finished handler is forbidden."); } + if (!this.layer) { + throw new Error("layer is not initialized"); + } this._g = new Graphics(); this.c.addChild(this._g); - this.layer!.addChild(this.c); + this.layer.addChild(this.c); this._g.lineStyle(this.options.lineStyle); return this._g; } stop() { - if (this.options.canCacheAsBitmap && !this.shared!.settings.viewport) { + if (this.options.canCacheAsBitmap && !this.shared.settings.viewport) { this.c.children.forEach((g) => { if (!g.cacheAsBitmap) { g.cacheAsBitmapMultisample = MSAA_QUALITY.MEDIUM; @@ -99,21 +105,27 @@ export class MondrianGraphicsHandler { } attach() { - this.layer!.addChild(this.c); + if (!this.layer) { + throw new Error("layer is not initialized"); + } + this.layer.addChild(this.c); } detach() { + if (!this.layer) { + throw new Error("layer is not initialized"); + } if (!this._finished) { console.trace(); throw new Error("Detaching unfinished handler is forbidden."); } - return this.layer!.removeChild(this.c); + return this.layer.removeChild(this.c); } destroy() { this._g = undefined; - this.layer = undefined; this._c = undefined; + this.layer = undefined; } get finished() { diff --git a/packages/mondrian/src/renderer/renderer.ts b/packages/mondrian/src/renderer/renderer.ts index 7cf9117..8a8e775 100644 --- a/packages/mondrian/src/renderer/renderer.ts +++ b/packages/mondrian/src/renderer/renderer.ts @@ -36,6 +36,7 @@ const DefaultDynamicLevel = 20; * shift dynamic cache to static layer and take snapshot in * low freqency */ +// eslint-disable-next-line @typescript-eslint/no-unused-vars const HighCapactityDefaultDynamicLevel = 40; type Trash = @@ -421,7 +422,8 @@ export class MondrianRenderer extends MondrianModuleBase { * normal prioriry * @returns */ - private main = (dt: number) => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + private main = (_dt: number) => { this.shiftGrapicsHandlersToStatic(); // nothing in static layer, no need to update texture @@ -533,12 +535,14 @@ export class MondrianRenderer extends MondrianModuleBase { ) { this.textureMem = tmpMemSize; this.graphicsCount = tmpGraphicsCount; - this.$panel!.innerHTML = ` + if (this.$panel) { + this.$panel.innerHTML = `
tx mem: ${this.textureMem.toFixed( 2 )} MB |
g count: ${tmpGraphicsCount}
`; + } } this.__debug_checkUnfinishedHandler(); }; diff --git a/tests/command.spec.ts b/tests/command.spec.ts index 34c5373..56bc14c 100644 --- a/tests/command.spec.ts +++ b/tests/command.spec.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test"; +import { test } from "@playwright/test"; import { MondrianPage } from "./mondrian-page"; test.describe("command", () => { diff --git a/tests/mondrian-page.ts b/tests/mondrian-page.ts index 75914ac..1c7a763 100644 --- a/tests/mondrian-page.ts +++ b/tests/mondrian-page.ts @@ -1,4 +1,4 @@ -import { expect, Locator, Page, TestInfo, JSHandle } from "@playwright/test"; +import { expect, Locator, Page, TestInfo } from "@playwright/test"; const TEST_URL = "http://localhost:8080"; const API_URL = "http://localhost:3000"; @@ -41,12 +41,14 @@ export class MondrianPage { async getMondrianHandle() { return await this.page.evaluateHandle(() => { - return (window as any).mo; + return window.mo; }); } async getDynamicLayerLength() { const mo = await this.getMondrianHandle(); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error return await mo.evaluate((mo) => mo.renderer.dynamicLayer.children.length); } @@ -88,13 +90,15 @@ export class MondrianPage { async getWebGLVersion() { return await this.page.evaluate(() => { - return (window as any).mo.renderer.pixiApp.renderer.context.webGLVersion; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + return window.mo.renderer.pixiApp.renderer.context.webGLVersion; }); } async isRunning() { return await this.page.evaluate(() => { - return (window as any).mo.running; + return window.mo.running; }); } @@ -104,7 +108,7 @@ export class MondrianPage { */ async showUI() { return await this.page.evaluate(() => { - return (window as any).moApp.showUI(); + return (window.moApp.showUI as () => void)(); }); } @@ -115,7 +119,7 @@ export class MondrianPage { */ async hideUI() { return await this.page.evaluate(() => { - return (window as any).moApp.hideUI(); + return (window.moApp.hideUI as () => void)(); }); } diff --git a/tests/tsconfig.json b/tests/tsconfig.json index 96b73f0..f6f2784 100644 --- a/tests/tsconfig.json +++ b/tests/tsconfig.json @@ -14,6 +14,6 @@ "mondrian/lib/*": ["../packages/mondrian/src/*"] } }, - "include": ["**/*.spec.js", "**/*.ts", "index.d.ts"], + "include": ["**/*.spec.js", "**/*.ts", "index.d.ts", "../global.d.ts"], "exclude": [] }