{ "name": "outline", "private": true, "license": "Business Source License 1.1", "main": "index.js", "scripts": { "clean": "rimraf build", "build:i18n": "i18next --silent 'app/**/*.js' 'server/**/*.js' && mkdir -p ./build/shared/i18n && cp -R ./shared/i18n/locales ./build/shared/i18n", "build:server": "babel --quiet -d ./build/server ./server && babel --quiet -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 --ignore build/ --ignore app/ --ignore flow-typed/", "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.11.1", "@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.11.0", "@babel/preset-flow": "^7.10.4", "@babel/preset-react": "^7.10.4", "@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", "flow-typed": "^3.3.1", "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.33.1", "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.19.3", "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", "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", "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3", "@relative-ci/agent": "^3.0.0", "babel-eslint": "^10.1.0", "babel-jest": "^26.2.2", "babel-loader": "^8.1.0", "babel-plugin-transform-inline-environment-variables": "^0.4.3", "concurrently": "^6.2.1", "enzyme": "^3.11.0", "enzyme-adapter-react-16": "^1.15.6", "eslint": "^7.6.0", "eslint-config-react-app": "3.0.6", "eslint-plugin-flowtype": "^5.2.0", "eslint-plugin-import": "^2.22.0", "eslint-plugin-jsx-a11y": "^6.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", "flow-bin": "^0.124.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", "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": { "prosemirror-view": "1.22.0", "dot-prop": "^5.2.0", "js-yaml": "^3.14.1" }, "version": "0.60.1" }