{ "name": "www", "version": "1.0.0", "description": "Standalone WWW client for Scratch", "scripts": { "start": "node ./dev-server/index.js", "test": "npm run test:lint && npm run build && npm run test:unit", "test:lint": "eslint . --ext .js,.jsx,.json", "test:lint:ci": "eslint . --ext .js,.jsx,.json --format junit -o ./test/results/lint-results.xml", "test:health": "jest ./test/health/*.test.js", "test:integration": "jest ./test/integration/*.test.js --reporters=default --maxWorkers=5", "test:unit": "npm run test:unit:jest && npm run test:unit:tap", "test:unit:jest": "npm run test:unit:jest:unit && npm run test:unit:jest:localization", "test:unit:jest:unit": "jest ./test/unit/ --env=jsdom --reporters=default", "test:unit:jest:localization": "jest ./test/localization/*.test.js --reporters=default", "test:unit:tap": "tap ./test/{unit-legacy,localization-legacy}/ --no-coverage -R classic", "test:unit:convertReportToXunit": "tap ./test/results/unit-raw.tap --no-coverage -R xunit > ./test/results/unit-tap-results.xml", "test:coverage": "tap ./test/{unit-legacy,localization-legacy}/ --coverage --coverage-report=lcov", "build": "npm run clean && npm run translate && NODE_OPTIONS=--max_old_space_size=8000 webpack --bail", "build:analyze": "ANALYZE_BUNDLE=true npm run build", "clean": "rm -rf ./build && rm -rf ./intl && mkdir -p build && mkdir -p intl", "deploy": "npm run deploy:s3 && npm run deploy:fastly && npm run deploy:announce", "deploy:fastly": "node ./bin/configure-fastly.js", "deploy:s3": "npm run deploy:s3:all && npm run deploy:s3:svg && npm run deploy:s3:js && npm run deploy:s3:css", "deploy:s3cmd": "s3cmd sync -P --delete-removed --add-header=Cache-Control:no-cache,public,max-age=3600 --add-header=x-amz-meta-surrogate-key:static-assets", "deploy:s3:all": "npm run deploy:s3cmd -- --exclude '.DS_Store' --exclude '*.svg' --exclude '*.js' --exclude '*.css' ./build/ s3://$S3_BUCKET_NAME/", "deploy:s3:svg": "npm run deploy:s3cmd -- --exclude '*' --include '*.svg' --mime-type 'image/svg+xml' ./build/ s3://$S3_BUCKET_NAME/", "deploy:s3:js": "npm run deploy:s3cmd -- --exclude '*' --include '*.js' --mime-type 'application/javascript' ./build/ s3://$S3_BUCKET_NAME/", "deploy:s3:css": "npm run deploy:s3cmd -- --exclude '*' --include '*.css' --mime-type 'text/css' ./build/ s3://$S3_BUCKET_NAME/", "deploy:announce": "node ./bin/announce.js", "i18n:push": "./bin/tx-push-www --execute", "translate:urls": "node ./bin/get-localized-urls localized-urls.json", "translate:files": "node ./bin/build-locales node_modules/scratch-l10n/www intl", "translate": "npm run translate:urls && npm run translate:files" }, "repository": { "type": "git", "url": "git+ssh://git@github.com/scratchfoundation/scratch-www.git" }, "author": "Massachusetts Institute of Technology", "license": "AGPL-3.0-only", "bugs": { "url": "https://github.com/scratchfoundation/scratch-www/issues" }, "homepage": "https://github.com/scratchfoundation/scratch-www#readme", "dependencies": { "bunyan": "1.8.15", "clipboard-copy": "2.0.1", "driver.js": "1.3.1", "express": "4.21.1", "express-http-proxy": "1.6.3", "lodash.defaults": "4.2.0", "lodash.get": "4.4.2", "react-confetti": "6.1.0", "react-helmet": "5.2.1", "react-onclickoutside": "6.13.0", "react-router-dom": "5.3.4", "react-twitter-embed": "3.0.3", "react-use": "17.5.1", "scratch-parser": "6.0.0", "scratch-storage": "4.0.15" }, "devDependencies": { "@babel/cli": "7.25.9", "@babel/core": "7.26.0", "@babel/eslint-parser": "7.25.9", "@babel/plugin-syntax-dynamic-import": "7.8.3", "@babel/plugin-transform-async-to-generator": "7.25.9", "@babel/plugin-transform-object-rest-spread": "7.25.9", "@babel/preset-env": "7.26.0", "@babel/preset-react": "7.25.9", "@formatjs/intl-datetimeformat": "6.16.5", "@formatjs/intl-locale": "3.4.6", "@formatjs/intl-numberformat": "8.14.5", "@formatjs/intl-pluralrules": "5.3.5", "@formatjs/intl-relativetimeformat": "11.4.5", "@types/jest": "29.5.14", "async": "3.2.6", "autoprefixer": "10.4.20", "babel-loader": "8.4.1", "babel-plugin-transform-require-context": "0.1.1", "bowser": "1.9.4", "buffer": "6.0.3", "canvas": "2.11.2", "cheerio": "1.0.0-rc.3", "classnames": "2.5.1", "cookie": "0.4.1", "copy-webpack-plugin": "6.4.1", "css-loader": "5.2.7", "email-validator": "2.0.4", "emit-file-webpack-plugin": "2.0.1", "enzyme": "3.11.0", "enzyme-adapter-react-16": "1.15.8", "eslint": "8.57.1", "eslint-config-scratch": "9.0.9", "eslint-plugin-jest": "27.9.0", "eslint-plugin-json": "2.1.2", "eslint-plugin-react": "7.37.2", "eslint-plugin-react-hooks": "4.6.2", "fastly": "1.2.1", "file-loader": "6.2.0", "formik": "1.5.8", "formsy-react": "1.1.6", "formsy-react-components": "1.1.0", "git-bundle-sha": "0.0.2", "glob": "5.0.15", "google-libphonenumber": "3.2.39", "html-webpack-plugin": "5.6.0", "iso-3166-2": "1.0.0", "jest": "29.7.0", "jest-canvas-mock": "2.5.2", "jest-environment-jsdom": "29.7.0", "jest-junit": "12.3.0", "keymirror": "0.1.1", "lodash.bindall": "4.4.0", "lodash.defaultsdeep": "4.6.1", "lodash.merge": "4.6.2", "lodash.mergewith": "4.6.2", "lodash.omit": "3.1.0", "lodash.sample": "4.2.1", "lodash.uniqby": "4.7.0", "mini-css-extract-plugin": "1.6.2", "minilog": "2.1.0", "pako": "0.2.8", "plotly.js": "1.47.4", "postcss": "8.4.49", "postcss-import": "12.0.1", "postcss-loader": "4.3.0", "postcss-simple-vars": "5.0.2", "prop-types": "15.8.1", "query-string": "9.1.1", "react": "16.14.0", "react-dom": "16.14.0", "react-intl": "5.25.1", "react-modal": "3.16.1", "react-plotly.js": "2.6.0", "react-redux": "5.1.2", "react-responsive": "3.0.0", "react-slick": "0.16.0", "react-string-replace": "0.4.1", "react-telephone-input": "4.75.5", "react-test-renderer": "16.14.0", "redux": "3.7.2", "redux-mock-store": "1.5.5", "redux-thunk": "2.4.2", "regenerator-runtime": "0.13.9", "sass": "1.81.1", "sass-loader": "10.5.2", "scratch-gui": "5.1.5", "scratch-l10n": "5.0.25", "selenium-webdriver": "4.27.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", "style-loader": "4.0.0", "tap": "14.11.0", "url-loader": "3.0.0", "use-onclickoutside": "0.4.1", "webpack": "5.96.1", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", "webpack-dev-middleware": "5.3.4", "xhr": "2.6.0" }, "jest": { "setupFiles": [ "/test/helpers/enzyme-setup.js", "jest-canvas-mock" ], "moduleNameMapper": { "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "/test/__mocks__/fileMock.js", "\\.(css|less|scss)$": "/test/__mocks__/styleMock.js" }, "reporters": [ "default", "jest-junit" ] }, "jest-junit": { "outputDirectory": "./test/results" }, "nyc": { "include": [ "bin/**/*.js", "src/**/*.js" ], "all": true }, "browserslist": [ "Chrome >= 63", "Firefox >= 57", "Edge >= 15", "Safari >= 11", "ChromeAndroid >= 63", "ios_saf >= 11" ] }