StringArrayRotateFunctionCodeHelper.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import type { Expression } from 'estree';
  2. import { inject, injectable, } from 'inversify';
  3. import { ServiceIdentifiers } from '../../container/ServiceIdentifiers';
  4. import { TIdentifierNamesGeneratorFactory } from '../../types/container/generators/TIdentifierNamesGeneratorFactory';
  5. import { TStatement } from '../../types/node/TStatement';
  6. import { ICustomCodeHelperFormatter } from '../../interfaces/custom-code-helpers/ICustomCodeHelperFormatter';
  7. import { ICustomCodeHelperObfuscator } from '../../interfaces/custom-code-helpers/ICustomCodeHelperObfuscator';
  8. import { IOptions } from '../../interfaces/options/IOptions';
  9. import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator';
  10. import { initializable } from '../../decorators/Initializable';
  11. import { StringArrayRotateFunctionTemplate } from './templates/string-array-rotate-function/StringArrayRotateFunctionTemplate';
  12. import { AbstractCustomCodeHelper } from '../AbstractCustomCodeHelper';
  13. import { NodeUtils } from '../../node/NodeUtils';
  14. @injectable()
  15. export class StringArrayRotateFunctionCodeHelper extends AbstractCustomCodeHelper {
  16. /**
  17. * @type {number}
  18. */
  19. @initializable()
  20. private comparisonValue!: number;
  21. /**
  22. * @type {Expression}
  23. */
  24. @initializable()
  25. private comparisonExpressionNode!: Expression;
  26. /**
  27. * @type {string}
  28. */
  29. @initializable()
  30. private stringArrayName!: string;
  31. /**
  32. * @param {TIdentifierNamesGeneratorFactory} identifierNamesGeneratorFactory
  33. * @param {ICustomCodeHelperFormatter} customCodeHelperFormatter
  34. * @param {ICustomCodeHelperObfuscator} customCodeHelperObfuscator
  35. * @param {IRandomGenerator} randomGenerator
  36. * @param {IOptions} options
  37. */
  38. public constructor (
  39. @inject(ServiceIdentifiers.Factory__IIdentifierNamesGenerator)
  40. identifierNamesGeneratorFactory: TIdentifierNamesGeneratorFactory,
  41. @inject(ServiceIdentifiers.ICustomCodeHelperFormatter) customCodeHelperFormatter: ICustomCodeHelperFormatter,
  42. @inject(ServiceIdentifiers.ICustomCodeHelperObfuscator) customCodeHelperObfuscator: ICustomCodeHelperObfuscator,
  43. @inject(ServiceIdentifiers.IRandomGenerator) randomGenerator: IRandomGenerator,
  44. @inject(ServiceIdentifiers.IOptions) options: IOptions
  45. ) {
  46. super(
  47. identifierNamesGeneratorFactory,
  48. customCodeHelperFormatter,
  49. customCodeHelperObfuscator,
  50. randomGenerator,
  51. options
  52. );
  53. }
  54. /**
  55. * @param {string} stringArrayName
  56. * @param {number} comparisonValue
  57. * @param {Expression} comparisonExpressionNode
  58. */
  59. public initialize (
  60. stringArrayName: string,
  61. comparisonValue: number,
  62. comparisonExpressionNode: Expression
  63. ): void {
  64. this.stringArrayName = stringArrayName;
  65. this.comparisonValue = comparisonValue;
  66. this.comparisonExpressionNode = comparisonExpressionNode;
  67. }
  68. /**
  69. * @param {string} codeHelperTemplate
  70. * @returns {TStatement[]}
  71. */
  72. protected getNodeStructure (codeHelperTemplate: string): TStatement[] {
  73. return NodeUtils.convertCodeToStructure(codeHelperTemplate);
  74. }
  75. /**
  76. * @returns {string}
  77. */
  78. protected override getCodeHelperTemplate (): string {
  79. const comparisonExpressionCode: string = NodeUtils.convertStructureToCode([this.comparisonExpressionNode]);
  80. return this.customCodeHelperFormatter.formatTemplate(
  81. StringArrayRotateFunctionTemplate(),
  82. {
  83. comparisonExpressionCode,
  84. comparisonValue: this.comparisonValue,
  85. stringArrayName: this.stringArrayName
  86. }
  87. );
  88. }
  89. }