feat(maven): Add Maven registry protocol support (storage, auth, routing, interfaces, and exports)
This commit is contained in:
@@ -267,4 +267,129 @@ export class RegistryStorage implements IStorageBackend {
|
||||
const safeName = packageName.replace('@', '').replace('/', '-');
|
||||
return `npm/packages/${packageName}/${safeName}-${version}.tgz`;
|
||||
}
|
||||
|
||||
// ========================================================================
|
||||
// MAVEN STORAGE METHODS
|
||||
// ========================================================================
|
||||
|
||||
/**
|
||||
* Get Maven artifact
|
||||
*/
|
||||
public async getMavenArtifact(
|
||||
groupId: string,
|
||||
artifactId: string,
|
||||
version: string,
|
||||
filename: string
|
||||
): Promise<Buffer | null> {
|
||||
const path = this.getMavenArtifactPath(groupId, artifactId, version, filename);
|
||||
return this.getObject(path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store Maven artifact
|
||||
*/
|
||||
public async putMavenArtifact(
|
||||
groupId: string,
|
||||
artifactId: string,
|
||||
version: string,
|
||||
filename: string,
|
||||
data: Buffer
|
||||
): Promise<void> {
|
||||
const path = this.getMavenArtifactPath(groupId, artifactId, version, filename);
|
||||
return this.putObject(path, data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if Maven artifact exists
|
||||
*/
|
||||
public async mavenArtifactExists(
|
||||
groupId: string,
|
||||
artifactId: string,
|
||||
version: string,
|
||||
filename: string
|
||||
): Promise<boolean> {
|
||||
const path = this.getMavenArtifactPath(groupId, artifactId, version, filename);
|
||||
return this.objectExists(path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete Maven artifact
|
||||
*/
|
||||
public async deleteMavenArtifact(
|
||||
groupId: string,
|
||||
artifactId: string,
|
||||
version: string,
|
||||
filename: string
|
||||
): Promise<void> {
|
||||
const path = this.getMavenArtifactPath(groupId, artifactId, version, filename);
|
||||
return this.deleteObject(path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Maven metadata (maven-metadata.xml)
|
||||
*/
|
||||
public async getMavenMetadata(
|
||||
groupId: string,
|
||||
artifactId: string
|
||||
): Promise<Buffer | null> {
|
||||
const path = this.getMavenMetadataPath(groupId, artifactId);
|
||||
return this.getObject(path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store Maven metadata (maven-metadata.xml)
|
||||
*/
|
||||
public async putMavenMetadata(
|
||||
groupId: string,
|
||||
artifactId: string,
|
||||
data: Buffer
|
||||
): Promise<void> {
|
||||
const path = this.getMavenMetadataPath(groupId, artifactId);
|
||||
return this.putObject(path, data);
|
||||
}
|
||||
|
||||
/**
|
||||
* List Maven versions for an artifact
|
||||
* Returns all version directories under the artifact path
|
||||
*/
|
||||
public async listMavenVersions(
|
||||
groupId: string,
|
||||
artifactId: string
|
||||
): Promise<string[]> {
|
||||
const groupPath = groupId.replace(/\./g, '/');
|
||||
const prefix = `maven/artifacts/${groupPath}/${artifactId}/`;
|
||||
|
||||
const objects = await this.listObjects(prefix);
|
||||
const versions = new Set<string>();
|
||||
|
||||
// Extract version from paths like: maven/artifacts/com/example/my-lib/1.0.0/my-lib-1.0.0.jar
|
||||
for (const obj of objects) {
|
||||
const relativePath = obj.substring(prefix.length);
|
||||
const parts = relativePath.split('/');
|
||||
if (parts.length >= 1 && parts[0]) {
|
||||
versions.add(parts[0]);
|
||||
}
|
||||
}
|
||||
|
||||
return Array.from(versions).sort();
|
||||
}
|
||||
|
||||
// ========================================================================
|
||||
// MAVEN PATH HELPERS
|
||||
// ========================================================================
|
||||
|
||||
private getMavenArtifactPath(
|
||||
groupId: string,
|
||||
artifactId: string,
|
||||
version: string,
|
||||
filename: string
|
||||
): string {
|
||||
const groupPath = groupId.replace(/\./g, '/');
|
||||
return `maven/artifacts/${groupPath}/${artifactId}/${version}/${filename}`;
|
||||
}
|
||||
|
||||
private getMavenMetadataPath(groupId: string, artifactId: string): string {
|
||||
const groupPath = groupId.replace(/\./g, '/');
|
||||
return `maven/metadata/${groupPath}/${artifactId}/maven-metadata.xml`;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user