@quenk/wml 2.11.1 → 2.11.4
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/lib/compile/codegen.d.ts +5 -1
- package/lib/compile/codegen.js +31 -6
- package/lib/compile/codegen.js.map +1 -1
- package/lib/compile/codegen.ts +45 -13
- package/lib/compile/transform.js +8 -5
- package/lib/compile/transform.js.map +1 -1
- package/lib/compile/transform.ts +12 -6
- package/lib/parse/ast.d.ts +22 -2
- package/lib/parse/ast.js +28 -2
- package/lib/parse/ast.js.map +1 -1
- package/lib/parse/ast.ts +31 -3
- package/lib/parse/generated.js +2316 -2207
- package/lib/parse/test.js +10 -1
- package/lib/parse/test.js.map +1 -1
- package/lib/parse/test.ts +21 -1
- package/lib/parse/wml.y +30 -11
- package/package.json +1 -1
package/lib/parse/test.js
CHANGED
|
@@ -8,6 +8,9 @@ exports.tests = {
|
|
|
8
8
|
'should parse named import': {
|
|
9
9
|
input: "{% import (B) from \"path/to/a/b\" %}"
|
|
10
10
|
},
|
|
11
|
+
'should detect exact duplicate imports': {
|
|
12
|
+
input: "{% import (A) from \"b\" %} {% import (A) from \"b\" %}"
|
|
13
|
+
},
|
|
11
14
|
'should parse a self closing tag': {
|
|
12
15
|
input: '<simple/>'
|
|
13
16
|
},
|
|
@@ -67,6 +70,9 @@ exports.tests = {
|
|
|
67
70
|
'{% endfor %}' +
|
|
68
71
|
'</root>'
|
|
69
72
|
},
|
|
73
|
+
'should parse for from statements': {
|
|
74
|
+
input: "\n <root>\n {% for value=1 to 30 %}\n <b>{{value}}</b>\n {% endfor %}\n </root>\n "
|
|
75
|
+
},
|
|
70
76
|
'should parse if then expressions': {
|
|
71
77
|
input: '<Html id={{@id}}>{{ if @check() then a else b }}</Html>'
|
|
72
78
|
},
|
|
@@ -145,7 +151,10 @@ exports.tests = {
|
|
|
145
151
|
input: '<Input name={{@level.name}}/>'
|
|
146
152
|
},
|
|
147
153
|
'[view] should allow inline context import': {
|
|
148
|
-
input: '{% view MyView (Context from "./") %}
|
|
154
|
+
input: '{% view MyView (Context from "./") %} <div>{{@text}}</div>'
|
|
155
|
+
},
|
|
156
|
+
'[view] should allow multiple inline context imports': {
|
|
157
|
+
input: "\n {% view MyView (Context from \"./\") %} <div>{{@text}}</div>\n {% view YourView (Context from \"./\") %} <div/>\n "
|
|
149
158
|
},
|
|
150
159
|
'should allow construct expression': {
|
|
151
160
|
input: '<TextView android:thing={value=1}>{{Person(@value)}}</TextView>'
|
package/lib/parse/test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"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"}
|
package/lib/parse/test.ts
CHANGED
|
@@ -6,6 +6,9 @@ export const tests: { [key: string]: any } = {
|
|
|
6
6
|
'should parse named import': {
|
|
7
7
|
input: `{% import (B) from "path/to/a/b" %}`
|
|
8
8
|
},
|
|
9
|
+
'should detect exact duplicate imports': {
|
|
10
|
+
input: `{% import (A) from "b" %} {% import (A) from "b" %}`
|
|
11
|
+
},
|
|
9
12
|
'should parse a self closing tag': {
|
|
10
13
|
input: '<simple/>'
|
|
11
14
|
},
|
|
@@ -71,6 +74,16 @@ export const tests: { [key: string]: any } = {
|
|
|
71
74
|
'</root>'
|
|
72
75
|
|
|
73
76
|
},
|
|
77
|
+
'should parse for from statements': {
|
|
78
|
+
|
|
79
|
+
input: `
|
|
80
|
+
<root>
|
|
81
|
+
{% for value=1 to 30 %}
|
|
82
|
+
<b>{{value}}</b>
|
|
83
|
+
{% endfor %}
|
|
84
|
+
</root>
|
|
85
|
+
`
|
|
86
|
+
},
|
|
74
87
|
'should parse if then expressions': {
|
|
75
88
|
|
|
76
89
|
input: '<Html id={{@id}}>{{ if @check() then a else b }}</Html>'
|
|
@@ -225,8 +238,15 @@ export const tests: { [key: string]: any } = {
|
|
|
225
238
|
},
|
|
226
239
|
'[view] should allow inline context import': {
|
|
227
240
|
|
|
228
|
-
input: '{% view MyView (Context from "./") %}
|
|
241
|
+
input: '{% view MyView (Context from "./") %} <div>{{@text}}</div>'
|
|
242
|
+
|
|
243
|
+
},
|
|
244
|
+
'[view] should allow multiple inline context imports': {
|
|
229
245
|
|
|
246
|
+
input: `
|
|
247
|
+
{% view MyView (Context from "./") %} <div>{{@text}}</div>
|
|
248
|
+
{% view YourView (Context from "./") %} <div/>
|
|
249
|
+
`
|
|
230
250
|
},
|
|
231
251
|
'should allow construct expression': {
|
|
232
252
|
|
package/lib/parse/wml.y
CHANGED
|
@@ -100,6 +100,7 @@ Text ({DoubleStringCharacter}*)|({SingleStringCharacter}*)
|
|
|
100
100
|
<CONTROL>'false' return 'FALSE';
|
|
101
101
|
<CONTROL>'where' return 'WHERE';
|
|
102
102
|
<CONTROL>'let' return 'LET';
|
|
103
|
+
<CONTROL>'to' return 'TO';
|
|
103
104
|
<CONTROL>{Constructor} return 'CONSTRUCTOR';
|
|
104
105
|
<CONTROL>{Identifier} return 'IDENTIFIER';
|
|
105
106
|
<CONTROL>'@' return '@';
|
|
@@ -372,15 +373,18 @@ view_statement
|
|
|
372
373
|
;
|
|
373
374
|
|
|
374
375
|
view_statement_context
|
|
375
|
-
:
|
|
376
|
+
: constructor_type
|
|
376
377
|
{ $$ = $1; }
|
|
377
378
|
|
|
378
|
-
|
|
|
379
|
-
{$$ =
|
|
380
|
-
$3, @$);
|
|
381
|
-
}
|
|
379
|
+
| context_from_statement
|
|
380
|
+
{$$ = $1; }
|
|
382
381
|
;
|
|
383
382
|
|
|
383
|
+
context_from_statement
|
|
384
|
+
: constructor_type FROM string_literal
|
|
385
|
+
{$$ = new yy.ast.ContextFromStatement($1, $3, @$); }
|
|
386
|
+
;
|
|
387
|
+
|
|
384
388
|
view_directives
|
|
385
389
|
: let_statement
|
|
386
390
|
{ $$ = [$1]; }
|
|
@@ -468,7 +472,7 @@ constructor_type
|
|
|
468
472
|
{ $$ = new yy.ast.ConstructorType($1, [], @$); }
|
|
469
473
|
|
|
470
474
|
| cons type_parameters
|
|
471
|
-
{ $$ = new yy.ast.ConstructorType($1, $2, @$);
|
|
475
|
+
{ $$ = new yy.ast.ConstructorType($1, $2, @$); }
|
|
472
476
|
;
|
|
473
477
|
|
|
474
478
|
record_type
|
|
@@ -680,6 +684,9 @@ for_statement
|
|
|
680
684
|
|
|
681
685
|
| for_of
|
|
682
686
|
{$$ = $1;}
|
|
687
|
+
|
|
688
|
+
| for_from
|
|
689
|
+
{$$ + $1;}
|
|
683
690
|
;
|
|
684
691
|
|
|
685
692
|
for_in
|
|
@@ -702,20 +709,32 @@ for_of
|
|
|
702
709
|
{$$ = new yy.ast.ForOfStatement($3, $5, $7, $11, @$);}
|
|
703
710
|
;
|
|
704
711
|
|
|
712
|
+
for_from
|
|
713
|
+
: '{%' FOR untyped_parameter '=' expression TO expression '%}'
|
|
714
|
+
children
|
|
715
|
+
'{%' ENDFOR '%}'
|
|
716
|
+
{$$ = new yy.ast.ForFromStatement($3, $5, $7, $9, [], @$);}
|
|
717
|
+
;
|
|
718
|
+
|
|
705
719
|
for_parameters
|
|
706
|
-
:
|
|
720
|
+
: for_parameter
|
|
707
721
|
{$$ = [$1]; }
|
|
708
722
|
|
|
709
|
-
| untyped_parameter
|
|
710
|
-
{ $$ = [$1]; }
|
|
711
|
-
|
|
712
723
|
| for_parameters ',' parameter
|
|
713
724
|
{$$ = $1.concat($3); }
|
|
714
725
|
|
|
715
726
|
| for_parameters ',' untyped_parameter
|
|
716
727
|
{$$ = $1.concat($3); }
|
|
717
728
|
;
|
|
718
|
-
|
|
729
|
+
|
|
730
|
+
for_parameter
|
|
731
|
+
: parameter
|
|
732
|
+
{$$ = $1; }
|
|
733
|
+
|
|
734
|
+
| untyped_parameter
|
|
735
|
+
{ $$ = $1; }
|
|
736
|
+
;
|
|
737
|
+
|
|
719
738
|
if_statement
|
|
720
739
|
: '{%' IF expression '%}' children '{%' ENDIF '%}'
|
|
721
740
|
{$$ = new yy.ast.IfStatement($3, $5, undefined, @$); }
|