Synchronet v3.19b-Win32 (install) has been released (Jan-2022).

You can donate to the Synchronet project using PayPal.

This is an old revision of the document!


Libraries

JavaScript libraries are .js files that are typically located in the exec/load directory (for unmodified-stock libraries) or the mods/load directory (for modified-stock or 3rd party libraries).

JavaScript libraries usually referenced from another script via the load() or require() functions.

Background Load

The load() function may be used to load and executes scripts in a background thread (by passing an initial argument of true to the function). This usage of load() is very unique and is not typically used to load traditional JavaScript libraries. The require() function cannot be used to execute background scripts.

Require vs. Load

The require() function (added in Synchronet v3.17) is identical in usage to load() with the exception that it will conditionally load and execute the script only if the property name argument (specified just after the filename argument) is not already defined in the target scope. This prevents redundant loading/compilation/execution of libraries shared among multiple modules. For large libraries or commonly used libraries, consider using require() instead of load() to enhance performance and avoid the possible erroneous redefinition of const variables during subsequent load() operations.

Styles

There are 3 main styles of JavaScript libraries included with Synchronet:

Legacy

Leagcy-style JavaScript libraries just define a series of vars, consts or functions which may be referenced, as needed, by a loading script. Legacy-style libraries may be loaded into distinct scope object or into the caller's global scope, whatever is most convenient for the application.

Example Legacy-style library usage:

load('somelib.js');

Object

Object-style JavaScript libraries define an object that can by instantiated (like a class, using the new keyword), as needed, by the loading script. You can identify Object-style libraries because they will typically define an object constructor function, some Object.prototype member functions (methods), and perhaps one or more Object.defineProperty() calls to define property getters and setters.

Example Object-style library usage:

load('somelib.js');
var obj = new SomeObject();

Return

Return-style JavaScript libraries are designed to be loaded with an empty target scope object and return the newly constructed library object. You can identify Return-style libraries because they will end with a single this; line.

Example Return-style library usage:

var somelib = load({}, 'somelib.js');

See Also