@fink/loxia
Version:
A fink to JavaScript compiler.
100 lines (84 loc) • 2.82 kB
JavaScript
const types_0 = require("@babel/types");
const templateLiteral_0 = types_0.templateLiteral;
const {
rx: rx_0
} = require("@fink/std-lib/regex.js");
const {
replace_all: replace_all_0
} = require("@fink/std-lib/regex.js");
const {
add: add_0
} = require("../context.js");
const {
get_js: get_js_0
} = require("../context.js");
const {
set_js2: set_js2_0
} = require("../context.js");
const transform_str_0 = (expr_0, ctx_0) => {
const drec_1 = expr_0[0];
const raw_0 = replace_all_0(drec_1.args[0], rx_0`\\([\s\S])|([\`])`, `\\$1$2`);
const sprd_0 = types_0.templateElement({
raw: raw_0
});
const js_0 = templateLiteral_0([{ ...sprd_0,
loc: drec_1.loc
}], []);
const result_3 = set_js2_0(expr_0, js_0, ctx_0);
return result_3;
};
const split_exprs_0 = (...args_1) => {
split_exprs_0: do {
const dlst_1 = args_1[0];
const hdm_0 = dlst_1[0];
const part_0 = undefined === hdm_0 ? false : hdm_0;
const tail_5 = dlst_1.slice(1);
const ctx_1 = args_1[1];
const hdm_1 = args_1[2];
const hdm_2 = args_1[3];
const quasis_0 = undefined === hdm_2 ? [] : hdm_2;
const hdm_3 = args_1[4];
const exprs_0 = undefined === hdm_3 ? [] : hdm_3;
/* istanbul ignore else */
if (part_0 === false) {
return [quasis_0, exprs_0];
}
const js_1 = get_js_0(part_0, ctx_1);
/* istanbul ignore else */
if (true === (undefined === hdm_1 ? true : hdm_1)) {
args_1 = [tail_5, ctx_1, false, [...quasis_0, js_1.quasis[0]], exprs_0];
continue split_exprs_0;
}
args_1 = [tail_5, ctx_1, true, quasis_0, [...exprs_0, js_1]];
continue split_exprs_0;
} while (true);
};
const transform_template_0 = (expr_1, ctx_2) => {
const dlst_4 = split_exprs_0(expr_1[0].args, ctx_2);
const js_2 = templateLiteral_0(dlst_4[0], dlst_4[1]);
const result_14 = set_js2_0(expr_1, js_2, ctx_2);
return result_14;
};
const transform_tagged_template_0 = (expr_2, ctx_3) => {
const val_5 = expr_2[0].args;
const tag_1 = get_js_0(val_5[0], ctx_3);
const dlst_6 = split_exprs_0(val_5.slice(1), ctx_3);
const tl_0 = templateLiteral_0(dlst_6[0], dlst_6[1]);
const js_3 = types_0.taggedTemplateExpression(tag_1, tl_0);
const result_20 = set_js2_0(expr_2, js_3, ctx_3);
return result_20;
};
const add_string_0 = ctx_4 => {
const pfn_0 = add_0(`str`, transform_str_0);
const ppr_0 = pfn_0(ctx_4);
const pfn_1 = add_0(`strt`, transform_template_0);
const ppr_1 = pfn_1(ppr_0);
const pfn_2 = add_0(`strtt`, transform_tagged_template_0);
const ppr_2 = pfn_2(ppr_1);
return ppr_2;
};
exports.transform_str = transform_str_0;
exports.split_exprs = split_exprs_0;
exports.transform_template = transform_template_0;
exports.transform_tagged_template = transform_tagged_template_0;
exports.add_string = add_string_0;