aberdeen 0.2.1 → 0.2.3

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.
Files changed (51) hide show
  1. package/dist/aberdeen.d.ts +573 -0
  2. package/dist/aberdeen.js +1756 -0
  3. package/dist/aberdeen.js.map +1 -0
  4. package/dist/prediction.d.ts +29 -0
  5. package/dist/prediction.js +110 -0
  6. package/dist/prediction.js.map +1 -0
  7. package/dist/route.d.ts +16 -0
  8. package/dist/route.js +119 -0
  9. package/dist/route.js.map +1 -0
  10. package/dist/transitions.d.ts +18 -0
  11. package/dist/transitions.js +67 -0
  12. package/dist/transitions.js.map +1 -0
  13. package/package.json +5 -2
  14. package/.github/workflows/deploy.yml +0 -43
  15. package/.vscode/launch.json +0 -23
  16. package/examples/input/index.html +0 -8
  17. package/examples/input/input.css +0 -56
  18. package/examples/input/input.js +0 -66
  19. package/examples/list/index.html +0 -7
  20. package/examples/list/list.js +0 -47
  21. package/examples/router/index.html +0 -8
  22. package/examples/router/page-home.js +0 -12
  23. package/examples/router/page-list.js +0 -35
  24. package/examples/router/page-settings.js +0 -6
  25. package/examples/router/router.js +0 -76
  26. package/examples/router/style.css +0 -88
  27. package/examples/tic-tac-toe/index.html +0 -8
  28. package/examples/tic-tac-toe/tic-tac-toe.css +0 -50
  29. package/examples/tic-tac-toe/tic-tac-toe.js +0 -90
  30. package/tests/_fakedom.js +0 -255
  31. package/tests/_init.js +0 -81
  32. package/tests/array.js +0 -109
  33. package/tests/binding.js +0 -106
  34. package/tests/browsers.js +0 -22
  35. package/tests/clean.js +0 -26
  36. package/tests/count.js +0 -105
  37. package/tests/create.js +0 -92
  38. package/tests/destroy.js +0 -270
  39. package/tests/dom.js +0 -219
  40. package/tests/errors.js +0 -114
  41. package/tests/immediate.js +0 -87
  42. package/tests/map.js +0 -76
  43. package/tests/objmap.js +0 -40
  44. package/tests/onEach.js +0 -392
  45. package/tests/prediction.js +0 -97
  46. package/tests/props.js +0 -49
  47. package/tests/schedule.js +0 -44
  48. package/tests/scope.js +0 -277
  49. package/tests/sort.js +0 -105
  50. package/tests/store.js +0 -254
  51. package/tsconfig.json +0 -67
package/tests/props.js DELETED
@@ -1,49 +0,0 @@
1
- describe('Props', function() {
2
- it('Sets and unsets classes', () => {
3
- let cnt1 = 0, cnt2 = 0, cnt3 = 0
4
- let classObj = new Store({a: false, b: true, c: undefined})
5
- mount(document.body, () => {
6
- cnt1++
7
- node('div', () => {
8
- cnt2++
9
- observe(() => {
10
- cnt3++
11
- prop({class: classObj.get()})
12
- })
13
- })
14
- })
15
-
16
- passTime()
17
- assertBody(`div{@class="b"}`)
18
-
19
- classObj.merge({a: true, d: true})
20
- passTime()
21
- assertBody(`div{@class="a b d"}`)
22
-
23
- classObj.merge({a: null}) // Removed from div
24
- classObj.delete('b') // Won't disappear
25
- passTime()
26
- assertBody(`div{@class="b d"}`)
27
-
28
- assertEqual([cnt1,cnt2,cnt3], [1,1,3])
29
- })
30
-
31
- it('Defines and removes event listeners', () => {
32
- let store = new Store(true)
33
- let el;
34
- let myFunc = ()=>{}
35
- mount(document.body, () => {
36
- node('div', () => {
37
- el = getParentElement()
38
- if (store.get()) prop({click: myFunc})
39
- })
40
- })
41
-
42
- passTime()
43
- assertEqual(el.events, {click: new Set([myFunc])})
44
-
45
- store.set(false)
46
- passTime()
47
- assertEqual(el.events, {click: new Set()})
48
- })
49
- })
package/tests/schedule.js DELETED
@@ -1,44 +0,0 @@
1
- describe('DOM read/write scheduler', function() {
2
-
3
- it('orders in batches', () => {
4
- let order = ''
5
- let store = new Store('a')
6
- mount(document.body, () => {
7
- node(store.get())
8
- order += store.get()
9
- })
10
- scheduleDomReader(() => order += 'r1')
11
- scheduleDomWriter(() => order += 'w1')
12
- scheduleDomReader(() => order += 'r2')
13
- scheduleDomWriter(() => order += 'w2')
14
- store.set('b')
15
- scheduleDomReader(() => order += 'r3')
16
- scheduleDomWriter(() => order += 'w3')
17
- scheduleDomReader(() => order += 'r4')
18
- scheduleDomWriter(() => {
19
- order += 'w4'
20
- scheduleDomReader(() => {
21
- order += 'R1'
22
- scheduleDomReader(() => order += 'R2')
23
- scheduleDomWriter(() => order += 'W1')
24
- })
25
- })
26
- scheduleDomReader(() => order += 'r5')
27
- scheduleDomWriter(() => order += 'w5')
28
-
29
- assertBody(`a{}`)
30
- assertEqual(order, 'a')
31
-
32
- passTime()
33
-
34
- assertBody(`b{}`)
35
- assertEqual(order, 'abr1r2r3r4r5w1w2w3w4w5R1R2W1')
36
-
37
- order = ''
38
- scheduleDomWriter(() => order += 'W')
39
- scheduleDomReader(() => order += 'R')
40
- passTime()
41
- assertEqual(order, 'RW')
42
- });
43
-
44
- })
package/tests/scope.js DELETED
@@ -1,277 +0,0 @@
1
- describe('Scope', () => {
2
- it('rerenders only the inner scope', () => {
3
- let store = new Store('before')
4
- let cnt1 = 0, cnt2 = 0
5
- mount(document.body, () => {
6
- node('a', () => {
7
- cnt1++
8
- node('span', () => {
9
- cnt2++
10
- text(store.get())
11
- })
12
- })
13
- })
14
- assertBody(`a{span{"before"}}`)
15
- store.set("after")
16
- assertBody(`a{span{"before"}}`)
17
- passTime()
18
- assertBody(`a{span{"after"}}`)
19
- assertEqual(cnt1,1)
20
- assertEqual(cnt2,2)
21
- })
22
-
23
- it('adds and removes elements', () => {
24
- let store = new Store(false)
25
-
26
- let cnt1 = 0, cnt2 = 0
27
- mount(document.body, () => {
28
- cnt1++
29
- node('a', () => {
30
- cnt2++
31
- if (store.get()) node('i')
32
- })
33
- })
34
-
35
- assertBody(`a{}`)
36
-
37
- for(let val in [true,false,true,false]) {
38
- store.set(val)
39
- passTime()
40
- assertBody(val ? `a{i{}}` : `a{}`)
41
- }
42
- assertEqual(cnt1,1)
43
- assertEqual(cnt2,5)
44
- })
45
-
46
- it('refreshes standalone observe()s', () => {
47
- let store = new Store(false)
48
-
49
- let cnt1 = 0, cnt2 = 0
50
- mount(document.body, () => {
51
- cnt1++
52
- node('a')
53
- observe(() => {
54
- cnt2++
55
- if (store.get()) node('i')
56
- })
57
- })
58
-
59
- assertBody(`a{}`)
60
-
61
- for(let val of [true,false,true,false]) {
62
- store.set(val)
63
- passTime()
64
- assertBody(val ? `a{} i{}` : `a{}`)
65
- }
66
- assertEqual(cnt1,1)
67
- assertEqual(cnt2,5)
68
- })
69
-
70
- it('uses observe()s as reference for DOM insertion', () => {
71
- let store1 = new Store(false)
72
- let store2 = new Store(false)
73
-
74
- let cnt0 = 0, cnt1 = 0, cnt2 = 0
75
- mount(document.body, () => {
76
- cnt0++
77
- node('i')
78
- observe(() => {
79
- cnt1++
80
- store1.get() && node('a')
81
- })
82
- observe(() => {
83
- cnt2++
84
- store2.get() && node('b')
85
- })
86
- node('p')
87
- })
88
-
89
- assertBody(`i{} p{}`)
90
-
91
- for(let [val1,val2] of [[false,true],[false,false],[true,false],[true,true],[false,false],[true,true]]) {
92
- store1.set(val1)
93
- store2.set(val2)
94
- passTime()
95
- assertBody(`i{} ${val1?'a{} ':''}${val2?'b{} ':''}p{}`)
96
- }
97
- assertEqual(cnt0,1)
98
- assertEqual(cnt1,4)
99
- assertEqual(cnt2,6)
100
- })
101
-
102
- it('insert at right position with an empty parent scope', () => {
103
- mount(document.body, () => {
104
- node('a')
105
- observe(() => {
106
- observe(() => {
107
- node('b')
108
- })
109
- })
110
- })
111
- assertBody(`a{} b{}`)
112
- })
113
-
114
- it('refrains from rerendering dead scopes', () => {
115
- let cnts = [0,0,0,0]
116
- let store = new Store('a')
117
- mount(document.body, () => {
118
- cnts[0]++
119
- observe(() => {
120
- cnts[1]++
121
- observe(() => {
122
- cnts[2]++
123
- if (store.get()==='b') return
124
- observe(() => {
125
- cnts[3]++
126
- store.get()
127
- })
128
- })
129
- })
130
- })
131
- assertEqual(cnts, [1,1,1,1])
132
- store.set('b')
133
- assertEqual(cnts, [1,1,1,1])
134
- passTime()
135
- assertEqual(cnts, [1,1,2,1])
136
- })
137
-
138
- it('inserts higher priority updates', () => {
139
- let store = new Store({})
140
- let pcnt = 0, ccnt = 0
141
- mount(document.body, () => {
142
- pcnt++
143
- if (store.get('parent')) return
144
-
145
- node('a', () => {
146
- ccnt++
147
- if (store.get('children')) {
148
- store.merge({parent: true})
149
- }
150
- })
151
- node('b', () => {
152
- ccnt++
153
- if (store.get('children')) {
154
- store.merge({parent: true})
155
- }
156
- })
157
- })
158
- assertBody(`a{} b{}`)
159
-
160
- store.set({children: true})
161
- passTime()
162
- assertBody(``)
163
- assertEqual(pcnt, 2)
164
- assertEqual(ccnt, 3) // only a *or* b should have executed a second time, triggering parent
165
- })
166
-
167
- it('does not rerender on peek', () => {
168
- let store = new Store('before')
169
- let cnt1 = 0, cnt2 = 0
170
- mount(document.body, () => {
171
- node('a', () => {
172
- cnt1++
173
- node('span', () => {
174
- cnt2++
175
- text(peek(() => store.get()))
176
- text(store.peek())
177
- })
178
- })
179
- })
180
- assertBody(`a{span{"before" "before"}}`)
181
- store.set("after")
182
- passTime()
183
- assertBody(`a{span{"before" "before"}}`)
184
- assertEqual(cnt1,1)
185
- assertEqual(cnt2,1)
186
- })
187
-
188
- it('emits for objects with numeric get() paths', () => {
189
- let values = new Store({})
190
-
191
- mount(document.body, () => {
192
- for(let i=0; i<4; i++) {
193
- node('p', () => {
194
- text(values.get(i))
195
- })
196
- }
197
- })
198
- assertBody(`p{} p{} p{} p{}`)
199
-
200
- values.set({1:'x', 3:'x'})
201
- passTime()
202
- assertBody(`p{} p{"x"} p{} p{"x"}`)
203
- })
204
-
205
- it('allows modifying stores from within scopes', () => {
206
- let cnt0 = 0, cnt1 = 0, cnt2 = 0, cnt3 = 0;
207
- let store = new Store({})
208
- let inverse = new Store({})
209
-
210
- let myMount = mount(document.body, () => {
211
- cnt0++
212
- store.onEach(item => {
213
- let key = item.get()
214
- let value = item.index()
215
- inverse.set(key, value)
216
- cnt1++
217
- clean(() => {
218
- inverse.delete(key)
219
- cnt2++
220
- })
221
- })
222
-
223
- inverse.onEach(item => {
224
- text(item.index()+"="+item.get())
225
- cnt3++
226
- })
227
- })
228
-
229
- passTime()
230
- assertBody(``)
231
- assertEqual([cnt0,cnt1,cnt2,cnt3], [1,0,0,0])
232
-
233
- store.set(1, 'b')
234
- passTime()
235
- assertBody(`"b=1"`)
236
- assertEqual([cnt0,cnt1,cnt2,cnt3], [1,1,0,1])
237
-
238
- store.set(2, 'a')
239
- passTime()
240
- assertBody(`"a=2" "b=1"`)
241
- assertEqual([cnt0,cnt1,cnt2,cnt3], [1,2,0,2])
242
-
243
- store.set(3, 'c')
244
- passTime()
245
- assertBody(`"a=2" "b=1" "c=3"`)
246
- assertEqual([cnt0,cnt1,cnt2,cnt3], [1,3,0,3])
247
-
248
- store.set(3, 'd')
249
- passTime()
250
- assertBody(`"a=2" "b=1" "d=3"`)
251
- assertEqual([cnt0,cnt1,cnt2,cnt3], [1,4,1,4])
252
-
253
- store.delete(1)
254
- passTime()
255
- assertBody(`"a=2" "d=3"`)
256
- assertEqual([cnt0,cnt1,cnt2,cnt3], [1,4,2,4])
257
-
258
- unmount()
259
- assertBody(``)
260
- assertEqual([cnt0,cnt1,cnt2,cnt3], [1,4,4,4])
261
- })
262
-
263
- it('refrains from rerendering when inhibitEffect is used', () => {
264
- let store = new Store('a')
265
- let count = 0
266
- mount(document.body, () => {
267
- node(store.get())
268
- count++
269
- })
270
- assertBody(`a{}`)
271
-
272
- inhibitEffects(() => store.set('b'))
273
- passTime()
274
- assertBody(`a{}`)
275
- assertEqual(count, 1)
276
- })
277
- })
package/tests/sort.js DELETED
@@ -1,105 +0,0 @@
1
- describe('Sort', () => {
2
- it('uses custom sort orders', () => {
3
- let store = new Store({
4
- c: {x: 2, y: 2, z: -2},
5
- a: {x: 5, y: 2, z: -500000},
6
- b: {x: 5, y: 1, z: 3},
7
- e: {x: 'a', y: 2, z: 5},
8
- d: {x: 2, y: 2, z: +500000},
9
- })
10
-
11
- let sort = new Store()
12
-
13
- mount(document.body, () => {
14
- store.onEach(item => {
15
- node(item.index())
16
- }, sort.get())
17
- })
18
-
19
- assertBody(`a{} b{} c{} d{} e{}`)
20
-
21
- sort.set(item => item.get('z'))
22
- passTime()
23
- assertBody(`a{} c{} b{} e{} d{}`)
24
-
25
- sort.set(item => [item.get('x'), item.get('y'), item.index()] )
26
- passTime()
27
- assertBody(`e{} c{} d{} b{} a{}`)
28
- })
29
-
30
- it('changes position when sort key changes', () => {
31
- let store = new Store({
32
- a: 5,
33
- b: 3,
34
- c: 1,
35
- d: -1,
36
- e: -3
37
- })
38
- let p = 0, c = 0
39
- mount(document.body, () => {
40
- p++
41
- store.onEach(item => {
42
- c++
43
- node(item.index())
44
- }, item => item.getNumber())
45
- })
46
- assertBody(`e{} d{} c{} b{} a{}`)
47
- assertEqual(p, 1)
48
- assertEqual(c, 5)
49
-
50
- store.set('c', -20)
51
- passTime()
52
- assertBody(`c{} e{} d{} b{} a{}`)
53
- assertEqual(p, 1)
54
- assertEqual(c, 6)
55
-
56
- store.set('e', 4)
57
- passTime()
58
- assertBody(`c{} d{} b{} e{} a{}`)
59
- assertEqual(p, 1)
60
- assertEqual(c, 7)
61
- })
62
-
63
- it('have items disappear when the sort key is null', () => {
64
- let store = new Store({a: true, b: false, c: true, d: false})
65
- let p = 0, c = 0;
66
- mount(document.body, () => {
67
- p++
68
- store.onEach(item => {
69
- c++
70
- node(item.index())
71
- }, item => item.getBoolean() ? item.index() : null)
72
- })
73
- assertBody(`a{} c{}`)
74
- assertEqual(p, 1)
75
- assertEqual(c, 2)
76
-
77
- store.merge({a: false, d: true})
78
- passTime()
79
- assertBody(`c{} d{}`)
80
- assertEqual(p, 1)
81
- assertEqual(c, 3)
82
- })
83
-
84
- it('stores all supported types', () => {
85
- let types = {
86
- function: function() {},
87
- number: 123,
88
- string: "hi",
89
- object: {a: 1, b: 2},
90
- array: [1,2,3],
91
- map: objToMap({a:1, b:2}),
92
- boolean: false,
93
- null: null,
94
- undefined: undefined
95
- }
96
- let store = new Store()
97
- assertEqual(store.getType('a','b'), 'undefined')
98
- for(let typeName in types) {
99
- let typeValue = types[typeName]
100
- store.set(typeValue)
101
- assertEqual(store.getType(), typeName)
102
- assertEqual(store.get(), typeValue)
103
- }
104
- })
105
- })