Setting up the model resolution design.

This commit is contained in:
Daniel Scalzi
2019-07-29 23:55:33 -04:00
parent 077fd12ec3
commit b942f4df59
10 changed files with 80 additions and 4 deletions

View File

@@ -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
@@ -80,15 +88,16 @@ const generateServerCommand: yargs.CommandModule = {
}
const generateDistroCommand: yargs.CommandModule = {
command: 'distro',
command: 'distro [name]',
describe: 'Generate a distribution index from the root file structure.',
builder: (yargs) => {
yargs = rootOption(yargs)
yargs = namePositional(yargs)
return yargs
},
handler: (argv) => {
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.
// tslint:disable-next-line:no-unused-expression
yargs
@@ -113,6 +133,7 @@ yargs
.scriptName('')
.command(initCommand)
.command(generateCommand)
.command(validateCommand)
.demandCommand()
.help()
.argv

View File

@@ -7,7 +7,7 @@ export interface Distribution {
/**
* Global settings for Discord Rich Presence.
*/
discord: {
discord?: {
/**
* Client ID for the Application registered with Discord.
*/

View File

@@ -41,7 +41,7 @@ export interface Server {
/**
* Server specific settings used for Discord Rich Presence.
*/
discord: {
discord?: {
/**
* Short ID for the server. Displayed on the second status line as Server: shortId.
*/

View 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()
}
}
}

View File

@@ -0,0 +1,5 @@
export interface ModelStructure<T> {
getSpecModel(): T
}

View 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
}
}