Files
pybricks-code/package.json
T
David Lechner 0430d34002 mpy/sagas: Get imported modules from compiled .mpy.
We were parsing Python in JavaScript to find imports, using a jison
parser that allocated memory proportional to lines times file size, so
large programs could exhaust browser memory. The grammar also rejected
f-strings containing the same quote character and decimal literals with
a leading zero, and since parse errors were swallowed, any such program
silently downloaded with no modules at all.

Read the imports back out of the .mpy instead. Each module is already
compiled by mpy-cross, so this removes a pass rather than adding one,
and MicroPython's own compiler decides what an import is.

Fixes: https://github.com/pybricks/support/issues/1804
Fixes: https://github.com/pybricks/support/issues/1954
Fixes: https://github.com/pybricks/support/issues/1981
Assisted-by: Claude Opus 5 <noreply@anthropic.com>
2026-09-07 13:24:22 -05:00

235 lines
8.3 KiB
JSON

{
"name": "@pybricks/pybricks-code",
"version": "2.3.0-beta.1",
"license": "MIT",
"author": "The Pybricks Authors",
"repository": {
"type": "git",
"url": "https://github.com/pybricks/pybricks-code"
},
"dependencies": {
"@babel/core": "^7.23.9",
"@blueprintjs/core": "^5.8.2",
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.11",
"@pybricks/firmware": "7.31.0",
"@pybricks/ide-docs": "2.20.0",
"@pybricks/images": "^1.4.0",
"@pybricks/jedi": "1.17.0",
"@pybricks/mpy-cross-v5": "^2.0.0",
"@pybricks/mpy-cross-v6": "^2.0.0",
"@pyodide/webpack-plugin": "^1.3.2",
"@reduxjs/toolkit": "^1.9.7",
"@shopify/react-i18n": "^7.13.1",
"@svgr/webpack": "^8.1.0",
"@testing-library/dom": "^9.3.4",
"@testing-library/jest-dom": "^6.4.0",
"@testing-library/react": "^14.0.0",
"@testing-library/user-event": "^14.5.2",
"@types/file-saver": "^2.0.7",
"@types/jest": "^29.5.11",
"@types/node": "^18.19.14",
"@types/react": "^18.2.47",
"@types/react-dom": "^18.2.18",
"@types/react-splitter-layout": "^3.0.5",
"@types/react-transition-group": "^4.4.10",
"@types/redux-logger": "^3.0.12",
"@types/semver": "^7.5.6",
"@types/w3c-web-hid": "^1.0.6",
"@types/w3c-web-usb": "^1.0.11",
"@types/web-bluetooth": "^0.0.20",
"@types/web-locks-api": "^0.0.5",
"@types/wicg-file-system-access": "^2023.10.4",
"@types/zen-push": "^0.1.4",
"babel-jest": "^29.7.0",
"babel-loader": "^9.1.3",
"babel-plugin-macros": "^3.0.1",
"babel-plugin-named-asset-import": "^0.3.8",
"babel-plugin-transform-import-meta": "^2.2.1",
"babel-preset-react-app": "^10.0.1",
"bfj": "^8.0.0",
"browser-fs-access": "^0.35.0",
"browserslist": "^4.22.2",
"camelcase": "^8.0.0",
"canvas": "^2.11.2",
"case-sensitive-paths-webpack-plugin": "^2.4.0",
"copy-webpack-plugin": "^12.0.2",
"css-loader": "^6.9.1",
"css-minimizer-webpack-plugin": "^6.0.0",
"dexie": "^3.2.4",
"dexie-observable": "^4.0.0-beta.13",
"dexie-react-hooks": "^1.1.7",
"dfu": "^0.1.5",
"dotenv": "^16.4.0",
"dotenv-expand": "^10.0.0",
"fake-indexeddb": "^5.0.2",
"file-loader": "^6.2.0",
"fs-extra": "^11.2.0",
"html-webpack-plugin": "^5.6.0",
"identity-obj-proxy": "^3.0.0",
"jest": "^29.7.0",
"jest-environment-jsdom": "^29.7.0",
"jest-mock-extended": "^3.0.5",
"jest-resolve": "^29.7.0",
"jest-watch-typeahead": "^2.2.2",
"jszip": "^3.10.1",
"license-webpack-plugin": "^3.0.0",
"mini-css-extract-plugin": "^2.7.7",
"monaco-editor": "^0.45.0",
"monaco-editor-webpack-plugin": "^7.1.0",
"monaco-themes": "^0.4.4",
"mq-polyfill": "1.1.8",
"navigator.locks": "^0.8.6",
"postcss": "^8.4.33",
"postcss-flexbugs-fixes": "^5.0.2",
"postcss-loader": "^8.0.0",
"postcss-normalize": "^10.0.1",
"postcss-preset-env": "^9.3.0",
"prompts": "^2.4.2",
"prop-types": "^15.8.1",
"pyodide": "0.24.1",
"react": "^18.2.0",
"react-app-polyfill": "^3.0.0",
"react-aria": "^3.31.0",
"react-complex-tree": "^2.3.4",
"react-dev-utils": "^12.0.1",
"react-dom": "^18.2.0",
"react-dropzone": "^14.2.3",
"react-joyride": "^2.7.2",
"react-popper": "^2.3.0",
"react-redux": "^8.1.3",
"react-refresh": "^0.14.0",
"react-splitter-layout": "^4.0.0",
"redux": "^4.2.1",
"redux-logger": "^3.0.6",
"redux-saga": "^1.3.0",
"resolve": "^1.22.8",
"resolve-url-loader": "^5.0.0",
"sass": "^1.69.7",
"sass-loader": "^14.1.0",
"semver": "^7.5.4",
"source-map-explorer": "^2.5.3",
"source-map-loader": "^5.0.0",
"spdx-satisfies": "^5.0.0",
"style-loader": "^3.3.4",
"tailwindcss": "^3.4.1",
"terser-webpack-plugin": "^5.3.10",
"two.js": "^0.8.12",
"typed-redux-saga": "^1.5.0",
"typescript": "~4.9.5",
"usehooks-ts": "^2.9.1",
"user-agent-data-types": "^0.4.2",
"web-vitals": "^3.5.2",
"webpack": "^5.90.0",
"webpack-dev-server": "^4.15.1",
"webpack-manifest-plugin": "^5.0.0",
"workbox-webpack-plugin": "^7.0.0",
"xterm": "^5.4.0-beta.37",
"xterm-addon-fit": "^0.8.0",
"zen-push": "^0.3.1"
},
"scripts": {
"analyze": "source-map-explorer 'build/static/js/*.js'",
"start": "node scripts/start.js",
"build": "node scripts/build.js",
"test": "node scripts/test.js",
"coverage": "yarn test --coverage --watchAll=false",
"coverage:html": "yarn coverage --coverageReporters html",
"lint": "tsc --noEmit && eslint \"*/**/*.{js,ts,tsx}\" --quiet --fix"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^6.18.1",
"@typescript-eslint/parser": "^6.20.0",
"eslint": "^8.56.0",
"eslint-config-prettier": "^9.1.0",
"eslint-config-react-app": "^7.0.1",
"eslint-config-typed-fp": "^4.4.0",
"eslint-plugin-functional": "^5.0.8",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-prettier": "^5.1.2",
"eslint-plugin-react": "^7.33.2",
"eslint-plugin-total-functions": "^6.10.5",
"eslint-webpack-plugin": "^4.0.1",
"prettier": "^3.1.1"
},
"packageManager": "yarn@3.3.0",
"resolutions": {
"mq-polyfill@1.1.8": "patch:mq-polyfill@npm:1.1.8#.yarn/patches/mq-polyfill-npm-1.1.8-62fe162439.patch",
"react-error-overlay": "6.0.9",
"react-dev-utils@^12.0.1": "patch:react-dev-utils@npm:12.0.1#.yarn/patches/react-dev-utils-npm-12.0.1-83ba06e3ee.patch",
"jsdom@^20.0.0": "patch:jsdom@npm%3A20.0.0#./.yarn/patches/jsdom-npm-20.0.0-9c1ad43ab8.patch",
"pyodide@0.23.0": "patch:pyodide@npm%3A0.23.0#./.yarn/patches/pyodide-npm-0.23.0-64dc9bd6f1.patch"
},
"jest": {
"roots": [
"<rootDir>/src"
],
"collectCoverageFrom": [
"src/**/*.{js,jsx,ts,tsx}",
"!src/**/*.d.ts"
],
"setupFiles": [
"react-app-polyfill/jsdom"
],
"setupFilesAfterEnv": [
"<rootDir>/src/setupTests.ts"
],
"testMatch": [
"<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}",
"<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"
],
"testEnvironment": "./test/env",
"transform": {
"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$": "<rootDir>/config/jest/babelTransform.js",
"^.+\\.css$": "<rootDir>/config/jest/cssTransform.js",
"^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)": "<rootDir>/config/jest/fileTransform.mjs"
},
"transformIgnorePatterns": [
"[/\\\\]node_modules[/\\\\](?!(monaco-editor|nanoevents)[/\\\\]).+\\.(js|jsx|mjs|cjs|ts|tsx)$",
"^.+\\.module\\.(css|sass|scss)$"
],
"modulePaths": [],
"moduleNameMapper": {
"^monaco-editor$": "monaco-editor/esm/vs/editor/editor.api",
"^react-native$": "react-native-web",
"^.+\\.module\\.(css|sass|scss)$": "identity-obj-proxy"
},
"moduleFileExtensions": [
"web.js",
"js",
"web.ts",
"ts",
"web.tsx",
"tsx",
"json",
"web.jsx",
"jsx",
"node"
],
"watchPlugins": [
"jest-watch-typeahead/filename",
"jest-watch-typeahead/testname"
],
"resetMocks": true
},
"babel": {
"presets": [
"react-app"
]
}
}