diff options
| author | Akshay Nair <phenax5@gmail.com> | 2023-01-09 19:38:28 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2023-01-09 19:38:28 +0530 |
| commit | 2af211f1bd6a5c81ee7acd2ded2bfacf4dcfb2a4 (patch) | |
| tree | b1face34438aab4a702ace78c027b280e967f388 | |
| parent | 592f866637bfb8ef8a4a5c31e0984abf6df82532 (diff) | |
| download | ts-types-lang-2af211f1bd6a5c81ee7acd2ded2bfacf4dcfb2a4.tar.gz ts-types-lang-2af211f1bd6a5c81ee7acd2ded2bfacf4dcfb2a4.zip | |
feat: cli donezy
| -rw-r--r-- | package.json | 3 | ||||
| -rw-r--r-- | src/context.ts | 14 | ||||
| -rw-r--r-- | src/eval.ts | 4 | ||||
| -rw-r--r-- | src/index.ts | 32 | ||||
| -rw-r--r-- | yarn.lock | 5 |
5 files changed, 39 insertions, 19 deletions
diff --git a/package.json b/package.json index c63d733..8ec042a 100644 --- a/package.json +++ b/package.json @@ -12,11 +12,12 @@ "scripts": { "build": "tsc", "postinstall": "yarn build", - "dev": "ts-node src/index.ts" + "cli": "ts-node src/index.ts" }, "dependencies": { "@types/node": "^18.11.18", "@types/uuid": "^9.0.0", + "commander": "^9.5.0", "ts-morph": "^17.0.1", "typescript": "^4.9.4", "uuid": "^9.0.0" diff --git a/src/context.ts b/src/context.ts index 7759215..e0c0fa5 100644 --- a/src/context.ts +++ b/src/context.ts @@ -5,7 +5,11 @@ import { Ctx } from './types' const RESULT_TYPE_NAME = '__$result' -export const createContext = (): Ctx => { +export interface CtxOptions { + filePath: string +} + +export const createContext = (options: CtxOptions): Ctx => { const project = new Project({ compilerOptions: { target: ScriptTarget.ES3, @@ -14,13 +18,7 @@ export const createContext = (): Ctx => { const typeChecker = project.getTypeChecker() - const [filePath] = process.argv.slice(2) - - if (!filePath) { - throw new Error('Must specify ts file to run') - } - - const sourceFile = project.addSourceFileAtPath(path.resolve(filePath)) + const sourceFile = project.addSourceFileAtPath(path.resolve(options.filePath)) const entryPoint = sourceFile.getExportedDeclarations().get('main')?.[0] diff --git a/src/eval.ts b/src/eval.ts index dc33fbe..6b9ade0 100644 --- a/src/eval.ts +++ b/src/eval.ts @@ -11,6 +11,10 @@ const rl = readline.createInterface({ terminal: false, }) +export const cleanup = () => { + rl.close() +} + const readLineFromStdin = (): Promise<string> => new Promise((res) => rl.on('line', res)) diff --git a/src/index.ts b/src/index.ts index 65349fc..01420c8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,15 +1,27 @@ +import { program } from 'commander' import { createContext } from './context' -import { evalList } from './eval' +import { cleanup, evalList } from './eval' -const main = async () => { - const ctx = createContext() - const resultType = ctx.entryPoint.getType() - const effects = resultType.isTuple() - ? resultType.getTupleElements() - : [resultType] - await evalList(ctx, effects) +const main = () => { + program + .name('ts-types-lang') + .description(`A runtime for typescript's type system that turns it into a general purpose, purely functional programming language!`) + + program + .command('run') + .description('Run a typescript .ts file') + .argument('<file>', 'Typescript file to run') + .action(async (filePath) => { + const ctx = createContext({ filePath }) + const resultType = ctx.entryPoint.getType() + const effects = resultType.isTuple() + ? resultType.getTupleElements() + : [resultType] + await evalList(ctx, effects) + }) + + return program.parseAsync() } main() - .then(() => process.exit(0)) - .catch((e) => (console.error(e), process.exit(1))) + .finally(() => cleanup()) @@ -127,6 +127,11 @@ code-block-writer@^11.0.3: resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-11.0.3.tgz#9eec2993edfb79bfae845fbc093758c0a0b73b76" integrity sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw== +commander@^9.5.0: + version "9.5.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== + create-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" |
