ripple 0.2.46 → 0.2.47
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/package.json +1 -1
- package/src/compiler/phases/1-parse/index.js +2 -2
- package/src/compiler/phases/2-analyze/index.js +640 -667
- package/src/compiler/phases/3-transform/index.js +1873 -1880
- package/src/compiler/phases/3-transform/segments.js +2 -2
- package/src/compiler/utils.js +596 -551
- package/src/jsx-runtime.js +12 -12
- package/src/runtime/array.js +611 -609
- package/src/runtime/index.js +29 -17
- package/src/runtime/internal/client/array.js +121 -121
- package/src/runtime/internal/client/blocks.js +206 -206
- package/src/runtime/internal/client/constants.js +2 -2
- package/src/runtime/internal/client/context.js +40 -40
- package/src/runtime/internal/client/events.js +191 -191
- package/src/runtime/internal/client/for.js +355 -355
- package/src/runtime/internal/client/if.js +25 -25
- package/src/runtime/internal/client/index.js +57 -56
- package/src/runtime/internal/client/operations.js +32 -32
- package/src/runtime/internal/client/portal.js +19 -19
- package/src/runtime/internal/client/render.js +132 -132
- package/src/runtime/internal/client/runtime.js +838 -835
- package/src/runtime/internal/client/template.js +36 -36
- package/src/runtime/internal/client/try.js +113 -113
- package/src/runtime/internal/client/types.d.ts +10 -10
- package/src/runtime/internal/client/utils.js +5 -5
- package/src/runtime/map.js +139 -139
- package/src/runtime/set.js +130 -130
- package/src/utils/ast.js +189 -189
- package/src/utils/builders.js +244 -244
- package/src/utils/sanitize_template_string.js +1 -1
- package/tests/__snapshots__/composite.test.ripple.snap +1 -1
- package/tests/accessors-props.test.ripple +9 -9
- package/tests/basic.test.ripple +4 -4
- package/tests/boundaries.test.ripple +17 -17
- package/tests/composite.test.ripple +43 -72
- package/types/index.d.ts +6 -2
package/src/runtime/map.js
CHANGED
|
@@ -5,143 +5,143 @@ const introspect_methods = ['entries', 'forEach', 'values', Symbol.iterator];
|
|
|
5
5
|
let init = false;
|
|
6
6
|
|
|
7
7
|
export class RippleMap extends Map {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
8
|
+
#tracked_size;
|
|
9
|
+
#tracked_items = new Map();
|
|
10
|
+
|
|
11
|
+
constructor(iterable) {
|
|
12
|
+
super();
|
|
13
|
+
|
|
14
|
+
var block = safe_scope();
|
|
15
|
+
|
|
16
|
+
if (iterable) {
|
|
17
|
+
for (var [key, value] of iterable) {
|
|
18
|
+
super.set(key, value);
|
|
19
|
+
this.#tracked_items.set(key, tracked(0, block));
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
this.#tracked_size = tracked(this.size, block);
|
|
24
|
+
|
|
25
|
+
if (!init) {
|
|
26
|
+
init = true;
|
|
27
|
+
this.#init();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
#init() {
|
|
32
|
+
var proto = RippleMap.prototype;
|
|
33
|
+
var map_proto = Map.prototype;
|
|
34
|
+
|
|
35
|
+
for (const method of introspect_methods) {
|
|
36
|
+
proto[method] = function (...v) {
|
|
37
|
+
this.$size;
|
|
38
|
+
this.#read_all();
|
|
39
|
+
|
|
40
|
+
return map_proto[method].apply(this, v);
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
get(key) {
|
|
46
|
+
var tracked_items = this.#tracked_items;
|
|
47
|
+
var t = tracked_items.get(key);
|
|
48
|
+
|
|
49
|
+
if (t === undefined) {
|
|
50
|
+
// same logic as has
|
|
51
|
+
this.$size;
|
|
52
|
+
} else {
|
|
53
|
+
get(t);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return super.get(key);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
has(key) {
|
|
60
|
+
var has = super.has(key);
|
|
61
|
+
var tracked_items = this.#tracked_items;
|
|
62
|
+
var t = tracked_items.get(key);
|
|
63
|
+
|
|
64
|
+
if (t === undefined) {
|
|
65
|
+
// if no tracked it also means super didn't have it
|
|
66
|
+
// It's not possible to have a disconnect, we tract each key
|
|
67
|
+
// If the key doesn't exist, track the size in case it's added later
|
|
68
|
+
// but don't create tracked entries willy-nilly to track all possible keys
|
|
69
|
+
this.$size;
|
|
70
|
+
} else {
|
|
71
|
+
get(t);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return has;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
set(key, value) {
|
|
78
|
+
var block = safe_scope();
|
|
79
|
+
var tracked_items = this.#tracked_items;
|
|
80
|
+
var t = tracked_items.get(key);
|
|
81
|
+
var prev_res = super.get(key);
|
|
82
|
+
|
|
83
|
+
super.set(key, value);
|
|
84
|
+
|
|
85
|
+
if (!t) {
|
|
86
|
+
tracked_items.set(key, tracked(0, block));
|
|
87
|
+
set(this.#tracked_size, this.size, block);
|
|
88
|
+
} else if (prev_res !== value) {
|
|
89
|
+
increment(t, block);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return this;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
delete(key) {
|
|
96
|
+
var block = safe_scope();
|
|
97
|
+
var tracked_items = this.#tracked_items;
|
|
98
|
+
var t = tracked_items.get(key);
|
|
99
|
+
var result = super.delete(key);
|
|
100
|
+
|
|
101
|
+
if (t) {
|
|
102
|
+
increment(t, block);
|
|
103
|
+
tracked_items.delete(key);
|
|
104
|
+
set(this.#tracked_size, this.size, block);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return result;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
clear() {
|
|
111
|
+
var block = safe_scope();
|
|
112
|
+
|
|
113
|
+
if (super.size === 0) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
for (var [_, t] of this.#tracked_items) {
|
|
118
|
+
increment(t, block);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
super.clear();
|
|
122
|
+
this.#tracked_items.clear();
|
|
123
|
+
set(this.#tracked_size, 0, block);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
keys() {
|
|
127
|
+
this.$size;
|
|
128
|
+
return super.keys();
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
#read_all() {
|
|
132
|
+
for (const [, t] of this.#tracked_items) {
|
|
133
|
+
get(t);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
get $size() {
|
|
138
|
+
return get(this.#tracked_size);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
toJSON() {
|
|
142
|
+
this.$size;
|
|
143
|
+
this.#read_all();
|
|
144
|
+
|
|
145
|
+
return [...this];
|
|
146
|
+
}
|
|
147
147
|
}
|
package/src/runtime/set.js
CHANGED
|
@@ -9,148 +9,148 @@ const new_other_methods = ['difference', 'intersection', 'symmetricDifference',
|
|
|
9
9
|
let init = false;
|
|
10
10
|
|
|
11
11
|
export class RippleSet extends Set {
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
#tracked_size;
|
|
13
|
+
#tracked_items = new Map();
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
constructor(iterable) {
|
|
16
|
+
super();
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
var block = safe_scope();
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
20
|
+
if (iterable) {
|
|
21
|
+
for (var item of iterable) {
|
|
22
|
+
super.add(item);
|
|
23
|
+
this.#tracked_items.set(item, tracked(0, block));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
this.#tracked_size = tracked(this.size, block);
|
|
28
|
+
|
|
29
|
+
if (!init) {
|
|
30
|
+
init = true;
|
|
31
|
+
this.#init();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
#init() {
|
|
36
|
+
var proto = RippleSet.prototype;
|
|
37
|
+
var set_proto = Set.prototype;
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
39
|
+
for (const method of introspect_methods) {
|
|
40
|
+
if (!(method in set_proto)) {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
proto[method] = function (...v) {
|
|
45
|
+
this.$size;
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
return set_proto[method].apply(this, v);
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
51
|
+
for (const method of compare_other_methods) {
|
|
52
|
+
if (!(method in set_proto)) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
proto[method] = function (other, ...v) {
|
|
57
|
+
this.$size;
|
|
58
|
+
|
|
59
|
+
if (other instanceof RippleSet) {
|
|
60
|
+
other.$size;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return set_proto[method].apply(this, [other, ...v]);
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
for (const method of new_other_methods) {
|
|
68
|
+
if (!(method in set_proto)) {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
proto[method] = function (other, ...v) {
|
|
73
|
+
this.$size;
|
|
74
|
+
|
|
75
|
+
if (other instanceof RippleSet) {
|
|
76
|
+
other.$size;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return new RippleSet(set_proto[method].apply(this, [other, ...v]));
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
add(value) {
|
|
85
|
+
var block = safe_scope();
|
|
86
|
+
|
|
87
|
+
if (!super.has(value)) {
|
|
88
|
+
super.add(value);
|
|
89
|
+
this.#tracked_items.set(value, tracked(0, block));
|
|
90
|
+
set(this.#tracked_size, this.size, block);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return this;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
delete(value) {
|
|
97
|
+
var block = safe_scope();
|
|
98
|
+
|
|
99
|
+
if (!super.delete(value)) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
var t = this.#tracked_items.get(value);
|
|
104
|
+
|
|
105
|
+
increment(t, block);
|
|
106
|
+
this.#tracked_items.delete(value);
|
|
107
|
+
set(this.#tracked_size, this.size, block);
|
|
108
|
+
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
has(value) {
|
|
113
|
+
var block = safe_scope();
|
|
114
|
+
var has = super.has(value);
|
|
115
|
+
var tracked_items = this.#tracked_items;
|
|
116
|
+
var t = tracked_items.get(value);
|
|
117
117
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
118
|
+
if (t === undefined) {
|
|
119
|
+
// if no tracked it also means super didn't have it
|
|
120
|
+
// It's not possible to have a disconnect, we track each value
|
|
121
|
+
// If the value doesn't exist, track the size in case it's added later
|
|
122
|
+
// but don't create tracked entries willy-nilly to track all possible values
|
|
123
|
+
this.$size;
|
|
124
|
+
} else {
|
|
125
|
+
get(t);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return has;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
clear() {
|
|
132
|
+
var block = safe_scope();
|
|
133
133
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
134
|
+
if (super.size === 0) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
137
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
138
|
+
for (var [_, t] of this.#tracked_items) {
|
|
139
|
+
increment(t, block);
|
|
140
|
+
}
|
|
141
141
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
142
|
+
super.clear();
|
|
143
|
+
this.#tracked_items.clear();
|
|
144
|
+
set(this.#tracked_size, 0, block);
|
|
145
|
+
}
|
|
146
146
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
147
|
+
get $size() {
|
|
148
|
+
return get(this.#tracked_size);
|
|
149
|
+
}
|
|
150
150
|
|
|
151
|
-
|
|
152
|
-
|
|
151
|
+
toJSON() {
|
|
152
|
+
this.$size;
|
|
153
153
|
|
|
154
|
-
|
|
155
|
-
|
|
154
|
+
return [...this];
|
|
155
|
+
}
|
|
156
156
|
}
|