diff --git a/src/model/struct/repo/BaseMavenRepo.ts b/src/model/struct/repo/BaseMavenRepo.ts new file mode 100644 index 0000000..7bccea0 --- /dev/null +++ b/src/model/struct/repo/BaseMavenRepo.ts @@ -0,0 +1,26 @@ +import { resolve } from 'path' +import { MavenUtil } from '../../../util/maven' +import { BaseFileStructure } from '../BaseFileStructure' + +export abstract class BaseMavenRepo extends BaseFileStructure { + + constructor( + absoluteRoot: string, + relativeRoot: string, + structRoot: string + ) { + super(absoluteRoot, relativeRoot, structRoot) + } + + public getArtifactById(mavenIdentifier: string): string | null { + const resolved = MavenUtil.mavenIdentifierToString(mavenIdentifier) + return resolved == null ? null : resolve(this.containerDirectory, resolved) + } + + public getArtifactByComponents(group: string, artifact: string, version: string, + classifier?: string, extension = 'jar'): string { + throw resolve(this.containerDirectory, + MavenUtil.mavenComponentsToString(group, artifact, version, classifier, extension)) + } + +} diff --git a/src/model/struct/repo/forgerepo.struct.ts b/src/model/struct/repo/forgerepo.struct.ts index 6a86925..43119b4 100644 --- a/src/model/struct/repo/forgerepo.struct.ts +++ b/src/model/struct/repo/forgerepo.struct.ts @@ -1,6 +1,6 @@ -import { BaseFileStructure } from '../BaseFileStructure' +import { BaseMavenRepo } from './BaseMavenRepo' -export class ForgeRepoStructure extends BaseFileStructure { +export class ForgeRepoStructure extends BaseMavenRepo { constructor( absoluteRoot: string, @@ -9,4 +9,8 @@ export class ForgeRepoStructure extends BaseFileStructure { super(absoluteRoot, relativeRoot, 'forge') } + public getLocalForge(version: string, classifier?: string) { + this.getArtifactByComponents('net.minecraftforge', 'forge', version, classifier, 'jar') + } + } diff --git a/src/model/struct/repo/librepo.struct.ts b/src/model/struct/repo/librepo.struct.ts index f121732..f0fa629 100644 --- a/src/model/struct/repo/librepo.struct.ts +++ b/src/model/struct/repo/librepo.struct.ts @@ -1,6 +1,6 @@ -import { BaseFileStructure } from '../BaseFileStructure' +import { BaseMavenRepo } from './BaseMavenRepo' -export class LibRepoStructure extends BaseFileStructure { +export class LibRepoStructure extends BaseMavenRepo { constructor( absoluteRoot: string, diff --git a/src/model/struct/repo/liteloaderrepo.struct.ts b/src/model/struct/repo/liteloaderrepo.struct.ts index 16cb47f..e36ea40 100644 --- a/src/model/struct/repo/liteloaderrepo.struct.ts +++ b/src/model/struct/repo/liteloaderrepo.struct.ts @@ -1,6 +1,6 @@ -import { BaseFileStructure } from '../BaseFileStructure' +import { BaseMavenRepo } from './BaseMavenRepo' -export class LiteLoaderRepoStructure extends BaseFileStructure { +export class LiteLoaderRepoStructure extends BaseMavenRepo { constructor( absoluteRoot: string, @@ -9,4 +9,8 @@ export class LiteLoaderRepoStructure extends BaseFileStructure { super(absoluteRoot, relativeRoot, 'liteloader') } + public getLocalLiteLoader(version: string, classifier?: string) { + return this.getArtifactByComponents('com.mumfrey', 'liteloader', version, classifier, 'jar') + } + } diff --git a/src/util/maven.ts b/src/util/maven.ts index c2444fc..5193fe6 100644 --- a/src/util/maven.ts +++ b/src/util/maven.ts @@ -3,36 +3,42 @@ import { URL } from 'url' export class MavenUtil { - public static readonly ID_REGEX = /(.+):(.+):([^@]+)(?:@{1}(.+)$)?/ + public static readonly ID_REGEX = /(.+):(.+):([^@-]+)(?:-{1}([^@]+))?(?:@{1}(.+)$)?/ public static isMavenIdentifier(id: string) { - return this.ID_REGEX.test(id) + return MavenUtil.ID_REGEX.test(id) } - public static mavenToString(id: string, extension = 'jar') { - if (!this.isMavenIdentifier(id)) { + public static mavenIdentifierToString(id: string, extension = 'jar') { + if (!MavenUtil.isMavenIdentifier(id)) { return null } - const result = this.ID_REGEX.exec(id) + const result = MavenUtil.ID_REGEX.exec(id) if (result != null) { const group = result[1] const artifact = result[2] const version = result[3] - const ext = result[4] || extension + const classifier = result[4] + const ext = result[5] || extension - return `${group.replace(/\./g, '/')}/${artifact}/${version}/${artifact}-${version}.${ext}` + return MavenUtil.mavenComponentsToString(group, artifact, version, classifier, ext) } return null } + public static mavenComponentsToString(group: string, artifact: string,version: string, + classifier?: string, extension = 'jar') { + return `${group.replace(/\./g, '/')}/${artifact}/${version}/${artifact}-${version}${classifier != null ? `-${classifier}` : ''}.${extension}` + } + public static mavenToUrl(id: string, extension = 'jar') { - const res = this.mavenToString(id, extension) + const res = MavenUtil.mavenIdentifierToString(id, extension) return res == null ? null : new URL(res) } public static mavenToPath(id: string, extension = 'jar') { - const res = this.mavenToString(id, extension) + const res = MavenUtil.mavenIdentifierToString(id, extension) return res == null ? null : normalize(res) }