New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

actml

Package Overview
Dependencies
Maintainers
1
Versions
70
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

actml - npm Package Compare versions

Comparing version 0.22.0 to 0.30.0

23

lib/hooks/usePubSub.js

@@ -16,21 +16,2 @@ 'use strict';

function createSubscribeElement(subscribe) {
return function (_ref) {
var type = _ref.type,
children = _ref.children;
subscribe(type, function (payload) {
return children({ payload: payload });
});
};
};
function createPublishElement(publish) {
return function (_ref2) {
var type = _ref2.type,
payload = _ref2.payload;
publish(type, payload);
};
}
var subscribe = function subscribe(element, type, callback) {

@@ -77,5 +58,3 @@ if (!subscribers[type]) subscribers[type] = {};

publish: publishFunc,
subscribers: subscribers,
Subscribe: createSubscribeElement(subscribeFunc),
Publish: createPublishElement(publishFunc)
subscribers: subscribers
};

@@ -82,0 +61,0 @@ };

@@ -24,6 +24,2 @@ 'use strict';

var _useProduct = require('./hooks/useProduct');
var _useProduct2 = _interopRequireDefault(_useProduct);
var _usePubSub = require('./hooks/usePubSub');

@@ -69,3 +65,2 @@

var useState = (0, _useState2.default)(processor);
var useProduct = (0, _useProduct2.default)(processor, useState);
var usePubSub = (0, _usePubSub2.default)(processor);

@@ -81,3 +76,2 @@ var useReducer = (0, _useReducer2.default)(useState);

useElement: useElement,
useProduct: useProduct,
usePubSub: usePubSub,

@@ -84,0 +78,0 @@ useState: useState,

2

package.json
{
"name": "actml",
"version": "0.22.0",
"version": "0.30.0",
"description": "Like jsx but for your business logic",

@@ -5,0 +5,0 @@ "main": "lib/index.js",

![ActML](assets/logo.jpg)
# ActML <!-- omit in toc -->
# ActML
> :dizzy: ActML is a library that allows you to use JSX syntax outside of React world. It aims to provide the same experience in terms of composability and patterns. :dizzy:
> :dizzy: ActML is a library that allows you to use JSX syntax outside of React world. It aims to provide the same experience in terms of composability and patterns.
```javascript
```js
/** @jsx A */
import { A, run } from 'actml';
const Message = ({ user, children }) => {
console.log(children(user));
}
const Greeting = (user) => {
return `Hello ${ user.name }!`;
}
run(
<Message user={ { name: 'Emma' } }>
<Greeting />
</Message>
);
// Hello Emma!
```
(Try it yourself [here](https://poet.codes/e/XD26EjK9ECK).)
---
* [Basics](#basics)
* [Children](#children)
* [Asynchronous](#asynchronous)
* [Installation](#installation)
* [API](#api)
* [useState](#usestate)
* [useEffect](#useeffect)
---
## Basics
ActML looks like [React](https://reactjs.org/) but it's not about rendering UI. It's just about executing your JavaScript.
```js
const Foo = () => 'bar';
run(<Foo />); // bar
```
You'll probably wonder why using ActML and instead writing `Foo()` we do `<Foo />`? The answer is same reason we you do `<Component />` instead of `React.createElement(Component, null)`. We are declarative instead of imperative. It's much better to say what we want to happen instead of how it happens. Being declarative means having more options for composition.
### Children
Every function run by ActML receives a `children` prop. Similarly to React that prop represents the children of the element. Here we have two use case - we can call `children` as a function or we can return it as a result.
```js
const X = ({ children }) => {
children();
children();
};
const Y = ({ children }) => {
return children;
}
const Message = () => {
console.log('Hello')
};
run(<X><Message /></X>); // prints Hello twice
run(<Y><Message /></Y>); // prints Hello once
```
If we are calling `children` we are getting back an array containing the results of the nested elements.
```js
const X = () => 'foo';
const Y = () => 'bar';
const Results = ({ children }) => {
console.log(JSON.stringify(children()));
};
run(<Results><X /><Y /></Results>); // prints ["foo","bar"]
```
### Asynchronous
ActML runtime supports both asynchronous and synchronous elements. You can mix them in a single expression. As soon as there is something asynchronous ActML marks the call as such and the result of it is a promise. For example:
```js
const App = async ({ children }) => {
const message = await children();
return message.join(' ');
}
const Greeting = () => 'Hey';
const GetUserFirstName = async () => {
const { data: { first_name }} = await (await fetch('https://reqres.in/api/users/2')).json();
return first_name;
}
const FavoriteColor = () => 'your favorite color is';
const GetFavoriteColor = async () => {
const { data: { color }} = await (await fetch('https://reqres.in/api/products/3')).json();
return color;
}
run(
<App>
<Greeting />
<GetUserFirstName />
<FavoriteColor />
<GetFavoriteColor />
</App>
).then(message => console.log(message));
// outputs: Hey Janet your favorite color is #BF1932
```
(online demo [here](https://poet.codes/e/ZLOngMd8liP))
Notice that `<Greeting>` and `<FavoriteColor>` are synchronous. ActML waits for all the children to be processed and they resolves the promise returned by the `children` call. If all the elements were synchronous they we'll get an array straight away.
## Installation

@@ -24,2 +124,97 @@

## API
### useState
```js
import { A, useState } from 'actml';
const E = () => {
const [ setState, getState ] = useState(initialState);
}
```
Returns two functions for setting and retrieving a state value. In the original [React docs](https://reactjs.org/docs/hooks-reference.html#usestate) the first item is the state value directly but here ActML diverges a little bit by providing a function. It is done to provide a mechanism for immediate retrieval of the update value.
### useEffect
```js
import { A, useEffect } from 'actml';
const E = () => {
useEffect(function sideEffect() {
// ...
return function onElementRemoved() {
// ...
}
}, [ dependencyA, dependencyB ]);
}
```
The function `sideEffect` is fired after the function `E` finishes. After that it gets fired only if some of the `dependencyA` or `dependencyB` are changed. If we pass an empty array we are creating a side effect that is fired only once no matter how many times `E` is executed. The function that we pass to `useEffect` may return another function that is invoked when the element is removed from the tree.
_ActML's `useEffect` mimics [React's `useEffect`](https://reactjs.org/docs/hooks-reference.html#useeffect)_
### useReducer
```js
import { A, useEffect } from 'actml';
function reducer(state, action) {
switch (action.type) {
case 'increment':
return {count: state.count + 1};
case 'decrement':
return {count: state.count - 1};
default:
throw new Error();
}
}
const E = function () {
const [ getState, dispatch ] = useReducer(reducer, initialState);
//...
dispatch({ type: 'increment' })
}
```
Very similar to [`useState`](#usestate). In fact `useReducer` internally uses `useState. The mechanism for updating the state is by using actions which are `dispatch`ed and then processed by the `reducer` which returns the new version of the state.
_ActML's `useReducer` mimics [React's `useReducer`](https://reactjs.org/docs/hooks-reference.html#usereducer)_
### usePubSub
```js
import { A, Fragment, usePubSub } from 'actml';
const TYPE = 'TYPE';
const Publisher = function () {
const { publish } = usePubSub();
publish(TYPE, 42);
};
const Subscribe = function () {
const { subscribe } = usePubSub();
subscribe(TYPE, (answer) => {
console.log(`The answer is ${ answer }`);
});
};
run(
<Fragment>
<Subscribe />
<Publisher />
</Fragment>
);
```
The `usePubSub` hook can help you if you need to communicate between elements on different levels in the tree. It returns an object with two methods `publish` and `subscribe`:
* `publish(<type>, <payload>)`
* `subscribe(<type>, <callback>)`
## Examples
* [Playground](https://poet.codes/e/XD26EjK9ECK)
* [ToDoMVC app](./examples/todomvc)

@@ -293,3 +293,3 @@ (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.actml = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){

},{"./Queue":3,"./Tree":4,"./hooks/useEffect":5,"./hooks/usePubSub":8,"./hooks/useState":10,"./utils/isActMLElement":13}],3:[function(require,module,exports){
},{"./Queue":3,"./Tree":4,"./hooks/useEffect":5,"./hooks/usePubSub":7,"./hooks/useState":9,"./utils/isActMLElement":12}],3:[function(require,module,exports){
'use strict';

@@ -657,3 +657,3 @@

},{"./utils/isValidHookContext":11,"fast-deep-equal":14}],6:[function(require,module,exports){
},{"./utils/isValidHookContext":10,"fast-deep-equal":13}],6:[function(require,module,exports){
'use strict';

@@ -683,3 +683,3 @@

},{"./utils/isValidHookContext":11}],7:[function(require,module,exports){
},{"./utils/isValidHookContext":10}],7:[function(require,module,exports){
'use strict';

@@ -690,102 +690,2 @@

});
var _isValidHookContext = require('./utils/isValidHookContext');
var _isValidHookContext2 = _interopRequireDefault(_isValidHookContext);
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : { default: obj };
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });
} else {
obj[key] = value;
}return obj;
} /* eslint-disable no-return-assign */
var bridgeMethodName = function bridgeMethodName(keyword) {
return '__request__' + keyword;
};
var resolveProduct = function resolveProduct(bridgeMethod, node, getError) {
if (!node) {
throw getError();
}
var source = void 0;
if (node[bridgeMethod]) {
source = node;
} else {
source = node.children.find(function (child) {
return !!child[bridgeMethod];
});
}
var product = source ? source[bridgeMethod]() : null;
if (product !== null) {
return product.value;
}
return resolveProduct(bridgeMethod, node.parent, getError);
};
var getNotFoundError = function getNotFoundError(keyword, node) {
var getStack = function getStack(node) {
var stack = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
stack.push(node.element.name);
if (node.parent) {
return getStack(node.parent, stack);
}
return stack;
};
return new Error('"' + keyword + '" prop requested by "' + node.element.name + '" can not be found.\n\nStack:\n' + getStack(node).reverse().map(function (name) {
return ' <' + name + '>';
}).join('\n'));
};
var createUseProductHook = function createUseProductHook(processor) {
processor.onNodeEnter(function (node) {
var element = node.element;
var props = element.props;
var propNames = props ? Object.keys(props) : [];
propNames.forEach(function (propName) {
if (propName.charAt(0) === '$') {
var keyword = propName.substr(1, propName.length);
var productValue = resolveProduct(bridgeMethodName(keyword), node.parent, function () {
return getNotFoundError(keyword, node);
});
element.mergeProps(_defineProperty({}, keyword, productValue));
} else if (propName === 'exports') {
node[bridgeMethodName(props[propName])] = function () {
return { value: node.__product };
};
}
});
});
return function (value) {
(0, _isValidHookContext2.default)(processor);
var node = processor.node();
node.__product = value;
return [function (newValue) {
return node.__product = newValue;
}];
};
};
exports.default = createUseProductHook;
},{"./utils/isValidHookContext":11}],8:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = createUsePubSubHook;

@@ -803,21 +703,2 @@

function createSubscribeElement(subscribe) {
return function (_ref) {
var type = _ref.type,
children = _ref.children;
subscribe(type, function (payload) {
return children({ payload: payload });
});
};
};
function createPublishElement(publish) {
return function (_ref2) {
var type = _ref2.type,
payload = _ref2.payload;
publish(type, payload);
};
}
var subscribe = function subscribe(element, type, callback) {

@@ -864,5 +745,3 @@ if (!subscribers[type]) subscribers[type] = {};

publish: publishFunc,
subscribers: subscribers,
Subscribe: createSubscribeElement(subscribeFunc),
Publish: createPublishElement(publishFunc)
subscribers: subscribers
};

@@ -876,3 +755,3 @@ };

},{"./utils/isValidHookContext":11}],9:[function(require,module,exports){
},{"./utils/isValidHookContext":10}],8:[function(require,module,exports){
'use strict';

@@ -953,3 +832,3 @@

},{}],10:[function(require,module,exports){
},{}],9:[function(require,module,exports){
'use strict';

@@ -1025,3 +904,3 @@

},{"./utils/isValidHookContext":11}],11:[function(require,module,exports){
},{"./utils/isValidHookContext":10}],10:[function(require,module,exports){
'use strict';

@@ -1042,3 +921,3 @@

},{}],12:[function(require,module,exports){
},{}],11:[function(require,module,exports){
'use strict';

@@ -1067,6 +946,2 @@

var _useProduct = require('./hooks/useProduct');
var _useProduct2 = _interopRequireDefault(_useProduct);
var _usePubSub = require('./hooks/usePubSub');

@@ -1114,3 +989,2 @@

var useState = (0, _useState2.default)(processor);
var useProduct = (0, _useProduct2.default)(processor, useState);
var usePubSub = (0, _usePubSub2.default)(processor);

@@ -1126,3 +1000,2 @@ var useReducer = (0, _useReducer2.default)(useState);

useElement: useElement,
useProduct: useProduct,
usePubSub: usePubSub,

@@ -1140,3 +1013,3 @@ useState: useState,

},{"./ActElement":1,"./Processor":2,"./hooks/useEffect":5,"./hooks/useElement":6,"./hooks/useProduct":7,"./hooks/usePubSub":8,"./hooks/useReducer":9,"./hooks/useState":10,"./utils/isActMLElement":13}],13:[function(require,module,exports){
},{"./ActElement":1,"./Processor":2,"./hooks/useEffect":5,"./hooks/useElement":6,"./hooks/usePubSub":7,"./hooks/useReducer":8,"./hooks/useState":9,"./utils/isActMLElement":12}],12:[function(require,module,exports){
"use strict";

@@ -1152,3 +1025,3 @@

},{}],14:[function(require,module,exports){
},{}],13:[function(require,module,exports){
'use strict';

@@ -1210,3 +1083,3 @@

},{}]},{},[12])(12)
},{}]},{},[11])(11)
});

@@ -1,1 +0,1 @@

(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.actml=f()}})(function(){var define,module,exports;return function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r}()({1:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});function getFuncName(func){if(func.name)return func.name;var result=/^function\s+([\w\$]+)\s*\(/.exec(func.toString());return result?result[1]:"unknown"}var createElement=function createElement(func,props,children){if(typeof func!=="function"){throw new Error('ActML element expects a function. "'+func+'" given instead.')}return{__actml:true,__used:0,__running:false,id:null,props:props,name:getFuncName(func),children:children,initialize:function initialize(id){var used=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;this.id=id;this.__used=used;this.__running=false},mergeProps:function mergeProps(newProps){this.props=Object.assign({},this.props,newProps)},used:function used(){return this.__used},isRunning:function isRunning(){return this.__running},enter:function enter(){this.__running=true},consume:function consume(){return func(this.props)},out:function out(){this.__used+=1;this.__running=false}}};exports.default=createElement},{}],2:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=createProcessor;var _isActMLElement=require("./utils/isActMLElement");var _isActMLElement2=_interopRequireDefault(_isActMLElement);var _Tree=require("./Tree");var _Tree2=_interopRequireDefault(_Tree);var _usePubSub=require("./hooks/usePubSub");var _usePubSub2=_interopRequireDefault(_usePubSub);var _useState=require("./hooks/useState");var _useState2=_interopRequireDefault(_useState);var _useEffect=require("./hooks/useEffect");var _useEffect2=_interopRequireDefault(_useEffect);var _Queue=require("./Queue");var _Queue2=_interopRequireDefault(_Queue);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var CHILDREN="__ACTML_CHILDREN__";var CONSUME="CONSUME";var PROCESS_RESULT="PROCESS_RESULT";var RETURNED_ELEMENT="RETURNED_ELEMENT";var CHILD="CHILD";var isGenerator=function isGenerator(obj){return obj&&typeof obj["next"]==="function"};var isPromise=function isPromise(obj){return obj&&typeof obj["then"]==="function"};function createChildrenFunc(node,processNode){var f=function f(){var _arguments=arguments;var children=node.element.children;if(children&&children.length>0){var queueItemsToAdd=[];var results=[];var childrenQueue=(0,_Queue2.default)(" "+node.element.name+":children");var _loop=function _loop(i){if((0,_isActMLElement2.default)(children[i])){var _children$i;(_children$i=children[i]).mergeProps.apply(_children$i,_arguments);queueItemsToAdd.push(function(){return processNode(node.addChildNode(children[i]))})}else if(typeof children[i]==="function"){var funcResult=children[i].apply(children,_arguments);if((0,_isActMLElement2.default)(funcResult)){queueItemsToAdd.push(function(){return processNode(node.addChildNode(funcResult))})}else{results.push(funcResult)}}else{results.push(children[i])}};for(var i=0;i<children.length;i++){_loop(i)}queueItemsToAdd.reverse().forEach(function(func){childrenQueue.prependItem(CHILD,func,function(r){return results.push(r)})});childrenQueue.process();return childrenQueue.onDone(function(){return results})}};f[CHILDREN]=true;return f}function createProcessor(){var tree=(0,_Tree2.default)();var currentNode=null;var processNode=function processNode(node){currentNode=node;node.enter();node.rerun=function(){return processNode(node)};node.element.mergeProps({children:createChildrenFunc(node,processNode)});var results={};var queue=(0,_Queue2.default)(" "+node.element.name);queue.add(CONSUME,function(){return node.element.consume()},function(result){return results[CONSUME]=result});queue.add(PROCESS_RESULT,function(){var consumption=results[CONSUME];if((0,_isActMLElement2.default)(consumption)){queue.prependItem(RETURNED_ELEMENT,function(){return processNode(node.addChildNode(consumption))},function(result){return results[RETURNED_ELEMENT]=result})}else if(isGenerator(consumption)){var generator=consumption;queue.prependItem(RETURNED_ELEMENT,function(){return new Promise(function(generatorDone){var genResult=void 0;(function iterate(value){genResult=generator.next(value);if(!genResult.done){if((0,_isActMLElement2.default)(genResult.value)){var res=processNode(node.addChildNode(genResult.value));if(isPromise(res)){res.then(function(r){return iterate(r)})}else{iterate(res)}}}else{if((0,_isActMLElement2.default)(genResult.value)){var _res=processNode(node.addChildNode(genResult.value));if(isPromise(_res)){_res.then(function(r){return generatorDone(r)})}else{generatorDone(_res)}}else{generatorDone(genResult.value)}}})()})},function(result){return results[RETURNED_ELEMENT]=result})}else if(consumption&&consumption[CHILDREN]){queue.prependItem(RETURNED_ELEMENT,function(){return consumption()},function(result){results[RETURNED_ELEMENT]=result&&result.length===1?result[0]:result})}});queue.process();return queue.onDone(function(){node.out();return RETURNED_ELEMENT in results?results[RETURNED_ELEMENT]:results[CONSUME]})};return{node:function node(){return currentNode},run:function run(element){var rootNode=tree.resolveRoot(element);return processNode(rootNode)},onNodeEnter:function onNodeEnter(callback){tree.addNodeEnterCallback(callback)},onNodeOut:function onNodeOut(callback){tree.addNodeOutCallback(callback)},onNodeRemove:function onNodeRemove(callback){tree.onNodeRemove(callback)},system:function system(){return{tree:tree,reset:function reset(){currentNode=null;tree.reset();_usePubSub2.default.clear();_useState2.default.clear();_useEffect2.default.clear()}}}}}},{"./Queue":3,"./Tree":4,"./hooks/useEffect":5,"./hooks/usePubSub":8,"./hooks/useState":10,"./utils/isActMLElement":13}],3:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=createQueue;function _toConsumableArray(arr){if(Array.isArray(arr)){for(var i=0,arr2=Array(arr.length);i<arr.length;i++){arr2[i]=arr[i]}return arr2}else{return Array.from(arr)}}var LOGS=false;var log=function log(){var _console;return LOGS?(_console=console).log.apply(_console,arguments):null};var isPromise=function isPromise(obj){return obj&&typeof obj["then"]==="function"};var createItem=function createItem(type,func){var onDone=arguments.length>2&&arguments[2]!==undefined?arguments[2]:function(){};return{type:type,func:func,onDone:onDone}};function createQueue(context){var items=[];var async=false;var running=false;var release=function release(){};return{add:function add(type,func,onDone){log(context+":Q: [..."+type+"] ("+(items.length+1)+" total)");items.push(createItem(type,func,onDone))},prependItem:function prependItem(type,func,onDone){log(context+":Q: ["+type+"...] ("+(items.length+1)+" total)");items=[createItem(type,func,onDone)].concat(_toConsumableArray(items))},process:function process(lastResult){var _this=this;running=true;if(items.length===0){log(context+":Q:done");running=false;release();return}var item=items.shift();log(context+":Q: "+item.type+"() ("+items.length+" left)");var result=item.func(lastResult);if(isPromise(result)){async=true;result.then(function(asyncResult){item.onDone(asyncResult);_this.process(asyncResult)}).catch(function(error){release(error)})}else{item.onDone(result);this.process(result)}},onDone:function onDone(getResult){if(async){return new Promise(function(done,reject){release=function release(error){if(error){reject(error)}else{done(getResult())}}})}return getResult()},isRunning:function isRunning(){return running}}}},{}],4:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=Tree;var LOGS=false;var log=function log(){var _console;return LOGS?(_console=console).log.apply(_console,arguments):null};function Tree(){var onNodeEnter=[];var onNodeOut=[];var _onNodeRemove=[];var root=createNewNode();var ids=0;function getId(){return"a"+ ++ids}function useSameNode(node,newElement){newElement.initialize(node.element.id,node.element.used());node.element=newElement;return node}function treeDiff(oldElement,newElement){if(oldElement&&oldElement.name===newElement.name){if(oldElement.props&&newElement.props){return oldElement.props.key===newElement.props.key}return true}return false}function createNewNode(element,parent){if(element){element.initialize(getId())}return{element:element,children:[],parent:parent,cursor:0,enter:function enter(){var _this=this;log("-> "+this.element.name);this.element.enter();onNodeEnter.forEach(function(c){return c(_this)})},out:function out(){var _this2=this;log("<- "+this.element.name);this.element.out();if(this.cursor<this.children.length){this.children.splice(this.cursor,this.children.length-this.cursor).forEach(function(removedNode){return _onNodeRemove.forEach(function(c){return c(removedNode)})})}this.cursor=0;onNodeOut.forEach(function(c){return c(_this2)})},addChildNode:function addChildNode(newElement){var _this3=this;var childNode=this.children[this.cursor];if(childNode&&treeDiff(childNode.element,newElement)){this.cursor+=1;return useSameNode(childNode,newElement)}var newChildNode=createNewNode(newElement,this);if(this.children[this.cursor]){_onNodeRemove.forEach(function(c){return c(_this3.children[_this3.cursor])})}this.children[this.cursor]=newChildNode;this.cursor+=1;return newChildNode}}}return{resolveRoot:function resolveRoot(element){return root=treeDiff(root.element,element)?useSameNode(root,element):createNewNode(element)},reset:function reset(){root=createNewNode();ids=0},getNumOfElements:function getNumOfElements(){return ids},diagnose:function diagnose(){return function loopOver(node){var ind=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;return{ind:ind,name:node.element.name,used:node.element.used(),id:node.element.id,children:node.children.map(function(child){return loopOver(child,ind+1)})}}(root)},addNodeEnterCallback:function addNodeEnterCallback(callback){onNodeEnter.push(callback)},addNodeOutCallback:function addNodeOutCallback(callback){onNodeOut.push(callback)},onNodeRemove:function onNodeRemove(callback){_onNodeRemove.push(callback)}}}},{}],5:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _fastDeepEqual=require("fast-deep-equal");var _fastDeepEqual2=_interopRequireDefault(_fastDeepEqual);var _isValidHookContext=require("./utils/isValidHookContext");var _isValidHookContext2=_interopRequireDefault(_isValidHookContext);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var Storage={elements:{},get:function get(element){if(this.elements[element.id]){return this.elements[element.id]}return this.elements[element.id]={effects:[],consumer:0}},cleanUp:function cleanUp(id){if(this.elements[id]){delete this.elements[id]}}};var createEffect=function createEffect(callback,deps){return{callback:callback,deps:deps}};var updateEffect=function updateEffect(effect,callback,deps){effect.callback=callback;effect.oldDeps=effect.deps;effect.deps=deps;return effect};function depsEqual(oldDeps,newDeps){if(!oldDeps)return false;if(oldDeps.length!==newDeps.length)return false;return(0,_fastDeepEqual2.default)(oldDeps,newDeps)}function resolveEffect(node,effect){var deps=effect.deps,oldDeps=effect.oldDeps,callback=effect.callback;if(typeof deps==="undefined"){effect.cleanUp=callback()}else if(deps.length===0){if(node.element.used()===1){effect.cleanUp=callback()}}else{var areEqual=depsEqual(oldDeps,deps);if(!areEqual){effect.cleanUp=callback()}}}var createUseEffectHook=function createUseEffectHook(processor){processor.onNodeRemove(function(node){var element=node.element;var storage=Storage.get(element);storage.effects.forEach(function(effect){if(effect.cleanUp)effect.cleanUp()});Storage.cleanUp(node.element.id)});processor.onNodeOut(function(node){var element=node.element;var storage=Storage.get(element);if(storage.effects.length>0){storage.effects.forEach(function(effect){return resolveEffect(node,effect)})}});return function(callback,deps){(0,_isValidHookContext2.default)(processor);var node=processor.node();var element=node.element;var storage=Storage.get(element);if(element.used()===0){storage.effects.push(createEffect(callback,deps))}else{var index=storage.consumer;storage.consumer=index<storage.effects.length-1?storage.consumer+1:0;updateEffect(storage.effects[index],callback,deps)}}};exports.default=createUseEffectHook;createUseEffectHook.clear=function(){Storage.elements={}}},{"./utils/isValidHookContext":11,"fast-deep-equal":14}],6:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _isValidHookContext=require("./utils/isValidHookContext");var _isValidHookContext2=_interopRequireDefault(_isValidHookContext);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var createUseElementHook=function createUseElementHook(processor){return function(){(0,_isValidHookContext2.default)(processor);return processor.node().element}};exports.default=createUseElementHook},{"./utils/isValidHookContext":11}],7:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _isValidHookContext=require("./utils/isValidHookContext");var _isValidHookContext2=_interopRequireDefault(_isValidHookContext);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}var bridgeMethodName=function bridgeMethodName(keyword){return"__request__"+keyword};var resolveProduct=function resolveProduct(bridgeMethod,node,getError){if(!node){throw getError()}var source=void 0;if(node[bridgeMethod]){source=node}else{source=node.children.find(function(child){return!!child[bridgeMethod]})}var product=source?source[bridgeMethod]():null;if(product!==null){return product.value}return resolveProduct(bridgeMethod,node.parent,getError)};var getNotFoundError=function getNotFoundError(keyword,node){var getStack=function getStack(node){var stack=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];stack.push(node.element.name);if(node.parent){return getStack(node.parent,stack)}return stack};return new Error('"'+keyword+'" prop requested by "'+node.element.name+'" can not be found.\n\nStack:\n'+getStack(node).reverse().map(function(name){return" <"+name+">"}).join("\n"))};var createUseProductHook=function createUseProductHook(processor){processor.onNodeEnter(function(node){var element=node.element;var props=element.props;var propNames=props?Object.keys(props):[];propNames.forEach(function(propName){if(propName.charAt(0)==="$"){var keyword=propName.substr(1,propName.length);var productValue=resolveProduct(bridgeMethodName(keyword),node.parent,function(){return getNotFoundError(keyword,node)});element.mergeProps(_defineProperty({},keyword,productValue))}else if(propName==="exports"){node[bridgeMethodName(props[propName])]=function(){return{value:node.__product}}}})});return function(value){(0,_isValidHookContext2.default)(processor);var node=processor.node();node.__product=value;return[function(newValue){return node.__product=newValue}]}};exports.default=createUseProductHook},{"./utils/isValidHookContext":11}],8:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=createUsePubSubHook;var _isValidHookContext=require("./utils/isValidHookContext");var _isValidHookContext2=_interopRequireDefault(_isValidHookContext);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var subscribers={};function createSubscribeElement(subscribe){return function(_ref){var type=_ref.type,children=_ref.children;subscribe(type,function(payload){return children({payload:payload})})}}function createPublishElement(publish){return function(_ref2){var type=_ref2.type,payload=_ref2.payload;publish(type,payload)}}var subscribe=function subscribe(element,type,callback){if(!subscribers[type])subscribers[type]={};subscribers[type][element.id]=callback;return function(){delete subscribers[type][element.id]}};var publish=function publish(type,payload){if(!subscribers[type])return;Object.keys(subscribers[type]).forEach(function(id){subscribers[type][id](payload)})};function createUsePubSubHook(processor){processor.onNodeRemove(function(node){Object.keys(subscribers).forEach(function(type){if(subscribers[type][node.element.id]){delete subscribers[type][node.element.id]}})});return function(scopedElement){(0,_isValidHookContext2.default)(processor);var node=processor.node();var el=scopedElement||node.element;var subscribeFunc=function subscribeFunc(){for(var _len=arguments.length,params=Array(_len),_key=0;_key<_len;_key++){params[_key]=arguments[_key]}return subscribe.apply(undefined,[el].concat(params))};var publishFunc=function publishFunc(){return publish.apply(undefined,arguments)};return{subscribe:subscribeFunc,publish:publishFunc,subscribers:subscribers,Subscribe:createSubscribeElement(subscribeFunc),Publish:createPublishElement(publishFunc)}}}createUsePubSubHook.clear=function(){subscribers={}}},{"./utils/isValidHookContext":11}],9:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _slicedToArray=function(){function sliceIterator(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break}}catch(err){_d=true;_e=err}finally{try{if(!_n&&_i["return"])_i["return"]()}finally{if(_d)throw _e}}return _arr}return function(arr,i){if(Array.isArray(arr)){return arr}else if(Symbol.iterator in Object(arr)){return sliceIterator(arr,i)}else{throw new TypeError("Invalid attempt to destructure non-iterable instance")}}}();exports.default=createUseReducerHook;function _objectWithoutProperties(obj,keys){var target={};for(var i in obj){if(keys.indexOf(i)>=0)continue;if(!Object.prototype.hasOwnProperty.call(obj,i))continue;target[i]=obj[i]}return target}function createDispatchElement(dispatch){return function(_ref){var action=_ref.action,propsToAction=_ref.propsToAction,rest=_objectWithoutProperties(_ref,["action","propsToAction"]);if(action){dispatch(action)}else if(propsToAction){dispatch(propsToAction(rest))}else{throw new Error('<Dispatch> expects "action" or "propsToAction" prop.')}}}function createUseReducerHook(useState){return function(reducer,initialState){var _useState=useState(initialState),_useState2=_slicedToArray(_useState,2),state=_useState2[0],setState=_useState2[1];var dispatch=function dispatch(action){return setState(reducer(state(),action))};return[state,dispatch,createDispatchElement(dispatch),function(){return state()}]}}},{}],10:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=createUseStateHook;var _isValidHookContext=require("./utils/isValidHookContext");var _isValidHookContext2=_interopRequireDefault(_isValidHookContext);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var Storage={elements:{},get:function get(element){if(this.elements[element.id]){return this.elements[element.id]}return this.elements[element.id]={states:[],consumer:0}},cleanUp:function cleanUp(id){if(this.elements[id]){delete this.elements[id]}}};function createUseStateHook(processor){processor.onNodeRemove(function(node){return Storage.cleanUp(node.element.id)});return function(initialState){(0,_isValidHookContext2.default)(processor);var node=processor.node();var element=node.element;var storage=Storage.get(element);var index=void 0;if(element.used()===0){storage.states.push(initialState);index=storage.states.length-1}else{index=storage.consumer;storage.consumer=index<storage.states.length-1?storage.consumer+1:0}return[function(){return storage.states[index]},function(newState){storage.states[index]=newState;if(!element.isRunning()){node.rerun()}return newState}]}}createUseStateHook.clear=function(){Storage.elements={}}},{"./utils/isValidHookContext":11}],11:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=isValidHookContext;function isValidHookContext(processor){if(!processor){throw new Error("Something terribly wrong happened. The hook factory function is called without a processor.")}if(!processor.node()){throw new Error("Hooks must be called in the context of an ActML element.")}}},{}],12:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createRuntime=createRuntime;var _Processor=require("./Processor");var _Processor2=_interopRequireDefault(_Processor);var _isActMLElement=require("./utils/isActMLElement");var _isActMLElement2=_interopRequireDefault(_isActMLElement);var _ActElement=require("./ActElement");var _ActElement2=_interopRequireDefault(_ActElement);var _useElement=require("./hooks/useElement");var _useElement2=_interopRequireDefault(_useElement);var _useProduct=require("./hooks/useProduct");var _useProduct2=_interopRequireDefault(_useProduct);var _usePubSub=require("./hooks/usePubSub");var _usePubSub2=_interopRequireDefault(_usePubSub);var _useState=require("./hooks/useState");var _useState2=_interopRequireDefault(_useState);var _useReducer=require("./hooks/useReducer");var _useReducer2=_interopRequireDefault(_useReducer);var _useEffect=require("./hooks/useEffect");var _useEffect2=_interopRequireDefault(_useEffect);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function createRuntime(){var processor=(0,_Processor2.default)();function A(func,props){for(var _len=arguments.length,children=Array(_len>2?_len-2:0),_key=2;_key<_len;_key++){children[_key-2]=arguments[_key]}return(0,_ActElement2.default)(func,props,children)}function run(element){if(!(0,_isActMLElement2.default)(element)){throw new Error("ActML element expected. Instead "+element.toString()+" passed.")}return processor.run(element)}var Fragment=function Fragment(_ref){var children=_ref.children;return children};var useElement=(0,_useElement2.default)(processor);var useState=(0,_useState2.default)(processor);var useProduct=(0,_useProduct2.default)(processor,useState);var usePubSub=(0,_usePubSub2.default)(processor);var useReducer=(0,_useReducer2.default)(useState);var useEffect=(0,_useEffect2.default)(processor);return{A:A,run:run,Fragment:Fragment,processor:processor,useElement:useElement,useProduct:useProduct,usePubSub:usePubSub,useState:useState,useReducer:useReducer,useEffect:useEffect}}var runtime=createRuntime();module.exports=runtime;module.exports.createRuntime=createRuntime()},{"./ActElement":1,"./Processor":2,"./hooks/useEffect":5,"./hooks/useElement":6,"./hooks/useProduct":7,"./hooks/usePubSub":8,"./hooks/useReducer":9,"./hooks/useState":10,"./utils/isActMLElement":13}],13:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=isActMLElement;function isActMLElement(element){return element&&element.__actml===true}},{}],14:[function(require,module,exports){"use strict";var isArray=Array.isArray;var keyList=Object.keys;var hasProp=Object.prototype.hasOwnProperty;module.exports=function equal(a,b){if(a===b)return true;if(a&&b&&typeof a=="object"&&typeof b=="object"){var arrA=isArray(a),arrB=isArray(b),i,length,key;if(arrA&&arrB){length=a.length;if(length!=b.length)return false;for(i=length;i--!==0;)if(!equal(a[i],b[i]))return false;return true}if(arrA!=arrB)return false;var dateA=a instanceof Date,dateB=b instanceof Date;if(dateA!=dateB)return false;if(dateA&&dateB)return a.getTime()==b.getTime();var regexpA=a instanceof RegExp,regexpB=b instanceof RegExp;if(regexpA!=regexpB)return false;if(regexpA&&regexpB)return a.toString()==b.toString();var keys=keyList(a);length=keys.length;if(length!==keyList(b).length)return false;for(i=length;i--!==0;)if(!hasProp.call(b,keys[i]))return false;for(i=length;i--!==0;){key=keys[i];if(!equal(a[key],b[key]))return false}return true}return a!==a&&b!==b}},{}]},{},[12])(12)});
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.actml=f()}})(function(){var define,module,exports;return function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r}()({1:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});function getFuncName(func){if(func.name)return func.name;var result=/^function\s+([\w\$]+)\s*\(/.exec(func.toString());return result?result[1]:"unknown"}var createElement=function createElement(func,props,children){if(typeof func!=="function"){throw new Error('ActML element expects a function. "'+func+'" given instead.')}return{__actml:true,__used:0,__running:false,id:null,props:props,name:getFuncName(func),children:children,initialize:function initialize(id){var used=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;this.id=id;this.__used=used;this.__running=false},mergeProps:function mergeProps(newProps){this.props=Object.assign({},this.props,newProps)},used:function used(){return this.__used},isRunning:function isRunning(){return this.__running},enter:function enter(){this.__running=true},consume:function consume(){return func(this.props)},out:function out(){this.__used+=1;this.__running=false}}};exports.default=createElement},{}],2:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=createProcessor;var _isActMLElement=require("./utils/isActMLElement");var _isActMLElement2=_interopRequireDefault(_isActMLElement);var _Tree=require("./Tree");var _Tree2=_interopRequireDefault(_Tree);var _usePubSub=require("./hooks/usePubSub");var _usePubSub2=_interopRequireDefault(_usePubSub);var _useState=require("./hooks/useState");var _useState2=_interopRequireDefault(_useState);var _useEffect=require("./hooks/useEffect");var _useEffect2=_interopRequireDefault(_useEffect);var _Queue=require("./Queue");var _Queue2=_interopRequireDefault(_Queue);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var CHILDREN="__ACTML_CHILDREN__";var CONSUME="CONSUME";var PROCESS_RESULT="PROCESS_RESULT";var RETURNED_ELEMENT="RETURNED_ELEMENT";var CHILD="CHILD";var isGenerator=function isGenerator(obj){return obj&&typeof obj["next"]==="function"};var isPromise=function isPromise(obj){return obj&&typeof obj["then"]==="function"};function createChildrenFunc(node,processNode){var f=function f(){var _arguments=arguments;var children=node.element.children;if(children&&children.length>0){var queueItemsToAdd=[];var results=[];var childrenQueue=(0,_Queue2.default)(" "+node.element.name+":children");var _loop=function _loop(i){if((0,_isActMLElement2.default)(children[i])){var _children$i;(_children$i=children[i]).mergeProps.apply(_children$i,_arguments);queueItemsToAdd.push(function(){return processNode(node.addChildNode(children[i]))})}else if(typeof children[i]==="function"){var funcResult=children[i].apply(children,_arguments);if((0,_isActMLElement2.default)(funcResult)){queueItemsToAdd.push(function(){return processNode(node.addChildNode(funcResult))})}else{results.push(funcResult)}}else{results.push(children[i])}};for(var i=0;i<children.length;i++){_loop(i)}queueItemsToAdd.reverse().forEach(function(func){childrenQueue.prependItem(CHILD,func,function(r){return results.push(r)})});childrenQueue.process();return childrenQueue.onDone(function(){return results})}};f[CHILDREN]=true;return f}function createProcessor(){var tree=(0,_Tree2.default)();var currentNode=null;var processNode=function processNode(node){currentNode=node;node.enter();node.rerun=function(){return processNode(node)};node.element.mergeProps({children:createChildrenFunc(node,processNode)});var results={};var queue=(0,_Queue2.default)(" "+node.element.name);queue.add(CONSUME,function(){return node.element.consume()},function(result){return results[CONSUME]=result});queue.add(PROCESS_RESULT,function(){var consumption=results[CONSUME];if((0,_isActMLElement2.default)(consumption)){queue.prependItem(RETURNED_ELEMENT,function(){return processNode(node.addChildNode(consumption))},function(result){return results[RETURNED_ELEMENT]=result})}else if(isGenerator(consumption)){var generator=consumption;queue.prependItem(RETURNED_ELEMENT,function(){return new Promise(function(generatorDone){var genResult=void 0;(function iterate(value){genResult=generator.next(value);if(!genResult.done){if((0,_isActMLElement2.default)(genResult.value)){var res=processNode(node.addChildNode(genResult.value));if(isPromise(res)){res.then(function(r){return iterate(r)})}else{iterate(res)}}}else{if((0,_isActMLElement2.default)(genResult.value)){var _res=processNode(node.addChildNode(genResult.value));if(isPromise(_res)){_res.then(function(r){return generatorDone(r)})}else{generatorDone(_res)}}else{generatorDone(genResult.value)}}})()})},function(result){return results[RETURNED_ELEMENT]=result})}else if(consumption&&consumption[CHILDREN]){queue.prependItem(RETURNED_ELEMENT,function(){return consumption()},function(result){results[RETURNED_ELEMENT]=result&&result.length===1?result[0]:result})}});queue.process();return queue.onDone(function(){node.out();return RETURNED_ELEMENT in results?results[RETURNED_ELEMENT]:results[CONSUME]})};return{node:function node(){return currentNode},run:function run(element){var rootNode=tree.resolveRoot(element);return processNode(rootNode)},onNodeEnter:function onNodeEnter(callback){tree.addNodeEnterCallback(callback)},onNodeOut:function onNodeOut(callback){tree.addNodeOutCallback(callback)},onNodeRemove:function onNodeRemove(callback){tree.onNodeRemove(callback)},system:function system(){return{tree:tree,reset:function reset(){currentNode=null;tree.reset();_usePubSub2.default.clear();_useState2.default.clear();_useEffect2.default.clear()}}}}}},{"./Queue":3,"./Tree":4,"./hooks/useEffect":5,"./hooks/usePubSub":7,"./hooks/useState":9,"./utils/isActMLElement":12}],3:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=createQueue;function _toConsumableArray(arr){if(Array.isArray(arr)){for(var i=0,arr2=Array(arr.length);i<arr.length;i++){arr2[i]=arr[i]}return arr2}else{return Array.from(arr)}}var LOGS=false;var log=function log(){var _console;return LOGS?(_console=console).log.apply(_console,arguments):null};var isPromise=function isPromise(obj){return obj&&typeof obj["then"]==="function"};var createItem=function createItem(type,func){var onDone=arguments.length>2&&arguments[2]!==undefined?arguments[2]:function(){};return{type:type,func:func,onDone:onDone}};function createQueue(context){var items=[];var async=false;var running=false;var release=function release(){};return{add:function add(type,func,onDone){log(context+":Q: [..."+type+"] ("+(items.length+1)+" total)");items.push(createItem(type,func,onDone))},prependItem:function prependItem(type,func,onDone){log(context+":Q: ["+type+"...] ("+(items.length+1)+" total)");items=[createItem(type,func,onDone)].concat(_toConsumableArray(items))},process:function process(lastResult){var _this=this;running=true;if(items.length===0){log(context+":Q:done");running=false;release();return}var item=items.shift();log(context+":Q: "+item.type+"() ("+items.length+" left)");var result=item.func(lastResult);if(isPromise(result)){async=true;result.then(function(asyncResult){item.onDone(asyncResult);_this.process(asyncResult)}).catch(function(error){release(error)})}else{item.onDone(result);this.process(result)}},onDone:function onDone(getResult){if(async){return new Promise(function(done,reject){release=function release(error){if(error){reject(error)}else{done(getResult())}}})}return getResult()},isRunning:function isRunning(){return running}}}},{}],4:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=Tree;var LOGS=false;var log=function log(){var _console;return LOGS?(_console=console).log.apply(_console,arguments):null};function Tree(){var onNodeEnter=[];var onNodeOut=[];var _onNodeRemove=[];var root=createNewNode();var ids=0;function getId(){return"a"+ ++ids}function useSameNode(node,newElement){newElement.initialize(node.element.id,node.element.used());node.element=newElement;return node}function treeDiff(oldElement,newElement){if(oldElement&&oldElement.name===newElement.name){if(oldElement.props&&newElement.props){return oldElement.props.key===newElement.props.key}return true}return false}function createNewNode(element,parent){if(element){element.initialize(getId())}return{element:element,children:[],parent:parent,cursor:0,enter:function enter(){var _this=this;log("-> "+this.element.name);this.element.enter();onNodeEnter.forEach(function(c){return c(_this)})},out:function out(){var _this2=this;log("<- "+this.element.name);this.element.out();if(this.cursor<this.children.length){this.children.splice(this.cursor,this.children.length-this.cursor).forEach(function(removedNode){return _onNodeRemove.forEach(function(c){return c(removedNode)})})}this.cursor=0;onNodeOut.forEach(function(c){return c(_this2)})},addChildNode:function addChildNode(newElement){var _this3=this;var childNode=this.children[this.cursor];if(childNode&&treeDiff(childNode.element,newElement)){this.cursor+=1;return useSameNode(childNode,newElement)}var newChildNode=createNewNode(newElement,this);if(this.children[this.cursor]){_onNodeRemove.forEach(function(c){return c(_this3.children[_this3.cursor])})}this.children[this.cursor]=newChildNode;this.cursor+=1;return newChildNode}}}return{resolveRoot:function resolveRoot(element){return root=treeDiff(root.element,element)?useSameNode(root,element):createNewNode(element)},reset:function reset(){root=createNewNode();ids=0},getNumOfElements:function getNumOfElements(){return ids},diagnose:function diagnose(){return function loopOver(node){var ind=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;return{ind:ind,name:node.element.name,used:node.element.used(),id:node.element.id,children:node.children.map(function(child){return loopOver(child,ind+1)})}}(root)},addNodeEnterCallback:function addNodeEnterCallback(callback){onNodeEnter.push(callback)},addNodeOutCallback:function addNodeOutCallback(callback){onNodeOut.push(callback)},onNodeRemove:function onNodeRemove(callback){_onNodeRemove.push(callback)}}}},{}],5:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _fastDeepEqual=require("fast-deep-equal");var _fastDeepEqual2=_interopRequireDefault(_fastDeepEqual);var _isValidHookContext=require("./utils/isValidHookContext");var _isValidHookContext2=_interopRequireDefault(_isValidHookContext);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var Storage={elements:{},get:function get(element){if(this.elements[element.id]){return this.elements[element.id]}return this.elements[element.id]={effects:[],consumer:0}},cleanUp:function cleanUp(id){if(this.elements[id]){delete this.elements[id]}}};var createEffect=function createEffect(callback,deps){return{callback:callback,deps:deps}};var updateEffect=function updateEffect(effect,callback,deps){effect.callback=callback;effect.oldDeps=effect.deps;effect.deps=deps;return effect};function depsEqual(oldDeps,newDeps){if(!oldDeps)return false;if(oldDeps.length!==newDeps.length)return false;return(0,_fastDeepEqual2.default)(oldDeps,newDeps)}function resolveEffect(node,effect){var deps=effect.deps,oldDeps=effect.oldDeps,callback=effect.callback;if(typeof deps==="undefined"){effect.cleanUp=callback()}else if(deps.length===0){if(node.element.used()===1){effect.cleanUp=callback()}}else{var areEqual=depsEqual(oldDeps,deps);if(!areEqual){effect.cleanUp=callback()}}}var createUseEffectHook=function createUseEffectHook(processor){processor.onNodeRemove(function(node){var element=node.element;var storage=Storage.get(element);storage.effects.forEach(function(effect){if(effect.cleanUp)effect.cleanUp()});Storage.cleanUp(node.element.id)});processor.onNodeOut(function(node){var element=node.element;var storage=Storage.get(element);if(storage.effects.length>0){storage.effects.forEach(function(effect){return resolveEffect(node,effect)})}});return function(callback,deps){(0,_isValidHookContext2.default)(processor);var node=processor.node();var element=node.element;var storage=Storage.get(element);if(element.used()===0){storage.effects.push(createEffect(callback,deps))}else{var index=storage.consumer;storage.consumer=index<storage.effects.length-1?storage.consumer+1:0;updateEffect(storage.effects[index],callback,deps)}}};exports.default=createUseEffectHook;createUseEffectHook.clear=function(){Storage.elements={}}},{"./utils/isValidHookContext":10,"fast-deep-equal":13}],6:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _isValidHookContext=require("./utils/isValidHookContext");var _isValidHookContext2=_interopRequireDefault(_isValidHookContext);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var createUseElementHook=function createUseElementHook(processor){return function(){(0,_isValidHookContext2.default)(processor);return processor.node().element}};exports.default=createUseElementHook},{"./utils/isValidHookContext":10}],7:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=createUsePubSubHook;var _isValidHookContext=require("./utils/isValidHookContext");var _isValidHookContext2=_interopRequireDefault(_isValidHookContext);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var subscribers={};var subscribe=function subscribe(element,type,callback){if(!subscribers[type])subscribers[type]={};subscribers[type][element.id]=callback;return function(){delete subscribers[type][element.id]}};var publish=function publish(type,payload){if(!subscribers[type])return;Object.keys(subscribers[type]).forEach(function(id){subscribers[type][id](payload)})};function createUsePubSubHook(processor){processor.onNodeRemove(function(node){Object.keys(subscribers).forEach(function(type){if(subscribers[type][node.element.id]){delete subscribers[type][node.element.id]}})});return function(scopedElement){(0,_isValidHookContext2.default)(processor);var node=processor.node();var el=scopedElement||node.element;var subscribeFunc=function subscribeFunc(){for(var _len=arguments.length,params=Array(_len),_key=0;_key<_len;_key++){params[_key]=arguments[_key]}return subscribe.apply(undefined,[el].concat(params))};var publishFunc=function publishFunc(){return publish.apply(undefined,arguments)};return{subscribe:subscribeFunc,publish:publishFunc,subscribers:subscribers}}}createUsePubSubHook.clear=function(){subscribers={}}},{"./utils/isValidHookContext":10}],8:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _slicedToArray=function(){function sliceIterator(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break}}catch(err){_d=true;_e=err}finally{try{if(!_n&&_i["return"])_i["return"]()}finally{if(_d)throw _e}}return _arr}return function(arr,i){if(Array.isArray(arr)){return arr}else if(Symbol.iterator in Object(arr)){return sliceIterator(arr,i)}else{throw new TypeError("Invalid attempt to destructure non-iterable instance")}}}();exports.default=createUseReducerHook;function _objectWithoutProperties(obj,keys){var target={};for(var i in obj){if(keys.indexOf(i)>=0)continue;if(!Object.prototype.hasOwnProperty.call(obj,i))continue;target[i]=obj[i]}return target}function createDispatchElement(dispatch){return function(_ref){var action=_ref.action,propsToAction=_ref.propsToAction,rest=_objectWithoutProperties(_ref,["action","propsToAction"]);if(action){dispatch(action)}else if(propsToAction){dispatch(propsToAction(rest))}else{throw new Error('<Dispatch> expects "action" or "propsToAction" prop.')}}}function createUseReducerHook(useState){return function(reducer,initialState){var _useState=useState(initialState),_useState2=_slicedToArray(_useState,2),state=_useState2[0],setState=_useState2[1];var dispatch=function dispatch(action){return setState(reducer(state(),action))};return[state,dispatch,createDispatchElement(dispatch),function(){return state()}]}}},{}],9:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=createUseStateHook;var _isValidHookContext=require("./utils/isValidHookContext");var _isValidHookContext2=_interopRequireDefault(_isValidHookContext);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var Storage={elements:{},get:function get(element){if(this.elements[element.id]){return this.elements[element.id]}return this.elements[element.id]={states:[],consumer:0}},cleanUp:function cleanUp(id){if(this.elements[id]){delete this.elements[id]}}};function createUseStateHook(processor){processor.onNodeRemove(function(node){return Storage.cleanUp(node.element.id)});return function(initialState){(0,_isValidHookContext2.default)(processor);var node=processor.node();var element=node.element;var storage=Storage.get(element);var index=void 0;if(element.used()===0){storage.states.push(initialState);index=storage.states.length-1}else{index=storage.consumer;storage.consumer=index<storage.states.length-1?storage.consumer+1:0}return[function(){return storage.states[index]},function(newState){storage.states[index]=newState;if(!element.isRunning()){node.rerun()}return newState}]}}createUseStateHook.clear=function(){Storage.elements={}}},{"./utils/isValidHookContext":10}],10:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=isValidHookContext;function isValidHookContext(processor){if(!processor){throw new Error("Something terribly wrong happened. The hook factory function is called without a processor.")}if(!processor.node()){throw new Error("Hooks must be called in the context of an ActML element.")}}},{}],11:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createRuntime=createRuntime;var _Processor=require("./Processor");var _Processor2=_interopRequireDefault(_Processor);var _isActMLElement=require("./utils/isActMLElement");var _isActMLElement2=_interopRequireDefault(_isActMLElement);var _ActElement=require("./ActElement");var _ActElement2=_interopRequireDefault(_ActElement);var _useElement=require("./hooks/useElement");var _useElement2=_interopRequireDefault(_useElement);var _usePubSub=require("./hooks/usePubSub");var _usePubSub2=_interopRequireDefault(_usePubSub);var _useState=require("./hooks/useState");var _useState2=_interopRequireDefault(_useState);var _useReducer=require("./hooks/useReducer");var _useReducer2=_interopRequireDefault(_useReducer);var _useEffect=require("./hooks/useEffect");var _useEffect2=_interopRequireDefault(_useEffect);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function createRuntime(){var processor=(0,_Processor2.default)();function A(func,props){for(var _len=arguments.length,children=Array(_len>2?_len-2:0),_key=2;_key<_len;_key++){children[_key-2]=arguments[_key]}return(0,_ActElement2.default)(func,props,children)}function run(element){if(!(0,_isActMLElement2.default)(element)){throw new Error("ActML element expected. Instead "+element.toString()+" passed.")}return processor.run(element)}var Fragment=function Fragment(_ref){var children=_ref.children;return children};var useElement=(0,_useElement2.default)(processor);var useState=(0,_useState2.default)(processor);var usePubSub=(0,_usePubSub2.default)(processor);var useReducer=(0,_useReducer2.default)(useState);var useEffect=(0,_useEffect2.default)(processor);return{A:A,run:run,Fragment:Fragment,processor:processor,useElement:useElement,usePubSub:usePubSub,useState:useState,useReducer:useReducer,useEffect:useEffect}}var runtime=createRuntime();module.exports=runtime;module.exports.createRuntime=createRuntime()},{"./ActElement":1,"./Processor":2,"./hooks/useEffect":5,"./hooks/useElement":6,"./hooks/usePubSub":7,"./hooks/useReducer":8,"./hooks/useState":9,"./utils/isActMLElement":12}],12:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=isActMLElement;function isActMLElement(element){return element&&element.__actml===true}},{}],13:[function(require,module,exports){"use strict";var isArray=Array.isArray;var keyList=Object.keys;var hasProp=Object.prototype.hasOwnProperty;module.exports=function equal(a,b){if(a===b)return true;if(a&&b&&typeof a=="object"&&typeof b=="object"){var arrA=isArray(a),arrB=isArray(b),i,length,key;if(arrA&&arrB){length=a.length;if(length!=b.length)return false;for(i=length;i--!==0;)if(!equal(a[i],b[i]))return false;return true}if(arrA!=arrB)return false;var dateA=a instanceof Date,dateB=b instanceof Date;if(dateA!=dateB)return false;if(dateA&&dateB)return a.getTime()==b.getTime();var regexpA=a instanceof RegExp,regexpB=b instanceof RegExp;if(regexpA!=regexpB)return false;if(regexpA&&regexpB)return a.toString()==b.toString();var keys=keyList(a);length=keys.length;if(length!==keyList(b).length)return false;for(i=length;i--!==0;)if(!hasProp.call(b,keys[i]))return false;for(i=length;i--!==0;){key=keys[i];if(!equal(a[key],b[key]))return false}return true}return a!==a&&b!==b}},{}]},{},[11])(11)});
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc