Path: blob/main/python/pylang/tools/compiler.ts
1396 views
/*1* Copyright (C) 2021 William Stein <[email protected]>2* Copyright (C) 2015 Kovid Goyal <kovid at kovidgoyal.net>3*4* Distributed under terms of the BSD license5*/67// Thin wrapper around (release|dev)/compiler.js to setup some global facilities and8// export the compiler's symbols safely.910import { join, relative } from "path";11import { readFileSync as readfile, writeFileSync as writefile } from "fs";12import { createContext, runInContext } from "vm";13import { sha1sum } from "./utils";1415export type Compiler = any; // for now1617interface Options {18console?;19}2021export default function createCompiler(options: Options = {}): Compiler {22const compiler_exports: Compiler = {};23const compiler_context = createContext({24console: options.console ?? console,25readfile,26writefile,27sha1sum,28require,29exports: compiler_exports,30});3132const base = join(__dirname, "..", "..");33let compiler_dir = join(base, "dist/compiler");34const compiler_file = join(compiler_dir, "compiler.js");35const compilerjs = readfile(compiler_file, "utf-8");36runInContext(compilerjs, compiler_context, relative(base, compiler_file));37return compiler_exports;38}394041