{
    "root": true,
    "ignorePatterns": ["**/*"],
    "plugins": ["@nx"],
    "overrides": [
        {
            "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
            "rules": {
                "@nx/enforce-module-boundaries": [
                    "error",
                    {
                        "enforceBuildableLibDependency": true,
                        "allow": [],
                        "depConstraints": [
                            {
                                "sourceTag": "scope:nfconsole",
                                "onlyDependOnLibsWithTags": [
                                    "scope:nfconsole",
                                    "scope:page",
                                    "scope:feature",
                                    "scope:shared",
                                    "scope:ui",
                                    "scope:util"
                                ]
                            },
                            {
                                "sourceTag": "scope:page",
                                "onlyDependOnLibsWithTags": [
                                    "scope:page",
                                    "scope:feature",
                                    "scope:shared",
                                    "scope:ui",
                                    "scope:util"
                                ]
                            },
                            {
                                "sourceTag": "scope:feature",
                                "onlyDependOnLibsWithTags": ["scope:feature", "scope:shared", "scope:ui", "scope:util"]
                            },
                            {
                                "sourceTag": "scope:shared",
                                "onlyDependOnLibsWithTags": ["scope:shared", "scope:util", "scope:ui"]
                            },
                            {
                                "sourceTag": "scope:data-access",
                                "onlyDependOnLibsWithTags": ["scope:util"]
                            },
                            {
                                "sourceTag": "scope:ui",
                                "onlyDependOnLibsWithTags": ["scope:ui", "scope:shared", "scope:util"]
                            },
                            {
                                "sourceTag": "scope:util",
                                "onlyDependOnLibsWithTags": ["scope:util"]
                            },
                            {
                                "sourceTag": "*",
                                "onlyDependOnLibsWithTags": ["*"]
                            }
                        ]
                    }
                ]
            }
        },
        {
            "files": ["*.ts", "*.tsx"],
            "extends": ["plugin:@nx/typescript"],
            "rules": {
                "@typescript-eslint/no-unused-vars": "warn",
                "@typescript-eslint/naming-convention": "warn"
            }
        },
        {
            "files": ["*.js", "*.jsx"],
            "extends": ["plugin:@nx/javascript"],
            "rules": {}
        },
        {
            "files": ["*.ts"],
            "rules": {
                "@angular-eslint/component-selector": [
                    "error",
                    {
                        "type": "element",
                        "prefix": "app",
                        "style": "kebab-case"
                    }
                ],
                "@angular-eslint/directive-selector": [
                    "error",
                    {
                        "type": "attribute",
                        "prefix": "app",
                        "style": "camelCase"
                    }
                ],
                "@angular-eslint/no-conflicting-lifecycle": "error",
                "@angular-eslint/no-host-metadata-property": "error",
                "@angular-eslint/no-input-rename": "error",
                "@angular-eslint/no-inputs-metadata-property": "error",
                "@angular-eslint/no-output-native": "error",
                "@angular-eslint/no-output-on-prefix": "error",
                "@angular-eslint/no-output-rename": "error",
                "@angular-eslint/no-outputs-metadata-property": "error",
                "@angular-eslint/use-lifecycle-interface": "error",
                "@angular-eslint/use-pipe-transform-interface": "error",
                "@typescript-eslint/consistent-type-definitions": "warn",
                "@typescript-eslint/no-explicit-any": "off",
                "@typescript-eslint/no-namespace": "off",
                "@typescript-eslint/dot-notation": "off",
                "@typescript-eslint/explicit-member-accessibility": [
                    "off",
                    {
                        "accessibility": "explicit"
                    }
                ],
                "@typescript-eslint/member-ordering": "warn",
                "@typescript-eslint/naming-convention": "warn",
                "@typescript-eslint/no-empty-function": "off",
                "@typescript-eslint/no-empty-interface": "error",
                "@typescript-eslint/no-inferrable-types": [
                    "error",
                    {
                        "ignoreParameters": true
                    }
                ],
                "@typescript-eslint/no-misused-new": "error",
                "@typescript-eslint/no-non-null-assertion": "error",
                "@typescript-eslint/no-shadow": [
                    "warn",
                    {
                        "hoist": "all"
                    }
                ],
                "@typescript-eslint/no-unused-expressions": "error",
                "@typescript-eslint/prefer-function-type": "error",
                "@typescript-eslint/unified-signatures": "error",
                "arrow-body-style": "warn",
                "constructor-super": "error",
                "eqeqeq": ["error", "smart"],
                "guard-for-in": "error",
                "id-blacklist": "off",
                "id-match": "off",
                "import/no-deprecated": "warn",
                "import/order": "warn",
                "no-bitwise": "error",
                "no-caller": "error",
                "no-console": [
                    "error",
                    {
                        "allow": [
                            "log",
                            "warn",
                            "dir",
                            "timeLog",
                            "assert",
                            "clear",
                            "count",
                            "countReset",
                            "group",
                            "groupEnd",
                            "table",
                            "dirxml",
                            "error",
                            "groupCollapsed",
                            "Console",
                            "profile",
                            "profileEnd",
                            "timeStamp",
                            "context"
                        ]
                    }
                ],
                "no-debugger": "error",
                "no-empty": "off",
                "no-eval": "error",
                "no-fallthrough": "error",
                "no-new-wrappers": "error",
                "no-restricted-imports": ["error", "rxjs/Rx"],
                "no-throw-literal": "error",
                "no-undef-init": "error",
                "no-underscore-dangle": "off",
                "no-var": "error",
                "prefer-const": "error",
                "radix": "error"
            },
            "plugins": ["eslint-plugin-import", "@angular-eslint/eslint-plugin", "@typescript-eslint"]
        }
    ]
}
