Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

build: add support to the rollup build for building typescript packages #32393

Merged
merged 2 commits into from
Feb 16, 2025

Conversation

michaelfaith
Copy link
Contributor

Contributing to #32240 this change adds support to the rollup build script for building packages with typescript source. In order for a bundle to be picked up by the new flow, the bundle definition should have a tsconfig property with a path to the project's tsconfig.

There's also two new bundle types that such packages can request to be built: ESM_DTS and CJS_DTS, which will create the corresponding .d.ts bundle.

@react-sizebot
Copy link

react-sizebot commented Feb 15, 2025

Comparing: e670e72...8da2860

Critical size changes

Includes critical production bundles, as well as any change greater than 2%:

Name +/- Base Current +/- gzip Base gzip Current gzip
oss-stable/react-dom/cjs/react-dom.production.js = 6.68 kB 6.68 kB = 1.83 kB 1.83 kB
oss-stable/react-dom/cjs/react-dom-client.production.js = 515.71 kB 515.71 kB = 92.09 kB 92.09 kB
oss-experimental/react-dom/cjs/react-dom.production.js = 6.69 kB 6.69 kB +0.05% 1.83 kB 1.83 kB
oss-experimental/react-dom/cjs/react-dom-client.production.js = 562.25 kB 562.25 kB = 100.08 kB 100.08 kB
facebook-www/ReactDOM-prod.classic.js = 636.70 kB 636.70 kB = 112.08 kB 112.08 kB
facebook-www/ReactDOM-prod.modern.js = 627.02 kB 627.02 kB = 110.49 kB 110.50 kB

Significant size changes

Includes any change greater than 0.2%:

(No significant changes)

Generated by 🚫 dangerJS against b0b88b2

};
},
},
bundle.tsconfig
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
bundle.tsconfig
bundle.tsconfig != null

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's keep any comparisons as specific as possible

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated

Copy link
Member

@poteto poteto left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I took a look at the built files and I noticed that the d.ts files were missing, could you check and see?

@michaelfaith
Copy link
Contributor Author

I took a look at the built files and I noticed that the d.ts files were missing, could you check and see?

This is because we haven't added the tsconfig and updated target prop to the eslint-plugin-react-hooks bundle definition yet, which we'll have to do in the main branch where we've converted the plugin to TS. This just prepares the build for that. In the main PR, we'll just need to do the following in bundles.js.

{
+   name: 'eslint-plugin-react-hooks',
-   bundleTypes: [NODE_DEV, NODE_PROD],
+   bundleTypes: [NODE_DEV, NODE_PROD, CJS_DTS],
    moduleType: ISOMORPHIC,
-   entry: 'eslint-plugin-react-hooks',
+   entry: 'eslint-plugin-react-hooks/src/index.ts',
    global: 'ESLintPluginReactHooks',
    minifyWithProdErrorCodes: false,
    wrapWithModuleBoundaries: false,
    externals: [],
+   tsconfig: './packages/eslint-plugin-react-hooks/tsconfig.json',
  },

This change adds support to the rollup build script for building packages with typescript source.  In order for a bundle to be picked up by the new flow, the bundle definition should have a `tsconfig` property with a path to the project's tsconfig.

There's also two new bundle types that such packages can request to be built: `ESM_DTS` and `CJS_DTS`, which will create the corresponding `.d.ts` bundle.
This change updates the base jest config to use `babel-jest` with the typescript preset to transform `.ts` files.  The existing `preprocessor`, which intercepts ts files, appears to be pretty old and wasn't implemented with entire packages of typescript source in mind.
Copy link
Member

@poteto poteto left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@poteto poteto merged commit 0d9834c into facebook:main Feb 16, 2025
190 checks passed
@michaelfaith michaelfaith deleted the build/add-typescript-support branch February 16, 2025 17:54
poteto added a commit that referenced this pull request Feb 16, 2025
…pe declarations (#32240)

<!--
  Thanks for submitting a pull request!
We appreciate you spending the time to work on these changes. Please
provide enough information so that others can review your pull request.
The three fields below are mandatory.

Before submitting a pull request, please make sure the following is
done:

1. Fork [the repository](https://github.com/facebook/react) and create
your branch from `main`.
  2. Run `yarn` in the repository root.
3. If you've fixed a bug or added code that should be tested, add tests!
4. Ensure the test suite passes (`yarn test`). Tip: `yarn test --watch
TestName` is helpful in development.
5. Run `yarn test --prod` to test in the production environment. It
supports the same options as `yarn test`.
6. If you need a debugger, run `yarn test --debug --watch TestName`,
open `chrome://inspect`, and press "Inspect".
7. Format your code with
[prettier](https://github.com/prettier/prettier) (`yarn prettier`).
8. Make sure your code lints (`yarn lint`). Tip: `yarn linc` to only
check changed files.
  9. Run the [Flow](https://flowtype.org/) type checks (`yarn flow`).
  10. If you haven't already, complete the CLA.

Learn more about contributing:
https://reactjs.org/docs/how-to-contribute.html
-->

## Summary

This change converts the eslint hooks plugin to typescript, which also
allows us to include type declarations in the package, for those using
[typescript eslint
configs](https://eslint.org/blog/2025/01/eslint-v9.18.0-released/#stable-typescript-configuration-file-support).

### Constituent changes that should land before this one

- [x] ~#32276
- [x] #32279
- [x] #32283
- [x] #32393
- [x] #32396

Closes #30119

---------

Co-authored-by: Lauren Tan <[email protected]>
github-actions bot pushed a commit that referenced this pull request Feb 16, 2025
…pe declarations (#32240)

<!--
  Thanks for submitting a pull request!
We appreciate you spending the time to work on these changes. Please
provide enough information so that others can review your pull request.
The three fields below are mandatory.

Before submitting a pull request, please make sure the following is
done:

1. Fork [the repository](https://github.com/facebook/react) and create
your branch from `main`.
  2. Run `yarn` in the repository root.
3. If you've fixed a bug or added code that should be tested, add tests!
4. Ensure the test suite passes (`yarn test`). Tip: `yarn test --watch
TestName` is helpful in development.
5. Run `yarn test --prod` to test in the production environment. It
supports the same options as `yarn test`.
6. If you need a debugger, run `yarn test --debug --watch TestName`,
open `chrome://inspect`, and press "Inspect".
7. Format your code with
[prettier](https://github.com/prettier/prettier) (`yarn prettier`).
8. Make sure your code lints (`yarn lint`). Tip: `yarn linc` to only
check changed files.
  9. Run the [Flow](https://flowtype.org/) type checks (`yarn flow`).
  10. If you haven't already, complete the CLA.

Learn more about contributing:
https://reactjs.org/docs/how-to-contribute.html
-->

## Summary

This change converts the eslint hooks plugin to typescript, which also
allows us to include type declarations in the package, for those using
[typescript eslint
configs](https://eslint.org/blog/2025/01/eslint-v9.18.0-released/#stable-typescript-configuration-file-support).

### Constituent changes that should land before this one

- [x] ~#32276
- [x] #32279
- [x] #32283
- [x] #32393
- [x] #32396

Closes #30119

---------

Co-authored-by: Lauren Tan <[email protected]>

DiffTrain build for [5adf402](5adf402)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants