aboutsummaryrefslogtreecommitdiff
path: root/src/eval-env/node.ts
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2023-01-13 19:21:41 +0530
committerAkshay Nair <phenax5@gmail.com>2023-01-13 19:21:41 +0530
commit8ba316461d2dc0a1372af16836ce14ceabc2bf4f (patch)
treeafcd80654b1e83fe78fcb4bf69a71f730ee3e299 /src/eval-env/node.ts
parentfe710f58a982e31e64c02d887567bcd9a4108b24 (diff)
downloadts-types-lang-8ba316461d2dc0a1372af16836ce14ceabc2bf4f.tar.gz
ts-types-lang-8ba316461d2dc0a1372af16836ce14ceabc2bf4f.zip
feat: adds test to stdlib + refactors runtime environment
Diffstat (limited to 'src/eval-env/node.ts')
-rw-r--r--src/eval-env/node.ts61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/eval-env/node.ts b/src/eval-env/node.ts
new file mode 100644
index 0000000..5e73987
--- /dev/null
+++ b/src/eval-env/node.ts
@@ -0,0 +1,61 @@
+import { Type } from 'ts-morph'
+import { promises as fs } from 'fs'
+import readline from 'readline'
+import { Ctx } from '../types'
+
+const rl = readline.createInterface({
+ input: process.stdin,
+ output: process.stdout,
+ terminal: false,
+})
+
+const readLineFromStdin = (): Promise<string> =>
+ new Promise((res) => rl.on('line', res))
+
+export const cleanup = () => {
+ rl.close()
+}
+
+export default (ctx: Ctx, args: Type[]) => ({
+ ReadFile: async () => {
+ const [pathTyp] = args
+ const filePath = ctx.getTypeValue(pathTyp)
+ const contents = await fs.readFile(filePath, 'utf-8')
+ const [resultKey, _] = ctx.createResult(JSON.stringify(contents))
+ return [resultKey]
+ },
+
+ WriteFile: async () => {
+ const [pathTyp, contentsTyp] = args
+ const filePath = ctx.getTypeValue(pathTyp)
+ const contents = ctx.getTypeValue(contentsTyp)
+ await fs.writeFile(filePath, contents)
+ return []
+ },
+
+ GetEnv: async () => {
+ const [envTyp] = args
+ const envName = ctx.getTypeValue(envTyp)
+ const [resultKey, _] = ctx.createResult(
+ `${JSON.stringify(process.env[envName] ?? '')}`
+ )
+ return [resultKey]
+ },
+
+ GetArgs: async () => {
+ const [resultKey, _] = ctx.createResult(
+ `${JSON.stringify(process.argv.slice(2))}`
+ )
+ return [resultKey]
+ },
+
+ Exit: async () => {
+ process.exit(args[0] && ctx.getTypeValue(args[0]))
+ },
+
+ ReadLine: async () => {
+ const line = await readLineFromStdin()
+ const [resultKey, _] = ctx.createResult(`${JSON.stringify(line)}`)
+ return [resultKey]
+ },
+})