Skip to content

Commit

Permalink
feat: implement compiler options for transpile (#113)
Browse files Browse the repository at this point in the history
  • Loading branch information
yacinehmito authored May 3, 2023
1 parent d66de1e commit 6d21e97
Show file tree
Hide file tree
Showing 40 changed files with 304 additions and 281 deletions.
13 changes: 9 additions & 4 deletions js/mod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,8 @@ export interface TranspileOptions {
cacheRoot?: string;
/** The setting to use when loading sources from the Deno cache. */
cacheSetting?: CacheSetting;
//compilerOptions?: CompilerOptions;
/** Compiler options which can be set when transpiling. */
compilerOptions?: CompilerOptions;
//imports: Record<string, string[]>;
/** Override the default loading mechanism with a custom loader. This can
* provide a way to use "in-memory" resources instead of fetching them
Expand Down Expand Up @@ -187,14 +188,18 @@ export async function transpile(
options: TranspileOptions = {},
): Promise<Record<string, string>> {
root = root instanceof URL ? root : toFileUrl(resolve(root));
const { cacheSetting, cacheRoot, allowRemote, load } = options;
const { cacheSetting, cacheRoot, allowRemote, load, compilerOptions } =
options;

checkCompilerOptions(compilerOptions);

let transpileLoad = load;
if (!transpileLoad) {
const cache = createCache({ root: cacheRoot, cacheSetting, allowRemote });
transpileLoad = cache.load;
}
const { transpile } = await instantiate();
return transpile(root.toString(), transpileLoad, undefined);
const { transpile: jsTranspile } = await instantiate();
return jsTranspile(root.toString(), transpileLoad, compilerOptions);
}

function checkCompilerOptions(
Expand Down
4 changes: 4 additions & 0 deletions rs-lib/src/emit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,10 @@ pub struct BundleOptions {
pub emit_ignore_directives: bool,
}

pub struct TranspileOptions {
pub emit_options: EmitOptions,
}

#[derive(Debug)]
pub struct BundleEmit {
pub code: String,
Expand Down
24 changes: 14 additions & 10 deletions rs-lib/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ pub use emit::bundle_graph;
pub use emit::BundleEmit;
pub use emit::BundleOptions;
pub use emit::BundleType;
pub use emit::TranspileOptions;

pub use deno_ast::EmitOptions;
pub use deno_ast::ImportsNotUsedAsValues;
Expand All @@ -27,7 +28,7 @@ pub async fn bundle(
root: ModuleSpecifier,
loader: &mut dyn Loader,
maybe_imports_map: Option<Vec<(ModuleSpecifier, Vec<String>)>>,
bundle_options: BundleOptions,
options: BundleOptions,
) -> Result<BundleEmit> {
let mut graph = ModuleGraph::default();
graph
Expand All @@ -45,12 +46,13 @@ pub async fn bundle(
)
.await;

bundle_graph(&graph, bundle_options)
bundle_graph(&graph, options)
}

pub async fn transpile(
root: ModuleSpecifier,
loader: &mut dyn Loader,
options: TranspileOptions,
) -> Result<HashMap<String, String>> {
let analyzer = CapturingModuleAnalyzer::default();
let mut graph = ModuleGraph::default();
Expand All @@ -71,16 +73,18 @@ pub async fn transpile(

for module in graph.modules().filter_map(|m| m.esm()) {
if let Some(parsed_source) = analyzer.get_parsed_source(&module.specifier) {
// TODO: add emit options
let emit_options = Default::default();
let transpiled_source = parsed_source.transpile(&emit_options)?;
let transpiled_source = parsed_source.transpile(&options.emit_options)?;

map.insert(module.specifier.to_string(), transpiled_source.text);
if let Some(source_map) = &transpiled_source.source_map {
map.insert(
format!("{}.map", module.specifier.as_str()),
source_map.to_string(),
);
// TODO: Understand why parsed_source.transpile returns a source map
// even when options.emit_options.source_map is false.
if options.emit_options.source_map {
if let Some(source_map) = &transpiled_source.source_map {
map.insert(
format!("{}.map", module.specifier.as_str()),
source_map.to_string(),
);
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,3 @@ export { foo as test1 } from "./subdir/foo.ts";
export { foo as test2 } from "./subdir/foo.ts";
import { foo } from "./subdir/foo.ts";
console.log(foo);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vZXhwb3J0c193aXRoX2FsaWFzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGZvbyBhcyB0ZXN0MSB9IGZyb20gXCIuL3N1YmRpci9mb28udHNcIjtcbmV4cG9ydCB7IGZvbyBhcyB0ZXN0MiB9IGZyb20gXCIuL3N1YmRpci9mb28udHNcIjtcbmltcG9ydCB7IGZvbyB9IGZyb20gXCIuL3N1YmRpci9mb28udHNcIjtcblxuY29uc29sZS5sb2coZm9vKTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLE9BQU8sS0FBSyxRQUFRLGtCQUFrQjtBQUMvQyxTQUFTLE9BQU8sS0FBSyxRQUFRLGtCQUFrQjtBQUMvQyxTQUFTLEdBQUcsUUFBUSxrQkFBa0I7QUFFdEMsUUFBUSxHQUFHLENBQUMifQ==
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
export const foo = "foo";
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vc3ViZGlyL2Zvby50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZm9vOiBzdHJpbmcgPSBcImZvb1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFjLE1BQU0ifQ==
1 change: 0 additions & 1 deletion tests/__snapshots__/common/exports/transpile/local/mod1.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,3 @@ export function printHello3() {
export function throwsError() {
throw Error("exception from mod1");
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vbW9kMS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwcmludEhlbGxvMiwgcmV0dXJuc0ZvbyB9IGZyb20gXCIuL3N1YmRpci9tb2QyLnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5zSGkoKTogc3RyaW5nIHtcbiAgcmV0dXJuIFwiSGlcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybnNGb28yKCk6IHN0cmluZyB7XG4gIHJldHVybiByZXR1cm5zRm9vKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmludEhlbGxvMygpIHtcbiAgcHJpbnRIZWxsbzIoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRocm93c0Vycm9yKCkge1xuICB0aHJvdyBFcnJvcihcImV4Y2VwdGlvbiBmcm9tIG1vZDFcIik7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxXQUFXLEVBQUUsVUFBVSxRQUFRLG1CQUFtQjtBQUUzRCxPQUFPLFNBQVMsWUFBb0I7SUFDbEMsT0FBTztBQUNULENBQUM7QUFFRCxPQUFPLFNBQVMsY0FBc0I7SUFDcEMsT0FBTztBQUNULENBQUM7QUFFRCxPQUFPLFNBQVMsY0FBYztJQUM1QjtBQUNGLENBQUM7QUFFRCxPQUFPLFNBQVMsY0FBYztJQUM1QixNQUFNLE1BQU0sdUJBQXVCO0FBQ3JDLENBQUMifQ==
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,3 @@ export function returnsFoo() {
export function printHello2() {
printHello();
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vc3ViZGlyL21vZDIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHJpbnRIZWxsbyB9IGZyb20gXCIuL3ByaW50X2hlbGxvLnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5zRm9vKCk6IHN0cmluZyB7XG4gIHJldHVybiBcIkZvb1wiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRIZWxsbzIoKSB7XG4gIHByaW50SGVsbG8oKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLFVBQVUsUUFBUSxtQkFBbUI7QUFFOUMsT0FBTyxTQUFTLGFBQXFCO0lBQ25DLE9BQU87QUFDVCxDQUFDO0FBRUQsT0FBTyxTQUFTLGNBQWM7SUFDNUI7QUFDRixDQUFDIn0=
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
export function printHello() {
console.log("Hello");
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vc3ViZGlyL3ByaW50X2hlbGxvLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBwcmludEhlbGxvKCkge1xuICBjb25zb2xlLmxvZyhcIkhlbGxvXCIpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sU0FBUyxhQUFhO0lBQzNCLFFBQVEsR0FBRyxDQUFDO0FBQ2QsQ0FBQyJ9
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
console.log("Hello world!");
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaGVsbG9fd29ybGQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc29sZS5sb2coXCJIZWxsbyB3b3JsZCFcIik7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsUUFBUSxHQUFHLENBQUMifQ==
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
console.log("Hello world!");
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaGVsbG9fd29ybGQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc29sZS5sb2coXCJIZWxsbyB3b3JsZCFcIik7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsUUFBUSxHQUFHLENBQUMifQ==
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
console.log("Hello world!");
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaGVsbG9fd29ybGQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc29sZS5sb2coXCJIZWxsbyB3b3JsZCFcIik7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsUUFBUSxHQUFHLENBQUMifQ==
1 change: 0 additions & 1 deletion tests/__snapshots__/common/js/transpile/local/js_module.js
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
export { foo } from "./subdir/foo.js";
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vanNfbW9kdWxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGZvbyB9IGZyb20gXCIuL3N1YmRpci9mb28uanNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLEdBQUcsUUFBUSxrQkFBa0IifQ==
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
export const foo = "foo";
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vc3ViZGlyL2Zvby5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZm9vID0gXCJmb29cIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxNQUFNIn0=
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
import app from "./subdir/app.jsx";
console.log(app);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vanN4X2ltcG9ydF9mcm9tX3RzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcHAgZnJvbSBcIi4vc3ViZGlyL2FwcC5qc3hcIjtcblxuY29uc29sZS5sb2coYXBwKTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFNBQVMsbUJBQW1CO0FBRW5DLFFBQVEsR0FBRyxDQUFDIn0=
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,3 @@ const React = {
export default function app() {
return /*#__PURE__*/ React.createElement("div", null, /*#__PURE__*/ React.createElement("h2", null, "asdf"));
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vc3ViZGlyL2FwcC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgUmVhY3QgPSB7XG4gIGNyZWF0ZUVsZW1lbnQoKSB7fSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFwcCgpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2PlxuICAgICAgPGgyPmFzZGY8L2gyPlxuICAgIDwvZGl2PlxuICApO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sUUFBUTtJQUNaLGlCQUFnQixDQUFDO0FBQ25CO0FBRUEsZUFBZSxTQUFTLE1BQU07SUFDNUIscUJBQ0Usb0JBQUMsMkJBQ0Msb0JBQUMsWUFBRztBQUdWLENBQUMifQ==
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
console.log("Hello world!");
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vc3JjLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnNvbGUubG9nKFwiSGVsbG8gd29ybGQhXCIpO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFFBQVEsR0FBRyxDQUFDIn0=
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,3 @@ export class DenoStdInternalError extends Error {
throw new DenoStdInternalError(msg);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE0MC4wL191dGlsL2Fzc2VydC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5leHBvcnQgY2xhc3MgRGVub1N0ZEludGVybmFsRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9IFwiRGVub1N0ZEludGVybmFsRXJyb3JcIjtcbiAgfVxufVxuXG4vKiogTWFrZSBhbiBhc3NlcnRpb24sIGlmIG5vdCBgdHJ1ZWAsIHRoZW4gdGhyb3cuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0KGV4cHI6IHVua25vd24sIG1zZyA9IFwiXCIpOiBhc3NlcnRzIGV4cHIge1xuICBpZiAoIWV4cHIpIHtcbiAgICB0aHJvdyBuZXcgRGVub1N0ZEludGVybmFsRXJyb3IobXNnKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxxQ0FBcUM7QUFFckMsT0FBTyxNQUFNLDZCQUE2QjtJQUN4QyxZQUFZLE9BQWUsQ0FBRTtRQUMzQixLQUFLLENBQUM7UUFDTixJQUFJLENBQUMsSUFBSSxHQUFHO0lBQ2Q7QUFDRixDQUFDO0FBRUQsa0RBQWtELEdBQ2xELE9BQU8sU0FBUyxPQUFPLElBQWEsRUFBRSxNQUFNLEVBQUUsRUFBZ0I7SUFDNUQsSUFBSSxDQUFDLE1BQU07UUFDVCxNQUFNLElBQUkscUJBQXFCLEtBQUs7SUFDdEMsQ0FBQztBQUNILENBQUMifQ==
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,3 @@ export const osType = (()=>{
})();
export const isWindows = osType === "windows";
export const isLinux = osType === "linux";
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE0MC4wL191dGlsL29zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmV4cG9ydCB0eXBlIE9TVHlwZSA9IFwid2luZG93c1wiIHwgXCJsaW51eFwiIHwgXCJkYXJ3aW5cIjtcblxuZXhwb3J0IGNvbnN0IG9zVHlwZTogT1NUeXBlID0gKCgpID0+IHtcbiAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgY29uc3QgeyBEZW5vIH0gPSBnbG9iYWxUaGlzIGFzIGFueTtcbiAgaWYgKHR5cGVvZiBEZW5vPy5idWlsZD8ub3MgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gRGVuby5idWlsZC5vcztcbiAgfVxuXG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIGNvbnN0IHsgbmF2aWdhdG9yIH0gPSBnbG9iYWxUaGlzIGFzIGFueTtcbiAgaWYgKG5hdmlnYXRvcj8uYXBwVmVyc2lvbj8uaW5jbHVkZXM/LihcIldpblwiKSkge1xuICAgIHJldHVybiBcIndpbmRvd3NcIjtcbiAgfVxuXG4gIHJldHVybiBcImxpbnV4XCI7XG59KSgpO1xuXG5leHBvcnQgY29uc3QgaXNXaW5kb3dzID0gb3NUeXBlID09PSBcIndpbmRvd3NcIjtcbmV4cG9ydCBjb25zdCBpc0xpbnV4ID0gb3NUeXBlID09PSBcImxpbnV4XCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFO0FBQzFFLHFDQUFxQztBQUlyQyxPQUFPLE1BQU0sU0FBaUIsQUFBQyxDQUFBLElBQU07SUFDbkMsbUNBQW1DO0lBQ25DLE1BQU0sRUFBRSxLQUFJLEVBQUUsR0FBRztJQUNqQixJQUFJLE9BQU8sTUFBTSxPQUFPLE9BQU8sVUFBVTtRQUN2QyxPQUFPLEtBQUssS0FBSyxDQUFDLEVBQUU7SUFDdEIsQ0FBQztJQUVELG1DQUFtQztJQUNuQyxNQUFNLEVBQUUsVUFBUyxFQUFFLEdBQUc7SUFDdEIsSUFBSSxXQUFXLFlBQVksV0FBVyxRQUFRO1FBQzVDLE9BQU87SUFDVCxDQUFDO0lBRUQsT0FBTztBQUNULENBQUEsSUFBSztBQUVMLE9BQU8sTUFBTSxZQUFZLFdBQVcsVUFBVTtBQUM5QyxPQUFPLE1BQU0sVUFBVSxXQUFXLFFBQVEifQ==
Loading

0 comments on commit 6d21e97

Please sign in to comment.