glass-easel 0.2.0 → 0.3.0

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 (197) hide show
  1. package/.eslintignore +4 -0
  2. package/dist/glass_easel.all.js +2 -2
  3. package/dist/glass_easel.all.js.map +1 -1
  4. package/dist/glass_easel.d.ts +2546 -0
  5. package/dist/glass_easel.domlike.global.js +2 -2
  6. package/dist/glass_easel.domlike.global.js.map +1 -1
  7. package/guide/zh_CN/appendix/backend_protocol.md +164 -74
  8. package/jest.unit.config.js +7 -4
  9. package/package.json +7 -5
  10. package/rollup.config.ts +101 -0
  11. package/src/backend/backend_protocol.ts +26 -345
  12. package/src/backend/composed_backend_protocol.ts +10 -264
  13. package/src/backend/current_window_backend_context.ts +478 -0
  14. package/src/backend/domlike_backend_protocol.ts +9 -498
  15. package/src/backend/empty_backend.ts +265 -0
  16. package/src/backend/empty_composed_backend.ts +245 -0
  17. package/src/backend/index.ts +18 -0
  18. package/src/backend/suggested_backend_protocol.ts +62 -11
  19. package/src/behavior.ts +131 -442
  20. package/src/class_list.ts +328 -222
  21. package/src/component.ts +349 -184
  22. package/src/component_params.ts +54 -25
  23. package/src/component_space.ts +36 -15
  24. package/src/data_path.ts +22 -34
  25. package/src/data_proxy.ts +334 -27
  26. package/src/devtool.ts +89 -0
  27. package/src/element.ts +667 -285
  28. package/src/element_iterator.ts +9 -4
  29. package/src/event.ts +39 -20
  30. package/src/external_shadow_tree.ts +2 -2
  31. package/src/func_arr.ts +55 -101
  32. package/src/global_options.ts +18 -42
  33. package/src/index.ts +72 -73
  34. package/src/mutation_observer.ts +10 -7
  35. package/src/native_node.ts +79 -35
  36. package/src/node.ts +23 -30
  37. package/src/relation.ts +101 -12
  38. package/src/render.ts +5 -3
  39. package/src/selector.ts +9 -7
  40. package/src/shadow_root.ts +96 -240
  41. package/src/template_engine.ts +10 -7
  42. package/src/text_node.ts +43 -19
  43. package/src/tmpl/index.ts +38 -30
  44. package/src/tmpl/native_rendering.ts +14 -21
  45. package/src/tmpl/proc_gen_wrapper.ts +189 -151
  46. package/src/tmpl/proc_gen_wrapper_dom.ts +10 -8
  47. package/src/tmpl/range_list_diff.ts +30 -9
  48. package/src/trait_behaviors.ts +1 -1
  49. package/src/type_symbol.ts +36 -0
  50. package/src/virtual_node.ts +26 -13
  51. package/src/warning.ts +119 -0
  52. package/tests/base/composed_backend.ts +143 -142
  53. package/tests/base/env.ts +76 -3
  54. package/tests/base/match.ts +24 -22
  55. package/tests/base/shadow_backend.ts +917 -0
  56. package/tests/core/backend.test.ts +53 -1
  57. package/tests/core/behavior.test.ts +1 -1
  58. package/tests/core/data_update.test.ts +135 -0
  59. package/tests/core/misc.test.ts +91 -21
  60. package/tests/core/placeholder.test.ts +66 -25
  61. package/tests/core/slot.test.ts +161 -23
  62. package/tests/legacy/component.test.js +152 -78
  63. package/tests/legacy/data_path.test.js +19 -19
  64. package/tests/legacy/data_proxy.test.js +14 -7
  65. package/tests/legacy/external.test.js +8 -8
  66. package/tests/legacy/mutation_observer.test.js +7 -5
  67. package/tests/legacy/slot.test.js +2 -3
  68. package/tests/legacy/virtual.test.js +258 -25
  69. package/tests/tmpl/binding_map.test.ts +201 -195
  70. package/tests/tmpl/event.test.ts +138 -23
  71. package/tests/tmpl/expression.test.ts +15 -15
  72. package/tests/tmpl/lvalue.test.ts +101 -0
  73. package/tests/tmpl/structure.test.ts +486 -43
  74. package/tests/types/chaining.test.ts +27 -30
  75. package/tests/types/createElement.test.ts +5 -4
  76. package/tests/types/definition.test.ts +11 -14
  77. package/tsconfig.json +1 -3
  78. package/dist/glass_easel.all.d.ts +0 -1
  79. package/dist/glass_easel.domlike.global.d.ts +0 -1
  80. package/dist/index.d.ts +0 -1
  81. package/dist/index.js +0 -1
  82. package/dist/types/src/backend/backend_protocol.d.ts +0 -141
  83. package/dist/types/src/backend/backend_protocol.d.ts.map +0 -1
  84. package/dist/types/src/backend/composed_backend_protocol.d.ts +0 -102
  85. package/dist/types/src/backend/composed_backend_protocol.d.ts.map +0 -1
  86. package/dist/types/src/backend/domlike_backend_protocol.d.ts +0 -100
  87. package/dist/types/src/backend/domlike_backend_protocol.d.ts.map +0 -1
  88. package/dist/types/src/backend/mode.d.ts +0 -65
  89. package/dist/types/src/backend/mode.d.ts.map +0 -1
  90. package/dist/types/src/backend/suggested_backend_protocol.d.ts +0 -30
  91. package/dist/types/src/backend/suggested_backend_protocol.d.ts.map +0 -1
  92. package/dist/types/src/behavior.d.ts +0 -434
  93. package/dist/types/src/behavior.d.ts.map +0 -1
  94. package/dist/types/src/class_list.d.ts +0 -83
  95. package/dist/types/src/class_list.d.ts.map +0 -1
  96. package/dist/types/src/component.d.ts +0 -325
  97. package/dist/types/src/component.d.ts.map +0 -1
  98. package/dist/types/src/component_params.d.ts +0 -236
  99. package/dist/types/src/component_params.d.ts.map +0 -1
  100. package/dist/types/src/component_space.d.ts +0 -211
  101. package/dist/types/src/component_space.d.ts.map +0 -1
  102. package/dist/types/src/data_path.d.ts +0 -5
  103. package/dist/types/src/data_path.d.ts.map +0 -1
  104. package/dist/types/src/data_proxy.d.ts +0 -107
  105. package/dist/types/src/data_proxy.d.ts.map +0 -1
  106. package/dist/types/src/data_utils.d.ts +0 -3
  107. package/dist/types/src/data_utils.d.ts.map +0 -1
  108. package/dist/types/src/element.d.ts +0 -365
  109. package/dist/types/src/element.d.ts.map +0 -1
  110. package/dist/types/src/element_iterator.d.ts +0 -43
  111. package/dist/types/src/element_iterator.d.ts.map +0 -1
  112. package/dist/types/src/event.d.ts +0 -105
  113. package/dist/types/src/event.d.ts.map +0 -1
  114. package/dist/types/src/external_shadow_tree.d.ts +0 -20
  115. package/dist/types/src/external_shadow_tree.d.ts.map +0 -1
  116. package/dist/types/src/func_arr.d.ts +0 -39
  117. package/dist/types/src/func_arr.d.ts.map +0 -1
  118. package/dist/types/src/global_options.d.ts +0 -120
  119. package/dist/types/src/global_options.d.ts.map +0 -1
  120. package/dist/types/src/index.d.ts +0 -43
  121. package/dist/types/src/index.d.ts.map +0 -1
  122. package/dist/types/src/mutation_observer.d.ts +0 -79
  123. package/dist/types/src/mutation_observer.d.ts.map +0 -1
  124. package/dist/types/src/native_node.d.ts +0 -11
  125. package/dist/types/src/native_node.d.ts.map +0 -1
  126. package/dist/types/src/node.d.ts +0 -48
  127. package/dist/types/src/node.d.ts.map +0 -1
  128. package/dist/types/src/relation.d.ts +0 -46
  129. package/dist/types/src/relation.d.ts.map +0 -1
  130. package/dist/types/src/render.d.ts +0 -3
  131. package/dist/types/src/render.d.ts.map +0 -1
  132. package/dist/types/src/selector.d.ts +0 -32
  133. package/dist/types/src/selector.d.ts.map +0 -1
  134. package/dist/types/src/shadow_root.d.ts +0 -174
  135. package/dist/types/src/shadow_root.d.ts.map +0 -1
  136. package/dist/types/src/template_engine.d.ts +0 -56
  137. package/dist/types/src/template_engine.d.ts.map +0 -1
  138. package/dist/types/src/text_node.d.ts +0 -44
  139. package/dist/types/src/text_node.d.ts.map +0 -1
  140. package/dist/types/src/tmpl/index.d.ts +0 -19
  141. package/dist/types/src/tmpl/index.d.ts.map +0 -1
  142. package/dist/types/src/tmpl/native_rendering.d.ts +0 -45
  143. package/dist/types/src/tmpl/native_rendering.d.ts.map +0 -1
  144. package/dist/types/src/tmpl/proc_gen_wrapper.d.ts +0 -89
  145. package/dist/types/src/tmpl/proc_gen_wrapper.d.ts.map +0 -1
  146. package/dist/types/src/tmpl/proc_gen_wrapper_dom.d.ts +0 -50
  147. package/dist/types/src/tmpl/proc_gen_wrapper_dom.d.ts.map +0 -1
  148. package/dist/types/src/tmpl/range_list_diff.d.ts +0 -19
  149. package/dist/types/src/tmpl/range_list_diff.d.ts.map +0 -1
  150. package/dist/types/src/trait_behaviors.d.ts +0 -38
  151. package/dist/types/src/trait_behaviors.d.ts.map +0 -1
  152. package/dist/types/src/virtual_node.d.ts +0 -10
  153. package/dist/types/src/virtual_node.d.ts.map +0 -1
  154. package/dist/types/tests/backend/domlike.test.d.ts +0 -2
  155. package/dist/types/tests/backend/domlike.test.d.ts.map +0 -1
  156. package/dist/types/tests/base/composed_backend.d.ts +0 -123
  157. package/dist/types/tests/base/composed_backend.d.ts.map +0 -1
  158. package/dist/types/tests/base/env.d.ts +0 -30
  159. package/dist/types/tests/base/env.d.ts.map +0 -1
  160. package/dist/types/tests/base/match.d.ts +0 -9
  161. package/dist/types/tests/base/match.d.ts.map +0 -1
  162. package/dist/types/tests/core/backend.test.d.ts +0 -2
  163. package/dist/types/tests/core/backend.test.d.ts.map +0 -1
  164. package/dist/types/tests/core/behavior.test.d.ts +0 -2
  165. package/dist/types/tests/core/behavior.test.d.ts.map +0 -1
  166. package/dist/types/tests/core/component_space.test.d.ts +0 -2
  167. package/dist/types/tests/core/component_space.test.d.ts.map +0 -1
  168. package/dist/types/tests/core/data_update.test.d.ts +0 -2
  169. package/dist/types/tests/core/data_update.test.d.ts.map +0 -1
  170. package/dist/types/tests/core/misc.test.d.ts +0 -2
  171. package/dist/types/tests/core/misc.test.d.ts.map +0 -1
  172. package/dist/types/tests/core/placeholder.test.d.ts +0 -2
  173. package/dist/types/tests/core/placeholder.test.d.ts.map +0 -1
  174. package/dist/types/tests/core/slot.test.d.ts +0 -2
  175. package/dist/types/tests/core/slot.test.d.ts.map +0 -1
  176. package/dist/types/tests/core/trait_behaviors.test.d.ts +0 -2
  177. package/dist/types/tests/core/trait_behaviors.test.d.ts.map +0 -1
  178. package/dist/types/tests/tmpl/binding_map.test.d.ts +0 -2
  179. package/dist/types/tests/tmpl/binding_map.test.d.ts.map +0 -1
  180. package/dist/types/tests/tmpl/event.test.d.ts +0 -2
  181. package/dist/types/tests/tmpl/event.test.d.ts.map +0 -1
  182. package/dist/types/tests/tmpl/expression.test.d.ts +0 -2
  183. package/dist/types/tests/tmpl/expression.test.d.ts.map +0 -1
  184. package/dist/types/tests/tmpl/lvalue.test.d.ts +0 -2
  185. package/dist/types/tests/tmpl/lvalue.test.d.ts.map +0 -1
  186. package/dist/types/tests/tmpl/native_rendering.test.d.ts +0 -2
  187. package/dist/types/tests/tmpl/native_rendering.test.d.ts.map +0 -1
  188. package/dist/types/tests/tmpl/structure.test.d.ts +0 -2
  189. package/dist/types/tests/tmpl/structure.test.d.ts.map +0 -1
  190. package/dist/types/tests/types/chaining.test.d.ts +0 -2
  191. package/dist/types/tests/types/chaining.test.d.ts.map +0 -1
  192. package/dist/types/tests/types/createElement.test.d.ts +0 -2
  193. package/dist/types/tests/types/createElement.test.d.ts.map +0 -1
  194. package/dist/types/tests/types/definition.test.d.ts +0 -2
  195. package/dist/types/tests/types/definition.test.d.ts.map +0 -1
  196. package/webpack.config.js +0 -275
  197. /package/src/backend/{mode.ts → shared.ts} +0 -0
package/src/tmpl/index.ts CHANGED
@@ -1,23 +1,20 @@
1
1
  /* eslint-disable class-methods-use-this */
2
2
 
3
- import {
4
- ShadowRoot,
5
- ExternalShadowRoot,
6
- DataValue,
7
- templateEngine,
8
- GeneralBehavior,
9
- NormalizedComponentOptions,
10
- ShadowedEvent,
11
- GeneralComponent,
12
- } from '..'
13
- import { DataChange } from '../data_proxy'
3
+ import { type GeneralBehavior } from '../behavior'
4
+ import { type GeneralComponent } from '../component'
5
+ import { type DataChange, type DataValue } from '../data_proxy'
6
+ import { type ShadowedEvent } from '../event'
7
+ import { type ExternalShadowRoot } from '../external_shadow_tree'
8
+ import { type NormalizedComponentOptions } from '../global_options'
9
+ import { type ShadowRoot } from '../shadow_root'
10
+ import { type Template, type TemplateEngine, type TemplateInstance } from '../template_engine'
14
11
  import { GlassEaselTemplateDOM } from './native_rendering'
15
12
  import {
16
13
  ProcGenWrapper,
17
- ProcGenEnv,
18
- ProcGen,
19
- BindingMapGen,
20
- UpdatePathTreeNode,
14
+ type BindingMapGen,
15
+ type ProcGen,
16
+ type ProcGenEnv,
17
+ type UpdatePathTreeNode,
21
18
  } from './proc_gen_wrapper'
22
19
 
23
20
  const DEFAULT_PROC_GEN: ProcGen = () => ({
@@ -36,7 +33,7 @@ export type ComponentTemplate = {
36
33
  groupList?: ProcGenGroupList
37
34
  content: (name: string) => ProcGen
38
35
  updateMode?: string
39
- disallowNativeNode?: boolean
36
+ fallbackListenerOnNativeNode?: boolean
40
37
  eventObjectFilter?: (x: ShadowedEvent<unknown>) => ShadowedEvent<unknown>
41
38
  procGenWrapperType?: typeof ProcGenWrapper
42
39
  }
@@ -47,11 +44,8 @@ const enum BindingMapUpdateEnabled {
47
44
  Forced,
48
45
  }
49
46
 
50
- export class GlassEaselTemplateEngine implements templateEngine.TemplateEngine {
51
- create(
52
- behavior: GeneralBehavior,
53
- componentOptions: NormalizedComponentOptions,
54
- ): templateEngine.Template {
47
+ export class GlassEaselTemplateEngine implements TemplateEngine {
48
+ create(behavior: GeneralBehavior, componentOptions: NormalizedComponentOptions): Template {
55
49
  if (componentOptions.externalComponent) {
56
50
  return new GlassEaselTemplateDOM(behavior)
57
51
  }
@@ -59,10 +53,10 @@ export class GlassEaselTemplateEngine implements templateEngine.TemplateEngine {
59
53
  }
60
54
  }
61
55
 
62
- class GlassEaselTemplate implements templateEngine.Template {
56
+ class GlassEaselTemplate implements Template {
63
57
  genObjectGroupEnv!: ProcGenEnv
64
58
  updateMode!: string
65
- disallowNativeNode!: boolean
59
+ fallbackListenerOnNativeNode!: boolean
66
60
  eventObjectFilter?: (x: ShadowedEvent<unknown>) => ShadowedEvent<unknown>
67
61
 
68
62
  constructor(behavior: GeneralBehavior) {
@@ -89,25 +83,28 @@ class GlassEaselTemplate implements templateEngine.Template {
89
83
  group: c.content,
90
84
  }
91
85
  this.updateMode = c.updateMode || ''
92
- this.disallowNativeNode = c.disallowNativeNode || false
86
+ this.fallbackListenerOnNativeNode = c.fallbackListenerOnNativeNode || false
93
87
  this.eventObjectFilter = c.eventObjectFilter
94
88
  }
95
89
 
96
- createInstance(comp: GeneralComponent): templateEngine.TemplateInstance {
97
- return new GlassEaselTemplateInstance(this, comp)
90
+ createInstance(
91
+ comp: GeneralComponent,
92
+ createShadowRoot: (component: GeneralComponent) => ShadowRoot,
93
+ ): TemplateInstance {
94
+ return new GlassEaselTemplateInstance(this, comp, createShadowRoot(comp))
98
95
  }
99
96
  }
100
97
 
101
- class GlassEaselTemplateInstance implements templateEngine.TemplateInstance {
98
+ class GlassEaselTemplateInstance implements TemplateInstance {
102
99
  comp: GeneralComponent
103
100
  shadowRoot: ShadowRoot
104
101
  procGenWrapper!: ProcGenWrapper
105
102
  forceBindingMapUpdate!: BindingMapUpdateEnabled
106
103
  bindingMapGen: { [field: string]: BindingMapGen[] } | undefined
107
104
 
108
- constructor(template: GlassEaselTemplate, comp: GeneralComponent) {
105
+ constructor(template: GlassEaselTemplate, comp: GeneralComponent, shadowRoot: ShadowRoot) {
109
106
  this.comp = comp
110
- this.shadowRoot = ShadowRoot.createShadowRoot(comp)
107
+ this.shadowRoot = shadowRoot
111
108
  this.shadowRoot.destroyBackendElementOnDetach()
112
109
  this._$applyTemplate(template)
113
110
  }
@@ -130,7 +127,7 @@ class GlassEaselTemplateInstance implements templateEngine.TemplateInstance {
130
127
  this.procGenWrapper = new ProcGenWrapper(
131
128
  this.shadowRoot,
132
129
  procGen,
133
- template.disallowNativeNode,
130
+ template.fallbackListenerOnNativeNode,
134
131
  template.eventObjectFilter,
135
132
  )
136
133
  this.bindingMapGen = undefined
@@ -215,3 +212,14 @@ class GlassEaselTemplateInstance implements templateEngine.TemplateInstance {
215
212
  return this.procGenWrapper.bindingMapUpdate(path[0] as string, data, bindingMapGen)
216
213
  }
217
214
  }
215
+
216
+ let defaultTemplateEngine: TemplateEngine | null = null
217
+
218
+ export const getDefaultTemplateEngine = (): TemplateEngine => {
219
+ if (defaultTemplateEngine) {
220
+ return defaultTemplateEngine
221
+ }
222
+ const tmpl = new GlassEaselTemplateEngine()
223
+ defaultTemplateEngine = tmpl
224
+ return tmpl
225
+ }
@@ -1,21 +1,16 @@
1
1
  /* global document: false */
2
2
 
3
- import {
4
- ExternalShadowRoot,
5
- DataValue,
6
- templateEngine,
7
- GeneralFuncType,
8
- GeneralBehavior,
9
- Event,
10
- ShadowedEvent,
11
- GeneralBackendElement,
12
- BackendMode,
13
- GeneralComponent,
14
- } from '..'
15
- import { DataChange } from '../data_proxy'
16
- import { ProcGenEnv, ProcGen, BindingMapGen } from './proc_gen_wrapper'
3
+ import { BackendMode, type GeneralBackendElement } from '../backend'
4
+ import { type GeneralBehavior } from '../behavior'
5
+ import { type GeneralComponent } from '../component'
6
+ import { type DataChange, type DataValue } from '../data_proxy'
7
+ import { type Event, type ShadowedEvent } from '../event'
8
+ import { type ExternalShadowRoot } from '../external_shadow_tree'
9
+ import { type GeneralFuncType } from '../func_arr'
10
+ import { type Template, type TemplateInstance } from '../template_engine'
11
+ import { type ComponentTemplate, type ProcGenGroupList } from './index'
12
+ import { type BindingMapGen, type ProcGen, type ProcGenEnv } from './proc_gen_wrapper'
17
13
  import { ProcGenWrapperDom } from './proc_gen_wrapper_dom'
18
- import { ComponentTemplate, ProcGenGroupList } from './index'
19
14
 
20
15
  type ElementWithEvent = Element & {
21
16
  _$wxTmplEv: { [ev: string]: (event: ShadowedEvent<unknown>) => unknown }
@@ -30,7 +25,7 @@ const DEFAULT_PROC_GEN_DOM: ProcGen = () => ({
30
25
  })
31
26
  export const DEFAULT_PROC_GEN_GROUP_DOM: (name: string) => ProcGen = () => DEFAULT_PROC_GEN_DOM
32
27
 
33
- export class GlassEaselTemplateDOM implements templateEngine.Template {
28
+ export class GlassEaselTemplateDOM implements Template {
34
29
  data: DataValue
35
30
  innerData: DataValue
36
31
  genObjectGroupEnv: ProcGenEnv
@@ -55,14 +50,12 @@ export class GlassEaselTemplateDOM implements templateEngine.Template {
55
50
  this.methods = behavior._$methodMap
56
51
  }
57
52
 
58
- createInstance(comp: GeneralComponent): templateEngine.TemplateInstance {
53
+ createInstance(comp: GeneralComponent): TemplateInstance {
59
54
  return new GlassEaselTemplateDOMInstance(this, comp)
60
55
  }
61
56
  }
62
57
 
63
- export class GlassEaselTemplateDOMInstance
64
- implements templateEngine.TemplateInstance, ExternalShadowRoot
65
- {
58
+ export class GlassEaselTemplateDOMInstance implements TemplateInstance, ExternalShadowRoot {
66
59
  template: GlassEaselTemplateDOM
67
60
  comp: GeneralComponent
68
61
  shadowRoot: ExternalShadowRoot
@@ -144,7 +137,7 @@ export class GlassEaselTemplateDOMInstance
144
137
  const target = elem as unknown as ElementWithEvent
145
138
  let cur: Element = target
146
139
  const root = this.shadowRootElement
147
- const evName = event.type
140
+ const evName = event.getEventName()
148
141
  const bubbles = event.bubbles
149
142
  for (;;) {
150
143
  const shadowedEvent = event.wrapShadowedEvent(target as any, null, cur as any)