"use strict"; const types = require("@babel/types"); const splitFilter = require("split-filter"); const templateExpression = require("./util/template-expression"); let tmplPathLiteral = templateExpression(` $path(%%path%%) `); module.exports = { name: "literals", visitors: { NixIntegerLiteral: (node) => types.numericLiteral(parseInt(node.value)), NixFloatLiteral: (node) => types.numericLiteral(parseFloat(node.value)), NixPathLiteral: (node) => tmplPathLiteral({ path: types.stringLiteral(node.path) }), NixStringLiteral: (node, { defer }) => { if (node.parts.length === 1 && node.parts[0].type === "NixInterpolationLiteral") { // Fast case; just a simple, non-interpolated string literal return types.stringLiteral(node.parts[0].value); } else { return defer((node) => { let [ literals, expressions ] = splitFilter(node.parts, (part) => part.type === "NixInterpolationLiteral"); return types.templateLiteral( literals.map((node) => types.templateElement({ raw: node.value })), expressions.map((node) => node.expression) ); }); } }, } };