text: "use strict";
  var __importStar = (this && this.__importStar) || function (mod) {
      if (mod && mod.__esModule) return mod;
      var result = {};
      if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
      result["default"] = mod;
      return result;
  };
  Object.defineProperty(exports, "__esModule", { value: true });
  const ts = __importStar(require("typescript"));
  const util = __importStar(require("../util"));
  exports.default = util.createRule({
      name: 'no-for-in-array',
      meta: {
          docs: {
              description: 'Disallow iterating over an array with a for-in loop',
              category: 'Best Practices',
              recommended: 'error',
              requiresTypeChecking: true,
          },
          messages: {
              forInViolation: 'For-in loops over arrays are forbidden. Use for-of or array.forEach instead.',
          },
          schema: [],
          type: 'problem',
      },
      defaultOptions: [],
      create(context) {
          return {
              ForInStatement(node) {
                  const parserServices = util.getParserServices(context);
                  const checker = parserServices.program.getTypeChecker();
                  const originalNode = parserServices.esTreeNodeToTSNodeMap.get(node);
                  const type = util.getConstrainedTypeAtLocation(checker, originalNode.expression);
                  if (util.isTypeArrayTypeOrUnionOfArrayTypes(type, checker) ||
                      (type.flags & ts.TypeFlags.StringLike) !== 0) {
                      context.report({
                          node,
                          messageId: 'forInViolation',
                      });
                  }
              },
          };
      },
  });
  //# sourceMappingURL=no-for-in-array.js.map