diff options
| author | ruki <waruqi@gmail.com> | 2018-11-08 00:38:48 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2018-11-07 21:53:09 +0800 |
| commit | 26105034da4fcce7ac883c899d781f016559310d (patch) | |
| tree | c459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/@babel/plugin-transform-template-literals/lib/index.js | |
| parent | 2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff) | |
| download | xmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip | |
switch to vuepress
Diffstat (limited to 'node_modules/@babel/plugin-transform-template-literals/lib/index.js')
| -rw-r--r-- | node_modules/@babel/plugin-transform-template-literals/lib/index.js | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/node_modules/@babel/plugin-transform-template-literals/lib/index.js b/node_modules/@babel/plugin-transform-template-literals/lib/index.js new file mode 100644 index 00000000..672aeaec --- /dev/null +++ b/node_modules/@babel/plugin-transform-template-literals/lib/index.js @@ -0,0 +1,145 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +function _helperPluginUtils() { + const data = require("@babel/helper-plugin-utils"); + + _helperPluginUtils = function _helperPluginUtils() { + return data; + }; + + return data; +} + +function _core() { + const data = require("@babel/core"); + + _core = function _core() { + return data; + }; + + return data; +} + +var _default = (0, _helperPluginUtils().declare)((api, options) => { + api.assertVersion(7); + const loose = options.loose; + let helperName = "taggedTemplateLiteral"; + if (loose) helperName += "Loose"; + + function buildConcatCallExressions(items) { + let avail = true; + return items.reduce(function (left, right) { + let canBeInserted = _core().types.isLiteral(right); + + if (!canBeInserted && avail) { + canBeInserted = true; + avail = false; + } + + if (canBeInserted && _core().types.isCallExpression(left)) { + left.arguments.push(right); + return left; + } + + return _core().types.callExpression(_core().types.memberExpression(left, _core().types.identifier("concat")), [right]); + }); + } + + return { + visitor: { + TaggedTemplateExpression(path) { + const node = path.node; + const quasi = node.quasi; + const strings = []; + const raws = []; + let isStringsRawEqual = true; + var _arr = quasi.quasis; + + for (var _i = 0; _i < _arr.length; _i++) { + const elem = _arr[_i]; + const _elem$value = elem.value, + raw = _elem$value.raw, + cooked = _elem$value.cooked; + const value = cooked == null ? path.scope.buildUndefinedNode() : _core().types.stringLiteral(cooked); + strings.push(value); + raws.push(_core().types.stringLiteral(raw)); + + if (raw !== cooked) { + isStringsRawEqual = false; + } + } + + const scope = path.scope.getProgramParent(); + const templateObject = scope.generateUidIdentifier("templateObject"); + const helperId = this.addHelper(helperName); + const callExpressionInput = [_core().types.arrayExpression(strings)]; + + if (!isStringsRawEqual) { + callExpressionInput.push(_core().types.arrayExpression(raws)); + } + + const lazyLoad = _core().template.ast` + function ${templateObject}() { + const data = ${_core().types.callExpression(helperId, callExpressionInput)}; + ${templateObject} = function() { return data }; + return data; + } + `; + scope.path.unshiftContainer("body", lazyLoad); + path.replaceWith(_core().types.callExpression(node.tag, [_core().types.callExpression(_core().types.cloneNode(templateObject), []), ...quasi.expressions])); + }, + + TemplateLiteral(path) { + const nodes = []; + const expressions = path.get("expressions"); + let index = 0; + var _arr2 = path.node.quasis; + + for (var _i2 = 0; _i2 < _arr2.length; _i2++) { + const elem = _arr2[_i2]; + + if (elem.value.cooked) { + nodes.push(_core().types.stringLiteral(elem.value.cooked)); + } + + if (index < expressions.length) { + const expr = expressions[index++]; + const node = expr.node; + + if (!_core().types.isStringLiteral(node, { + value: "" + })) { + nodes.push(node); + } + } + } + + const considerSecondNode = !loose || !_core().types.isStringLiteral(nodes[1]); + + if (!_core().types.isStringLiteral(nodes[0]) && considerSecondNode) { + nodes.unshift(_core().types.stringLiteral("")); + } + + let root = nodes[0]; + + if (loose) { + for (let i = 1; i < nodes.length; i++) { + root = _core().types.binaryExpression("+", root, nodes[i]); + } + } else if (nodes.length > 1) { + root = buildConcatCallExressions(nodes); + } + + path.replaceWith(root); + } + + } + }; +}); + +exports.default = _default;
\ No newline at end of file |
