{
  "name": "outline",
  "private": true,
  "license": "Business Source License 1.1",
  "main": "index.js",
  "scripts": {
    "clean": "rimraf build",
    "build:i18n": "i18next --silent 'app/**/*.tsx' 'app/**/*.ts' 'server/**/*.ts' 'server/**/*.tsx' && mkdir -p ./build/shared/i18n && cp -R ./shared/i18n/locales ./build/shared/i18n",
    "build:server": "babel --extensions .ts,.tsx --quiet -d ./build/server ./server && babel --quiet --extensions .ts,.tsx -d./build/shared ./shared && cp ./server/collaboration/Procfile ./build/server/collaboration/Procfile && cp package.json ./build && ln -sf \"$(pwd)/webpack.config.dev.js\" ./build",
    "build:webpack": "webpack --config webpack.config.prod.js",
    "build": "yarn clean && yarn build:webpack && yarn build:i18n && yarn build:server",
    "start": "node ./build/server/index.js",
    "dev": "NODE_ENV=development yarn concurrently -n api,collaboration  -c \"blue,magenta\" \"node --inspect=0.0.0.0 build/server/index.js --services=collaboration,websockets,admin,web,worker\"",
    "dev:watch": "nodemon --exec \"yarn build:server && yarn build:i18n && yarn dev\" -e js,ts --ignore build/ --ignore app/",
    "lint": "eslint app server shared",
    "deploy": "git push heroku master",
    "prepare": "yarn yarn-deduplicate yarn.lock",
    "heroku-postbuild": "yarn build && yarn db:migrate",
    "sequelize:migrate": "sequelize db:migrate",
    "db:create-migration": "sequelize migration:create",
    "db:migrate": "sequelize db:migrate",
    "db:rollback": "sequelize db:migrate:undo",
    "upgrade": "git fetch && git pull && yarn install && yarn heroku-postbuild",
    "test": "yarn test:app && yarn test:server",
    "test:app": "jest --config=app/.jestconfig.json --runInBand --forceExit",
    "test:server": "jest --config=server/.jestconfig.json --runInBand --forceExit",
    "test:watch": "jest --config=server/.jestconfig.json --runInBand --forceExit --watchAll"
  },
  "funding": {
    "type": "GitHub Sponsors ❤",
    "url": "https://github.com/sponsors/outline"
  },
  "engines": {
    "node": ">= 12 <=16"
  },
  "repository": {
    "type": "git",
    "url": "git+ssh://git@github.com/outline/outline.git"
  },
  "browserslist": "> 0.25%, not dead",
  "dependencies": {
    "@babel/core": "^7.16.0",
    "@babel/plugin-proposal-decorators": "^7.10.5",
    "@babel/plugin-transform-destructuring": "^7.10.4",
    "@babel/plugin-transform-regenerator": "^7.10.4",
    "@babel/preset-env": "^7.16.0",
    "@babel/preset-react": "^7.16.0",
    "@bull-board/api": "^3.5.0",
    "@bull-board/koa": "^3.5.0",
    "@hocuspocus/provider": "^1.0.0-alpha.21",
    "@hocuspocus/server": "^1.0.0-alpha.78",
    "@outlinewiki/koa-passport": "^4.1.4",
    "@outlinewiki/passport-azure-ad-oauth2": "^0.1.0",
    "@renderlesskit/react": "^0.6.0",
    "@sentry/node": "^6.3.1",
    "@sentry/react": "^6.3.1",
    "@sentry/tracing": "^6.3.1",
    "@tippy.js/react": "^2.2.2",
    "@tommoor/remove-markdown": "^0.3.2",
    "autotrack": "^2.4.1",
    "aws-sdk": "^2.831.0",
    "babel-plugin-lodash": "^3.3.4",
    "babel-plugin-styled-components": "^1.11.1",
    "babel-plugin-transform-class-properties": "^6.24.1",
    "boundless-arrow-key-navigation": "^1.0.4",
    "bull": "^3.29.0",
    "cancan": "3.1.0",
    "chalk": "^4.1.0",
    "compressorjs": "^1.0.7",
    "copy-to-clipboard": "^3.3.1",
    "core-js": "^3.10.2",
    "datadog-metrics": "^0.9.3",
    "date-fns": "^2.25.0",
    "dd-trace": "^0.32.2",
    "dotenv": "^4.0.0",
    "emoji-regex": "^6.5.1",
    "es6-error": "^4.1.1",
    "exports-loader": "^0.6.4",
    "fetch-retry": "^4.1.1",
    "fetch-with-proxy": "^3.0.1",
    "file-loader": "^1.1.6",
    "focus-visible": "^5.2.0",
    "fractional-index": "^1.0.0",
    "framer-motion": "^4.1.17",
    "fs-extra": "^4.0.2",
    "http-errors": "1.4.0",
    "i18next": "^20.6.1",
    "i18next-http-backend": "^1.3.1",
    "immutable": "^4.0.0",
    "invariant": "^2.2.4",
    "ioredis": "^4.28.0",
    "is-printable-key-event": "^1.0.0",
    "joplin-turndown-plugin-gfm": "^1.0.12",
    "js-search": "^1.4.2",
    "json-loader": "0.5.4",
    "jsonwebtoken": "^8.5.0",
    "jszip": "^3.7.1",
    "kbar": "^0.1.0-beta.16",
    "koa": "^2.10.0",
    "koa-body": "^4.2.0",
    "koa-compress": "2.0.0",
    "koa-convert": "1.2.0",
    "koa-helmet": "5.2.0",
    "koa-jwt": "^3.6.0",
    "koa-logger": "^3.2.1",
    "koa-mount": "^3.0.0",
    "koa-onerror": "^4.1.0",
    "koa-router": "7.0.1",
    "koa-send": "5.0.1",
    "koa-sslify": "2.1.2",
    "koa-static": "^4.0.1",
    "lodash": "^4.17.21",
    "mammoth": "^1.4.19",
    "mobx": "^4.15.4",
    "mobx-react": "^6.3.1",
    "natural-sort": "^1.0.0",
    "nodemailer": "^6.4.16",
    "outline-icons": "^1.35.0",
    "oy-vey": "^0.10.0",
    "passport": "^0.4.1",
    "passport-google-oauth2": "^0.2.0",
    "passport-oauth2": "^1.6.1",
    "passport-slack-oauth2": "^1.1.0",
    "pg": "^8.5.1",
    "pg-hstore": "^2.3.4",
    "polished": "^3.7.2",
    "query-string": "^7.0.1",
    "quoted-printable": "^1.0.1",
    "randomstring": "1.1.5",
    "raw-loader": "^0.5.1",
    "react": "^17.0.2",
    "react-avatar-editor": "^11.1.0",
    "react-color": "^2.17.3",
    "react-dnd": "^14.0.1",
    "react-dnd-html5-backend": "^14.0.0",
    "react-dom": "^17.0.2",
    "react-dropzone": "^11.3.2",
    "react-helmet": "^6.1.0",
    "react-i18next": "^11.13.0",
    "react-is": "^17.0.2",
    "react-portal": "^4.2.0",
    "react-router-dom": "^5.2.0",
    "react-table": "^7.7.0",
    "react-virtual": "^2.8.2",
    "react-virtualized-auto-sizer": "^1.0.5",
    "react-waypoint": "^10.1.0",
    "react-window": "^1.8.6",
    "reakit": "^1.3.10",
    "regenerator-runtime": "^0.13.7",
    "rich-markdown-editor": "^11.20.2",
    "semver": "^7.3.2",
    "sequelize": "^6.9.0",
    "sequelize-cli": "^6.3.0",
    "sequelize-encrypted": "^1.0.0",
    "slate": "0.45.0",
    "slate-md-serializer": "5.5.4",
    "slug": "^4.0.4",
    "smooth-scroll-into-view-if-needed": "^1.1.29",
    "socket.io": "^2.4.0",
    "socket.io-redis": "^5.4.0",
    "socketio-auth": "^0.1.1",
    "stoppable": "^1.1.0",
    "string-replace-to-array": "^1.0.3",
    "styled-components": "^5.2.3",
    "styled-components-breakpoint": "^2.1.1",
    "styled-normalize": "^8.0.4",
    "throng": "^5.0.0",
    "tiny-cookie": "^2.3.1",
    "tmp": "^0.2.1",
    "turndown": "^7.1.1",
    "utf8": "^3.0.0",
    "utility-types": "^3.10.0",
    "uuid": "^8.3.2",
    "validator": "13.7.0",
    "winston": "^3.3.3",
    "ws": "^7.5.3",
    "y-indexeddb": "^9.0.6",
    "y-prosemirror": "^1.0.9",
    "yjs": "^13.5.12"
  },
  "devDependencies": {
    "@babel/cli": "^7.10.5",
    "@babel/preset-typescript": "^7.16.0",
    "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3",
    "@relative-ci/agent": "^3.0.0",
    "@types/bull": "^3.15.5",
    "@types/datadog-metrics": "^0.6.2",
    "@types/emoji-regex": "^9.2.0",
    "@types/enzyme": "^3.10.10",
    "@types/enzyme-adapter-react-16": "^1.0.6",
    "@types/formidable": "^2.0.0",
    "@types/fs-extra": "^9.0.13",
    "@types/google.analytics": "^0.0.42",
    "@types/invariant": "^2.2.35",
    "@types/ioredis": "^4.28.1",
    "@types/jest": "^27.0.2",
    "@types/js-search": "^1.4.0",
    "@types/jsonwebtoken": "^8.5.5",
    "@types/koa": "^2.13.4",
    "@types/koa-compress": "^4.0.3",
    "@types/koa-helmet": "^6.0.4",
    "@types/koa-logger": "^3.1.2",
    "@types/koa-mount": "^4.0.1",
    "@types/koa-router": "^7.4.4",
    "@types/koa-sslify": "^4.0.2",
    "@types/koa-static": "^4.0.2",
    "@types/markdown-it": "^12.2.3",
    "@types/natural-sort": "^0.0.21",
    "@types/node": "^15.12.0",
    "@types/nodemailer": "^6.4.4",
    "@types/passport-oauth2": "^1.4.11",
    "@types/prosemirror-inputrules": "^1.0.4",
    "@types/prosemirror-keymap": "^1.0.4",
    "@types/prosemirror-markdown": "^1.5.3",
    "@types/prosemirror-model": "^1.13.2",
    "@types/prosemirror-state": "^1.2.8",
    "@types/prosemirror-view": "^1.19.1",
    "@types/quoted-printable": "^1.0.0",
    "@types/randomstring": "^1.1.8",
    "@types/react": "^17.0.34",
    "@types/react-avatar-editor": "^10.3.6",
    "@types/react-color": "^3.0.6",
    "@types/react-dom": "^17.0.11",
    "@types/react-helmet": "^6.1.4",
    "@types/react-medium-image-zoom": "^3.0.1",
    "@types/react-portal": "^4.0.4",
    "@types/react-router-dom": "^5.3.2",
    "@types/react-table": "^7.7.8",
    "@types/react-virtualized-auto-sizer": "^1.0.1",
    "@types/react-window": "^1.8.5",
    "@types/sequelize": "^4.28.10",
    "@types/slug": "^5.0.2",
    "@types/socket.io": "2.1.13",
    "@types/socket.io-parser": "^2.2.1",
    "@types/stoppable": "^1.1.1",
    "@types/styled-components": "^5.1.15",
    "@types/throng": "^5.0.3",
    "@types/tmp": "^0.2.2",
    "@types/turndown": "^5.0.1",
    "@types/utf8": "^3.0.0",
    "@typescript-eslint/eslint-plugin": "^5.3.1",
    "@typescript-eslint/parser": "^5.3.1",
    "babel-eslint": "^10.1.0",
    "babel-jest": "^26.2.2",
    "babel-loader": "^8.1.0",
    "babel-plugin-transform-inline-environment-variables": "^0.4.3",
    "babel-plugin-tsconfig-paths-module-resolver": "^1.0.3",
    "concurrently": "^6.2.1",
    "enzyme": "^3.11.0",
    "enzyme-adapter-react-16": "^1.15.6",
    "eslint": "^7.6.0",
    "eslint-config-prettier": "^8.3.0",
    "eslint-import-resolver-typescript": "^2.5.0",
    "eslint-plugin-import": "^2.25.3",
    "eslint-plugin-jsx-a11y": "^6.1.0",
    "eslint-plugin-node": "^11.1.0",
    "eslint-plugin-prettier": "^3.1.0",
    "eslint-plugin-react": "^7.20.0",
    "eslint-plugin-react-hooks": "^4.1.0",
    "fetch-test-server": "^1.1.0",
    "html-webpack-plugin": "4.5.1",
    "i18next-parser": "^4.7.0",
    "jest-cli": "^26.0.0",
    "jest-fetch-mock": "^3.0.3",
    "koa-webpack-dev-middleware": "^1.4.5",
    "koa-webpack-hot-middleware": "^1.0.3",
    "nodemon": "^1.19.4",
    "prettier": "^2.0.5",
    "react-refresh": "^0.9.0",
    "rimraf": "^2.5.4",
    "terser-webpack-plugin": "^4.1.0",
    "typescript": "^4.4.4",
    "url-loader": "^0.6.2",
    "webpack": "4.44.1",
    "webpack-cli": "^3.3.12",
    "webpack-manifest-plugin": "^3.0.0",
    "webpack-pwa-manifest": "^4.3.0",
    "workbox-webpack-plugin": "^6.3.0",
    "yarn-deduplicate": "^3.1.0"
  },
  "resolutions": {
    "socket.io-parser": "^3.4.0",
    "prosemirror-view": "1.22.0",
    "dot-prop": "^5.2.0",
    "js-yaml": "^3.14.1"
  },
  "version": "0.60.1"
}
