{ "name": "canvas-lms", "license": "AGPL-3.0", "version": "0.0.0", "engines": { "node": ">=18.0.0", "yarn": "^1.19.1" }, "private": true, "workspaces": { "packages": [ "gems/plugins/*", "packages/*", "ui/engine", "ui/shared/*" ] }, "dependencies": { "@apollo/client": "^3.4.16", "@instructure/brandable_css": "^3", "@instructure/canvas-media": "*", "@instructure/debounce": "^8", "@instructure/emotion": "^8", "@instructure/media-capture": "^9.0.0", "@instructure/media-capture-new": "npm:@instructure/media-capture@^10", "@instructure/outcomes-ui": "^3", "@instructure/react-crop": "^5.0.1", "@instructure/reactour": "https://github.com/instructure/reactour#b908434fe544703e26bc67c67c4111252c401f92", "@instructure/ready": "*", "@instructure/ui-a11y-content": "^8", "@instructure/ui-a11y-utils": "^8", "@instructure/ui-alerts": "^8", "@instructure/ui-avatar": "^8", "@instructure/ui-badge": "^8", "@instructure/ui-billboard": "^8", "@instructure/ui-breadcrumb": "^8", "@instructure/ui-buttons": "^8", "@instructure/ui-calendar": "^8", "@instructure/ui-checkbox": "^8", "@instructure/ui-date-input": "^8", "@instructure/ui-date-time-input": "^8", "@instructure/ui-decorator": "^8", "@instructure/ui-dialog": "^8", "@instructure/ui-drawer-layout": "^8.55", "@instructure/ui-editable": "^8", "@instructure/ui-file-drop": "^8", "@instructure/ui-flex": "^8", "@instructure/ui-focusable": "^8", "@instructure/ui-form-field": "^8", "@instructure/ui-grid": "^8", "@instructure/ui-heading": "^8", "@instructure/ui-i18n": "^8", "@instructure/ui-icons": "^8", "@instructure/ui-img": "^8", "@instructure/ui-link": "^8", "@instructure/ui-list": "^8", "@instructure/ui-media-player": "^9.0.0", "@instructure/ui-menu": "^8", "@instructure/ui-metric": "^8", "@instructure/ui-modal": "^8", "@instructure/ui-motion": "^8", "@instructure/ui-navigation": "^8", "@instructure/ui-number-input": "^8", "@instructure/ui-overlays": "^8", "@instructure/ui-pagination": "^8", "@instructure/ui-pill": "^8", "@instructure/ui-portal": "^8", "@instructure/ui-progress": "^8", "@instructure/ui-radio-input": "^8", "@instructure/ui-rating": "^8", "@instructure/ui-react-utils": "^8", "@instructure/ui-responsive": "^8", "@instructure/ui-select": "^8", "@instructure/ui-simple-select": "^8", "@instructure/ui-spinner": "^8", "@instructure/ui-svg-images": "^8", "@instructure/ui-table": "^8", "@instructure/ui-tabs": "^8", "@instructure/ui-tag": "^8", "@instructure/ui-text": "^8", "@instructure/ui-text-area": "^8", "@instructure/ui-text-input": "^8", "@instructure/ui-themes": "^8", "@instructure/ui-time-select": "^8", "@instructure/ui-toggle-details": "^8", "@instructure/ui-tooltip": "^8", "@instructure/ui-top-nav-bar": "^8", "@instructure/ui-tray": "^8", "@instructure/ui-tree-browser": "^8", "@instructure/ui-view": "^8", "@instructure/uid": "^8", "@instructure/updown": "^1.3", "@microsoft/immersive-reader-sdk": "^1.1.0", "@peculiar/asn1-schema": "^2.3.6", "@peculiar/x509": "^1.9.3", "@popperjs/core": "^2.9.2", "@rspack/cli": "^0.5.4", "@rspack/core": "^0.5.4", "@rspack/plugin-react-refresh": "^0.5.4", "@sentry/cli": "^2.21.5", "@sentry/react": "^7.81.0", "@swc/core": "1.5.0", "@swc/helpers": "^0.5.6", "@swc/jest": "^0.2.36", "@tanstack/query-sync-storage-persister": "^4.36.1", "@tanstack/react-query": "^4.36.1", "@tanstack/react-query-persist-client": "^4.36.1", "@types/b-spline": "^2.0.4", "@types/dagre": "^0.7.52", "@types/jquery.cookie": "^1.4.32", "@types/react-dnd": "2.0.36", "@types/twitter-text": "^3.1.2", "@types/uuid": "^9.0.0", "@vitest/coverage-v8": "^1.0.4", "apollo-cache": "^1.3.2", "apollo-cache-inmemory": "^1.6.3", "apollo-cache-persist": "^0.1.1", "apollo-client": "^2.6.4", "apollo-link": "^1.2.3", "apollo-link-error": "^1.1.1", "apollo-link-http": "^1.5.5", "apollo-link-state": "^0.4.2", "apollo-utilities": "^1.3.2", "axios": "^0.21.1", "axios-cache-adapter": "^2.7.0", "b-spline": "^2.0.2", "backbone": "1.1.1", "big.js": "^6.2.1", "browserslist": "^4.22.2", "canvas_offline_course_viewer": "https://github.com/instructure/canvas_offline_course_viewer.git#1.2.0", "chart.js": "^3.9.1", "chartjs-adapter-moment": "^1.0.0", "classnames": "^2.2.5", "color-slicer": "0.8.0", "coverage-istanbul-loader": "^3.0.5", "create-react-class": "^15.6.3", "cross-fetch": "^4.0.0", "crypto-js": "^4.1.1", "d3": "3.5.17", "dagre": "^0.8.5", "emoji-mart": "^3.0.1", "export-from-json": "^1.6.0", "final-form": "^4.20.2", "formdata-polyfill": "^3.0.9", "fullcalendar": "3.10.5", "graphiql": "1.7.2", "graphiql-explorer": "^0.4.2", "graphql": "^16", "graphql-request": "^6.1.0", "graphql-tag": "^2.8.0", "i18n-js": "^3", "ic-ajax": "~2.0.1", "ic-tabs": "0.1.3", "immer": "^3", "immutability-helper": "^3", "immutable": "^3.8.2", "invariant": "^2.2.2", "is-valid-domain": "^0.0.11", "jquery-migrate": "3.4.1", "jquery-ui-touch-punch": "^0.2.3", "jquery.cookie": "^1.4.1", "jquery.elastic": "1.0.0", "jquery3": "npm:jquery@^3.7.1", "localforage": "^1.10.0", "location-origin": "^1.1.4", "lodash": "^4.17.21", "md5": "^2.2.1", "mediaelement": "https://github.com/instructure/mediaelement.git#master", "mime": "^4.0.1", "minimatch": "~3.0.4", "moment": "^2.29.4", "moment-timezone": "^0.5.45", "nanoid": "^3.1.10", "newless": "^0.3.0", "normalize-scroll-left": "^0.2", "page": "^1.11", "parse-decimal-number": "1.0.0", "parse-link-header": "^1", "prop-types": "^15", "qs": "^6.6.0", "react": "^16.13.1", "react-apollo": "~3.0.1", "react-beautiful-dnd": "^13.1.1", "react-dnd": "6.0", "react-dnd-html5-backend": "6.0", "react-dom": "^16.13.1", "react-final-form": "^6.5.3", "react-identicons": "^1.2.5", "react-immutable-proptypes": "^2.1.0", "react-lazy-load": "^4.0.1", "react-modal": "^3", "react-popper": "^2.2.5", "react-redux": "^5.1.1", "react-router-dom": "^6.16.0", "react-tokeninput": "^2.5.0", "react-transition-group": "^1", "react-use": "^17.3.1", "redux": "^4.0.1", "redux-actions": "^2.6.4", "redux-promise": "^0.6", "redux-saga": "^0.16.0", "redux-thunk": "^3.1.0", "reselect": "^4.0.0", "rspack-manifest-plugin": "^5.0.0-alpha0", "shallow-equal": "^1.2.0", "spin.js": "2.3.2", "swc-loader": "^0.2.6", "swc-plugin-coverage-instrument": "^0.0.21", "swfobject": "^2.2.1", "tablesorter": "^2.28.5", "timezone": "npm:@instructure/timezone@1.0.30", "tinycolor2": "1.4.1", "twitter-text": "^3.1.0", "underscore": "^1.13.6", "use-debounce": "^3", "use-media-set": "^1.1", "uuid": "^3.2.1", "velocity-animate": "^1.5.0", "webpack-retry-chunk-load-plugin": "^3.1.1", "yarn-deduplicate": "^3.0.1", "zod": "^3.22.4", "zustand": "3.7.2" }, "devDependencies": { "@apollo/react-common": "~3.0.1", "@apollo/react-components": "~3.0.1", "@apollo/react-hoc": "~3.0.1", "@apollo/react-hooks": "~3.0.1", "@apollo/react-ssr": "~3.0.1", "@apollo/react-testing": "~3.0.1", "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", "@babel/parser": "^7", "@babel/plugin-proposal-class-properties": "^7", "@babel/plugin-proposal-optional-chaining": "^7", "@babel/plugin-transform-modules-commonjs": "^7", "@babel/plugin-transform-react-constant-elements": "^7", "@babel/plugin-transform-react-inline-elements": "^7", "@babel/plugin-transform-runtime": "^7", "@babel/preset-env": "^7", "@babel/preset-react": "^7", "@babel/preset-typescript": "^7", "@graphql-tools/mock": "^9", "@graphql-tools/schema": "^9", "@instructure/browserslist-config-canvas-lms": ">=2", "@instructure/i18nliner": "^3", "@instructure/i18nliner-canvas": "^1.3", "@instructure/i18nliner-handlebars": "^2", "@instructure/i18nliner-runtime": "^1.0.2", "@prettier/plugin-ruby": "^1.5.2", "@sheerun/mutationobserver-shim": "0.3.2", "@testing-library/dom": "^8", "@testing-library/jest-dom": "^5", "@testing-library/react": "^12", "@testing-library/react-hooks": "^5", "@testing-library/user-event": "^14", "@types/big.js": "^6.2.2", "@types/enzyme": "^3.10.16", "@types/enzyme-adapter-react-16": "^1.0.9", "@types/jquery": "^3.5.6", "@types/jqueryui": "^1.12.16", "@types/lodash": "^4.14.72", "@types/parse-link-header": "^1.0.0", "@types/qs": "^6.9.8", "@types/react": "^17.0.19", "@types/react-beautiful-dnd": "^13.1.8", "@types/react-dom": "^17.0.9", "@typescript-eslint/eslint-plugin": "^6.17.0", "@typescript-eslint/parser": "^5.62.0", "@vitest/ui": "^1.0.4", "@yarnpkg/lockfile": "^1.0.2", "array-flat-polyfill": "^1.0.1", "axe-core": "~2.1.7", "babel-eslint": "^10", "babel-jest": "^28", "babel-loader": "^9.1.3", "babel-plugin-transform-react-remove-prop-types": "^0.4", "babel-plugin-typescript-to-proptypes": "^2.1.0", "chai-assert-change": "^2.0.0", "change-case": "3.0.1", "concurrently": "^4", "core-js": "^3.20.3", "core-js-builder": "^3", "css-loader": "^3", "dependency-cruiser": "^16.3.1", "ember-template-compiler": "^1.8.0", "enzyme": "^3", "enzyme-adapter-react-16": "^1.15.7", "enzyme-to-json": "^3.3.4", "eslint": "^7", "eslint-config-airbnb": "^18", "eslint-config-prettier": "^6", "eslint-plugin-babel": "^5", "eslint-plugin-eslint-comments": "^3.0.1", "eslint-plugin-import": "^2", "eslint-plugin-jest": "^22", "eslint-plugin-jsx-a11y": "^6", "eslint-plugin-lodash": "^6", "eslint-plugin-notice": "^0.8", "eslint-plugin-prettier": "^3", "eslint-plugin-promise": "^4", "eslint-plugin-qunit": "^4", "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^1", "exports-loader": "^0.7", "fast-glob": "^3.2.4", "fetch-mock": "^9", "file-loader": "^4", "find-up": "^5.0.0", "gglobby": "0.0.3", "glob": "^7", "gulp": "^4", "gulp-file": "^0.4", "gulp-filter": "^6", "gulp-insert": "^0.5", "gulp-load-plugins": "^2", "gulp-rename": "^2", "gulp-rev": "^9", "gulp-sourcemaps": "^2", "gulp-uglify": "^3", "handlebars": "1.3.0", "happy-dom": "^12.10.3", "imports-loader": "^0.8", "istanbul-merge": "^1.1.1", "jest": "^29.7.0", "jest-canvas-mock": "^2", "jest-config": "^28", "jest-environment-jsdom": "^29.7.0", "jest-fetch-mock": "^3.0.3", "jest-junit": "^7", "jest-localstorage-mock": "^2", "jest-moxios-utils": "^1", "jsdom-global": "^3.0.2", "json-loader": "^0.5.7", "karma": "^6.4.2", "karma-chrome-launcher": "^2", "karma-coverage-istanbul-reporter": "^2", "karma-junit-reporter": "^1", "karma-qunit": "~1.2.1", "karma-selenium-grid-launcher": "^0.3.0", "karma-sourcemap-loader": "^0.3", "karma-spec-reporter": "^0.0.32", "karma-verbose-reporter": "^0.0.6", "karma-webpack": "^5", "lint-staged": "^9", "loader-utils": "^1", "merge-stream": "^2", "micromatch": "^4.0.4", "mkdirp": "^1.0.4", "mockdate": "^2.0.2", "moment-timezone-data-webpack-plugin": "^1.5.1", "moxios": "^0.4", "msw": "^2.0.12", "nyc": "^13", "patch-package": "^8.0.0", "postinstall-postinstall": "^2.1.0", "prettier": "^2.8.8", "qunitjs": "^1.23.0", "react-moment-proptypes": "^1.4.0", "react-test-renderer": "^16", "redux-devtools-extension": "^2.13.2", "redux-logger": "^3.0.6", "sass-direction": "^1", "script-loader": "^0.7", "sinon": "^9.2.4", "stream-browserify": "^3", "style-loader": "^0.23", "stylelint": "^10", "terser-webpack-plugin": "5.3.10", "through2": "^3", "timezone-mock": "^1.3.1", "tinymce": "^5", "ts-node": "^10.9.1", "typescript": "^5.3.2", "vitest": "^1.2.1", "waait": "^1", "webpack": "^5", "webpack-bundle-analyzer": "^4.5.0", "webpack-cli": "^4", "webpack-manifest-plugin": "^5", "wrap-ansi": "^7.0.0", "wsrun": "^5", "xsslint": "instructure/xsslint#babel7", "yaml-loader": "^0.5" }, "optionalDependencies": { "@storybook/addon-actions": "^6.5.9", "@storybook/addon-essentials": "^6.5.9", "@storybook/addon-links": "^6.5.9", "@storybook/addon-storyshots": "^6.5.9", "@storybook/builder-webpack5": "^6.5.9", "@storybook/manager-webpack5": "^6.5.9", "@storybook/react": "^6.5.9" }, "browserslist": [ "extends @instructure/browserslist-config-canvas-lms" ], "repository": "instructure/canvas-lms", "scripts": { "test": "yarn test:packages && if [ \"$COVERAGE\" = \"1\" ]; then yarn test:jest:coverage --runInBand; else yarn test:jest --runInBand; fi && if [ \"$COVERAGE\" = \"1\" ]; then yarn test:karma; else yarn test:karma:concurrently; fi", "test:coverage": "script/generate_js_coverage", "test:watch": "concurrently --names \"jest,karma\" \"jest --watch .\" \"yarn test:karma:watch\"", "test:vitest": "vitest run --color", "test:vitest:watch": "vitest watch --color", "test:vitest:coverage": "vitest run --color --coverage", "test:jest": "jest --color", "test:jest:coverage": "NODE_OPTIONS=\"--max_old_space_size=5120\" jest --color --coverage --testTimeout=5000", "test:jest:debug": "node --inspect-brk node_modules/.bin/jest --runInBand", "test:jest:watch": "jest --color --watch", "test:jest:build": "if [ \"$COVERAGE\" = \"1\" ]; then yarn test:jest:coverage --maxWorkers=3 --shard=$CI_NODE_INDEX/$CI_NODE_TOTAL; else yarn test:jest --maxWorkers=3 --shard=$CI_NODE_INDEX/$CI_NODE_TOTAL; fi", "test:karma": "yarn run test:karma:watch --single-run", "test:karma:concurrently": "concurrently --names \"coffee,jsa,jsg,jsh\" \"JSPEC_GROUP=coffee yarn test:karma:headless\" \"JSPEC_GROUP=jsa yarn test:karma:headless\" \"JSPEC_GROUP=jsg yarn test:karma:headless\" \"JSPEC_GROUP=jsh yarn test:karma:headless\"", "test:karma:headless": "yarn run test:karma --browsers ${KARMA_BROWSER:-ChromeHeadlessNoSandbox}", "test:karma:watch": "node --max-old-space-size=4096 ./node_modules/.bin/karma start", "test:karma:watch:headless": "yarn run test:karma:watch --browsers ${KARMA_BROWSER:-ChromeHeadlessNoSandbox}", "test:packages": "if [ \"$COVERAGE\" = \"1\" ]; then yarn workspace-run-serial test:coverage; else yarn workspace-run-serial test; fi", "test:packages:parallel": "if [ \"$COVERAGE\" = \"1\" ]; then yarn workspace-run test:coverage; else yarn workspace-run test; fi", "build": "yarn run build:css && yarn run build:js", "build:watch": "concurrently --raw \"yarn build:css:watch\" \"yarn build:js:watch\"", "build:css": "brandable_css", "build:css:compressed": "SASS_STYLE=compressed brandable_css", "build:css:watch": "brandable_css --watch", "build:js": "yarn run webpack-development", "build:js:watch": "yarn run webpack", "build:packages": "yarn workspace-run build:canvas", "check:js": "tsc --checkJs -p tsconfig.json", "check:ts": "tsc -p tsconfig.json", "check:ts:watch": "tsc --watch -p tsconfig.json", "lint:packages": "eslint packages --cache --ext '.js,.jsx,.ts,.tsx'", "lint:staged": "lint-staged", "lint:style": "stylelint './app/**/*.{css,scss}' './packages/**/*.{css,scss}'", "lint:xss": "node ./script/xsslint.js", "lint": "eslint ui --cache --ext '.js,.jsx,.ts,.tsx'", "postinstall": "yarn dedupe-yarn; patch-package; test -n \"$DISABLE_POSTINSTALL\" || (yarn build:packages && ./script/install_hooks)", "webpack:analyze": "SKIP_SOURCEMAPS=1 WEBPACK_PEDANTIC=0 rspack --analyze", "webpack": "gulp rev 1> /dev/null & NODE_ENV=development rspack --watch=true", "webpack-development": "NODE_ENV=development rspack build", "webpack-production": "NODE_ENV=production rspack build", "workspace-run": "r() { wsrun --fast-exit --exclude-missing --report -c $@; exit $?; } && r", "workspace-run-serial": "r() { wsrun --fast-exit --exclude-missing --collect-logs --report --serial -c $@; exit $?; } && r", "jspec": "./spec/jspec.sh", "jspec-watch": "./spec/jspec.sh --watch", "a11y-report": "./spec/jspec.sh --a11y", "upgrade-and-dedupe": "rm -rf yarn.lock node_modules && yes 1 | yarn install --flat --production --ignore-scripts && git checkout package.json && yarn install && git add yarn.lock", "upgrade-instructure-ui": "script/upgrade-instructure-ui", "dedupe-yarn": "yarn yarn-deduplicate", "clean": "yarn workspace-run-serial clean", "storybook": "start-storybook -p 6006 --no-dll --static-dir ./public/javascripts,./public", "test-storybook": "yarn jest --roots .storybook --testMatch **/storybook.test.js" }, "resolutions": { "graphael": "https://github.com/instructure/graphael.git", "@apollo/react-testing": "3.0.1", "@apollo/react-common": "3.0.1", "@apollo/react-components": "3.0.1", "@apollo/react-hoc": "3.0.1", "@apollo/react-hooks": "3.0.1", "@apollo/react-ssr": "3.0.1", "@storybook/react-docgen-typescript-plugin": "1.0.6--canary.9.cd77847.0", "@instructure/emotion": "8.51.0", "@instructure/ui-a11y-content": "8.51.0", "@instructure/ui-alerts": "8.51.0", "@instructure/ui-buttons": "8.51.0", "@instructure/ui-color-utils": "8.51.0", "@instructure/ui-dom-utils": "8.51.0", "@instructure/ui-drilldown": "8.51.0", "@instructure/ui-grid": "8.51.0", "@instructure/ui-icons": "8.51.0", "@instructure/ui-menu": "8.51.0", "@instructure/ui-responsive": "8.51.0", "@instructure/ui-simple-select": "8.51.0", "@instructure/ui-spinner": "8.51.0", "@instructure/ui-text": "8.51.0", "@instructure/ui-text-input": "8.51.0", "@instructure/ui-truncate-text": "8.51.0", "@instructure/ui-view": "8.51.0", "@instructure/uid": "8.51.0" } }