ServerJS/Modules/Environment: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
(Redacted provision for unspecified module factory function arguments.)
m (Moved "Environment" to "Loaders".)
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Any members of a specified object (including modules, or enumerated argument options) that are not reserved by the specification must be named with "x" as their first term and a vendor-specific label as their second term, like "require.xChironCurryId" or "environment.xCajaDomita".
Moved to [[ServerJS/Modules/Loaders]].
 
== The Require Function/Object ==
 
* id: the "require" object MAY have an "id" member that must be the normalized identifier of the current module
* loader: the "require" object MAY have a "loader" member that is an interface to the object used by "require" to acquire module factory functions.  Tampering with this variable must not alter the behavior of "require".
* main: the "require" object MAY have an "main" member that is the module ID of the module that was the entry point for this sandbox.  Thus the common Python idiom <tt>if __name__ == '__main__':</tt> would be <tt>if (require.id == require.main)</tt>, except that this strategy avoids the problem of double loading the main module if it's referred to elsewhere by its real name.
 
 
== The Environment Object ==
 
A module receives an "environment" variable that is an Object.
 
* print: The "environment" MAY have a "print" function that accepts a "message" and an optional "label" String.
** The label MAY be one of "log", "warn", "error", "pass", "fail".
** Any other, unspecified label MUST be in lower-case and begin with "x" and a vendor-specific label like "x-v8cgi-database".
* is: any member that has "is" as its first term is reserved for vendor and platform checks like "isRhino", "isJavaScriptCore", "isSpidermonkey", "isBrowser", &c.
* window: the "environment" MAY contain the global "window" object in permissive browser environments
* args: an optional Array of Strings representing the process arguments.
* global: the "environment" MAY contain a reference to the global object in permissive environments
* posix: reserved for a posix subsystem interface
* fs: reserved for a securable file system interface
* dom: reserved for a securable dom interface
 
== A Loader Object ==
 
* load: the "loader" object, if present, MUST have a "load" method that returns a module factory function.
** a module factory function MUST accept "require", "exports", and "environment" as its arguments.
* fetch: a module loader, if present, must provide a "fetch" method that returns the text of a module for a given normalized, fully-qualified, absolute module identifier.
* evaluate: a module loader, if present, must provide an "evaluate" method that accepts a module text and returns a module factory function
** a module text MUST be a string that conforms to a JavaScript "program" construction.
* resolve: a module loader, if present, MUST provide a "resolve" method that accepts a module identifier (that may be a relative module identifier) and optionally a base module identifier (that must be an absolute module identifier) and returns the corresponding absolute identifier of the former.
* normalize: a module loader, if present, MUST provide a "normalize" method that accepts an absolute module identifier and returns that identifier in its canonical form.  Normalize MAY be an identity relation.
* path: a module loader, if present, MAY provide a path member that must be an Array.  The contents of each element of the array are implementation-specific.
* extensions: a module loader, if present, MAY provide an array of file extensions that the loader must accept (in order of priority from highest to lowest) for JavaScript module files.

Latest revision as of 09:07, 11 April 2009