UNPKG

4.37 kBJavaScriptView Raw
1/*istanbul ignore next*/"use strict";
2
3exports.__esModule = true;
4
5var _getIterator2 = require("babel-runtime/core-js/get-iterator");
6
7var _getIterator3 = _interopRequireDefault(_getIterator2);
8
9exports.default = function ( /*istanbul ignore next*/_ref) {
10 /*istanbul ignore next*/var t = _ref.types;
11
12 function isString(node) {
13 return t.isLiteral(node) && typeof node.value === "string";
14 }
15
16 function buildBinaryExpression(left, right) {
17 return t.binaryExpression("+", left, right);
18 }
19
20 return {
21 visitor: { /*istanbul ignore next*/
22 TaggedTemplateExpression: function TaggedTemplateExpression(path, state) {
23 /*istanbul ignore next*/var node = path.node;
24
25 var quasi = node.quasi;
26 var args = [];
27
28 var strings = [];
29 var raw = [];
30
31 for ( /*istanbul ignore next*/var _iterator = quasi.quasis, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) {
32 /*istanbul ignore next*/
33 var _ref2;
34
35 if (_isArray) {
36 if (_i >= _iterator.length) break;
37 _ref2 = _iterator[_i++];
38 } else {
39 _i = _iterator.next();
40 if (_i.done) break;
41 _ref2 = _i.value;
42 }
43
44 var elem = _ref2;
45
46 strings.push(t.stringLiteral(elem.value.cooked));
47 raw.push(t.stringLiteral(elem.value.raw));
48 }
49
50 strings = t.arrayExpression(strings);
51 raw = t.arrayExpression(raw);
52
53 var templateName = "taggedTemplateLiteral";
54 if (state.opts.loose) templateName += "Loose";
55
56 var templateObject = state.file.addTemplateObject(templateName, strings, raw);
57 args.push(templateObject);
58
59 args = args.concat(quasi.expressions);
60
61 path.replaceWith(t.callExpression(node.tag, args));
62 },
63 /*istanbul ignore next*/TemplateLiteral: function TemplateLiteral(path, state) {
64 var nodes = [];
65
66 var expressions = path.get("expressions");
67
68 for ( /*istanbul ignore next*/var _iterator2 = path.node.quasis, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) {
69 /*istanbul ignore next*/
70 var _ref3;
71
72 if (_isArray2) {
73 if (_i2 >= _iterator2.length) break;
74 _ref3 = _iterator2[_i2++];
75 } else {
76 _i2 = _iterator2.next();
77 if (_i2.done) break;
78 _ref3 = _i2.value;
79 }
80
81 var elem = _ref3;
82
83 nodes.push(t.stringLiteral(elem.value.cooked));
84
85 var expr = expressions.shift();
86 if (expr) {
87 if (state.opts.spec && !expr.isBaseType("string") && !expr.isBaseType("number")) {
88 nodes.push(t.callExpression(t.identifier("String"), [expr.node]));
89 } else {
90 nodes.push(expr.node);
91 }
92 }
93 }
94
95 // filter out empty string literals
96 nodes = nodes.filter(function (n) /*istanbul ignore next*/{
97 return !t.isLiteral(n, { value: "" });
98 });
99
100 // since `+` is left-to-right associative
101 // ensure the first node is a string if first/second isn't
102 if (!isString(nodes[0]) && !isString(nodes[1])) {
103 nodes.unshift(t.stringLiteral(""));
104 }
105
106 if (nodes.length > 1) {
107 var root = buildBinaryExpression(nodes.shift(), nodes.shift());
108
109 for ( /*istanbul ignore next*/var _iterator3 = nodes, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) {
110 /*istanbul ignore next*/
111 var _ref4;
112
113 if (_isArray3) {
114 if (_i3 >= _iterator3.length) break;
115 _ref4 = _iterator3[_i3++];
116 } else {
117 _i3 = _iterator3.next();
118 if (_i3.done) break;
119 _ref4 = _i3.value;
120 }
121
122 var node = _ref4;
123
124 root = buildBinaryExpression(root, node);
125 }
126
127 path.replaceWith(root);
128 } else {
129 path.replaceWith(nodes[0]);
130 }
131 }
132 }
133 };
134};
135
136/*istanbul ignore next*/
137function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
138
139module.exports = exports["default"];
\No newline at end of file