@domql/element 3.1.2 → 3.2.7
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/README.md +4 -6
- package/children.js +45 -18
- package/create.js +58 -46
- package/define.js +1 -1
- package/dist/cjs/children.js +43 -13
- package/dist/cjs/create.js +57 -27
- package/dist/cjs/define.js +1 -1
- package/dist/cjs/event/animationFrame.js +96 -0
- package/dist/cjs/event/can.js +28 -0
- package/dist/cjs/event/index.js +20 -0
- package/dist/cjs/event/on.js +84 -0
- package/dist/cjs/event/store.js +27 -0
- package/dist/cjs/extend.js +88 -0
- package/dist/cjs/index.js +9 -6
- package/dist/cjs/iterate.js +89 -33
- package/dist/cjs/methods/set.js +5 -0
- package/dist/cjs/methods/v2.js +1 -1
- package/dist/cjs/mixins/attr.js +3 -2
- package/dist/cjs/mixins/classList.js +11 -1
- package/dist/cjs/mixins/content.js +72 -0
- package/dist/cjs/mixins/html.js +1 -2
- package/dist/cjs/mixins/registry.js +2 -2
- package/dist/cjs/mixins/scope.js +1 -1
- package/dist/cjs/mixins/state.js +4 -4
- package/dist/cjs/mixins/style.js +11 -2
- package/dist/cjs/mixins/text.js +9 -5
- package/dist/cjs/node.js +22 -19
- package/dist/cjs/render/append.js +72 -0
- package/dist/cjs/render/cache.js +80 -0
- package/dist/cjs/render/create.js +25 -0
- package/dist/cjs/render/index.js +20 -0
- package/dist/cjs/set.js +33 -40
- package/dist/cjs/update.js +100 -69
- package/dist/cjs/utils/applyParam.js +7 -7
- package/dist/cjs/utils/extendUtils.js +132 -0
- package/dist/cjs/utils/index.js +2 -0
- package/dist/cjs/utils/propEvents.js +56 -0
- package/dist/esm/children.js +44 -14
- package/dist/esm/create.js +58 -27
- package/dist/esm/define.js +1 -1
- package/dist/esm/event/animationFrame.js +76 -0
- package/dist/esm/event/can.js +8 -0
- package/dist/esm/event/index.js +3 -0
- package/dist/esm/event/on.js +64 -0
- package/dist/esm/event/store.js +7 -0
- package/dist/esm/extend.js +74 -0
- package/dist/esm/index.js +8 -6
- package/dist/esm/iterate.js +90 -35
- package/dist/esm/methods/set.js +10 -0
- package/dist/esm/methods/v2.js +1 -1
- package/dist/esm/mixins/attr.js +4 -3
- package/dist/esm/mixins/classList.js +11 -1
- package/dist/esm/mixins/content.js +52 -0
- package/dist/esm/mixins/html.js +1 -2
- package/dist/esm/mixins/registry.js +1 -1
- package/dist/esm/mixins/scope.js +1 -1
- package/dist/esm/mixins/state.js +5 -5
- package/dist/esm/mixins/style.js +12 -3
- package/dist/esm/mixins/text.js +10 -6
- package/dist/esm/node.js +22 -19
- package/dist/esm/render/append.js +52 -0
- package/dist/esm/render/cache.js +60 -0
- package/dist/esm/render/create.js +5 -0
- package/dist/esm/render/index.js +3 -0
- package/dist/esm/set.js +34 -41
- package/dist/esm/update.js +100 -71
- package/dist/esm/utils/applyParam.js +8 -8
- package/dist/esm/utils/extendUtils.js +119 -0
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/propEvents.js +36 -0
- package/dist/iife/index.js +4718 -0
- package/extend.js +95 -0
- package/index.js +9 -6
- package/iterate.js +100 -38
- package/node.js +25 -23
- package/package.json +44 -20
- package/set.js +28 -32
- package/update.js +111 -82
- package/__tests__/checkIfOnUpdate.test.js +0 -103
- package/__tests__/children.test.js +0 -213
- package/__tests__/define.test.js +0 -75
- package/__tests__/inheritStateUpdates.test.js +0 -79
- package/__tests__/renderElement.test.js +0 -131
- package/__tests__/resetElement.test.js +0 -44
- package/__tests__/set.test.js +0 -316
- package/__tests__/throughExecProps.test.js +0 -86
- package/__tests__/throughInitialDefine.test.js +0 -104
- package/__tests__/throughInitialExec.test.js +0 -92
- package/__tests__/throughUpdatedDefine.test.js +0 -92
- package/__tests__/throughUpdatedExec.test.js +0 -110
- package/__tests__/tree.test.js +0 -15
- package/__tests__/update.test.js +0 -256
- package/dist/cjs/__tests__/checkIfOnUpdate.test.js +0 -73
- package/dist/cjs/__tests__/children.test.js +0 -177
- package/dist/cjs/__tests__/define.test.js +0 -75
- package/dist/cjs/__tests__/inheritStateUpdates.test.js +0 -62
- package/dist/cjs/__tests__/renderElement.test.js +0 -138
- package/dist/cjs/__tests__/resetElement.test.js +0 -35
- package/dist/cjs/__tests__/set.test.js +0 -256
- package/dist/cjs/__tests__/throughExecProps.test.js +0 -62
- package/dist/cjs/__tests__/throughInitialDefine.test.js +0 -79
- package/dist/cjs/__tests__/throughInitialExec.test.js +0 -73
- package/dist/cjs/__tests__/throughUpdatedDefine.test.js +0 -69
- package/dist/cjs/__tests__/throughUpdatedExec.test.js +0 -84
- package/dist/cjs/__tests__/tree.test.js +0 -11
- package/dist/cjs/__tests__/update.test.js +0 -222
- package/dist/cjs/package.json +0 -4
- package/dist/esm/__tests__/checkIfOnUpdate.test.js +0 -73
- package/dist/esm/__tests__/children.test.js +0 -177
- package/dist/esm/__tests__/define.test.js +0 -53
- package/dist/esm/__tests__/inheritStateUpdates.test.js +0 -62
- package/dist/esm/__tests__/renderElement.test.js +0 -116
- package/dist/esm/__tests__/resetElement.test.js +0 -35
- package/dist/esm/__tests__/set.test.js +0 -256
- package/dist/esm/__tests__/throughExecProps.test.js +0 -62
- package/dist/esm/__tests__/throughInitialDefine.test.js +0 -79
- package/dist/esm/__tests__/throughInitialExec.test.js +0 -73
- package/dist/esm/__tests__/throughUpdatedDefine.test.js +0 -69
- package/dist/esm/__tests__/throughUpdatedExec.test.js +0 -84
- package/dist/esm/__tests__/tree.test.js +0 -11
- package/dist/esm/__tests__/update.test.js +0 -222
- package/methods/set.js +0 -63
- package/methods/v2.js +0 -83
- package/mixins/attr.js +0 -32
- package/mixins/classList.js +0 -54
- package/mixins/data.js +0 -26
- package/mixins/html.js +0 -21
- package/mixins/index.js +0 -23
- package/mixins/registry.js +0 -46
- package/mixins/scope.js +0 -23
- package/mixins/state.js +0 -19
- package/mixins/style.js +0 -16
- package/mixins/text.js +0 -26
- package/utils/applyParam.js +0 -34
- package/utils/index.js +0 -3
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { throughExecProps } from '../iterate'
|
|
2
|
-
|
|
3
|
-
describe('throughExecProps', () => {
|
|
4
|
-
let element, ref
|
|
5
|
-
|
|
6
|
-
beforeEach(() => {
|
|
7
|
-
ref = {
|
|
8
|
-
__execProps: {}
|
|
9
|
-
}
|
|
10
|
-
element = {
|
|
11
|
-
__ref: ref,
|
|
12
|
-
props: {},
|
|
13
|
-
state: { test: 'state' },
|
|
14
|
-
context: { test: 'context' }
|
|
15
|
-
}
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
it('should cache and execute define-prefixed function props', async () => {
|
|
19
|
-
element.props.isActive = () => true
|
|
20
|
-
element.props.hasFeature = (el, state) => state.test === 'state'
|
|
21
|
-
|
|
22
|
-
await throughExecProps(element)
|
|
23
|
-
|
|
24
|
-
expect(element.props.isActive).toBe(true)
|
|
25
|
-
expect(element.props.hasFeature).toBe(true)
|
|
26
|
-
expect(ref.__execProps).toEqual({
|
|
27
|
-
isActive: expect.any(Function),
|
|
28
|
-
hasFeature: expect.any(Function)
|
|
29
|
-
})
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
it('should execute cached functions from previous runs', async () => {
|
|
33
|
-
ref.__execProps.value = () => 'cached'
|
|
34
|
-
element.props.value = 'current'
|
|
35
|
-
|
|
36
|
-
await throughExecProps(element)
|
|
37
|
-
|
|
38
|
-
expect(element.props.value).toBe('cached')
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
it('should leave non-function props unchanged', async () => {
|
|
42
|
-
element.props.title = 'static text'
|
|
43
|
-
element.props.disabled = false
|
|
44
|
-
|
|
45
|
-
await throughExecProps(element)
|
|
46
|
-
|
|
47
|
-
expect(element.props.title).toBe('static text')
|
|
48
|
-
expect(element.props.disabled).toBe(false)
|
|
49
|
-
expect(ref.__execProps).toEqual({})
|
|
50
|
-
})
|
|
51
|
-
|
|
52
|
-
it('should handle mixed define-prefixed and regular props', async () => {
|
|
53
|
-
element.props.useHelper = () => 'helper'
|
|
54
|
-
element.props.color = 'blue'
|
|
55
|
-
|
|
56
|
-
await throughExecProps(element)
|
|
57
|
-
|
|
58
|
-
expect(element.props.useHelper).toBe('helper')
|
|
59
|
-
expect(element.props.color).toBe('blue')
|
|
60
|
-
expect(ref.__execProps).toHaveProperty('useHelper')
|
|
61
|
-
})
|
|
62
|
-
|
|
63
|
-
it('should preserve existing cache entries', async () => {
|
|
64
|
-
ref.__execProps.existing = () => 'prior'
|
|
65
|
-
element.props.existing = 'new'
|
|
66
|
-
|
|
67
|
-
await throughExecProps(element)
|
|
68
|
-
|
|
69
|
-
expect(element.props.existing).toBe('prior')
|
|
70
|
-
expect(ref.__execProps.existing).toBeInstanceOf(Function)
|
|
71
|
-
})
|
|
72
|
-
|
|
73
|
-
it('should pass correct execution context', async () => {
|
|
74
|
-
element.props.checkContext = function (el, state, context) {
|
|
75
|
-
return (
|
|
76
|
-
this === element &&
|
|
77
|
-
state === element.state &&
|
|
78
|
-
context === element.context
|
|
79
|
-
)
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
await throughExecProps(element)
|
|
83
|
-
|
|
84
|
-
expect(typeof element.props.checkContext).toBe('function')
|
|
85
|
-
})
|
|
86
|
-
})
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { throughInitialDefine } from '../iterate'
|
|
2
|
-
|
|
3
|
-
describe('throughInitialDefine', () => {
|
|
4
|
-
let element, ref
|
|
5
|
-
|
|
6
|
-
beforeEach(() => {
|
|
7
|
-
ref = {
|
|
8
|
-
__exec: {},
|
|
9
|
-
__defineCache: {}
|
|
10
|
-
}
|
|
11
|
-
element = {
|
|
12
|
-
__ref: ref,
|
|
13
|
-
define: {},
|
|
14
|
-
state: { testState: true },
|
|
15
|
-
context: { testContext: true }
|
|
16
|
-
}
|
|
17
|
-
})
|
|
18
|
-
|
|
19
|
-
it('should merge local and global define objects', async () => {
|
|
20
|
-
element.define = { localProp: () => 'local' }
|
|
21
|
-
element.context.define = { globalProp: () => 'global' }
|
|
22
|
-
|
|
23
|
-
await throughInitialDefine(element)
|
|
24
|
-
|
|
25
|
-
expect(element.localProp).toBe('local')
|
|
26
|
-
expect(element.globalProp).toBe('global')
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
it('should cache and execute define functions', async () => {
|
|
30
|
-
element.define.testProp = value => 'defined value'
|
|
31
|
-
element.testProp = () => 'initial value'
|
|
32
|
-
|
|
33
|
-
await throughInitialDefine(element)
|
|
34
|
-
|
|
35
|
-
expect(element.testProp).toBe('defined value')
|
|
36
|
-
expect(ref.__exec.testProp).toBeInstanceOf(Function)
|
|
37
|
-
expect(ref.__defineCache.testProp).toBe('initial value')
|
|
38
|
-
})
|
|
39
|
-
|
|
40
|
-
it('should skip execution for method properties', async () => {
|
|
41
|
-
element.define.update = value => 'should not execute'
|
|
42
|
-
element.update = () => 'built-in method'
|
|
43
|
-
|
|
44
|
-
await throughInitialDefine(element)
|
|
45
|
-
|
|
46
|
-
expect(ref.__exec).not.toHaveProperty('update')
|
|
47
|
-
expect(ref.__defineCache).not.toHaveProperty('update')
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
it('should handle parse method in execution result', async () => {
|
|
51
|
-
element.define.testProp = () => ({ parse: () => 'parsed value' })
|
|
52
|
-
element.testProp = () => 'initial value'
|
|
53
|
-
|
|
54
|
-
await throughInitialDefine(element)
|
|
55
|
-
|
|
56
|
-
expect(ref.__defineCache.testProp).toBe('initial value')
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
it('should pass correct arguments to define functions', async () => {
|
|
60
|
-
element.define.testProp = (value, el, state, context) => ({
|
|
61
|
-
valueMatch: value === 'initial value',
|
|
62
|
-
elMatch: el === element,
|
|
63
|
-
stateMatch: state === element.state,
|
|
64
|
-
contextMatch: context === element.context
|
|
65
|
-
})
|
|
66
|
-
element.testProp = 'initial value'
|
|
67
|
-
|
|
68
|
-
await throughInitialDefine(element)
|
|
69
|
-
|
|
70
|
-
expect(element.testProp).toEqual({
|
|
71
|
-
valueMatch: true,
|
|
72
|
-
elMatch: true,
|
|
73
|
-
stateMatch: true,
|
|
74
|
-
contextMatch: true
|
|
75
|
-
})
|
|
76
|
-
})
|
|
77
|
-
|
|
78
|
-
it('should handle non-function element properties', async () => {
|
|
79
|
-
element.define.testProp = value => 'defined value'
|
|
80
|
-
element.testProp = 'non-function value'
|
|
81
|
-
|
|
82
|
-
await throughInitialDefine(element)
|
|
83
|
-
|
|
84
|
-
expect(element.testProp).toBe('defined value')
|
|
85
|
-
})
|
|
86
|
-
|
|
87
|
-
it('should handle empty define objects', async () => {
|
|
88
|
-
await throughInitialDefine(element)
|
|
89
|
-
|
|
90
|
-
expect(element).toEqual({
|
|
91
|
-
...element,
|
|
92
|
-
__ref: ref
|
|
93
|
-
})
|
|
94
|
-
})
|
|
95
|
-
|
|
96
|
-
it('should handle null or undefined define properties', async () => {
|
|
97
|
-
element.define.testProp = () => null
|
|
98
|
-
element.testProp = 'initial value'
|
|
99
|
-
|
|
100
|
-
await throughInitialDefine(element)
|
|
101
|
-
|
|
102
|
-
expect(element.testProp).toBe('initial value')
|
|
103
|
-
})
|
|
104
|
-
})
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { throughInitialExec } from '../iterate'
|
|
2
|
-
|
|
3
|
-
describe('throughInitialExec', () => {
|
|
4
|
-
let element, ref
|
|
5
|
-
|
|
6
|
-
beforeEach(() => {
|
|
7
|
-
ref = { __exec: {} }
|
|
8
|
-
element = {
|
|
9
|
-
__ref: ref,
|
|
10
|
-
state: { testState: true },
|
|
11
|
-
context: { testContext: true },
|
|
12
|
-
// Default non-method function
|
|
13
|
-
customFn: () => 'executed'
|
|
14
|
-
}
|
|
15
|
-
})
|
|
16
|
-
|
|
17
|
-
it('should process non-method functions and update element properties', async () => {
|
|
18
|
-
await throughInitialExec(element)
|
|
19
|
-
|
|
20
|
-
expect(element.customFn).toBe('executed')
|
|
21
|
-
expect(ref.__exec.customFn).toBeInstanceOf(Function)
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
it('should skip excluded parameters', async () => {
|
|
25
|
-
element.excludedFn = () => 'should not execute'
|
|
26
|
-
await throughInitialExec(element, { excludedFn: true })
|
|
27
|
-
|
|
28
|
-
expect(element.excludedFn).toBeInstanceOf(Function)
|
|
29
|
-
expect(ref.__exec).not.toHaveProperty('excludedFn')
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
it('should skip methods from METHODS array', async () => {
|
|
33
|
-
element.update = () => 'built-in method'
|
|
34
|
-
await throughInitialExec(element)
|
|
35
|
-
|
|
36
|
-
expect(element.update).toBeInstanceOf(Function)
|
|
37
|
-
expect(ref.__exec).not.toHaveProperty('update')
|
|
38
|
-
})
|
|
39
|
-
|
|
40
|
-
it('should skip methods from context.methods', async () => {
|
|
41
|
-
element.context.methods = { contextMethod: true }
|
|
42
|
-
element.contextMethod = () => 'context method'
|
|
43
|
-
await throughInitialExec(element)
|
|
44
|
-
|
|
45
|
-
expect(element.contextMethod).toBeInstanceOf(Function)
|
|
46
|
-
expect(ref.__exec).not.toHaveProperty('contextMethod')
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
it('should leave non-function properties unchanged', async () => {
|
|
50
|
-
element.stringProp = 'text'
|
|
51
|
-
await throughInitialExec(element)
|
|
52
|
-
|
|
53
|
-
expect(element.stringProp).toBe('text')
|
|
54
|
-
expect(ref.__exec).not.toHaveProperty('stringProp')
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
it('should store original functions in __exec', async () => {
|
|
58
|
-
const originalFn = () => 'original'
|
|
59
|
-
element.testFn = originalFn
|
|
60
|
-
await throughInitialExec(element)
|
|
61
|
-
|
|
62
|
-
expect(ref.__exec.testFn).toBe(originalFn)
|
|
63
|
-
expect(element.testFn).toBe('original')
|
|
64
|
-
})
|
|
65
|
-
|
|
66
|
-
it('should execute functions with correct arguments', async () => {
|
|
67
|
-
element.argChecker = (el, state, context) => ({
|
|
68
|
-
elIsElement: el === element,
|
|
69
|
-
stateMatch: state === element.state,
|
|
70
|
-
contextMatch: context === element.context
|
|
71
|
-
})
|
|
72
|
-
|
|
73
|
-
await throughInitialExec(element)
|
|
74
|
-
|
|
75
|
-
expect(element.argChecker).toEqual({
|
|
76
|
-
elIsElement: true,
|
|
77
|
-
stateMatch: true,
|
|
78
|
-
contextMatch: true
|
|
79
|
-
})
|
|
80
|
-
})
|
|
81
|
-
|
|
82
|
-
it('should handle empty exclude object', async () => {
|
|
83
|
-
element.fn1 = () => 'one'
|
|
84
|
-
element.fn2 = () => 'two'
|
|
85
|
-
await throughInitialExec(element, {})
|
|
86
|
-
|
|
87
|
-
expect(element.fn1).toBe('one')
|
|
88
|
-
expect(element.fn2).toBe('two')
|
|
89
|
-
expect(ref.__exec).toHaveProperty('fn1')
|
|
90
|
-
expect(ref.__exec).toHaveProperty('fn2')
|
|
91
|
-
})
|
|
92
|
-
})
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { throughUpdatedDefine } from '../iterate'
|
|
2
|
-
|
|
3
|
-
describe('throughUpdatedDefine', () => {
|
|
4
|
-
let element, ref
|
|
5
|
-
|
|
6
|
-
beforeEach(() => {
|
|
7
|
-
ref = {
|
|
8
|
-
__exec: {},
|
|
9
|
-
__defineCache: {}
|
|
10
|
-
}
|
|
11
|
-
element = {
|
|
12
|
-
__ref: ref,
|
|
13
|
-
define: {},
|
|
14
|
-
state: { testState: true },
|
|
15
|
-
context: { testContext: true }
|
|
16
|
-
}
|
|
17
|
-
})
|
|
18
|
-
|
|
19
|
-
it('should merge local and global define objects', async () => {
|
|
20
|
-
element.define = { localProp: () => 'local' }
|
|
21
|
-
element.context.define = { globalProp: () => 'global' }
|
|
22
|
-
|
|
23
|
-
await throughUpdatedDefine(element)
|
|
24
|
-
|
|
25
|
-
expect(element.localProp).toBe('local')
|
|
26
|
-
expect(element.globalProp).toBe('global')
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
it('should update element properties using cached exec functions', async () => {
|
|
30
|
-
ref.__exec.testProp = () => 'cached value'
|
|
31
|
-
element.define.testProp = cached => `updated ${cached}`
|
|
32
|
-
|
|
33
|
-
await throughUpdatedDefine(element)
|
|
34
|
-
|
|
35
|
-
expect(element.testProp).toBe('updated cached value')
|
|
36
|
-
expect(ref.__defineCache.testProp).toBe('cached value')
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
it('should handle non-function cached values', async () => {
|
|
40
|
-
ref.__defineCache.testProp = 'static value'
|
|
41
|
-
element.define.testProp = cached => `updated ${cached}`
|
|
42
|
-
|
|
43
|
-
await throughUpdatedDefine(element)
|
|
44
|
-
|
|
45
|
-
expect(element.testProp).toBe('updated static value')
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
it('should skip updates for undefined or null results', async () => {
|
|
49
|
-
ref.__exec.testProp = () => 'cached value'
|
|
50
|
-
element.define.testProp = () => null
|
|
51
|
-
element.testProp = 'original value'
|
|
52
|
-
|
|
53
|
-
await throughUpdatedDefine(element)
|
|
54
|
-
|
|
55
|
-
expect(element.testProp).toBe('original value')
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
it('should handle empty define objects', async () => {
|
|
59
|
-
const originalElement = { ...element }
|
|
60
|
-
|
|
61
|
-
await throughUpdatedDefine(element)
|
|
62
|
-
|
|
63
|
-
expect(element).toEqual(originalElement)
|
|
64
|
-
})
|
|
65
|
-
|
|
66
|
-
it('should pass correct arguments to define functions', async () => {
|
|
67
|
-
element.define.testProp = (cached, el, state, context) => ({
|
|
68
|
-
cachedMatch: cached === 'cached value',
|
|
69
|
-
elMatch: el === element,
|
|
70
|
-
stateMatch: state === element.state,
|
|
71
|
-
contextMatch: context === element.context
|
|
72
|
-
})
|
|
73
|
-
ref.__defineCache.testProp = 'cached value'
|
|
74
|
-
|
|
75
|
-
await throughUpdatedDefine(element)
|
|
76
|
-
|
|
77
|
-
expect(element.testProp).toEqual({
|
|
78
|
-
cachedMatch: true,
|
|
79
|
-
elMatch: true,
|
|
80
|
-
stateMatch: true,
|
|
81
|
-
contextMatch: true
|
|
82
|
-
})
|
|
83
|
-
})
|
|
84
|
-
|
|
85
|
-
it('should return an empty changes object', async () => {
|
|
86
|
-
element.define.testProp = () => 'updated value'
|
|
87
|
-
|
|
88
|
-
const changes = await throughUpdatedDefine(element)
|
|
89
|
-
|
|
90
|
-
expect(changes).toEqual({})
|
|
91
|
-
})
|
|
92
|
-
})
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import { throughUpdatedExec } from '../iterate'
|
|
2
|
-
|
|
3
|
-
describe('throughUpdatedExec', () => {
|
|
4
|
-
let element, ref
|
|
5
|
-
|
|
6
|
-
beforeEach(() => {
|
|
7
|
-
ref = {
|
|
8
|
-
__exec: {},
|
|
9
|
-
__defineCache: {}
|
|
10
|
-
}
|
|
11
|
-
element = {
|
|
12
|
-
__ref: ref,
|
|
13
|
-
state: { testState: true },
|
|
14
|
-
context: { testContext: true }
|
|
15
|
-
}
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
it('should skip execution for params in __defineCache', () => {
|
|
19
|
-
ref.__defineCache.cachedParam = true
|
|
20
|
-
ref.__exec.cachedParam = () => 'should not execute'
|
|
21
|
-
element.cachedParam = 'original'
|
|
22
|
-
|
|
23
|
-
const changes = throughUpdatedExec(element)
|
|
24
|
-
|
|
25
|
-
expect(element.cachedParam).toBe('original')
|
|
26
|
-
expect(changes).toEqual({})
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
it('should update element properties when newExec differs from current value', () => {
|
|
30
|
-
ref.__exec.testParam = () => 'new value'
|
|
31
|
-
element.testParam = 'old value'
|
|
32
|
-
|
|
33
|
-
const changes = throughUpdatedExec(element)
|
|
34
|
-
|
|
35
|
-
expect(element.testParam).toBe('new value')
|
|
36
|
-
expect(changes).toEqual({ testParam: 'old value' })
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
it('should overwrite text property for nodes when exec returns string or number', () => {
|
|
40
|
-
const node = { node: true, text: 'old text' }
|
|
41
|
-
ref.__exec.testParam = () => 'new text'
|
|
42
|
-
element.testParam = node
|
|
43
|
-
|
|
44
|
-
const changes = throughUpdatedExec(element)
|
|
45
|
-
|
|
46
|
-
expect(element.testParam.text).toBe('new text')
|
|
47
|
-
expect(changes).toEqual({})
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
it('should handle component naming matches and overwrite with context component', () => {
|
|
51
|
-
const contextComponent = { extends: 'Component', prop: 'value' }
|
|
52
|
-
element.context.components = { TestComponent: contextComponent }
|
|
53
|
-
ref.__exec.TestComponent = () => contextComponent
|
|
54
|
-
element.TestComponent = { oldProp: 'oldValue' }
|
|
55
|
-
|
|
56
|
-
const changes = throughUpdatedExec(element)
|
|
57
|
-
|
|
58
|
-
expect(element.TestComponent).toEqual({
|
|
59
|
-
oldProp: 'oldValue',
|
|
60
|
-
prop: 'value'
|
|
61
|
-
})
|
|
62
|
-
expect(changes).toEqual({})
|
|
63
|
-
})
|
|
64
|
-
|
|
65
|
-
it('should not update element properties when newExec matches current value', () => {
|
|
66
|
-
ref.__exec.testParam = () => 'same value'
|
|
67
|
-
element.testParam = 'same value'
|
|
68
|
-
|
|
69
|
-
const changes = throughUpdatedExec(element)
|
|
70
|
-
|
|
71
|
-
expect(element.testParam).toBe('same value')
|
|
72
|
-
expect(changes).toEqual({})
|
|
73
|
-
})
|
|
74
|
-
|
|
75
|
-
it('should handle non-string/non-number exec returns for non-node properties', () => {
|
|
76
|
-
const newValue = { complex: 'object' }
|
|
77
|
-
ref.__exec.testParam = () => newValue
|
|
78
|
-
element.testParam = 'old value'
|
|
79
|
-
|
|
80
|
-
const changes = throughUpdatedExec(element)
|
|
81
|
-
|
|
82
|
-
expect(element.testParam).toBe(newValue)
|
|
83
|
-
expect(changes).toEqual({ testParam: 'old value' })
|
|
84
|
-
})
|
|
85
|
-
|
|
86
|
-
it('should return an empty changes object when no updates occur', () => {
|
|
87
|
-
ref.__exec.testParam = () => 'same value'
|
|
88
|
-
element.testParam = 'same value'
|
|
89
|
-
|
|
90
|
-
const changes = throughUpdatedExec(element)
|
|
91
|
-
|
|
92
|
-
expect(changes).toEqual({})
|
|
93
|
-
})
|
|
94
|
-
|
|
95
|
-
it('should handle multiple properties and return correct changes', () => {
|
|
96
|
-
ref.__exec.param1 = () => 'new value 1'
|
|
97
|
-
ref.__exec.param2 = () => 'new value 2'
|
|
98
|
-
element.param1 = 'old value 1'
|
|
99
|
-
element.param2 = 'old value 2'
|
|
100
|
-
|
|
101
|
-
const changes = throughUpdatedExec(element)
|
|
102
|
-
|
|
103
|
-
expect(element.param1).toBe('new value 1')
|
|
104
|
-
expect(element.param2).toBe('new value 2')
|
|
105
|
-
expect(changes).toEqual({
|
|
106
|
-
param1: 'old value 1',
|
|
107
|
-
param2: 'old value 2'
|
|
108
|
-
})
|
|
109
|
-
})
|
|
110
|
-
})
|
package/__tests__/tree.test.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { ROOT, TREE } from '../tree'
|
|
2
|
-
|
|
3
|
-
describe('ROOT/TREE initialization and report()', () => {
|
|
4
|
-
// Test 1: ROOT object structure
|
|
5
|
-
it('initializes ROOT with :root key and document.body node', () => {
|
|
6
|
-
expect(ROOT.key).toBe(':root')
|
|
7
|
-
expect(ROOT.node).toBe(document.body) // Works in JSDOM
|
|
8
|
-
})
|
|
9
|
-
|
|
10
|
-
// Test 2: TREE === ROOT
|
|
11
|
-
it('assigns TREE to reference ROOT', () => {
|
|
12
|
-
expect(TREE).toBe(ROOT)
|
|
13
|
-
expect(TREE.node).toBe(document.body)
|
|
14
|
-
})
|
|
15
|
-
})
|