KhronosGroup / glTF-Validator

Tool to validate glTF assets.
Apache License 2.0
372 stars 63 forks source link

Handle reliance on 'window' object as optional #201

Open haywirez opened 2 years ago

haywirez commented 2 years ago

Right now, the package fails validation when trying to use in node apps or service workers where window is not available:

Uncaught ReferenceError: window is not defined
    at index.js:33:72 in node_modules/gltf-validator/gltf_validator.dart.js
    at index.js:15:50 in __require2
    at index.js:20881:17

Would be nice to address this if possible! My use case involves server-side validation.

lexaknyazev commented 2 years ago

Please provide more information about the execution and/or development environment. The published npm package works correctly in server-side apps when invoked with the example code from here.

donmccurdy commented 2 years ago

@lexaknyazev glTF Validator has been working for me in a Node.js environment (example). However, I'm not able to use it in a Web Worker either, getting the same error mentioned above. Here's a simplified example:

https://stackblitz.com/edit/donmccurdy-gltf-validator-worker?file=src/validator-worker.js

The project can be downloaded from there with the small button in the sidebar.

It appears that glTF Validator (or the Dart/JS build process?) is checking for a global variable (which would indicate a Node.js environment) and then depending on window if that is not found. In a Web Worker the global variable is called self, which works in the browser's main thread as well.

For applications like https://gltf.report/, it would be helpful to run validation in a Web Worker, as this can otherwise stall the main thread for a noticeable amount of time while the user is applying changes to a scene.