diff --git a/.github/workflows/gifs.yml b/.github/workflows/gifs.yml new file mode 100644 index 00000000..26244ef1 --- /dev/null +++ b/.github/workflows/gifs.yml @@ -0,0 +1,18 @@ +name: Verify Gifs Filename + +on: + push: + branches: [master] + pull_request: + branches: [master] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Verify Gifs Filename + run: | + npm install + npm run compile:test + npm run test:gifs diff --git a/media/main-bundle.js b/media/main-bundle.js index 8a1dee8c..5dfa0bf6 100644 --- a/media/main-bundle.js +++ b/media/main-bundle.js @@ -1,13 +1,13 @@ -/******/ (() => { // webpackBootstrap -/******/ "use strict"; -/******/ var __webpack_modules__ = ({ - -/***/ "./src/common/names.ts": -/*!*****************************!*\ - !*** ./src/common/names.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/common/names.ts": +/*!*****************************!*\ + !*** ./src/common/names.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + Object.defineProperty(exports, "__esModule", ({ value: true })); exports.randomName = void 0; @@ -43,16 +43,16 @@ function randomName(type) { return (collection[Math.floor(Math.random() * collection.length)] ?? 'Unknown'); } exports.randomName = randomName; - - -/***/ }), - -/***/ "./src/panel/basepettype.ts": -/*!**********************************!*\ - !*** ./src/panel/basepettype.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - + + +/***/ }), + +/***/ "./src/panel/basepettype.ts": +/*!**********************************!*\ + !*** ./src/panel/basepettype.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + Object.defineProperty(exports, "__esModule", ({ value: true })); exports.BasePetType = exports.InvalidStateException = void 0; @@ -319,16 +319,16 @@ class BasePetType { } } exports.BasePetType = BasePetType; - - -/***/ }), - -/***/ "./src/panel/main.ts": -/*!***************************!*\ - !*** ./src/panel/main.ts ***! - \***************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - + + +/***/ }), + +/***/ "./src/panel/main.ts": +/*!***************************!*\ + !*** ./src/panel/main.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + Object.defineProperty(exports, "__esModule", ({ value: true })); exports.petPanelApp = exports.saveState = exports.allPets = void 0; @@ -775,16 +775,16 @@ exports.petPanelApp = petPanelApp; window.addEventListener('resize', function () { initCanvas(); }); - - -/***/ }), - -/***/ "./src/panel/pets.ts": -/*!***************************!*\ - !*** ./src/panel/pets.ts ***! - \***************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - + + +/***/ }), + +/***/ "./src/panel/pets.ts": +/*!***************************!*\ + !*** ./src/panel/pets.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + Object.defineProperty(exports, "__esModule", ({ value: true })); exports.normalizeColor = exports.availableColors = exports.createPet = exports.InvalidPetException = exports.PetCollection = exports.PetElement = void 0; @@ -982,16 +982,16 @@ function normalizeColor(petColor, petType) { } } exports.normalizeColor = normalizeColor; - - -/***/ }), - -/***/ "./src/panel/pets/cat.ts": -/*!*******************************!*\ - !*** ./src/panel/pets/cat.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - + + +/***/ }), + +/***/ "./src/panel/pets/cat.ts": +/*!*******************************!*\ + !*** ./src/panel/pets/cat.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + Object.defineProperty(exports, "__esModule", ({ value: true })); exports.CAT_NAMES = exports.Cat = void 0; @@ -1202,16 +1202,16 @@ exports.CAT_NAMES = [ 'Felix', 'Duchess', ]; - - -/***/ }), - -/***/ "./src/panel/pets/chicken.ts": -/*!***********************************!*\ - !*** ./src/panel/pets/chicken.ts ***! - \***********************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - + + +/***/ }), + +/***/ "./src/panel/pets/chicken.ts": +/*!***********************************!*\ + !*** ./src/panel/pets/chicken.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + Object.defineProperty(exports, "__esModule", ({ value: true })); exports.CHICKEN_NAMES = exports.Chicken = void 0; @@ -1300,16 +1300,16 @@ exports.CHICKEN_NAMES = [ 'Penguin', 'Sybil', ]; - - -/***/ }), - -/***/ "./src/panel/pets/clippy.ts": -/*!**********************************!*\ - !*** ./src/panel/pets/clippy.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - + + +/***/ }), + +/***/ "./src/panel/pets/clippy.ts": +/*!**********************************!*\ + !*** ./src/panel/pets/clippy.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + Object.defineProperty(exports, "__esModule", ({ value: true })); exports.CLIPPY_NAMES = exports.Clippy = void 0; @@ -1380,16 +1380,16 @@ exports.CLIPPY_NAMES = [ 'Lucy', 'Bailey', ]; - - -/***/ }), - -/***/ "./src/panel/pets/cockatiel.ts": -/*!*************************************!*\ - !*** ./src/panel/pets/cockatiel.ts ***! - \*************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - + + +/***/ }), + +/***/ "./src/panel/pets/cockatiel.ts": +/*!*************************************!*\ + !*** ./src/panel/pets/cockatiel.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + Object.defineProperty(exports, "__esModule", ({ value: true })); exports.COCKATIEL_NAMES = exports.Cockatiel = void 0; @@ -1479,16 +1479,16 @@ exports.COCKATIEL_NAMES = [ 'Kiko', 'Luna', ]; - - -/***/ }), - -/***/ "./src/panel/pets/crab.ts": -/*!********************************!*\ - !*** ./src/panel/pets/crab.ts ***! - \********************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - + + +/***/ }), + +/***/ "./src/panel/pets/crab.ts": +/*!********************************!*\ + !*** ./src/panel/pets/crab.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + Object.defineProperty(exports, "__esModule", ({ value: true })); exports.CRAB_NAMES = exports.Crab = void 0; @@ -1594,16 +1594,16 @@ exports.CRAB_NAMES = [ 'Penny Pincher', 'Prickl', ]; - - -/***/ }), - -/***/ "./src/panel/pets/dog.ts": -/*!*******************************!*\ - !*** ./src/panel/pets/dog.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - + + +/***/ }), + +/***/ "./src/panel/pets/dog.ts": +/*!*******************************!*\ + !*** ./src/panel/pets/dog.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + Object.defineProperty(exports, "__esModule", ({ value: true })); exports.DOG_NAMES = exports.Dog = void 0; @@ -1819,16 +1819,16 @@ exports.DOG_NAMES = [ 'Lady', 'Puddles', ]; - - -/***/ }), - -/***/ "./src/panel/pets/fox.ts": -/*!*******************************!*\ - !*** ./src/panel/pets/fox.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - + + +/***/ }), + +/***/ "./src/panel/pets/fox.ts": +/*!*******************************!*\ + !*** ./src/panel/pets/fox.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + Object.defineProperty(exports, "__esModule", ({ value: true })); exports.FOX_NAMES = exports.Fox = void 0; @@ -2020,16 +2020,16 @@ exports.FOX_NAMES = [ 'Pip', 'Pippin', ]; - - -/***/ }), - -/***/ "./src/panel/pets/mod.ts": -/*!*******************************!*\ - !*** ./src/panel/pets/mod.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - + + +/***/ }), + +/***/ "./src/panel/pets/mod.ts": +/*!*******************************!*\ + !*** ./src/panel/pets/mod.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + Object.defineProperty(exports, "__esModule", ({ value: true })); exports.MOD_NAMES = exports.Mod = void 0; @@ -2091,16 +2091,16 @@ exports.MOD_NAMES = [ 'Purple Pal', 'Ro Bot', ]; - - -/***/ }), - -/***/ "./src/panel/pets/rocky.ts": -/*!*********************************!*\ - !*** ./src/panel/pets/rocky.ts ***! - \*********************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - + + +/***/ }), + +/***/ "./src/panel/pets/rocky.ts": +/*!*********************************!*\ + !*** ./src/panel/pets/rocky.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ROCKY_NAMES = exports.Rocky = void 0; @@ -2161,16 +2161,16 @@ exports.ROCKY_NAMES = [ 'Rock On It', 'Rock Out', ]; - - -/***/ }), - -/***/ "./src/panel/pets/rubberduck.ts": -/*!**************************************!*\ - !*** ./src/panel/pets/rubberduck.ts ***! - \**************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - + + +/***/ }), + +/***/ "./src/panel/pets/rubberduck.ts": +/*!**************************************!*\ + !*** ./src/panel/pets/rubberduck.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + Object.defineProperty(exports, "__esModule", ({ value: true })); exports.DUCK_NAMES = exports.RubberDuck = void 0; @@ -2284,16 +2284,16 @@ exports.DUCK_NAMES = [ 'Plucker', 'Meeko', ]; - - -/***/ }), - -/***/ "./src/panel/pets/snake.ts": -/*!*********************************!*\ - !*** ./src/panel/pets/snake.ts ***! - \*********************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - + + +/***/ }), + +/***/ "./src/panel/pets/snake.ts": +/*!*********************************!*\ + !*** ./src/panel/pets/snake.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + Object.defineProperty(exports, "__esModule", ({ value: true })); exports.SNAKE_NAMES = exports.Snake = void 0; @@ -2409,16 +2409,16 @@ exports.SNAKE_NAMES = [ 'Slinky', 'Stripes', ]; - - -/***/ }), - -/***/ "./src/panel/pets/totoro.ts": -/*!**********************************!*\ - !*** ./src/panel/pets/totoro.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - + + +/***/ }), + +/***/ "./src/panel/pets/totoro.ts": +/*!**********************************!*\ + !*** ./src/panel/pets/totoro.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + Object.defineProperty(exports, "__esModule", ({ value: true })); exports.TOTORO_NAMES = exports.Totoro = void 0; @@ -2500,16 +2500,16 @@ exports.TOTORO_NAMES = [ 'Bailey', 'Big fella', ]; - - -/***/ }), - -/***/ "./src/panel/pets/zappy.ts": -/*!*********************************!*\ - !*** ./src/panel/pets/zappy.ts ***! - \*********************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - + + +/***/ }), + +/***/ "./src/panel/pets/zappy.ts": +/*!*********************************!*\ + !*** ./src/panel/pets/zappy.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ZAPPY_NAMES = exports.Zappy = void 0; @@ -2583,16 +2583,16 @@ exports.ZAPPY_NAMES = [ 'Speedy', 'Rush', ]; - - -/***/ }), - -/***/ "./src/panel/states.ts": -/*!*****************************!*\ - !*** ./src/panel/states.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, exports) => { - + + +/***/ }), + +/***/ "./src/panel/states.ts": +/*!*****************************!*\ + !*** ./src/panel/states.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, exports) => { + Object.defineProperty(exports, "__esModule", ({ value: true })); exports.JumpDownLeftState = exports.ClimbWallLeftState = exports.ChaseFriendState = exports.ChaseState = exports.RunLeftState = exports.RunRightState = exports.WalkLeftState = exports.WalkRightState = exports.IdleWithBallState = exports.SwipeState = exports.LandState = exports.WallHangLeftState = exports.LieState = exports.SitIdleState = exports.resolveState = exports.isStateAboveGround = exports.BallState = exports.FrameResult = exports.HorizontalDirection = exports.PetPanelState = exports.PetElementState = exports.PetInstanceState = void 0; @@ -2906,43 +2906,43 @@ class JumpDownLeftState { } } exports.JumpDownLeftState = JumpDownLeftState; - - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/************************************************************************/ -/******/ -/******/ // startup -/******/ // Load entry module and return exports -/******/ // This entry module is referenced by other modules so it can't be inlined -/******/ var __webpack_exports__ = __webpack_require__("./src/panel/main.ts"); -/******/ self.petApp = __webpack_exports__; -/******/ -/******/ })() + + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module is referenced by other modules so it can't be inlined +/******/ var __webpack_exports__ = __webpack_require__("./src/panel/main.ts"); +/******/ self.petApp = __webpack_exports__; +/******/ +/******/ })() ; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 6faba67b..7c9b1f31 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "vscode-pets", - "version": "1.19.0", + "version": "1.21.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "vscode-pets", - "version": "1.19.0", + "version": "1.21.0", "license": "MIT", "dependencies": { "@vscode/l10n": "^0.0.10" diff --git a/package.json b/package.json index 6617b195..b8fc79fa 100644 --- a/package.json +++ b/package.json @@ -238,7 +238,8 @@ "lint:fix": "eslint src --ext ts --fix && prettier --write src", "test": "node ./out/test/runTest.js", "test:coverage": "COVERAGE=1 node ./out/test/runTest.js", - "test:web": "vscode-test-web --browserType=chromium --extensionDevelopmentPath=. --extensionTestsPath=dist/web/test/suite/index.js" + "test:web": "vscode-test-web --browserType=chromium --extensionDevelopmentPath=. --extensionTestsPath=dist/web/test/suite/index.js", + "test:gifs": "node ./out/test/gifs.js" }, "devDependencies": { "@rbarilani/remove-source-map-url-webpack-plugin": "^1.1.0", diff --git a/src/test/gifs.ts b/src/test/gifs.ts new file mode 100644 index 00000000..4798c7a4 --- /dev/null +++ b/src/test/gifs.ts @@ -0,0 +1,113 @@ +import * as fs from 'fs'; + +const pets: { [key: string]: { colors: string[]; states: string[] } } = { + cat: { + colors: ['black', 'brown', 'gray', 'lightbrown', 'white'], + states: [ + 'fall_from_grab', + 'idle', + 'land', + 'run', + 'swipe', + 'walk', + 'walk_fast', + 'wallclimb', + 'wallgrab', + 'with_ball', + ], + }, + chicken: { + colors: ['white'], + states: ['idle', 'run', 'swipe', 'walk', 'walk_fast', 'with_ball'], + }, + clippy: { + colors: ['black', 'brown', 'green', 'yellow'], + states: ['idle', 'run', 'swipe', 'walk', 'walk_fast', 'with_ball'], + }, + cockatiel: { + colors: ['gray'], + states: ['idle', 'run', 'swipe', 'walk', 'walk_fast', 'with_ball'], + }, + crab: { + colors: ['red'], + states: ['idle', 'run', 'swipe', 'walk', 'walk_fast', 'with_ball'], + }, + dog: { + colors: ['black', 'brown', 'red', 'white'], + states: [ + 'idle', + 'lie', + 'run', + 'swipe', + 'walk', + 'walk_fast', + 'with_ball', + ], + }, + fox: { + colors: ['red', 'white'], + states: ['idle', 'run', 'swipe', 'walk', 'walk_fast', 'with_ball'], + }, + mod: { + colors: ['purple'], + states: ['idle', 'run', 'swipe', 'walk', 'walk_fast', 'with_ball'], + }, + rocky: { + colors: ['gray'], + states: ['idle', 'run', 'swipe', 'walk', 'walk_fast'], + }, + 'rubber-duck': { + colors: ['yellow'], + states: ['idle', 'run', 'swipe', 'walk', 'walk_fast', 'with_ball'], + }, + snake: { + colors: ['green'], + states: ['idle', 'run', 'swipe', 'walk', 'walk_fast', 'with_ball'], + }, + totoro: { + colors: ['gray'], + states: [ + 'fall_from_grab', + 'idle', + 'jump', + 'land', + 'lie', + 'run', + 'swipe', + 'walk', + 'wallclimb', + 'wallgrab', + 'with_ball', + ], + }, + zappy: { + colors: ['yellow'], + states: ['idle', 'run', 'swipe', 'walk', 'walk_fast', 'with_ball'], + }, +}; + +function checkGifFilenames(folder: string) { + for (const pet in pets) { + const allowedColors = pets[pet].colors; + const allowedStates = pets[pet].states; + if (!allowedColors) { + console.error(`No colors found for pet "${pet}"`); + return; + } + allowedColors.forEach((color) => { + allowedStates.forEach((state) => { + const filename = `${color}_${state}_8fps.gif`; + const filePath = `${folder}/${pet}/${filename}`; + if (!fs.existsSync(filePath)) { + console.error(`File "${filePath}" does not exist.`); + return false; + } else { + console.log(`File "${filePath}" exists.`); + } + }); + }); + } +} + +const mediaFolder = './media'; +checkGifFilenames(mediaFolder);