{ "name": "owncast-web", "version": "0.1.0", "private": true, "resolutions": { "babel-preset-current-node-syntax": "1.1.1" }, "scripts": { "dev": "next dev", "build": "next build", "start": "next start", "check": "npm run check:lint && npm run check:format && npm run check:unused && npm test && npm run build", "check:lint": "jsfiles=$(git diff --name-only origin/develop... | grep '^web/.*\\.[jt]sx\\?$' | sed 's|^web/||'); cssfiles=$(git diff --name-only origin/develop... | grep '^web/.*\\.s\\?css$' | sed 's|^web/||'); ([ -z \"$jsfiles\" ] || echo \"$jsfiles\" | xargs eslint) && ([ -z \"$cssfiles\" ] || echo \"$cssfiles\" | xargs stylelint)", "check:format": "files=$(git diff --name-only origin/develop... | grep '^web/.*\\.\\(js\\|ts\\|jsx\\|tsx\\|css\\|scss\\)$' | sed 's|^web/||'); [ -z \"$files\" ] || echo \"$files\" | xargs prettier --check", "check:unused": "knip --include dependencies,files,exports", "lint": "eslint --fix --ext .js,.ts,.tsx types/ pages/ components/ && npm run stylelint", "lint:changed": "files=$(git diff --name-only origin/develop... | grep '^web/.*\\.[jt]sx\\?$' | sed 's|^web/||'); [ -z \"$files\" ] || echo \"$files\" | xargs eslint --fix", "stylelint": "stylelint --fix **/*.scss", "stylelint:changed": "files=$(git diff --name-only origin/develop... | grep '^web/.*\\.s\\?css$' | sed 's|^web/||'); [ -z \"$files\" ] || echo \"$files\" | xargs stylelint --fix", "storybook": "storybook dev -p 6006", "build-storybook": "storybook build", "build-styles": "cd ./style-definitions && style-dictionary build && ./build.sh && cd -", "test": "jest", "format": "prettier --write **/*.{js,ts,jsx,tsx,css,md,scss}", "format:changed": "files=$(git diff --name-only origin/develop... | grep '^web/' | sed 's|^web/||'); [ -z \"$files\" ] || echo \"$files\" | xargs prettier --write", "translate": "node scripts/i18n-extract.js" }, "dependencies": { "@ant-design/icons": "4.8.3", "@babel/parser": "^7.28.0", "@babel/traverse": "^7.28.0", "@codemirror/lang-css": "6.3.1", "@codemirror/lang-html": "^6.4.2", "@codemirror/lang-javascript": "^6.1.2", "@codemirror/lang-markdown": "6.5.0", "@codemirror/language-data": "6.5.2", "@emoji-mart/data": "^1.2.1", "@emoji-mart/react": "^1.1.1", "@fontsource/inter": "^5.0.0", "@fontsource/poppins": "5.2.7", "@next/bundle-analyzer": "^14.0.0", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.3.0", "@uiw/codemirror-theme-bbedit": "4.25.8", "@uiw/react-codemirror": "4.25.8", "@xstate/react": "3.2.2", "antd": "4.24.16", "autoprefixer": "^10.4.14", "babel-plugin-dynamic-import-node": "^2.3.3", "chart.js": "^4.2.0", "classnames": "2.5.1", "date-fns": "^4.0.0", "emoji-mart": "^5.2.2", "glob": "^13.0.0", "graphemer": "^1.4.0", "i18next-scanner": "^4.6.0", "interweave": "^13.0.0", "interweave-autolink": "^5.1.0", "lodash": "4.17.23", "next": "14.2.35", "next-export-i18n": "2.3.5", "next-pwa": "^5.6.0", "next-with-less": "3.0.1", "postcss-flexbugs-fixes": "5.0.2", "react": "18.3.1", "react-chartjs-2": "^5.2.0", "react-dom": "18.3.1", "react-error-boundary": "^5.0.0", "react-hotkeys-hook": "5.2.4", "react-linkify": "1.0.0-alpha", "react-markdown": "10.1.0", "react-virtuoso": "4.18.3", "recoil": "0.7.7", "regexpu-core": "^5.3.2", "sanitize-html": "^2.11.0", "semver": "^7.6.3", "sharp": "0.34.5", "ua-parser-js": "1.0.41", "video.js": "^8.3.0", "workbox-precaching": "^7.0.0", "workbox-window": "^7.0.0", "xstate": "4.38.3", "yaml": "2.8.2" }, "devDependencies": { "@babel/core": "7.29.0", "@babel/preset-react": "^7.25.7", "@commitlint/cli": "^20.0.0", "@commitlint/config-conventional": "^20.0.0", "@mdx-js/react": "3.1.1", "@storybook/addon-a11y": "^9.1.13", "@storybook/addon-docs": "^9.1.13", "@storybook/addon-links": "^9.1.13", "@storybook/cli": "^9.1.13", "@storybook/mdx2-csf": "1.1.0", "@storybook/nextjs": "^9.1.13", "@svgr/webpack": "8.1.0", "@testing-library/react": "^16.3.0", "@types/jest": "^30.0.0", "@types/markdown-it": "14.1.2", "@types/node": "24.10.7", "@types/prop-types": "15.7.15", "@types/react": "18.3.28", "@types/react-linkify": "1.0.4", "@types/sanitize-html": "^2.9.0", "@types/ua-parser-js": "0.7.39", "@types/video.js": "^7.3.50", "@typescript-eslint/eslint-plugin": "8.57.1", "@typescript-eslint/parser": "8.57.1", "babel-loader": "10.1.1", "chromatic": "15.3.0", "css-loader": "7.1.4", "cypress": "^15.0.0", "eslint": "8.57.1", "eslint-config-airbnb": "19.0.4", "eslint-config-next": "14.2.35", "eslint-config-prettier": "10.1.8", "eslint-plugin-import": "^2.27.5", "eslint-plugin-jsx-a11y": "6.10.2", "eslint-plugin-prettier": "^5.0.0", "eslint-plugin-react": "7.37.5", "eslint-plugin-react-hooks": "4.6.2", "eslint-plugin-storybook": "9.1.20", "handlebars": "^4.7.7", "html-webpack-plugin": "5.6.6", "install": "^0.13.0", "jest-environment-jsdom": "^30.0.4", "knip": "^5.0.0", "less": "4.6.4", "less-loader": "12.3.2", "mdx-mermaid": "^2.0.0", "mermaid": "^11.10.0", "msw": "^2.11.6", "msw-storybook-addon": "^2.0.6", "npm": "^11.0.0", "postcss": "^8.4.31", "prettier": "3.8.1", "sass": "1.98.0", "storybook": "^9.1.13", "style-dictionary": "3.9.2", "style-loader": "4.0.0", "stylelint": "^16.0.0", "stylelint-config-standard": "^39.0.0", "stylelint-config-standard-scss": "^16.0.0", "ts-jest": "^29.1.0", "typescript": "^5.7.3" }, "overrides": { "@emoji-mart/react": { "emoji-mart": "5.2.2" } }, "msw": { "workerDirectory": [ "public/" ] } }