mirror of
https://github.com/pybricks/pybricks-code.git
synced 2026-09-11 09:04:38 +00:00
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>
235 lines
8.3 KiB
JSON
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"
|
|
]
|
|
}
|
|
}
|