Skip to content

Don't return undefined when an empty model is passed to makerjs.measure.modelExtents #625

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

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

xavi-
Copy link

@xavi- xavi- commented May 31, 2025

Currently makerjs.measure.modelExtents({ models: {} }) returns undefined which makes code prone to NPE's

This PR updates modelExtents to instead return an empty IMeasureWithCenter object: { height: 0, width: 0, center: null, low: null, high: null }

@xavi-
Copy link
Author

xavi- commented May 31, 2025

It might be better to return { width: 0, height: 0, center: [0, 0], low: [0, 0], high: [0, 0] } instead since according to the types, center, low, and high aren't nullable

@danmarshall
Copy link
Contributor

Thanks for the PR!
But, since the whole library doesn't have 100% test coverage (my fault not yours), I'm a little hesitant to take this. Perhaps you could add your own defensive function in your own code:

function alwaysMeasureModel(model) {
   return makerjs.measure.modelExtents(model) || { width: 0, height: 0, center: [0, 0], low: [0, 0], high: [0, 0] };
}

@xavi-
Copy link
Author

xavi- commented Jun 19, 2025

Or perhaps the return type of modelExtents should be changed to IMeasureWithCenter | null? I created this PR mostly because I got bitten by this in production

@danmarshall
Copy link
Contributor

Sorry it bit you in production. Yes the | null is a good approach.

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.

2 participants