Class Require
- java.lang.Object
-
- org.mozilla.javascript.ScriptableObject
-
- org.mozilla.javascript.IdScriptableObject
-
- org.mozilla.javascript.BaseFunction
-
- org.mozilla.javascript.commonjs.module.Require
-
- All Implemented Interfaces:
java.io.Serializable
,Callable
,ConstProperties
,DebuggableObject
,Function
,IdFunctionCall
,Scriptable
,SymbolScriptable
public class Require extends BaseFunction
Implements the require() function as defined by Common JS modules.Thread safety
You will ordinarily create one instance of require() for every top-level scope. This ordinarily means one instance per program execution, except if you use shared top-level scopes and installing most objects into them. Module loading is thread safe, so using a single require() in a shared top-level scope is also safe.Creation
If you need to create many otherwise identical require() functions for different scopes, you might want to useRequireBuilder
for convenience.Making it available
In order to make the require() function available to your JavaScript program, you need to invoke eitherinstall(Scriptable)
orrequireMain(Context, String)
.- Version:
- $Id: Require.java,v 1.4 2011/04/07 20:26:11 hannes%helma.at Exp $
- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.mozilla.javascript.ScriptableObject
ScriptableObject.KeyComparator
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.Map<java.lang.String,Scriptable>
exportedModuleInterfaces
private static java.lang.ThreadLocal<java.util.Map<java.lang.String,Scriptable>>
loadingModuleInterfaces
private java.lang.Object
loadLock
private Scriptable
mainExports
private java.lang.String
mainModuleId
private ModuleScriptProvider
moduleScriptProvider
private Scriptable
nativeScope
private Scriptable
paths
private Script
postExec
private Script
preExec
private boolean
sandboxed
private static long
serialVersionUID
-
Fields inherited from class org.mozilla.javascript.ScriptableObject
CONST, DONTENUM, EMPTY, PERMANENT, READONLY, UNINITIALIZED_CONST
-
Fields inherited from interface org.mozilla.javascript.Scriptable
NOT_FOUND
-
-
Constructor Summary
Constructors Constructor Description Require(Context cx, Scriptable nativeScope, ModuleScriptProvider moduleScriptProvider, Script preExec, Script postExec, boolean sandboxed)
Creates a new instance of the require() function.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.Object
call(Context cx, Scriptable scope, Scriptable thisObj, java.lang.Object[] args)
Should be overridden.Scriptable
construct(Context cx, Scriptable scope, java.lang.Object[] args)
Call the function as a constructor.private static void
defineReadOnlyProperty(ScriptableObject obj, java.lang.String name, java.lang.Object value)
private Scriptable
executeModuleScript(Context cx, java.lang.String id, Scriptable exports, ModuleScript moduleScript, boolean isMain)
private static void
executeOptionalScript(Script script, Context cx, Scriptable executionScope)
int
getArity()
private Scriptable
getExportedModuleInterface(Context cx, java.lang.String id, java.net.URI uri, java.net.URI base, boolean isMain)
java.lang.String
getFunctionName()
int
getLength()
private ModuleScript
getModule(Context cx, java.lang.String id, java.net.URI uri, java.net.URI base)
void
install(Scriptable scope)
Binds this instance of require() into the specified scope under the property name "require".Scriptable
requireMain(Context cx, java.lang.String mainModuleId)
Calling this method establishes a module as being the main module of the program to which this require() instance belongs.-
Methods inherited from class org.mozilla.javascript.BaseFunction
createObject, execIdCall, fillConstructorProperties, findInstanceIdInfo, findPrototypeId, getClassName, getClassPrototype, getInstanceIdName, getInstanceIdValue, getMaxInstanceId, getPrototypeProperty, getTypeOf, hasInstance, hasPrototypeProperty, initPrototypeId, isGeneratorFunction, setImmunePrototypeProperty, setInstanceIdAttributes, setInstanceIdValue
-
Methods inherited from class org.mozilla.javascript.IdScriptableObject
activatePrototypeMap, addIdFunctionProperty, defaultGet, defaultHas, defaultPut, defineOwnProperty, delete, delete, exportAsJSClass, findInstanceIdInfo, findPrototypeId, get, get, getAttributes, getAttributes, getOwnPropertyDescriptor, has, has, hasPrototypeMap, incompatibleCallError, initPrototypeConstructor, initPrototypeMethod, initPrototypeMethod, initPrototypeMethod, initPrototypeValue, initPrototypeValue, instanceIdInfo, put, put, setAttributes
-
Methods inherited from class org.mozilla.javascript.ScriptableObject
applyDescriptorToAttributeBitset, associateValue, avoidObjectDetection, buildDataDescriptor, callMethod, callMethod, checkPropertyChange, checkPropertyDefinition, defineClass, defineClass, defineClass, defineConst, defineConstProperty, defineFunctionProperties, defineOwnProperties, defineOwnProperty, defineProperty, defineProperty, defineProperty, defineProperty, defineProperty, delete, deleteProperty, deleteProperty, ensureScriptable, ensureScriptableObject, ensureSymbolScriptable, equivalentValues, get, get, getAllIds, getArrayPrototype, getAssociatedValue, getAttributes, getAttributes, getAttributes, getClassPrototype, getDefaultValue, getDefaultValue, getExternalArrayData, getExternalArrayLength, getFunctionPrototype, getGeneratorFunctionPrototype, getGetterOrSetter, getIds, getObjectPrototype, getParentScope, getProperty, getProperty, getProperty, getPropertyIds, getPrototype, getSlot, getTopLevelScope, getTopScopeValue, getTypedProperty, getTypedProperty, has, hasProperty, hasProperty, hasProperty, isAccessorDescriptor, isConst, isDataDescriptor, isEmpty, isExtensible, isFalse, isGenericDescriptor, isGetterOrSetter, isSealed, isTrue, preventExtensions, put, putConst, putConstProperty, putProperty, putProperty, putProperty, redefineProperty, sameValue, sealObject, setAttributes, setAttributes, setAttributes, setAttributes, setExternalArrayData, setGetterOrSetter, setParentScope, setPrototype, size
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.mozilla.javascript.Scriptable
delete, delete, get, get, getDefaultValue, getIds, getParentScope, getPrototype, has, has, put, put, setParentScope, setPrototype
-
-
-
-
Field Detail
-
serialVersionUID
private static final long serialVersionUID
- See Also:
- Constant Field Values
-
moduleScriptProvider
private final ModuleScriptProvider moduleScriptProvider
-
nativeScope
private final Scriptable nativeScope
-
paths
private final Scriptable paths
-
sandboxed
private final boolean sandboxed
-
preExec
private final Script preExec
-
postExec
private final Script postExec
-
mainModuleId
private java.lang.String mainModuleId
-
mainExports
private Scriptable mainExports
-
exportedModuleInterfaces
private final java.util.Map<java.lang.String,Scriptable> exportedModuleInterfaces
-
loadLock
private final java.lang.Object loadLock
-
loadingModuleInterfaces
private static final java.lang.ThreadLocal<java.util.Map<java.lang.String,Scriptable>> loadingModuleInterfaces
-
-
Constructor Detail
-
Require
public Require(Context cx, Scriptable nativeScope, ModuleScriptProvider moduleScriptProvider, Script preExec, Script postExec, boolean sandboxed)
Creates a new instance of the require() function. Upon constructing it, you will either want to install it in the global (or some other) scope usinginstall(Scriptable)
, or alternatively, you can load the program's main module usingrequireMain(Context, String)
and then act on the main module's exports.- Parameters:
cx
- the current contextnativeScope
- a scope that provides the standard native JavaScript objects.moduleScriptProvider
- a provider for module scriptspreExec
- an optional script that is executed in every module's scope before its module script is run.postExec
- an optional script that is executed in every module's scope after its module script is run.sandboxed
- if set to true, the require function will be sandboxed. This means that it doesn't have the "paths" property, and also that the modules it loads don't export the "module.uri" property.
-
-
Method Detail
-
requireMain
public Scriptable requireMain(Context cx, java.lang.String mainModuleId)
Calling this method establishes a module as being the main module of the program to which this require() instance belongs. The module will be loaded as if require()'d and its "module" property will be set as the "main" property of this require() instance. You have to call this method before the module has been loaded (that is, the call to this method must be the first to require the module and thus trigger its loading). Note that the main module will execute in its own scope and not in the global scope. Since all other modules see the global scope, executing the main module in the global scope would open it for tampering by other modules.- Parameters:
cx
- the current contextmainModuleId
- the ID of the main module- Returns:
- the "exports" property of the main module
- Throws:
java.lang.IllegalStateException
- if the main module is already loaded when required, or if this require() instance already has a different main module set.
-
install
public void install(Scriptable scope)
Binds this instance of require() into the specified scope under the property name "require".- Parameters:
scope
- the scope where the require() function is to be installed.
-
call
public java.lang.Object call(Context cx, Scriptable scope, Scriptable thisObj, java.lang.Object[] args)
Description copied from class:BaseFunction
Should be overridden.- Specified by:
call
in interfaceCallable
- Specified by:
call
in interfaceFunction
- Overrides:
call
in classBaseFunction
- Parameters:
cx
- the current Context for this threadscope
- the scope to execute the function relative to. This is set to the value returned by getParentScope() except when the function is called from a closure.thisObj
- the JavaScriptthis
objectargs
- the array of arguments- Returns:
- the result of the call
-
construct
public Scriptable construct(Context cx, Scriptable scope, java.lang.Object[] args)
Description copied from interface:Function
Call the function as a constructor. This method is invoked by the runtime in order to satisfy a use of the JavaScriptnew
operator. This method is expected to create a new object and return it.- Specified by:
construct
in interfaceFunction
- Overrides:
construct
in classBaseFunction
- Parameters:
cx
- the current Context for this threadscope
- an enclosing scope of the caller except when the function is called from a closure.args
- the array of arguments- Returns:
- the allocated object
-
getExportedModuleInterface
private Scriptable getExportedModuleInterface(Context cx, java.lang.String id, java.net.URI uri, java.net.URI base, boolean isMain)
-
executeModuleScript
private Scriptable executeModuleScript(Context cx, java.lang.String id, Scriptable exports, ModuleScript moduleScript, boolean isMain)
-
executeOptionalScript
private static void executeOptionalScript(Script script, Context cx, Scriptable executionScope)
-
defineReadOnlyProperty
private static void defineReadOnlyProperty(ScriptableObject obj, java.lang.String name, java.lang.Object value)
-
getModule
private ModuleScript getModule(Context cx, java.lang.String id, java.net.URI uri, java.net.URI base)
-
getFunctionName
public java.lang.String getFunctionName()
- Overrides:
getFunctionName
in classBaseFunction
-
getArity
public int getArity()
- Overrides:
getArity
in classBaseFunction
-
getLength
public int getLength()
- Overrides:
getLength
in classBaseFunction
-
-