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

Major overhaul: prepare for v3 #174

Merged
merged 22 commits into from
Mar 13, 2022
Merged

Major overhaul: prepare for v3 #174

merged 22 commits into from
Mar 13, 2022

Conversation

zpao
Copy link
Owner

@zpao zpao commented Mar 5, 2022

This is a massive overhaul, mostly as described in #169. In short:

  • Rewrote in TypeScript
  • Replaced qr.js dependency with different library, vendored in for dependency-free installation
  • ESM builds, with svg & canvas components as named exports (maintaining support for default export for now)
  • Use hooks. This brings minimum version required to 16.8.0 but unlocks future major version compatibility.

zpao added 20 commits March 5, 2022 15:59
This is not perfect. In particular string intersections seem to be
incompatible as a prop type, as user strings aren't recognized.

Still need to generate CJS compatible build
Just going to say it's not worth it right now.
Note: the QR Codes generated are not identical. This seems to be due to
the exact approach taken when encoding strings (leaving encoding to the
third-party lib again). If there are issues with Kanji or other
multibyte strings, we'll need to revisit this decision, potentially fork
this new lib or use it differently.

https://www.nayuki.io/page/qr-code-generator-library
- use createRef for refs
- convert QRCodeSVG to a function component (has no state)
Much like the SVG renderer, this gets rid of PureComponent and classes
and goes to function components. This shouldn't matter in practice. Part
of the reasoning was that getDerivedStateFromProps didn't give us what
I needed, so we could get rid of state and simplify the logic. Now this
actually checks the image element's status to determine if its loaded.

In the process here, I was able to fix a bug to actually handle when
images fail to load and excavation is set. Previously it would leave
a whole in the middle, now it doesn't.
This
- Moves the license out of the qrcodegen src file and into a standalone
LICENSE
- Adds copyright & spdx license headers to src files (https://spdx.dev/ids/)
- Ensures license headers are preserved in the build output
@zpao zpao merged commit f9f6603 into main Mar 13, 2022
@zpao zpao deleted the typescript branch May 15, 2022 22:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

qr.js has been hijacked Error: 'default' is not exported by node_modules/qrcode.react/lib/index.js
1 participant