Add command line tools
This commit is contained in:
parent
402b02a9c0
commit
024a371590
138
ex
Executable file
138
ex
Executable file
@ -0,0 +1,138 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
ENV_NODE="$(which node)"
|
||||
ENV_PNPM="$(which pnpm)"
|
||||
|
||||
LOGO=" ______ _ _ _
|
||||
| ____| | | | | |
|
||||
| |__ __ _| |_ ___ | | | ___
|
||||
| __| \\ \\/ / __/ _ \\| | |/ _ \\
|
||||
| |____ > <| || (_) | | | (_) |
|
||||
|______/_/\\_\\\\__\\___/|_|_|\\___/"
|
||||
|
||||
# Author: Tasos Latsas
|
||||
|
||||
# spinner.sh
|
||||
#
|
||||
# Display an awesome 'spinner' while running your long shell commands
|
||||
#
|
||||
# Do *NOT* call _spinner function directly.
|
||||
# Use {start,stop}_spinner wrapper functions
|
||||
|
||||
# usage:
|
||||
# 1. source this script in your's
|
||||
# 2. start the spinner:
|
||||
# start_spinner [display-message-here]
|
||||
# 3. run your command
|
||||
# 4. stop the spinner:
|
||||
# stop_spinner [your command's exit status]
|
||||
#
|
||||
# Also see: test.sh
|
||||
|
||||
|
||||
function _spinner() {
|
||||
# $1 start/stop
|
||||
#
|
||||
# on start: $2 display message
|
||||
# on stop : $2 process exit status
|
||||
# $3 spinner function pid (supplied from stop_spinner)
|
||||
|
||||
local on_success="DONE"
|
||||
local on_fail="FAIL"
|
||||
local white="\e[1;37m"
|
||||
local green="\e[1;32m"
|
||||
local red="\e[1;31m"
|
||||
local nc="\e[0m"
|
||||
|
||||
case $1 in
|
||||
start)
|
||||
# calculate the column where spinner and status msg will be displayed
|
||||
let column=$(tput cols)-${#2}-8
|
||||
# display message and position the cursor in $column column
|
||||
echo -ne ${2}
|
||||
printf "%${column}s"
|
||||
|
||||
# start spinner
|
||||
i=1
|
||||
sp='\|/-'
|
||||
delay=${SPINNER_DELAY:-0.15}
|
||||
|
||||
while :
|
||||
do
|
||||
printf "\b${sp:i++%${#sp}:1}"
|
||||
sleep $delay
|
||||
done
|
||||
;;
|
||||
stop)
|
||||
if [[ -z ${3} ]]; then
|
||||
echo "spinner is not running.."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
kill $3 > /dev/null 2>&1
|
||||
|
||||
# inform the user uppon success or failure
|
||||
echo -en "\b["
|
||||
if [[ $2 -eq 0 ]]; then
|
||||
echo -en "${green}${on_success}${nc}"
|
||||
else
|
||||
echo -en "${red}${on_fail}${nc}"
|
||||
fi
|
||||
echo -e "]"
|
||||
;;
|
||||
*)
|
||||
echo "invalid argument, try {start/stop}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
function start_spinner {
|
||||
# $1 : msg to display
|
||||
_spinner "start" "${1}" &
|
||||
# set global spinner pid
|
||||
_sp_pid=$!
|
||||
disown
|
||||
}
|
||||
|
||||
function stop_spinner {
|
||||
# $1 : command exit status
|
||||
_spinner "stop" $1 $_sp_pid
|
||||
unset _sp_pid
|
||||
}
|
||||
|
||||
function echoRun() {
|
||||
echo ""
|
||||
echo "+ $@"
|
||||
echo ""
|
||||
"$@"
|
||||
echo ""
|
||||
}
|
||||
|
||||
if [ ! -d "./node_modules" ]; then
|
||||
echo "$LOGO"
|
||||
echo "+----------------------------------------+"
|
||||
echo "| Docs: https://extollo.garrettmills.dev |"
|
||||
echo "+----------------------------------------+"
|
||||
echo ""
|
||||
echo "Welcome to Extollo! Let's set things up for the first time..."
|
||||
|
||||
if [ ! -x "$ENV_PNPM" ]; then
|
||||
echo "Please install PNPM to use Extollo."
|
||||
fi
|
||||
|
||||
echoRun "$ENV_PNPM" i
|
||||
|
||||
if [ ! -f "./.env" ]; then
|
||||
echoRun cp example.env .env
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo ""
|
||||
printf "\033[32m✓\033[39m Looks like you're all set up! Run this command again to access the Extollo CLI.\n"
|
||||
else
|
||||
start_spinner "Building your app..."
|
||||
"$ENV_PNPM" run build > /dev/null
|
||||
stop_spinner 0
|
||||
"$ENV_NODE" --experimental-repl-await ./lib/cli.js $@
|
||||
fi
|
4
example.env
Normal file
4
example.env
Normal file
@ -0,0 +1,4 @@
|
||||
DEBUG_MODE=true
|
||||
EXTOLLO_LOGGING_LEVEL=6
|
||||
DATABASE_PASSWORD=extollo
|
||||
DATABASE_HOST=db01.platform.local
|
@ -11,6 +11,7 @@
|
||||
"@extollo/di": "file:../di",
|
||||
"@extollo/lib": "file:../lib",
|
||||
"@extollo/orm": "file:../orm",
|
||||
"@extollo/cli": "file:../cli",
|
||||
"copyfiles": "^2.4.1",
|
||||
"typescript": "^4.1.3"
|
||||
},
|
||||
@ -18,7 +19,8 @@
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"build": "rm -rf lib && mkdir -p lib && cp .env lib/.env && tsc",
|
||||
"postbuild": "copyfiles -u 1 src/app/resources/**/* lib",
|
||||
"app": "pnpm run build && node lib/index.js"
|
||||
"app": "pnpm run build && node lib/index.js",
|
||||
"cli": "pnpm run build && node lib/cli.js"
|
||||
},
|
||||
"files": [
|
||||
"lib/**/*"
|
||||
|
@ -1,4 +1,5 @@
|
||||
dependencies:
|
||||
'@extollo/cli': link:../cli
|
||||
'@extollo/di': link:../di
|
||||
'@extollo/lib': link:../lib
|
||||
'@extollo/orm': link:../orm
|
||||
@ -294,6 +295,7 @@ packages:
|
||||
resolution:
|
||||
integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
|
||||
specifiers:
|
||||
'@extollo/cli': file:../cli
|
||||
'@extollo/di': file:../di
|
||||
'@extollo/lib': file:../lib
|
||||
'@extollo/orm': file:../orm
|
||||
|
@ -1,8 +1,10 @@
|
||||
import {Config, Controllers, HTTPServer, Middlewares, Routing} from '@extollo/lib'
|
||||
import {Config, Controllers, HTTPServer, Middlewares, Routing, Unit} from '@extollo/lib'
|
||||
import {Database, Models} from "@extollo/orm";
|
||||
import {CommandLine} from "@extollo/cli";
|
||||
|
||||
export const Units = [
|
||||
Config,
|
||||
CommandLine,
|
||||
Controllers,
|
||||
Middlewares,
|
||||
Database,
|
||||
@ -10,4 +12,4 @@ export const Units = [
|
||||
|
||||
Routing,
|
||||
HTTPServer,
|
||||
]
|
||||
] as (typeof Unit)[]
|
||||
|
23
src/cli.ts
Normal file
23
src/cli.ts
Normal file
@ -0,0 +1,23 @@
|
||||
import {Application} from "@extollo/lib";
|
||||
import {Units} from './Units.extollo';
|
||||
import {CommandLineApplication} from "@extollo/cli";
|
||||
|
||||
(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 = Application.getApplication()
|
||||
app.forceStartupMessage = false
|
||||
|
||||
Units.reverse()
|
||||
CommandLineApplication.setReplacement(Units[0])
|
||||
Units[0] = CommandLineApplication
|
||||
Units.reverse()
|
||||
|
||||
app.scaffold(__dirname, Units)
|
||||
await app.run()
|
||||
})()
|
Loading…
Reference in New Issue
Block a user