vsn 0.1.24 → 0.1.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/demo/demo.html +18 -7
- package/demo/vsn.js +1 -0
- package/dist/AST/ArithmeticAssignmentNode.d.ts +23 -0
- package/dist/AST/ArithmeticAssignmentNode.js +313 -0
- package/dist/AST/ArithmeticAssignmentNode.js.map +1 -0
- package/dist/AST/ArithmeticNode.d.ts +15 -0
- package/dist/AST/ArithmeticNode.js +114 -0
- package/dist/AST/ArithmeticNode.js.map +1 -0
- package/dist/AST/ArrayNode.d.ts +14 -0
- package/dist/AST/ArrayNode.js +114 -0
- package/dist/AST/ArrayNode.js.map +1 -0
- package/dist/AST/BlockNode.d.ts +11 -0
- package/dist/AST/BlockNode.js +98 -0
- package/dist/AST/BlockNode.js.map +1 -0
- package/dist/AST/BooleanLiteralNode.d.ts +5 -0
- package/dist/AST/BooleanLiteralNode.js +31 -0
- package/dist/AST/BooleanLiteralNode.js.map +1 -0
- package/dist/AST/ComparisonNode.d.ts +15 -0
- package/dist/AST/ComparisonNode.js +120 -0
- package/dist/AST/ComparisonNode.js.map +1 -0
- package/dist/AST/ConditionalNode.d.ts +13 -0
- package/dist/AST/ConditionalNode.js +95 -0
- package/dist/AST/ConditionalNode.js.map +1 -0
- package/dist/AST/ElementAttributeNode.d.ts +18 -0
- package/dist/AST/ElementAttributeNode.js +159 -0
- package/dist/AST/ElementAttributeNode.js.map +1 -0
- package/dist/AST/ElementQueryNode.d.ts +12 -0
- package/dist/AST/ElementQueryNode.js +111 -0
- package/dist/AST/ElementQueryNode.js.map +1 -0
- package/dist/AST/ElementStyleNode.d.ts +18 -0
- package/dist/AST/ElementStyleNode.js +159 -0
- package/dist/AST/ElementStyleNode.js.map +1 -0
- package/dist/AST/ForStatementNode.d.ts +17 -0
- package/dist/AST/ForStatementNode.js +121 -0
- package/dist/AST/ForStatementNode.js.map +1 -0
- package/dist/AST/FunctionArgumentNode.d.ts +11 -0
- package/dist/AST/FunctionArgumentNode.js +100 -0
- package/dist/AST/FunctionArgumentNode.js.map +1 -0
- package/dist/AST/FunctionCallNode.d.ts +13 -0
- package/dist/AST/FunctionCallNode.js +102 -0
- package/dist/AST/FunctionCallNode.js.map +1 -0
- package/dist/AST/IfStatementNode.d.ts +14 -0
- package/dist/AST/IfStatementNode.js +128 -0
- package/dist/AST/IfStatementNode.js.map +1 -0
- package/dist/AST/InNode.d.ts +15 -0
- package/dist/AST/InNode.js +107 -0
- package/dist/AST/InNode.js.map +1 -0
- package/dist/AST/IndexNode.d.ts +16 -0
- package/dist/AST/IndexNode.js +126 -0
- package/dist/AST/IndexNode.js.map +1 -0
- package/dist/AST/LiteralNode.d.ts +10 -0
- package/dist/AST/LiteralNode.js +74 -0
- package/dist/AST/LiteralNode.js.map +1 -0
- package/dist/AST/Node.d.ts +19 -0
- package/dist/AST/Node.js +117 -0
- package/dist/AST/Node.js.map +1 -0
- package/dist/AST/NotNode.d.ts +12 -0
- package/dist/AST/NotNode.js +103 -0
- package/dist/AST/NotNode.js.map +1 -0
- package/dist/AST/NumberLiteralNode.d.ts +5 -0
- package/dist/AST/NumberLiteralNode.js +36 -0
- package/dist/AST/NumberLiteralNode.js.map +1 -0
- package/dist/AST/ObjectNode.d.ts +14 -0
- package/dist/AST/ObjectNode.js +131 -0
- package/dist/AST/ObjectNode.js.map +1 -0
- package/dist/AST/RootScopeMemberNode.d.ts +11 -0
- package/dist/AST/RootScopeMemberNode.js +87 -0
- package/dist/AST/RootScopeMemberNode.js.map +1 -0
- package/dist/AST/ScopeMemberNode.d.ts +12 -0
- package/dist/AST/ScopeMemberNode.js +128 -0
- package/dist/AST/ScopeMemberNode.js.map +1 -0
- package/dist/AST/UnitLiteralNode.d.ts +15 -0
- package/dist/AST/UnitLiteralNode.js +72 -0
- package/dist/AST/UnitLiteralNode.js.map +1 -0
- package/dist/AST.d.ts +9 -61
- package/dist/AST.js +84 -1413
- package/dist/AST.js.map +1 -1
- package/dist/Attribute.d.ts +1 -1
- package/dist/Attribute.js +3 -3
- package/dist/Attribute.js.map +1 -1
- package/dist/Configuration.d.ts +1 -1
- package/dist/Configuration.js +4 -4
- package/dist/Configuration.js.map +1 -1
- package/dist/Controller.d.ts +12 -4
- package/dist/Controller.js +38 -6
- package/dist/Controller.js.map +1 -1
- package/dist/DOM/DOMObject.d.ts +1 -1
- package/dist/DOM/DOMObject.js +2 -2
- package/dist/DOM/DOMObject.js.map +1 -1
- package/dist/DOM.d.ts +1 -1
- package/dist/DOM.js +4 -4
- package/dist/DOM.js.map +1 -1
- package/dist/EventDispatcher.d.ts +29 -0
- package/dist/EventDispatcher.js +132 -0
- package/dist/EventDispatcher.js.map +1 -0
- package/dist/Formats.js +2 -2
- package/dist/Formats.js.map +1 -1
- package/dist/MessageList.d.ts +14 -0
- package/dist/MessageList.js +88 -0
- package/dist/MessageList.js.map +1 -0
- package/dist/Model/Field.d.ts +8 -0
- package/dist/Model/Field.js +38 -0
- package/dist/Model/Field.js.map +1 -0
- package/dist/Model.d.ts +12 -0
- package/dist/Model.js +61 -0
- package/dist/Model.js.map +1 -0
- package/dist/Registry.d.ts +5 -2
- package/dist/Registry.js +17 -16
- package/dist/Registry.js.map +1 -1
- package/dist/Scope/DynamicScopeData.d.ts +6 -0
- package/dist/Scope/DynamicScopeData.js +54 -0
- package/dist/Scope/DynamicScopeData.js.map +1 -0
- package/dist/Scope/QueryReference.d.ts +10 -0
- package/dist/Scope/QueryReference.js +103 -0
- package/dist/Scope/QueryReference.js.map +1 -0
- package/dist/Scope/ScopeData.d.ts +4 -0
- package/dist/Scope/ScopeData.js +40 -0
- package/dist/Scope/ScopeData.js.map +1 -0
- package/dist/Scope/ScopeDataAbstract.d.ts +22 -0
- package/dist/Scope/ScopeDataAbstract.js +137 -0
- package/dist/Scope/ScopeDataAbstract.js.map +1 -0
- package/dist/Scope/ScopeReference.d.ts +10 -0
- package/dist/Scope/ScopeReference.js +73 -0
- package/dist/Scope/ScopeReference.js.map +1 -0
- package/dist/Scope/ScopedVariableType.d.ts +6 -0
- package/dist/Scope/ScopedVariableType.js +14 -0
- package/dist/Scope/ScopedVariableType.js.map +1 -0
- package/dist/Scope/WrappedArray.d.ts +16 -0
- package/dist/Scope/WrappedArray.js +121 -0
- package/dist/Scope/WrappedArray.js.map +1 -0
- package/dist/Scope/properties/Property.d.ts +18 -0
- package/dist/Scope/properties/Property.js +93 -0
- package/dist/Scope/properties/Property.js.map +1 -0
- package/dist/Scope.d.ts +4 -48
- package/dist/Scope.js +39 -324
- package/dist/Scope.js.map +1 -1
- package/dist/SimplePromise.d.ts +42 -0
- package/dist/SimplePromise.js +217 -0
- package/dist/SimplePromise.js.map +1 -0
- package/dist/Tag.js +11 -5
- package/dist/Tag.js.map +1 -1
- package/dist/Types.d.ts +1 -0
- package/dist/Types.js +8 -1
- package/dist/Types.js.map +1 -1
- package/dist/Validators.d.ts +7 -0
- package/dist/Validators.js +54 -0
- package/dist/Validators.js.map +1 -0
- package/dist/attributes/Bind.js +1 -1
- package/dist/attributes/Bind.js.map +1 -1
- package/dist/attributes/JSONAttribute.js.map +1 -1
- package/dist/attributes/List.js +7 -7
- package/dist/attributes/List.js.map +1 -1
- package/dist/attributes/On.js +4 -1
- package/dist/attributes/On.js.map +1 -1
- package/dist/attributes/Radio.js +4 -2
- package/dist/attributes/Radio.js.map +1 -1
- package/dist/attributes/ScopeChange.js +1 -1
- package/dist/attributes/ScopeChange.js.map +1 -1
- package/dist/attributes/SetAttribute.js.map +1 -1
- package/dist/attributes/StandardAttribute.js +1 -1
- package/dist/attributes/StandardAttribute.js.map +1 -1
- package/dist/attributes/StyleAttribute.js +1 -1
- package/dist/attributes/StyleAttribute.js.map +1 -1
- package/dist/{Vision.d.ts → vsn.d.ts} +7 -2
- package/dist/{Vision.js → vsn.js} +21 -12
- package/dist/vsn.js.map +1 -0
- package/package.json +9 -13
- package/src/AST/ArithmeticAssignmentNode.ts +236 -0
- package/src/AST/ArithmeticNode.ts +52 -0
- package/src/AST/ArrayNode.ts +39 -0
- package/src/AST/BlockNode.ts +25 -0
- package/src/AST/BooleanLiteralNode.ts +10 -0
- package/src/AST/ComparisonNode.ts +57 -0
- package/src/AST/ConditionalNode.ts +36 -0
- package/src/AST/ElementAttributeNode.ts +63 -0
- package/src/AST/ElementQueryNode.ts +25 -0
- package/src/AST/ElementStyleNode.ts +63 -0
- package/src/AST/ForStatementNode.ts +59 -0
- package/src/AST/FunctionArgumentNode.ts +27 -0
- package/src/AST/FunctionCallNode.ts +32 -0
- package/src/AST/IfStatementNode.ts +67 -0
- package/src/AST/InNode.ts +46 -0
- package/src/AST/IndexNode.ts +61 -0
- package/src/AST/LiteralNode.ts +17 -0
- package/src/AST/Node.ts +71 -0
- package/src/AST/NotNode.ts +41 -0
- package/src/AST/NumberLiteralNode.ts +14 -0
- package/src/AST/ObjectNode.ts +55 -0
- package/src/AST/RootScopeMemberNode.ts +25 -0
- package/src/AST/ScopeMemberNode.ts +53 -0
- package/src/AST/UnitLiteralNode.ts +51 -0
- package/src/AST.ts +45 -1014
- package/src/Attribute.ts +2 -2
- package/src/Configuration.ts +3 -3
- package/src/Controller.ts +31 -6
- package/src/DOM/DOMObject.ts +1 -1
- package/src/DOM.ts +4 -4
- package/src/EventDispatcher.ts +134 -0
- package/src/Formats.ts +2 -2
- package/src/MessageList.ts +81 -0
- package/src/Model/Field.ts +20 -0
- package/src/Model.ts +43 -0
- package/src/Registry.ts +13 -5
- package/src/Scope/DynamicScopeData.ts +29 -0
- package/src/Scope/QueryReference.ts +29 -0
- package/src/Scope/ScopeData.ts +21 -0
- package/src/Scope/ScopeDataAbstract.ts +126 -0
- package/src/Scope/ScopeReference.ts +30 -0
- package/src/Scope/ScopedVariableType.ts +7 -0
- package/src/Scope/WrappedArray.ts +88 -0
- package/src/Scope/properties/Property.ts +79 -0
- package/src/Scope.ts +35 -251
- package/src/SimplePromise.ts +219 -0
- package/src/Tag.ts +9 -5
- package/src/Types.ts +6 -1
- package/src/Validators.ts +45 -0
- package/src/attributes/Bind.ts +3 -2
- package/src/attributes/JSONAttribute.ts +2 -1
- package/src/attributes/List.ts +4 -4
- package/src/attributes/On.ts +2 -0
- package/src/attributes/Radio.ts +5 -3
- package/src/attributes/ScopeChange.ts +2 -2
- package/src/attributes/SetAttribute.ts +2 -1
- package/src/attributes/StandardAttribute.ts +1 -1
- package/src/attributes/StyleAttribute.ts +3 -2
- package/src/attributes/TypeAttribute.ts +1 -1
- package/src/{Vision.ts → vsn.ts} +12 -5
- package/test/AST/ArithmeticAssignmentNode.spec.ts +47 -0
- package/test/AST.spec.ts +3 -2
- package/test/Controller.spec.ts +44 -0
- package/test/DOM.spec.ts +1 -1
- package/test/MessageList.spec.ts +101 -0
- package/test/Model/DataModel.spec.ts +0 -0
- package/test/Scope/DynamicScopeData.spec.ts +141 -0
- package/test/Scope.spec.ts +15 -3
- package/test/SimplePromise.spec.ts +271 -0
- package/test/Tag/TagList.spec.ts +1 -1
- package/test/attributes/Bind.spec.ts +5 -5
- package/test/attributes/JSONAttribute.spec.ts +1 -1
- package/test/attributes/ListItem.spec.ts +1 -1
- package/webpack.config.js +2 -2
- package/demo/vision.js +0 -1
- package/dist/Vision.js.map +0 -1
- package/main.py +0 -16
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import {Scope} from "../Scope";
|
|
2
|
+
import {DOM} from "../DOM";
|
|
3
|
+
import {Tag} from "../Tag";
|
|
4
|
+
import {BlockType, Token, TokenType, Tree, TreeNode} from "../AST";
|
|
5
|
+
import {Node} from "./Node";
|
|
6
|
+
|
|
7
|
+
export class ObjectNode extends Node implements TreeNode {
|
|
8
|
+
constructor(
|
|
9
|
+
public readonly keys: Node[],
|
|
10
|
+
public readonly values: Node[]
|
|
11
|
+
) {
|
|
12
|
+
super();
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
protected _getChildNodes(): Node[] {
|
|
16
|
+
return new Array(...this.values);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
async evaluate(scope: Scope, dom: DOM, tag: Tag = null) {
|
|
20
|
+
const obj: Scope = new Scope();
|
|
21
|
+
for (let i = 0; i < this.values.length; i++) {
|
|
22
|
+
const key = this.keys[i];
|
|
23
|
+
const val = this.values[i];
|
|
24
|
+
obj.set(await key.evaluate(scope, dom, tag), await val.evaluate(scope, dom, tag));
|
|
25
|
+
}
|
|
26
|
+
return obj;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
public static match(tokens: Token[]): boolean {
|
|
30
|
+
return tokens[0].type === TokenType.L_BRACE;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
public static parse(lastNode, token, tokens: Token[]): ObjectNode {
|
|
34
|
+
const valueTokens: Token[] = Tree.getNextStatementTokens(tokens);
|
|
35
|
+
const keys: Node[] = [];
|
|
36
|
+
const values: Node[] = [];
|
|
37
|
+
|
|
38
|
+
while (valueTokens.length > 0) {
|
|
39
|
+
const key: Token[] = Tree.getTokensUntil(valueTokens, TokenType.COLON, false);
|
|
40
|
+
if (valueTokens[0].type !== TokenType.COLON)
|
|
41
|
+
throw Error('Invalid object literal syntax. Expecting :');
|
|
42
|
+
valueTokens.splice(0, 1); // Consume :
|
|
43
|
+
const val: Token[] = Tree.getTokensUntil(valueTokens, TokenType.COMMA, true, false, true, {
|
|
44
|
+
type: BlockType.STATEMENT,
|
|
45
|
+
open: null,
|
|
46
|
+
close: null,
|
|
47
|
+
openCharacter: null,
|
|
48
|
+
closeCharacter: null
|
|
49
|
+
});
|
|
50
|
+
keys.push(Tree.processTokens(key));
|
|
51
|
+
values.push(Tree.processTokens(val));
|
|
52
|
+
}
|
|
53
|
+
return new ObjectNode(keys, values);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {Scope} from "../Scope";
|
|
2
|
+
import {DOM} from "../DOM";
|
|
3
|
+
import {Tag} from "../Tag";
|
|
4
|
+
import {TreeNode} from "../AST";
|
|
5
|
+
import {Node} from "./Node";
|
|
6
|
+
|
|
7
|
+
export class RootScopeMemberNode<T = any> extends Node implements TreeNode {
|
|
8
|
+
constructor(
|
|
9
|
+
public readonly name: TreeNode<string>
|
|
10
|
+
) {
|
|
11
|
+
super();
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
protected _getChildNodes(): Node[] {
|
|
15
|
+
return [
|
|
16
|
+
this.name as Node
|
|
17
|
+
]
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async evaluate(scope: Scope, dom: DOM, tag: Tag = null) {
|
|
21
|
+
const name = await this.name.evaluate(scope, dom, tag);
|
|
22
|
+
const value = scope.get(name);
|
|
23
|
+
return value instanceof Scope && value.wrapped || value;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import {Scope} from "../Scope";
|
|
2
|
+
import {DOM} from "../DOM";
|
|
3
|
+
import {Tag} from "../Tag";
|
|
4
|
+
import {TagList} from "../Tag/List";
|
|
5
|
+
import {DOMObject} from "../DOM/DOMObject";
|
|
6
|
+
import {TreeNode} from "../AST";
|
|
7
|
+
import {Node} from "./Node";
|
|
8
|
+
import {ElementQueryNode} from "./ElementQueryNode";
|
|
9
|
+
|
|
10
|
+
export class ScopeMemberNode extends Node implements TreeNode {
|
|
11
|
+
constructor(
|
|
12
|
+
public readonly scope: TreeNode<Scope>,
|
|
13
|
+
public readonly name: TreeNode<string>
|
|
14
|
+
) {
|
|
15
|
+
super();
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
protected _getChildNodes(): Node[] {
|
|
19
|
+
return [
|
|
20
|
+
this.scope as Node,
|
|
21
|
+
this.name as Node
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async evaluate(scope: Scope, dom: DOM, tag: Tag = null) {
|
|
26
|
+
let scopes = [];
|
|
27
|
+
const values = [];
|
|
28
|
+
|
|
29
|
+
if (this.scope instanceof ElementQueryNode) {
|
|
30
|
+
scopes = await this.scope.evaluate(scope, dom, tag);
|
|
31
|
+
} else {
|
|
32
|
+
const evalScope = await this.scope.evaluate(scope, dom, tag);
|
|
33
|
+
if (evalScope instanceof TagList) {
|
|
34
|
+
scopes = evalScope;
|
|
35
|
+
} else {
|
|
36
|
+
scopes.push(evalScope);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
for (let parent of scopes) {
|
|
41
|
+
if (parent instanceof DOMObject)
|
|
42
|
+
parent = parent.scope;
|
|
43
|
+
|
|
44
|
+
if (!parent) {
|
|
45
|
+
throw Error(`Cannot access "${await this.name.evaluate(scope, dom, tag)}" of undefined.`);
|
|
46
|
+
}
|
|
47
|
+
const name = await this.name.evaluate(scope, dom, tag);
|
|
48
|
+
const value: any = parent.get(name, false);
|
|
49
|
+
values.push(value instanceof Scope && value.wrapped || value);
|
|
50
|
+
}
|
|
51
|
+
return values.length === 1 ? values[0] : values;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import {LiteralNode} from "./LiteralNode";
|
|
2
|
+
|
|
3
|
+
export class UnitLiteral {
|
|
4
|
+
protected _amount: number;
|
|
5
|
+
protected _unit: string;
|
|
6
|
+
|
|
7
|
+
constructor(
|
|
8
|
+
protected _value: any
|
|
9
|
+
) {
|
|
10
|
+
this.value = this._value;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
get amount(): number {
|
|
14
|
+
return this._amount;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
get unit(): string {
|
|
18
|
+
return this._unit;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
get value(): string {
|
|
22
|
+
return `${this._amount}${this._unit}`;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
set value(value: string) {
|
|
26
|
+
if (value.indexOf('.') > -1) {
|
|
27
|
+
this._amount = parseFloat(value)
|
|
28
|
+
} else {
|
|
29
|
+
this._amount = parseInt(value);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (isNaN(this._amount))
|
|
33
|
+
this._amount = 0;
|
|
34
|
+
|
|
35
|
+
const unit = /[^\d.]+$/.exec(value);
|
|
36
|
+
this._unit = unit && unit[0] || '';
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
public toString() {
|
|
40
|
+
return this.value;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
export class UnitLiteralNode extends LiteralNode<UnitLiteral> {
|
|
46
|
+
constructor(
|
|
47
|
+
_value: any
|
|
48
|
+
) {
|
|
49
|
+
super(new UnitLiteral(_value));
|
|
50
|
+
}
|
|
51
|
+
}
|