CustomNodesStorage.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import { injectable, inject } from 'inversify';
  2. import { ServiceIdentifiers } from '../../container/ServiceIdentifiers';
  3. import { ICustomNode } from '../../interfaces/custom-nodes/ICustomNode';
  4. import { IInitializable } from '../../interfaces/IInitializable';
  5. import { IOptions } from '../../interfaces/options/IOptions';
  6. import { IStackTraceData } from '../../interfaces/stack-trace-analyzer/IStackTraceData';
  7. import { CustomNodesFactories } from '../../enums/container/CustomNodesFactories';
  8. import { MapStorage } from '../MapStorage';
  9. import { TCustomNodesFactoriesFactory } from '../../types/container/TCustomNodesFactoriesFactory';
  10. @injectable()
  11. export class CustomNodesStorage extends MapStorage <ICustomNode> implements IInitializable {
  12. /**
  13. * @type {CustomNodesFactories[]}
  14. */
  15. private static readonly customNodesFactoriesList: CustomNodesFactories[] = [
  16. CustomNodesFactories.ConsoleOutputCustomNodesFactory,
  17. CustomNodesFactories.DebugProtectionCustomNodesFactory,
  18. CustomNodesFactories.DomainLockCustomNodesFactory,
  19. CustomNodesFactories.SelfDefendingCustomNodesFactory,
  20. CustomNodesFactories.StringArrayCustomNodesFactory
  21. ];
  22. /**
  23. * @type {TCustomNodesFactoriesFactory}
  24. */
  25. private readonly customNodesFactoriesFactory: TCustomNodesFactoriesFactory;
  26. /**
  27. * @type {IOptions}
  28. */
  29. private readonly options: IOptions;
  30. /**
  31. * @param customNodesFactoriesFactory
  32. * @param options
  33. */
  34. constructor (
  35. @inject(ServiceIdentifiers['Factory<ICustomNodesFactory>']) customNodesFactoriesFactory: TCustomNodesFactoriesFactory,
  36. @inject(ServiceIdentifiers.IOptions) options: IOptions
  37. ) {
  38. super();
  39. this.customNodesFactoriesFactory = customNodesFactoriesFactory;
  40. this.options = options;
  41. }
  42. /**
  43. * @param stackTraceData
  44. */
  45. public initialize (stackTraceData: IStackTraceData[]): void {
  46. const customNodes: [string, ICustomNode][] = [];
  47. CustomNodesStorage.customNodesFactoriesList.forEach((customNodesFactoryName: CustomNodesFactories) => {
  48. const customNodesFactory: Map <string, ICustomNode> | undefined = this.customNodesFactoriesFactory(
  49. customNodesFactoryName
  50. ).initializeCustomNodes(stackTraceData);
  51. if (!customNodesFactory) {
  52. return;
  53. }
  54. customNodes.push(...customNodesFactory);
  55. });
  56. this.storage = new Map <string, ICustomNode> (customNodes);
  57. }
  58. /**
  59. * @param key
  60. * @returns {ICustomNode}
  61. */
  62. public get (key: string | number): ICustomNode {
  63. return super.get(key);
  64. }
  65. /**
  66. * @param value
  67. * @returns {string | number | null}
  68. */
  69. public getKeyOf (value: ICustomNode): string | number | null {
  70. return super.getKeyOf(value);
  71. }
  72. /**
  73. * @returns {number}
  74. */
  75. public getLength (): number {
  76. return super.getLength();
  77. }
  78. /**
  79. * @returns {Map <string | number, ICustomNode>}
  80. */
  81. public getStorage (): Map <string | number, ICustomNode> {
  82. return super.getStorage();
  83. }
  84. }