loadable-transformer-ts5
Version:
TypeScript custom transformer for lodable-components SSR
89 lines (88 loc) • 3.83 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.emitGlobalFunction = exports.removeMatchingLeadingComments = exports.getLeadingComments = exports.createObjectMethod = exports.getImportArg = void 0;
var typescript_1 = __importDefault(require("typescript"));
function getImportArg(callNode) {
return callNode.arguments[0];
}
exports.getImportArg = getImportArg;
function createObjectMethod(name, args, block) {
return typescript_1.default.factory.createMethodDeclaration([], undefined, name, undefined, [], args.map(function (name) { return typescript_1.default.factory.createParameterDeclaration(undefined, undefined, name); }), undefined, block);
}
exports.createObjectMethod = createObjectMethod;
function visitEachLeadingComments(node, cb) {
var src = node.getSourceFile();
// const text = src.getFullText();
var text = node.getFullText();
var ranges = typescript_1.default.getLeadingCommentRanges(text, 0);
if (!ranges)
return [];
var ret = [];
for (var _i = 0, ranges_1 = ranges; _i < ranges_1.length; _i++) {
var range = ranges_1[_i];
var comment = __assign(__assign({}, range), { text: text.slice(range.pos, range.end) });
if (cb(comment) === false)
break;
}
return node;
}
function getLeadingComments(node) {
var ret = [];
visitEachLeadingComments(node, function (comment) {
if (comment.kind === typescript_1.default.SyntaxKind.SingleLineCommentTrivia) {
ret.push(comment.text.slice(2));
}
else if (comment.kind == typescript_1.default.SyntaxKind.MultiLineCommentTrivia) {
ret.push(comment.text.slice(2, comment.text.length - 2));
}
});
return ret;
}
exports.getLeadingComments = getLeadingComments;
function removeMatchingLeadingComments(node, ctx, condition) {
return visitEachLeadingComments(node, function (comment) {
if (condition.test(comment.text)) {
var w = node.getLeadingTriviaWidth();
var removeComment_1 = function (x) {
if (x.getFullStart() === node.getFullStart()) {
typescript_1.default.setTextRange(x, { pos: x.getStart(), end: x.getEnd() });
}
return typescript_1.default.visitEachChild(x, removeComment_1, ctx);
};
typescript_1.default.visitEachChild(node, removeComment_1, ctx);
var head = node.getSourceFile().text.slice(0, node.getFullStart());
var tail = node.getSourceFile().text.slice(node.getStart());
node.getSourceFile().text = head + ''.padStart(w) + tail;
typescript_1.default.setTextRange(node, { pos: node.getStart(), end: node.getEnd() });
return false;
}
});
}
exports.removeMatchingLeadingComments = removeMatchingLeadingComments;
function emitGlobalFunction(ctx, helperKey, text) {
var helpers = ctx.readEmitHelpers();
if (helpers) {
helpers.filter(function (helper) { return helper.name !== helperKey; }).forEach(function (helper) { return ctx.requestEmitHelper(helper); });
}
ctx.requestEmitHelper({
name: helperKey,
priority: 0,
scoped: false,
text: text,
});
}
exports.emitGlobalFunction = emitGlobalFunction;