domql 1.5.136 → 1.6.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 (90) hide show
  1. package/dist/cjs/element/applyParam.js +41 -0
  2. package/dist/cjs/element/assign.js +35 -0
  3. package/dist/cjs/element/cache.js +74 -0
  4. package/dist/cjs/element/create.js +264 -0
  5. package/dist/cjs/element/define.js +34 -0
  6. package/dist/cjs/element/extend.js +75 -0
  7. package/dist/cjs/element/index.js +55 -0
  8. package/dist/cjs/element/iterate.js +105 -0
  9. package/dist/cjs/element/methods.js +166 -0
  10. package/dist/cjs/element/node.js +80 -0
  11. package/dist/cjs/element/nodes.js +158 -0
  12. package/dist/cjs/element/options.js +24 -0
  13. package/dist/cjs/element/parse.js +42 -0
  14. package/dist/cjs/element/props.js +114 -0
  15. package/dist/cjs/element/remove.js +44 -0
  16. package/dist/cjs/element/root.js +30 -0
  17. package/dist/cjs/element/set.js +55 -0
  18. package/dist/cjs/element/state.js +208 -0
  19. package/dist/cjs/element/tree.js +31 -0
  20. package/dist/cjs/element/update.js +158 -0
  21. package/dist/cjs/event/can.js +30 -0
  22. package/dist/cjs/event/index.js +34 -0
  23. package/dist/cjs/event/is.js +28 -0
  24. package/dist/cjs/event/on.js +34 -0
  25. package/dist/cjs/event/store.js +27 -0
  26. package/dist/cjs/event/wrappers.js +36 -0
  27. package/dist/cjs/index.js +35 -0
  28. package/dist/cjs/package.json +4 -0
  29. package/dist/cjs/utils/component.js +77 -0
  30. package/dist/cjs/utils/extendUtils.js +142 -0
  31. package/dist/cjs/utils/index.js +20 -0
  32. package/dist/cjs/utils/object.js +146 -0
  33. package/dist/esm/element/applyParam.js +2614 -0
  34. package/dist/esm/element/assign.js +16 -0
  35. package/dist/esm/element/cache.js +1134 -0
  36. package/dist/esm/element/create.js +2616 -0
  37. package/dist/esm/element/define.js +2623 -0
  38. package/dist/esm/element/extend.js +984 -0
  39. package/dist/esm/element/index.js +2667 -0
  40. package/dist/esm/element/iterate.js +1114 -0
  41. package/dist/esm/element/methods.js +2635 -0
  42. package/dist/esm/element/node.js +2617 -0
  43. package/dist/esm/element/nodes.js +139 -0
  44. package/dist/esm/element/options.js +5 -0
  45. package/dist/esm/element/parse.js +2629 -0
  46. package/dist/esm/element/props.js +958 -0
  47. package/dist/esm/element/remove.js +842 -0
  48. package/dist/esm/element/root.js +162 -0
  49. package/dist/esm/element/set.js +2616 -0
  50. package/dist/esm/element/state.js +1209 -0
  51. package/dist/esm/element/tree.js +165 -0
  52. package/dist/esm/element/update.js +2616 -0
  53. package/dist/esm/event/can.js +1058 -0
  54. package/dist/esm/event/index.js +1098 -0
  55. package/dist/esm/event/is.js +67 -0
  56. package/dist/esm/event/on.js +15 -0
  57. package/dist/esm/event/store.js +8 -0
  58. package/dist/esm/event/wrappers.js +75 -0
  59. package/dist/esm/index.js +2658 -0
  60. package/dist/esm/utils/component.js +875 -0
  61. package/dist/esm/utils/extendUtils.js +940 -0
  62. package/dist/esm/utils/index.js +1260 -0
  63. package/dist/esm/utils/object.js +1081 -0
  64. package/dist/iife/index.js +2658 -0
  65. package/package.json +9 -4
  66. package/src/element/create.js +16 -13
  67. package/src/element/index.js +4 -10
  68. package/src/element/iterate.js +7 -28
  69. package/src/element/methods.js +18 -81
  70. package/src/element/mixins/content.js +6 -4
  71. package/src/element/mixins/registry.js +3 -4
  72. package/src/element/node.js +5 -6
  73. package/src/element/parse.js +1 -1
  74. package/src/element/props.js +3 -1
  75. package/src/element/state.js +168 -81
  76. package/src/element/update.js +100 -77
  77. package/src/index.js +6 -5
  78. package/src/utils/component.js +0 -1
  79. package/src/utils/object.js +31 -25
  80. package/src/element/assign.js +0 -22
  81. package/src/element/cache.js +0 -56
  82. package/src/element/nodes.js +0 -141
  83. package/src/element/root.js +0 -11
  84. package/src/element/tree.js +0 -5
  85. package/src/event/can.js +0 -10
  86. package/src/event/index.js +0 -11
  87. package/src/event/is.js +0 -15
  88. package/src/event/on.js +0 -13
  89. package/src/event/store.js +0 -6
  90. package/src/event/wrappers.js +0 -16
package/package.json CHANGED
@@ -1,8 +1,7 @@
1
1
  {
2
2
  "name": "domql",
3
3
  "description": "DOM rendering Javascript framework at early stage.",
4
- "author": "symbo.ls",
5
- "version": "1.5.136",
4
+ "version": "1.6.0",
6
5
  "repository": "https://github.com/domql/domql",
7
6
  "publishConfig": {
8
7
  "registry": "https://registry.npmjs.org"
@@ -16,7 +15,7 @@
16
15
  ],
17
16
  "scripts": {
18
17
  "copy:package:cjs": "cp ./.build/package-cjs.json dist/cjs/package.json",
19
- "build:esm": "npx esbuild src/index.js src/**/*.js --target=es2020 --format=esm --outdir=dist/esm",
18
+ "build:esm": "npx esbuild src/index.js src/**/*.js --target=es2020 --format=esm --outdir=dist/esm --bundle",
20
19
  "build:cjs": "npx esbuild src/index.js src/**/*.js --target=node16 --format=cjs --outdir=dist/cjs",
21
20
  "build:iife": "npx esbuild src/index.js --target=node16 --format=iife --outdir=dist/iife --bundle",
22
21
  "build": "yarn build:esm && yarn build:cjs && yarn build:iife",
@@ -24,11 +23,17 @@
24
23
  "start": "parcel examples/index.html --no-cache",
25
24
  "test:lint": "npx standard \"src/**/*.js\"",
26
25
  "test": "yarn test:lint; jest --coverage --coverageReporters=text-lcov | coveralls",
27
- "test-watch": "jest --watch"
26
+ "test:watch": "jest --watch"
28
27
  },
29
28
  "dependencies": {
29
+ "@domql/key": "latest",
30
+ "@domql/env": "latest",
31
+ "@domql/node": "latest",
32
+ "@domql/render": "latest",
33
+ "@domql/tree": "latest",
30
34
  "@domql/globals": "latest",
31
35
  "@domql/registry": "latest",
36
+ "@domql/methods": "latest",
32
37
  "@domql/event": "latest",
33
38
  "@domql/report": "latest",
34
39
  "@domql/emotion": "latest",
@@ -1,20 +1,22 @@
1
1
  'use strict'
2
2
 
3
- import { isObject, isFunction, isString, createID, isNode, exec, is } from '@domql/utils'
3
+ import { isObject, isFunction, isString, exec, is, isNode } from '@domql/utils'
4
+ import { ROOT } from '@domql/tree'
5
+ import { createKey } from '@domql/key'
4
6
  import { TAGS } from '@domql/registry'
5
7
  import { triggerEventOn } from '@domql/event'
8
+ import { appendNode, assignNode } from '@domql/render'
9
+ import { isMethod, lookup, setProps, remove, spotByPath } from '@domql/methods'
10
+ import { assignClass } from '@domql/classlist'
11
+ import { cacheNode, detectTag } from '@domql/node'
6
12
 
7
- import root from './root'
8
13
  import createNode from './node'
9
- import { appendNode, assignNode } from './assign'
10
14
  import { applyExtend } from './extend'
11
15
  import set from './set'
12
16
  import createState from './state'
13
17
  import createProps from './props'
14
18
  import update from './update'
15
- import { assignClass } from './mixins/classList'
16
- import { remove, lookup, setProps, log, keys, parse, parseDeep, spotByPath, nextElement, previousElement, isMethod } from './methods'
17
- import cacheNode, { detectTag } from './cache'
19
+ import { log, keys, parse, parseDeep, nextElement, previousElement } from './methods'
18
20
  import { registry } from './mixins'
19
21
  import { throughInitialExec } from './iterate'
20
22
  import OPTIONS from './options'
@@ -25,7 +27,6 @@ import {
25
27
  checkIfKeyIsComponent
26
28
  } from '../utils/component'
27
29
  import { removeContentElement } from './remove'
28
- // import { overwrite, clone, fillTheRest } from '../utils'
29
30
 
30
31
  const ENV = process.env.NODE_ENV
31
32
 
@@ -56,8 +57,10 @@ const create = (element, parent, key, options = OPTIONS.create || {}) => {
56
57
  }
57
58
 
58
59
  // if PARENT is not given
59
- if (!parent) parent = root
60
- if (isNode(parent)) parent = root[`${key}_parent`] = { key: ':root', node: parent }
60
+ if (!parent) parent = ROOT
61
+ if (isNode(parent)) {
62
+ parent = ROOT[`${key}_parent`] = { key: ':root', node: parent }
63
+ }
61
64
 
62
65
  // if element is STRING
63
66
  if (checkIfPrimitive(element)) {
@@ -65,7 +68,7 @@ const create = (element, parent, key, options = OPTIONS.create || {}) => {
65
68
  }
66
69
 
67
70
  // define KEY
68
- const assignedKey = (element.key || key || createID()).toString()
71
+ const assignedKey = (element.key || key || createKey()).toString()
69
72
 
70
73
  if (checkIfKeyIsComponent(assignedKey)) {
71
74
  element = applyKeyComponentAsExtend(element, parent, assignedKey)
@@ -182,8 +185,8 @@ const addMethods = (element, parent) => {
182
185
  }
183
186
 
184
187
  const applyContext = (element, parent, options) => {
185
- if (options.context && !root.context && !element.context) root.context = options.context
186
- if (!element.context) element.context = parent.context || options.context || root.context
188
+ if (options.context && !ROOT.context && !element.context) ROOT.context = options.context
189
+ if (!element.context) element.context = parent.context || options.context || ROOT.context
187
190
  }
188
191
 
189
192
  const checkIf = (element, parent) => {
@@ -228,7 +231,7 @@ const addCaching = (element, parent) => {
228
231
 
229
232
  // Add _root element property
230
233
  const hasRoot = parent && parent.key === ':root'
231
- if (!__ref.__root) __ref.__root = hasRoot ? element : parent.__ref.__root
234
+ if (!__ref.__root) __ref.__root = hasRoot ? element : __parentRef.__root
232
235
 
233
236
  // set the PATH array
234
237
  if (ENV === 'test' || ENV === 'development') {
@@ -1,31 +1,25 @@
1
1
  'use strict'
2
2
 
3
- import root from './root'
4
- import tree from './tree'
5
- import cache from './cache'
3
+ import { TREE } from '@domql/tree'
6
4
  import create from './create'
7
5
  import createNode from './node'
8
- import * as assign from './assign'
9
6
  import define from './define'
10
7
  import update from './update'
11
8
  import parse from './parse'
12
9
  import set from './set'
13
10
 
14
- import { lookup, remove, get, setProps, log, keys } from './methods'
11
+ import { log, keys } from './methods'
12
+ import { get, remove, lookup } from '@domql/methods'
15
13
 
16
14
  export {
17
- root,
18
- tree,
19
- cache,
15
+ TREE,
20
16
  create,
21
17
  createNode,
22
- assign,
23
18
  define,
24
19
  remove,
25
20
  update,
26
21
  parse,
27
22
  lookup,
28
- setProps,
29
23
  set,
30
24
  get,
31
25
  log,
@@ -2,31 +2,7 @@
2
2
 
3
3
  import { isObject, exec, isFunction, isNumber, isString } from '@domql/utils'
4
4
  import { overwrite } from '../utils'
5
- import { isMethod } from './methods'
6
-
7
- export const applyEvents = element => {
8
- const { node, on } = element
9
- for (const param in on) {
10
- if (
11
- param === 'init' ||
12
- param === 'beforeClassAssign' ||
13
- param === 'render' ||
14
- param === 'renderRouter' ||
15
- param === 'attachNode' ||
16
- param === 'stateInit' ||
17
- param === 'stateCreated' ||
18
- param === 'initStateUpdated' ||
19
- param === 'stateUpdated' ||
20
- param === 'initUpdate' ||
21
- param === 'update'
22
- ) continue
23
-
24
- const appliedFunction = element.on[param]
25
- if (isFunction(appliedFunction)) {
26
- node.addEventListener(param, event => appliedFunction(event, element, element.state, element.context))
27
- }
28
- }
29
- }
5
+ import { isMethod } from '@domql/methods'
30
6
 
31
7
  export const throughInitialExec = element => {
32
8
  const { __ref } = element
@@ -74,11 +50,13 @@ export const throughInitialDefine = (element) => {
74
50
 
75
51
  if (isFunction(prop) && !isMethod(param)) {
76
52
  __exec[param] = prop
77
- element[param] = prop = exec(prop, element)
53
+ const execParam = prop = exec(prop, element)
54
+ if (execParam) element[param] = execParam
78
55
  }
79
56
 
80
57
  __cached[param] = prop
81
- element[param] = obj[param](prop, element, element.state)
58
+ const execParam = obj[param](prop, element, element.state)
59
+ if (execParam) element[param] = execParam
82
60
  }
83
61
  return element
84
62
  }
@@ -96,7 +74,8 @@ export const throughUpdatedDefine = (element) => {
96
74
  const execParam = __exec[param]
97
75
  if (execParam) __cached[param] = execParam(element, element.state)
98
76
  const cached = exec(__cached[param], element)
99
- element[param] = obj[param](cached, element, element.state)
77
+ const newExecParam = obj[param](cached, element, element.state)
78
+ if (newExecParam) element[param] = newExecParam
100
79
  }
101
80
  return changes
102
81
  }
@@ -1,57 +1,7 @@
1
1
  'use strict'
2
2
 
3
- import { isFunction, isObjectLike } from '@domql/utils'
3
+ import { isDefined, isFunction, isObjectLike } from '@domql/utils'
4
4
  import { parseFilters, registry } from './mixins'
5
- import root from './root'
6
-
7
- const ENV = process.env.NODE_ENV
8
-
9
- // TODO: update these files
10
- export const lookup = function (key) {
11
- const element = this
12
- let { parent } = element
13
-
14
- while (parent.key !== key) {
15
- if (parent[key]) return parent[key]
16
- parent = parent.parent
17
- if (!parent) return
18
- }
19
-
20
- return parent
21
- }
22
-
23
- // TODO: update these files
24
- export const spotByPath = function (path) {
25
- const element = this
26
- const arr = [].concat(path)
27
- let active = root[arr[0]]
28
-
29
- if (!arr || !arr.length) return console.log(arr, 'on', element.key, 'is undefined')
30
-
31
- while (active.key === arr[0]) {
32
- arr.shift()
33
- if (!arr.length) break
34
- active = active[arr[0]]
35
- if (!active) return
36
- }
37
-
38
- return active
39
- }
40
-
41
- export const remove = function (params) {
42
- const element = this
43
- if (isFunction(element.node.remove)) element.node.remove()
44
- else if (ENV === 'test' || ENV === 'development') {
45
- console.warn('This item cant be removed')
46
- element.log()
47
- }
48
- delete element.parent[element.key]
49
- }
50
-
51
- export const get = function (param) {
52
- const element = this
53
- return element[param]
54
- }
55
5
 
56
6
  export const set = function () {
57
7
  }
@@ -59,13 +9,6 @@ export const set = function () {
59
9
  export const update = function () {
60
10
  }
61
11
 
62
- export const setProps = function (param, options) {
63
- const element = this
64
- if (!param || !element.props) return
65
- element.update({ props: param }, options)
66
- return element
67
- }
68
-
69
12
  export const defineSetter = (element, key, get, set) =>
70
13
  Object.defineProperty(element, key, { get, set })
71
14
 
@@ -79,19 +22,30 @@ export const keys = function () {
79
22
  return keys
80
23
  }
81
24
 
82
- export const parse = function () {
25
+ export const parse = function (excl = []) {
83
26
  const element = this
84
27
  const obj = {}
85
28
  const keyList = keys.call(element)
86
- keyList.forEach(v => (obj[v] = element[v]))
29
+ keyList.forEach(v => {
30
+ if (excl.includes(v)) return
31
+ let val = element[v]
32
+ if (v === 'state') {
33
+ if (element.__ref && element.__ref.__hasRootState) return
34
+ if (isFunction(val?.parse)) val = val.parse()
35
+ } else if (v === 'props') {
36
+ const { __element, update, ...props } = element[v]
37
+ obj[v] = props
38
+ } else if (isDefined(val)) obj[v] = val
39
+ })
87
40
  return obj
88
41
  }
89
42
 
90
- export const parseDeep = function () {
43
+ export const parseDeep = function (excl = []) {
91
44
  const element = this
92
- const obj = parse.call(element)
93
- for (const k in obj) {
94
- if (isObjectLike(obj[k])) { obj[k] = parseDeep.call(obj[k]) }
45
+ const obj = parse.call(element, excl)
46
+ for (const v in obj) {
47
+ if (excl.includes(v)) return
48
+ if (isObjectLike(obj[v])) { obj[v] = parseDeep.call(obj[v], excl) }
95
49
  }
96
50
  return obj
97
51
  }
@@ -111,23 +65,6 @@ export const log = function (...args) {
111
65
  return element
112
66
  }
113
67
 
114
- export const isMethod = function (param) {
115
- return param === 'set' ||
116
- param === 'update' ||
117
- param === 'remove' ||
118
- param === 'removeContent' ||
119
- param === 'lookup' ||
120
- param === 'spotByPath' ||
121
- param === 'keys' ||
122
- param === 'parse' ||
123
- param === 'setProps' ||
124
- param === 'parseDeep' ||
125
- param === 'if' ||
126
- param === 'log' ||
127
- param === 'nextElement' ||
128
- param === 'previousElement'
129
- }
130
-
131
68
  export const nextElement = function () {
132
69
  const element = this
133
70
  const { key, parent } = element
@@ -8,11 +8,13 @@ import set from '../set'
8
8
  */
9
9
  export default (param, element, node, options) => {
10
10
  if (param && element) {
11
- if (element.$setCollection || element.$setStateCollection || element.$setPropsCollection) return
12
- if (param.__hash === element.content.__hash && element.content.update) {
13
- if (!element.content.__ref) element.content.__ref = {}
14
- element.content.update(param)
11
+ if (element.content.update) {
12
+ // const parsedContent = element.content.parseDeep(['class', 'on', 'tag'])
13
+ // console.log(parsedContent)
14
+ // if (!element.content.__ref) element.content.__ref = {}
15
+ element.content.update()
15
16
  } else {
17
+ // if (element.$setCollection || element.$setStateCollection || element.$setPropsCollection) return
16
18
  set.call(element, param, options)
17
19
  }
18
20
  }
@@ -54,10 +54,9 @@ export default {
54
54
  // Keys not in the array are excluded.
55
55
  export const parseFilters = {
56
56
  elementKeys: [
57
- 'tag', 'text', 'style', 'attr', 'class', 'state', 'class',
58
- 'data', 'content', 'html', 'on'
59
- // TODO: 'props' ?
57
+ 'tag', 'text', 'style', 'attr', 'class', 'state', 'props',
58
+ 'data', 'content', 'html', 'on', 'key'
60
59
  ],
61
- propsKeys: ['__element'],
60
+ propsKeys: ['__element', 'update'],
62
61
  stateKeys: []
63
62
  }
@@ -1,18 +1,17 @@
1
1
  'use strict'
2
2
 
3
3
  import { exec, isFunction, isObject } from '@domql/utils'
4
- import { triggerEventOn } from '@domql/event'
4
+ import { applyEventsOnNode, triggerEventOn } from '@domql/event'
5
+ import { isMethod } from '@domql/methods'
6
+ import { cacheNode } from '@domql/node'
5
7
 
6
8
  import create from './create'
7
- import cacheNode from './cache'
8
9
 
9
10
  import {
10
11
  throughInitialDefine,
11
- throughInitialExec,
12
- applyEvents
12
+ throughInitialExec
13
13
  } from './iterate'
14
14
  import { registry } from './mixins'
15
- import { isMethod } from './methods'
16
15
  import { applyParam } from './applyParam'
17
16
  // import { defineSetter } from './methods'
18
17
 
@@ -55,7 +54,7 @@ export const createNode = (element, options) => {
55
54
  throughInitialExec(element)
56
55
 
57
56
  // apply events
58
- if (isNewNode && isObject(element.on)) applyEvents(element)
57
+ if (isNewNode && isObject(element.on)) applyEventsOnNode(element)
59
58
 
60
59
  for (const param in element) {
61
60
  const prop = element[param]
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
+ import { assignNode } from '@domql/render'
3
4
  import create from './create'
4
- import { assignNode } from './assign'
5
5
 
6
6
  const parse = (element) => {
7
7
  const virtualTree = {
@@ -3,6 +3,8 @@
3
3
  import { exec, is, isArray, isObject, isString } from '@domql/utils'
4
4
  import { deepClone, deepMerge } from '../utils'
5
5
 
6
+ export const IGNORE_PROPS_PARAMS = ['update', '__element']
7
+
6
8
  const objectizeStringProperty = propValue => {
7
9
  if (is(propValue)('string', 'number')) return { inheritedString: propValue }
8
10
  return propValue
@@ -56,7 +58,7 @@ export const syncProps = (props, element) => {
56
58
  element.props = {}
57
59
  const mergedProps = { update, __element: element }
58
60
  props.forEach(v => {
59
- if (v === 'update' || v === '__element') return
61
+ if (IGNORE_PROPS_PARAMS.includes(v)) return
60
62
  const execProps = exec(v, element)
61
63
  if (isObject(execProps) && execProps.__element) return
62
64
  element.props = deepMerge(mergedProps, deepClone(execProps))