featureManager.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. const notify_1 = require("./features/notify");
  4. const profiling_1 = require("./features/profiling");
  5. const events_1 = require("./features/events");
  6. const metrics_1 = require("./features/metrics");
  7. const tracing_1 = require("./features/tracing");
  8. const dependencies_1 = require("./features/dependencies");
  9. const Debug = require("debug");
  10. function getObjectAtPath(context, path) {
  11. if (path.indexOf('.') === -1 && path.indexOf('[') === -1) {
  12. return context[path];
  13. }
  14. let crumbs = path.split(/\.|\[|\]/g);
  15. let i = -1;
  16. let len = crumbs.length;
  17. let result;
  18. while (++i < len) {
  19. if (i === 0)
  20. result = context;
  21. if (!crumbs[i])
  22. continue;
  23. if (result === undefined)
  24. break;
  25. result = result[crumbs[i]];
  26. }
  27. return result;
  28. }
  29. exports.getObjectAtPath = getObjectAtPath;
  30. class AvailableFeature {
  31. }
  32. const availablesFeatures = [
  33. {
  34. name: 'notify',
  35. optionsPath: '.',
  36. module: notify_1.NotifyFeature
  37. },
  38. {
  39. name: 'profiler',
  40. optionsPath: 'profiling',
  41. module: profiling_1.ProfilingFeature
  42. },
  43. {
  44. name: 'events',
  45. module: events_1.EventsFeature
  46. },
  47. {
  48. name: 'metrics',
  49. optionsPath: 'metrics',
  50. module: metrics_1.MetricsFeature
  51. },
  52. {
  53. name: 'tracing',
  54. optionsPath: '.',
  55. module: tracing_1.TracingFeature
  56. },
  57. {
  58. name: 'dependencies',
  59. module: dependencies_1.DependenciesFeature
  60. }
  61. ];
  62. class FeatureManager {
  63. constructor() {
  64. this.logger = Debug('axm:features');
  65. }
  66. init(options) {
  67. for (let availableFeature of availablesFeatures) {
  68. this.logger(`Creating feature ${availableFeature.name}`);
  69. const feature = new availableFeature.module();
  70. let config = undefined;
  71. if (typeof availableFeature.optionsPath !== 'string') {
  72. config = {};
  73. }
  74. else if (availableFeature.optionsPath === '.') {
  75. config = options;
  76. }
  77. else {
  78. config = getObjectAtPath(options, availableFeature.optionsPath);
  79. }
  80. this.logger(`Init feature ${availableFeature.name}`);
  81. feature.init(config);
  82. availableFeature.instance = feature;
  83. }
  84. }
  85. get(name) {
  86. const feature = availablesFeatures.find(feature => feature.name === name);
  87. if (feature === undefined || feature.instance === undefined) {
  88. throw new Error(`Tried to call feature ${name} which doesn't exist or wasn't initiated`);
  89. }
  90. return feature.instance;
  91. }
  92. destroy() {
  93. for (let availableFeature of availablesFeatures) {
  94. if (availableFeature.instance === undefined)
  95. continue;
  96. this.logger(`Destroy feature ${availableFeature.name}`);
  97. availableFeature.instance.destroy();
  98. }
  99. }
  100. }
  101. exports.FeatureManager = FeatureManager;
  102. class FeatureConfig {
  103. }
  104. exports.FeatureConfig = FeatureConfig;
  105. //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmVhdHVyZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSw4Q0FBaUQ7QUFDakQsb0RBQXVEO0FBQ3ZELDhDQUFpRDtBQUVqRCxnREFBbUQ7QUFDbkQsZ0RBQW1EO0FBQ25ELDBEQUE2RDtBQUM3RCwrQkFBOEI7QUFFOUIsU0FBZ0IsZUFBZSxDQUFFLE9BQWUsRUFBRSxJQUFZO0lBQzVELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQ3hELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO0tBQ3JCO0lBRUQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUNWLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUE7SUFDdkIsSUFBSSxNQUFNLENBQUE7SUFFVixPQUFPLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRTtRQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDO1lBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQTtRQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUFFLFNBQVE7UUFDeEIsSUFBSSxNQUFNLEtBQUssU0FBUztZQUFFLE1BQUs7UUFDL0IsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUMzQjtJQUVELE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQztBQWxCRCwwQ0FrQkM7QUFFRCxNQUFNLGdCQUFnQjtDQXFCckI7QUFFRCxNQUFNLGtCQUFrQixHQUF1QjtJQUM3QztRQUNFLElBQUksRUFBRSxRQUFRO1FBQ2QsV0FBVyxFQUFFLEdBQUc7UUFDaEIsTUFBTSxFQUFFLHNCQUFhO0tBQ3RCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsVUFBVTtRQUNoQixXQUFXLEVBQUUsV0FBVztRQUN4QixNQUFNLEVBQUUsNEJBQWdCO0tBQ3pCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsUUFBUTtRQUNkLE1BQU0sRUFBRSxzQkFBYTtLQUN0QjtJQUNEO1FBQ0UsSUFBSSxFQUFFLFNBQVM7UUFDZixXQUFXLEVBQUUsU0FBUztRQUN0QixNQUFNLEVBQUUsd0JBQWM7S0FDdkI7SUFDRDtRQUNFLElBQUksRUFBRSxTQUFTO1FBQ2YsV0FBVyxFQUFFLEdBQUc7UUFDaEIsTUFBTSxFQUFFLHdCQUFjO0tBQ3ZCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsY0FBYztRQUNwQixNQUFNLEVBQUUsa0NBQW1CO0tBQzVCO0NBQ0YsQ0FBQTtBQUVELE1BQWEsY0FBYztJQUEzQjtRQUVVLFdBQU0sR0FBYSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUE7SUE2Q2xELENBQUM7SUF4Q0MsSUFBSSxDQUFFLE9BQWlCO1FBQ3JCLEtBQUssSUFBSSxnQkFBZ0IsSUFBSSxrQkFBa0IsRUFBRTtZQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1lBQ3hELE1BQU0sT0FBTyxHQUFHLElBQUksZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUE7WUFDN0MsSUFBSSxNQUFNLEdBQVEsU0FBUyxDQUFBO1lBQzNCLElBQUksT0FBTyxnQkFBZ0IsQ0FBQyxXQUFXLEtBQUssUUFBUSxFQUFFO2dCQUNwRCxNQUFNLEdBQUcsRUFBRSxDQUFBO2FBQ1o7aUJBQU0sSUFBSSxnQkFBZ0IsQ0FBQyxXQUFXLEtBQUssR0FBRyxFQUFFO2dCQUMvQyxNQUFNLEdBQUcsT0FBTyxDQUFBO2FBQ2pCO2lCQUFNO2dCQUNMLE1BQU0sR0FBRyxlQUFlLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFBO2FBQ2hFO1lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtZQUlwRCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ3BCLGdCQUFnQixDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUE7U0FDcEM7SUFDSCxDQUFDO0lBTUQsR0FBRyxDQUFFLElBQVk7UUFDZixNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFBO1FBQ3pFLElBQUksT0FBTyxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUMzRCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixJQUFJLDBDQUEwQyxDQUFDLENBQUE7U0FDekY7UUFDRCxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUE7SUFDekIsQ0FBQztJQUVELE9BQU87UUFDTCxLQUFLLElBQUksZ0JBQWdCLElBQUksa0JBQWtCLEVBQUU7WUFDL0MsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLEtBQUssU0FBUztnQkFBRSxTQUFRO1lBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7WUFDdkQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFBO1NBQ3BDO0lBQ0gsQ0FBQztDQUNGO0FBL0NELHdDQStDQztBQUdELE1BQWEsYUFBYTtDQUFJO0FBQTlCLHNDQUE4QiJ9