Setting up the model resolution design.
This commit is contained in:
25
src/index.ts
25
src/index.ts
@@ -14,6 +14,14 @@ function rootOption(yargs: yargs.Argv) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function namePositional(yargs: yargs.Argv) {
|
||||||
|
return yargs.option('name', {
|
||||||
|
describe: 'Distribution index file name.',
|
||||||
|
type: 'string',
|
||||||
|
default: 'distribution'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// -------------
|
// -------------
|
||||||
// Init Commands
|
// Init Commands
|
||||||
|
|
||||||
@@ -80,15 +88,16 @@ const generateServerCommand: yargs.CommandModule = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const generateDistroCommand: yargs.CommandModule = {
|
const generateDistroCommand: yargs.CommandModule = {
|
||||||
command: 'distro',
|
command: 'distro [name]',
|
||||||
describe: 'Generate a distribution index from the root file structure.',
|
describe: 'Generate a distribution index from the root file structure.',
|
||||||
builder: (yargs) => {
|
builder: (yargs) => {
|
||||||
yargs = rootOption(yargs)
|
yargs = rootOption(yargs)
|
||||||
|
yargs = namePositional(yargs)
|
||||||
return yargs
|
return yargs
|
||||||
},
|
},
|
||||||
handler: (argv) => {
|
handler: (argv) => {
|
||||||
console.log(`Root set to ${argv.root}`)
|
console.log(`Root set to ${argv.root}`)
|
||||||
console.log('Invoked generate distro.')
|
console.log(`Invoked generate distro name ${argv.name}.json.`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,6 +115,17 @@ const generateCommand: yargs.CommandModule = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const validateCommand: yargs.CommandModule = {
|
||||||
|
command: 'validate [name]',
|
||||||
|
describe: 'Validate a distribution.json against the spec.',
|
||||||
|
builder: (yargs) => {
|
||||||
|
return namePositional(yargs)
|
||||||
|
},
|
||||||
|
handler: (argv) => {
|
||||||
|
console.log(`Invoked validate with name ${argv.name}.json`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Registering yargs configuration.
|
// Registering yargs configuration.
|
||||||
// tslint:disable-next-line:no-unused-expression
|
// tslint:disable-next-line:no-unused-expression
|
||||||
yargs
|
yargs
|
||||||
@@ -113,6 +133,7 @@ yargs
|
|||||||
.scriptName('')
|
.scriptName('')
|
||||||
.command(initCommand)
|
.command(initCommand)
|
||||||
.command(generateCommand)
|
.command(generateCommand)
|
||||||
|
.command(validateCommand)
|
||||||
.demandCommand()
|
.demandCommand()
|
||||||
.help()
|
.help()
|
||||||
.argv
|
.argv
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ export interface Distribution {
|
|||||||
/**
|
/**
|
||||||
* Global settings for Discord Rich Presence.
|
* Global settings for Discord Rich Presence.
|
||||||
*/
|
*/
|
||||||
discord: {
|
discord?: {
|
||||||
/**
|
/**
|
||||||
* Client ID for the Application registered with Discord.
|
* Client ID for the Application registered with Discord.
|
||||||
*/
|
*/
|
||||||
@@ -41,7 +41,7 @@ export interface Server {
|
|||||||
/**
|
/**
|
||||||
* Server specific settings used for Discord Rich Presence.
|
* Server specific settings used for Discord Rich Presence.
|
||||||
*/
|
*/
|
||||||
discord: {
|
discord?: {
|
||||||
/**
|
/**
|
||||||
* Short ID for the server. Displayed on the second status line as Server: shortId.
|
* Short ID for the server. Displayed on the second status line as Server: shortId.
|
||||||
*/
|
*/
|
||||||
25
src/model/struct/distribution.struct.ts
Normal file
25
src/model/struct/distribution.struct.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import { Distribution } from '../spec/distribution'
|
||||||
|
import { ModelStructure } from './model.struct'
|
||||||
|
import { ServerStructure } from './server.struct'
|
||||||
|
|
||||||
|
export class DistributionStructure implements ModelStructure<Distribution> {
|
||||||
|
|
||||||
|
private servers: ServerStructure[] | undefined
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private root: string
|
||||||
|
) {}
|
||||||
|
|
||||||
|
public getServers() {
|
||||||
|
return new ServerStructure(this.root).getSpecModel()
|
||||||
|
}
|
||||||
|
|
||||||
|
public getSpecModel(): Distribution {
|
||||||
|
return {
|
||||||
|
version: '1.0.0',
|
||||||
|
rss: 'TODO',
|
||||||
|
servers: this.getServers()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
5
src/model/struct/model.struct.ts
Normal file
5
src/model/struct/model.struct.ts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
export interface ModelStructure<T> {
|
||||||
|
|
||||||
|
getSpecModel(): T
|
||||||
|
|
||||||
|
}
|
||||||
25
src/model/struct/server.struct.ts
Normal file
25
src/model/struct/server.struct.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import { resolve } from 'path'
|
||||||
|
import { Server } from '../spec/server'
|
||||||
|
import { ModelStructure } from './model.struct'
|
||||||
|
|
||||||
|
export class ServerStructure implements ModelStructure<Server[]> {
|
||||||
|
|
||||||
|
private servers: Server[] | undefined
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private root: string
|
||||||
|
) {}
|
||||||
|
|
||||||
|
public getSpecModel(): Server[] {
|
||||||
|
if (this.servers == null) {
|
||||||
|
this.servers = this._doSeverRetrieval()
|
||||||
|
}
|
||||||
|
return this.servers
|
||||||
|
}
|
||||||
|
|
||||||
|
private _doSeverRetrieval(): Server[] {
|
||||||
|
const base = resolve(this.root, 'servers')
|
||||||
|
return [] // TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user