AmurJS is a modeling and JavaScript code generation tool. In AmurJS a software system is modeled as a directed graph in which information processing is performed by passing invocations between vertices (nodes) through edges (connections). Both vertices and edges can perform information processing.
Processing can be performed asynchronously and in parallel - execution can fork into several paths and then several execution paths can merge or be joined.
AmurJS features flexible license management, which enables fine-grained value exchange between users and extension providers.
AmurJS has a concise graphical notation with 6 vertex and 4 edge types. Each notation element can be specialized by assigning an implementation_type, which provides unlimited extensibility opportunities.
Model elements and implementation types are configured by setting properties.
Some properties may contain code fragments. Code fragments can be written in different languages, e.g. a template language or a domain-specific language. A code fragment language shall support translation to JavaScript. A language can be non-textual, e.g. it can be a configuration dialog or a graphical editor. Code editors for textual languages, such as JavaScript, provide code-completion facilities.
Completed AmurJS models are translated to JavaScript, which can be executed in a JavaScript execution environment such as a Web browser, node.js, or Rhino JavaScript engine, which is bundled with Java SE v. 6.0+.
Each notation element is translated into a runtime component. The hierarchy of generated components is wrapped into a factory function, which takes a facade and configuration objects as arguments and returns a promise fulfilled upon the start of all components with the facade object with injected functions and properties. The factory function can be exposed to module loaders such as RequireJS using a skeleton file.