{ "name": "posthog", "description": "", "version": "0.0.0", "repository": { "type": "git", "url": "https://github.com/posthog/posthog.git" }, "author": "PostHog Inc.", "bugs": { "url": "https://github.com/posthog/posthog/issues" }, "homepage": "https://github.com/posthog/posthog#readme", "license": "MIT", "engines": { "node": ">=18 <19" }, "packageManager": "pnpm@8.10.5", "scripts": { "copy-scripts": "mkdir -p frontend/dist/ && ./bin/copy-posthog-js", "test": "pnpm test:unit && pnpm test:visual", "test:unit": "jest --testPathPattern=frontend/", "jest": "jest", "test:visual": "rm -rf frontend/__snapshots__/__failures__/ && docker compose -f docker-compose.playwright.yml run --rm -it --build playwright pnpm test:visual:update --url http://host.docker.internal:6006", "test:visual:update": "NODE_OPTIONS=--max-old-space-size=6144 test-storybook -u --browsers chromium webkit --no-index-json", "test:visual:debug": "PWDEBUG=1 NODE_OPTIONS=--max-old-space-size=6144 test-storybook --browsers chromium webkit --no-index-json", "test:visual:ci:update": "test-storybook -u --no-index-json --maxWorkers=2", "test:visual:ci:verify": "test-storybook --ci --no-index-json --maxWorkers=2", "start": "concurrently -n ESBUILD,TYPEGEN -c yellow,green \"pnpm start-http\" \"pnpm run typegen:watch\"", "start-http": "pnpm clean && pnpm copy-scripts && node frontend/build.mjs --dev", "start-docker": "pnpm start-http --host 0.0.0.0", "clean": "rm -rf frontend/dist && mkdir frontend/dist", "build": "pnpm copy-scripts && pnpm build:esbuild", "build:esbuild": "node frontend/build.mjs", "schema:build": "pnpm run schema:build:json && pnpm run schema:build:python", "schema:build:json": "ts-node bin/build-schema.mjs && prettier --write frontend/src/queries/schema.json", "schema:build:python": "datamodel-codegen --class-name='SchemaRoot' --collapse-root-models --target-python-version 3.10 --disable-timestamp --use-one-literal-as-default --use-default --use-default-kwarg --use-subclass-enum --input frontend/src/queries/schema.json --input-file-type jsonschema --output posthog/schema.py --output-model-type pydantic_v2.BaseModel && ruff format posthog/schema.py", "grammar:build": "npm run grammar:build:python && npm run grammar:build:cpp", "grammar:build:python": "cd posthog/hogql/grammar && antlr -Dlanguage=Python3 HogQLLexer.g4 && antlr -visitor -no-listener -Dlanguage=Python3 HogQLParser.g4", "grammar:build:cpp": "cd posthog/hogql/grammar && antlr -o ../../../hogql_parser -Dlanguage=Cpp HogQLLexer.g4 && antlr -o ../../../hogql_parser -visitor -no-listener -Dlanguage=Cpp HogQLParser.g4", "packages:build": "pnpm packages:build:apps-common && pnpm packages:build:lemon-ui", "packages:build:apps-common": "cd frontend/@posthog/apps-common && pnpm i && pnpm build", "packages:build:lemon-ui": "cd frontend/@posthog/lemon-ui && pnpm i && pnpm build", "editor:update-tsd": "pnpm packages:build && node frontend/editor-update-tsd.mjs", "prettier": "prettier --write \"./**/*.{js,mjs,ts,tsx,json,yaml,yml,css,scss}\"", "prettier:check": "prettier --check \"frontend/**/*.{js,mjs,ts,tsx,json,yaml,yml,css,scss}\"", "typescript:check": "tsc --noEmit && echo \"No errors reported by tsc.\"", "lint:js": "eslint frontend/src", "lint:css": "stylelint \"frontend/**/*.{css,scss}\"", "format:backend": "ruff --exclude posthog/hogql/grammar .", "format:frontend": "pnpm lint:js --fix && pnpm lint:css --fix && pnpm prettier", "format": "pnpm format:backend && pnpm format:frontend", "typegen:write": "kea-typegen write --delete --show-ts-errors", "typegen:check": "kea-typegen check", "typegen:watch": "kea-typegen watch --delete --show-ts-errors", "typegen:clean": "find frontend/src -type f -name '*Type.ts' -delete", "storybook": "storybook dev -p 6006", "build-storybook": "storybook build", "dev:migrate:postgres": "export DEBUG=1 && source env/bin/activate && python manage.py migrate", "dev:migrate:clickhouse": "export DEBUG=1 && source env/bin/activate && python manage.py migrate_clickhouse", "prepare": "husky install", "mobile-replay:web:schema:build:json": "ts-json-schema-generator -f tsconfig.json --path 'node_modules/@rrweb/types/dist/index.d.ts' --type 'eventWithTime' --expose all --no-top-ref --out ee/frontend/mobile-replay/schema/web/rr-web-schema.json && prettier --write ee/frontend/mobile-replay/schema/web/rr-web-schema.json", "mobile-replay:mobile:schema:build:json": "ts-json-schema-generator -f tsconfig.json --path 'ee/frontend/mobile-replay/mobile.types.ts' --type 'mobileEventWithTime' --expose all --no-top-ref --out ee/frontend/mobile-replay/schema/mobile/rr-mobile-schema.json && prettier --write ee/frontend/mobile-replay/schema/mobile/rr-mobile-schema.json", "mobile-replay:schema:build:json": "pnpm mobile-replay:web:schema:build:json && pnpm mobile-replay:mobile:schema:build:json", "visualize-toolbar-bundle": "pnpm exec esbuild-visualizer --metadata ./toolbar-esbuild-meta.json --filename=toolbar-esbuild-bundle-visualization.html" }, "dependencies": { "@ant-design/icons": "^4.7.0", "@babel/runtime": "^7.24.0", "@dnd-kit/core": "^6.0.8", "@dnd-kit/modifiers": "^6.0.1", "@dnd-kit/sortable": "^7.0.2", "@dnd-kit/utilities": "^3.2.1", "@floating-ui/react": "^0.26.9", "@lottiefiles/react-lottie-player": "^3.4.7", "@medv/finder": "^3.1.0", "@microlink/react-json-view": "^1.21.3", "@monaco-editor/react": "4.4.6", "@posthog/icons": "0.6.7", "@posthog/plugin-scaffold": "^1.4.4", "@react-hook/size": "^2.1.2", "@rrweb/types": "2.0.0-alpha.12", "@sentry/react": "7.22.0", "@tailwindcss/container-queries": "^0.1.1", "@testing-library/dom": ">=7.21.4", "@tiptap/core": "^2.1.16", "@tiptap/extension-document": "^2.1.16", "@tiptap/extension-floating-menu": "^2.1.16", "@tiptap/extension-placeholder": "^2.1.16", "@tiptap/extension-task-item": "^2.1.16", "@tiptap/extension-task-list": "^2.1.16", "@tiptap/pm": "^2.1.16", "@tiptap/react": "^2.1.16", "@tiptap/starter-kit": "^2.1.16", "@tiptap/suggestion": "^2.1.16", "@types/md5": "^2.3.0", "@types/react-transition-group": "^4.4.5", "@types/react-virtualized": "^9.21.23", "ajv": "^8.12.0", "algoliasearch": "^4.22.1", "antd": "^4.17.1", "antd-dayjs-webpack-plugin": "^1.0.6", "autoprefixer": "^10.4.13", "babel-preset-nano-react-app": "^0.1.0", "chart.js": "^3.9.1", "chartjs-adapter-dayjs-3": "^1.2.3", "chartjs-plugin-annotation": "2.2.1", "chartjs-plugin-crosshair": "^1.2.0", "chartjs-plugin-datalabels": "^2.2.0", "chartjs-plugin-stacked100": "^1.4.0", "chokidar": "^3.5.3", "clsx": "^1.1.1", "core-js": "^3.32.0", "cors": "^2.8.5", "cssnano": "^6.0.3", "d3": "^7.8.2", "d3-sankey": "^0.12.3", "dayjs": "^1.10.7", "dompurify": "^3.0.6", "esbuild": "^0.19.8", "esbuild-plugin-less": "^1.3.1", "esbuild-sass-plugin": "^3.0.0", "expr-eval": "^2.0.2", "express": "^4.17.1", "fast-deep-equal": "^3.1.3", "fflate": "^0.7.4", "fs-extra": "^10.0.0", "fuse.js": "^6.6.2", "husky": "^7.0.4", "image-blob-reduce": "^4.1.0", "kea": "^3.1.5", "kea-forms": "^3.1.3", "kea-loaders": "^3.0.0", "kea-localstorage": "^3.1.0", "kea-router": "^3.1.4", "kea-subscriptions": "^3.0.1", "kea-test-utils": "^0.2.4", "kea-waitfor": "^0.2.1", "kea-window-values": "^3.0.0", "maplibre-gl": "^3.5.1", "md5": "^2.3.0", "monaco-editor": "^0.39.0", "natural-orderby": "^3.0.2", "papaparse": "^5.4.1", "pmtiles": "^2.11.0", "postcss": "^8.4.31", "postcss-preset-env": "^9.3.0", "posthog-js": "1.120.4", "posthog-js-lite": "2.5.0", "prettier": "^2.8.8", "prop-types": "^15.7.2", "protomaps-themes-base": "2.0.0-alpha.1", "query-selector-shadow-dom": "^1.0.0", "rc-picker": "~2.5.17", "rc-trigger": "^5.2.5", "react": "^18.2.0", "react-dom": "^18.2.0", "react-draggable": "^4.2.0", "react-grid-layout": "^1.3.0", "react-instantsearch": "^7.6.0", "react-intersection-observer": "^9.5.3", "react-markdown": "^5.0.3", "react-modal": "^3.15.1", "react-resizable": "^3.0.5", "react-shadow": "^20.3.0", "react-syntax-highlighter": "^15.5.0", "react-textarea-autosize": "^8.3.3", "react-toastify": "^8.2.0", "react-transition-group": "^4.4.5", "react-virtualized": "^9.22.5", "resize-observer-polyfill": "^1.5.1", "rrweb": "2.0.0-alpha.12", "sass": "^1.26.2", "tailwind-merge": "^2.2.2", "tailwindcss": "^3.4.0", "use-debounce": "^9.0.3", "use-resize-observer": "^8.0.0", "zxcvbn": "^4.4.2" }, "devDependencies": { "@babel/core": "^7.22.10", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", "@babel/plugin-proposal-private-property-in-object": "^7.21.11", "@babel/plugin-transform-react-jsx": "^7.22.5", "@babel/plugin-transform-runtime": "^7.22.10", "@babel/preset-env": "^7.22.10", "@babel/preset-react": "^7.22.5", "@babel/preset-typescript": "^7.22.5", "@cypress/webpack-preprocessor": "^5.17.1", "@playwright/test": "1.41.2", "@sentry/types": "7.22.0", "@storybook/addon-a11y": "^7.6.4", "@storybook/addon-actions": "^7.6.4", "@storybook/addon-essentials": "^7.6.4", "@storybook/addon-links": "^7.6.4", "@storybook/addon-storysource": "^7.6.4", "@storybook/addons": "^7.6.4", "@storybook/api": "^7.6.4", "@storybook/blocks": "^7.6.4", "@storybook/components": "^7.6.4", "@storybook/core-events": "^7.6.4", "@storybook/csf": "^0.1.2", "@storybook/react": "^7.6.4", "@storybook/react-webpack5": "^7.6.4", "@storybook/test-runner": "^0.16.0", "@storybook/theming": "^7.6.4", "@storybook/types": "^7.6.4", "@sucrase/jest-plugin": "^3.0.0", "@testing-library/dom": ">=7.21.4", "@testing-library/jest-dom": "^5.16.2", "@testing-library/react": "^13.4.0", "@testing-library/react-hooks": "^8.0.1", "@testing-library/user-event": "^13.5.0", "@types/chartjs-plugin-crosshair": "^1.1.1", "@types/clone": "^2.1.1", "@types/d3": "^7.4.0", "@types/d3-sankey": "^0.12.1", "@types/dompurify": "^3.0.3", "@types/image-blob-reduce": "^4.1.1", "@types/jest": "^29.2.3", "@types/jest-image-snapshot": "^6.1.0", "@types/md5": "^2.3.0", "@types/node": "^18.11.9", "@types/papaparse": "^5.3.8", "@types/pixelmatch": "^5.2.4", "@types/pngjs": "^6.0.1", "@types/query-selector-shadow-dom": "^1.0.0", "@types/react": "^17.0.39", "@types/react-dom": "^18.2.8", "@types/react-grid-layout": "^1.1.2", "@types/react-modal": "^3.13.1", "@types/react-resizable": "^3.0.4", "@types/react-syntax-highlighter": "^15.5.7", "@types/react-virtualized": "^9.21.23", "@types/testing-library__jest-dom": "^5.14.5", "@types/zxcvbn": "^4.4.0", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", "axe-core": "^4.4.3", "babel-loader": "^8.0.6", "babel-plugin-import": "^1.13.0", "concurrently": "^5.3.0", "css-loader": "^3.4.2", "cypress": "^13.3.0", "cypress-axe": "^1.5.0", "cypress-terminal-report": "^5.3.7", "esbuild-visualizer": "^0.6.0", "eslint": "^8.52.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-compat": "^4.2.0", "eslint-plugin-cypress": "^2.15.1", "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-import": "^2.29.0", "eslint-plugin-jest": "^27.4.3", "eslint-plugin-no-only-tests": "^3.1.0", "eslint-plugin-posthog": "link:./eslint-rules", "eslint-plugin-react": "^7.33.2", "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-storybook": "^0.6.15", "file-loader": "^6.1.0", "givens": "^1.3.6", "history": "^5.0.1", "html-webpack-harddisk-plugin": "^2.0.0", "html-webpack-plugin": "^5.5.3", "jest": "^29.7.0", "jest-canvas-mock": "^2.4.0", "jest-environment-jsdom": "^29.3.1", "jest-image-snapshot": "^6.1.0", "kea-typegen": "^3.3.0", "less": "^3.12.2", "less-loader": "^7.0.2", "lint-staged": "~10.2.13", "mockdate": "^3.0.5", "monaco-editor-webpack-plugin": "^7.0.1", "msw": "^0.49.0", "path-browserify": "^1.0.1", "pixelmatch": "^5.3.0", "pngjs": "^6.0.0", "postcss-loader": "^4.3.0", "process": "^0.11.10", "raw-loader": "^4.0.2", "redis": "^4.6.13", "safe-stable-stringify": "^2.4.3", "sass-loader": "^10.0.1", "storybook": "^7.6.4", "storybook-addon-pseudo-states": "2.1.2", "style-loader": "^2.0.0", "stylelint": "^15.11.0", "stylelint-config-recess-order": "^4.3.0", "stylelint-config-standard-scss": "^11.1.0", "stylelint-order": "^6.0.3", "sucrase": "^3.29.0", "timekeeper": "^2.2.0", "ts-json-schema-generator": "^1.5.0", "ts-node": "^10.9.1", "typescript": "~4.9.5", "webpack": "^5.88.2", "webpack-cli": "^5.1.4", "whatwg-fetch": "^3.6.2" }, "optionalDependencies": { "fsevents": "^2.3.2" }, "pnpm": { "overrides": { "playwright": "1.41.2" }, "patchedDependencies": { "rrweb@2.0.0-alpha.12": "patches/rrweb@2.0.0-alpha.12.patch" } }, "lint-staged": { "*.{json,yaml,yml}": "prettier --write", "*.{css,scss}": [ "stylelint --fix", "prettier --write" ], "cypress/**/*.{js,jsx,mjs,ts,tsx}": [ "eslint -c .eslintrc.js --fix", "prettier --write" ], "frontend/src/**/*.{js,jsx,mjs,ts,tsx}": [ "eslint -c .eslintrc.js --fix", "prettier --write" ], "frontend/*.mjs": [ "eslint -c .eslintrc.js --fix", "prettier --write" ], "ee/frontend/**/*.{js,jsx,mjs,ts,tsx}": [ "eslint -c .eslintrc.js --fix", "prettier --write" ], "plugin-server/**/*.{js,jsx,mjs,ts,tsx}": [ "pnpm --dir plugin-server exec eslint --fix", "pnpm --dir plugin-server exec prettier --write" ], "!(posthog/hogql/grammar/*)*.{py,pyi}": [ "ruff format", "ruff check --fix" ] }, "browserslist": { "development": [ "last 2 chrome versions", "last 2 firefox versions", "last 2 edge versions" ], "production": [ "defaults and not not op_mini all" ] }, "browser": { "path": "path-browserify" } }