ServerJS/Modules/Environment: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
m (Added environment.args and require.entry.)
Line 5: Line 5:
* id: the "require" object MAY have an "id" member that must be the normalized identifier of the current module
* 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".
* 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".
* entry: the "require" object MAY have an "entry" 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.entry)</tt>.




Line 16: Line 17:
* is: any member that has "is" as its first term is reserved for vendor and platform checks like "isRhino", "isJavaScriptCore", "isSpidermonkey", "isBrowser", &c.
* 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
* 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
* global: the "environment" MAY contain a reference to the global object in permissive environments
* posix: reserved for a posix subsystem interface
* posix: reserved for a posix subsystem interface

Revision as of 02:49, 4 March 2009

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".

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".
  • entry: the "require" object MAY have an "entry" member that is the module ID of the module that was the entry point for this sandbox. Thus the common Python idiom if __name__ == '__main__': would be if (require.id == require.entry).


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 first arguments.
    • a module factory function MAY accept additional optional 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.