add ability to access from cli

This commit is contained in:
Garrett Mills 2022-01-14 14:44:54 -06:00
parent 77fa6ad867
commit 564abb55c7
4 changed files with 107 additions and 0 deletions

View File

@ -11,3 +11,42 @@ pnpm build
The intermediate files are generated in the `exbuild/` directory, and the final compiled output is in the `lib/` directory.
Access the Zod schema:
```txt
node --experimental-repl-await lib/cli.js shell
powered by Extollo, © 2022 Garrett Mills
Access your application using the "app" global.
(extollo) ➤ Home = require('./lib/app/http/controllers/main/Home.controller').Home
[class Home extends Controller]
(extollo) ➤ home = new Home
Home { request: undefined }
(extollo) ➤ home.getValidator().getZod().shape
{
username: ZodString {
spa: [Function (anonymous)],
superRefine: [Function (anonymous)],
_def: { checks: [Array], typeName: 'ZodString' },
transform: [Function: bound ],
default: [Function: bound ],
_regex: [Function (anonymous)],
nonempty: [Function (anonymous)]
},
password: ZodString {
spa: [Function (anonymous)],
superRefine: [Function (anonymous)],
_def: { checks: [Array], typeName: 'ZodString' },
transform: [Function: bound ],
default: [Function: bound ],
_regex: [Function (anonymous)],
nonempty: [Function (anonymous)]
},
rememberMe: ZodOptional {
spa: [Function (anonymous)],
superRefine: [Function (anonymous)],
_def: { innerType: [ZodBoolean], typeName: 'ZodOptional' },
transform: [Function: bound ],
default: [Function: bound ]
}
}
```

10
src/Units.extollo.ts Normal file
View File

@ -0,0 +1,10 @@
import {
Unit,
CommandLine,
ValidationUnit,
} from '@extollo/lib'
export const Units = [
ValidationUnit,
CommandLine,
] as (typeof Unit)[]

43
src/bootstrap.ts Normal file
View File

@ -0,0 +1,43 @@
import {Application, CommandLineApplication} from '@extollo/lib'
import {Units} from './Units.extollo'
/*
* Helper functions to bootstrap the Application instance for different uses.
*/
/**
* Get the base application with no final-target unit.
*/
export function base(): Application {
const app = Application.getApplication()
app.scaffold(__dirname, Units.slice(0, -1))
return app
}
/**
* Get the application with the final unit replaced with the CommandLineApplication
* for use on the CLI.
*/
export function cli(): Application {
const app = Application.getApplication()
app.forceStartupMessage = false
const units = [...Units]
units.reverse()
CommandLineApplication.setReplacement(units[0])
units[0] = CommandLineApplication
units.reverse()
app.scaffold(__dirname, units)
return app
}
/**
* Get the application as it should be run normally.
*/
export function app(): Application {
const app = Application.getApplication()
app.scaffold(__dirname, Units)
return app
}

15
src/cli.ts Normal file
View File

@ -0,0 +1,15 @@
#!/usr/bin/env -S node --experimental-repl-await
import {globalRegistry} from '@extollo/lib'
import {cli} from './bootstrap'
globalRegistry.run(async () => {
/*
* The Application
* -----------------------------------------------------
* The application instance is a global inversion of control container that
* ties your entire application together. The app container manages services
* and lifecycle.
*/
const app = cli()
await app.run()
})