vue-hooks-env
Version:
TypeScript and TSX Env for Vue Composition Api
91 lines (90 loc) • 3.7 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.transformer = void 0;
var ts = __importStar(require("typescript"));
function getCallExpressionName(node, typeChecker) {
var signature = typeChecker.getResolvedSignature(node);
if (typeof signature === 'undefined') {
return null;
}
var declaration = signature.declaration;
if (!declaration || ts.isJSDocSignature(declaration) || !declaration.name) {
return null;
}
var name = declaration.name.getText();
if (/^(HF?C|keys)$/.test(name)) {
var file = declaration.parent;
if (ts.isSourceFile(file) && file.fileName.indexOf('vue-hooks-env/lib/util/' + name + '.d.ts') >= 0) {
return name;
}
}
return null;
}
function visitNode(node, program, prefix) {
var typeChecker = program.getTypeChecker();
if (!ts.isCallExpression(node)) {
return node;
}
var name = getCallExpressionName(node, typeChecker);
if (!name) {
return node;
}
if (name === 'keys') {
if (node.typeArguments == null) {
return node;
}
var type = typeChecker.getTypeFromTypeNode(node.typeArguments[0]);
var properties = typeChecker.getPropertiesOfType(type);
return ts.createArrayLiteral(properties.map(function (property) { return ts.createLiteral(property.name); }));
}
var argv = Array.from(node.arguments);
if (node.typeArguments != null) {
var type = typeChecker.getTypeFromTypeNode(node.typeArguments[0]);
var properties = typeChecker.getPropertiesOfType(type);
argv.push(ts.createArrayLiteral(properties.map(function (property) { return ts.createLiteral(property.name); })));
}
else {
argv.push(ts.createArrayLiteral([]));
}
var parent = node.parent;
if (parent != null && ts.isVariableDeclaration(parent)) {
var name_1 = parent.name;
if (ts.isIdentifier(name_1)) {
var text = name_1.escapedText;
if (typeof text === 'string') {
var realName = text.replace(/A-Z/g, function (s) { return '-' + s.toLowerCase(); });
var realPrefix = prefix.replace(/A-Z/g, function (s) { return '-' + s.toLowerCase(); }).replace(/-$/, '');
argv.push(ts.createStringLiteral(realPrefix + '-' + realName));
}
}
}
node.arguments = ts.createNodeArray(argv);
return node;
}
function transformer(program, prefix) {
if (prefix === void 0) { prefix = ''; }
return function (ctx) { return function (file) {
var visitor = function (node) { return ts.visitEachChild(visitNode(node, program, prefix), visitor, ctx); };
return ts.visitEachChild(visitNode(file, program, prefix), visitor, ctx);
}; };
}
exports.transformer = transformer;