diff --git a/src/parser.ts b/src/parser.ts index 9718a36..5fb44b3 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -1,7 +1,12 @@ import * as toml from "toml"; import Resource from "./resource"; - -// const CURSE_CLIENT = new CurseForgeClient(); +import { + Provider, + ModrinthProvider, + CurseForgeProvider, + UrlProvider, + GitHubProvider, +} from "./provider"; export interface Metafile { name: string; @@ -10,73 +15,6 @@ export interface Metafile { provider: Provider; } -export abstract class Provider { - constructor( - public hash: string, - public hashFormat: string, - ) {} - - abstract get downloadUrl(): Resource; -} - -export class UrlProvider extends Provider { - constructor( - public hash: string, - public hashFormat: string, - private url: string, - ) { - super(hash, hashFormat); - } - - get downloadUrl(): Resource { - return new Resource(this.url); - } -} - -export class ModrinthProvider extends UrlProvider { - constructor( - hash: string, - hashFormat: string, - url: string, - public modId: string, - public versionId: string, - ) { - super(hash, hashFormat, url); - } -} - -export class GitHubProvider extends UrlProvider { - constructor( - hash: string, - hashFormat: string, - url: string, - public branch: string, - public regex: string, - public slug: string, - public tag: string, - ) { - super(hash, hashFormat, url); - } -} - -export class CurseForgeProvider extends Provider { - constructor( - hash: string, - hashFormat: string, - public mode: string, - public fileId: number, - public projectId: number, - ) { - super(hash, hashFormat); - } - - get downloadUrl(): Resource { - return new Resource( - `https://www.curseforge.com/api/v1/mods/${this.projectId}/files/${this.fileId}/download`, - ); - } -} - /** * Represents a file entry in the Packwiz index. */ diff --git a/src/provider.ts b/src/provider.ts new file mode 100644 index 0000000..894cae1 --- /dev/null +++ b/src/provider.ts @@ -0,0 +1,68 @@ +import Resource from "./resource"; + +export abstract class Provider { + constructor( + public hash: string, + public hashFormat: string, + ) {} + + abstract get downloadUrl(): Resource; +} + +export class UrlProvider extends Provider { + constructor( + public hash: string, + public hashFormat: string, + private url: string, + ) { + super(hash, hashFormat); + } + + get downloadUrl(): Resource { + return new Resource(this.url); + } +} + +export class ModrinthProvider extends UrlProvider { + constructor( + hash: string, + hashFormat: string, + url: string, + public modId: string, + public versionId: string, + ) { + super(hash, hashFormat, url); + } +} + +export class GitHubProvider extends UrlProvider { + constructor( + hash: string, + hashFormat: string, + url: string, + public branch: string, + public regex: string, + public slug: string, + public tag: string, + ) { + super(hash, hashFormat, url); + } +} + +export class CurseForgeProvider extends Provider { + constructor( + hash: string, + hashFormat: string, + public mode: string, + public fileId: number, + public projectId: number, + ) { + super(hash, hashFormat); + } + + get downloadUrl(): Resource { + return new Resource( + `https://www.curseforge.com/api/v1/mods/${this.projectId}/files/${this.fileId}/download`, + ); + } +}