UNPKG

hydrolysis

Version:
46 lines (45 loc) 1.91 kB
/** * @license * Copyright (c) 2015 The Polymer Project Authors. All rights reserved. * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt * Code distributed by Google as part of the polymer project is also * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt */ 'use strict'; var esutil = require('./esutil'); var numFeatures = 0; function featureFinder() { /** The features we've found. */ var features = []; function _extractDesc(feature, node, parent) { feature.desc = esutil.getAttachedComment(parent); } function _extractProperties(feature, node, parent) { var featureNode = node.arguments[0]; if (featureNode.type !== 'ObjectExpression') { console.warn('Expected first argument to Polymer.Base._addFeature to be an object.', 'Got', featureNode.type, 'instead.'); return; } var objExpr = featureNode; if (!objExpr.properties) return; feature.properties = objExpr.properties.map(esutil.toPropertyDescriptor); } var visitors = { enterCallExpression: function enterCallExpression(node, parent) { var isAddFeatureCall = esutil.matchesCallExpression(node.callee, ['Polymer', 'Base', '_addFeature']); if (!isAddFeatureCall) { return; } /** @type {!FeatureDescriptor} */ var feature = {}; _extractDesc(feature, node, parent); _extractProperties(feature, node, parent); features.push(feature); } }; return { visitors: visitors, features: features }; } exports.featureFinder = featureFinder; ;