@fink/loxia
Version:
A fink to JavaScript compiler.
184 lines (157 loc) • 4.11 kB
JavaScript
const babel_traverse_0 = require("@babel/traverse");
const {
transformFromAstSync: transformFromAstSync_0
} = require("@babel/core");
const {
try_catch: try_catch_0
} = require("@fink/js-interop/errors.js");
const {
set_props: set_props_0
} = require("@fink/js-interop/reflect.js");
const {
ˆundefined: undefined_0
} = require("@fink/js-interop/nullish.js");
const {
transform: transform_0
} = require("./ir/transform.js");
const {
init_ctx: init_ctx_0
} = require("./ir/init.js");
const {
optimize: optimize_0
} = require("./optimize/init.js");
const {
transform_ir: transform_ir_0
} = require("./js/init.js");
const {
module_transforms: module_transforms_0
} = require("./js/module/init.js");
const {
transform_async: transform_async_0
} = require("./js/async/init.js");
const transform_file_0 = (fink_ast_0, code_0, filename_0, drec_1) => {
const key_11 = `optimize`;
const {
optimize: _key_11,
...options_0
} = drec_1;
const opts_0 = { ...options_0,
optimize: {
refs: true,
tails: true,
unused: true,
...drec_1.optimize
}
};
const ctx_0 = init_ctx_0(code_0, filename_0, opts_0);
const dlst_0 = try_catch_0(() => {
const dlst_1 = transform_0(fink_ast_0, `mod`, ctx_0);
const dlst_2 = optimize_0(dlst_1[0], opts_0);
const drec_2 = transform_ir_0(dlst_2[0], opts_0);
return [drec_2.js];
});
const error_0 = dlst_0[0];
const hdm_0 = dlst_0[1];
const js_ast_0 = (undefined === hdm_0 ? [] : hdm_0)[0];
let ret_1;
ret_1: {
/* istanbul ignore else */
if (null != options_0) {
/* istanbul ignore else */
if (options_0.module_type === `cjs`) {
ret_1 = module_transforms_0;
/* istanbul ignore next */
break ret_1;
}
}
ret_1 = {};
/* istanbul ignore next */
break ret_1;
}
const extras_0 = ret_1;
/* istanbul ignore else */
if (error_0 === false) {
babel_traverse_0[`default`](js_ast_0, {
ReturnStatement: path_0 => {
/* istanbul ignore else */
if (null != path_0) {
/* istanbul ignore else */
if (true === path_0.key > 0) {
set_props_0(path_0.node, {
leadingComments: [{
type: `CommentBlock`,
value: ` istanbul ignore next `
}]
});
return undefined_0;
}
}
/* istanbul ignore next */
return;
},
AwaitExpression: {
enter: transform_async_0
},
...extras_0
});
return { ...js_ast_0,
errors: []
};
}
return {
errors: [error_0]
};
};
const babel_generate_0 = (ast_0, filename_1, source_0, options_1) => {
const hdm_1 = options_1.babel;
const dlst_4 = try_catch_0(() => {
const drec_4 = transformFromAstSync_0(ast_0, source_0, {
filename: filename_1,
sourceFileName: filename_1,
sourceMaps: options_1.source_maps,
...(undefined === hdm_1 ? {
babelrc: false,
configFile: false
} : hdm_1)
});
return {
code: drec_4.code,
source_map: drec_4.map,
errors: []
};
});
const error_1 = dlst_4[0];
/* istanbul ignore else */
if (error_1 === false) {
return dlst_4[1];
}
return {
code: ``,
source_map: ``,
errors: [error_1]
};
};
const generate_0 = (ast_1, filename_2, source_1, hdm_2) => {
const options_2 = undefined === hdm_2 ? {} : hdm_2;
const js_ast_1 = transform_file_0(ast_1, source_1, filename_2, options_2);
/* istanbul ignore else */
if (null != js_ast_1) {
const itm_2 = js_ast_1.errors;
/* istanbul ignore else */
if (null != itm_2) {
/* istanbul ignore else */
if (undefined !== itm_2[0]) {
return {
code: ``,
source_map: ``,
errors: js_ast_1.errors
};
}
}
}
const result_28 = babel_generate_0(js_ast_1, filename_2, source_1, options_2);
return result_28;
};
exports.transform_file = transform_file_0;
exports.babel_generate = babel_generate_0;
exports.generate = generate_0;