mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/38990 This PR adds auto-generation of Typescript definitions from Flow source code for packages using the shared monorepo build setup (https://github.com/facebook/react-native/pull/38718). Today, these are the following Node.js packages: - `packages/community-cli-plugin` - `packages/dev-middleware` (⬅️ `emitTypeScriptDefs` enabled) This also improves emitted Flow definitions (`.js.flow`), by using [`flow-api-translator`](https://www.npmjs.com/package/flow-api-translator) to strip implementations. **All changes** - Include `flow-api-translator` and configure this to emit type definitions as part of `yarn build`. - Add translation from Flow source to TypeScript definitions (`.d.ts`) adjacent to each built file. - Improve emitted Flow definitions (`.js.flow`), by using `flow-api-translator` to strip implementations (previously, source files were copied). The Flow and TS defs now mirror each other. - Add `emitFlowDefs` and `emitTypeScriptDefs` options to build config to configure the above. - Integrate TypeScript compiler to perform program validation on emitted `.d.ts` files. - This is based on this guide: https://github.com/microsoft/TypeScript-wiki/blob/main/Using-the-Compiler-API.md#a-minimal-compiler. - Throw an exception on the `rewritePackageExports` step if a package does not define an `"exports"` field. - Add minimal `flow-typed` definitions for `typescript` 😄. **Notes on [`flow-api-translator`](https://www.npmjs.com/package/flow-api-translator)** This project is experimental but is in a more mature state than when we evaluated it earlier in 2023. - It's now possible to run this tool on our new Node.js packages, since they are exclusively authored using `import`/`export` syntax (a requirement of the tool). - As a safety net, we run the TypeScript compiler against the generated program, which will fail the build. Changelog: [Internal] Reviewed By: robhogan Differential Revision: D48312463 fbshipit-source-id: 817edb35f911f52fa987946f2d8fc1a319078c9d
109 lines
4.1 KiB
JSON
109 lines
4.1 KiB
JSON
{
|
|
"name": "@react-native/monorepo",
|
|
"private": true,
|
|
"version": "1000.0.0",
|
|
"description": "A framework for building native apps using React",
|
|
"license": "MIT",
|
|
"repository": "github:facebook/react-native",
|
|
"types": "types",
|
|
"jest-junit": {
|
|
"outputDirectory": "reports/junit",
|
|
"outputName": "js-test-results.xml"
|
|
},
|
|
"scripts": {
|
|
"android": "cd packages/rn-tester && npm run android",
|
|
"build-android": "./gradlew :packages:react-native:ReactAndroid:build",
|
|
"build": "node ./scripts/build/build.js",
|
|
"bump-all-updated-packages": "node ./scripts/monorepo/bump-all-updated-packages",
|
|
"clang-format": "clang-format -i --glob=*/**/*.{h,cpp,m,mm}",
|
|
"clean": "node ./scripts/build/clean.js",
|
|
"flow-check-android": "flow check --flowconfig-name .flowconfig.android",
|
|
"flow-check-ios": "flow check",
|
|
"flow": "flow",
|
|
"format-check": "prettier --list-different \"./**/*.{js,md,yml,ts,tsx}\"",
|
|
"format": "npm run prettier && npm run clang-format",
|
|
"lint-ci": "./scripts/circleci/analyze_code.sh && yarn shellcheck",
|
|
"lint-java": "node ./scripts/lint-java.js",
|
|
"lint": "eslint .",
|
|
"prettier": "prettier --write \"./**/*.{js,md,yml,ts,tsx}\"",
|
|
"shellcheck": "./scripts/circleci/analyze_scripts.sh",
|
|
"start": "cd packages/rn-tester && npm run start",
|
|
"test-android": "./gradlew :packages:react-native:ReactAndroid:test",
|
|
"test-ci": "jest --maxWorkers=2 --ci --reporters=\"default\" --reporters=\"jest-junit\"",
|
|
"test-e2e-local-clean": "node ./scripts/test-e2e-local-clean.js",
|
|
"test-e2e-local": "node ./scripts/test-e2e-local.js",
|
|
"test-ios": "./scripts/objc-test.sh test",
|
|
"test-typescript-offline": "dtslint --localTs node_modules/typescript/lib packages/react-native/types",
|
|
"test-typescript": "dtslint packages/react-native/types",
|
|
"test": "jest",
|
|
"trigger-react-native-release": "node ./scripts/trigger-react-native-release.js",
|
|
"update-lock": "npx yarn-deduplicate"
|
|
},
|
|
"workspaces": [
|
|
"packages/*"
|
|
],
|
|
"peerDependencies": {
|
|
"react": "18.2.0"
|
|
},
|
|
"devDependencies": {
|
|
"@babel/core": "^7.20.0",
|
|
"@babel/eslint-parser": "^7.20.0",
|
|
"@babel/generator": "^7.20.0",
|
|
"@babel/plugin-transform-regenerator": "^7.20.0",
|
|
"@babel/preset-env": "^7.20.0",
|
|
"@babel/preset-flow": "^7.20.0",
|
|
"@definitelytyped/dtslint": "^0.0.127",
|
|
"@jest/create-cache-key-function": "^29.2.1",
|
|
"@pkgjs/parseargs": "^0.11.0",
|
|
"@react-native/metro-babel-transformer": "^0.73.11",
|
|
"@react-native/metro-config": "^0.73.0",
|
|
"@tsconfig/node18": "1.0.1",
|
|
"@types/react": "^18.0.18",
|
|
"@typescript-eslint/parser": "^5.57.1",
|
|
"async": "^3.2.2",
|
|
"babel-plugin-minify-dead-code-elimination": "^0.5.2",
|
|
"babel-plugin-transform-define": "^2.1.2",
|
|
"babel-plugin-transform-flow-enums": "^0.0.2",
|
|
"babel-preset-fbjs": "^3.4.0",
|
|
"chalk": "^4.0.0",
|
|
"clang-format": "^1.8.0",
|
|
"connect": "^3.6.5",
|
|
"eslint": "^8.19.0",
|
|
"eslint-config-prettier": "^8.5.0",
|
|
"eslint-plugin-babel": "^5.3.1",
|
|
"eslint-plugin-eslint-comments": "^3.2.0",
|
|
"eslint-plugin-ft-flow": "^2.0.1",
|
|
"eslint-plugin-jest": "^26.5.3",
|
|
"eslint-plugin-jsx-a11y": "^6.6.0",
|
|
"eslint-plugin-lint": "^1.0.0",
|
|
"eslint-plugin-prettier": "^4.2.1",
|
|
"eslint-plugin-react": "^7.30.1",
|
|
"eslint-plugin-react-hooks": "^4.6.0",
|
|
"eslint-plugin-react-native": "^4.0.0",
|
|
"eslint-plugin-redundant-undefined": "^0.4.0",
|
|
"eslint-plugin-relay": "^1.8.3",
|
|
"flow-api-translator": "0.15.0",
|
|
"flow-bin": "^0.214.0",
|
|
"glob": "^7.1.1",
|
|
"hermes-eslint": "0.15.0",
|
|
"inquirer": "^7.1.0",
|
|
"jest": "^29.2.1",
|
|
"jest-junit": "^10.0.0",
|
|
"jscodeshift": "^0.14.0",
|
|
"metro-babel-register": "0.77.0",
|
|
"metro-memory-fs": "0.77.0",
|
|
"micromatch": "^4.0.4",
|
|
"mkdirp": "^0.5.1",
|
|
"mock-fs": "^5.1.4",
|
|
"nullthrows": "^1.1.1",
|
|
"prettier": "2.8.8",
|
|
"prettier-plugin-hermes-parser": "0.14.0",
|
|
"react": "18.2.0",
|
|
"react-test-renderer": "18.2.0",
|
|
"shelljs": "^0.8.5",
|
|
"signedsource": "^1.0.0",
|
|
"typescript": "5.0.4",
|
|
"ws": "^6.2.2"
|
|
}
|
|
}
|