UNPKG

ember-metrics

Version:

Send data to multiple analytics integrations without re-implementing new API

101 lines (76 loc) 2.24 kB
'use strict'; var Funnel = require('broccoli-funnel'); var path = require('path'); function normalize(name) { if (typeof name === 'string') { name = path.basename(name, '.js'); return name.replace(/([a-z](?=[A-Z]))/g, '$1-').toLowerCase(); } } function uniqueStrings(arr) { var out = []; var dict = {}; for (var i = 0; i < arr.length; i++) { var obj = arr[i]; if (typeof obj === 'string' && !dict[obj]) { out.push(obj); dict[obj] = true; } } return out; } function getEach(arr, propName) { var out = []; for (var i = 0; i < arr.length; i++) { var obj = arr[i]; if (typeof obj === 'object' && obj[propName]) { out.push(obj[propName]); } } return out; } module.exports = { name: require('./package').name, included: function (app, parentAddon) { this._super.included.apply(this, arguments); var target = parentAddon || app; // allow addon to be nested - see: https://github.com/ember-cli/ember-cli/issues/3718 if (target.app) { target = target.app; } var config = target.project.config(target.env) || {}; var addonConfig = config[this.name] || {}; var discovered = ['base']; if (addonConfig.includeAdapters) { discovered = discovered.concat(addonConfig.includeAdapters); } if (config.metricsAdapters) { discovered = discovered.concat(getEach(config.metricsAdapters, 'name')); } this.whitelisted = uniqueStrings(discovered.map(normalize)); }, treeForAddon: function () { // see: https://github.com/ember-cli/ember-cli/issues/4463 var tree = this._super.treeForAddon.apply(this, arguments); return this.filterAdapters( tree, new RegExp('^(?:modules/)?' + this.name + '/metrics-adapters/', 'i') ); }, treeForApp: function (tree) { return this.filterAdapters(tree, new RegExp('^metrics-adapters/', 'i')); }, filterAdapters: function (tree, regex) { var whitelisted = this.whitelisted; return new Funnel(tree, { exclude: [ function (name) { return ( regex.test(name) && whitelisted.indexOf(path.basename(name, '.js')) === -1 ); }, ], }); }, };