Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
ExpressionVisitor.prototype.visitElement = function (ast) {
var _this = this;
if (this.attr && utils_1.getSelectors(this.info) && this.attr.name.startsWith(TEMPLATE_ATTR_PREFIX)) {
// The value is a template expression but the expression AST was not produced when the
// TemplateAst was produce so
// do that now.
var key_1 = this.attr.name.substr(TEMPLATE_ATTR_PREFIX.length);
// Find the selector
var selectorInfo = utils_1.getSelectors(this.info);
var selectors = selectorInfo.selectors;
var selector_1 = selectors.filter(function (s) { return s.attrs.some(function (attr, i) { return i % 2 == 0 && attr == key_1; }); })[0];
var templateBindingResult = this.info.expressionParser.parseTemplateBindings(key_1, this.attr.value, null);
// find the template binding that contains the position
if (!this.attr.valueSpan)
return;
var valueRelativePosition_1 = this.position - this.attr.valueSpan.start.offset - 1;
var bindings = templateBindingResult.templateBindings;
var binding = bindings.find(function (binding) { return utils_1.inSpan(valueRelativePosition_1, binding.span, /* exclusive */ true); }) ||
bindings.find(function (binding) { return utils_1.inSpan(valueRelativePosition_1, binding.span); });
var keyCompletions = function () {
var keys = [];
if (selector_1) {
var attrNames = selector_1.attrs.filter(function (_, i) { return i % 2 == 0; });
keys = attrNames.filter(function (name) { return name.startsWith(key_1) && name != key_1; })
.map(function (name) { return lowerName(name.substr(key_1.length)); });
function elementCompletions(info, path) {
var htmlNames = html_info_1.elementNames().filter(function (name) { return !(name in hiddenHtmlElements); });
// Collect the elements referenced by the selectors
var directiveElements = utils_1.getSelectors(info)
.selectors.map(function (selector) { return selector.element; })
.filter(function (name) { return !!name; });
var components = directiveElements.map(function (name) { return ({ kind: 'component', name: name, sort: name }); });
var htmlElements = htmlNames.map(function (name) { return ({ kind: 'element', name: name, sort: name }); });
// Return components and html elements
return utils_1.uniqueByName(htmlElements.concat(components));
}
function entityCompletions(value, position) {
ExpressionVisitor.prototype.visitElement = function (ast) {
var _this = this;
if (this.attr && utils_1.getSelectors(this.info) && this.attr.name.startsWith(TEMPLATE_ATTR_PREFIX)) {
// The value is a template expression but the expression AST was not produced when the
// TemplateAst was produce so
// do that now.
var key_1 = this.attr.name.substr(TEMPLATE_ATTR_PREFIX.length);
// Find the selector
var selectorInfo = utils_1.getSelectors(this.info);
var selectors = selectorInfo.selectors;
var selector_1 = selectors.filter(function (s) { return s.attrs.some(function (attr, i) { return i % 2 == 0 && attr == key_1; }); })[0];
var templateBindingResult = this.info.expressionParser.parseTemplateBindings(key_1, this.attr.value, null);
// find the template binding that contains the position
if (!this.attr.valueSpan)
return;
var valueRelativePosition_1 = this.position - this.attr.valueSpan.start.offset - 1;
var bindings = templateBindingResult.templateBindings;
var binding = bindings.find(function (binding) { return utils_1.inSpan(valueRelativePosition_1, binding.span, /* exclusive */ true); }) ||
bindings.find(function (binding) { return utils_1.inSpan(valueRelativePosition_1, binding.span); });
// Add html attributes
var htmlAttributes = html_info_1.attributeNames(elementName) || [];
if (htmlAttributes) {
attributes.push.apply(attributes, tslib_1.__spread(htmlAttributes.map(function (name) { return ({ name: name, fromHtml: true }); })));
}
// Add html properties
var htmlProperties = html_info_1.propertyNames(elementName);
if (htmlProperties) {
attributes.push.apply(attributes, tslib_1.__spread(htmlProperties.map(function (name) { return ({ name: name, input: true }); })));
}
// Add html events
var htmlEvents = html_info_1.eventNames(elementName);
if (htmlEvents) {
attributes.push.apply(attributes, tslib_1.__spread(htmlEvents.map(function (name) { return ({ name: name, output: true }); })));
}
var _a = utils_1.getSelectors(info), selectors = _a.selectors, selectorMap = _a.map;
if (selectors && selectors.length) {
// All the attributes that are selectable should be shown.
var applicableSelectors = selectors.filter(function (selector) { return !selector.element || selector.element == elementName; });
var selectorAndAttributeNames = applicableSelectors.map(function (selector) { return ({ selector: selector, attrs: selector.attrs.filter(function (a) { return !!a; }) }); });
var attrs_1 = utils_1.flatten(selectorAndAttributeNames.map(function (selectorAndAttr) {
var directive = selectorMap.get(selectorAndAttr.selector);
var result = selectorAndAttr.attrs.map(function (name) { return ({ name: name, input: name in directive.inputs, output: name in directive.outputs }); });
return result;
}));
// Add template attribute if a directive contains a template reference
selectorAndAttributeNames.forEach(function (selectorAndAttr) {
var selector = selectorAndAttr.selector;
var directive = selectorMap.get(selector);
if (directive && utils_1.hasTemplateReference(directive.type) && selector.attrs.length &&
selector.attrs[0]) {
attrs_1.push({ name: selector.attrs[0], template: true });