From b145e01b146db4a5a52a91ce29050d9c7e4bc96c Mon Sep 17 00:00:00 2001 From: Andras Csizmadia Date: Fri, 11 Oct 2024 16:09:30 +0200 Subject: [PATCH] Improve error handling --- README.md | 2 +- package-lock.json | 64 +++++++++++++-------------- package.json | 2 +- src/phaser/core/animation_manager.js | 4 +- src/phaser/core/game.js | 8 +--- src/phaser/core/sound_manager.js | 3 +- src/phaser/display/canvas/renderer.js | 2 +- src/phaser/display/display_object.js | 2 +- src/phaser/display/webgl/renderer.js | 2 +- src/phaser/display/webgl/util.js | 10 +++-- src/phaser/geom/util/point.js | 2 +- 11 files changed, 49 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index 28ce5f5..bff8e38 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # @vpmedia/phaser -[![npm version](https://badge.fury.io/js/@vpmedia%2Fphaser.svg?v=1.45.0)](https://badge.fury.io/js/@vpmedia%2Fphaser) +[![npm version](https://badge.fury.io/js/@vpmedia%2Fphaser.svg?v=1.46.0)](https://badge.fury.io/js/@vpmedia%2Fphaser) [![Node.js CI](https://github.com/vpmedia/phaser/actions/workflows/ci.yml/badge.svg)](https://github.com/vpmedia/phaser/actions/workflows/ci.yml) @vpmedia/phaser is the modern ECMAScript port of the popular Phaser game engine v2.6.2. diff --git a/package-lock.json b/package-lock.json index 7ce48b0..5ea940c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@vpmedia/phaser", - "version": "1.45.0", + "version": "1.46.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@vpmedia/phaser", - "version": "1.45.0", + "version": "1.46.0", "license": "MIT", "devDependencies": { "@eslint/js": "^9.12.0", @@ -52,9 +52,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.7.tgz", - "integrity": "sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.8.tgz", + "integrity": "sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==", "dev": true, "license": "MIT", "engines": { @@ -62,9 +62,9 @@ } }, "node_modules/@babel/core": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.7.tgz", - "integrity": "sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.8.tgz", + "integrity": "sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==", "dev": true, "license": "MIT", "dependencies": { @@ -74,10 +74,10 @@ "@babel/helper-compilation-targets": "^7.25.7", "@babel/helper-module-transforms": "^7.25.7", "@babel/helpers": "^7.25.7", - "@babel/parser": "^7.25.7", + "@babel/parser": "^7.25.8", "@babel/template": "^7.25.7", "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7", + "@babel/types": "^7.25.8", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -341,13 +341,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.7.tgz", - "integrity": "sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz", + "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.25.7" + "@babel/types": "^7.25.8" }, "bin": { "parser": "bin/babel-parser.js" @@ -640,9 +640,9 @@ } }, "node_modules/@babel/types": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.7.tgz", - "integrity": "sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz", + "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==", "dev": true, "license": "MIT", "dependencies": { @@ -1510,9 +1510,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.7.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.4.tgz", - "integrity": "sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==", + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1963,9 +1963,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001667", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001667.tgz", - "integrity": "sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==", + "version": "1.0.30001668", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001668.tgz", + "integrity": "sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw==", "dev": true, "funding": [ { @@ -2341,9 +2341,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.32", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.32.tgz", - "integrity": "sha512-M+7ph0VGBQqqpTT2YrabjNKSQ2fEl9PVx6AK3N558gDH9NO8O6XN9SXXFWRo9u9PbEg/bWq+tjXQr+eXmxubCw==", + "version": "1.5.36", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.36.tgz", + "integrity": "sha512-HYTX8tKge/VNp6FGO+f/uVDmUkq+cEfcxYhKf15Akc4M5yxt5YmorwlAitKWjWhWQnKcDRBAQKXkhqqXMqcrjw==", "dev": true, "license": "ISC" }, @@ -2817,9 +2817,9 @@ "license": "ISC" }, "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", "dev": true, "license": "MIT", "dependencies": { @@ -5477,9 +5477,9 @@ "license": "MIT" }, "node_modules/synckit": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", - "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", + "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index b2d012f..c762344 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@vpmedia/phaser", - "version": "1.45.0", + "version": "1.46.0", "description": "@vpmedia/phaser is the modern ECMAScript port of the popular Phaser game engine v2.6.2", "author": "Andras Csizmadia (www.vpmedia.hu)", "license": "MIT", diff --git a/src/phaser/core/animation_manager.js b/src/phaser/core/animation_manager.js index 28f3b2e..11346e9 100644 --- a/src/phaser/core/animation_manager.js +++ b/src/phaser/core/animation_manager.js @@ -306,7 +306,7 @@ export class AnimationManager { this.sprite.setFrame(this.currentFrame); } } else { - this.game.exceptionHandler(new Error('Cannot set frame'), { key: value }); + this.game.exceptionHandler(new Error('Cannot set frame'), { 'asset.key': value }); } } @@ -332,7 +332,7 @@ export class AnimationManager { this.sprite.setFrame(this.currentFrame); } } else { - this.game.exceptionHandler(new Error('Cannot set frameName'), { key: value }); + this.game.exceptionHandler(new Error('Cannot set frameName'), { 'asset.key': value }); } } } diff --git a/src/phaser/core/game.js b/src/phaser/core/game.js index 801f91e..ea3d915 100644 --- a/src/phaser/core/game.js +++ b/src/phaser/core/game.js @@ -145,13 +145,7 @@ export class Game { isWebGlReady = true; } catch (e) { isWebGlReady = false; - const tags = { - 'document.readyState': document.readyState, - 'document.hidden': document.hidden, - 'document.visibilityState': document.visibilityState, - 'canvas.width': this.canvas.width, - 'canvas.height': this.canvas.height, - }; + const tags = {}; if (window.PhaserRegistry?.GL_PROGRAM_INFO_LOG) { tags.gl_program_log = window.PhaserRegistry.GL_PROGRAM_INFO_LOG; } diff --git a/src/phaser/core/sound_manager.js b/src/phaser/core/sound_manager.js index f84bede..82491ef 100644 --- a/src/phaser/core/sound_manager.js +++ b/src/phaser/core/sound_manager.js @@ -61,6 +61,7 @@ export class SoundManager { this.context === null || (this.context && this.context.createGain === undefined && this.context.createGainNode === undefined) ) { + this.game.exceptionHandler(new Error('Error creating AudioContext')); this.noAudio = true; return; } @@ -220,7 +221,7 @@ export class SoundManager { this.game.cache.decodedSound(key, buffer); }) .catch((e) => { - this.game.exceptionHandler(e, { key }); + this.game.exceptionHandler(e, { 'asset.key': key }); }); } } diff --git a/src/phaser/display/canvas/renderer.js b/src/phaser/display/canvas/renderer.js index 4bde0bd..822cc01 100644 --- a/src/phaser/display/canvas/renderer.js +++ b/src/phaser/display/canvas/renderer.js @@ -42,7 +42,7 @@ export class CanvasRenderer { this.view = game.canvas; this.context = this.view.getContext('2d', { alpha: this.transparent }); if (!this.context) { - throw new Error('Error creating Canvas 2D context.'); + throw new Error('Error creating Canvas2D context'); } this.refresh = true; this.count = 0; diff --git a/src/phaser/display/display_object.js b/src/phaser/display/display_object.js index 74c1bc9..ea9c52c 100644 --- a/src/phaser/display/display_object.js +++ b/src/phaser/display/display_object.js @@ -111,7 +111,7 @@ export class DisplayObject { const index1 = this.getChildIndex(child); const index2 = this.getChildIndex(child2); if (index1 < 0 || index2 < 0) { - throw new Error('swapChildren: Both the supplied DisplayObjects must be a child of the caller.'); + throw new Error('swapChildren: Both the supplied DisplayObjects must be a child of the caller'); } this.children[index1] = child2; this.children[index2] = child; diff --git a/src/phaser/display/webgl/renderer.js b/src/phaser/display/webgl/renderer.js index 9d7ad69..9080b3f 100644 --- a/src/phaser/display/webgl/renderer.js +++ b/src/phaser/display/webgl/renderer.js @@ -128,7 +128,7 @@ export class WebGLRenderer { this.gl = gl; if (!gl) { // fail, not able to get a context - throw new Error('This browser does not support WebGL. Try using the Canvas 2D.'); + throw new Error('Error creating WebGL context'); } this.initRegistry(); this.glContextId = window.PhaserRegistry.GL_CONTEXT_ID; diff --git a/src/phaser/display/webgl/util.js b/src/phaser/display/webgl/util.js index 02ea458..f8c5b69 100644 --- a/src/phaser/display/webgl/util.js +++ b/src/phaser/display/webgl/util.js @@ -19,9 +19,10 @@ export function compileShader(gl, shaderSrc, shaderType) { gl.shaderSource(shader, src); gl.compileShader(shader); if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { - if (window.PhaserRegistry) { - window.PhaserRegistry.GL_SHADER_INFO_LOG = gl.getShaderInfoLog(shader); + if (!window.PhaserRegistry) { + window.PhaserRegistry = {}; } + window.PhaserRegistry.GL_SHADER_INFO_LOG = gl.getShaderInfoLog(shader); return null; } return shader; @@ -65,9 +66,10 @@ export function compileProgram(gl, vertexSrc, fragmentSrc) { gl.linkProgram(shaderProgram); if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) { - if (window.PhaserRegistry) { - window.PhaserRegistry.GL_PROGRAM_INFO_LOG = gl.getProgramInfoLog(shaderProgram); + if (!window.PhaserRegistry) { + window.PhaserRegistry = {}; } + window.PhaserRegistry.GL_PROGRAM_INFO_LOG = gl.getProgramInfoLog(shaderProgram); } return shaderProgram; } diff --git a/src/phaser/geom/util/point.js b/src/phaser/geom/util/point.js index 9e2375c..b5264b4 100644 --- a/src/phaser/geom/util/point.js +++ b/src/phaser/geom/util/point.js @@ -248,7 +248,7 @@ export function centroid(points, output = null) { const result = output || new Point(); const pointsLen = points.length; if (pointsLen < 1) { - throw new Error('Point(points) array must not be empty.'); + throw new Error('Point(points) array must not be empty'); } if (pointsLen === 1) { result.copyFrom(points[0]);