From 6551f332214c5f750634fec065400c89cfbe6957 Mon Sep 17 00:00:00 2001 From: Gallay Lajos Date: Sun, 1 Feb 2026 16:38:37 +0100 Subject: [PATCH 1/5] chore: dependency updates --- common/package.json | 4 +- frontend/package.json | 16 +- package.json | 12 +- service/package.json | 16 +- yarn.lock | 421 +++++++++++++++++++++--------------------- 5 files changed, 230 insertions(+), 239 deletions(-) diff --git a/common/package.json b/common/package.json index 7210287..287f605 100644 --- a/common/package.json +++ b/common/package.json @@ -25,11 +25,11 @@ "create-schemas": "node ./dist/bin/create-schemas.js" }, "devDependencies": { - "@types/node": "^25.0.10", + "@types/node": "^25.1.0", "ts-json-schema-generator": "^2.4.0", "vitest": "^4.0.18" }, "dependencies": { - "@furystack/rest": "^8.0.32" + "@furystack/rest": "^8.0.34" } } diff --git a/frontend/package.json b/frontend/package.json index 318724b..a7679ab 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -17,14 +17,14 @@ "vitest": "^4.0.18" }, "dependencies": { - "@furystack/core": "^15.0.32", - "@furystack/inject": "^12.0.26", - "@furystack/logging": "^8.0.26", - "@furystack/rest-client-fetch": "^8.0.32", - "@furystack/shades": "^11.0.33", - "@furystack/shades-common-components": "^10.0.33", - "@furystack/utils": "^8.1.8", - "@types/node": "^25.0.10", + "@furystack/core": "^15.0.34", + "@furystack/inject": "^12.0.28", + "@furystack/logging": "^8.0.28", + "@furystack/rest-client-fetch": "^8.0.34", + "@furystack/shades": "^11.1.0", + "@furystack/shades-common-components": "^11.0.0", + "@furystack/utils": "^8.1.9", + "@types/node": "^25.1.0", "common": "workspace:^" } } diff --git a/package.json b/package.json index 84d4703..c2fffeb 100644 --- a/package.json +++ b/package.json @@ -17,22 +17,22 @@ "type": "module", "devDependencies": { "@eslint/js": "^9.39.2", - "@furystack/yarn-plugin-changelog": "^1.0.1", - "@playwright/test": "^1.58.0", - "@types/node": "^25.0.10", + "@furystack/yarn-plugin-changelog": "^1.0.2", + "@playwright/test": "^1.58.1", + "@types/node": "^25.1.0", "@vitest/coverage-v8": "^4.0.18", "eslint": "^9.39.2", "eslint-config-prettier": "^10.1.8", "eslint-plugin-import": "2.32.0", - "eslint-plugin-jsdoc": "^62.4.0", - "eslint-plugin-playwright": "^2.5.0", + "eslint-plugin-jsdoc": "^62.5.0", + "eslint-plugin-playwright": "^2.5.1", "eslint-plugin-prettier": "^5.5.5", "husky": "^9.1.7", "lint-staged": "^16.2.7", "prettier": "^3.8.1", "rimraf": "^6.1.2", "typescript": "^5.9.3", - "typescript-eslint": "^8.53.1", + "typescript-eslint": "^8.54.0", "vite": "^7.3.1", "vitest": "^4.0.18" }, diff --git a/service/package.json b/service/package.json index 3ec3f91..95f0172 100644 --- a/service/package.json +++ b/service/package.json @@ -12,18 +12,18 @@ "build": "tsc -b" }, "devDependencies": { - "@types/node": "^25.0.10", + "@types/node": "^25.1.0", "typescript": "^5.9.3", "vitest": "^4.0.18" }, "dependencies": { - "@furystack/core": "^15.0.32", - "@furystack/filesystem-store": "^7.0.32", - "@furystack/inject": "^12.0.26", - "@furystack/logging": "^8.0.26", - "@furystack/repository": "^10.0.32", - "@furystack/rest-service": "^10.1.3", - "@furystack/security": "^6.0.32", + "@furystack/core": "^15.0.34", + "@furystack/filesystem-store": "^7.0.34", + "@furystack/inject": "^12.0.28", + "@furystack/logging": "^8.0.28", + "@furystack/repository": "^10.0.34", + "@furystack/rest-service": "^11.0.2", + "@furystack/security": "^6.0.34", "common": "workspace:^" } } diff --git a/yarn.lock b/yarn.lock index ee824b9..1e85c20 100644 --- a/yarn.lock +++ b/yarn.lock @@ -284,16 +284,16 @@ __metadata: languageName: node linkType: hard -"@es-joy/jsdoccomment@npm:~0.82.0": - version: 0.82.0 - resolution: "@es-joy/jsdoccomment@npm:0.82.0" +"@es-joy/jsdoccomment@npm:~0.83.0": + version: 0.83.0 + resolution: "@es-joy/jsdoccomment@npm:0.83.0" dependencies: "@types/estree": "npm:^1.0.8" "@typescript-eslint/types": "npm:^8.53.1" - comment-parser: "npm:1.4.4" + comment-parser: "npm:1.4.5" esquery: "npm:^1.7.0" jsdoc-type-pratt-parser: "npm:~7.1.0" - checksum: 10c0/fd5af147818cba8f89e137d24c1740f634f7bb3e7ca8a72ee4e0954b18f94fe78fcaa980bad2dbeb8dfcd22f7745415124b9a918bf6e7707576492f6b16a8ea2 + checksum: 10c0/55fae1cbceac0abe19d83ea2a6b4b3f864655878b990a1ee3c0efa398926ed473042dd9d7e723aaa926eef0b12d4f5b46b61a6f30b3e50542d4da3b2adb182ce languageName: node linkType: hard @@ -581,140 +581,140 @@ __metadata: languageName: node linkType: hard -"@furystack/core@npm:^15.0.31, @furystack/core@npm:^15.0.32": - version: 15.0.32 - resolution: "@furystack/core@npm:15.0.32" +"@furystack/core@npm:^15.0.34": + version: 15.0.34 + resolution: "@furystack/core@npm:15.0.34" dependencies: - "@furystack/inject": "npm:^12.0.26" - "@furystack/utils": "npm:^8.1.8" - checksum: 10c0/55a95e29415a2abf3187549bcaf1d6172d556232cc2fc4fa722eaafa5c909fa237f80d3e79d5ae60ecac2bc57e293eb6667c8eaa36fd675a053a708cbb6e63d4 + "@furystack/inject": "npm:^12.0.28" + "@furystack/utils": "npm:^8.1.9" + checksum: 10c0/ac84e6f45f69e1467166d41d588f162240f4fbca932ea87f56187ef86cff3638ea733c117eeb5f5eed266cc7a0a31302d9ee58cfc91a5d02645c3e0c5df9382b languageName: node linkType: hard -"@furystack/filesystem-store@npm:^7.0.32": - version: 7.0.32 - resolution: "@furystack/filesystem-store@npm:7.0.32" +"@furystack/filesystem-store@npm:^7.0.34": + version: 7.0.34 + resolution: "@furystack/filesystem-store@npm:7.0.34" dependencies: - "@furystack/core": "npm:^15.0.32" - "@furystack/inject": "npm:^12.0.26" - "@furystack/utils": "npm:^8.1.8" + "@furystack/core": "npm:^15.0.34" + "@furystack/inject": "npm:^12.0.28" + "@furystack/utils": "npm:^8.1.9" semaphore-async-await: "npm:^1.5.1" - checksum: 10c0/ccb09f028d96806960953f780a32b9c6394edcfe19ad69d107d4b7fbd0980c3f06b92cf5b59494a2877cd7885317f4b0eae6c16b5ac5d711715c8e97e5e058e5 + checksum: 10c0/9968c4dddf2d69213b5b01bf6d4836b1c0fa2d49e43e66f00c15da123ef9601bf6f963e82f04765466ee57d63ec9b2fdfb495898fc2af0b924a853f81ab7cbdb languageName: node linkType: hard -"@furystack/inject@npm:^12.0.25, @furystack/inject@npm:^12.0.26": - version: 12.0.26 - resolution: "@furystack/inject@npm:12.0.26" +"@furystack/inject@npm:^12.0.28": + version: 12.0.28 + resolution: "@furystack/inject@npm:12.0.28" dependencies: - "@furystack/utils": "npm:^8.1.8" - checksum: 10c0/8aff4335a68f742d35d424fdc84503e2a918041f8cf39aba63e0e282ad8ab44f2d937e8954b3254e96d310f8093182d50bf757f664bb523eb33d4633498b4aa1 + "@furystack/utils": "npm:^8.1.9" + checksum: 10c0/291c4d3350486c243f487e13dfdf1e1888bf1d22485553bba2a18b728865a651ed59011abe66e53d120d1a4e29f2abc42bee4e761955b51da2e50b0024957f60 languageName: node linkType: hard -"@furystack/logging@npm:^8.0.26": - version: 8.0.26 - resolution: "@furystack/logging@npm:8.0.26" +"@furystack/logging@npm:^8.0.28": + version: 8.0.28 + resolution: "@furystack/logging@npm:8.0.28" dependencies: - "@furystack/inject": "npm:^12.0.26" - checksum: 10c0/6191d8d1e829dc81ae301c02756d8676992730036c689e403b8333ad1d9354e5f465795b6e3ad54f9ad8066e7971077e7a3e471b047f331515d17398958b6ded + "@furystack/inject": "npm:^12.0.28" + checksum: 10c0/51e7d8f287d609b9cc2580f676a2c6a60867d1e6ec6b16a90cf53085cddfb2aee576f8f726815299449bb12c62b86fb1cc9c4be9994a73960ee3663803463cf2 languageName: node linkType: hard -"@furystack/repository@npm:^10.0.31, @furystack/repository@npm:^10.0.32": - version: 10.0.32 - resolution: "@furystack/repository@npm:10.0.32" +"@furystack/repository@npm:^10.0.34": + version: 10.0.34 + resolution: "@furystack/repository@npm:10.0.34" dependencies: - "@furystack/core": "npm:^15.0.32" - "@furystack/inject": "npm:^12.0.26" - "@furystack/utils": "npm:^8.1.8" - checksum: 10c0/410d2e2a35fc22da2788356b98ca5719e0ffae844407bb33f2724de016541ad672a8ea764694ea63c51bc133e0d2aeabae051e5a1737a1236c6217ea9bcad9e4 + "@furystack/core": "npm:^15.0.34" + "@furystack/inject": "npm:^12.0.28" + "@furystack/utils": "npm:^8.1.9" + checksum: 10c0/4cca1fd3a42c018c144213a0be062c518534caad73b3e56ff9e40ea7968420d0b457878780ecf81b5963a35cf9add53c5b582e629ccd20db40d917266ff69b36 languageName: node linkType: hard -"@furystack/rest-client-fetch@npm:^8.0.32": - version: 8.0.32 - resolution: "@furystack/rest-client-fetch@npm:8.0.32" +"@furystack/rest-client-fetch@npm:^8.0.34": + version: 8.0.34 + resolution: "@furystack/rest-client-fetch@npm:8.0.34" dependencies: - "@furystack/rest": "npm:^8.0.32" + "@furystack/rest": "npm:^8.0.34" path-to-regexp: "npm:^8.3.0" - checksum: 10c0/4aeb6d436490c86295258a3bbb53b638504ef9bdff9d84bfcf61a698a6e39d9fc7f9022028aafe4b752201a55c49a5def7a5517a45f9d0fe9b7aa12a1d331454 + checksum: 10c0/a7e969d0284797371f604a2187718ba498df4d0ad1b6642f386a67219a2eeb32aef93c8db8a4f3cadb7ba4d7f09971e1b63bcdcb9fa04eee68e694ff6be83338 languageName: node linkType: hard -"@furystack/rest-service@npm:^10.1.3": - version: 10.1.3 - resolution: "@furystack/rest-service@npm:10.1.3" +"@furystack/rest-service@npm:^11.0.2": + version: 11.0.2 + resolution: "@furystack/rest-service@npm:11.0.2" dependencies: - "@furystack/core": "npm:^15.0.31" - "@furystack/inject": "npm:^12.0.25" - "@furystack/repository": "npm:^10.0.31" - "@furystack/rest": "npm:^8.0.31" - "@furystack/security": "npm:^6.0.31" - "@furystack/utils": "npm:^8.1.7" + "@furystack/core": "npm:^15.0.34" + "@furystack/inject": "npm:^12.0.28" + "@furystack/repository": "npm:^10.0.34" + "@furystack/rest": "npm:^8.0.34" + "@furystack/security": "npm:^6.0.34" + "@furystack/utils": "npm:^8.1.9" ajv: "npm:^8.17.1" ajv-formats: "npm:^3.0.1" path-to-regexp: "npm:^8.3.0" semaphore-async-await: "npm:^1.5.1" - checksum: 10c0/d1c651536512890d7de428f3a82dff6a8c4f5f8d8d59801cf26a9c0dd35ca78ddfe7ad5660d656470bc49733ebe50f133b84a5d9d14283f3683c3996d43b0ef1 + checksum: 10c0/0be1475db9c609932e47a7e3436cd7a4921b7e5cb0e15714125be90527dc5366e1621f78af881b2d79619ae72d1bbfec14e8ecd10def862d2f42bb64f70a1626 languageName: node linkType: hard -"@furystack/rest@npm:^8.0.31, @furystack/rest@npm:^8.0.32": - version: 8.0.32 - resolution: "@furystack/rest@npm:8.0.32" +"@furystack/rest@npm:^8.0.34": + version: 8.0.34 + resolution: "@furystack/rest@npm:8.0.34" dependencies: - "@furystack/core": "npm:^15.0.32" - "@furystack/inject": "npm:^12.0.26" - checksum: 10c0/e932ede2deb8fea48f1fe4339b0d971fe32a1585a2b602476e372f9e2aeac55779bb22f7e6d38d98674ad4f163261a6fe46331d8c3f5765a6d0a7689f73a0855 + "@furystack/core": "npm:^15.0.34" + "@furystack/inject": "npm:^12.0.28" + checksum: 10c0/e8bcbb290f089f307cec422ba2d2f5d38c776c95932e81272a086a8276927f46407deefa8e79f2287f4d696349d7691b3011aa3f1673df34771a9d768e96d4e1 languageName: node linkType: hard -"@furystack/security@npm:^6.0.31, @furystack/security@npm:^6.0.32": - version: 6.0.32 - resolution: "@furystack/security@npm:6.0.32" +"@furystack/security@npm:^6.0.34": + version: 6.0.34 + resolution: "@furystack/security@npm:6.0.34" dependencies: - "@furystack/core": "npm:^15.0.32" - "@furystack/inject": "npm:^12.0.26" - checksum: 10c0/47f22aeb79593a5cc0b85287e9dcfe52d20dfc326ada413aafb590fe6723568642864a6b713312742e047502adb84e0172b2d68f299a5b3f50cfe4090caac70a + "@furystack/core": "npm:^15.0.34" + "@furystack/inject": "npm:^12.0.28" + checksum: 10c0/0dbe67f7582d5fdfbcf9956c79e122754c69a037f9ea807bd293847a9f5d02e138b2b8b657dee8fd005913334107147e154f499724bc849e4932a5b316d1616c languageName: node linkType: hard -"@furystack/shades-common-components@npm:^10.0.33": - version: 10.0.33 - resolution: "@furystack/shades-common-components@npm:10.0.33" +"@furystack/shades-common-components@npm:^11.0.0": + version: 11.0.0 + resolution: "@furystack/shades-common-components@npm:11.0.0" dependencies: - "@furystack/core": "npm:^15.0.32" - "@furystack/inject": "npm:^12.0.26" - "@furystack/shades": "npm:^11.0.33" - "@furystack/utils": "npm:^8.1.8" + "@furystack/core": "npm:^15.0.34" + "@furystack/inject": "npm:^12.0.28" + "@furystack/shades": "npm:^11.1.0" + "@furystack/utils": "npm:^8.1.9" path-to-regexp: "npm:^8.3.0" semaphore-async-await: "npm:^1.5.1" - checksum: 10c0/283be11131db9191dfdcdd693d892217054fee0284ac48a2b34b7761c573084505cf3737ec15b6b9fd2bedc35e29e0d26c2628d5b6abc3c9bd4745b5ab5f0383 + checksum: 10c0/b6c5338694e25c8db60314e1567609e458ebfcc94c758c5d9a93d38469bf25f60a999a7c73e66b385360943d4af41d987ce8e2ec920543f8b892ff3e50f0a95d languageName: node linkType: hard -"@furystack/shades@npm:^11.0.33": - version: 11.0.33 - resolution: "@furystack/shades@npm:11.0.33" +"@furystack/shades@npm:^11.1.0": + version: 11.1.0 + resolution: "@furystack/shades@npm:11.1.0" dependencies: - "@furystack/inject": "npm:^12.0.26" - "@furystack/rest": "npm:^8.0.32" - "@furystack/utils": "npm:^8.1.8" + "@furystack/inject": "npm:^12.0.28" + "@furystack/rest": "npm:^8.0.34" + "@furystack/utils": "npm:^8.1.9" path-to-regexp: "npm:^8.3.0" semaphore-async-await: "npm:^1.5.1" - checksum: 10c0/2dcae13633eff6fc9b3eef44b4609240e4f7803d614ec868bb387545ad19ee56fefc36b77194be0031c07a2cfbdeed9f018d3bc6e59e699a3d061cf9e36e7089 + checksum: 10c0/300a288254c2c5e319a1bbe922fd0eb4606d13d45d428200fd88833fc4cbcdae757a6d3bf19dd41a72f5ab36b44a31897dc18dd4133fd0a06dc4becbd6660635 languageName: node linkType: hard -"@furystack/utils@npm:^8.1.7, @furystack/utils@npm:^8.1.8": - version: 8.1.8 - resolution: "@furystack/utils@npm:8.1.8" - checksum: 10c0/e017a0614295d39eeb556ccdf6aeca3a79961d1049ca64e46debe23ce3bba1e6f56432fcde4058bf030485f6a84a4b13447495b6fe5b8acff9d48e4ba5f82ac5 +"@furystack/utils@npm:^8.1.9": + version: 8.1.9 + resolution: "@furystack/utils@npm:8.1.9" + checksum: 10c0/a95bac6cf454f997f2a4ef4e7b945bcbc215110d8a40d78aaf1a75e0b42ff6e78c4506c35a1faa0c5a996ad31052c2abc9b4da780d3438ff69804259e830e311 languageName: node linkType: hard -"@furystack/yarn-plugin-changelog@npm:^1.0.1": +"@furystack/yarn-plugin-changelog@npm:^1.0.2": version: 1.0.2 resolution: "@furystack/yarn-plugin-changelog@npm:1.0.2" dependencies: @@ -1025,14 +1025,14 @@ __metadata: languageName: node linkType: hard -"@playwright/test@npm:^1.58.0": - version: 1.58.0 - resolution: "@playwright/test@npm:1.58.0" +"@playwright/test@npm:^1.58.1": + version: 1.58.1 + resolution: "@playwright/test@npm:1.58.1" dependencies: - playwright: "npm:1.58.0" + playwright: "npm:1.58.1" bin: playwright: cli.js - checksum: 10c0/7bf0c509415e4e55a1bcd2dd2af5f0fa5d33d60f7583c35295134af99c03351f514e7884d7c8354ed85fcd8dcea5ec85c8ba917d49d1834bb1a0b02236920e2d + checksum: 10c0/ca32be812c6f86b2247109eaecd2fed452414debee05b4b0d690a3397f6bd08a56e0b2484f74d20fa0e7494508ee1cbdcbc27864acd5093e34c3f94d0e278188 languageName: node linkType: hard @@ -1396,7 +1396,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*": +"@types/node@npm:*, @types/node@npm:^25.1.0": version: 25.1.0 resolution: "@types/node@npm:25.1.0" dependencies: @@ -1414,15 +1414,6 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^25.0.10": - version: 25.0.10 - resolution: "@types/node@npm:25.0.10" - dependencies: - undici-types: "npm:~7.16.0" - checksum: 10c0/9edc3c812b487c32c76eebac7c87acae1f69515a0bc3f6b545806d513eb9e918c3217bf751dc93da39f60e06bf1b0caa92258ef3a6dd6457124b2e761e54f61f - languageName: node - linkType: hard - "@types/responselike@npm:^1.0.0": version: 1.0.3 resolution: "@types/responselike@npm:1.0.3" @@ -1453,105 +1444,112 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:8.53.1": - version: 8.53.1 - resolution: "@typescript-eslint/eslint-plugin@npm:8.53.1" +"@typescript-eslint/eslint-plugin@npm:8.54.0": + version: 8.54.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.54.0" dependencies: "@eslint-community/regexpp": "npm:^4.12.2" - "@typescript-eslint/scope-manager": "npm:8.53.1" - "@typescript-eslint/type-utils": "npm:8.53.1" - "@typescript-eslint/utils": "npm:8.53.1" - "@typescript-eslint/visitor-keys": "npm:8.53.1" + "@typescript-eslint/scope-manager": "npm:8.54.0" + "@typescript-eslint/type-utils": "npm:8.54.0" + "@typescript-eslint/utils": "npm:8.54.0" + "@typescript-eslint/visitor-keys": "npm:8.54.0" ignore: "npm:^7.0.5" natural-compare: "npm:^1.4.0" ts-api-utils: "npm:^2.4.0" peerDependencies: - "@typescript-eslint/parser": ^8.53.1 + "@typescript-eslint/parser": ^8.54.0 eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/d24e41d0117ef841cc05e4c52d33277de2e57981fa38412f93034082a3467f804201c180f1baca9f967388c7e5965ffcc61e445cf726a0064b8ed71a84f59aa2 + checksum: 10c0/e533c8285880b883e02a833f378597c2776e6b0c20a5935440e2a02c1c42f40069a8badcf6d581bb4ec35a6856a806c4b66674c1c15c33cd64cc6b9c0cdd1dad languageName: node linkType: hard -"@typescript-eslint/parser@npm:8.53.1": - version: 8.53.1 - resolution: "@typescript-eslint/parser@npm:8.53.1" +"@typescript-eslint/parser@npm:8.54.0": + version: 8.54.0 + resolution: "@typescript-eslint/parser@npm:8.54.0" dependencies: - "@typescript-eslint/scope-manager": "npm:8.53.1" - "@typescript-eslint/types": "npm:8.53.1" - "@typescript-eslint/typescript-estree": "npm:8.53.1" - "@typescript-eslint/visitor-keys": "npm:8.53.1" + "@typescript-eslint/scope-manager": "npm:8.54.0" + "@typescript-eslint/types": "npm:8.54.0" + "@typescript-eslint/typescript-estree": "npm:8.54.0" + "@typescript-eslint/visitor-keys": "npm:8.54.0" debug: "npm:^4.4.3" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/fb7602dc3ea45b838f4da2d0173161b222442ed2007487dfce57d6ce24ff16606ec99de9eb6ac114a815e11a47248303d941dca1a7bf13f70350372cee509886 + checksum: 10c0/60a1cfe94bc23086f03701640f4d83d7e37b8f4d729011e0f029e5accf2b3d099c50938c0a798a399e86046279432ff663f33102ba4338c4c82f7acead2bcbac languageName: node linkType: hard -"@typescript-eslint/project-service@npm:8.53.1": - version: 8.53.1 - resolution: "@typescript-eslint/project-service@npm:8.53.1" +"@typescript-eslint/project-service@npm:8.54.0": + version: 8.54.0 + resolution: "@typescript-eslint/project-service@npm:8.54.0" dependencies: - "@typescript-eslint/tsconfig-utils": "npm:^8.53.1" - "@typescript-eslint/types": "npm:^8.53.1" + "@typescript-eslint/tsconfig-utils": "npm:^8.54.0" + "@typescript-eslint/types": "npm:^8.54.0" debug: "npm:^4.4.3" peerDependencies: typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/eecc7ad86b45c6969a05e984e645a4ece2a1cc27d825af046efb6ed369cab32062c17f33a1154ab6dcab349099885db7b39945f1b318753395630f3dfa1e5895 + checksum: 10c0/3392ae259199021a80616a44d9484d1c363f61bc5c631dff2d08c6a906c98716a20caa7b832b8970120a1eb1eb2de3ee890cd527d6edb04f532f4e48a690a792 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.53.1": - version: 8.53.1 - resolution: "@typescript-eslint/scope-manager@npm:8.53.1" +"@typescript-eslint/scope-manager@npm:8.54.0": + version: 8.54.0 + resolution: "@typescript-eslint/scope-manager@npm:8.54.0" dependencies: - "@typescript-eslint/types": "npm:8.53.1" - "@typescript-eslint/visitor-keys": "npm:8.53.1" - checksum: 10c0/d971eb115f2a2c4c25c79df9eee68b93354b32d7cc1174c167241cd2ebbc77858fe7a032c7ecdbacef936b56e8317b56037d21461cb83b4789f7e764e9faa455 + "@typescript-eslint/types": "npm:8.54.0" + "@typescript-eslint/visitor-keys": "npm:8.54.0" + checksum: 10c0/794740a5c0c1afc38d71e6bc59cc62870286e40d99f15e9760e76fb3d4197e961ee151c286c428535c404f5137721242a14da21350b749d0feb1f589f167814f languageName: node linkType: hard -"@typescript-eslint/tsconfig-utils@npm:8.53.1, @typescript-eslint/tsconfig-utils@npm:^8.53.1": - version: 8.53.1 - resolution: "@typescript-eslint/tsconfig-utils@npm:8.53.1" +"@typescript-eslint/tsconfig-utils@npm:8.54.0, @typescript-eslint/tsconfig-utils@npm:^8.54.0": + version: 8.54.0 + resolution: "@typescript-eslint/tsconfig-utils@npm:8.54.0" peerDependencies: typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/e2bfa91f9306dbfa82bdcb64bfcf634fee6313b03e93b35b0010907983c9ffc73c732264deff870896dea18f34b872d39d90d32f7631fd4618e4a6866ffff578 + checksum: 10c0/e8598b0f051650c085d749002138d12249a3efd03e7de02e9e7913939dddd649d159b91f29ca3d28f5ee798b3f528a7195688e23c5e0b315d534e7af20a0c99a languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.53.1": - version: 8.53.1 - resolution: "@typescript-eslint/type-utils@npm:8.53.1" +"@typescript-eslint/type-utils@npm:8.54.0": + version: 8.54.0 + resolution: "@typescript-eslint/type-utils@npm:8.54.0" dependencies: - "@typescript-eslint/types": "npm:8.53.1" - "@typescript-eslint/typescript-estree": "npm:8.53.1" - "@typescript-eslint/utils": "npm:8.53.1" + "@typescript-eslint/types": "npm:8.54.0" + "@typescript-eslint/typescript-estree": "npm:8.54.0" + "@typescript-eslint/utils": "npm:8.54.0" debug: "npm:^4.4.3" ts-api-utils: "npm:^2.4.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/d97ac3bf901eeeb1ad01a423409db654f849d49f8ce7a2b0d482e093d5c8c9cab9ed810554d130a1eaf4921ddb2d98dbe9a8d22bfd08fd6c8ab004fb640a3fbe + checksum: 10c0/ad807800d8b2662f823505249a84a6f5b1246b192a7ff08c49f298e220e4d9bb3d76f1f0852510421e030161604a4b939bff87f11b9074f118a3bd1d26139c6f + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:8.54.0, @typescript-eslint/types@npm:^8.54.0": + version: 8.54.0 + resolution: "@typescript-eslint/types@npm:8.54.0" + checksum: 10c0/2219594fe5e8931ff91fd1b7a2606d33cd4f093d43f9ca71bcaa37f106ef79ad51f830dea51392f7e3d8bca77f7077ef98733f87bc008fad2f0bbd9ea5fb8a40 languageName: node linkType: hard -"@typescript-eslint/types@npm:8.53.1, @typescript-eslint/types@npm:^8.53.1": +"@typescript-eslint/types@npm:^8.53.1": version: 8.53.1 resolution: "@typescript-eslint/types@npm:8.53.1" checksum: 10c0/fa49f5f60de6851de45a9aff0a3ba3c4d00a0991100414e8af1a5d6f32764a48b6b7c0f65748a651f0da0e57df0745cdb8f11c590fa0fb22dd0e54e4c6b5c878 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.53.1": - version: 8.53.1 - resolution: "@typescript-eslint/typescript-estree@npm:8.53.1" +"@typescript-eslint/typescript-estree@npm:8.54.0": + version: 8.54.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.54.0" dependencies: - "@typescript-eslint/project-service": "npm:8.53.1" - "@typescript-eslint/tsconfig-utils": "npm:8.53.1" - "@typescript-eslint/types": "npm:8.53.1" - "@typescript-eslint/visitor-keys": "npm:8.53.1" + "@typescript-eslint/project-service": "npm:8.54.0" + "@typescript-eslint/tsconfig-utils": "npm:8.54.0" + "@typescript-eslint/types": "npm:8.54.0" + "@typescript-eslint/visitor-keys": "npm:8.54.0" debug: "npm:^4.4.3" minimatch: "npm:^9.0.5" semver: "npm:^7.7.3" @@ -1559,32 +1557,32 @@ __metadata: ts-api-utils: "npm:^2.4.0" peerDependencies: typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/e1b48990ba90f0ee5c9630fe91e2d5123c55348e374e586de6cf25e6e03e6e8274bf15317794d171a2e82d9dc663c229807e603ecc661dbe70d61bd23d0c37c4 + checksum: 10c0/1a1a7c0a318e71f3547ab5573198d36165ea152c50447ef92e6326303f9a5c397606201ba80c7b86a725dcdd2913e924be94466a0c33b1b0c3ee852059e646b6 languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.53.1": - version: 8.53.1 - resolution: "@typescript-eslint/utils@npm:8.53.1" +"@typescript-eslint/utils@npm:8.54.0": + version: 8.54.0 + resolution: "@typescript-eslint/utils@npm:8.54.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.9.1" - "@typescript-eslint/scope-manager": "npm:8.53.1" - "@typescript-eslint/types": "npm:8.53.1" - "@typescript-eslint/typescript-estree": "npm:8.53.1" + "@typescript-eslint/scope-manager": "npm:8.54.0" + "@typescript-eslint/types": "npm:8.54.0" + "@typescript-eslint/typescript-estree": "npm:8.54.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/9a2a11c00b97eb9a053782e303cc384649807779e9adeb0b645bc198c83f54431f7ca56d4b38411dcf7ed06a2c2d9aa129874c20c037de2393a4cd0fa3b93c25 + checksum: 10c0/949a97dca8024d39666e04ecdf2d4e12722f5064c387901e72bdcc7adafb96cf650a070dc79f9dd46fa1aae6ac2b5eac5ae3fe5a6979385208c28809a1bd143f languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.53.1": - version: 8.53.1 - resolution: "@typescript-eslint/visitor-keys@npm:8.53.1" +"@typescript-eslint/visitor-keys@npm:8.54.0": + version: 8.54.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.54.0" dependencies: - "@typescript-eslint/types": "npm:8.53.1" + "@typescript-eslint/types": "npm:8.54.0" eslint-visitor-keys: "npm:^4.2.1" - checksum: 10c0/73a21d34052bcb0b46ed738f8fddb76ae8f56a0c27932616b49022cf8603c3e36bb6ab30acd709f9bc05c673708180527b4c4aaffcb858acfc66d8fb39cc6c29 + checksum: 10c0/f83a9aa92f7f4d1fdb12cbca28c6f5704c36371264606b456388b2c869fc61e73c86d3736556e1bb6e253f3a607128b5b1bf6c68395800ca06f18705576faadd languageName: node linkType: hard @@ -2924,13 +2922,6 @@ __metadata: languageName: node linkType: hard -"comment-parser@npm:1.4.4": - version: 1.4.4 - resolution: "comment-parser@npm:1.4.4" - checksum: 10c0/85eaa6b8cd05206b6dcde9c779879ab5d36b7640ec5ed9f0709f1529a2d84638603860ea0a78df3fab9443db8c31f6f881e37d2264edadb653ebd9736a5f9ad8 - languageName: node - linkType: hard - "comment-parser@npm:1.4.5": version: 1.4.5 resolution: "comment-parser@npm:1.4.5" @@ -2942,8 +2933,8 @@ __metadata: version: 0.0.0-use.local resolution: "common@workspace:common" dependencies: - "@furystack/rest": "npm:^8.0.32" - "@types/node": "npm:^25.0.10" + "@furystack/rest": "npm:^8.0.34" + "@types/node": "npm:^25.1.0" ts-json-schema-generator: "npm:^2.4.0" vitest: "npm:^4.0.18" languageName: unknown @@ -3493,11 +3484,11 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jsdoc@npm:^62.4.0": - version: 62.4.0 - resolution: "eslint-plugin-jsdoc@npm:62.4.0" +"eslint-plugin-jsdoc@npm:^62.5.0": + version: 62.5.0 + resolution: "eslint-plugin-jsdoc@npm:62.5.0" dependencies: - "@es-joy/jsdoccomment": "npm:~0.82.0" + "@es-joy/jsdoccomment": "npm:~0.83.0" "@es-joy/resolve.exports": "npm:1.2.0" are-docs-informative: "npm:^0.0.2" comment-parser: "npm:1.4.5" @@ -3513,18 +3504,18 @@ __metadata: to-valid-identifier: "npm:^1.0.0" peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - checksum: 10c0/c7552785b20f6c52d9aaa90625a6ead67a9f3b70f0766cc8a64aee67d619e977ba8581e3fb7a1381d5ebee601854813d73b8b8f5c9d05e2133dc1592caba4292 + checksum: 10c0/840e62319bcd1cd24bbf25a709239881dc9a064c548a34e6933261429ff182b720898b45760c0e8e645b00e9597c73a68c7d89d2c7a714b72ac80714907f968d languageName: node linkType: hard -"eslint-plugin-playwright@npm:^2.5.0": - version: 2.5.0 - resolution: "eslint-plugin-playwright@npm:2.5.0" +"eslint-plugin-playwright@npm:^2.5.1": + version: 2.5.1 + resolution: "eslint-plugin-playwright@npm:2.5.1" dependencies: globals: "npm:^16.4.0" peerDependencies: eslint: ">=8.40.0" - checksum: 10c0/89cf12779a9341f35c3c6992233485ea26f97ae82bfedd2e9c664375d237e724c6188d24f4473ca5de3d97e06a11022119b7c39b35bcf6b10d9acce77b38c215 + checksum: 10c0/b8b752f8692b20b062f218be344c25ad366192b15e4b5c764e25b67a1fa6cfaffb67456aadd6fce5bc8ac7b0922a4413b76be35c7121a3c76e2fc09d09071f53 languageName: node linkType: hard @@ -3860,14 +3851,14 @@ __metadata: resolution: "frontend@workspace:frontend" dependencies: "@codecov/vite-plugin": "npm:^1.9.1" - "@furystack/core": "npm:^15.0.32" - "@furystack/inject": "npm:^12.0.26" - "@furystack/logging": "npm:^8.0.26" - "@furystack/rest-client-fetch": "npm:^8.0.32" - "@furystack/shades": "npm:^11.0.33" - "@furystack/shades-common-components": "npm:^10.0.33" - "@furystack/utils": "npm:^8.1.8" - "@types/node": "npm:^25.0.10" + "@furystack/core": "npm:^15.0.34" + "@furystack/inject": "npm:^12.0.28" + "@furystack/logging": "npm:^8.0.28" + "@furystack/rest-client-fetch": "npm:^8.0.34" + "@furystack/shades": "npm:^11.1.0" + "@furystack/shades-common-components": "npm:^11.0.0" + "@furystack/utils": "npm:^8.1.9" + "@types/node": "npm:^25.1.0" common: "workspace:^" typescript: "npm:^5.9.3" vite: "npm:^7.3.1" @@ -3971,22 +3962,22 @@ __metadata: resolution: "furystack-boilerplate-app@workspace:." dependencies: "@eslint/js": "npm:^9.39.2" - "@furystack/yarn-plugin-changelog": "npm:^1.0.1" - "@playwright/test": "npm:^1.58.0" - "@types/node": "npm:^25.0.10" + "@furystack/yarn-plugin-changelog": "npm:^1.0.2" + "@playwright/test": "npm:^1.58.1" + "@types/node": "npm:^25.1.0" "@vitest/coverage-v8": "npm:^4.0.18" eslint: "npm:^9.39.2" eslint-config-prettier: "npm:^10.1.8" eslint-plugin-import: "npm:2.32.0" - eslint-plugin-jsdoc: "npm:^62.4.0" - eslint-plugin-playwright: "npm:^2.5.0" + eslint-plugin-jsdoc: "npm:^62.5.0" + eslint-plugin-playwright: "npm:^2.5.1" eslint-plugin-prettier: "npm:^5.5.5" husky: "npm:^9.1.7" lint-staged: "npm:^16.2.7" prettier: "npm:^3.8.1" rimraf: "npm:^6.1.2" typescript: "npm:^5.9.3" - typescript-eslint: "npm:^8.53.1" + typescript-eslint: "npm:^8.54.0" vite: "npm:^7.3.1" vitest: "npm:^4.0.18" languageName: unknown @@ -5710,27 +5701,27 @@ __metadata: languageName: node linkType: hard -"playwright-core@npm:1.58.0": - version: 1.58.0 - resolution: "playwright-core@npm:1.58.0" +"playwright-core@npm:1.58.1": + version: 1.58.1 + resolution: "playwright-core@npm:1.58.1" bin: playwright-core: cli.js - checksum: 10c0/72f59ffed79357f3042ba8ebced54d63a1bdb01e4422e1d3238415ac1ee25254d4a1809f77c562045fc25805e71ad3de8e8ac0e3521e48b9c6f108cd5419ec48 + checksum: 10c0/2c12755579148cbd13811cc1a01e9693432f0e4595c76ebb02d2e1b4ee7286719c6769fdb26cda61f218bc49b7ddd4de5d856abbd034acde4ff3dbeee93e4773 languageName: node linkType: hard -"playwright@npm:1.58.0": - version: 1.58.0 - resolution: "playwright@npm:1.58.0" +"playwright@npm:1.58.1": + version: 1.58.1 + resolution: "playwright@npm:1.58.1" dependencies: fsevents: "npm:2.3.2" - playwright-core: "npm:1.58.0" + playwright-core: "npm:1.58.1" dependenciesMeta: fsevents: optional: true bin: playwright: cli.js - checksum: 10c0/f0565966a485f0bf0748897c19aa403f97c4c83bb936b7dfc6b2f1c056d4befb24810f451e4b8cb760db3733bfef1cf7f00b369664637e48befd6fe9e42f541a + checksum: 10c0/29cb2b34ad80f9dc1b27d26d8cf56e0964d7787e0beb18b25fd9d087a09ce56a359779104d2a1717d08789c2f2713928ef59140b2905e6ef00b2cb6df58bb107 languageName: node linkType: hard @@ -6242,14 +6233,14 @@ __metadata: version: 0.0.0-use.local resolution: "service@workspace:service" dependencies: - "@furystack/core": "npm:^15.0.32" - "@furystack/filesystem-store": "npm:^7.0.32" - "@furystack/inject": "npm:^12.0.26" - "@furystack/logging": "npm:^8.0.26" - "@furystack/repository": "npm:^10.0.32" - "@furystack/rest-service": "npm:^10.1.3" - "@furystack/security": "npm:^6.0.32" - "@types/node": "npm:^25.0.10" + "@furystack/core": "npm:^15.0.34" + "@furystack/filesystem-store": "npm:^7.0.34" + "@furystack/inject": "npm:^12.0.28" + "@furystack/logging": "npm:^8.0.28" + "@furystack/repository": "npm:^10.0.34" + "@furystack/rest-service": "npm:^11.0.2" + "@furystack/security": "npm:^6.0.34" + "@types/node": "npm:^25.1.0" common: "workspace:^" typescript: "npm:^5.9.3" vitest: "npm:^4.0.18" @@ -6982,18 +6973,18 @@ __metadata: languageName: node linkType: hard -"typescript-eslint@npm:^8.53.1": - version: 8.53.1 - resolution: "typescript-eslint@npm:8.53.1" +"typescript-eslint@npm:^8.54.0": + version: 8.54.0 + resolution: "typescript-eslint@npm:8.54.0" dependencies: - "@typescript-eslint/eslint-plugin": "npm:8.53.1" - "@typescript-eslint/parser": "npm:8.53.1" - "@typescript-eslint/typescript-estree": "npm:8.53.1" - "@typescript-eslint/utils": "npm:8.53.1" + "@typescript-eslint/eslint-plugin": "npm:8.54.0" + "@typescript-eslint/parser": "npm:8.54.0" + "@typescript-eslint/typescript-estree": "npm:8.54.0" + "@typescript-eslint/utils": "npm:8.54.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/520d68df8e1e1bba99c2713029b63837b101370c460bf5e75b8065fb0a6bc1ac9c6eb967432dbc220464479fe981630a6b2eddf31cfb378441ee8b8a43c0eb5a + checksum: 10c0/0ba92aa22c0aa10c88b0f4732950ed64245947f1c4ac17328dff94b43eaeddd3068595788725781fba07a87cc964304a075b3e37f9a86312173498fcc6ab4338 languageName: node linkType: hard From 54ab2dd8efe192c50ceda7cb4e62cd4542d55b50 Mon Sep 17 00:00:00 2001 From: Gallay Lajos Date: Mon, 2 Feb 2026 08:14:57 +0100 Subject: [PATCH 2/5] css refactorings --- frontend/src/components/header.tsx | 28 +++++++++++----- frontend/src/components/layout.tsx | 36 ++++++++++---------- frontend/src/pages/hello-world.tsx | 32 +++++++++--------- frontend/src/pages/init.tsx | 41 ++++++++++------------- frontend/src/pages/login.tsx | 53 ++++++++++++++++-------------- frontend/src/pages/offline.tsx | 16 +++++++++ 6 files changed, 115 insertions(+), 91 deletions(-) diff --git a/frontend/src/components/header.tsx b/frontend/src/components/header.tsx index 6b95cc4..4df43a8 100644 --- a/frontend/src/components/header.tsx +++ b/frontend/src/components/header.tsx @@ -5,30 +5,40 @@ import { SessionService } from '../services/session.js' import { GithubLogo } from './github-logo/index.js' import { ThemeSwitch } from './theme-switch/index.js' -export interface HeaderProps { +export type HeaderProps = { title: string links: Array<{ name: string; url: string }> } -const urlStyle: Partial = { - color: '#aaa', - textDecoration: 'none', -} - export const Header = Shade({ shadowDomName: 'shade-app-header', + css: { + '& a[is="route-link"]': { + color: '#aaa', + textDecoration: 'none', + cursor: 'pointer', + transition: 'color 0.2s ease', + }, + '& a[is="route-link"]:hover': { + color: '#fff', + }, + '& a[is="route-link"]:focus': { + outline: '2px solid #aaa', + outlineOffset: '2px', + }, + }, render: ({ props, injector, useObservable }) => { const [sessionState] = useObservable('sessionState', injector.getInstance(SessionService).state) return ( -

- +

+ {props.title}

{props.links.map((link) => ( - + {link.name || ''} ))} diff --git a/frontend/src/components/layout.tsx b/frontend/src/components/layout.tsx index bd5fce1..5df929a 100644 --- a/frontend/src/components/layout.tsx +++ b/frontend/src/components/layout.tsx @@ -1,29 +1,27 @@ import { createComponent, Shade } from '@furystack/shades' -import { ThemeProviderService } from '@furystack/shades-common-components' +import { cssVariableTheme } from '@furystack/shades-common-components' import { Body } from './body.js' import { Header } from './header.js' export const Layout = Shade({ shadowDomName: 'shade-app-layout', - render: ({ injector }) => { + css: { + position: 'fixed', + top: '0', + left: '0', + width: '100%', + height: '100%', + display: 'flex', + flexDirection: 'column', + lineHeight: '1.6', + overflow: 'hidden', + padding: '0', + margin: '0', + backgroundColor: cssVariableTheme.background.default, + }, + render: () => { return ( -
+
diff --git a/frontend/src/pages/hello-world.tsx b/frontend/src/pages/hello-world.tsx index 48211cd..afffb91 100644 --- a/frontend/src/pages/hello-world.tsx +++ b/frontend/src/pages/hello-world.tsx @@ -1,27 +1,30 @@ import { Shade, createComponent } from '@furystack/shades' -import { ThemeProviderService } from '@furystack/shades-common-components' +import { cssVariableTheme } from '@furystack/shades-common-components' import { SessionService } from '../services/session.js' export const HelloWorld = Shade({ shadowDomName: 'hello-world', + css: { + overflow: 'auto', + paddingTop: '64px', + '& .content': { + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + color: cssVariableTheme.text.secondary, + }, + '& .content-body': { + margin: '2em', + }, + }, render: ({ useObservable, injector }) => { const [currentUser] = useObservable('userName', injector.getInstance(SessionService).currentUser) - const { theme } = injector.getInstance(ThemeProviderService) return ( -
-
+

Hello, {currentUser?.username || 'unknown'} !

-
+

Egyesült Államok

A nagy múltú szórakoztató- és divatmagazin, a Cosmopolitan egyik 1967-es száma lelkes hangvételű, bíztató @@ -84,7 +87,6 @@ export const HelloWorld = Shade({

-
) }, }) diff --git a/frontend/src/pages/init.tsx b/frontend/src/pages/init.tsx index 80f91a9..2ac39e8 100644 --- a/frontend/src/pages/init.tsx +++ b/frontend/src/pages/init.tsx @@ -3,32 +3,27 @@ import { Loader } from '@furystack/shades-common-components' export const Init = Shade({ shadowDomName: 'shade-init', + css: { + display: 'flex', + height: '100%', + alignItems: 'center', + justifyContent: 'center', + '& .initLoader': { + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + }, + }, render: () => ( -
-
+ - -

Initializing app...

-
+ /> +

Initializing app...

), }) diff --git a/frontend/src/pages/login.tsx b/frontend/src/pages/login.tsx index 59b2825..53f6a5a 100644 --- a/frontend/src/pages/login.tsx +++ b/frontend/src/pages/login.tsx @@ -1,29 +1,41 @@ import { Shade, createComponent } from '@furystack/shades' -import { Button, Form, Input, Paper } from '@furystack/shades-common-components' +import { Button, cssVariableTheme, Form, Input, Paper } from '@furystack/shades-common-components' import { SessionService } from '../services/session.js' type LoginPayload = { userName: string; password: string } export const Login = Shade({ shadowDomName: 'shade-login', + css: { + display: 'flex', + flexDirection: 'column', + height: '100%', + alignItems: 'center', + justifyContent: 'center', + padding: '0 100px', + paddingTop: '100px', + '& .form-actions': { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + flexDirection: 'row', + padding: '1em 0', + }, + '& .error-message': { + color: cssVariableTheme.palette.error.main, + fontSize: '12px', + }, + '& .helper-text': { + fontSize: '10px', + }, + }, render: ({ injector, useObservable }) => { const sessionService = injector.getInstance(SessionService) const [isOperationInProgress] = useObservable('isOperationInProgress', sessionService.isOperationInProgress) const [error] = useObservable('loginError', sessionService.loginError) return ( -
- + className="login-form" validate={(data): data is LoginPayload => { @@ -51,22 +63,13 @@ export const Login = Shade({ getHelperText={() => 'The password for the user'} type="password" /> -
- {error ?
{error}
:
} +
+ {error ?
{error}
:
}
-

You can login with the default 'testuser' / 'password' credentials

+

You can login with the default 'testuser' / 'password' credentials

-
) }, }) diff --git a/frontend/src/pages/offline.tsx b/frontend/src/pages/offline.tsx index ecf3490..bfc9f0d 100644 --- a/frontend/src/pages/offline.tsx +++ b/frontend/src/pages/offline.tsx @@ -1,8 +1,24 @@ import { Shade, createComponent } from '@furystack/shades' +import { cssVariableTheme } from '@furystack/shades-common-components' import { environmentOptions } from '../environment-options.js' export const Offline = Shade({ shadowDomName: 'shade-offline', + css: { + '& a': { + color: cssVariableTheme.palette.primary.main, + textDecoration: 'none', + transition: 'color 0.2s ease', + }, + '& a:hover': { + color: cssVariableTheme.palette.primary.light, + textDecoration: 'underline', + }, + '& a:focus': { + outline: `2px solid ${cssVariableTheme.palette.primary.main}`, + outlineOffset: '2px', + }, + }, render: () => { return (
Date: Mon, 2 Feb 2026 08:16:06 +0100 Subject: [PATCH 3/5] format fix --- frontend/src/pages/hello-world.tsx | 124 ++++++++++++++--------------- frontend/src/pages/login.tsx | 68 ++++++++-------- 2 files changed, 95 insertions(+), 97 deletions(-) diff --git a/frontend/src/pages/hello-world.tsx b/frontend/src/pages/hello-world.tsx index afffb91..88ff5a9 100644 --- a/frontend/src/pages/hello-world.tsx +++ b/frontend/src/pages/hello-world.tsx @@ -22,71 +22,69 @@ export const HelloWorld = Shade({ const [currentUser] = useObservable('userName', injector.getInstance(SessionService).currentUser) return (
-

Hello, {currentUser?.username || 'unknown'} !

+

Hello, {currentUser?.username || 'unknown'} !

-
-

Egyesült Államok

-

- A nagy múltú szórakoztató- és divatmagazin, a Cosmopolitan egyik 1967-es száma lelkes hangvételű, bíztató - cikket közölt arról, milyen nagy jövő vár a nőkre a programozás területén. A cikk további érdekessége, - hogy benne épp Grace Hoppert – a számítástechnika területén lenyűgöző újdonságokat megalkotó programozónőt - – idézik, aki szerint: „Programozni olyan, mint megtervezni egy vacsorát […] előre kell tervezni és - időzíteni, így minden készen lesz, amikor szükség van rá. -

-

- Bár ennek a kijelentésnek feltételezhetően az a célja, hogy a programozói pályára bátorítsa a nőket, - valószínűleg nem segít abban, hogy kevésbé sztereotipikusan, komplex és értékes feladatként tekintsenek a - programozásra. -

-

- Nehéz pontos statisztikát találnunk arról, mennyi női és férfi programozó volt az egyes évtizedekben, - hiszen az, hogy hányan végeztek számítástechnikai szakokon, még nem mutatja meg, mennyien dolgoztak utána - a területen. Fordítva is igaz ez, nem feltétlenül az egyetemi képzésekről kikerülők végezték mindig a - programozói feladatokat, ahogy napjainkban sem. -

-

- Az 1980-as évek első felében az Egyesült Államokban az informatikai diplomával rendelkezők 37%-a volt nő, - összességében a munkavállalók között pedig még többségben voltak ezen a területen. Ezután következett a - fordulópont, a nők részvétele a számítástechnikai felsőoktatásban és a munkaerőpiacon a következő - évtizedekben drasztikusan csökkent. A 2010-es években a hallgatók kb. 20%-a volt nő, és az IT szektor - munkavállalóira is hasonló arány jellemző. -

-

Európa

-

- Az európai munkaerőpiac helyzetéről, foglalkoztatottsági arányokról, a különböző területeken dolgozók - számának változásáról az Eurostat készít részletes felmérést. Alapos kutatásaik eredményei számos - érdekességgel szolgálnak, nem csak a nemek arányára vonatkozóan. -

-

- Az Eurostat vizsgálata nem kifejezetten a programozói szakmára irányul, hanem a programozást magába - foglaló területet, az infokommunikációt (IKT, angol rövidítése ICT) veszik górcső alá. Európában az IKT - területen egyértelműen a férfiak dominálnak, a munkavállalók 83,5%-át teszik ki. -

-

- Bár a nők száma nőtt a területen (1.071.500-ról 1.231.700-ra), arányuk mégis csökkent az elmúlt 10 évben, - hiszen maga a terület olyan dinamikusan növekszik, hogy az arányok megváltoztatásához ez a - létszámgyarapodás nem elég. 2008-ban az IKT területen dolgozók 22%-a volt nő, 2018-ra ez az arány 16,5%-ra - csökkent az EU-ban. -

-

- A 2008-as adatok még több országban kiegyenlítettebb viszonyokat mutatnak a maiaknál. Lehetséges, hogy a - szovjet éra utóhatását tükrözik ezek a számok, például Bulgáriában, Észtországban, Litvániában, - Magyarországon és Romániában is kiegyenlítettebb volt a nemek aránya (65% férfi, 35% nő). A volt szovjet - hatalmi blokk országaiban jellemző volt, hogy a hagyományos nemi szerepektől eltérő munkakörökben is - képviseltetik magukat a nők (gondolhatunk a traktorista lányok toborzására például). Ebben a - blogbejegyzésben a szerző arról ír, hogy amikor az édesanyja tanult programozni, (az 1970-es években, a - Szovjetunióban) az osztály 100%-ban nőkből állt, illetve, hogy a programozás nem maszkulin munkának - számított. A BBC oldalán található cikkben szintén olvashatunk arról, hogyan vonták be a gazdasági - prioritásnak számító technológiai fejlődésbe a nőket is és hogyan tették számukra is egyformán elérhetővé - a képzést mérnöki, programozói, matematikai területen. -

-

- Mára ezekben az országokban is az európai átlaghoz közelebbi arányok jellemzők. A női IKT szakemberek - aránya 2019-ben Bulgáriában a legmagasabb (28%) és Magyarországon a legalacsonyabb (10,6%) az Európai - Unióban. -

-
+
+

Egyesült Államok

+

+ A nagy múltú szórakoztató- és divatmagazin, a Cosmopolitan egyik 1967-es száma lelkes hangvételű, bíztató + cikket közölt arról, milyen nagy jövő vár a nőkre a programozás területén. A cikk további érdekessége, hogy + benne épp Grace Hoppert – a számítástechnika területén lenyűgöző újdonságokat megalkotó programozónőt – + idézik, aki szerint: „Programozni olyan, mint megtervezni egy vacsorát […] előre kell tervezni és időzíteni, + így minden készen lesz, amikor szükség van rá. +

+

+ Bár ennek a kijelentésnek feltételezhetően az a célja, hogy a programozói pályára bátorítsa a nőket, + valószínűleg nem segít abban, hogy kevésbé sztereotipikusan, komplex és értékes feladatként tekintsenek a + programozásra. +

+

+ Nehéz pontos statisztikát találnunk arról, mennyi női és férfi programozó volt az egyes évtizedekben, hiszen + az, hogy hányan végeztek számítástechnikai szakokon, még nem mutatja meg, mennyien dolgoztak utána a + területen. Fordítva is igaz ez, nem feltétlenül az egyetemi képzésekről kikerülők végezték mindig a + programozói feladatokat, ahogy napjainkban sem. +

+

+ Az 1980-as évek első felében az Egyesült Államokban az informatikai diplomával rendelkezők 37%-a volt nő, + összességében a munkavállalók között pedig még többségben voltak ezen a területen. Ezután következett a + fordulópont, a nők részvétele a számítástechnikai felsőoktatásban és a munkaerőpiacon a következő + évtizedekben drasztikusan csökkent. A 2010-es években a hallgatók kb. 20%-a volt nő, és az IT szektor + munkavállalóira is hasonló arány jellemző. +

+

Európa

+

+ Az európai munkaerőpiac helyzetéről, foglalkoztatottsági arányokról, a különböző területeken dolgozók + számának változásáról az Eurostat készít részletes felmérést. Alapos kutatásaik eredményei számos + érdekességgel szolgálnak, nem csak a nemek arányára vonatkozóan. +

+

+ Az Eurostat vizsgálata nem kifejezetten a programozói szakmára irányul, hanem a programozást magába foglaló + területet, az infokommunikációt (IKT, angol rövidítése ICT) veszik górcső alá. Európában az IKT területen + egyértelműen a férfiak dominálnak, a munkavállalók 83,5%-át teszik ki. +

+

+ Bár a nők száma nőtt a területen (1.071.500-ról 1.231.700-ra), arányuk mégis csökkent az elmúlt 10 évben, + hiszen maga a terület olyan dinamikusan növekszik, hogy az arányok megváltoztatásához ez a létszámgyarapodás + nem elég. 2008-ban az IKT területen dolgozók 22%-a volt nő, 2018-ra ez az arány 16,5%-ra csökkent az EU-ban. +

+

+ A 2008-as adatok még több országban kiegyenlítettebb viszonyokat mutatnak a maiaknál. Lehetséges, hogy a + szovjet éra utóhatását tükrözik ezek a számok, például Bulgáriában, Észtországban, Litvániában, + Magyarországon és Romániában is kiegyenlítettebb volt a nemek aránya (65% férfi, 35% nő). A volt szovjet + hatalmi blokk országaiban jellemző volt, hogy a hagyományos nemi szerepektől eltérő munkakörökben is + képviseltetik magukat a nők (gondolhatunk a traktorista lányok toborzására például). Ebben a + blogbejegyzésben a szerző arról ír, hogy amikor az édesanyja tanult programozni, (az 1970-es években, a + Szovjetunióban) az osztály 100%-ban nőkből állt, illetve, hogy a programozás nem maszkulin munkának + számított. A BBC oldalán található cikkben szintén olvashatunk arról, hogyan vonták be a gazdasági + prioritásnak számító technológiai fejlődésbe a nőket is és hogyan tették számukra is egyformán elérhetővé a + képzést mérnöki, programozói, matematikai területen. +

+

+ Mára ezekben az országokban is az európai átlaghoz közelebbi arányok jellemzők. A női IKT szakemberek aránya + 2019-ben Bulgáriában a legmagasabb (28%) és Magyarországon a legalacsonyabb (10,6%) az Európai Unióban. +

+
) }, }) diff --git a/frontend/src/pages/login.tsx b/frontend/src/pages/login.tsx index 53f6a5a..adbd8da 100644 --- a/frontend/src/pages/login.tsx +++ b/frontend/src/pages/login.tsx @@ -36,40 +36,40 @@ export const Login = Shade({ return ( - - className="login-form" - validate={(data): data is LoginPayload => { - return (data as LoginPayload).userName?.length > 0 && (data as LoginPayload).password?.length > 0 - }} - onSubmit={({ userName, password }) => { - void sessionService.login(userName, password) - }} - > -

Login

- "The user's login name"} - type="text" - /> - 'The password for the user'} - type="password" - /> -
- {error ?
{error}
:
} - -
-

You can login with the default 'testuser' / 'password' credentials

- - + + className="login-form" + validate={(data): data is LoginPayload => { + return (data as LoginPayload).userName?.length > 0 && (data as LoginPayload).password?.length > 0 + }} + onSubmit={({ userName, password }) => { + void sessionService.login(userName, password) + }} + > +

Login

+ "The user's login name"} + type="text" + /> + 'The password for the user'} + type="password" + /> +
+ {error ?
{error}
:
} + +
+

You can login with the default 'testuser' / 'password' credentials

+ + ) }, }) From 006c090248bb9c3eba1c9402b50de2f1764feb24 Mon Sep 17 00:00:00 2001 From: Gallay Lajos Date: Mon, 2 Feb 2026 08:18:16 +0100 Subject: [PATCH 4/5] renamed test:unit npm script to test --- .cursor/agents/reviewer-tests.md | 4 +- .cursor/rules/CODE_STYLE.mdc | 4 +- .cursor/rules/TESTING_GUIDELINES.mdc | 206 ++++++++++----------- .github/workflows/build-test.yml | 2 +- .github/workflows/publish-to-dockerhub.yml | 2 +- README.md | 2 +- azure-pipelines.yml | 2 +- package.json | 2 +- 8 files changed, 112 insertions(+), 112 deletions(-) diff --git a/.cursor/agents/reviewer-tests.md b/.cursor/agents/reviewer-tests.md index c464399..6faa49f 100644 --- a/.cursor/agents/reviewer-tests.md +++ b/.cursor/agents/reviewer-tests.md @@ -7,11 +7,11 @@ You are a unit test and coverage reviewer for code reviews. ## When Invoked -**IMPORTANT:** Run `yarn test:unit` exactly ONCE. Do NOT re-run the command for any reason (verification, double-checking, etc.). Base your entire report on the single execution. +**IMPORTANT:** Run `yarn test` exactly ONCE. Do NOT re-run the command for any reason (verification, double-checking, etc.). Base your entire report on the single execution. ### Step 1: Run Unit Tests -1. Run `yarn test:unit` once to execute all unit tests +1. Run `yarn test` once to execute all unit tests 2. Analyze the exit code and output from that single run 3. If any tests fail, report them as **Critical Issues** diff --git a/.cursor/rules/CODE_STYLE.mdc b/.cursor/rules/CODE_STYLE.mdc index 13b1502..ee78674 100644 --- a/.cursor/rules/CODE_STYLE.mdc +++ b/.cursor/rules/CODE_STYLE.mdc @@ -661,8 +661,8 @@ const count = 0 **Tools:** -- Prettier: `yarn prettier` +- Prettier: `yarn format` - ESLint: `yarn lint` - Type Check: `yarn build` -- Unit Tests: `yarn test:unit` +- Unit Tests: `yarn test` - E2E Tests: `yarn test:e2e` diff --git a/.cursor/rules/TESTING_GUIDELINES.mdc b/.cursor/rules/TESTING_GUIDELINES.mdc index 18cdf72..6a85313 100644 --- a/.cursor/rules/TESTING_GUIDELINES.mdc +++ b/.cursor/rules/TESTING_GUIDELINES.mdc @@ -18,7 +18,7 @@ The project uses Vitest for unit testing with workspace-based configuration: ```typescript // vitest.config.mts -import { defineConfig } from 'vitest/config'; +import { defineConfig } from 'vitest/config' export default defineConfig({ test: { @@ -48,7 +48,7 @@ export default defineConfig({ }, ], }, -}); +}) ``` ### Playwright for E2E Tests @@ -57,8 +57,8 @@ E2E tests use Playwright with the service auto-started: ```typescript // playwright.config.ts -import type { PlaywrightTestConfig } from '@playwright/test'; -import { devices } from '@playwright/test'; +import type { PlaywrightTestConfig } from '@playwright/test' +import { devices } from '@playwright/test' const config: PlaywrightTestConfig = { testDir: 'e2e', @@ -76,7 +76,7 @@ const config: PlaywrightTestConfig = { { name: 'chromium', use: { ...devices['Desktop Chrome'] } }, { name: 'firefox', use: { ...devices['Desktop Firefox'] } }, ], -}; +} ``` ## Unit Testing with Vitest @@ -98,22 +98,22 @@ service/src/ Use `describe`, `it`, and `expect` from Vitest: ```typescript -import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; +import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest' describe('MyService', () => { describe('methodName', () => { it('should do something when condition', () => { // Arrange - const input = 'test'; - + const input = 'test' + // Act - const result = myFunction(input); - + const result = myFunction(input) + // Assert - expect(result).toBe('expected'); - }); - }); -}); + expect(result).toBe('expected') + }) + }) +}) ``` ### Testing Services @@ -121,27 +121,27 @@ describe('MyService', () => { Test service methods with mocked dependencies: ```typescript -import { describe, it, expect, vi, beforeEach } from 'vitest'; -import { Injector } from '@furystack/inject'; +import { describe, it, expect, vi, beforeEach } from 'vitest' +import { Injector } from '@furystack/inject' describe('SessionService', () => { - let injector: Injector; - let sessionService: SessionService; - + let injector: Injector + let sessionService: SessionService + beforeEach(() => { - injector = new Injector(); + injector = new Injector() // Set up mocks const mockApiClient = { call: vi.fn(), - }; - injector.setExplicitInstance(BoilerplateApiClient, mockApiClient); - sessionService = injector.getInstance(SessionService); - }); - + } + injector.setExplicitInstance(BoilerplateApiClient, mockApiClient) + sessionService = injector.getInstance(SessionService) + }) + it('should initialize with unauthenticated state', async () => { - expect(sessionService.state.getValue()).toBe('initializing'); - }); -}); + expect(sessionService.state.getValue()).toBe('initializing') + }) +}) ``` ### Mocking with Vitest @@ -149,24 +149,24 @@ describe('SessionService', () => { Use `vi.fn()` for function mocks and `vi.spyOn()` for spying: ```typescript -import { vi } from 'vitest'; +import { vi } from 'vitest' // Mock a function -const mockFn = vi.fn().mockReturnValue('mocked'); +const mockFn = vi.fn().mockReturnValue('mocked') // Mock with implementation -const mockFn = vi.fn().mockImplementation((arg) => `result: ${arg}`); +const mockFn = vi.fn().mockImplementation((arg) => `result: ${arg}`) // Mock async function -const mockAsync = vi.fn().mockResolvedValue({ data: 'test' }); +const mockAsync = vi.fn().mockResolvedValue({ data: 'test' }) // Spy on method -const spy = vi.spyOn(service, 'method'); +const spy = vi.spyOn(service, 'method') // Verify calls -expect(mockFn).toHaveBeenCalled(); -expect(mockFn).toHaveBeenCalledWith('arg'); -expect(mockFn).toHaveBeenCalledTimes(2); +expect(mockFn).toHaveBeenCalled() +expect(mockFn).toHaveBeenCalledWith('arg') +expect(mockFn).toHaveBeenCalledTimes(2) ``` ### Testing Observable Values @@ -174,21 +174,21 @@ expect(mockFn).toHaveBeenCalledTimes(2); Test ObservableValue subscriptions: ```typescript -import { ObservableValue } from '@furystack/utils'; +import { ObservableValue } from '@furystack/utils' describe('ObservableValue', () => { it('should notify subscribers on value change', () => { - const observable = new ObservableValue('initial'); - const values: string[] = []; - - const subscription = observable.subscribe((value) => values.push(value)); - observable.setValue('updated'); - - expect(values).toEqual(['initial', 'updated']); - - subscription.dispose(); - }); -}); + const observable = new ObservableValue('initial') + const values: string[] = [] + + const subscription = observable.subscribe((value) => values.push(value)) + observable.setValue('updated') + + expect(values).toEqual(['initial', 'updated']) + + subscription.dispose() + }) +}) ``` ## E2E Testing with Playwright @@ -209,26 +209,26 @@ e2e/ Use Playwright's test API: ```typescript -import { expect, test } from '@playwright/test'; +import { expect, test } from '@playwright/test' test.describe('Feature Name', () => { test('should do something', async ({ page }) => { // Navigate - await page.goto('/'); - + await page.goto('/') + // Find elements - const element = page.locator('selector'); - + const element = page.locator('selector') + // Assert visibility - await expect(element).toBeVisible(); - + await expect(element).toBeVisible() + // Interact - await element.click(); - + await element.click() + // Assert result - await expect(page.locator('.result')).toHaveText('Expected'); - }); -}); + await expect(page.locator('.result')).toHaveText('Expected') + }) +}) ``` ### Locating Shades Components @@ -238,21 +238,21 @@ Use shadow DOM component names as selectors: ```typescript test('should interact with Shades components', async ({ page }) => { // Locate by shadow DOM name - const loginForm = page.locator('shade-login form'); - await expect(loginForm).toBeVisible(); - + const loginForm = page.locator('shade-login form') + await expect(loginForm).toBeVisible() + // Locate inputs within components - const usernameInput = loginForm.locator('input[name="userName"]'); - const passwordInput = loginForm.locator('input[name="password"]'); - + const usernameInput = loginForm.locator('input[name="userName"]') + const passwordInput = loginForm.locator('input[name="password"]') + // Fill inputs - await usernameInput.type('testuser'); - await passwordInput.type('password'); - + await usernameInput.type('testuser') + await passwordInput.type('password') + // Click buttons - const submitButton = page.locator('button', { hasText: 'Login' }); - await submitButton.click(); -}); + const submitButton = page.locator('button', { hasText: 'Login' }) + await submitButton.click() +}) ``` ### Authentication Flow Test @@ -260,36 +260,36 @@ test('should interact with Shades components', async ({ page }) => { Example of testing login/logout: ```typescript -import { expect, test } from '@playwright/test'; +import { expect, test } from '@playwright/test' test.describe('Authentication', () => { test('Login and logout roundtrip', async ({ page }) => { - await page.goto('/'); - + await page.goto('/') + // Wait for login form - const loginForm = page.locator('shade-login form'); - await expect(loginForm).toBeVisible(); - + const loginForm = page.locator('shade-login form') + await expect(loginForm).toBeVisible() + // Fill credentials - await loginForm.locator('input[name="userName"]').type('testuser'); - await loginForm.locator('input[name="password"]').type('password'); - + await loginForm.locator('input[name="userName"]').type('testuser') + await loginForm.locator('input[name="password"]').type('password') + // Submit - await page.locator('button', { hasText: 'Login' }).click(); - + await page.locator('button', { hasText: 'Login' }).click() + // Verify logged in state - const welcomeTitle = page.locator('hello-world div h2'); - await expect(welcomeTitle).toBeVisible(); - await expect(welcomeTitle).toHaveText('Hello, testuser !'); - + const welcomeTitle = page.locator('hello-world div h2') + await expect(welcomeTitle).toBeVisible() + await expect(welcomeTitle).toHaveText('Hello, testuser !') + // Logout - const logoutButton = page.locator('shade-app-bar button >> text="Log Out"'); - await logoutButton.click(); - + const logoutButton = page.locator('shade-app-bar button >> text="Log Out"') + await logoutButton.click() + // Verify logged out - await expect(page.locator('shade-login form')).toBeVisible(); - }); -}); + await expect(page.locator('shade-login form')).toBeVisible() + }) +}) ``` ### Waiting for Elements @@ -298,14 +298,14 @@ Use Playwright's auto-waiting or explicit waits: ```typescript // Auto-wait (recommended) -await expect(element).toBeVisible(); +await expect(element).toBeVisible() // Explicit wait -await page.waitForSelector('selector'); -await page.waitForLoadState('networkidle'); +await page.waitForSelector('selector') +await page.waitForLoadState('networkidle') // Wait for response -await page.waitForResponse('**/api/endpoint'); +await page.waitForResponse('**/api/endpoint') ``` ## Running Tests @@ -314,16 +314,16 @@ await page.waitForResponse('**/api/endpoint'); ```bash # Run all unit tests -yarn test:unit +yarn test # Run with coverage -yarn test:unit --coverage +yarn test --coverage # Run specific workspace -yarn test:unit --project=Service +yarn test --project=Service # Watch mode -yarn test:unit --watch +yarn test --watch ``` ### E2E Tests @@ -391,7 +391,7 @@ coverage: { **Commands:** -- Unit tests: `yarn test:unit` +- Unit tests: `yarn test` - E2E tests: `yarn test:e2e` -- Coverage: `yarn test:unit --coverage` +- Coverage: `yarn test --coverage` - Debug E2E: `yarn playwright test --debug` diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 3af41e2..ba1a3da 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -29,7 +29,7 @@ jobs: - name: Recreate JSON Schemas run: yarn create-schemas && yarn build # an incremental rebuild is necessary to use the updated schema - name: Test - run: yarn test:unit + run: yarn test - uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/publish-to-dockerhub.yml b/.github/workflows/publish-to-dockerhub.yml index ecfcf82..e0bb281 100644 --- a/.github/workflows/publish-to-dockerhub.yml +++ b/.github/workflows/publish-to-dockerhub.yml @@ -43,7 +43,7 @@ jobs: run: yarn lint - name: Test - run: yarn test:unit + run: yarn test - name: Apply release changes run: yarn applyReleaseChanges diff --git a/README.md b/README.md index 68490d1..f6c62a4 100644 --- a/README.md +++ b/README.md @@ -10,5 +10,5 @@ Boilerplate app with common type api definitions, a furystack-based backend serv # Testing -- You can execute the example Vitest tests with `yarn test:unit` +- You can execute the example Vitest tests with `yarn test` - You can execute E2E tests with `yarn test:e2e` diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 7b899c0..a65ebfb 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -31,7 +31,7 @@ steps: - script: yarn lint displayName: 'Yarn Lint' - - script: yarn test:unit + - script: yarn test displayName: 'Unit tests' - script: yarn playwright install --with-deps diff --git a/package.json b/package.json index c2fffeb..354c9c3 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "create-schemas": "yarn workspace common create-schemas", "seed": "yarn workspace service seed", "test:e2e": "yarn playwright test", - "test:unit": "vitest", + "test": "vitest", "start:service": "yarn workspace service start", "start:frontend": "yarn workspace frontend start", "clean": "rimraf service/dist frontend/dist **/tsconfig.tsbuildinfo tsconfig.tsbuildinfo common/dist", From ac5fbdc5f345abc661e1f926c77266de99ae77db Mon Sep 17 00:00:00 2001 From: Gallay Lajos Date: Mon, 2 Feb 2026 08:21:55 +0100 Subject: [PATCH 5/5] adjusted versions and changelogs --- .yarn/changelogs/common.d3ee42b5.md | 7 +++++ .yarn/changelogs/frontend.d3ee42b5.md | 27 +++++++++++++++++++ .../furystack-boilerplate-app.d3ee42b5.md | 19 +++++++++++++ .yarn/changelogs/service.d3ee42b5.md | 13 +++++++++ .yarn/versions/d3ee42b5.yml | 5 ++++ 5 files changed, 71 insertions(+) create mode 100644 .yarn/changelogs/common.d3ee42b5.md create mode 100644 .yarn/changelogs/frontend.d3ee42b5.md create mode 100644 .yarn/changelogs/furystack-boilerplate-app.d3ee42b5.md create mode 100644 .yarn/changelogs/service.d3ee42b5.md create mode 100644 .yarn/versions/d3ee42b5.yml diff --git a/.yarn/changelogs/common.d3ee42b5.md b/.yarn/changelogs/common.d3ee42b5.md new file mode 100644 index 0000000..e1476f7 --- /dev/null +++ b/.yarn/changelogs/common.d3ee42b5.md @@ -0,0 +1,7 @@ + +# common + +## ⬆️ Dependencies + +- Updated `@furystack/rest` from ^8.0.32 to ^8.0.34 +- Updated `@types/node` from ^25.0.10 to ^25.1.0 diff --git a/.yarn/changelogs/frontend.d3ee42b5.md b/.yarn/changelogs/frontend.d3ee42b5.md new file mode 100644 index 0000000..b918c81 --- /dev/null +++ b/.yarn/changelogs/frontend.d3ee42b5.md @@ -0,0 +1,27 @@ + +# frontend + +## ♻️ Refactoring + +### Migrated from inline styles to CSS property with theme variables + +Replaced inline styles with the `css` component property and migrated from `ThemeProviderService` injection to `cssVariableTheme` for theming. This approach leverages CSS variables for better performance and consistency. + +**Affected components:** +- `header.tsx` - Link styling with hover and focus states +- `layout.tsx` - Root layout container styles +- `hello-world.tsx` - Page content structure and typography +- `init.tsx` - Loading state layout +- `login.tsx` - Form styling with error and helper text states +- `offline.tsx` - Link styling with accessibility-friendly focus states + +## ⬆️ Dependencies + +- Updated `@furystack/core` from ^15.0.32 to ^15.0.34 +- Updated `@furystack/inject` from ^12.0.26 to ^12.0.28 +- Updated `@furystack/logging` from ^8.0.26 to ^8.0.28 +- Updated `@furystack/rest-client-fetch` from ^8.0.32 to ^8.0.34 +- Updated `@furystack/shades` from ^11.0.33 to ^11.1.0 +- Updated `@furystack/shades-common-components` from ^10.0.33 to ^11.0.0 (major version bump with `cssVariableTheme` support) +- Updated `@furystack/utils` from ^8.1.8 to ^8.1.9 +- Updated `@types/node` from ^25.0.10 to ^25.1.0 diff --git a/.yarn/changelogs/furystack-boilerplate-app.d3ee42b5.md b/.yarn/changelogs/furystack-boilerplate-app.d3ee42b5.md new file mode 100644 index 0000000..01b9b97 --- /dev/null +++ b/.yarn/changelogs/furystack-boilerplate-app.d3ee42b5.md @@ -0,0 +1,19 @@ + +# furystack-boilerplate-app + +## 👷 CI + +### Updated release workflow to use develop branch + +Changed the Docker Hub publish workflow to use `develop` as the release branch instead of `master`. Releases are now triggered from `develop` and merged to `master` after successful deployment. + +- Renamed `test:unit` npm script to `test` for consistency with the FuryStack monorepo conventions + +## ⬆️ Dependencies + +- Updated `@furystack/yarn-plugin-changelog` from ^1.0.1 to ^1.0.2 +- Updated `@playwright/test` from ^1.58.0 to ^1.58.1 +- Updated `@types/node` from ^25.0.10 to ^25.1.0 +- Updated `eslint-plugin-jsdoc` from ^62.4.0 to ^62.5.0 +- Updated `eslint-plugin-playwright` from ^2.5.0 to ^2.5.1 +- Updated `typescript-eslint` from ^8.53.1 to ^8.54.0 diff --git a/.yarn/changelogs/service.d3ee42b5.md b/.yarn/changelogs/service.d3ee42b5.md new file mode 100644 index 0000000..14289d6 --- /dev/null +++ b/.yarn/changelogs/service.d3ee42b5.md @@ -0,0 +1,13 @@ + +# service + +## ⬆️ Dependencies + +- Updated `@furystack/core` from ^15.0.32 to ^15.0.34 +- Updated `@furystack/filesystem-store` from ^7.0.32 to ^7.0.34 +- Updated `@furystack/inject` from ^12.0.26 to ^12.0.28 +- Updated `@furystack/logging` from ^8.0.26 to ^8.0.28 +- Updated `@furystack/repository` from ^10.0.32 to ^10.0.34 +- Updated `@furystack/rest-service` from ^10.1.3 to ^11.0.2 (major version bump) +- Updated `@furystack/security` from ^6.0.32 to ^6.0.34 +- Updated `@types/node` from ^25.0.10 to ^25.1.0 diff --git a/.yarn/versions/d3ee42b5.yml b/.yarn/versions/d3ee42b5.yml new file mode 100644 index 0000000..6e6773b --- /dev/null +++ b/.yarn/versions/d3ee42b5.yml @@ -0,0 +1,5 @@ +releases: + common: patch + frontend: patch + furystack-boilerplate-app: patch + service: patch