extension/theme forms check the uploaded file is a zip
style form error messages
Can upload a single .js file as an extension

The form bundles it into a zip file for you.