Summary: This article outlines the general technical requirements and recommended workflow for items within the NodeJS category.
Technical Requirements
- Use Error objects (or subclasses) for all errors and implement the Error contract.
- A function may deliver operational errors synchronously (e.g. by throwing) or asynchronously (by passing them to a callback or emitting error on an EventEmitter), but it should not do both.
- Augment the Error object with properties that explain details.
- If you pass a lower-level error to your caller, consider wrapping it instead.
- If you need to do a series of asynchronous operations on a set of input, it's good to find a control flow library that simplifies the process for you as long as it is documented in the item description.
- Consider moving function definitions outside of other functions.
- Consider keeping your functions less than 100 lines each so the JIT will likely be able to inline those functions
- Variables aren't allowed in the global scope unless absolutely necessary. This is at the reviewer's discretion.
- Natives objects shouldn't be extended or modified in any way.
- Follow JavaScript identifier naming guidelines, such as camelCase for most identifiers (no underscore_naming) and PascalCase for constructor functions.
- A minified copy can be included but a non-minified copy must be included.
- All variable declarations need not be present at the top. If a global is absolutely needed and created within a function, it should be explicitly created by prepending window (as opposed to omitting the var keyword).
- All variables need to be declared and initialized before being used.
- There are some good reasons to nest a function in another function, but nested functions are more often used incorrectly and incur a performance hit.
- The parseInt() function can return undesired and/or unexpected results if the radix is not supplied.
- It is not an error but re-declaring local variables is considered bad practice.
- A named function needs to be used when binding the same function to more than three elements instead of an anonymous function.
- Use of eval is not allowed.
- Semi-colons for line termination is mandatory.
- The code should not generate any errors or notices in the development console.
- Objects that are created as a result of a function call should be stored in a variable if said object is used more than once in the same level of scope.
- Use of cutting edge JavaScript APIs is allowed as long as it's clearly mentioned in the description.
- Provided code needs to pass JSLint.
- Do not rely on semicolon insertion. Always end a statement with a semicolon.
- All JavaScript needs to be written with strict mode on.
Workflow
- Every item should have documentation explaining the installation process as well as a clear description detailing specific dependencies/modules/server settings for the item.
- Double check any specific file/directory permissions as well as version numbers.
- Use Litmus or a related service to make sure the item’s stated cross-browser functionality is intact.
- Run the code through the following [part of requirements above]:
- http://sucuri.net/ (If live preview is present)
- http://www.jshint.com/