function isMatchingScalableTarget()

in src/rules/dynamodb/DynamoDBAutoScalingEnabled.ts [87:123]


function isMatchingScalableTarget(
  node: CfnScalableTarget,
  dimension: string,
  tableLogicalId: string,
  tableName: string | undefined,
  indexNames: string[]
): number {
  if (node.serviceNamespace === 'dynamodb') {
    let scalableDimension = '';
    const resourceId = JSON.stringify(Stack.of(node).resolve(node.resourceId));
    for (let i = 0; i < indexNames.length; i++) {
      const regexes = Array<string>();
      const indexName = indexNames[i];
      if (indexName === '') {
        regexes.push(`${tableLogicalId}.*`);
        if (tableName !== undefined) {
          regexes.push(`${tableName}.*`);
        }
        scalableDimension = `dynamodb:table:${dimension}`;
      } else {
        regexes.push(`${tableLogicalId}.*index\/${indexName}(?![\\w\\-_\\.])`);
        if (tableName !== undefined) {
          regexes.push(`${tableName}.*index\/${indexName}(?![\\w\\-_\\.])`);
        }
        scalableDimension = `dynamodb:index:${dimension}`;
      }
      const regex = new RegExp(regexes.join('|'), 'gm');
      if (
        node.scalableDimension === scalableDimension &&
        regex.test(resourceId)
      ) {
        return i;
      }
    }
  }
  return -1;
}