-
Notifications
You must be signed in to change notification settings - Fork 16
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
feat: jsx migration script #869
Conversation
…or extensionless imports
What do you think about creating a new codemod command namespace? So something like....
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💯 tested this on few apps (login, data-entry and app-management) and it works as expected. I wonder if the docs here are a good place to document the caveats (i.e. failure for some import *...
) and any other things that might need to be checked manually.
Thanks for the review! The That said, it'll definitely be documented in the larger Vite migration documentation 👍 |
# [12.0.0-alpha.11](v12.0.0-alpha.10...v12.0.0-alpha.11) (2024-08-29) ### Features * jsx migration script ([#869](#869)) ([7764f49](7764f49))
🎉 This PR is included in version 12.0.0-alpha.11 🎉 The release is available on:
Your semantic-release bot 📦🚀 |
# [12.0.0](v11.7.5...v12.0.0) (2024-12-13) ### Bug Fixes * **deps:** upgrade app-runtime and ui ([#895](#895)) ([8ed0ec3](8ed0ec3)) * **deps:** upgrade react to 18 in example apps ([#900](#900)) ([7fd16d7](7fd16d7)) * **deps:** use npm v6 before publishing ([01ad502](01ad502)) * **init:** update bootstrap script branch ([#896](#896)) ([33c261a](33c261a)) * **plugin:** clean up resize observer and handle sonarqube warnings ([#898](#898)) ([f113dd5](f113dd5)) * alerts from plugins [LIBS-695] ([#881](#881)) ([21be0d2](21be0d2)) * allow serving files from cwd node_modules ([0233949](0233949)) * base url env & refactor [LIBS-635] ([#872](#872)) ([7f19259](7f19259)) * bump ui library ([#882](#882)) ([1ae9569](1ae9569)) * clear only required build dirs ([#894](#894)) ([179305f](179305f)) * env refactor for Vite wrap-up [LIBS-690] ([#889](#889)) ([84da4e6](84da4e6)) * injectPrecacheManifest warning logging ([a0d266e](a0d266e)) * normalize to .js extensions when compiling libraries ([#893](#893)) ([58b33a8](58b33a8)) * **service-worker:** handle undefined config vars in injectPrecacheManifest ([a90a4e0](a90a4e0)) * correct app shell paths ([#883](#883)) ([a1af71c](a1af71c)) * handle jsx in js support [LIBS-633] ([#871](#871)) ([595a35d](595a35d)) * increase precache max file size to 3 MB ([b20ed22](b20ed22)) * remove custom eslint from TS template ([71cef4b](71cef4b)) * update deps ([1e7ce93](1e7ce93)) * update workbox deps to avoid deprecation warnings ([9a81c4a](9a81c4a)) * use strings for 'boolean' env vars ([eaf5e66](eaf5e66)) ### Features * create initial TS template ([#868](#868)) ([2795f79](2795f79)) * enable HMR for .js files ([5f4683c](5f4683c)) * handle plugins with Vite [LIBS-610] ([#863](#863)) ([ca5be0d](ca5be0d)) * jsx migration script ([#869](#869)) ([7764f49](7764f49)) * migrate snap files too ([#878](#878)) ([521f483](521f483)) * replace CRA with Vite [LIBS-598] ([#847](#847)) ([3dd0e59](3dd0e59)) * upgrade react to v18 ([#876](#876)) ([77ecf10](77ecf10)) * **init:** set direction: 'auto' and import locales for new apps [LIBS-645] ([#867](#867)) ([4eda4a9](4eda4a9)) ### BREAKING CHANGES * require react version 18 * fix: pin react version to 18 * test: update test and test libraries for react 18 * Supported Node versions are 18.x or 20+ * ci: upgrade Node version * fix: always add PWA_ENABLED to app env for better static analysis * chore: pause precache manifest injection * fix: building SW without CRA * chore: comment update * fix: group moment locales in their own dir * refactor: clean up precache injection * fix: locale utils and handling moment in jest * fix: compile correctly after merging changes * chore: comment in compile.js * chore: some clean-up * chore: comments * fix: use port 3000 for the dev server * fix: improve moment locale chunk naming * chore: remove CRA * fix: use mjs build of Vite * fix: bump cli-style for CRA fix * feat: use interactive dev server output from Vite * fix: make dev server port configurable * chore: remove old index.html * fix: env tweaks
🎉 This PR is included in version 12.0.0 🎉 The release is available on:
Your semantic-release bot 📦🚀 |
LIBS-657
The script:
.js
files in/src
for JSX syntax, then renames them to.jsx
.ts
files aren't handled; it's assumed that TS enforces using.tsx
extensions for files with JSX syntax... although it would be easy to addentryPoints
values ind2.config.js
, if neededI started this trying to use regexes to detect JSX syntax and import statements, but it ended up being best to use an AST parser. It's a bit slower, but still only took a few seconds for the thousands of JS files in the capture app, for example
Looking for input:
jsx-migration
?Recommended testing
You can test this out in an app (or more) of your choice -- here are a few that I've tried:
skipUpdatingImportsWithoutExtension
flag. Somewhere there's a file that has two imports from the same file (separated to group the objects conceptually) -- this is a test of the import replacement logicSteps:
@dhis2/cli-app-scripts
alpha & deduplicate app-runtime:yarn add @dhis2/cli-app-scripts@alpha && npx yarn-deduplicate yarn.lock && yarn
3. Watch out for any other resolutions on relevant libs: cli-app-scripts, app-runtime
package.json
andyarn.lock
before running the script. Then, if I want to undo the results of the script, I can click the "Discard All Changes" undo arrow in the Source Control tab on the Unstaged Changes section and go back to the beginning (see video below)bin
to run the local version of the script, e.g.../app-platform/cli/bin/d2-app-scripts jsx-migration
7.
--debug
to get detailed logs8.
--globString "..."
to test out a custom glob (the default issrc/**/*.js
)9.
--skipUpdatingImportsWithoutExtension
-- maybe self-explanatory (I figure some repos will want to leave the imports without file extensions. Functionally, this works fine with Vite. In some repos though, this creates linting complaints, but I'm sure the linting rules can be updated)yarn start
to make sure the app worksVSCode Source control:
source-control.mov