diff --git a/packages/common/src/team.ts b/packages/common/src/team.ts index 3eb3a8c..f01be33 100644 --- a/packages/common/src/team.ts +++ b/packages/common/src/team.ts @@ -25,8 +25,6 @@ export interface IContext { } export interface ITeamService { - jerko(params: string): number - create(params: ITeamCreateParams): Promise remove(params: ITeamRemoveParams): Promise<{id: number}> diff --git a/packages/scripts/src/index.ts b/packages/scripts/src/index.ts index fa4d222..8c51143 100644 --- a/packages/scripts/src/index.ts +++ b/packages/scripts/src/index.ts @@ -1,31 +1,16 @@ #!/usr/bin/env node -import * as commands from './commands' import * as log from './log' import {TCommand} from './TCommand' import {argparse, arg} from '@rondo/argparse' +import {resolve} from './resolve' -const commandNames = Object.keys(commands).filter(cmd => !cmd.startsWith('_')) - -const {parse} = argparse({ - help: arg('boolean', {alias: 'h'}), - debug: arg('boolean'), - command: arg('string', { - required: true, - positional: true, - choices: commandNames, - }), - args: arg('string[]', { - n: '*', - positional: true, - }), -}) - -type TArgs = ReturnType - -async function run(args: TArgs, exit: (code: number) => void) { +async function run( + args: any, commands: object, exit: (code: number) => void, +) { + const p = './scripts' + const module = await import(p) const commandName = args.command if (!(commandName in commands)) { - const c = commandNames log.info( 'Invalid command! Use the --help argument to see a list of commands') exit(1) @@ -39,10 +24,25 @@ async function start( argv: string[] = process.argv.slice(1), exit = (code: number) => process.exit(code), ) { - let args: TArgs | null = null + const commands = await resolve() + const {parse} = argparse({ + help: arg('boolean', {alias: 'h'}), + debug: arg('boolean'), + command: arg('string', { + required: true, + positional: true, + choices: Object.keys(commands).filter(c => !c.startsWith('_')), + }), + args: arg('string[]', { + n: '*', + positional: true, + }), + }) + + let args: ReturnType | null = null try { args = parse(argv) - await run(args, exit) + await run(args, commands, exit) } catch (err) { log.error((args && args.debug ? err.stack : err.message)) exit(1) diff --git a/packages/scripts/src/resolve.ts b/packages/scripts/src/resolve.ts new file mode 100644 index 0000000..c60774d --- /dev/null +++ b/packages/scripts/src/resolve.ts @@ -0,0 +1,20 @@ +import * as commands from './scripts' +import {join} from 'path' + +export async function resolve(cwd = process.cwd()) { + let extraScripts: object = {} + try { + extraScripts = await import(join(cwd, './src/scripts')) + } catch (err) { + try { + extraScripts = await import(join(cwd, './lib/scripts')) + } catch (err) { + // ignore + } + } + + return { + ...commands, + ...extraScripts, + } +} diff --git a/packages/scripts/src/commands/build.ts b/packages/scripts/src/scripts/build.ts similarity index 62% rename from packages/scripts/src/commands/build.ts rename to packages/scripts/src/scripts/build.ts index aeea2dc..8815110 100644 --- a/packages/scripts/src/commands/build.ts +++ b/packages/scripts/src/scripts/build.ts @@ -31,22 +31,52 @@ export async function build(...argv: string[]) { await run(tsc, ['--build', path, ...watchArgs]) } -export async function test(...args: string[]) { +export async function test(...argv: string[]) { + const {args} = argparse({ + args: arg('string[]', { + n: '*', + positional: true, + }), + help: arg('boolean', {alias: 'h'}), + }) + .parse(argv) await run('jest', args) } -export async function exec(file: string) { +export async function exec(...argv: string[]) { + const {parse} = argparse({ + file: arg('string', { + required: true, + positional: true, + }), + args: arg('string[]', { + n: '*', + positional: true, + }), + help: arg('boolean', {alias: 'h'}), + }) + const args = parse(argv) + const {file} = args const command = file.endsWith('.ts') ? 'ts-node' : 'node' - const args = command === 'ts-node' ? + const nodeArgs = command === 'ts-node' ? [ '--files', '--project', findTsConfig(file), ] : [] - await run(command, [...args, file]) + await run(command, [...nodeArgs, file, ...args.args]) } -export async function createMigration(project: string, name: string) { +export async function createMigration(...argv: string[]) { + const args = argparse({ + name: arg('string', {required: true, positional: true}), + project: arg('string', {default: '.'}), + help: arg('boolean', {alias: 'h'}), + }) + .parse(argv) + + const {name, project} = args + const typeorm = findNodeModules(project) .map(nm => p.join(nm, 'typeorm')) .find(t => fs.existsSync(t)) @@ -70,7 +100,7 @@ function findTsConfig(file: string): string { return '' } -export async function browserify(path: string = '.') { +async function browserify(path: string = '.') { // mkdirSync(join(path, 'build'), {recursive: true}) await run('browserify', [ join(path, 'esm', 'index.js'), @@ -82,7 +112,7 @@ export async function browserify(path: string = '.') { ]) } -export async function uglify(path: string = '.') { +async function uglify(path: string = '.') { await run('uglifyjs', [ '--compress', '--mangle', @@ -93,13 +123,25 @@ export async function uglify(path: string = '.') { ]) } -export async function js(path: string = '.') { +export async function js(...argv: string[]) { + const args = argparse({ + path: arg('string', {positional: true, default: '.'}), + watch: arg('boolean', {alias: 'w'}), + help: arg('boolean', {alias: 'h'}), + }) + .parse(argv) + + const {path, watch} = args + return watch ? watchJs(path) : buildJs(path) +} + +async function buildJs(path: string) { await build(...['-p', path, '--esm']) await browserify(path) await uglify(path) } -export async function watchJs(path: string = '.') { +async function watchJs(path: string) { await run('watchify', [ join(path, 'esm', 'index.js'), // '-p', '[', 'tsify', '--project', path, ']', @@ -111,7 +153,20 @@ export async function watchJs(path: string = '.') { ]) } -export async function css(path = '.') { +export async function css(...argv: string[]) { + const args = argparse({ + path: arg('string', {positional: true, default: '.'}), + watch: arg('boolean', {alias: 'w'}), + help: arg('boolean', {alias: 'h'}), + }) + .parse(argv) + + const {path, watch} = args + + if (watch) { + await watchCss(path) + } + await run('node-sass', [ '--output-style', 'compressed', '--output', join(path, 'build'), @@ -119,7 +174,7 @@ export async function css(path = '.') { ]) } -export async function watchCss(path = '.') { +async function watchCss(path = '.') { await run('node-sass', [ join(path, 'scss'), '--output', join(path, 'build'), @@ -137,7 +192,13 @@ export async function watchCss(path = '.') { ]) } -export async function frontend(path = '.') { +export async function frontend(...argv: string[]) { + const args = argparse({ + path: arg('string', {positional: true, default: '.'}), + help: arg('boolean', {alias: 'h'}), + }) + .parse(argv) + const {path} = args await build(...['-p', path, '--esm']) const promises = [ build(...['-p', path, '--watch', '--esm']), diff --git a/packages/scripts/src/commands/index.ts b/packages/scripts/src/scripts/index.ts similarity index 100% rename from packages/scripts/src/commands/index.ts rename to packages/scripts/src/scripts/index.ts diff --git a/packages/scripts/src/commands/intergen.sample.ts b/packages/scripts/src/scripts/intergen.sample.ts similarity index 100% rename from packages/scripts/src/commands/intergen.sample.ts rename to packages/scripts/src/scripts/intergen.sample.ts diff --git a/packages/scripts/src/commands/intergen.test.ts b/packages/scripts/src/scripts/intergen.test.ts similarity index 100% rename from packages/scripts/src/commands/intergen.test.ts rename to packages/scripts/src/scripts/intergen.test.ts diff --git a/packages/scripts/src/commands/intergen.ts b/packages/scripts/src/scripts/intergen.ts similarity index 100% rename from packages/scripts/src/commands/intergen.ts rename to packages/scripts/src/scripts/intergen.ts diff --git a/packages/scripts/src/commands/newlib.ts b/packages/scripts/src/scripts/newlib.ts similarity index 100% rename from packages/scripts/src/commands/newlib.ts rename to packages/scripts/src/scripts/newlib.ts diff --git a/packages/server/src/services/TeamService2.ts b/packages/server/src/services/TeamService2.ts index 2312c4f..c12fc25 100644 --- a/packages/server/src/services/TeamService2.ts +++ b/packages/server/src/services/TeamService2.ts @@ -18,10 +18,6 @@ export class TeamService2 implements Contextual { protected readonly permissions: IUserPermissions, ) {} - jerko(params: string, context?: IContext): number { - return parseInt(params, 10) - } - async create(params: t.ITeamCreateParams, context: IContext) { const {userId} = context const name = trim(params.name)