Skip to content

Commit b99ea29

Browse files
committed
Fix type checking of skin-database
1 parent 8abcf9d commit b99ea29

File tree

10 files changed

+93
-50
lines changed

10 files changed

+93
-50
lines changed

docs/typescript-checking.md

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,19 @@ This document describes the TypeScript checking convention established for the W
66

77
Each TypeScript-enabled package in the monorepo now has a consistent `type-check` script that performs type checking without emitting files.
88

9+
**Progress: 4 out of 5 packages now passing! 🎉**
10+
911
### Package Status
1012

1113
#### ✅ Passing Packages
14+
1215
- **webamp**: Clean TypeScript compilation
1316
- **ani-cursor**: Clean TypeScript compilation
14-
- **webamp-docs**: Clean TypeScript compilation (after adding webamp workspace dependency)
17+
- **skin-database**: Clean TypeScript compilation (fixed JSZip types, Jest types, and Buffer compatibility issues)
18+
- **webamp-docs**: Clean TypeScript compilation
1519

1620
#### ❌ Failing Packages (Need fixes)
17-
- **skin-database**: 172 TypeScript errors (missing types, test setup issues)
21+
1822
- **webamp-modern**: 390+ TypeScript errors (conflicting type definitions, target issues)
1923

2024
## Convention
@@ -40,7 +44,7 @@ The root package.json contains a centralized script that runs type checking for
4044
```json
4145
{
4246
"scripts": {
43-
"type-check": "pnpm --filter webamp type-check && pnpm --filter ani-cursor type-check && pnpm --filter webamp-docs type-check"
47+
"type-check": "pnpm --filter webamp type-check && pnpm --filter ani-cursor type-check && pnpm --filter skin-database type-check && pnpm --filter webamp-docs type-check"
4448
}
4549
}
4650
```
@@ -69,19 +73,28 @@ When adding a new TypeScript package to the type-check convention:
6973

7074
### Common Issues
7175

72-
1. **Missing Jest types** (`skin-database`):
76+
1. **Missing Jest types** (Fixed in `skin-database`):
77+
7378
- Install `@types/jest` and configure proper Jest setup
7479
- Ensure test files are properly configured
7580

76-
2. **Conflicting type definitions** (`webamp-modern`):
81+
2. **Missing package types** (Fixed in `skin-database`):
82+
83+
- Install missing dependencies like `jszip`, `react-redux`, `express`
84+
- Install corresponding `@types/` packages where needed
85+
- Note: Some packages like JSZip provide their own types
86+
87+
3. **Buffer compatibility issues** (Fixed in `skin-database`):
88+
89+
- Newer TypeScript versions require explicit casting for `fs.writeFileSync`
90+
- Use `new Uint8Array(buffer)` instead of raw `Buffer` objects
91+
92+
4. **Conflicting type definitions** (`webamp-modern`):
93+
7794
- Multiple versions of `@types/node` causing conflicts
7895
- Target configuration issues (ES5 vs ES2015+)
7996
- Dependency type mismatches
8097

81-
3. **Missing dependencies**:
82-
- Missing type definitions for imported modules
83-
- Incorrect dependency references
84-
8598
### Recommended Fix Strategy
8699

87100
1. Start with packages that have fewer errors

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"scripts": {
1212
"test": "jest",
1313
"lint": "eslint . --ext ts,tsx,js,jsx --rulesdir=packages/webamp-modern/tools/eslint-rules",
14-
"type-check": "pnpm --filter webamp type-check && pnpm --filter ani-cursor type-check && pnpm --filter webamp-docs type-check",
14+
"type-check": "pnpm --filter webamp type-check && pnpm --filter ani-cursor type-check && pnpm --filter skin-database type-check && pnpm --filter webamp-docs type-check",
1515
"deploy": "sh deploy.sh",
1616
"format": "prettier --write '**/*.{js,ts,tsx}'"
1717
},

packages/skin-database/addSkin.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ async function addModernSkinFromBuffer(
5959
): Promise<Result> {
6060
console.log("Write temporarty file.");
6161
const tempFile = temp.path({ suffix: ".wal" });
62-
fs.writeFileSync(tempFile, buffer);
62+
fs.writeFileSync(tempFile, new Uint8Array(buffer));
6363
console.log("Put skin to S3.");
6464
await S3.putSkin(md5, buffer, "wal");
6565

@@ -83,7 +83,7 @@ async function addClassicSkinFromBuffer(
8383
uploader: string
8484
): Promise<Result> {
8585
const tempFile = temp.path({ suffix: ".wsz" });
86-
fs.writeFileSync(tempFile, buffer);
86+
fs.writeFileSync(tempFile, new Uint8Array(buffer));
8787
const tempScreenshotPath = temp.path({ suffix: ".png" });
8888

8989
const logLines: string[] = [];

packages/skin-database/package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"graphql-yoga": "^5.10.10",
2222
"imagemin": "^7.0.0",
2323
"imagemin-optipng": "^7.0.0",
24+
"jszip": "^3.10.1",
2425
"knex": "^0.21.1",
2526
"lru-cache": "^6.0.0",
2627
"mastodon-api": "^1.3.0",
@@ -33,6 +34,7 @@
3334
"react": "^19.1.0",
3435
"react-dom": "^19.1.0",
3536
"react-dropzone": "^11.1.0",
37+
"react-redux": "^8.0.5",
3638
"react-window": "^1.8.1",
3739
"redux-observable": "^1.0.0",
3840
"rxjs": "^6.3.3",
@@ -64,6 +66,8 @@
6466
"prettier": {},
6567
"devDependencies": {
6668
"@types/cookie-session": "^2.0.48",
69+
"@types/express": "^5.0.3",
70+
"@types/jest": "^30.0.0",
6771
"@types/lru-cache": "^5.1.0",
6872
"@types/node-fetch": "^2.5.7",
6973
"@typescript-eslint/eslint-plugin": "^7.1.0",

packages/skin-database/tasks/screenshotSkin.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export async function screenshot(skin: SkinModel, shooter: typeof Shooter) {
2828
const tempFile = temp.path({ suffix: ".wsz" });
2929
const tempScreenshotPath = temp.path({ suffix: ".png" });
3030

31-
fs.writeFileSync(tempFile, buffer);
31+
fs.writeFileSync(tempFile, new Uint8Array(buffer));
3232

3333
const success = await shooter.takeScreenshot(tempFile, tempScreenshotPath, {
3434
minify: true,

packages/skin-database/tasks/syncToArchive.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ async function downloadToTemp(url: string, filename: string): Promise<string> {
138138
const result = await response.buffer();
139139
const tempDir = temp.mkdirSync();
140140
const tempFile = path.join(tempDir, filename);
141-
fs.writeFileSync(tempFile, result);
141+
fs.writeFileSync(tempFile, new Uint8Array(result));
142142
return tempFile;
143143
}
144144

packages/skin-database/tasks/tweet.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ async function sendTweet(skin: SkinModel): Promise<string> {
109109
const screenshotBuffer = await getResizedScreenshot(skin.getMd5());
110110
const filename = await skin.getFileName();
111111
const tempFile = temp.path({ suffix: ".png" });
112-
fs.writeFileSync(tempFile, screenshotBuffer);
112+
fs.writeFileSync(tempFile, new Uint8Array(screenshotBuffer));
113113
const t = getTwitterClient();
114114

115115
const promise: Promise<{ media_id_string: string }> = new Promise(

packages/skin-database/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ export async function withBufferAsTempFile<T>(
7373
): Promise<T> {
7474
const tempDir = temp.mkdirSync();
7575
const tempFile = path.join(tempDir, filename);
76-
fs.writeFileSync(tempFile, buffer);
76+
fs.writeFileSync(tempFile, new Uint8Array(buffer));
7777
const r = await cb(tempFile);
7878
fs.unlinkSync(tempFile);
7979
fs.rmdirSync(tempDir);

packages/webamp-docs/package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@
2222
"clsx": "^2.0.0",
2323
"prism-react-renderer": "^2.3.0",
2424
"react": "^19.0.0",
25-
"react-dom": "^19.0.0",
26-
"webamp": "workspace:*"
25+
"react-dom": "^19.0.0"
2726
},
2827
"devDependencies": {
2928
"@docusaurus/module-type-aliases": "3.8.1",

0 commit comments

Comments
 (0)