{
  "private": true,
  "scripts": {
    "build:css:dev": "sass ./resources/sass:./public/dist --embed-sources",
    "build:css:watch": "sass ./resources/sass:./public/dist --watch --embed-sources",
    "build:css:production": "sass ./resources/sass:./public/dist -s compressed",
    "build:js:dev": "node dev/build/esbuild.js",
    "build:js:watch": "chokidar --initial \"./resources/**/*.js\" \"./resources/**/*.mjs\" \"./resources/**/*.ts\" -c \"npm run build:js:dev\"",
    "build:js:production": "node dev/build/esbuild.js production",
    "build": "npm-run-all --parallel build:*:dev",
    "production": "npm-run-all --parallel build:*:production",
    "dev": "npm-run-all --parallel watch livereload",
    "watch": "npm-run-all --parallel build:*:watch",
    "livereload": "livereload ./public/dist/",
    "permissions": "chown -R $USER:$USER bootstrap/cache storage public/uploads",
    "lint": "eslint \"resources/**/*.js\" \"resources/**/*.mjs\"",
    "fix": "eslint --fix \"resources/**/*.js\" \"resources/**/*.mjs\"",
    "ts:lint": "tsc --noEmit",
    "test": "jest"
  },
  "devDependencies": {
    "@lezer/generator": "^1.7.2",
    "@types/sortablejs": "^1.15.8",
    "chokidar-cli": "^3.0",
    "esbuild": "^0.24.0",
    "eslint": "^8.57.1",
    "eslint-config-airbnb-base": "^15.0.0",
    "eslint-plugin-import": "^2.31.0",
    "jest": "^29.7.0",
    "jest-environment-jsdom": "^29.7.0",
    "livereload": "^0.9.3",
    "npm-run-all": "^4.1.5",
    "sass": "^1.82.0",
    "ts-jest": "^29.2.5",
    "ts-node": "^10.9.2",
    "typescript": "5.7.*"
  },
  "dependencies": {
    "@codemirror/commands": "^6.7.1",
    "@codemirror/lang-css": "^6.3.1",
    "@codemirror/lang-html": "^6.4.9",
    "@codemirror/lang-javascript": "^6.2.2",
    "@codemirror/lang-json": "^6.0.1",
    "@codemirror/lang-markdown": "^6.3.1",
    "@codemirror/lang-php": "^6.0.1",
    "@codemirror/lang-xml": "^6.1.0",
    "@codemirror/language": "^6.10.6",
    "@codemirror/legacy-modes": "^6.4.2",
    "@codemirror/state": "^6.5.0",
    "@codemirror/theme-one-dark": "^6.1.2",
    "@codemirror/view": "^6.35.2",
    "@lezer/highlight": "^1.2.1",
    "@ssddanbrown/codemirror-lang-smarty": "^1.0.0",
    "@ssddanbrown/codemirror-lang-twig": "^1.0.0",
    "@types/jest": "^29.5.14",
    "codemirror": "^6.0.1",
    "idb-keyval": "^6.2.1",
    "markdown-it": "^14.1.0",
    "markdown-it-task-lists": "^2.1.1",
    "snabbdom": "^3.6.2",
    "sortablejs": "^1.15.6"
  },
  "eslintConfig": {
    "root": true,
    "env": {
      "browser": true,
      "es2021": true
    },
    "extends": "airbnb-base",
    "ignorePatterns": [
      "resources/**/*-stub.js",
      "resources/**/*.ts"
    ],
    "overrides": [],
    "parserOptions": {
      "ecmaVersion": "latest",
      "sourceType": "module"
    },
    "rules": {
      "indent": [
        "error",
        4
      ],
      "arrow-parens": [
        "error",
        "as-needed"
      ],
      "padded-blocks": [
        "error",
        {
          "blocks": "never",
          "classes": "always"
        }
      ],
      "object-curly-spacing": [
        "error",
        "never"
      ],
      "space-before-function-paren": [
        "error",
        {
          "anonymous": "never",
          "named": "never",
          "asyncArrow": "always"
        }
      ],
      "import/prefer-default-export": "off",
      "no-plusplus": [
        "error",
        {
          "allowForLoopAfterthoughts": true
        }
      ],
      "arrow-body-style": "off",
      "no-restricted-syntax": "off",
      "no-continue": "off",
      "prefer-destructuring": "off",
      "class-methods-use-this": "off",
      "no-param-reassign": "off",
      "no-console": [
        "warn",
        {
          "allow": [
            "error",
            "warn"
          ]
        }
      ],
      "no-new": "off",
      "max-len": [
        "error",
        {
          "code": 110,
          "tabWidth": 4,
          "ignoreUrls": true,
          "ignoreComments": false,
          "ignoreRegExpLiterals": true,
          "ignoreStrings": true,
          "ignoreTemplateLiterals": true
        }
      ]
    }
  }
}
