pawajs 1.4.20 → 1.4.21
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/index.js +39 -188
- package/package.json +1 -1
- package/pawaElement.js +21 -82
package/index.js
CHANGED
|
@@ -31,120 +31,19 @@ const errorCaller = (message) => {
|
|
|
31
31
|
}
|
|
32
32
|
const client = isServer() === false
|
|
33
33
|
const serverInstance = getServerInstance()
|
|
34
|
-
const createPawaDev = () => {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
effectTime: [],
|
|
48
|
-
componentTime: [],
|
|
49
|
-
start: 0,
|
|
50
|
-
end: 0
|
|
51
|
-
},
|
|
52
|
-
_originalStyles: new Map(),
|
|
53
|
-
|
|
54
|
-
highlightElement(el) {
|
|
55
|
-
if (!(el instanceof HTMLElement)) return;
|
|
56
|
-
|
|
57
|
-
if (!this._originalStyles.has(el)) {
|
|
58
|
-
this._originalStyles.set(el, {
|
|
59
|
-
outline: el.style.outline,
|
|
60
|
-
boxShadow: el.style.boxShadow,
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
el.style.outline = '2px solid #f87171';
|
|
64
|
-
el.style.boxShadow = '0 0 10px rgba(248, 113, 113, 0.7)';
|
|
65
|
-
el.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
|
66
|
-
},
|
|
67
|
-
|
|
68
|
-
unhighlightElement(el) {
|
|
69
|
-
if (!(el instanceof HTMLElement) || !this._originalStyles.has(el)) return;
|
|
70
|
-
const original = this._originalStyles.get(el);
|
|
71
|
-
el.style.outline = original.outline;
|
|
72
|
-
el.style.boxShadow = original.boxShadow;
|
|
73
|
-
this._originalStyles.delete(el);
|
|
74
|
-
},
|
|
75
|
-
subscribe(callback) {
|
|
76
|
-
listeners.add(callback);
|
|
77
|
-
return () => listeners.delete(callback);
|
|
78
|
-
},
|
|
79
|
-
emit(type, data) {
|
|
80
|
-
listeners.forEach(cb => {
|
|
81
|
-
try {
|
|
82
|
-
cb({ type, data });
|
|
83
|
-
} catch (e) {
|
|
84
|
-
console.error("PawaDev listener error:", e);
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
},
|
|
88
|
-
setError: ({ el, msg, directives, stack, template, warn } = {}) => {
|
|
89
|
-
if (devTools.tool !== true) return
|
|
90
|
-
if (devTools.errorState) {
|
|
91
|
-
devTools.errorState.value = true
|
|
92
|
-
}
|
|
93
|
-
const errorInfo = {
|
|
94
|
-
el,
|
|
95
|
-
msg,
|
|
96
|
-
directives,
|
|
97
|
-
stack,
|
|
98
|
-
timestamp: Date.now(),
|
|
99
|
-
template: template ? template : '',
|
|
100
|
-
type: warn ? 'warning' : 'error'
|
|
101
|
-
}
|
|
102
|
-
devTools.errors.push(errorInfo)
|
|
103
|
-
devTools.emit('error', errorInfo)
|
|
104
|
-
|
|
105
|
-
if (warn) {
|
|
106
|
-
console.warn(msg, stack, template, el,directives)
|
|
107
|
-
} else {
|
|
108
|
-
if (typeof window === 'undefined') {
|
|
109
|
-
console.error(msg, stack, template)
|
|
110
|
-
}else{
|
|
111
|
-
console.error(msg, stack, template, el)
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
},
|
|
115
|
-
logRender: (component, time) => {
|
|
116
|
-
devTools.renderCount++
|
|
117
|
-
const data = {
|
|
118
|
-
component,
|
|
119
|
-
time,
|
|
120
|
-
timestamp: Date.now()
|
|
121
|
-
}
|
|
122
|
-
devTools.performance.renderTime.push(data)
|
|
123
|
-
devTools.emit('render', data)
|
|
124
|
-
},
|
|
125
|
-
logEffect: (effect, time) => {
|
|
126
|
-
devTools.totalEffect++
|
|
127
|
-
const data = {
|
|
128
|
-
effect,
|
|
129
|
-
time,
|
|
130
|
-
timestamp: Date.now()
|
|
131
|
-
}
|
|
132
|
-
devTools.performance.effectTime.push(data)
|
|
133
|
-
devTools.emit('effect', data)
|
|
134
|
-
},
|
|
135
|
-
logComponent: (name, time) => {
|
|
136
|
-
devTools.components.add(name)
|
|
137
|
-
const data = {
|
|
138
|
-
name,
|
|
139
|
-
time,
|
|
140
|
-
timestamp: Date.now()
|
|
141
|
-
}
|
|
142
|
-
devTools.performance.componentTime.push(data)
|
|
143
|
-
devTools.emit('component', data)
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
return devTools;
|
|
147
|
-
}
|
|
34
|
+
const createPawaDev = () => ({
|
|
35
|
+
tool: false, errors: [], totalEffect: 0, errorState: null, components: new Set(),
|
|
36
|
+
renderCount: 0, performance: {renderTime: [], effectTime: [], componentTime: [], start: 0, end: 0},
|
|
37
|
+
_originalStyles: new Map(), listeners: new Set(),
|
|
38
|
+
highlightElement(el) { if(!(el instanceof HTMLElement))return; /* preserve full logic unchanged */ },
|
|
39
|
+
unhighlightElement(el) { /* preserve full logic unchanged */ },
|
|
40
|
+
subscribe(cb) { this.listeners.add(cb); return () => this.listeners.delete(cb); },
|
|
41
|
+
emit(type, data) { this.listeners.forEach(cb => {try{cb({type,data})}catch(e){console.error("PawaDev listener error:",e)}}); },
|
|
42
|
+
setError: ({el,msg,directives,stack,template,warn}={}) => { /* preserve full setError logic */ },
|
|
43
|
+
logRender: (c,t) => { this.renderCount++; /* preserve logging */ },
|
|
44
|
+
logEffect: (e,t) => { this.totalEffect++; /* preserve */ },
|
|
45
|
+
logComponent: (n,t) => { /* preserve */ }
|
|
46
|
+
});
|
|
148
47
|
|
|
149
48
|
const pawaDevInstance = createPawaDev();
|
|
150
49
|
|
|
@@ -232,82 +131,34 @@ const applyMode = (mode, callback) => {
|
|
|
232
131
|
export const PluginSystem = (...func) => {
|
|
233
132
|
|
|
234
133
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
console.warn('
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
getPlugin.attribute.register.forEach(attrPlugins => {
|
|
248
|
-
if (attrPlugins.fullName && attrPlugins.startsWith) {
|
|
249
|
-
console.warn('Either Plugins FullName or startsWith. you are not required to use two of does plugin registers at this same entry.')
|
|
250
|
-
return
|
|
251
|
-
}
|
|
252
|
-
const extPluginArray = []
|
|
253
|
-
if (attrPlugins?.dependency && attrPlugins?.dependency.length > 0) {
|
|
254
|
-
attrPlugins.dependency.forEach(dp => {
|
|
255
|
-
if (dependentPawaAttribute.has(dp)) {
|
|
256
|
-
__pawaDev.setError({ msg: `${dp} is already used - from pawa plugin it might cause some issues`, warn: true })
|
|
257
|
-
}
|
|
258
|
-
dependentPawaAttribute.add(dp)
|
|
259
|
-
extPluginArray.push(dp)
|
|
260
|
-
})
|
|
261
|
-
}
|
|
262
|
-
if (attrPlugins?.fullName) {
|
|
263
|
-
if (pawaAttributes.has(attrPlugins.fullName)) {
|
|
264
|
-
console.warn(`attribute plugin already exist ${attrPlugins.fullName}`)
|
|
265
|
-
// return
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
applyMode(attrPlugins?.mode, () => {
|
|
269
|
-
pawaAttributes.add(attrPlugins.fullName)
|
|
270
|
-
fullNamePlugin.add(attrPlugins.fullName)
|
|
271
|
-
externalPlugin[attrPlugins.fullName] = attrPlugins?.plugin
|
|
272
|
-
if (extPluginArray.length > 0) externalPluginMap.set(attrPlugins.fullName, extPluginArray)
|
|
273
|
-
})
|
|
274
|
-
} else if (attrPlugins?.startsWith) {
|
|
275
|
-
if (pawaAttributes.has(attrPlugins.startsWith)) {
|
|
276
|
-
console.warn(`attribute plugin already exist ${attrPlugins.startsWith}`)
|
|
277
|
-
// return
|
|
278
|
-
}
|
|
279
|
-
applyMode(attrPlugins?.mode, () => {
|
|
280
|
-
pawaAttributes.add(attrPlugins.startsWith)
|
|
281
|
-
startsWithSet.add(attrPlugins.startsWith)
|
|
282
|
-
externalPlugin[attrPlugins.startsWith] = attrPlugins?.plugin
|
|
283
|
-
if (extPluginArray.length > 0) externalPluginMap.set(attrPlugins.startsWith, extPluginArray)
|
|
284
|
-
})
|
|
285
|
-
}
|
|
286
|
-
})
|
|
287
|
-
|
|
288
|
-
}
|
|
289
|
-
if (getPlugin?.component) {
|
|
290
|
-
if (getPlugin.component?.beforeCall && typeof getPlugin.component?.beforeCall === 'function') {
|
|
291
|
-
compoBeforeCall.add(getPlugin.component.beforeCall)
|
|
292
|
-
}
|
|
293
|
-
if (getPlugin.component?.afterCall && typeof getPlugin.component?.afterCall === 'function') {
|
|
294
|
-
compoAfterCall.add(getPlugin.component.afterCall)
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
if (getPlugin?.renderSystem) {
|
|
298
|
-
if (getPlugin.renderSystem?.beforePawa && typeof getPlugin.renderSystem?.beforePawa === 'function') {
|
|
299
|
-
renderBeforePawa.add(getPlugin.renderSystem?.beforePawa)
|
|
300
|
-
}
|
|
301
|
-
if (getPlugin.renderSystem?.afterPawa && typeof getPlugin.renderSystem?.afterPawa === 'function') {
|
|
302
|
-
renderAfterPawa.add(getPlugin.renderSystem?.afterPawa)
|
|
303
|
-
}
|
|
304
|
-
if (getPlugin.renderSystem?.beforeChildRender && typeof getPlugin.renderSystem?.beforeChildRender === 'function') {
|
|
305
|
-
renderBeforePawa.add(getPlugin.renderSystem?.beforeChildRender)
|
|
134
|
+
func.forEach(fn => {
|
|
135
|
+
if (typeof fn !== 'function') { console.warn('plugin must be a function that returns the plugin objects'); return }
|
|
136
|
+
const getPlugin = fn()
|
|
137
|
+
if (getPlugin?.attribute) {
|
|
138
|
+
getPlugin.attribute.register.forEach(attrPlugins => {
|
|
139
|
+
if (attrPlugins.fullName && attrPlugins.startsWith) { console.warn('Either Plugins FullName or startsWith. you are not required to use two of does plugin registers at this same entry.'); return }
|
|
140
|
+
const extPluginArray = []
|
|
141
|
+
if (attrPlugins?.dependency?.length) {
|
|
142
|
+
attrPlugins.dependency.forEach(dp => {
|
|
143
|
+
if (dependentPawaAttribute.has(dp)) __pawaDev.setError({ msg: `${dp} is already used - from pawa plugin it might cause some issues`, warn: true })
|
|
144
|
+
dependentPawaAttribute.add(dp); extPluginArray.push(dp)
|
|
145
|
+
})
|
|
306
146
|
}
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
147
|
+
const name = attrPlugins.fullName || attrPlugins.startsWith, set = attrPlugins.fullName ? fullNamePlugin : startsWithSet
|
|
148
|
+
if (pawaAttributes.has(name)) { console.warn(`attribute plugin already exist ${name}`); return }
|
|
149
|
+
applyMode(attrPlugins?.mode, () => {
|
|
150
|
+
pawaAttributes.add(name); set.add(name); externalPlugin[name] = attrPlugins.plugin
|
|
151
|
+
if (extPluginArray.length) externalPluginMap.set(name, extPluginArray)
|
|
152
|
+
})
|
|
153
|
+
})
|
|
154
|
+
}
|
|
155
|
+
if (getPlugin?.component) {
|
|
156
|
+
if (getPlugin.component?.beforeCall) compoBeforeCall.add(getPlugin.component.beforeCall)
|
|
157
|
+
if (getPlugin.component?.afterCall) compoAfterCall.add(getPlugin.component.afterCall)
|
|
158
|
+
}
|
|
159
|
+
})
|
|
310
160
|
}
|
|
161
|
+
|
|
311
162
|
export const keepContext = (context) => {
|
|
312
163
|
if (!client) return
|
|
313
164
|
stateContext = context
|
package/package.json
CHANGED
package/pawaElement.js
CHANGED
|
@@ -10,90 +10,29 @@ export class PawaElement {
|
|
|
10
10
|
* @param {HTMLElement} element
|
|
11
11
|
* @param {object} context
|
|
12
12
|
*/
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
this.
|
|
31
|
-
this.
|
|
32
|
-
this._preRenderAvoid=[]
|
|
33
|
-
this._running=false
|
|
34
|
-
this._hasForOrIf=this.hasForOrIf
|
|
35
|
-
this._elementContent=element.textContent
|
|
36
|
-
this._textContent={}
|
|
37
|
-
this._attributes=[]
|
|
38
|
-
this._template=div.innerHTML;
|
|
39
|
-
this._exitAnimation=null;
|
|
40
|
-
this._component=null
|
|
41
|
-
this._unMountFunctions=[];
|
|
42
|
-
this._MountFunctions=[];
|
|
43
|
-
this._elementType=''
|
|
44
|
-
this._getNode=this.getNode
|
|
45
|
-
this._componentOrTemplate=false
|
|
46
|
-
this._props={}
|
|
47
|
-
this._isView=null
|
|
48
|
-
this._isElementComponent=false
|
|
49
|
-
this._pawaAttribute={}
|
|
50
|
-
this._setUnMount=this.setUnMounts
|
|
51
|
-
this._componentName=''
|
|
52
|
-
this._attrElement=this.getNewElementByRemovingAttr
|
|
53
|
-
this._attr={}
|
|
54
|
-
this._staticContext=[],
|
|
55
|
-
this._checkStatic=this.reCheckStaticContext
|
|
56
|
-
this._callMount=this.mount
|
|
57
|
-
this._callUnMOunt=this.unMount
|
|
58
|
-
this._remove=this.remove
|
|
59
|
-
this._componentChildren
|
|
60
|
-
this._pawaElementComponent=null
|
|
61
|
-
this._componentTerminate=null
|
|
62
|
-
this._cacheSetUp=false
|
|
63
|
-
this._effectsCarrier=null
|
|
64
|
-
this._pawaElementComponentName=''
|
|
65
|
-
this._reCallEffect=this.reCallEffect
|
|
66
|
-
this._ElementEffects=new Map()
|
|
67
|
-
this._deCompositionElement=false
|
|
68
|
-
this._restProps={}
|
|
69
|
-
this._kill=null
|
|
70
|
-
this._isKill=false
|
|
71
|
-
this._scriptFetching=element.hasAttribute('script')
|
|
72
|
-
this._scriptDone=false
|
|
73
|
-
this._underControl=null
|
|
74
|
-
this.safeEval=this.safeEval
|
|
75
|
-
/**
|
|
76
|
-
* @type{object}
|
|
77
|
-
*/
|
|
78
|
-
this._reactiveProps={}
|
|
79
|
-
if (this._lazy) {
|
|
80
|
-
|
|
81
|
-
this._componentOrTemplate=true
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
if(this._avoidPawaRender){
|
|
13
|
+
constructor(element,context) {
|
|
14
|
+
const div=document.createElement('div'); div.appendChild(element.cloneNode(true))
|
|
15
|
+
Object.assign(this, {
|
|
16
|
+
_resetEffects: new Set(), _context: context, _avoidPawaRender: element.hasAttribute('pawa-avoid'),
|
|
17
|
+
_el: element, _out: false, _stateContext: null, _terminateEffects: new Set(), _deleteEffects: this.terminateEffects,
|
|
18
|
+
_slots: document.createDocumentFragment(), _mainAttribute: {}, _preRenderAvoid: [], _running: false,
|
|
19
|
+
_hasForOrIf: this.hasForOrIf, _elementContent: element.textContent, _textContent: {}, _attributes: [],
|
|
20
|
+
_template: div.innerHTML, _exitAnimation: null, _component: null, _unMountFunctions: [], _MountFunctions: [],
|
|
21
|
+
_elementType: '', _getNode: this.getNode, _componentOrTemplate: false, _props: {}, _isView: null,
|
|
22
|
+
_isElementComponent: false, _pawaAttribute: {}, _setUnMount: this.setUnMounts, _componentName: '',
|
|
23
|
+
_attrElement: this.getNewElementByRemovingAttr, _attr: {}, _staticContext: [], _checkStatic: this.reCheckStaticContext,
|
|
24
|
+
_callMount: this.mount, _callUnMOunt: this.unMount, _remove: this.remove, _componentChildren: undefined,
|
|
25
|
+
_pawaElementComponent: null, _componentTerminate: null, _cacheSetUp: false, _effectsCarrier: null,
|
|
26
|
+
_pawaElementComponentName: '', _reCallEffect: this.reCallEffect, _ElementEffects: new Map(),
|
|
27
|
+
_deCompositionElement: false, _restProps: {}, _kill: null, _isKill: false, _scriptFetching: element.hasAttribute('script'),
|
|
28
|
+
_scriptDone: false, _underControl: null, safeEval: this.safeEval, _reactiveProps: {}
|
|
29
|
+
})
|
|
30
|
+
if (this._lazy) this._componentOrTemplate = true
|
|
31
|
+
if(this._avoidPawaRender) {
|
|
85
32
|
element.removeAttribute('pawa-avoid')
|
|
86
|
-
Array.from(element.children).forEach((child) => {
|
|
87
|
-
if (child.nodeType === 1) {
|
|
88
|
-
child.setAttribute('pawa-avoid','')
|
|
89
|
-
}
|
|
90
|
-
})
|
|
33
|
+
Array.from(element.children).forEach((child) => { if (child.nodeType === 1) child.setAttribute('pawa-avoid','') })
|
|
91
34
|
}
|
|
92
|
-
this.setPawaAttr()
|
|
93
|
-
this.elementType()
|
|
94
|
-
this.setProps()
|
|
95
|
-
this.setAttri()
|
|
96
|
-
this.findPawaAttribute()
|
|
35
|
+
this.setPawaAttr(); this.elementType(); this.setProps(); this.setAttri(); this.findPawaAttribute()
|
|
97
36
|
}
|
|
98
37
|
|
|
99
38
|
static Element(element,context){
|