mirror of
https://github.com/Kir-Antipov/mc-publish.git
synced 2024-11-25 09:51:01 -05:00
Made base class for metadata readers that deal with zip
This commit is contained in:
parent
4151c36500
commit
ef28fbd8f5
3 changed files with 39 additions and 1 deletions
5
package-lock.json
generated
5
package-lock.json
generated
|
@ -4140,6 +4140,11 @@
|
||||||
"integrity": "sha512-9/IECtNr8dXNmPWmFXepT0/7o5eolGesHUa3mtr0KlgnCvnZxwh2qensKL42JJY2vQKC3nIBXetFAqR+PW1CmA==",
|
"integrity": "sha512-9/IECtNr8dXNmPWmFXepT0/7o5eolGesHUa3mtr0KlgnCvnZxwh2qensKL42JJY2vQKC3nIBXetFAqR+PW1CmA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"node-stream-zip": {
|
||||||
|
"version": "1.15.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz",
|
||||||
|
"integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw=="
|
||||||
|
},
|
||||||
"normalize-path": {
|
"normalize-path": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
|
||||||
|
|
|
@ -43,6 +43,7 @@
|
||||||
"@actions/github": "^5.0.0",
|
"@actions/github": "^5.0.0",
|
||||||
"fast-glob": "^3.2.7",
|
"fast-glob": "^3.2.7",
|
||||||
"formdata-node": "^4.2.4",
|
"formdata-node": "^4.2.4",
|
||||||
"node-fetch": "^3.0.0"
|
"node-fetch": "^3.0.0",
|
||||||
|
"node-stream-zip": "^1.15.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
32
src/metadata/zipped-mod-metadata-reader.ts
Normal file
32
src/metadata/zipped-mod-metadata-reader.ts
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
import ModMetadata from "./mod-metadata";
|
||||||
|
import ModMetadataReader from "./mod-metadata-reader";
|
||||||
|
import { StreamZipAsync, async as ZipArchive } from "node-stream-zip";
|
||||||
|
|
||||||
|
export default abstract class ZippedModMetadataReader<TConfig = Record<string, unknown>> implements ModMetadataReader {
|
||||||
|
private configEntryName: string;
|
||||||
|
|
||||||
|
protected constructor(configEntryName: string) {
|
||||||
|
this.configEntryName = configEntryName;
|
||||||
|
}
|
||||||
|
|
||||||
|
async readMetadata(modPath: string): Promise<ModMetadata | null> {
|
||||||
|
let zip = <StreamZipAsync>null;
|
||||||
|
try {
|
||||||
|
zip = new ZipArchive({ file: modPath });
|
||||||
|
const buffer = await zip.entryData(this.configEntryName).catch(_ => <Buffer>null);
|
||||||
|
if (buffer) {
|
||||||
|
return this.createMetadataFromConfig(this.loadConfig(buffer));
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
return null;
|
||||||
|
} finally {
|
||||||
|
await zip?.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract loadConfig(buffer: Buffer): TConfig;
|
||||||
|
|
||||||
|
protected abstract createMetadataFromConfig(config: TConfig): ModMetadata;
|
||||||
|
}
|
Loading…
Reference in a new issue