"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
    var ownKeys = function(o) {
        ownKeys = Object.getOwnPropertyNames || function (o) {
            var ar = [];
            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
            return ar;
        };
        return ownKeys(o);
    };
    return function (mod) {
        if (mod && mod.__esModule) return mod;
        var result = {};
        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
        __setModuleDefault(result, mod);
        return result;
    };
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.deprecatedTypescriptStylisticRules = void 0;
const stylistic_1 = __importStar(require("../../rules/stylistic"));
const utils_1 = require("../../utils");
const typescriptStylisticRules = {
    name: 'airbnb/config/typescript/typescript-stylistic',
    files: utils_1.tsFiles,
    rules: {
        // enforce spacing inside single-line blocks
        // https://eslint.style/rules/ts/block-spacing
        '@stylistic/block-spacing': stylistic_1.default.rules['@stylistic/block-spacing'],
        // enforce one true brace style
        // https://eslint.style/rules/ts/brace-style
        '@stylistic/brace-style': stylistic_1.default.rules['@stylistic/brace-style'],
        // require trailing commas in multiline object literals
        // https://eslint.style/rules/ts/comma-dangle
        '@stylistic/comma-dangle': [
            stylistic_1.default.rules['@stylistic/comma-dangle'][0],
            Object.assign(Object.assign({}, stylistic_1.default.rules['@stylistic/comma-dangle'][1]), { enums: stylistic_1.default.rules['@stylistic/comma-dangle'][1].arrays, generics: stylistic_1.default.rules['@stylistic/comma-dangle'][1].arrays, tuples: stylistic_1.default.rules['@stylistic/comma-dangle'][1].arrays }),
        ],
        // enforce spacing before and after comma
        // https://eslint.style/rules/ts/comma-spacing
        '@stylistic/comma-spacing': stylistic_1.default.rules['@stylistic/comma-spacing'],
        // enforce spacing between functions and their invocations
        // https://eslint.style/rules/ts/function-call-spacing
        '@stylistic/function-call-spacing': stylistic_1.default.rules['@stylistic/function-call-spacing'],
        // this option sets a specific tab width for your code
        // https://eslint.style/rules/ts/indent
        '@stylistic/indent': stylistic_1.default.rules['@stylistic/indent'],
        // enforces spacing between keys and values in object literal properties
        // https://eslint.style/rules/ts/key-spacing
        '@stylistic/key-spacing': stylistic_1.default.rules['@stylistic/key-spacing'],
        // require a space before & after certain keywords
        // https://eslint.style/rules/ts/keyword-spacing
        '@stylistic/keyword-spacing': stylistic_1.default.rules['@stylistic/keyword-spacing'],
        // enforces empty lines around comments
        // https://eslint.style/rules/ts/lines-around-comment
        '@stylistic/lines-around-comment': stylistic_1.default.rules['@stylistic/lines-around-comment'],
        // require or disallow an empty line between class members
        // https://eslint.style/rules/ts/lines-between-class-members
        '@stylistic/lines-between-class-members': stylistic_1.default.rules['@stylistic/lines-between-class-members'],
        // enforce consistent member delimiter style
        // https://eslint.style/rules/ts/member-delimiter-style
        '@stylistic/member-delimiter-style': 'error',
        // disallow unnecessary parentheses
        // https://eslint.style/rules/ts/no-extra-parens
        '@stylistic/no-extra-parens': stylistic_1.default.rules['@stylistic/no-extra-parens'],
        // disallow unnecessary semicolons
        // https://eslint.style/rules/ts/no-extra-semi
        '@stylistic/no-extra-semi': stylistic_1.default.rules['@stylistic/no-extra-semi'],
        // enforce line breaks between braces
        // https://eslint.style/rules/ts/object-curly-newline
        '@stylistic/object-curly-newline': stylistic_1.default.rules['@stylistic/object-curly-newline'],
        // require padding inside curly braces
        // https://eslint.style/rules/ts/object-curly-spacing
        '@stylistic/object-curly-spacing': stylistic_1.default.rules['@stylistic/object-curly-spacing'],
        // enforce "same line" or "multiple line" on object properties.
        // https://eslint.style/rules/ts/object-property-newline
        '@stylistic/object-property-newline': stylistic_1.default.rules['@stylistic/object-property-newline'],
        // Require or disallow padding lines between statements
        // https://eslint.style/rules/ts/padding-line-between-statements
        '@stylistic/padding-line-between-statements': stylistic_1.default.rules['@stylistic/padding-line-between-statements'],
        // require quotes around object literal property names
        // https://eslint.style/rules/ts/quote-props
        '@stylistic/quote-props': stylistic_1.default.rules['@stylistic/quote-props'],
        // specify whether double or single quotes should be used
        // https://eslint.style/rules/ts/quotes
        '@stylistic/quotes': stylistic_1.default.rules['@stylistic/quotes'],
        // require or disallow use of semicolons instead of ASI
        // https://eslint.style/rules/ts/semi
        '@stylistic/semi': stylistic_1.default.rules['@stylistic/semi'],
        // enforce spacing before and after semicolons
        // https://eslint.style/rules/ts/semi-spacing
        '@stylistic/semi-spacing': stylistic_1.default.rules['@stylistic/semi-spacing'],
        // require or disallow space before blocks
        // https://eslint.style/rules/ts/space-before-blocks
        '@stylistic/space-before-blocks': stylistic_1.default.rules['@stylistic/space-before-blocks'],
        // require or disallow space before function opening parenthesis
        // https://eslint.style/rules/ts/space-before-function-paren
        '@stylistic/space-before-function-paren': stylistic_1.default.rules['@stylistic/space-before-function-paren'],
        // require spaces around operators
        // https://eslint.style/rules/ts/space-infix-ops
        '@stylistic/space-infix-ops': [
            stylistic_1.default.rules['@stylistic/space-infix-ops'][0],
            Object.assign({}, stylistic_1.default.rules['@stylistic/space-infix-ops'][1]),
        ],
        // enforce consistent spacing in type annotation
        // https://eslint.style/rules/ts/type-annotation-spacing
        '@stylistic/type-annotation-spacing': [
            'error',
            {
                before: false,
                after: true,
                overrides: {
                    arrow: {
                        before: true,
                        after: true,
                    },
                },
            },
        ],
        // enforce consistent spacing inside TypeScript type generics
        // https://eslint.style/rules/plus/type-generic-spacing
        '@stylistic/type-generic-spacing': 'error',
    },
};
exports.deprecatedTypescriptStylisticRules = {
    name: 'airbnb/config/typescript/typescript-stylistic/deprecated',
    files: utils_1.tsFiles,
    rules: {
        // enforce spacing between functions and their invocations
        // https://eslint.style/rules/ts/function-call-spacing
        '@stylistic/func-call-spacing': stylistic_1.deprecatedStylisticRules.rules['@stylistic/func-call-spacing'],
    },
};
exports.default = typescriptStylisticRules;
