ServerJS/Modules/Environment: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
m (Updated regarding the System proposal and certain evolutions of the File System API that imply name changes here.)
m (Moved "Environment" to "Loaders".)
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
'''There has been no discussion of this proposal.'''
Moved to [[ServerJS/Modules/Loaders]].
 
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".
* 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.
 
== 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.
* canonical: a module loader, if present, MUST provide a "normalize" method that accepts an absolute module identifier and returns that identifier in its canonical form.  "canonical" MAY be an identity relation.  "canonical" may return an opaque reference object to prevent information about the underlying file system from leaking into a sandbox.

Latest revision as of 09:07, 11 April 2009