Setting up flow for resolvers.
Repo structure classes should be responsible for pulling versioned files. Ex. /forge/1.14/ -> get the latest file (or only allow one file). The resolver then gets that file to work with in order to resolve the forge module, pull its libs, and attach them as submodules.
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
import { writeFile } from 'fs-extra'
|
import { writeFile } from 'fs-extra'
|
||||||
import { resolve as resolvePath } from 'path'
|
import { resolve as resolvePath } from 'path'
|
||||||
import yargs from 'yargs'
|
import yargs from 'yargs'
|
||||||
import { DistributionStructure } from './model/struct/distribution.struct'
|
import { DistributionStructure } from './model/struct/model/distribution.struct'
|
||||||
|
|
||||||
function rootOption(yargs: yargs.Argv) {
|
function rootOption(yargs: yargs.Argv) {
|
||||||
return yargs.option('root', {
|
return yargs.option('root', {
|
||||||
|
|||||||
9
src/model/resolver/asset.ts
Normal file
9
src/model/resolver/asset.ts
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
export interface Asset {
|
||||||
|
|
||||||
|
url: string
|
||||||
|
path: string
|
||||||
|
size: number
|
||||||
|
hashType: string
|
||||||
|
hash: string
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,17 +1,15 @@
|
|||||||
import { mkdirs } from 'fs-extra'
|
import { mkdirs } from 'fs-extra'
|
||||||
import { join, resolve } from 'path'
|
import { join, resolve } from 'path'
|
||||||
import { ModelStructure } from './model.struct'
|
import { FileStructure } from './FileStructure'
|
||||||
|
|
||||||
export abstract class BaseModelStructure<T> implements ModelStructure<T[]> {
|
export abstract class BaseFileStructure implements FileStructure {
|
||||||
|
|
||||||
protected resolvedModels: T[] | undefined
|
|
||||||
protected containerDirectory: string
|
protected containerDirectory: string
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
protected absoluteRoot: string,
|
protected absoluteRoot: string,
|
||||||
protected relativeRoot: string,
|
protected relativeRoot: string,
|
||||||
protected structRoot: string,
|
protected structRoot: string
|
||||||
protected baseUrl: string
|
|
||||||
) {
|
) {
|
||||||
this.relativeRoot = join(relativeRoot, structRoot)
|
this.relativeRoot = join(relativeRoot, structRoot)
|
||||||
this.containerDirectory = resolve(absoluteRoot, structRoot)
|
this.containerDirectory = resolve(absoluteRoot, structRoot)
|
||||||
@@ -21,6 +19,4 @@ export abstract class BaseModelStructure<T> implements ModelStructure<T[]> {
|
|||||||
mkdirs(this.containerDirectory)
|
mkdirs(this.containerDirectory)
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract async getSpecModel(): Promise<T[]>
|
|
||||||
|
|
||||||
}
|
}
|
||||||
5
src/model/struct/FileStructure.ts
Normal file
5
src/model/struct/FileStructure.ts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
export interface FileStructure {
|
||||||
|
|
||||||
|
init(): void
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
export interface ModelStructure<T> {
|
|
||||||
|
|
||||||
init(): void
|
|
||||||
|
|
||||||
getSpecModel(): Promise<T>
|
|
||||||
|
|
||||||
}
|
|
||||||
7
src/model/struct/model/ModelStructure.ts
Normal file
7
src/model/struct/model/ModelStructure.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import { FileStructure } from '../FileStructure'
|
||||||
|
|
||||||
|
export interface ModelStructure<T> extends FileStructure {
|
||||||
|
|
||||||
|
getSpecModel(): Promise<T>
|
||||||
|
|
||||||
|
}
|
||||||
19
src/model/struct/model/basemodel.struct.ts
Normal file
19
src/model/struct/model/basemodel.struct.ts
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import { BaseFileStructure } from '../BaseFileStructure'
|
||||||
|
import { ModelStructure } from './ModelStructure'
|
||||||
|
|
||||||
|
export abstract class BaseModelStructure<T> extends BaseFileStructure implements ModelStructure<T[]> {
|
||||||
|
|
||||||
|
protected resolvedModels: T[] | undefined
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
absoluteRoot: string,
|
||||||
|
relativeRoot: string,
|
||||||
|
structRoot: string,
|
||||||
|
protected baseUrl: string
|
||||||
|
) {
|
||||||
|
super(absoluteRoot, relativeRoot, structRoot)
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract async getSpecModel(): Promise<T[]>
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { mkdirs } from 'fs-extra'
|
import { mkdirs } from 'fs-extra'
|
||||||
import { Distribution } from '../spec/distribution'
|
import { Distribution } from '../../spec/distribution'
|
||||||
import { ModelStructure } from './model.struct'
|
import { ModelStructure } from './ModelStructure'
|
||||||
import { ServerStructure } from './server.struct'
|
import { ServerStructure } from './server.struct'
|
||||||
|
|
||||||
export class DistributionStructure implements ModelStructure<Distribution> {
|
export class DistributionStructure implements ModelStructure<Distribution> {
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
import { Stats } from 'fs'
|
import { Stats } from 'fs'
|
||||||
import { join } from 'path'
|
import { join } from 'path'
|
||||||
import { resolve } from 'url'
|
import { resolve } from 'url'
|
||||||
import { Type } from '../../spec/type'
|
import { Type } from '../../../spec/type'
|
||||||
import { ModuleStructure } from './module.struct'
|
import { ModuleStructure } from './module.struct'
|
||||||
|
|
||||||
export class FileStructure extends ModuleStructure {
|
export class MiscFileStructure extends ModuleStructure {
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
absoluteRoot: string,
|
absoluteRoot: string,
|
||||||
@@ -2,10 +2,10 @@ import AdmZip from 'adm-zip'
|
|||||||
import { Stats } from 'fs-extra'
|
import { Stats } from 'fs-extra'
|
||||||
import { join } from 'path'
|
import { join } from 'path'
|
||||||
import { resolve } from 'url'
|
import { resolve } from 'url'
|
||||||
import { capitalize } from '../../../util/stringutils'
|
import { capitalize } from '../../../../util/stringutils'
|
||||||
import { McModInfo } from '../../forge/mcmodinfo'
|
import { McModInfo } from '../../../forge/mcmodinfo'
|
||||||
import { McModInfoList } from '../../forge/mcmodinfolist'
|
import { McModInfoList } from '../../../forge/mcmodinfolist'
|
||||||
import { Type } from '../../spec/type'
|
import { Type } from '../../../spec/type'
|
||||||
import { ModuleStructure } from './module.struct'
|
import { ModuleStructure } from './module.struct'
|
||||||
|
|
||||||
export class ForgeModStructure extends ModuleStructure {
|
export class ForgeModStructure extends ModuleStructure {
|
||||||
@@ -2,9 +2,9 @@ import AdmZip from 'adm-zip'
|
|||||||
import { Stats } from 'fs-extra'
|
import { Stats } from 'fs-extra'
|
||||||
import { join } from 'path'
|
import { join } from 'path'
|
||||||
import { resolve } from 'url'
|
import { resolve } from 'url'
|
||||||
import { capitalize } from '../../../util/stringutils'
|
import { capitalize } from '../../../../util/stringutils'
|
||||||
import { LiteMod } from '../../liteloader/litemod'
|
import { LiteMod } from '../../../liteloader/litemod'
|
||||||
import { Type } from '../../spec/type'
|
import { Type } from '../../../spec/type'
|
||||||
import { ModuleStructure } from './module.struct'
|
import { ModuleStructure } from './module.struct'
|
||||||
|
|
||||||
export class LiteModStructure extends ModuleStructure {
|
export class LiteModStructure extends ModuleStructure {
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
import { createHash } from 'crypto'
|
import { createHash } from 'crypto'
|
||||||
import { lstat, pathExists, readdir, readFile, Stats } from 'fs-extra'
|
import { lstat, pathExists, readdir, readFile, Stats } from 'fs-extra'
|
||||||
import { resolve } from 'path'
|
import { resolve } from 'path'
|
||||||
import { Module } from '../../spec/module'
|
import { Module } from '../../../spec/module'
|
||||||
import { Type, TypeMetadata } from '../../spec/type'
|
import { Type, TypeMetadata } from '../../../spec/type'
|
||||||
import { BaseModelStructure } from '../basemodel.struct'
|
import { BaseModelStructure } from '../basemodel.struct'
|
||||||
|
|
||||||
export abstract class ModuleStructure extends BaseModelStructure<Module> {
|
export abstract class ModuleStructure extends BaseModelStructure<Module> {
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
import { lstat, readdir } from 'fs-extra'
|
import { lstat, readdir } from 'fs-extra'
|
||||||
import { join, resolve as resolvePath } from 'path'
|
import { join, resolve as resolvePath } from 'path'
|
||||||
import { resolve as resolveUrl } from 'url'
|
import { resolve as resolveUrl } from 'url'
|
||||||
import { Server } from '../spec/server'
|
import { Server } from '../../spec/server'
|
||||||
import { BaseModelStructure } from './basemodel.struct'
|
import { BaseModelStructure } from './basemodel.struct'
|
||||||
import { FileStructure } from './module/file.struct'
|
import { MiscFileStructure } from './module/file.struct'
|
||||||
import { ForgeModStructure } from './module/forgemod.struct'
|
import { ForgeModStructure } from './module/forgemod.struct'
|
||||||
import { LiteModStructure } from './module/litemod.struct'
|
import { LiteModStructure } from './module/litemod.struct'
|
||||||
|
|
||||||
@@ -63,7 +63,7 @@ export class ServerStructure extends BaseModelStructure<Server> {
|
|||||||
const liteModStruct = new LiteModStructure(absoluteServerRoot, relativeServerRoot, this.baseUrl)
|
const liteModStruct = new LiteModStructure(absoluteServerRoot, relativeServerRoot, this.baseUrl)
|
||||||
const liteModModules = await liteModStruct.getSpecModel()
|
const liteModModules = await liteModStruct.getSpecModel()
|
||||||
|
|
||||||
const fileStruct = new FileStructure(absoluteServerRoot, relativeServerRoot, this.baseUrl)
|
const fileStruct = new MiscFileStructure(absoluteServerRoot, relativeServerRoot, this.baseUrl)
|
||||||
const fileModules = await fileStruct.getSpecModel()
|
const fileModules = await fileStruct.getSpecModel()
|
||||||
|
|
||||||
const modules = [
|
const modules = [
|
||||||
12
src/model/struct/repo/forgerepo.struct.ts
Normal file
12
src/model/struct/repo/forgerepo.struct.ts
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import { BaseFileStructure } from '../BaseFileStructure'
|
||||||
|
|
||||||
|
export class ForgeRepoStructure extends BaseFileStructure {
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
absoluteRoot: string,
|
||||||
|
relativeRoot: string
|
||||||
|
) {
|
||||||
|
super(absoluteRoot, relativeRoot, 'forge')
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
12
src/model/struct/repo/librepo.struct.ts
Normal file
12
src/model/struct/repo/librepo.struct.ts
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import { BaseFileStructure } from '../BaseFileStructure'
|
||||||
|
|
||||||
|
export class LibRepoStructure extends BaseFileStructure {
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
absoluteRoot: string,
|
||||||
|
relativeRoot: string
|
||||||
|
) {
|
||||||
|
super(absoluteRoot, relativeRoot, 'lib')
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
12
src/model/struct/repo/liteloaderrepo.struct.ts
Normal file
12
src/model/struct/repo/liteloaderrepo.struct.ts
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import { BaseFileStructure } from '../BaseFileStructure'
|
||||||
|
|
||||||
|
export class LiteLoaderRepoStructure extends BaseFileStructure {
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
absoluteRoot: string,
|
||||||
|
relativeRoot: string
|
||||||
|
) {
|
||||||
|
super(absoluteRoot, relativeRoot, 'liteloader')
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
41
src/model/struct/repo/repo.struct.ts
Normal file
41
src/model/struct/repo/repo.struct.ts
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
import { BaseFileStructure } from '../BaseFileStructure'
|
||||||
|
import { ForgeRepoStructure } from './forgerepo.struct'
|
||||||
|
import { LibRepoStructure } from './librepo.struct'
|
||||||
|
import { LiteLoaderRepoStructure } from './liteloaderrepo.struct'
|
||||||
|
|
||||||
|
export class RepoStructure extends BaseFileStructure {
|
||||||
|
|
||||||
|
private forgeRepoStruct: ForgeRepoStructure
|
||||||
|
private liteloaderRepoStruct: LiteLoaderRepoStructure
|
||||||
|
private libRepoStruct: LibRepoStructure
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
absoluteRoot: string,
|
||||||
|
relativeRoot: string
|
||||||
|
) {
|
||||||
|
super(absoluteRoot, relativeRoot, 'repo')
|
||||||
|
this.forgeRepoStruct = new ForgeRepoStructure(this.containerDirectory, this.relativeRoot)
|
||||||
|
this.liteloaderRepoStruct = new LiteLoaderRepoStructure(this.containerDirectory, this.relativeRoot)
|
||||||
|
this.libRepoStruct = new LibRepoStructure(this.containerDirectory, this.relativeRoot)
|
||||||
|
}
|
||||||
|
|
||||||
|
public async init() {
|
||||||
|
super.init()
|
||||||
|
await this.forgeRepoStruct.init()
|
||||||
|
await this.liteloaderRepoStruct.init()
|
||||||
|
await this.libRepoStruct.init()
|
||||||
|
}
|
||||||
|
|
||||||
|
public getForgeRepoStruct() {
|
||||||
|
return this.forgeRepoStruct
|
||||||
|
}
|
||||||
|
|
||||||
|
public getLiteLoaderRepoStruct() {
|
||||||
|
return this.liteloaderRepoStruct
|
||||||
|
}
|
||||||
|
|
||||||
|
public getLibRepoStruct() {
|
||||||
|
return this.libRepoStruct
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
13
src/resolver/baseresolver.ts
Normal file
13
src/resolver/baseresolver.ts
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import { Module } from '../model/spec/module'
|
||||||
|
import { Resolver } from './resolver'
|
||||||
|
|
||||||
|
export abstract class BaseResolver implements Resolver {
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
protected absoluteRoot: string,
|
||||||
|
protected relativeRoot: string
|
||||||
|
) {}
|
||||||
|
|
||||||
|
public abstract getModule(): Promise<Module>
|
||||||
|
|
||||||
|
}
|
||||||
10
src/resolver/forge/adapter/forge18.resolver.ts
Normal file
10
src/resolver/forge/adapter/forge18.resolver.ts
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
import { Module } from '../../../model/spec/module'
|
||||||
|
import { ForgeResolver } from '../forge.resolver'
|
||||||
|
|
||||||
|
export class Forge18Adapter extends ForgeResolver {
|
||||||
|
|
||||||
|
public async getModule(): Promise<Module> {
|
||||||
|
return null as unknown as Module
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
33
src/resolver/forge/forge.resolver.ts
Normal file
33
src/resolver/forge/forge.resolver.ts
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import { Module } from '../../model/spec/module'
|
||||||
|
import { RepoStructure } from '../../model/struct/repo/repo.struct'
|
||||||
|
import { BaseResolver } from '../baseresolver'
|
||||||
|
import { Forge18Adapter } from './adapter/forge18.resolver'
|
||||||
|
|
||||||
|
export abstract class ForgeResolver extends BaseResolver {
|
||||||
|
|
||||||
|
public static getResolver(version: string) {
|
||||||
|
return ForgeResolver.ADAPTER_LIST[version]
|
||||||
|
}
|
||||||
|
|
||||||
|
// tslint:disable: object-literal-key-quotes
|
||||||
|
private static readonly ADAPTER_LIST: {[version: string]: any} = {
|
||||||
|
'1.8': Forge18Adapter,
|
||||||
|
'1.9': Forge18Adapter,
|
||||||
|
'1.10': Forge18Adapter,
|
||||||
|
'1.11': Forge18Adapter,
|
||||||
|
'1.12': Forge18Adapter
|
||||||
|
}
|
||||||
|
|
||||||
|
protected repoStructure: RepoStructure
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
absoluteRoot: string,
|
||||||
|
relativeRoot: string
|
||||||
|
) {
|
||||||
|
super(absoluteRoot, relativeRoot)
|
||||||
|
this.repoStructure = new RepoStructure(absoluteRoot, relativeRoot)
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract getModule(): Promise<Module>
|
||||||
|
|
||||||
|
}
|
||||||
7
src/resolver/resolver.ts
Normal file
7
src/resolver/resolver.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import { Module } from '../model/spec/module'
|
||||||
|
|
||||||
|
export interface Resolver {
|
||||||
|
|
||||||
|
getModule(): Promise<Module>
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user