mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
stringArrayWrappersType: 'function' now generates different indexes between each wrapper inside the same lexical scope
This commit is contained in:
@@ -54,7 +54,7 @@ export enum ServiceIdentifiers {
|
||||
IScopeAnalyzer = 'IScopeAnalyzer',
|
||||
IStringArrayIndexNode = 'IStringArrayIndexNode',
|
||||
IStringArrayScopeCallsWrapperLexicalScopeDataStorage = 'IStringArrayScopeCallsWrapperLexicalScopeDataStorage',
|
||||
IStringArrayScopeCallsWrapperNamesDataStorage = 'IStringArrayScopeCallsWrapperNamesDataStorage',
|
||||
IStringArrayScopeCallsWrappersDataStorage = 'IStringArrayScopeCallsWrappersDataStorage',
|
||||
IStringArrayStorage = 'IStringArrayStorage',
|
||||
IStringArrayStorageAnalyzer = 'IStringArrayStorageAnalyzer',
|
||||
IThroughIdentifierReplacer = 'IThroughIdentifierReplacer',
|
||||
|
||||
@@ -10,7 +10,7 @@ import { IOptions } from '../../../interfaces/options/IOptions';
|
||||
import { IPropertyIdentifierNamesCacheStorage } from '../../../interfaces/storages/identifier-names-cache/IPropertyIdentifierNamesCacheStorage';
|
||||
import { IRandomGenerator } from '../../../interfaces/utils/IRandomGenerator';
|
||||
import { IStringArrayScopeCallsWrapperLexicalScopeDataStorage } from '../../../interfaces/storages/string-array-transformers/IStringArrayScopeCallsWrapperLexicalScopeDataStorage';
|
||||
import { IStringArrayScopeCallsWrapperNamesDataStorage } from '../../../interfaces/storages/string-array-transformers/IStringArrayScopeCallsWrapperNamesDataStorage';
|
||||
import { IStringArrayScopeCallsWrappersDataStorage } from '../../../interfaces/storages/string-array-transformers/IStringArrayScopeCallsWrappersDataStorage';
|
||||
import { IStringArrayStorage } from '../../../interfaces/storages/string-array-transformers/IStringArrayStorage';
|
||||
import { IVisitedLexicalScopeNodesStackStorage } from '../../../interfaces/storages/string-array-transformers/IVisitedLexicalScopeNodesStackStorage';
|
||||
|
||||
@@ -20,7 +20,7 @@ import { GlobalIdentifierNamesCacheStorage } from '../../../storages/identifier-
|
||||
import { LiteralNodesCacheStorage } from '../../../storages/string-array-transformers/LiteralNodesCacheStorage';
|
||||
import { PropertyIdentifierNamesCacheStorage } from '../../../storages/identifier-names-cache/PropertyIdentifierNamesCacheStorage';
|
||||
import { StringArrayScopeCallsWrapperLexicalScopeDataStorage } from '../../../storages/string-array-transformers/StringArrayScopeCallsWrapperLexicalScopeDataStorage';
|
||||
import { StringArrayScopeCallsWrapperNamesDataStorage } from '../../../storages/string-array-transformers/StringArrayScopeCallsWrapperNamesDataStorage';
|
||||
import { StringArrayScopeCallsWrappersDataStorage } from '../../../storages/string-array-transformers/StringArrayScopeCallsWrappersDataStorage';
|
||||
import { StringArrayStorage } from '../../../storages/string-array-transformers/StringArrayStorage';
|
||||
import { VisitedLexicalScopeNodesStackStorage } from '../../../storages/string-array-transformers/VisitedLexicalScopeNodesStackStorage';
|
||||
|
||||
@@ -50,8 +50,8 @@ export const storagesModule: interfaces.ContainerModule = new ContainerModule((b
|
||||
.to(StringArrayScopeCallsWrapperLexicalScopeDataStorage)
|
||||
.inSingletonScope();
|
||||
|
||||
bind<IStringArrayScopeCallsWrapperNamesDataStorage>(ServiceIdentifiers.IStringArrayScopeCallsWrapperNamesDataStorage)
|
||||
.to(StringArrayScopeCallsWrapperNamesDataStorage)
|
||||
bind<IStringArrayScopeCallsWrappersDataStorage>(ServiceIdentifiers.IStringArrayScopeCallsWrappersDataStorage)
|
||||
.to(StringArrayScopeCallsWrappersDataStorage)
|
||||
.inSingletonScope();
|
||||
|
||||
bind<IVisitedLexicalScopeNodesStackStorage>(ServiceIdentifiers.IVisitedLexicalScopeNodesStackStorage)
|
||||
|
||||
@@ -11,7 +11,6 @@ import { IArrayUtils } from '../../interfaces/utils/IArrayUtils';
|
||||
import { ICustomCodeHelperFormatter } from '../../interfaces/custom-code-helpers/ICustomCodeHelperFormatter';
|
||||
import { IOptions } from '../../interfaces/options/IOptions';
|
||||
import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator';
|
||||
import { IStringArrayScopeCallsWrapperParameterIndexesData } from '../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrapperParameterIndexesData';
|
||||
import { IStringArrayStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayStorage';
|
||||
|
||||
import { initializable } from '../../decorators/Initializable';
|
||||
@@ -19,6 +18,7 @@ import { initializable } from '../../decorators/Initializable';
|
||||
import { AbstractStringArrayCallNode } from './AbstractStringArrayCallNode';
|
||||
import { NodeFactory } from '../../node/NodeFactory';
|
||||
import { NodeUtils } from '../../node/NodeUtils';
|
||||
import { IStringArrayScopeCallsWrapperData } from '../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrapperData';
|
||||
|
||||
@injectable()
|
||||
export class StringArrayCallNode extends AbstractStringArrayCallNode {
|
||||
@@ -41,16 +41,10 @@ export class StringArrayCallNode extends AbstractStringArrayCallNode {
|
||||
private indexShiftAmount!: number;
|
||||
|
||||
/**
|
||||
* @type {string}
|
||||
* @type {IStringArrayScopeCallsWrapperData}
|
||||
*/
|
||||
@initializable()
|
||||
private stringArrayCallsWrapperName!: string;
|
||||
|
||||
/**
|
||||
* @type {IStringArrayScopeCallsWrapperParameterIndexesData | null}
|
||||
*/
|
||||
@initializable()
|
||||
private stringArrayCallsWrapperParameterIndexesData!: IStringArrayScopeCallsWrapperParameterIndexesData | null;
|
||||
private stringArrayCallsWrapperData!: IStringArrayScopeCallsWrapperData;
|
||||
|
||||
/**
|
||||
* @param {TIdentifierNamesGeneratorFactory} identifierNamesGeneratorFactory
|
||||
@@ -84,23 +78,20 @@ export class StringArrayCallNode extends AbstractStringArrayCallNode {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} stringArrayCallsWrapperName
|
||||
* @param {IStringArrayScopeCallsWrapperParameterIndexesData | null} stringArrayCallsWrapperParameterIndexesData
|
||||
* @param {number} index
|
||||
* @param {number} indexShiftAmount
|
||||
* @param {IStringArrayScopeCallsWrapperData} stringArrayCallsWrapperData
|
||||
* @param {string | null} decodeKey
|
||||
*/
|
||||
public initialize (
|
||||
stringArrayCallsWrapperName: string,
|
||||
stringArrayCallsWrapperParameterIndexesData: IStringArrayScopeCallsWrapperParameterIndexesData | null,
|
||||
index: number,
|
||||
indexShiftAmount: number,
|
||||
stringArrayCallsWrapperData: IStringArrayScopeCallsWrapperData,
|
||||
decodeKey: string | null
|
||||
): void {
|
||||
this.stringArrayCallsWrapperName = stringArrayCallsWrapperName;
|
||||
this.stringArrayCallsWrapperParameterIndexesData = stringArrayCallsWrapperParameterIndexesData;
|
||||
this.index = index;
|
||||
this.indexShiftAmount = indexShiftAmount;
|
||||
this.stringArrayCallsWrapperData = stringArrayCallsWrapperData;
|
||||
this.decodeKey = decodeKey;
|
||||
}
|
||||
|
||||
@@ -108,7 +99,7 @@ export class StringArrayCallNode extends AbstractStringArrayCallNode {
|
||||
* @returns {TStatement[]}
|
||||
*/
|
||||
protected getNodeStructure (): TStatement[] {
|
||||
const resultIndex: number = this.indexShiftAmount + this.index;
|
||||
const resultIndex: number = this.indexShiftAmount + this.stringArrayCallsWrapperData.index + this.index;
|
||||
|
||||
const indexNode: ESTree.Expression = this.getStringArrayIndexNode(resultIndex);
|
||||
const rc4KeyLiteralNode: ESTree.Literal | null = this.decodeKey
|
||||
@@ -117,7 +108,7 @@ export class StringArrayCallNode extends AbstractStringArrayCallNode {
|
||||
|
||||
// filling call expression arguments with a fake arguments first
|
||||
const callExpressionArgs: ESTree.Expression[] = this.arrayUtils.fillWithRange(
|
||||
!this.stringArrayCallsWrapperParameterIndexesData
|
||||
!this.stringArrayCallsWrapperData.parameterIndexesData
|
||||
// root string array calls wrapper
|
||||
? AbstractStringArrayCallNode.stringArrayRootCallsWrapperParametersCount
|
||||
// scope string array calls wrapper
|
||||
@@ -126,14 +117,14 @@ export class StringArrayCallNode extends AbstractStringArrayCallNode {
|
||||
);
|
||||
|
||||
callExpressionArgs.splice(
|
||||
this.stringArrayCallsWrapperParameterIndexesData?.valueIndexParameterIndex ?? 0,
|
||||
this.stringArrayCallsWrapperData.parameterIndexesData?.valueIndexParameterIndex ?? 0,
|
||||
1,
|
||||
indexNode
|
||||
);
|
||||
|
||||
if (this.stringArrayCallsWrapperParameterIndexesData) {
|
||||
if (this.stringArrayCallsWrapperData.parameterIndexesData) {
|
||||
callExpressionArgs.splice(
|
||||
this.stringArrayCallsWrapperParameterIndexesData.decodeKeyParameterIndex,
|
||||
this.stringArrayCallsWrapperData.parameterIndexesData.decodeKeyParameterIndex,
|
||||
1,
|
||||
// use rc4 key literal node if exists or a node with fake string array wrapper index
|
||||
rc4KeyLiteralNode ?? this.getFakeStringArrayIndexNode(resultIndex)
|
||||
@@ -147,7 +138,7 @@ export class StringArrayCallNode extends AbstractStringArrayCallNode {
|
||||
|
||||
const structure: TStatement = NodeFactory.expressionStatementNode(
|
||||
NodeFactory.callExpressionNode(
|
||||
NodeFactory.identifierNode(this.stringArrayCallsWrapperName),
|
||||
NodeFactory.identifierNode(this.stringArrayCallsWrapperData.name),
|
||||
callExpressionArgs
|
||||
)
|
||||
);
|
||||
|
||||
@@ -11,7 +11,7 @@ import { IArrayUtils } from '../../interfaces/utils/IArrayUtils';
|
||||
import { ICustomCodeHelperFormatter } from '../../interfaces/custom-code-helpers/ICustomCodeHelperFormatter';
|
||||
import { IOptions } from '../../interfaces/options/IOptions';
|
||||
import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator';
|
||||
import { IStringArrayScopeCallsWrapperParameterIndexesData } from '../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrapperParameterIndexesData';
|
||||
import { IStringArrayScopeCallsWrapperData } from '../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrapperData';
|
||||
import { IStringArrayStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayStorage';
|
||||
|
||||
import { initializable } from '../../decorators/Initializable';
|
||||
@@ -23,35 +23,16 @@ import { NodeUtils } from '../../node/NodeUtils';
|
||||
@injectable()
|
||||
export class StringArrayScopeCallsWrapperFunctionNode extends AbstractStringArrayCallNode {
|
||||
/**
|
||||
* @type {number}
|
||||
* @type {IStringArrayScopeCallsWrapperData}
|
||||
*/
|
||||
@initializable()
|
||||
private shiftedIndex!: number;
|
||||
private upperStringArrayCallsWrapperData!: IStringArrayScopeCallsWrapperData;
|
||||
|
||||
/**
|
||||
* @type {string}
|
||||
* @type {IStringArrayScopeCallsWrapperData}
|
||||
*/
|
||||
@initializable()
|
||||
private upperStringArrayCallsWrapperName!: string;
|
||||
|
||||
/**
|
||||
* @type {IStringArrayScopeCallsWrapperParameterIndexesData}
|
||||
*/
|
||||
@initializable()
|
||||
private upperStringArrayCallsWrapperParameterIndexesData!: IStringArrayScopeCallsWrapperParameterIndexesData | null;
|
||||
|
||||
/**
|
||||
* @type {string}
|
||||
*/
|
||||
@initializable()
|
||||
private stringArrayScopeCallsWrapperName!: string;
|
||||
|
||||
/**
|
||||
* @type {IStringArrayScopeCallsWrapperParameterIndexesData}
|
||||
*/
|
||||
@initializable()
|
||||
private stringArrayScopeCallsWrapperParameterIndexesData!: IStringArrayScopeCallsWrapperParameterIndexesData | null;
|
||||
|
||||
private stringArrayScopeCallsWrapperData!: IStringArrayScopeCallsWrapperData;
|
||||
|
||||
/**
|
||||
* @param {TIdentifierNamesGeneratorFactory} identifierNamesGeneratorFactory
|
||||
@@ -85,24 +66,15 @@ export class StringArrayScopeCallsWrapperFunctionNode extends AbstractStringArra
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} stringArrayScopeCallsWrapperName
|
||||
* @param {IStringArrayScopeCallsWrapperParameterIndexesData | null} stringArrayScopeCallsWrapperParameterIndexesData
|
||||
* @param {string} upperStringArrayCallsWrapperName
|
||||
* @param {IStringArrayScopeCallsWrapperParameterIndexesData | null} upperStringArrayCallsWrapperParameterIndexesData
|
||||
* @param {number} shiftedIndex
|
||||
* @param {IStringArrayScopeCallsWrapperData} stringArrayScopeCallsWrapperData
|
||||
* @param {IStringArrayScopeCallsWrapperData} upperStringArrayCallsWrapperData
|
||||
*/
|
||||
public initialize (
|
||||
stringArrayScopeCallsWrapperName: string,
|
||||
stringArrayScopeCallsWrapperParameterIndexesData: IStringArrayScopeCallsWrapperParameterIndexesData | null,
|
||||
upperStringArrayCallsWrapperName: string,
|
||||
upperStringArrayCallsWrapperParameterIndexesData: IStringArrayScopeCallsWrapperParameterIndexesData | null,
|
||||
shiftedIndex: number,
|
||||
stringArrayScopeCallsWrapperData: IStringArrayScopeCallsWrapperData,
|
||||
upperStringArrayCallsWrapperData: IStringArrayScopeCallsWrapperData,
|
||||
): void {
|
||||
this.stringArrayScopeCallsWrapperName = stringArrayScopeCallsWrapperName;
|
||||
this.stringArrayScopeCallsWrapperParameterIndexesData = stringArrayScopeCallsWrapperParameterIndexesData;
|
||||
this.upperStringArrayCallsWrapperName = upperStringArrayCallsWrapperName;
|
||||
this.upperStringArrayCallsWrapperParameterIndexesData = upperStringArrayCallsWrapperParameterIndexesData;
|
||||
this.shiftedIndex = shiftedIndex;
|
||||
this.stringArrayScopeCallsWrapperData = stringArrayScopeCallsWrapperData;
|
||||
this.upperStringArrayCallsWrapperData = upperStringArrayCallsWrapperData;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -116,13 +88,16 @@ export class StringArrayScopeCallsWrapperFunctionNode extends AbstractStringArra
|
||||
|
||||
const stringArrayCallNode: ESTree.Expression = this.getUpperStringArrayCallNode(
|
||||
stringArrayCallIdentifierNode,
|
||||
this.getStringArrayIndexNode(this.shiftedIndex)
|
||||
this.getStringArrayIndexNode(
|
||||
this.stringArrayScopeCallsWrapperData.index
|
||||
- this.upperStringArrayCallsWrapperData.index
|
||||
)
|
||||
);
|
||||
|
||||
// stage 1: function expression node parameters
|
||||
// filling all parameters with a fake parameters first
|
||||
const parameters: ESTree.Identifier[] = this.arrayUtils.fillWithRange(
|
||||
!this.stringArrayScopeCallsWrapperParameterIndexesData
|
||||
!this.stringArrayScopeCallsWrapperData.parameterIndexesData
|
||||
// root string array calls wrapper
|
||||
? AbstractStringArrayCallNode.stringArrayRootCallsWrapperParametersCount
|
||||
// scope string array calls wrapper
|
||||
@@ -130,12 +105,12 @@ export class StringArrayScopeCallsWrapperFunctionNode extends AbstractStringArra
|
||||
() => this.getFakeParameterNode()
|
||||
);
|
||||
parameters.splice(
|
||||
this.stringArrayScopeCallsWrapperParameterIndexesData?.valueIndexParameterIndex ?? 0,
|
||||
this.stringArrayScopeCallsWrapperData.parameterIndexesData?.valueIndexParameterIndex ?? 0,
|
||||
1,
|
||||
stringArrayCallIdentifierNode
|
||||
);
|
||||
parameters.splice(
|
||||
this.stringArrayScopeCallsWrapperParameterIndexesData?.decodeKeyParameterIndex ?? 1,
|
||||
this.stringArrayScopeCallsWrapperData.parameterIndexesData?.decodeKeyParameterIndex ?? 1,
|
||||
1,
|
||||
decodeKeyIdentifierNode
|
||||
);
|
||||
@@ -143,7 +118,7 @@ export class StringArrayScopeCallsWrapperFunctionNode extends AbstractStringArra
|
||||
// stage 2: upper string array call expression arguments
|
||||
// filling all call expression arguments with a fake string array calls
|
||||
const callExpressionArgs: ESTree.Expression[] = this.arrayUtils.fillWithRange(
|
||||
!this.upperStringArrayCallsWrapperParameterIndexesData
|
||||
!this.upperStringArrayCallsWrapperData.parameterIndexesData
|
||||
// root string array calls wrapper
|
||||
? AbstractStringArrayCallNode.stringArrayRootCallsWrapperParametersCount
|
||||
// scope string array calls wrapper
|
||||
@@ -155,24 +130,24 @@ export class StringArrayScopeCallsWrapperFunctionNode extends AbstractStringArra
|
||||
);
|
||||
|
||||
callExpressionArgs.splice(
|
||||
this.upperStringArrayCallsWrapperParameterIndexesData?.valueIndexParameterIndex ?? 0,
|
||||
this.upperStringArrayCallsWrapperData.parameterIndexesData?.valueIndexParameterIndex ?? 0,
|
||||
1,
|
||||
stringArrayCallNode
|
||||
);
|
||||
callExpressionArgs.splice(
|
||||
this.upperStringArrayCallsWrapperParameterIndexesData?.decodeKeyParameterIndex ?? 1,
|
||||
this.upperStringArrayCallsWrapperData.parameterIndexesData?.decodeKeyParameterIndex ?? 1,
|
||||
1,
|
||||
decodeKeyIdentifierNode
|
||||
);
|
||||
|
||||
// stage 3: function declaration node
|
||||
const functionDeclarationNode: ESTree.FunctionDeclaration = NodeFactory.functionDeclarationNode(
|
||||
this.stringArrayScopeCallsWrapperName,
|
||||
this.stringArrayScopeCallsWrapperData.name,
|
||||
parameters,
|
||||
NodeFactory.blockStatementNode([
|
||||
NodeFactory.returnStatementNode(
|
||||
NodeFactory.callExpressionNode(
|
||||
NodeFactory.identifierNode(this.upperStringArrayCallsWrapperName),
|
||||
NodeFactory.identifierNode(this.upperStringArrayCallsWrapperData.name),
|
||||
callExpressionArgs
|
||||
)
|
||||
)
|
||||
|
||||
@@ -9,6 +9,7 @@ import { IArrayUtils } from '../../interfaces/utils/IArrayUtils';
|
||||
import { ICustomCodeHelperFormatter } from '../../interfaces/custom-code-helpers/ICustomCodeHelperFormatter';
|
||||
import { IOptions } from '../../interfaces/options/IOptions';
|
||||
import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator';
|
||||
import { IStringArrayScopeCallsWrapperData } from '../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrapperData';
|
||||
import { IStringArrayStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayStorage';
|
||||
|
||||
import { initializable } from '../../decorators/Initializable';
|
||||
@@ -20,16 +21,16 @@ import { NodeUtils } from '../../node/NodeUtils';
|
||||
@injectable()
|
||||
export class StringArrayScopeCallsWrapperVariableNode extends AbstractStringArrayCallNode {
|
||||
/**
|
||||
* @type {string}
|
||||
* @type {IStringArrayScopeCallsWrapperData}
|
||||
*/
|
||||
@initializable()
|
||||
private stringArrayCallsWrapperName!: string;
|
||||
private stringArrayCallsWrapperData!: IStringArrayScopeCallsWrapperData;
|
||||
|
||||
/**
|
||||
* @type {string}
|
||||
* @type {IStringArrayScopeCallsWrapperData}
|
||||
*/
|
||||
@initializable()
|
||||
private stringArrayScopeCallsWrapperName!: string;
|
||||
private stringArrayScopeCallsWrapperData!: IStringArrayScopeCallsWrapperData;
|
||||
|
||||
|
||||
/**
|
||||
@@ -64,15 +65,15 @@ export class StringArrayScopeCallsWrapperVariableNode extends AbstractStringArra
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} stringArrayScopeCallsWrapperName
|
||||
* @param {string} stringArrayCallsWrapperName
|
||||
* @param {IStringArrayScopeCallsWrapperData} stringArrayScopeCallsWrapperData
|
||||
* @param {IStringArrayScopeCallsWrapperData} stringArrayCallsWrapperData
|
||||
*/
|
||||
public initialize (
|
||||
stringArrayScopeCallsWrapperName: string,
|
||||
stringArrayCallsWrapperName: string
|
||||
stringArrayScopeCallsWrapperData: IStringArrayScopeCallsWrapperData,
|
||||
stringArrayCallsWrapperData: IStringArrayScopeCallsWrapperData
|
||||
): void {
|
||||
this.stringArrayScopeCallsWrapperName = stringArrayScopeCallsWrapperName;
|
||||
this.stringArrayCallsWrapperName = stringArrayCallsWrapperName;
|
||||
this.stringArrayScopeCallsWrapperData = stringArrayScopeCallsWrapperData;
|
||||
this.stringArrayCallsWrapperData = stringArrayCallsWrapperData;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -82,8 +83,8 @@ export class StringArrayScopeCallsWrapperVariableNode extends AbstractStringArra
|
||||
const structure: TStatement = NodeFactory.variableDeclarationNode(
|
||||
[
|
||||
NodeFactory.variableDeclaratorNode(
|
||||
NodeFactory.identifierNode(this.stringArrayScopeCallsWrapperName),
|
||||
NodeFactory.identifierNode(this.stringArrayCallsWrapperName)
|
||||
NodeFactory.identifierNode(this.stringArrayScopeCallsWrapperData.name),
|
||||
NodeFactory.identifierNode(this.stringArrayCallsWrapperData.name)
|
||||
)
|
||||
],
|
||||
'const',
|
||||
|
||||
-7
@@ -1,7 +1,5 @@
|
||||
import { TNodeWithLexicalScopeStatements } from '../../../types/node/TNodeWithLexicalScopeStatements';
|
||||
|
||||
import { IStringArrayScopeCallsWrapperParameterIndexesData } from './IStringArrayScopeCallsWrapperParameterIndexesData';
|
||||
|
||||
export interface IStringArrayScopeCallsWrapperLexicalScopeData {
|
||||
/**
|
||||
* @type {TNodeWithLexicalScopeStatements | null}
|
||||
@@ -17,9 +15,4 @@ export interface IStringArrayScopeCallsWrapperLexicalScopeData {
|
||||
* @type {number}
|
||||
*/
|
||||
scopeShiftedIndex: number;
|
||||
|
||||
/**
|
||||
* @type {IStringArrayScopeCallsWrapperParameterIndexesData | null}
|
||||
*/
|
||||
callsWrappersParameterIndexesData: IStringArrayScopeCallsWrapperParameterIndexesData | null;
|
||||
}
|
||||
|
||||
+4
-2
@@ -1,6 +1,8 @@
|
||||
import { TStringArrayEncoding } from '../../../types/options/TStringArrayEncoding';
|
||||
|
||||
export interface IStringArrayScopeCallsWrapperNamesData {
|
||||
import { IStringArrayScopeCallsWrapperData } from './IStringArrayScopeCallsWrapperData';
|
||||
|
||||
export interface IStringArrayScopeCallsWrappersData {
|
||||
/**
|
||||
* @type {TStringArrayEncoding}
|
||||
*/
|
||||
@@ -9,5 +11,5 @@ export interface IStringArrayScopeCallsWrapperNamesData {
|
||||
/**
|
||||
* @type {string[]}
|
||||
*/
|
||||
names: string[];
|
||||
scopeCallsWrappersData: IStringArrayScopeCallsWrapperData[];
|
||||
}
|
||||
-10
@@ -1,10 +0,0 @@
|
||||
import { TNodeWithLexicalScopeStatements } from '../../../types/node/TNodeWithLexicalScopeStatements';
|
||||
import { TStringArrayScopeCallsWrapperNamesDataByEncoding } from '../../../types/node-transformers/string-array-transformers/TStringArrayScopeCallsWrapperNamesDataByEncoding';
|
||||
|
||||
import { IMapStorage } from '../IMapStorage';
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
||||
export interface IStringArrayScopeCallsWrapperNamesDataStorage extends IMapStorage<
|
||||
TNodeWithLexicalScopeStatements,
|
||||
TStringArrayScopeCallsWrapperNamesDataByEncoding
|
||||
> {}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
import { TNodeWithLexicalScopeStatements } from '../../../types/node/TNodeWithLexicalScopeStatements';
|
||||
import { TStringArrayScopeCallsWrappersDataByEncoding } from '../../../types/node-transformers/string-array-transformers/TStringArrayScopeCallsWrappersDataByEncoding';
|
||||
|
||||
import { IMapStorage } from '../IMapStorage';
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
||||
export interface IStringArrayScopeCallsWrappersDataStorage extends IMapStorage<
|
||||
TNodeWithLexicalScopeStatements,
|
||||
TStringArrayScopeCallsWrappersDataByEncoding
|
||||
> {}
|
||||
+59
-99
@@ -6,7 +6,7 @@ import * as ESTree from 'estree';
|
||||
import { TInitialData } from '../../types/TInitialData';
|
||||
import { TNodeWithLexicalScopeStatements } from '../../types/node/TNodeWithLexicalScopeStatements';
|
||||
import { TStatement } from '../../types/node/TStatement';
|
||||
import { TStringArrayScopeCallsWrapperNamesDataByEncoding } from '../../types/node-transformers/string-array-transformers/TStringArrayScopeCallsWrapperNamesDataByEncoding';
|
||||
import { TStringArrayScopeCallsWrappersDataByEncoding } from '../../types/node-transformers/string-array-transformers/TStringArrayScopeCallsWrappersDataByEncoding';
|
||||
import { TStringArrayCustomNodeFactory } from '../../types/container/custom-nodes/TStringArrayCustomNodeFactory';
|
||||
|
||||
import { ICustomNode } from '../../interfaces/custom-nodes/ICustomNode';
|
||||
@@ -15,9 +15,8 @@ import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator';
|
||||
import { IStringArrayScopeCallsWrapperData } from '../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrapperData';
|
||||
import { IStringArrayScopeCallsWrapperLexicalScopeData } from '../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrapperLexicalScopeData';
|
||||
import { IStringArrayScopeCallsWrapperLexicalScopeDataStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayScopeCallsWrapperLexicalScopeDataStorage';
|
||||
import { IStringArrayScopeCallsWrapperNamesData } from '../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrapperNamesData';
|
||||
import { IStringArrayScopeCallsWrapperNamesDataStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayScopeCallsWrapperNamesDataStorage';
|
||||
import { IStringArrayScopeCallsWrapperParameterIndexesData } from '../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrapperParameterIndexesData';
|
||||
import { IStringArrayScopeCallsWrappersData } from '../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrappersData';
|
||||
import { IStringArrayScopeCallsWrappersDataStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayScopeCallsWrappersDataStorage';
|
||||
import { IStringArrayStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayStorage';
|
||||
import { IVisitedLexicalScopeNodesStackStorage } from '../../interfaces/storages/string-array-transformers/IVisitedLexicalScopeNodesStackStorage';
|
||||
import { IVisitor } from '../../interfaces/node-transformers/IVisitor';
|
||||
@@ -53,9 +52,9 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
||||
private readonly stringArrayScopeCallsWrapperLexicalScopeDataStorage: IStringArrayScopeCallsWrapperLexicalScopeDataStorage;
|
||||
|
||||
/**
|
||||
* @type {IStringArrayScopeCallsWrapperNamesDataStorage}
|
||||
* @type {IStringArrayScopeCallsWrappersDataStorage}
|
||||
*/
|
||||
private readonly stringArrayScopeCallsWrapperNamesDataStorage: IStringArrayScopeCallsWrapperNamesDataStorage;
|
||||
private readonly stringArrayScopeCallsWrappersDataStorage: IStringArrayScopeCallsWrappersDataStorage;
|
||||
|
||||
/**
|
||||
* @type {TStringArrayCustomNodeFactory}
|
||||
@@ -72,7 +71,7 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
||||
* @param {IOptions} options
|
||||
* @param {IVisitedLexicalScopeNodesStackStorage} visitedLexicalScopeNodesStackStorage
|
||||
* @param {IStringArrayStorage} stringArrayStorage
|
||||
* @param {IStringArrayScopeCallsWrapperNamesDataStorage} stringArrayScopeCallsWrapperNamesDataStorage
|
||||
* @param {IStringArrayScopeCallsWrappersDataStorage} stringArrayScopeCallsWrappersDataStorage
|
||||
* @param {IStringArrayScopeCallsWrapperLexicalScopeDataStorage} stringArrayScopeCallsWrapperLexicalScopeDataStorage
|
||||
* @param {TStringArrayCustomNodeFactory} stringArrayTransformerCustomNodeFactory
|
||||
*/
|
||||
@@ -81,7 +80,7 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
||||
@inject(ServiceIdentifiers.IOptions) options: IOptions,
|
||||
@inject(ServiceIdentifiers.IVisitedLexicalScopeNodesStackStorage) visitedLexicalScopeNodesStackStorage: IVisitedLexicalScopeNodesStackStorage,
|
||||
@inject(ServiceIdentifiers.IStringArrayStorage) stringArrayStorage: IStringArrayStorage,
|
||||
@inject(ServiceIdentifiers.IStringArrayScopeCallsWrapperNamesDataStorage) stringArrayScopeCallsWrapperNamesDataStorage: IStringArrayScopeCallsWrapperNamesDataStorage,
|
||||
@inject(ServiceIdentifiers.IStringArrayScopeCallsWrappersDataStorage) stringArrayScopeCallsWrappersDataStorage: IStringArrayScopeCallsWrappersDataStorage,
|
||||
@inject(ServiceIdentifiers.IStringArrayScopeCallsWrapperLexicalScopeDataStorage) stringArrayScopeCallsWrapperLexicalScopeDataStorage: IStringArrayScopeCallsWrapperLexicalScopeDataStorage,
|
||||
@inject(ServiceIdentifiers.Factory__IStringArrayCustomNode)
|
||||
stringArrayTransformerCustomNodeFactory: TStringArrayCustomNodeFactory
|
||||
@@ -90,7 +89,7 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
||||
|
||||
this.visitedLexicalScopeNodesStackStorage = visitedLexicalScopeNodesStackStorage;
|
||||
this.stringArrayStorage = stringArrayStorage;
|
||||
this.stringArrayScopeCallsWrapperNamesDataStorage = stringArrayScopeCallsWrapperNamesDataStorage;
|
||||
this.stringArrayScopeCallsWrappersDataStorage = stringArrayScopeCallsWrappersDataStorage;
|
||||
this.stringArrayScopeCallsWrapperLexicalScopeDataStorage = stringArrayScopeCallsWrapperLexicalScopeDataStorage;
|
||||
this.stringArrayTransformerCustomNodeFactory = stringArrayTransformerCustomNodeFactory;
|
||||
}
|
||||
@@ -133,52 +132,42 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
||||
public transformNode (
|
||||
lexicalScopeBodyNode: TNodeWithLexicalScopeStatements
|
||||
): TNodeWithLexicalScopeStatements {
|
||||
const stringArrayScopeCallsWrapperNamesDataByEncoding: TStringArrayScopeCallsWrapperNamesDataByEncoding | null =
|
||||
this.stringArrayScopeCallsWrapperNamesDataStorage.get(lexicalScopeBodyNode) ?? null;
|
||||
const stringArrayScopeCallsWrappersDataByEncoding: TStringArrayScopeCallsWrappersDataByEncoding | null =
|
||||
this.stringArrayScopeCallsWrappersDataStorage.get(lexicalScopeBodyNode) ?? null;
|
||||
const stringArrayScopeCallsWrapperLexicalScopeData: IStringArrayScopeCallsWrapperLexicalScopeData | null =
|
||||
this.stringArrayScopeCallsWrapperLexicalScopeDataStorage.get(lexicalScopeBodyNode) ?? null;
|
||||
|
||||
if (!stringArrayScopeCallsWrapperNamesDataByEncoding || !stringArrayScopeCallsWrapperLexicalScopeData) {
|
||||
if (!stringArrayScopeCallsWrappersDataByEncoding || !stringArrayScopeCallsWrapperLexicalScopeData) {
|
||||
return lexicalScopeBodyNode;
|
||||
}
|
||||
|
||||
const {
|
||||
callsWrappersParameterIndexesData: stringArrayScopeCallsWrapperParameterIndexes
|
||||
} = stringArrayScopeCallsWrapperLexicalScopeData;
|
||||
const stringArrayScopeCallsWrapperNamesDataList: (IStringArrayScopeCallsWrapperNamesData | undefined)[] =
|
||||
Object.values(stringArrayScopeCallsWrapperNamesDataByEncoding);
|
||||
const stringArrayScopeCallsWrappersDataList: (IStringArrayScopeCallsWrappersData | undefined)[] =
|
||||
Object.values(stringArrayScopeCallsWrappersDataByEncoding);
|
||||
|
||||
// iterates over data for each encoding type
|
||||
for (const stringArrayScopeCallsWrapperNamesData of stringArrayScopeCallsWrapperNamesDataList) {
|
||||
if (!stringArrayScopeCallsWrapperNamesData) {
|
||||
for (const stringArrayScopeCallsWrappersData of stringArrayScopeCallsWrappersDataList) {
|
||||
if (!stringArrayScopeCallsWrappersData) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const {names} = stringArrayScopeCallsWrapperNamesData;
|
||||
const namesLength: number = names.length;
|
||||
const {scopeCallsWrappersData} = stringArrayScopeCallsWrappersData;
|
||||
const scopeCallsWrappersDataLength: number = scopeCallsWrappersData.length;
|
||||
|
||||
/**
|
||||
* Iterates over each name of scope wrapper name
|
||||
* Reverse iteration appends wrappers at index `0` at the correct order
|
||||
*/
|
||||
for (let i = namesLength - 1; i >= 0; i--) {
|
||||
const stringArrayScopeCallsWrapperName: string = names[i];
|
||||
const {
|
||||
name: upperStringArrayCallsWrapperName,
|
||||
index: upperStringArrayCallsWrapperShiftedIndex,
|
||||
parameterIndexesData: upperStringArrayCallsWrapperParameterIndexes
|
||||
} = this.getUpperStringArrayCallsWrapperData(
|
||||
stringArrayScopeCallsWrapperNamesData,
|
||||
for (let i = scopeCallsWrappersDataLength - 1; i >= 0; i--) {
|
||||
const stringArrayScopeCallsWrapperData = scopeCallsWrappersData[i];
|
||||
const upperStringArrayCallsWrapperData = this.getUpperStringArrayCallsWrapperData(
|
||||
stringArrayScopeCallsWrappersData,
|
||||
stringArrayScopeCallsWrapperLexicalScopeData,
|
||||
);
|
||||
|
||||
this.getAndAppendStringArrayScopeCallsWrapperNode(
|
||||
lexicalScopeBodyNode,
|
||||
stringArrayScopeCallsWrapperName,
|
||||
stringArrayScopeCallsWrapperParameterIndexes,
|
||||
upperStringArrayCallsWrapperName,
|
||||
upperStringArrayCallsWrapperParameterIndexes,
|
||||
upperStringArrayCallsWrapperShiftedIndex,
|
||||
stringArrayScopeCallsWrapperData,
|
||||
upperStringArrayCallsWrapperData
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -187,38 +176,36 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {IStringArrayScopeCallsWrapperNamesData} stringArrayScopeCallsWrapperNamesData
|
||||
* @param {IStringArrayScopeCallsWrappersData} stringArrayScopeCallsWrappersData
|
||||
* @param {IStringArrayScopeCallsWrapperLexicalScopeData} stringArrayScopeCallsWrapperLexicalScopeData
|
||||
* @returns {IStringArrayScopeCallsWrapperData}
|
||||
*/
|
||||
private getRootStringArrayCallsWrapperData (
|
||||
stringArrayScopeCallsWrapperNamesData: IStringArrayScopeCallsWrapperNamesData,
|
||||
stringArrayScopeCallsWrappersData: IStringArrayScopeCallsWrappersData,
|
||||
stringArrayScopeCallsWrapperLexicalScopeData: IStringArrayScopeCallsWrapperLexicalScopeData
|
||||
): IStringArrayScopeCallsWrapperData {
|
||||
const {encoding} = stringArrayScopeCallsWrapperNamesData;
|
||||
const {resultShiftedIndex} = stringArrayScopeCallsWrapperLexicalScopeData;
|
||||
const {encoding} = stringArrayScopeCallsWrappersData;
|
||||
|
||||
return {
|
||||
name: this.stringArrayStorage.getStorageCallsWrapperName(encoding),
|
||||
index: resultShiftedIndex,
|
||||
index: 0,
|
||||
parameterIndexesData: null
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {IStringArrayScopeCallsWrapperNamesData} stringArrayScopeCallsWrapperNamesData
|
||||
* @param {IStringArrayScopeCallsWrappersData} stringArrayScopeCallsWrappersData
|
||||
* @param {IStringArrayScopeCallsWrapperLexicalScopeData} stringArrayScopeCallsWrapperLexicalScopeData
|
||||
* @returns {IStringArrayScopeCallsWrapperData}
|
||||
*/
|
||||
private getUpperStringArrayCallsWrapperData (
|
||||
stringArrayScopeCallsWrapperNamesData: IStringArrayScopeCallsWrapperNamesData,
|
||||
stringArrayScopeCallsWrappersData: IStringArrayScopeCallsWrappersData,
|
||||
stringArrayScopeCallsWrapperLexicalScopeData: IStringArrayScopeCallsWrapperLexicalScopeData
|
||||
): IStringArrayScopeCallsWrapperData {
|
||||
const {encoding} = stringArrayScopeCallsWrapperNamesData;
|
||||
const {scopeShiftedIndex} = stringArrayScopeCallsWrapperLexicalScopeData;
|
||||
const {encoding} = stringArrayScopeCallsWrappersData;
|
||||
|
||||
const rootStringArrayCallsWrapperData = this.getRootStringArrayCallsWrapperData(
|
||||
stringArrayScopeCallsWrapperNamesData,
|
||||
stringArrayScopeCallsWrappersData,
|
||||
stringArrayScopeCallsWrapperLexicalScopeData
|
||||
);
|
||||
|
||||
@@ -234,45 +221,30 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
||||
return rootStringArrayCallsWrapperData;
|
||||
}
|
||||
|
||||
const parentLexicalScopeNamesDataByEncoding: TStringArrayScopeCallsWrapperNamesDataByEncoding | null = this.stringArrayScopeCallsWrapperNamesDataStorage
|
||||
.get(parentLexicalScopeBodyNode) ?? null;
|
||||
const parentScopeCallsWrapperLexicalScopeData: IStringArrayScopeCallsWrapperLexicalScopeData | null = this.stringArrayScopeCallsWrapperLexicalScopeDataStorage
|
||||
.get(parentLexicalScopeBodyNode) ?? null;
|
||||
const parentLexicalScopeCallsWrappersDataByEncoding: TStringArrayScopeCallsWrappersDataByEncoding | null =
|
||||
this.stringArrayScopeCallsWrappersDataStorage
|
||||
.get(parentLexicalScopeBodyNode) ?? null;
|
||||
const parentScopeCallsWrappersData: IStringArrayScopeCallsWrapperData[] | null =
|
||||
parentLexicalScopeCallsWrappersDataByEncoding?.[encoding]?.scopeCallsWrappersData ?? null;
|
||||
|
||||
const parentLexicalScopeNames: string[] | null = parentLexicalScopeNamesDataByEncoding?.[encoding]?.names ?? null;
|
||||
|
||||
if (!parentLexicalScopeNames?.length) {
|
||||
if (!parentScopeCallsWrappersData?.length) {
|
||||
return rootStringArrayCallsWrapperData;
|
||||
}
|
||||
|
||||
const upperStringArrayCallsWrapperName: string = this.randomGenerator
|
||||
return this.randomGenerator
|
||||
.getRandomGenerator()
|
||||
.pickone(parentLexicalScopeNames);
|
||||
const parameterIndexesData: IStringArrayScopeCallsWrapperParameterIndexesData | null =
|
||||
parentScopeCallsWrapperLexicalScopeData?.callsWrappersParameterIndexesData ?? null;
|
||||
|
||||
return {
|
||||
name: upperStringArrayCallsWrapperName,
|
||||
index: scopeShiftedIndex,
|
||||
parameterIndexesData
|
||||
};
|
||||
.pickone(parentScopeCallsWrappersData);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {TNodeWithLexicalScopeStatements} lexicalScopeBodyNode
|
||||
* @param {string} stringArrayScopeCallsWrapperName
|
||||
* @param {IStringArrayScopeCallsWrapperParameterIndexesData | null} stringArrayScopeCallsWrapperParameterIndexes
|
||||
* @param {string} upperStringArrayCallsWrapperName
|
||||
* @param {IStringArrayScopeCallsWrapperParameterIndexesData | null} upperStringArrayCallsWrapperParameterIndexes
|
||||
* @param {number} stringArrayScopeCallsWrapperShiftedIndex
|
||||
* @param {IStringArrayScopeCallsWrapperData} stringArrayScopeCallsWrapperData
|
||||
* @param {IStringArrayScopeCallsWrapperData} upperStringArrayCallsWrapperData
|
||||
*/
|
||||
private getAndAppendStringArrayScopeCallsWrapperNode (
|
||||
lexicalScopeBodyNode: TNodeWithLexicalScopeStatements,
|
||||
stringArrayScopeCallsWrapperName: string,
|
||||
stringArrayScopeCallsWrapperParameterIndexes: IStringArrayScopeCallsWrapperParameterIndexesData | null,
|
||||
upperStringArrayCallsWrapperName: string,
|
||||
upperStringArrayCallsWrapperParameterIndexes: IStringArrayScopeCallsWrapperParameterIndexesData | null,
|
||||
stringArrayScopeCallsWrapperShiftedIndex: number
|
||||
stringArrayScopeCallsWrapperData: IStringArrayScopeCallsWrapperData,
|
||||
upperStringArrayCallsWrapperData: IStringArrayScopeCallsWrapperData,
|
||||
): void {
|
||||
let stringArrayScopeCallsWrapperNode: TStatement[];
|
||||
|
||||
@@ -284,11 +256,8 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
||||
);
|
||||
|
||||
stringArrayScopeCallsWrapperNode = this.getStringArrayScopeCallsWrapperFunctionNode(
|
||||
stringArrayScopeCallsWrapperName,
|
||||
stringArrayScopeCallsWrapperParameterIndexes,
|
||||
upperStringArrayCallsWrapperName,
|
||||
upperStringArrayCallsWrapperParameterIndexes,
|
||||
stringArrayScopeCallsWrapperShiftedIndex
|
||||
stringArrayScopeCallsWrapperData,
|
||||
upperStringArrayCallsWrapperData,
|
||||
);
|
||||
|
||||
NodeAppender.insertAtIndex(
|
||||
@@ -303,8 +272,8 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
||||
case StringArrayWrappersType.Variable:
|
||||
default: {
|
||||
stringArrayScopeCallsWrapperNode = this.getStringArrayScopeCallsWrapperVariableNode(
|
||||
stringArrayScopeCallsWrapperName,
|
||||
upperStringArrayCallsWrapperName
|
||||
stringArrayScopeCallsWrapperData,
|
||||
upperStringArrayCallsWrapperData
|
||||
);
|
||||
|
||||
NodeAppender.prepend(
|
||||
@@ -316,13 +285,13 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} stringArrayScopeCallsWrapperName
|
||||
* @param {string} upperStringArrayCallsWrapperName
|
||||
* @param {IStringArrayScopeCallsWrapperData} stringArrayScopeCallsWrapperData
|
||||
* @param {IStringArrayScopeCallsWrapperData} upperStringArrayCallsWrapperData
|
||||
* @returns {TStatement[]}
|
||||
*/
|
||||
private getStringArrayScopeCallsWrapperVariableNode (
|
||||
stringArrayScopeCallsWrapperName: string,
|
||||
upperStringArrayCallsWrapperName: string
|
||||
stringArrayScopeCallsWrapperData: IStringArrayScopeCallsWrapperData,
|
||||
upperStringArrayCallsWrapperData: IStringArrayScopeCallsWrapperData
|
||||
): TStatement[] {
|
||||
const stringArrayScopeCallsWrapperVariableNode: ICustomNode<TInitialData<StringArrayScopeCallsWrapperVariableNode>> =
|
||||
this.stringArrayTransformerCustomNodeFactory(
|
||||
@@ -330,27 +299,21 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
||||
);
|
||||
|
||||
stringArrayScopeCallsWrapperVariableNode.initialize(
|
||||
stringArrayScopeCallsWrapperName,
|
||||
upperStringArrayCallsWrapperName
|
||||
stringArrayScopeCallsWrapperData,
|
||||
upperStringArrayCallsWrapperData
|
||||
);
|
||||
|
||||
return stringArrayScopeCallsWrapperVariableNode.getNode();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} stringArrayScopeCallsWrapperName
|
||||
* @param {IStringArrayScopeCallsWrapperParameterIndexesData | null} stringArrayScopeCallsWrapperParameterIndexes
|
||||
* @param {string} upperStringArrayCallsWrapperName
|
||||
* @param {IStringArrayScopeCallsWrapperParameterIndexesData | null} upperStringArrayCallsWrapperParameterIndexes
|
||||
* @param {number} stringArrayScopeCallsWrapperShiftedIndex
|
||||
* @param {IStringArrayScopeCallsWrapperData} stringArrayScopeCallsWrapperData
|
||||
* @param {IStringArrayScopeCallsWrapperData} upperStringArrayCallsWrapperData
|
||||
* @returns {TStatement[]}
|
||||
*/
|
||||
private getStringArrayScopeCallsWrapperFunctionNode (
|
||||
stringArrayScopeCallsWrapperName: string,
|
||||
stringArrayScopeCallsWrapperParameterIndexes: IStringArrayScopeCallsWrapperParameterIndexesData | null,
|
||||
upperStringArrayCallsWrapperName: string,
|
||||
upperStringArrayCallsWrapperParameterIndexes: IStringArrayScopeCallsWrapperParameterIndexesData | null,
|
||||
stringArrayScopeCallsWrapperShiftedIndex: number
|
||||
stringArrayScopeCallsWrapperData: IStringArrayScopeCallsWrapperData,
|
||||
upperStringArrayCallsWrapperData: IStringArrayScopeCallsWrapperData,
|
||||
): TStatement[] {
|
||||
const stringArrayScopeCallsWrapperFunctionNode: ICustomNode<TInitialData<StringArrayScopeCallsWrapperFunctionNode>> =
|
||||
this.stringArrayTransformerCustomNodeFactory(
|
||||
@@ -358,11 +321,8 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
||||
);
|
||||
|
||||
stringArrayScopeCallsWrapperFunctionNode.initialize(
|
||||
stringArrayScopeCallsWrapperName,
|
||||
stringArrayScopeCallsWrapperParameterIndexes,
|
||||
upperStringArrayCallsWrapperName,
|
||||
upperStringArrayCallsWrapperParameterIndexes,
|
||||
stringArrayScopeCallsWrapperShiftedIndex,
|
||||
stringArrayScopeCallsWrapperData,
|
||||
upperStringArrayCallsWrapperData
|
||||
);
|
||||
|
||||
return stringArrayScopeCallsWrapperFunctionNode.getNode();
|
||||
|
||||
@@ -7,7 +7,7 @@ import { TIdentifierNamesGeneratorFactory } from '../../types/container/generato
|
||||
import { TInitialData } from '../../types/TInitialData';
|
||||
import { TNodeWithLexicalScopeStatements } from '../../types/node/TNodeWithLexicalScopeStatements';
|
||||
import { TStatement } from '../../types/node/TStatement';
|
||||
import { TStringArrayScopeCallsWrapperNamesDataByEncoding } from '../../types/node-transformers/string-array-transformers/TStringArrayScopeCallsWrapperNamesDataByEncoding';
|
||||
import { TStringArrayScopeCallsWrappersDataByEncoding } from '../../types/node-transformers/string-array-transformers/TStringArrayScopeCallsWrappersDataByEncoding';
|
||||
import { TStringArrayCustomNodeFactory } from '../../types/container/custom-nodes/TStringArrayCustomNodeFactory';
|
||||
|
||||
import { ICustomNode } from '../../interfaces/custom-nodes/ICustomNode';
|
||||
@@ -18,7 +18,7 @@ import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator';
|
||||
import { IStringArrayScopeCallsWrapperData } from '../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrapperData';
|
||||
import { IStringArrayScopeCallsWrapperLexicalScopeData } from '../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrapperLexicalScopeData';
|
||||
import { IStringArrayScopeCallsWrapperLexicalScopeDataStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayScopeCallsWrapperLexicalScopeDataStorage';
|
||||
import { IStringArrayScopeCallsWrapperNamesDataStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayScopeCallsWrapperNamesDataStorage';
|
||||
import { IStringArrayScopeCallsWrappersDataStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayScopeCallsWrappersDataStorage';
|
||||
import { IStringArrayScopeCallsWrapperParameterIndexesData } from '../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrapperParameterIndexesData';
|
||||
import { IStringArrayStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayStorage';
|
||||
import { IStringArrayStorageAnalyzer } from '../../interfaces/analyzers/string-array-storage-analyzer/IStringArrayStorageAnalyzer';
|
||||
@@ -84,9 +84,9 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
private readonly stringArrayScopeCallsWrapperLexicalScopeDataStorage: IStringArrayScopeCallsWrapperLexicalScopeDataStorage;
|
||||
|
||||
/**
|
||||
* @type {IStringArrayScopeCallsWrapperNamesDataStorage}
|
||||
* @type {IStringArrayScopeCallsWrappersDataStorage}
|
||||
*/
|
||||
private readonly stringArrayScopeCallsWrapperNamesDataStorage: IStringArrayScopeCallsWrapperNamesDataStorage;
|
||||
private readonly stringArrayScopeCallsWrappersDataStorage: IStringArrayScopeCallsWrappersDataStorage;
|
||||
|
||||
/**
|
||||
* @type {TStringArrayCustomNodeFactory}
|
||||
@@ -104,7 +104,7 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
* @param {ILiteralNodesCacheStorage} literalNodesCacheStorage
|
||||
* @param {IVisitedLexicalScopeNodesStackStorage} visitedLexicalScopeNodesStackStorage
|
||||
* @param {IStringArrayStorage} stringArrayStorage
|
||||
* @param {IStringArrayScopeCallsWrapperNamesDataStorage} stringArrayScopeCallsWrapperNamesDataStorage
|
||||
* @param {IStringArrayScopeCallsWrappersDataStorage} stringArrayScopeCallsWrappersDataStorage
|
||||
* @param {IStringArrayScopeCallsWrapperLexicalScopeDataStorage} stringArrayScopeCallsWrapperLexicalScopeDataStorage
|
||||
* @param {IStringArrayStorageAnalyzer} stringArrayStorageAnalyzer
|
||||
* @param {TIdentifierNamesGeneratorFactory} identifierNamesGeneratorFactory
|
||||
@@ -116,8 +116,8 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
@inject(ServiceIdentifiers.ILiteralNodesCacheStorage) literalNodesCacheStorage: ILiteralNodesCacheStorage,
|
||||
@inject(ServiceIdentifiers.IVisitedLexicalScopeNodesStackStorage) visitedLexicalScopeNodesStackStorage: IVisitedLexicalScopeNodesStackStorage,
|
||||
@inject(ServiceIdentifiers.IStringArrayStorage) stringArrayStorage: IStringArrayStorage,
|
||||
@inject(ServiceIdentifiers.IStringArrayScopeCallsWrapperNamesDataStorage)
|
||||
stringArrayScopeCallsWrapperNamesDataStorage: IStringArrayScopeCallsWrapperNamesDataStorage,
|
||||
@inject(ServiceIdentifiers.IStringArrayScopeCallsWrappersDataStorage)
|
||||
stringArrayScopeCallsWrappersDataStorage: IStringArrayScopeCallsWrappersDataStorage,
|
||||
@inject(ServiceIdentifiers.IStringArrayScopeCallsWrapperLexicalScopeDataStorage)
|
||||
stringArrayScopeCallsWrapperLexicalScopeDataStorage: IStringArrayScopeCallsWrapperLexicalScopeDataStorage,
|
||||
@inject(ServiceIdentifiers.IStringArrayStorageAnalyzer) stringArrayStorageAnalyzer: IStringArrayStorageAnalyzer,
|
||||
@@ -131,7 +131,7 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
this.literalNodesCacheStorage = literalNodesCacheStorage;
|
||||
this.visitedLexicalScopeNodesStackStorage = visitedLexicalScopeNodesStackStorage;
|
||||
this.stringArrayStorage = stringArrayStorage;
|
||||
this.stringArrayScopeCallsWrapperNamesDataStorage = stringArrayScopeCallsWrapperNamesDataStorage;
|
||||
this.stringArrayScopeCallsWrappersDataStorage = stringArrayScopeCallsWrappersDataStorage;
|
||||
this.stringArrayScopeCallsWrapperLexicalScopeDataStorage = stringArrayScopeCallsWrapperLexicalScopeDataStorage;
|
||||
this.stringArrayStorageAnalyzer = stringArrayStorageAnalyzer;
|
||||
this.identifierNamesGenerator = identifierNamesGeneratorFactory(options);
|
||||
@@ -219,21 +219,17 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
* @returns {Expression}
|
||||
*/
|
||||
private getStringArrayCallNode (stringArrayStorageItemData: IStringArrayStorageItemData): ESTree.Expression {
|
||||
const {
|
||||
name: stringArrayCallsWrapperName,
|
||||
index,
|
||||
parameterIndexesData
|
||||
} = this.getStringArrayCallsWrapperData(stringArrayStorageItemData);
|
||||
const {decodeKey } = stringArrayStorageItemData;
|
||||
const stringArrayScopeCallsWrapperData: IStringArrayScopeCallsWrapperData =
|
||||
this.getStringArrayScopeCallsWrapperData(stringArrayStorageItemData);
|
||||
const {decodeKey, index} = stringArrayStorageItemData;
|
||||
|
||||
const stringArrayCallCustomNode: ICustomNode<TInitialData<StringArrayCallNode>> =
|
||||
this.stringArrayTransformerCustomNodeFactory(StringArrayCustomNode.StringArrayCallNode);
|
||||
|
||||
stringArrayCallCustomNode.initialize(
|
||||
stringArrayCallsWrapperName,
|
||||
parameterIndexesData,
|
||||
index,
|
||||
this.stringArrayStorage.getIndexShiftAmount(),
|
||||
stringArrayScopeCallsWrapperData,
|
||||
decodeKey
|
||||
);
|
||||
|
||||
@@ -250,29 +246,29 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
* @param {IStringArrayStorageItemData} stringArrayStorageItemData
|
||||
* @returns {IStringArrayScopeCallsWrapperData}
|
||||
*/
|
||||
private getStringArrayCallsWrapperData (
|
||||
private getStringArrayScopeCallsWrapperData (
|
||||
stringArrayStorageItemData: IStringArrayStorageItemData
|
||||
): IStringArrayScopeCallsWrapperData {
|
||||
return !this.options.stringArrayWrappersCount
|
||||
? this.getRootStringArrayCallsWrapperData(stringArrayStorageItemData)
|
||||
: this.getUpperStringArrayCallsWrapperData(stringArrayStorageItemData);
|
||||
? this.getRootStringArrayScopeCallsWrapperData(stringArrayStorageItemData)
|
||||
: this.getUpperStringArrayScopeCallsWrapperData(stringArrayStorageItemData);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {IStringArrayStorageItemData} stringArrayStorageItemData
|
||||
* @returns {IStringArrayScopeCallsWrapperData}
|
||||
*/
|
||||
private getRootStringArrayCallsWrapperData (
|
||||
private getRootStringArrayScopeCallsWrapperData (
|
||||
stringArrayStorageItemData: IStringArrayStorageItemData
|
||||
): IStringArrayScopeCallsWrapperData {
|
||||
const {encoding, index} = stringArrayStorageItemData;
|
||||
const {encoding} = stringArrayStorageItemData;
|
||||
|
||||
const rootStringArrayCallsWrapperName: string = this.stringArrayStorage.getStorageCallsWrapperName(encoding);
|
||||
|
||||
return {
|
||||
name: rootStringArrayCallsWrapperName,
|
||||
parameterIndexesData: null,
|
||||
index
|
||||
index: 0,
|
||||
parameterIndexesData: null
|
||||
};
|
||||
}
|
||||
|
||||
@@ -280,10 +276,10 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
* @param {IStringArrayStorageItemData} stringArrayStorageItemData
|
||||
* @returns {IStringArrayScopeCallsWrapperData}
|
||||
*/
|
||||
private getUpperStringArrayCallsWrapperData (
|
||||
private getUpperStringArrayScopeCallsWrapperData (
|
||||
stringArrayStorageItemData: IStringArrayStorageItemData
|
||||
): IStringArrayScopeCallsWrapperData {
|
||||
const {encoding, index} = stringArrayStorageItemData;
|
||||
const {encoding} = stringArrayStorageItemData;
|
||||
const currentLexicalScopeBodyNode: TNodeWithLexicalScopeStatements | null =
|
||||
this.visitedLexicalScopeNodesStackStorage.getLastElement() ?? null;
|
||||
const parentLexicalScopeBodyNode: TNodeWithLexicalScopeStatements | null =
|
||||
@@ -293,73 +289,24 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
throw new Error('Cannot find current lexical scope body node');
|
||||
}
|
||||
|
||||
const stringArrayScopeCallsWrapperNamesDataByEncoding: TStringArrayScopeCallsWrapperNamesDataByEncoding =
|
||||
this.getAndUpdateStringArrayScopeCallsWrapperNamesDataByEncoding(
|
||||
currentLexicalScopeBodyNode,
|
||||
stringArrayStorageItemData
|
||||
);
|
||||
const stringArrayScopeCallsWrapperLexicalScopeData: IStringArrayScopeCallsWrapperLexicalScopeData =
|
||||
this.getAndUpdateStringArrayScopeCallsWrapperLexicalScopeData(
|
||||
currentLexicalScopeBodyNode,
|
||||
parentLexicalScopeBodyNode
|
||||
);
|
||||
const stringArrayScopeCallsWrappersDataByEncoding: TStringArrayScopeCallsWrappersDataByEncoding =
|
||||
this.getAndUpdateStringArrayScopeCallsWrappersDataByEncoding(
|
||||
currentLexicalScopeBodyNode,
|
||||
stringArrayStorageItemData,
|
||||
stringArrayScopeCallsWrapperLexicalScopeData
|
||||
);
|
||||
|
||||
const stringArrayScopeCallsWrapperNames: string[] = stringArrayScopeCallsWrapperNamesDataByEncoding[encoding]?.names ?? [];
|
||||
const randomUpperStringArrayCallsWrapperName: string = this.randomGenerator
|
||||
const stringArrayScopeCallsWrappersData: IStringArrayScopeCallsWrapperData[] =
|
||||
stringArrayScopeCallsWrappersDataByEncoding[encoding]?.scopeCallsWrappersData ?? [];
|
||||
|
||||
return this.randomGenerator
|
||||
.getRandomGenerator()
|
||||
.pickone(stringArrayScopeCallsWrapperNames);
|
||||
|
||||
const resultIndex: number = stringArrayScopeCallsWrapperLexicalScopeData
|
||||
? stringArrayScopeCallsWrapperLexicalScopeData.resultShiftedIndex + index
|
||||
: index;
|
||||
|
||||
return {
|
||||
name: randomUpperStringArrayCallsWrapperName,
|
||||
index: resultIndex,
|
||||
parameterIndexesData: stringArrayScopeCallsWrapperLexicalScopeData.callsWrappersParameterIndexesData
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {TNodeWithLexicalScopeStatements} currentLexicalScopeBodyNode
|
||||
* @param {IStringArrayStorageItemData} stringArrayStorageItemData
|
||||
* @returns {TStringArrayScopeCallsWrapperNamesDataByEncoding}
|
||||
*/
|
||||
private getAndUpdateStringArrayScopeCallsWrapperNamesDataByEncoding (
|
||||
currentLexicalScopeBodyNode: TNodeWithLexicalScopeStatements,
|
||||
stringArrayStorageItemData: IStringArrayStorageItemData
|
||||
): TStringArrayScopeCallsWrapperNamesDataByEncoding {
|
||||
const {encoding} = stringArrayStorageItemData;
|
||||
const stringArrayScopeCallsWrapperNamesDataByEncoding: TStringArrayScopeCallsWrapperNamesDataByEncoding =
|
||||
this.stringArrayScopeCallsWrapperNamesDataStorage.get(currentLexicalScopeBodyNode)
|
||||
?? {};
|
||||
|
||||
const stringArrayScopeCallsWrapperNames: string[] = stringArrayScopeCallsWrapperNamesDataByEncoding[encoding]?.names ?? [];
|
||||
const isFilledScopeCallsWrapperNamesList: boolean = stringArrayScopeCallsWrapperNames.length === this.options.stringArrayWrappersCount;
|
||||
|
||||
if (isFilledScopeCallsWrapperNamesList) {
|
||||
return stringArrayScopeCallsWrapperNamesDataByEncoding;
|
||||
}
|
||||
|
||||
// have to use `generateForGlobalScope` for program node for correct attach prefix to the calls wrapper name
|
||||
const nextScopeCallsWrapperName: string = NodeGuards.isProgramNode(currentLexicalScopeBodyNode)
|
||||
? this.identifierNamesGenerator.generateForGlobalScope()
|
||||
: this.identifierNamesGenerator.generateNext();
|
||||
|
||||
stringArrayScopeCallsWrapperNamesDataByEncoding[encoding] = {
|
||||
encoding,
|
||||
names: [
|
||||
...stringArrayScopeCallsWrapperNames,
|
||||
nextScopeCallsWrapperName
|
||||
]
|
||||
};
|
||||
|
||||
this.stringArrayScopeCallsWrapperNamesDataStorage.set(
|
||||
currentLexicalScopeBodyNode,
|
||||
stringArrayScopeCallsWrapperNamesDataByEncoding
|
||||
);
|
||||
|
||||
return stringArrayScopeCallsWrapperNamesDataByEncoding;
|
||||
.pickone(stringArrayScopeCallsWrappersData);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -384,22 +331,12 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
? this.stringArrayScopeCallsWrapperLexicalScopeDataStorage.get(parentLexicalScopeBodyNode) ?? null
|
||||
: null;
|
||||
|
||||
const callsWrappersParameterIndexesData: IStringArrayScopeCallsWrapperParameterIndexesData | null =
|
||||
this.options.stringArrayWrappersType === StringArrayWrappersType.Function
|
||||
? this.getStringArrayCallsWrapperParameterIndexesData()
|
||||
: null;
|
||||
const scopeShiftedIndex: number = this.options.stringArrayWrappersType === StringArrayWrappersType.Function
|
||||
? this.randomGenerator.getRandomInteger(
|
||||
StringArrayTransformer.minShiftedIndexValue,
|
||||
StringArrayTransformer.maxShiftedIndexValue
|
||||
)
|
||||
: 0;
|
||||
const scopeShiftedIndex: number = this.getStringArrayCallsWrapperShiftedIndex();
|
||||
const resultShiftedIndex: number = parentLexicalScopeData
|
||||
? parentLexicalScopeData.resultShiftedIndex + scopeShiftedIndex
|
||||
: scopeShiftedIndex;
|
||||
|
||||
const lexicalScopeData: IStringArrayScopeCallsWrapperLexicalScopeData = {
|
||||
callsWrappersParameterIndexesData,
|
||||
parentLexicalScopeBodyNode,
|
||||
resultShiftedIndex,
|
||||
scopeShiftedIndex
|
||||
@@ -414,9 +351,80 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {IStringArrayScopeCallsWrapperParameterIndexesData}
|
||||
* @param {TNodeWithLexicalScopeStatements} currentLexicalScopeBodyNode
|
||||
* @param {IStringArrayStorageItemData} stringArrayStorageItemData
|
||||
* @param {IStringArrayScopeCallsWrapperLexicalScopeData} stringArrayScopeCallsWrapperLexicalScopeData
|
||||
* @returns {TStringArrayScopeCallsWrappersDataByEncoding}
|
||||
*/
|
||||
private getStringArrayCallsWrapperParameterIndexesData (): IStringArrayScopeCallsWrapperParameterIndexesData {
|
||||
private getAndUpdateStringArrayScopeCallsWrappersDataByEncoding (
|
||||
currentLexicalScopeBodyNode: TNodeWithLexicalScopeStatements,
|
||||
stringArrayStorageItemData: IStringArrayStorageItemData,
|
||||
stringArrayScopeCallsWrapperLexicalScopeData: IStringArrayScopeCallsWrapperLexicalScopeData
|
||||
): TStringArrayScopeCallsWrappersDataByEncoding {
|
||||
const {encoding} = stringArrayStorageItemData;
|
||||
const stringArrayScopeCallsWrappersDataByEncoding: TStringArrayScopeCallsWrappersDataByEncoding =
|
||||
this.stringArrayScopeCallsWrappersDataStorage.get(currentLexicalScopeBodyNode)
|
||||
?? {};
|
||||
|
||||
const stringArrayScopeCallsWrappersData: IStringArrayScopeCallsWrapperData[] =
|
||||
stringArrayScopeCallsWrappersDataByEncoding[encoding]?.scopeCallsWrappersData ?? [];
|
||||
const isFilledScopeCallsWrapperNamesList: boolean =
|
||||
stringArrayScopeCallsWrappersData.length === this.options.stringArrayWrappersCount;
|
||||
|
||||
if (isFilledScopeCallsWrapperNamesList) {
|
||||
return stringArrayScopeCallsWrappersDataByEncoding;
|
||||
}
|
||||
|
||||
// have to use `generateForGlobalScope` for program node for correct attach prefix to the calls wrapper name
|
||||
const nextScopeCallsWrapperName: string = NodeGuards.isProgramNode(currentLexicalScopeBodyNode)
|
||||
? this.identifierNamesGenerator.generateForGlobalScope()
|
||||
: this.identifierNamesGenerator.generateNext();
|
||||
const nextScopeCallsWrapperShiftedIndex: number =
|
||||
this.getStringArrayCallsWrapperShiftedIndex();
|
||||
const nextScopeCallsWrapperParameterIndexesData: IStringArrayScopeCallsWrapperParameterIndexesData | null =
|
||||
this.getStringArrayCallsWrapperParameterIndexesData();
|
||||
|
||||
stringArrayScopeCallsWrappersDataByEncoding[encoding] = {
|
||||
encoding,
|
||||
scopeCallsWrappersData: [
|
||||
...stringArrayScopeCallsWrappersData,
|
||||
{
|
||||
name: nextScopeCallsWrapperName,
|
||||
index: stringArrayScopeCallsWrapperLexicalScopeData.resultShiftedIndex
|
||||
+ nextScopeCallsWrapperShiftedIndex,
|
||||
parameterIndexesData: nextScopeCallsWrapperParameterIndexesData
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
this.stringArrayScopeCallsWrappersDataStorage.set(
|
||||
currentLexicalScopeBodyNode,
|
||||
stringArrayScopeCallsWrappersDataByEncoding
|
||||
);
|
||||
|
||||
return stringArrayScopeCallsWrappersDataByEncoding;
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {number}
|
||||
*/
|
||||
private getStringArrayCallsWrapperShiftedIndex (): number {
|
||||
return this.options.stringArrayWrappersType === StringArrayWrappersType.Function
|
||||
? this.randomGenerator.getRandomInteger(
|
||||
StringArrayTransformer.minShiftedIndexValue,
|
||||
StringArrayTransformer.maxShiftedIndexValue
|
||||
)
|
||||
: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {IStringArrayScopeCallsWrapperParameterIndexesData | null}
|
||||
*/
|
||||
private getStringArrayCallsWrapperParameterIndexesData (): IStringArrayScopeCallsWrapperParameterIndexesData | null {
|
||||
if (this.options.stringArrayWrappersType !== StringArrayWrappersType.Function) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const minIndexValue: number = 0;
|
||||
const maxIndexValue: number = this.options.stringArrayWrappersParametersMaxCount - 1;
|
||||
|
||||
|
||||
+5
-5
@@ -2,19 +2,19 @@ import { inject, injectable } from 'inversify';
|
||||
import { ServiceIdentifiers } from '../../container/ServiceIdentifiers';
|
||||
|
||||
import { TNodeWithLexicalScopeStatements } from '../../types/node/TNodeWithLexicalScopeStatements';
|
||||
import { TStringArrayScopeCallsWrapperNamesDataByEncoding } from '../../types/node-transformers/string-array-transformers/TStringArrayScopeCallsWrapperNamesDataByEncoding';
|
||||
import { TStringArrayScopeCallsWrappersDataByEncoding } from '../../types/node-transformers/string-array-transformers/TStringArrayScopeCallsWrappersDataByEncoding';
|
||||
|
||||
import { IOptions } from '../../interfaces/options/IOptions';
|
||||
import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator';
|
||||
import { IStringArrayScopeCallsWrapperNamesDataStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayScopeCallsWrapperNamesDataStorage';
|
||||
import { IStringArrayScopeCallsWrappersDataStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayScopeCallsWrappersDataStorage';
|
||||
|
||||
import { MapStorage } from '../MapStorage';
|
||||
|
||||
@injectable()
|
||||
export class StringArrayScopeCallsWrapperNamesDataStorage extends MapStorage <
|
||||
export class StringArrayScopeCallsWrappersDataStorage extends MapStorage <
|
||||
TNodeWithLexicalScopeStatements,
|
||||
TStringArrayScopeCallsWrapperNamesDataByEncoding
|
||||
> implements IStringArrayScopeCallsWrapperNamesDataStorage {
|
||||
TStringArrayScopeCallsWrappersDataByEncoding
|
||||
> implements IStringArrayScopeCallsWrappersDataStorage {
|
||||
/**
|
||||
* @param {IRandomGenerator} randomGenerator
|
||||
* @param {IOptions} options
|
||||
-7
@@ -1,7 +0,0 @@
|
||||
import { TStringArrayEncoding } from '../../options/TStringArrayEncoding';
|
||||
|
||||
import { IStringArrayScopeCallsWrapperNamesData } from '../../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrapperNamesData';
|
||||
|
||||
export type TStringArrayScopeCallsWrapperNamesDataByEncoding = Partial<{
|
||||
[key in TStringArrayEncoding]: IStringArrayScopeCallsWrapperNamesData;
|
||||
}>;
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
import { TStringArrayEncoding } from '../../options/TStringArrayEncoding';
|
||||
|
||||
import { IStringArrayScopeCallsWrappersData } from '../../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrappersData';
|
||||
|
||||
export type TStringArrayScopeCallsWrappersDataByEncoding = Partial<{
|
||||
[key in TStringArrayEncoding]: IStringArrayScopeCallsWrappersData;
|
||||
}>;
|
||||
Reference in New Issue
Block a user