{
  "$schema": "../../node_modules/eslint-plugin-project-structure/folderStructure.schema.json",
  "regexParameters": {
    "camelCase": "^[a-z]+[A-Za-z0-9]+"
  },
  "structure": [
    {
      "name": "packages",
      "children": [
        {
          "name": "twenty-front",
          "children": [
            { "name": "*", "children": [] },
            { "name": "*" },
            {
              "name": "src",
              "children": [
                { "name": "*", "children": [] },
                { "name": "*" },
                {
                  "name": "modules",
                  "children": [
                    { "ruleId": "moduleFolderRule" },
                    { "name": "types", "ruleId": "doNotCheckLeafFolderRule" }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  ],
  "rules": {
    "moduleFolderRule": {
      "name": "^(?!utils$|hooks$|states$|types$|graphql$|components$|effect-components$|constants$|validation-schemas$|contexts$|scopes$|services$|errors$)[a-z][a-z0-9]**(?:-[a-z0-9]+)**$",
      "folderRecursionLimit": 6,
      "children": [
        { "ruleId": "moduleFolderRule" },
        { "name": "hooks", "ruleId": "hooksLeafFolderRule" },
        { "name": "utils", "ruleId": "utilsLeafFolderRule" },
        { "name": "states", "ruleId": "doNotCheckLeafFolderRule" },
        { "name": "types", "ruleId": "doNotCheckLeafFolderRule" },
        { "name": "graphql", "ruleId": "doNotCheckLeafFolderRule" },
        { "name": "components", "ruleId": "doNotCheckLeafFolderRule" },
        { "name": "effect-components", "ruleId": "doNotCheckLeafFolderRule" },
        { "name": "constants", "ruleId": "doNotCheckLeafFolderRule" },
        { "name": "validation-schemas", "ruleId": "doNotCheckLeafFolderRule" },
        { "name": "contexts", "ruleId": "doNotCheckLeafFolderRule" },
        { "name": "scopes", "ruleId": "doNotCheckLeafFolderRule" },
        { "name": "services", "ruleId": "doNotCheckLeafFolderRule" },
        { "name": "errors", "ruleId": "doNotCheckLeafFolderRule" }
      ]
    },
    "hooksLeafFolderRule": {
      "folderRecursionLimit": 2,
      "children": [
        { "name": "use{PascalCase}.(ts|tsx)" },
        {
          "name": "__tests__",
          "children": [{ "name": "use{PascalCase}.test.(ts|tsx)" }]
        },
        { "name": "internal", "ruleId": "hooksLeafFolderRule" }
      ]
    },
    "doNotCheckLeafFolderRule": {
      "folderRecursionLimit": 1,
      "children": [{ "name": "*" }, { "name": "*", "children": [] }]
    },
    "utilsLeafFolderRule": {
      "folderRecursionLimit": 1,
      "children": [
        { "name": "{camelCase}.ts" },
        {
          "name": "__tests__",
          "children": [{ "name": "{camelCase}.test.ts" }]
        }
      ]
    }
  }
}
