valyrian.js 7.2.9 → 7.2.11

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 (61) hide show
  1. package/dist/dataset/index.d.ts +2 -2
  2. package/dist/dataset/index.d.ts.map +1 -1
  3. package/dist/dataset/index.js +11 -4
  4. package/dist/dataset/index.js.map +2 -2
  5. package/dist/dataset/index.mjs +10 -4
  6. package/dist/dataset/index.mjs.map +2 -2
  7. package/dist/hooks/index.js +1 -0
  8. package/dist/hooks/index.js.map +2 -2
  9. package/dist/hooks/index.mjs.map +2 -2
  10. package/dist/index.d.ts +17 -21
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +4 -1
  13. package/dist/index.js.map +2 -2
  14. package/dist/index.min.js +1 -1
  15. package/dist/index.min.js.map +1 -1
  16. package/dist/index.mjs +3 -1
  17. package/dist/index.mjs.map +2 -2
  18. package/dist/node/index.js +22 -11
  19. package/dist/node/index.js.map +2 -2
  20. package/dist/node/index.mjs +21 -11
  21. package/dist/node/index.mjs.map +2 -2
  22. package/dist/node/utils/inline.d.ts +2 -2
  23. package/dist/node/utils/inline.d.ts.map +1 -1
  24. package/dist/node/utils/tree-adapter.d.ts +3 -3
  25. package/dist/node/utils/tree-adapter.d.ts.map +1 -1
  26. package/dist/proxy-signal/index.js +1 -0
  27. package/dist/proxy-signal/index.js.map +1 -1
  28. package/dist/request/index.js +1 -0
  29. package/dist/request/index.js.map +1 -1
  30. package/dist/router/index.d.ts +2 -2
  31. package/dist/router/index.d.ts.map +1 -1
  32. package/dist/router/index.js +5 -3
  33. package/dist/router/index.js.map +3 -3
  34. package/dist/router/index.mjs +4 -3
  35. package/dist/router/index.mjs.map +3 -3
  36. package/dist/signal/index.d.ts.map +1 -1
  37. package/dist/signal/index.js +3 -2
  38. package/dist/signal/index.js.map +2 -2
  39. package/dist/signal/index.mjs +2 -2
  40. package/dist/signal/index.mjs.map +2 -2
  41. package/dist/store/index.js +1 -0
  42. package/dist/store/index.js.map +1 -1
  43. package/dist/sw/index.d.ts +1 -1
  44. package/dist/sw/index.d.ts.map +1 -1
  45. package/dist/sw/index.js +1 -0
  46. package/dist/sw/index.js.map +1 -1
  47. package/dist/tsconfig.tsbuildinfo +1 -0
  48. package/lib/dataset/index.ts +15 -7
  49. package/lib/hooks/index.ts +2 -2
  50. package/lib/index.d.ts +0 -0
  51. package/lib/index.ts +22 -31
  52. package/lib/interfaces.ts.bak +141 -0
  53. package/lib/node/utils/inline.ts +17 -2
  54. package/lib/node/utils/tree-adapter.ts +15 -11
  55. package/lib/router/index.ts +16 -4
  56. package/lib/signal/index.ts +5 -5
  57. package/package.json +1 -1
  58. package/tsconfig.json +22 -8
  59. package/dist/interfaces.d.ts +0 -96
  60. package/dist/interfaces.d.ts.map +0 -1
  61. package/lib/interfaces.ts +0 -98
@@ -17,8 +17,8 @@ export declare class DataSet<T> implements DataSetInterface<T> {
17
17
  setVnodeAndHandler(vnode: VnodeWithDom, handler: DataSetHandler<T>): void;
18
18
  reset(data: T[]): void;
19
19
  add(...data: T[]): void;
20
- delete(index: any): void;
21
- update(index: any, item: Partial<T>): void;
20
+ delete(index: number): void;
21
+ update(index: number, item: Partial<T>): void;
22
22
  }
23
23
  export {};
24
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/dataset/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAwD,MAAM,aAAa,CAAC;AAEjH,UAAU,gBAAgB,CAAC,CAAC;IAC1B,IAAI,EAAE,CAAC,EAAE,CAAC;IAEV,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IAE3B,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IAE5B,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IAEzC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AACD,UAAU,cAAc,CAAC,CAAC;IAExB,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC;CAC1C;AAoBD,qBAAa,OAAO,CAAC,CAAC,CAAE,YAAW,gBAAgB,CAAC,CAAC,CAAC;;IAQpD,IAAI,IAAI,IAQO,CAAC,EAAE,CAFjB;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAEjB;gBAqBW,IAAI,GAAE,CAAC,EAAO,EAAE,YAAY,UAAO;IAK/C,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IAMlE,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE;IAuCf,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;IAwBhB,MAAM,CAAC,KAAK,KAAA;IAcZ,MAAM,CAAC,KAAK,KAAA,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;CAgB/B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/dataset/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAwD,MAAM,aAAa,CAAC;AAEjH,UAAU,gBAAgB,CAAC,CAAC;IAC1B,IAAI,EAAE,CAAC,EAAE,CAAC;IAEV,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IAE3B,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IAE5B,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IAEzC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AACD,UAAU,cAAc,CAAC,CAAC;IAExB,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC;CAC1C;AAoBD,qBAAa,OAAO,CAAC,CAAC,CAAE,YAAW,gBAAgB,CAAC,CAAC,CAAC;;IAQpD,IAAI,IAAI,IAQO,CAAC,EAAE,CAFjB;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAEjB;gBAqBW,IAAI,GAAE,CAAC,EAAO,EAAE,YAAY,UAAO;IAK/C,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IAMlE,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE;IA2Cf,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;IA4BhB,MAAM,CAAC,KAAK,EAAE,MAAM;IAcpB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;CAgBvC"}
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  var __defProp = Object.defineProperty;
2
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
@@ -40,9 +41,9 @@ function deepFreeze(obj) {
40
41
  return obj;
41
42
  }
42
43
  var DataSet = class {
43
- #vnode;
44
+ #vnode = null;
44
45
  // eslint-disable-next-line no-unused-vars
45
- #handler;
46
+ #handler = null;
46
47
  #data = [];
47
48
  #isFrozen = false;
48
49
  #dataProxy = null;
@@ -84,6 +85,9 @@ var DataSet = class {
84
85
  }
85
86
  reset(data) {
86
87
  this.#setData(data);
88
+ if (this.#vnode === null || this.#handler === null) {
89
+ return;
90
+ }
87
91
  let vnode = this.#vnode;
88
92
  let handler = this.#handler;
89
93
  if (data.length === 0) {
@@ -123,6 +127,9 @@ var DataSet = class {
123
127
  } else {
124
128
  this.#data.push(...data);
125
129
  }
130
+ if (this.#vnode === null || this.#handler === null) {
131
+ return;
132
+ }
126
133
  let vnode = this.#vnode;
127
134
  let handler = this.#handler;
128
135
  for (let i = 0, ii = oldLength, l = data.length; i < l; i++, ii++) {
@@ -137,7 +144,7 @@ var DataSet = class {
137
144
  }
138
145
  }
139
146
  delete(index) {
140
- if (this.#data) {
147
+ if (this.#data && this.#vnode) {
141
148
  let child = this.#vnode.children[index];
142
149
  if (this.#isFrozen) {
143
150
  this.#setData(this.data.filter((_, i) => i !== index));
@@ -149,7 +156,7 @@ var DataSet = class {
149
156
  }
150
157
  }
151
158
  update(index, item) {
152
- if (this.#data) {
159
+ if (this.#data && this.#vnode && this.#handler) {
153
160
  let child = this.#vnode.children[index];
154
161
  if (this.#isFrozen) {
155
162
  this.#setData(this.#data.map((d, i) => i === index ? { ...d, ...item } : d));
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../lib/dataset/index.ts"],
4
- "sourcesContent": ["import { VnodeInterface, VnodeWithDom, createDomElement, directive, patch, updateAttributes } from \"valyrian.js\";\n\ninterface DataSetInterface<T> {\n data: T[];\n // eslint-disable-next-line no-unused-vars\n reset: (data: T[]) => void;\n // eslint-disable-next-line no-unused-vars\n add: (...data: T[]) => void;\n // eslint-disable-next-line no-unused-vars\n update: (index: number, data: T) => void;\n // eslint-disable-next-line no-unused-vars\n delete: (index: number) => void;\n}\ninterface DataSetHandler<T> {\n // eslint-disable-next-line no-unused-vars\n (data: T, index: number): VnodeInterface;\n}\n\nfunction deepFreeze(obj: any) {\n if (typeof obj === \"object\" && obj !== null && !Object.isFrozen(obj)) {\n if (Array.isArray(obj)) {\n for (let i = 0, l = obj.length; i < l; i++) {\n deepFreeze(obj[i]);\n }\n } else {\n let props = Reflect.ownKeys(obj);\n for (let i = 0, l = props.length; i < l; i++) {\n deepFreeze(obj[props[i]]);\n }\n }\n Object.freeze(obj);\n }\n\n return obj;\n}\n\nexport class DataSet<T> implements DataSetInterface<T> {\n #vnode: VnodeWithDom;\n // eslint-disable-next-line no-unused-vars\n #handler: DataSetHandler<T>;\n #data: T[] = [];\n #isFrozen = false;\n #dataProxy: T[] | null = null;\n\n get data() {\n if (this.#dataProxy === null) {\n throw new Error(\"DataSet is not initialized\");\n }\n\n return this.#dataProxy;\n }\n\n set data(data: T[]) {\n throw new Error(\"You need to use the reset method to set the data\");\n }\n\n #setData(data: T[]) {\n if (this.#isFrozen) {\n this.#data = deepFreeze([...data]);\n } else {\n this.#data = data;\n }\n this.#dataProxy = new Proxy(this.#data as T[], {\n set: () => {\n throw new Error(\"You need to use the add, update or delete methods to change the data\");\n },\n get(target, prop) {\n return target[prop];\n },\n deleteProperty: () => {\n throw new Error(\"You need to use the add, update or delete methods to change the data\");\n }\n }) as T[];\n }\n\n constructor(data: T[] = [], shouldFreeze = true) {\n this.#isFrozen = shouldFreeze;\n this.#setData(data);\n }\n\n setVnodeAndHandler(vnode: VnodeWithDom, handler: DataSetHandler<T>) {\n this.#vnode = vnode;\n this.#handler = handler;\n this.reset(this.#data);\n }\n\n reset(data: T[]) {\n this.#setData(data);\n let vnode = this.#vnode;\n let handler = this.#handler;\n\n if (data.length === 0) {\n vnode.children = [];\n vnode.dom.textContent = \"\";\n return;\n }\n\n let childrenLength = vnode.children.length;\n for (let i = 0, l = data.length; i < l; i++) {\n let child = handler(this.data[i], i);\n\n if (i < childrenLength) {\n let oldChild = vnode.children[i];\n child.isSVG = oldChild.isSVG;\n child.dom = oldChild.dom;\n updateAttributes(child as VnodeWithDom, oldChild);\n vnode.children[i] = child;\n patch(child as VnodeWithDom, oldChild);\n continue;\n }\n\n child.isSVG = vnode.isSVG || child.tag === \"svg\";\n child.dom = createDomElement(child.tag as string, child.isSVG);\n vnode.dom.appendChild(child.dom);\n updateAttributes(child as VnodeWithDom);\n vnode.children.push(child);\n patch(child as VnodeWithDom);\n }\n\n for (let i = data.length; i < childrenLength; i++) {\n vnode.dom.removeChild(vnode.children[i].dom);\n }\n vnode.children.length = data.length;\n }\n\n add(...data: T[]) {\n if (this.#data) {\n let oldLength = this.#data.length;\n if (this.#isFrozen) {\n this.#setData([...this.#data, ...data]);\n } else {\n this.#data.push(...data);\n }\n\n let vnode = this.#vnode;\n let handler = this.#handler;\n\n for (let i = 0, ii = oldLength, l = data.length; i < l; i++, ii++) {\n let child = handler(this.#data[i], ii);\n child.isSVG = vnode.isSVG || child.tag === \"svg\";\n child.dom = createDomElement(child.tag as string, child.isSVG);\n vnode.dom.appendChild(child.dom);\n updateAttributes(child as VnodeWithDom);\n vnode.children.push(child);\n patch(child as VnodeWithDom);\n }\n }\n }\n\n delete(index) {\n if (this.#data) {\n let child = this.#vnode.children[index];\n if (this.#isFrozen) {\n this.#setData(this.data.filter((_, i) => i !== index));\n } else {\n this.#data.splice(index, 1);\n }\n\n this.#vnode.dom.removeChild(child.dom);\n this.#vnode.children.splice(index, 1);\n }\n }\n\n update(index, item: Partial<T>) {\n if (this.#data) {\n let child = this.#vnode.children[index];\n if (this.#isFrozen) {\n this.#setData(this.#data.map((d, i) => (i === index ? { ...d, ...item } : d)));\n } else {\n this.#data[index] = { ...this.#data[index], ...item };\n }\n let newChild = this.#handler(this.#data[index], index);\n newChild.isSVG = this.#vnode.isSVG || newChild.tag === \"svg\";\n newChild.dom = child.dom;\n this.#vnode.children[index] = newChild;\n updateAttributes(newChild as VnodeWithDom, child);\n patch(newChild as VnodeWithDom, child);\n }\n }\n}\n\ndirective(\"with-dataset\", (dataSet, vnode) => {\n dataSet.setVnodeAndHandler(vnode as VnodeWithDom, vnode.children[0]);\n return false;\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { VnodeInterface, VnodeWithDom, createDomElement, directive, patch, updateAttributes } from \"valyrian.js\";\n\ninterface DataSetInterface<T> {\n data: T[];\n // eslint-disable-next-line no-unused-vars\n reset: (data: T[]) => void;\n // eslint-disable-next-line no-unused-vars\n add: (...data: T[]) => void;\n // eslint-disable-next-line no-unused-vars\n update: (index: number, data: T) => void;\n // eslint-disable-next-line no-unused-vars\n delete: (index: number) => void;\n}\ninterface DataSetHandler<T> {\n // eslint-disable-next-line no-unused-vars\n (data: T, index: number): VnodeInterface;\n}\n\nfunction deepFreeze(obj: any) {\n if (typeof obj === \"object\" && obj !== null && !Object.isFrozen(obj)) {\n if (Array.isArray(obj)) {\n for (let i = 0, l = obj.length; i < l; i++) {\n deepFreeze(obj[i]);\n }\n } else {\n let props = Reflect.ownKeys(obj);\n for (let i = 0, l = props.length; i < l; i++) {\n deepFreeze(obj[props[i]]);\n }\n }\n Object.freeze(obj);\n }\n\n return obj;\n}\n\nexport class DataSet<T> implements DataSetInterface<T> {\n #vnode: VnodeWithDom | null = null;\n // eslint-disable-next-line no-unused-vars\n #handler: DataSetHandler<T> | null = null;\n #data: T[] = [];\n #isFrozen = false;\n #dataProxy: T[] | null = null;\n\n get data() {\n if (this.#dataProxy === null) {\n throw new Error(\"DataSet is not initialized\");\n }\n\n return this.#dataProxy;\n }\n\n set data(data: T[]) {\n throw new Error(\"You need to use the reset method to set the data\");\n }\n\n #setData(data: T[]) {\n if (this.#isFrozen) {\n this.#data = deepFreeze([...data]);\n } else {\n this.#data = data;\n }\n this.#dataProxy = new Proxy(this.#data as T[], {\n set: () => {\n throw new Error(\"You need to use the add, update or delete methods to change the data\");\n },\n get(target: any, prop: string) {\n return target[prop];\n },\n deleteProperty: () => {\n throw new Error(\"You need to use the add, update or delete methods to change the data\");\n }\n }) as T[];\n }\n\n constructor(data: T[] = [], shouldFreeze = true) {\n this.#isFrozen = shouldFreeze;\n this.#setData(data);\n }\n\n setVnodeAndHandler(vnode: VnodeWithDom, handler: DataSetHandler<T>) {\n this.#vnode = vnode;\n this.#handler = handler;\n this.reset(this.#data);\n }\n\n reset(data: T[]) {\n this.#setData(data);\n if (this.#vnode === null || this.#handler === null) {\n return;\n }\n\n let vnode = this.#vnode;\n let handler = this.#handler;\n\n if (data.length === 0) {\n vnode.children = [];\n vnode.dom.textContent = \"\";\n return;\n }\n\n let childrenLength = vnode.children.length;\n for (let i = 0, l = data.length; i < l; i++) {\n let child = handler(this.data[i], i);\n\n if (i < childrenLength) {\n let oldChild = vnode.children[i];\n child.isSVG = oldChild.isSVG;\n child.dom = oldChild.dom;\n updateAttributes(child as VnodeWithDom, oldChild);\n vnode.children[i] = child;\n patch(child as VnodeWithDom, oldChild);\n continue;\n }\n\n child.isSVG = vnode.isSVG || child.tag === \"svg\";\n child.dom = createDomElement(child.tag as string, child.isSVG);\n vnode.dom.appendChild(child.dom);\n updateAttributes(child as VnodeWithDom);\n vnode.children.push(child);\n patch(child as VnodeWithDom);\n }\n\n for (let i = data.length; i < childrenLength; i++) {\n vnode.dom.removeChild(vnode.children[i].dom);\n }\n vnode.children.length = data.length;\n }\n\n add(...data: T[]) {\n if (this.#data) {\n let oldLength = this.#data.length;\n if (this.#isFrozen) {\n this.#setData([...this.#data, ...data]);\n } else {\n this.#data.push(...data);\n }\n\n if (this.#vnode === null || this.#handler === null) {\n return;\n }\n\n let vnode = this.#vnode;\n let handler = this.#handler;\n\n for (let i = 0, ii = oldLength, l = data.length; i < l; i++, ii++) {\n let child = handler(this.#data[i], ii);\n child.isSVG = vnode.isSVG || child.tag === \"svg\";\n child.dom = createDomElement(child.tag as string, child.isSVG);\n vnode.dom.appendChild(child.dom);\n updateAttributes(child as VnodeWithDom);\n vnode.children.push(child);\n patch(child as VnodeWithDom);\n }\n }\n }\n\n delete(index: number) {\n if (this.#data && this.#vnode) {\n let child = this.#vnode.children[index];\n if (this.#isFrozen) {\n this.#setData(this.data.filter((_, i) => i !== index));\n } else {\n this.#data.splice(index, 1);\n }\n\n this.#vnode.dom.removeChild(child.dom);\n this.#vnode.children.splice(index, 1);\n }\n }\n\n update(index: number, item: Partial<T>) {\n if (this.#data && this.#vnode && this.#handler) {\n let child = this.#vnode.children[index];\n if (this.#isFrozen) {\n this.#setData(this.#data.map((d, i) => (i === index ? { ...d, ...item } : d)));\n } else {\n this.#data[index] = { ...this.#data[index], ...item };\n }\n let newChild = this.#handler(this.#data[index], index);\n newChild.isSVG = this.#vnode.isSVG || newChild.tag === \"svg\";\n newChild.dom = child.dom;\n this.#vnode.children[index] = newChild;\n updateAttributes(newChild as VnodeWithDom, child);\n patch(newChild as VnodeWithDom, child);\n }\n }\n}\n\ndirective(\"with-dataset\", (dataSet, vnode) => {\n dataSet.setVnodeAndHandler(vnode as VnodeWithDom, vnode.children[0]);\n return false;\n});\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -17,9 +17,9 @@ function deepFreeze(obj) {
17
17
  return obj;
18
18
  }
19
19
  var DataSet = class {
20
- #vnode;
20
+ #vnode = null;
21
21
  // eslint-disable-next-line no-unused-vars
22
- #handler;
22
+ #handler = null;
23
23
  #data = [];
24
24
  #isFrozen = false;
25
25
  #dataProxy = null;
@@ -61,6 +61,9 @@ var DataSet = class {
61
61
  }
62
62
  reset(data) {
63
63
  this.#setData(data);
64
+ if (this.#vnode === null || this.#handler === null) {
65
+ return;
66
+ }
64
67
  let vnode = this.#vnode;
65
68
  let handler = this.#handler;
66
69
  if (data.length === 0) {
@@ -100,6 +103,9 @@ var DataSet = class {
100
103
  } else {
101
104
  this.#data.push(...data);
102
105
  }
106
+ if (this.#vnode === null || this.#handler === null) {
107
+ return;
108
+ }
103
109
  let vnode = this.#vnode;
104
110
  let handler = this.#handler;
105
111
  for (let i = 0, ii = oldLength, l = data.length; i < l; i++, ii++) {
@@ -114,7 +120,7 @@ var DataSet = class {
114
120
  }
115
121
  }
116
122
  delete(index) {
117
- if (this.#data) {
123
+ if (this.#data && this.#vnode) {
118
124
  let child = this.#vnode.children[index];
119
125
  if (this.#isFrozen) {
120
126
  this.#setData(this.data.filter((_, i) => i !== index));
@@ -126,7 +132,7 @@ var DataSet = class {
126
132
  }
127
133
  }
128
134
  update(index, item) {
129
- if (this.#data) {
135
+ if (this.#data && this.#vnode && this.#handler) {
130
136
  let child = this.#vnode.children[index];
131
137
  if (this.#isFrozen) {
132
138
  this.#setData(this.#data.map((d, i) => i === index ? { ...d, ...item } : d));
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../lib/dataset/index.ts"],
4
- "sourcesContent": ["import { VnodeInterface, VnodeWithDom, createDomElement, directive, patch, updateAttributes } from \"valyrian.js\";\n\ninterface DataSetInterface<T> {\n data: T[];\n // eslint-disable-next-line no-unused-vars\n reset: (data: T[]) => void;\n // eslint-disable-next-line no-unused-vars\n add: (...data: T[]) => void;\n // eslint-disable-next-line no-unused-vars\n update: (index: number, data: T) => void;\n // eslint-disable-next-line no-unused-vars\n delete: (index: number) => void;\n}\ninterface DataSetHandler<T> {\n // eslint-disable-next-line no-unused-vars\n (data: T, index: number): VnodeInterface;\n}\n\nfunction deepFreeze(obj: any) {\n if (typeof obj === \"object\" && obj !== null && !Object.isFrozen(obj)) {\n if (Array.isArray(obj)) {\n for (let i = 0, l = obj.length; i < l; i++) {\n deepFreeze(obj[i]);\n }\n } else {\n let props = Reflect.ownKeys(obj);\n for (let i = 0, l = props.length; i < l; i++) {\n deepFreeze(obj[props[i]]);\n }\n }\n Object.freeze(obj);\n }\n\n return obj;\n}\n\nexport class DataSet<T> implements DataSetInterface<T> {\n #vnode: VnodeWithDom;\n // eslint-disable-next-line no-unused-vars\n #handler: DataSetHandler<T>;\n #data: T[] = [];\n #isFrozen = false;\n #dataProxy: T[] | null = null;\n\n get data() {\n if (this.#dataProxy === null) {\n throw new Error(\"DataSet is not initialized\");\n }\n\n return this.#dataProxy;\n }\n\n set data(data: T[]) {\n throw new Error(\"You need to use the reset method to set the data\");\n }\n\n #setData(data: T[]) {\n if (this.#isFrozen) {\n this.#data = deepFreeze([...data]);\n } else {\n this.#data = data;\n }\n this.#dataProxy = new Proxy(this.#data as T[], {\n set: () => {\n throw new Error(\"You need to use the add, update or delete methods to change the data\");\n },\n get(target, prop) {\n return target[prop];\n },\n deleteProperty: () => {\n throw new Error(\"You need to use the add, update or delete methods to change the data\");\n }\n }) as T[];\n }\n\n constructor(data: T[] = [], shouldFreeze = true) {\n this.#isFrozen = shouldFreeze;\n this.#setData(data);\n }\n\n setVnodeAndHandler(vnode: VnodeWithDom, handler: DataSetHandler<T>) {\n this.#vnode = vnode;\n this.#handler = handler;\n this.reset(this.#data);\n }\n\n reset(data: T[]) {\n this.#setData(data);\n let vnode = this.#vnode;\n let handler = this.#handler;\n\n if (data.length === 0) {\n vnode.children = [];\n vnode.dom.textContent = \"\";\n return;\n }\n\n let childrenLength = vnode.children.length;\n for (let i = 0, l = data.length; i < l; i++) {\n let child = handler(this.data[i], i);\n\n if (i < childrenLength) {\n let oldChild = vnode.children[i];\n child.isSVG = oldChild.isSVG;\n child.dom = oldChild.dom;\n updateAttributes(child as VnodeWithDom, oldChild);\n vnode.children[i] = child;\n patch(child as VnodeWithDom, oldChild);\n continue;\n }\n\n child.isSVG = vnode.isSVG || child.tag === \"svg\";\n child.dom = createDomElement(child.tag as string, child.isSVG);\n vnode.dom.appendChild(child.dom);\n updateAttributes(child as VnodeWithDom);\n vnode.children.push(child);\n patch(child as VnodeWithDom);\n }\n\n for (let i = data.length; i < childrenLength; i++) {\n vnode.dom.removeChild(vnode.children[i].dom);\n }\n vnode.children.length = data.length;\n }\n\n add(...data: T[]) {\n if (this.#data) {\n let oldLength = this.#data.length;\n if (this.#isFrozen) {\n this.#setData([...this.#data, ...data]);\n } else {\n this.#data.push(...data);\n }\n\n let vnode = this.#vnode;\n let handler = this.#handler;\n\n for (let i = 0, ii = oldLength, l = data.length; i < l; i++, ii++) {\n let child = handler(this.#data[i], ii);\n child.isSVG = vnode.isSVG || child.tag === \"svg\";\n child.dom = createDomElement(child.tag as string, child.isSVG);\n vnode.dom.appendChild(child.dom);\n updateAttributes(child as VnodeWithDom);\n vnode.children.push(child);\n patch(child as VnodeWithDom);\n }\n }\n }\n\n delete(index) {\n if (this.#data) {\n let child = this.#vnode.children[index];\n if (this.#isFrozen) {\n this.#setData(this.data.filter((_, i) => i !== index));\n } else {\n this.#data.splice(index, 1);\n }\n\n this.#vnode.dom.removeChild(child.dom);\n this.#vnode.children.splice(index, 1);\n }\n }\n\n update(index, item: Partial<T>) {\n if (this.#data) {\n let child = this.#vnode.children[index];\n if (this.#isFrozen) {\n this.#setData(this.#data.map((d, i) => (i === index ? { ...d, ...item } : d)));\n } else {\n this.#data[index] = { ...this.#data[index], ...item };\n }\n let newChild = this.#handler(this.#data[index], index);\n newChild.isSVG = this.#vnode.isSVG || newChild.tag === \"svg\";\n newChild.dom = child.dom;\n this.#vnode.children[index] = newChild;\n updateAttributes(newChild as VnodeWithDom, child);\n patch(newChild as VnodeWithDom, child);\n }\n }\n}\n\ndirective(\"with-dataset\", (dataSet, vnode) => {\n dataSet.setVnodeAndHandler(vnode as VnodeWithDom, vnode.children[0]);\n return false;\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { VnodeInterface, VnodeWithDom, createDomElement, directive, patch, updateAttributes } from \"valyrian.js\";\n\ninterface DataSetInterface<T> {\n data: T[];\n // eslint-disable-next-line no-unused-vars\n reset: (data: T[]) => void;\n // eslint-disable-next-line no-unused-vars\n add: (...data: T[]) => void;\n // eslint-disable-next-line no-unused-vars\n update: (index: number, data: T) => void;\n // eslint-disable-next-line no-unused-vars\n delete: (index: number) => void;\n}\ninterface DataSetHandler<T> {\n // eslint-disable-next-line no-unused-vars\n (data: T, index: number): VnodeInterface;\n}\n\nfunction deepFreeze(obj: any) {\n if (typeof obj === \"object\" && obj !== null && !Object.isFrozen(obj)) {\n if (Array.isArray(obj)) {\n for (let i = 0, l = obj.length; i < l; i++) {\n deepFreeze(obj[i]);\n }\n } else {\n let props = Reflect.ownKeys(obj);\n for (let i = 0, l = props.length; i < l; i++) {\n deepFreeze(obj[props[i]]);\n }\n }\n Object.freeze(obj);\n }\n\n return obj;\n}\n\nexport class DataSet<T> implements DataSetInterface<T> {\n #vnode: VnodeWithDom | null = null;\n // eslint-disable-next-line no-unused-vars\n #handler: DataSetHandler<T> | null = null;\n #data: T[] = [];\n #isFrozen = false;\n #dataProxy: T[] | null = null;\n\n get data() {\n if (this.#dataProxy === null) {\n throw new Error(\"DataSet is not initialized\");\n }\n\n return this.#dataProxy;\n }\n\n set data(data: T[]) {\n throw new Error(\"You need to use the reset method to set the data\");\n }\n\n #setData(data: T[]) {\n if (this.#isFrozen) {\n this.#data = deepFreeze([...data]);\n } else {\n this.#data = data;\n }\n this.#dataProxy = new Proxy(this.#data as T[], {\n set: () => {\n throw new Error(\"You need to use the add, update or delete methods to change the data\");\n },\n get(target: any, prop: string) {\n return target[prop];\n },\n deleteProperty: () => {\n throw new Error(\"You need to use the add, update or delete methods to change the data\");\n }\n }) as T[];\n }\n\n constructor(data: T[] = [], shouldFreeze = true) {\n this.#isFrozen = shouldFreeze;\n this.#setData(data);\n }\n\n setVnodeAndHandler(vnode: VnodeWithDom, handler: DataSetHandler<T>) {\n this.#vnode = vnode;\n this.#handler = handler;\n this.reset(this.#data);\n }\n\n reset(data: T[]) {\n this.#setData(data);\n if (this.#vnode === null || this.#handler === null) {\n return;\n }\n\n let vnode = this.#vnode;\n let handler = this.#handler;\n\n if (data.length === 0) {\n vnode.children = [];\n vnode.dom.textContent = \"\";\n return;\n }\n\n let childrenLength = vnode.children.length;\n for (let i = 0, l = data.length; i < l; i++) {\n let child = handler(this.data[i], i);\n\n if (i < childrenLength) {\n let oldChild = vnode.children[i];\n child.isSVG = oldChild.isSVG;\n child.dom = oldChild.dom;\n updateAttributes(child as VnodeWithDom, oldChild);\n vnode.children[i] = child;\n patch(child as VnodeWithDom, oldChild);\n continue;\n }\n\n child.isSVG = vnode.isSVG || child.tag === \"svg\";\n child.dom = createDomElement(child.tag as string, child.isSVG);\n vnode.dom.appendChild(child.dom);\n updateAttributes(child as VnodeWithDom);\n vnode.children.push(child);\n patch(child as VnodeWithDom);\n }\n\n for (let i = data.length; i < childrenLength; i++) {\n vnode.dom.removeChild(vnode.children[i].dom);\n }\n vnode.children.length = data.length;\n }\n\n add(...data: T[]) {\n if (this.#data) {\n let oldLength = this.#data.length;\n if (this.#isFrozen) {\n this.#setData([...this.#data, ...data]);\n } else {\n this.#data.push(...data);\n }\n\n if (this.#vnode === null || this.#handler === null) {\n return;\n }\n\n let vnode = this.#vnode;\n let handler = this.#handler;\n\n for (let i = 0, ii = oldLength, l = data.length; i < l; i++, ii++) {\n let child = handler(this.#data[i], ii);\n child.isSVG = vnode.isSVG || child.tag === \"svg\";\n child.dom = createDomElement(child.tag as string, child.isSVG);\n vnode.dom.appendChild(child.dom);\n updateAttributes(child as VnodeWithDom);\n vnode.children.push(child);\n patch(child as VnodeWithDom);\n }\n }\n }\n\n delete(index: number) {\n if (this.#data && this.#vnode) {\n let child = this.#vnode.children[index];\n if (this.#isFrozen) {\n this.#setData(this.data.filter((_, i) => i !== index));\n } else {\n this.#data.splice(index, 1);\n }\n\n this.#vnode.dom.removeChild(child.dom);\n this.#vnode.children.splice(index, 1);\n }\n }\n\n update(index: number, item: Partial<T>) {\n if (this.#data && this.#vnode && this.#handler) {\n let child = this.#vnode.children[index];\n if (this.#isFrozen) {\n this.#setData(this.#data.map((d, i) => (i === index ? { ...d, ...item } : d)));\n } else {\n this.#data[index] = { ...this.#data[index], ...item };\n }\n let newChild = this.#handler(this.#data[index], index);\n newChild.isSVG = this.#vnode.isSVG || newChild.tag === \"svg\";\n newChild.dom = child.dom;\n this.#vnode.children[index] = newChild;\n updateAttributes(newChild as VnodeWithDom, child);\n patch(newChild as VnodeWithDom, child);\n }\n }\n}\n\ndirective(\"with-dataset\", (dataSet, vnode) => {\n dataSet.setVnodeAndHandler(vnode as VnodeWithDom, vnode.children[0]);\n return false;\n});\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  var __defProp = Object.defineProperty;
2
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../lib/hooks/index.ts"],
4
- "sourcesContent": ["import { Component, POJOComponent, VnodeWithDom, current, directive, onCleanup, onUnmount, update } from \"valyrian.js\";\n\ninterface CurrentOnPatch {\n component: Component | POJOComponent;\n vnode: VnodeWithDom;\n oldVnode: VnodeWithDom;\n}\n\nexport type Hook = any;\n\nexport interface HookDefinition {\n // eslint-disable-next-line no-unused-vars\n onCreate: (...args: any[]) => any;\n // eslint-disable-next-line no-unused-vars\n onUpdate?: (hook: Hook, ...args: any[]) => any;\n // eslint-disable-next-line no-unused-vars\n onCleanup?: (hook: Hook) => any;\n // eslint-disable-next-line no-unused-vars\n onRemove?: (hook: Hook) => any;\n // eslint-disable-next-line no-unused-vars\n returnValue?: (hook: Hook) => any;\n}\n\nexport interface CreateHook {\n // eslint-disable-next-line no-unused-vars\n (HookDefinition: HookDefinition): (...args: any[]) => any;\n}\n\nexport const createHook = function createHook({\n onCreate,\n onUpdate: onUpdateHook,\n onCleanup: onCleanupHook,\n onRemove,\n returnValue\n}: HookDefinition): Hook {\n return (...args: any[]) => {\n let { component, vnode } = current as CurrentOnPatch;\n\n let hook = null;\n\n if (vnode) {\n // Init the components array for the current vnode\n if (!vnode.components) {\n vnode.components = [];\n }\n\n if (vnode.components.indexOf(component) === -1) {\n vnode.hook_calls = -1;\n vnode.components.push(component);\n if (!component.hooks) {\n component.hooks = [];\n onUnmount(() => Reflect.deleteProperty(component, \"hooks\"));\n }\n }\n\n hook = component.hooks[++vnode.hook_calls];\n }\n\n // If the hook doesn't exist, create it\n if (!hook) {\n // create a new hook\n hook = onCreate(...args);\n\n if (vnode) {\n // Add the hook to the component\n component.hooks.push(hook);\n }\n\n // if we have a onRemove hook, add it to the onUnmount set\n if (onRemove) {\n // Add the hook to the onRemove array\n onUnmount(() => onRemove(hook));\n }\n } else {\n if (onUpdateHook) {\n onUpdateHook(hook, ...args);\n }\n }\n\n // If we have an onCleanup function, add it to the cleanup set\n if (onCleanupHook) {\n // Add the hook to the onCleanup set\n onCleanup(() => onCleanupHook(hook));\n }\n\n // If we have a returnValue function, call it and return the result instead of the hook\n if (returnValue) {\n return returnValue(hook);\n }\n\n // Return the hook\n return hook;\n };\n} as unknown as CreateHook;\n\nlet updateTimeout: any;\nfunction delayedUpdate() {\n clearTimeout(updateTimeout);\n updateTimeout = setTimeout(update);\n}\n\n// Use state hook\nexport const useState = createHook({\n onCreate: (value) => {\n function get() {\n return value;\n }\n get.value = value;\n get.toJSON = get.valueOf = get;\n get.toString = () => `${value}`;\n\n function set(newValue) {\n // Prevent default event if it exists\n if (current.event) {\n current.event.preventDefault();\n }\n\n if (value !== newValue) {\n value = newValue;\n get.value = newValue;\n delayedUpdate();\n }\n }\n\n return [get, set];\n }\n});\n\n// Effect hook\nexport const useEffect = createHook({\n onCreate: (effect: Function, changes: any[]) => {\n let hook: {\n effect: Function;\n prev: any[];\n onRemove?: Function;\n onCleanup?: Function;\n } = { effect, prev: [] };\n // on unmount\n if (changes === null) {\n hook.onRemove = effect;\n return hook;\n }\n\n // on create\n hook.prev = changes;\n hook.onCleanup = hook.effect();\n return hook;\n },\n onUpdate: (hook, effect, changes) => {\n // on update\n if (typeof changes === \"undefined\") {\n hook.prev = changes;\n if (typeof hook.onCleanup === \"function\") {\n hook.onCleanup();\n }\n hook.onCleanup = hook.effect();\n return;\n }\n\n // on update if there are changes\n if (Array.isArray(changes)) {\n for (let i = 0, l = changes.length; i < l; i++) {\n if (changes[i] !== hook.prev[i]) {\n hook.prev = changes;\n if (typeof hook.onCleanup === \"function\") {\n hook.onCleanup();\n }\n hook.onCleanup = hook.effect();\n return;\n }\n }\n }\n },\n onRemove: (hook) => {\n if (typeof hook.onCleanup === \"function\") {\n hook.onCleanup();\n }\n if (typeof hook.onRemove === \"function\") {\n hook.onRemove();\n }\n }\n});\n\nexport const useRef = createHook({\n onCreate: (initialValue) => {\n directive(\"ref\", (ref, vnode) => {\n ref.current = vnode.dom;\n });\n return { current: initialValue };\n }\n});\n\nexport const useCallback = createHook({\n onCreate: (callback, changes) => {\n callback();\n return { callback, changes };\n },\n onUpdate: (hook, callback, changes) => {\n for (let i = 0, l = changes.length; i < l; i++) {\n if (changes[i] !== hook.changes[i]) {\n hook.changes = changes;\n hook.callback();\n return;\n }\n }\n }\n});\n\nexport const useMemo = createHook({\n onCreate: (callback, changes) => {\n return { callback, changes, value: callback() };\n },\n onUpdate: (hook, callback, changes) => {\n for (let i = 0, l = changes.length; i < l; i++) {\n if (changes[i] !== hook.changes[i]) {\n hook.changes = changes;\n hook.value = callback();\n return;\n }\n }\n },\n returnValue: (hook) => {\n return hook.value;\n }\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Component, POJOComponent, VnodeWithDom, current, directive, onCleanup, onUnmount, update } from \"valyrian.js\";\n\ninterface CurrentOnPatch {\n component: Component | POJOComponent;\n vnode: VnodeWithDom;\n oldVnode: VnodeWithDom;\n}\n\nexport type Hook = any;\n\nexport interface HookDefinition {\n // eslint-disable-next-line no-unused-vars\n onCreate: (...args: any[]) => any;\n // eslint-disable-next-line no-unused-vars\n onUpdate?: (hook: Hook, ...args: any[]) => any;\n // eslint-disable-next-line no-unused-vars\n onCleanup?: (hook: Hook) => any;\n // eslint-disable-next-line no-unused-vars\n onRemove?: (hook: Hook) => any;\n // eslint-disable-next-line no-unused-vars\n returnValue?: (hook: Hook) => any;\n}\n\nexport interface CreateHook {\n // eslint-disable-next-line no-unused-vars\n (HookDefinition: HookDefinition): (...args: any[]) => any;\n}\n\nexport const createHook = function createHook({\n onCreate,\n onUpdate: onUpdateHook,\n onCleanup: onCleanupHook,\n onRemove,\n returnValue\n}: HookDefinition): Hook {\n return (...args: any[]) => {\n let { component, vnode } = current as CurrentOnPatch;\n\n let hook: any = null;\n\n if (vnode) {\n // Init the components array for the current vnode\n if (!vnode.components) {\n vnode.components = [];\n }\n\n if (vnode.components.indexOf(component) === -1) {\n vnode.hook_calls = -1;\n vnode.components.push(component);\n if (!component.hooks) {\n component.hooks = [];\n onUnmount(() => Reflect.deleteProperty(component, \"hooks\"));\n }\n }\n\n hook = component.hooks[++vnode.hook_calls];\n }\n\n // If the hook doesn't exist, create it\n if (!hook) {\n // create a new hook\n hook = onCreate(...args);\n\n if (vnode) {\n // Add the hook to the component\n component.hooks.push(hook);\n }\n\n // if we have a onRemove hook, add it to the onUnmount set\n if (onRemove) {\n // Add the hook to the onRemove array\n onUnmount(() => onRemove(hook));\n }\n } else {\n if (onUpdateHook) {\n onUpdateHook(hook, ...args);\n }\n }\n\n // If we have an onCleanup function, add it to the cleanup set\n if (onCleanupHook) {\n // Add the hook to the onCleanup set\n onCleanup(() => onCleanupHook(hook));\n }\n\n // If we have a returnValue function, call it and return the result instead of the hook\n if (returnValue) {\n return returnValue(hook);\n }\n\n // Return the hook\n return hook;\n };\n} as unknown as CreateHook;\n\nlet updateTimeout: any;\nfunction delayedUpdate() {\n clearTimeout(updateTimeout);\n updateTimeout = setTimeout(update);\n}\n\n// Use state hook\nexport const useState = createHook({\n onCreate: (value) => {\n function get() {\n return value;\n }\n get.value = value;\n get.toJSON = get.valueOf = get;\n get.toString = () => `${value}`;\n\n function set(newValue: any) {\n // Prevent default event if it exists\n if (current.event) {\n current.event.preventDefault();\n }\n\n if (value !== newValue) {\n value = newValue;\n get.value = newValue;\n delayedUpdate();\n }\n }\n\n return [get, set];\n }\n});\n\n// Effect hook\nexport const useEffect = createHook({\n onCreate: (effect: Function, changes: any[]) => {\n let hook: {\n effect: Function;\n prev: any[];\n onRemove?: Function;\n onCleanup?: Function;\n } = { effect, prev: [] };\n // on unmount\n if (changes === null) {\n hook.onRemove = effect;\n return hook;\n }\n\n // on create\n hook.prev = changes;\n hook.onCleanup = hook.effect();\n return hook;\n },\n onUpdate: (hook, effect, changes) => {\n // on update\n if (typeof changes === \"undefined\") {\n hook.prev = changes;\n if (typeof hook.onCleanup === \"function\") {\n hook.onCleanup();\n }\n hook.onCleanup = hook.effect();\n return;\n }\n\n // on update if there are changes\n if (Array.isArray(changes)) {\n for (let i = 0, l = changes.length; i < l; i++) {\n if (changes[i] !== hook.prev[i]) {\n hook.prev = changes;\n if (typeof hook.onCleanup === \"function\") {\n hook.onCleanup();\n }\n hook.onCleanup = hook.effect();\n return;\n }\n }\n }\n },\n onRemove: (hook) => {\n if (typeof hook.onCleanup === \"function\") {\n hook.onCleanup();\n }\n if (typeof hook.onRemove === \"function\") {\n hook.onRemove();\n }\n }\n});\n\nexport const useRef = createHook({\n onCreate: (initialValue) => {\n directive(\"ref\", (ref, vnode) => {\n ref.current = vnode.dom;\n });\n return { current: initialValue };\n }\n});\n\nexport const useCallback = createHook({\n onCreate: (callback, changes) => {\n callback();\n return { callback, changes };\n },\n onUpdate: (hook, callback, changes) => {\n for (let i = 0, l = changes.length; i < l; i++) {\n if (changes[i] !== hook.changes[i]) {\n hook.changes = changes;\n hook.callback();\n return;\n }\n }\n }\n});\n\nexport const useMemo = createHook({\n onCreate: (callback, changes) => {\n return { callback, changes, value: callback() };\n },\n onUpdate: (hook, callback, changes) => {\n for (let i = 0, l = changes.length; i < l; i++) {\n if (changes[i] !== hook.changes[i]) {\n hook.changes = changes;\n hook.value = callback();\n return;\n }\n }\n },\n returnValue: (hook) => {\n return hook.value;\n }\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["createHook"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../lib/hooks/index.ts"],
4
- "sourcesContent": ["import { Component, POJOComponent, VnodeWithDom, current, directive, onCleanup, onUnmount, update } from \"valyrian.js\";\n\ninterface CurrentOnPatch {\n component: Component | POJOComponent;\n vnode: VnodeWithDom;\n oldVnode: VnodeWithDom;\n}\n\nexport type Hook = any;\n\nexport interface HookDefinition {\n // eslint-disable-next-line no-unused-vars\n onCreate: (...args: any[]) => any;\n // eslint-disable-next-line no-unused-vars\n onUpdate?: (hook: Hook, ...args: any[]) => any;\n // eslint-disable-next-line no-unused-vars\n onCleanup?: (hook: Hook) => any;\n // eslint-disable-next-line no-unused-vars\n onRemove?: (hook: Hook) => any;\n // eslint-disable-next-line no-unused-vars\n returnValue?: (hook: Hook) => any;\n}\n\nexport interface CreateHook {\n // eslint-disable-next-line no-unused-vars\n (HookDefinition: HookDefinition): (...args: any[]) => any;\n}\n\nexport const createHook = function createHook({\n onCreate,\n onUpdate: onUpdateHook,\n onCleanup: onCleanupHook,\n onRemove,\n returnValue\n}: HookDefinition): Hook {\n return (...args: any[]) => {\n let { component, vnode } = current as CurrentOnPatch;\n\n let hook = null;\n\n if (vnode) {\n // Init the components array for the current vnode\n if (!vnode.components) {\n vnode.components = [];\n }\n\n if (vnode.components.indexOf(component) === -1) {\n vnode.hook_calls = -1;\n vnode.components.push(component);\n if (!component.hooks) {\n component.hooks = [];\n onUnmount(() => Reflect.deleteProperty(component, \"hooks\"));\n }\n }\n\n hook = component.hooks[++vnode.hook_calls];\n }\n\n // If the hook doesn't exist, create it\n if (!hook) {\n // create a new hook\n hook = onCreate(...args);\n\n if (vnode) {\n // Add the hook to the component\n component.hooks.push(hook);\n }\n\n // if we have a onRemove hook, add it to the onUnmount set\n if (onRemove) {\n // Add the hook to the onRemove array\n onUnmount(() => onRemove(hook));\n }\n } else {\n if (onUpdateHook) {\n onUpdateHook(hook, ...args);\n }\n }\n\n // If we have an onCleanup function, add it to the cleanup set\n if (onCleanupHook) {\n // Add the hook to the onCleanup set\n onCleanup(() => onCleanupHook(hook));\n }\n\n // If we have a returnValue function, call it and return the result instead of the hook\n if (returnValue) {\n return returnValue(hook);\n }\n\n // Return the hook\n return hook;\n };\n} as unknown as CreateHook;\n\nlet updateTimeout: any;\nfunction delayedUpdate() {\n clearTimeout(updateTimeout);\n updateTimeout = setTimeout(update);\n}\n\n// Use state hook\nexport const useState = createHook({\n onCreate: (value) => {\n function get() {\n return value;\n }\n get.value = value;\n get.toJSON = get.valueOf = get;\n get.toString = () => `${value}`;\n\n function set(newValue) {\n // Prevent default event if it exists\n if (current.event) {\n current.event.preventDefault();\n }\n\n if (value !== newValue) {\n value = newValue;\n get.value = newValue;\n delayedUpdate();\n }\n }\n\n return [get, set];\n }\n});\n\n// Effect hook\nexport const useEffect = createHook({\n onCreate: (effect: Function, changes: any[]) => {\n let hook: {\n effect: Function;\n prev: any[];\n onRemove?: Function;\n onCleanup?: Function;\n } = { effect, prev: [] };\n // on unmount\n if (changes === null) {\n hook.onRemove = effect;\n return hook;\n }\n\n // on create\n hook.prev = changes;\n hook.onCleanup = hook.effect();\n return hook;\n },\n onUpdate: (hook, effect, changes) => {\n // on update\n if (typeof changes === \"undefined\") {\n hook.prev = changes;\n if (typeof hook.onCleanup === \"function\") {\n hook.onCleanup();\n }\n hook.onCleanup = hook.effect();\n return;\n }\n\n // on update if there are changes\n if (Array.isArray(changes)) {\n for (let i = 0, l = changes.length; i < l; i++) {\n if (changes[i] !== hook.prev[i]) {\n hook.prev = changes;\n if (typeof hook.onCleanup === \"function\") {\n hook.onCleanup();\n }\n hook.onCleanup = hook.effect();\n return;\n }\n }\n }\n },\n onRemove: (hook) => {\n if (typeof hook.onCleanup === \"function\") {\n hook.onCleanup();\n }\n if (typeof hook.onRemove === \"function\") {\n hook.onRemove();\n }\n }\n});\n\nexport const useRef = createHook({\n onCreate: (initialValue) => {\n directive(\"ref\", (ref, vnode) => {\n ref.current = vnode.dom;\n });\n return { current: initialValue };\n }\n});\n\nexport const useCallback = createHook({\n onCreate: (callback, changes) => {\n callback();\n return { callback, changes };\n },\n onUpdate: (hook, callback, changes) => {\n for (let i = 0, l = changes.length; i < l; i++) {\n if (changes[i] !== hook.changes[i]) {\n hook.changes = changes;\n hook.callback();\n return;\n }\n }\n }\n});\n\nexport const useMemo = createHook({\n onCreate: (callback, changes) => {\n return { callback, changes, value: callback() };\n },\n onUpdate: (hook, callback, changes) => {\n for (let i = 0, l = changes.length; i < l; i++) {\n if (changes[i] !== hook.changes[i]) {\n hook.changes = changes;\n hook.value = callback();\n return;\n }\n }\n },\n returnValue: (hook) => {\n return hook.value;\n }\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Component, POJOComponent, VnodeWithDom, current, directive, onCleanup, onUnmount, update } from \"valyrian.js\";\n\ninterface CurrentOnPatch {\n component: Component | POJOComponent;\n vnode: VnodeWithDom;\n oldVnode: VnodeWithDom;\n}\n\nexport type Hook = any;\n\nexport interface HookDefinition {\n // eslint-disable-next-line no-unused-vars\n onCreate: (...args: any[]) => any;\n // eslint-disable-next-line no-unused-vars\n onUpdate?: (hook: Hook, ...args: any[]) => any;\n // eslint-disable-next-line no-unused-vars\n onCleanup?: (hook: Hook) => any;\n // eslint-disable-next-line no-unused-vars\n onRemove?: (hook: Hook) => any;\n // eslint-disable-next-line no-unused-vars\n returnValue?: (hook: Hook) => any;\n}\n\nexport interface CreateHook {\n // eslint-disable-next-line no-unused-vars\n (HookDefinition: HookDefinition): (...args: any[]) => any;\n}\n\nexport const createHook = function createHook({\n onCreate,\n onUpdate: onUpdateHook,\n onCleanup: onCleanupHook,\n onRemove,\n returnValue\n}: HookDefinition): Hook {\n return (...args: any[]) => {\n let { component, vnode } = current as CurrentOnPatch;\n\n let hook: any = null;\n\n if (vnode) {\n // Init the components array for the current vnode\n if (!vnode.components) {\n vnode.components = [];\n }\n\n if (vnode.components.indexOf(component) === -1) {\n vnode.hook_calls = -1;\n vnode.components.push(component);\n if (!component.hooks) {\n component.hooks = [];\n onUnmount(() => Reflect.deleteProperty(component, \"hooks\"));\n }\n }\n\n hook = component.hooks[++vnode.hook_calls];\n }\n\n // If the hook doesn't exist, create it\n if (!hook) {\n // create a new hook\n hook = onCreate(...args);\n\n if (vnode) {\n // Add the hook to the component\n component.hooks.push(hook);\n }\n\n // if we have a onRemove hook, add it to the onUnmount set\n if (onRemove) {\n // Add the hook to the onRemove array\n onUnmount(() => onRemove(hook));\n }\n } else {\n if (onUpdateHook) {\n onUpdateHook(hook, ...args);\n }\n }\n\n // If we have an onCleanup function, add it to the cleanup set\n if (onCleanupHook) {\n // Add the hook to the onCleanup set\n onCleanup(() => onCleanupHook(hook));\n }\n\n // If we have a returnValue function, call it and return the result instead of the hook\n if (returnValue) {\n return returnValue(hook);\n }\n\n // Return the hook\n return hook;\n };\n} as unknown as CreateHook;\n\nlet updateTimeout: any;\nfunction delayedUpdate() {\n clearTimeout(updateTimeout);\n updateTimeout = setTimeout(update);\n}\n\n// Use state hook\nexport const useState = createHook({\n onCreate: (value) => {\n function get() {\n return value;\n }\n get.value = value;\n get.toJSON = get.valueOf = get;\n get.toString = () => `${value}`;\n\n function set(newValue: any) {\n // Prevent default event if it exists\n if (current.event) {\n current.event.preventDefault();\n }\n\n if (value !== newValue) {\n value = newValue;\n get.value = newValue;\n delayedUpdate();\n }\n }\n\n return [get, set];\n }\n});\n\n// Effect hook\nexport const useEffect = createHook({\n onCreate: (effect: Function, changes: any[]) => {\n let hook: {\n effect: Function;\n prev: any[];\n onRemove?: Function;\n onCleanup?: Function;\n } = { effect, prev: [] };\n // on unmount\n if (changes === null) {\n hook.onRemove = effect;\n return hook;\n }\n\n // on create\n hook.prev = changes;\n hook.onCleanup = hook.effect();\n return hook;\n },\n onUpdate: (hook, effect, changes) => {\n // on update\n if (typeof changes === \"undefined\") {\n hook.prev = changes;\n if (typeof hook.onCleanup === \"function\") {\n hook.onCleanup();\n }\n hook.onCleanup = hook.effect();\n return;\n }\n\n // on update if there are changes\n if (Array.isArray(changes)) {\n for (let i = 0, l = changes.length; i < l; i++) {\n if (changes[i] !== hook.prev[i]) {\n hook.prev = changes;\n if (typeof hook.onCleanup === \"function\") {\n hook.onCleanup();\n }\n hook.onCleanup = hook.effect();\n return;\n }\n }\n }\n },\n onRemove: (hook) => {\n if (typeof hook.onCleanup === \"function\") {\n hook.onCleanup();\n }\n if (typeof hook.onRemove === \"function\") {\n hook.onRemove();\n }\n }\n});\n\nexport const useRef = createHook({\n onCreate: (initialValue) => {\n directive(\"ref\", (ref, vnode) => {\n ref.current = vnode.dom;\n });\n return { current: initialValue };\n }\n});\n\nexport const useCallback = createHook({\n onCreate: (callback, changes) => {\n callback();\n return { callback, changes };\n },\n onUpdate: (hook, callback, changes) => {\n for (let i = 0, l = changes.length; i < l; i++) {\n if (changes[i] !== hook.changes[i]) {\n hook.changes = changes;\n hook.callback();\n return;\n }\n }\n }\n});\n\nexport const useMemo = createHook({\n onCreate: (callback, changes) => {\n return { callback, changes, value: callback() };\n },\n onUpdate: (hook, callback, changes) => {\n for (let i = 0, l = changes.length; i < l; i++) {\n if (changes[i] !== hook.changes[i]) {\n hook.changes = changes;\n hook.value = callback();\n return;\n }\n }\n },\n returnValue: (hook) => {\n return hook.value;\n }\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["createHook"]
7
7
  }
package/dist/index.d.ts CHANGED
@@ -1,12 +1,12 @@
1
- export interface VnodeProperties {
1
+ interface DefaultRecord extends Record<string | number | symbol, any> {
2
+ }
3
+ export interface VnodeProperties extends DefaultRecord {
2
4
  key?: string | number;
3
5
  state?: any;
4
- [key: string | number | symbol]: any;
5
6
  }
6
- export interface DomElement extends Element {
7
- [key: string]: any;
7
+ export interface DomElement extends Element, DefaultRecord {
8
8
  }
9
- export interface VnodeInterface {
9
+ export interface VnodeInterface extends DefaultRecord {
10
10
  new (tag: string | Component | POJOComponent, props: VnodeProperties, children: Children): VnodeInterface;
11
11
  tag: string | Component | POJOComponent;
12
12
  props: VnodeProperties;
@@ -14,20 +14,17 @@ export interface VnodeInterface {
14
14
  isSVG?: boolean;
15
15
  dom?: DomElement;
16
16
  processed?: boolean;
17
- [key: string | number | symbol]: any;
18
17
  }
19
18
  export interface VnodeWithDom extends VnodeInterface {
20
19
  dom: DomElement;
21
20
  }
22
- export interface Component {
21
+ export interface Component extends DefaultRecord {
23
22
  (props?: VnodeProperties | null, ...children: any[]): VnodeInterface | Children | any;
24
- [key: string]: any;
25
23
  }
26
- export interface POJOComponent {
24
+ export interface POJOComponent extends DefaultRecord {
27
25
  view: Component;
28
26
  props?: VnodeProperties | null;
29
27
  children?: any[];
30
- [key: string]: any;
31
28
  }
32
29
  export interface VnodeComponentInterface extends VnodeInterface {
33
30
  tag: Component | POJOComponent;
@@ -39,11 +36,9 @@ export interface Children extends Array<VnodeInterface | VnodeComponentInterface
39
36
  export interface Directive {
40
37
  (value: any, vnode: VnodeWithDom, oldVnode?: VnodeWithDom): void | boolean;
41
38
  }
42
- export interface Directives {
43
- [key: string]: Directive;
39
+ export interface Directives extends Record<string, Directive> {
44
40
  }
45
- export interface ReservedProps {
46
- [key: string]: true;
41
+ export interface ReservedProps extends Record<string, true> {
47
42
  }
48
43
  export interface Current {
49
44
  component: Component | POJOComponent | null;
@@ -58,17 +53,17 @@ export interface V {
58
53
  export declare let isNodeJs: boolean;
59
54
  export declare function createDomElement(tag: string, isSVG?: boolean): DomElement;
60
55
  export declare const Vnode: VnodeInterface;
61
- export declare function isComponent(component: any): component is Component;
56
+ export declare function isComponent(component: unknown): component is Component;
62
57
  export declare const isVnode: (object?: unknown | VnodeInterface) => object is VnodeInterface;
63
58
  export declare const isVnodeComponent: (object?: unknown | VnodeComponentInterface) => object is VnodeComponentInterface;
64
59
  export declare function domToVnode(dom: any): VnodeWithDom;
65
- export declare function trust(htmlString: string): any;
60
+ export declare function trust(htmlString: string): unknown[];
66
61
  export declare const current: Current;
67
62
  export declare const reservedProps: Record<string, true>;
68
- export declare function onMount(callback: any): void;
69
- export declare function onUpdate(callback: any): void;
70
- export declare function onCleanup(callback: any): void;
71
- export declare function onUnmount(callback: any): void;
63
+ export declare function onMount(callback: Function): void;
64
+ export declare function onUpdate(callback: Function): void;
65
+ export declare function onCleanup(callback: Function): void;
66
+ export declare function onUnmount(callback: Function): void;
72
67
  export declare const directives: Directives;
73
68
  export declare function directive(name: string, directive: Directive): void;
74
69
  export declare function setAttribute(name: string, value: any, newVnode: VnodeWithDom, oldVnode?: VnodeWithDom): void;
@@ -77,6 +72,7 @@ export declare function patch(newVnode: VnodeWithDom, oldVnode?: VnodeWithDom):
77
72
  export declare function update(): void | string;
78
73
  export declare function updateVnode(vnode: VnodeWithDom, oldVnode: VnodeWithDom): string | void;
79
74
  export declare function unmount(): string | void;
80
- export declare function mount(dom: any, component: any): string | void;
75
+ export declare function mount(dom: string | DomElement, component: any): string | void;
81
76
  export declare const v: V;
77
+ export {};
82
78
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAKA,UAAU,aAAc,SAAQ,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC;CAAG;AAGxE,MAAM,WAAW,eAAgB,SAAQ,aAAa;IAGpD,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEtB,KAAK,CAAC,EAAE,GAAG,CAAC;CACb;AAID,MAAM,WAAW,UAAW,SAAQ,OAAO,EAAE,aAAa;CAAG;AAI7D,MAAM,WAAW,cAAe,SAAQ,aAAa;IAInD,KAAK,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,GAAG,cAAc,CAAC;IAE1G,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,CAAC;IAExC,KAAK,EAAE,eAAe,CAAC;IAEvB,QAAQ,EAAE,QAAQ,CAAC;IAEnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,GAAG,CAAC,EAAE,UAAU,CAAC;IAEjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAGD,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD,GAAG,EAAE,UAAU,CAAC;CACjB;AAID,MAAM,WAAW,SAAU,SAAQ,aAAa;IAI9C,CAAC,KAAK,CAAC,EAAE,eAAe,GAAG,IAAI,EAAE,GAAG,QAAQ,EAAE,GAAG,EAAE,GAAG,cAAc,GAAG,QAAQ,GAAG,GAAG,CAAC;CACvF;AAMD,MAAM,WAAW,aAAc,SAAQ,aAAa;IAElD,IAAI,EAAE,SAAS,CAAC;IAEhB,KAAK,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAE/B,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;CAClB;AAID,MAAM,WAAW,uBAAwB,SAAQ,cAAc;IAC7D,GAAG,EAAE,SAAS,GAAG,aAAa,CAAC;IAC/B,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAGD,MAAM,WAAW,QAAS,SAAQ,KAAK,CAAC,cAAc,GAAG,uBAAuB,GAAG,GAAG,CAAC;CAAG;AAM1F,MAAM,WAAW,SAAS;IAExB,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC;CAC5E;AAGD,MAAM,WAAW,UAAW,SAAQ,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;CAAG;AAIhE,MAAM,WAAW,aAAc,SAAQ,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;CAAG;AAG9D,MAAM,WAAW,OAAO;IAEtB,SAAS,EAAE,SAAS,GAAG,aAAa,GAAG,IAAI,CAAC;IAE5C,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAE3B,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAE/B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAID,MAAM,WAAW,CAAC;IAEhB,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,EAAE,GAAG,QAAQ,EAAE,QAAQ,GACrG,cAAc,GACd,uBAAuB,CAAC;IAE5B,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAAC;CACnD;AAOD,eAAO,IAAI,QAAQ,SAAuF,CAAC;AAI3G,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,OAAe,GAAG,UAAU,CAEhF;AAMD,eAAO,MAAM,KAAK,gBAKY,CAAC;AAI/B,wBAAgB,WAAW,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,IAAI,SAAS,CAItE;AAGD,eAAO,MAAM,OAAO,YAAa,OAAO,GAAG,cAAc,6BAGxD,CAAC;AAIF,eAAO,MAAM,gBAAgB,YAAa,OAAO,GAAG,uBAAuB,sCAG1E,CAAC;AAGF,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,YAAY,CAmCjD;AAOD,wBAAgB,KAAK,CAAC,UAAU,EAAE,MAAM,aAKvC;AAaD,eAAO,MAAM,OAAO,EAAE,OAKrB,CAAC;AAKF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAgB9C,CAAC;AAWF,wBAAgB,OAAO,CAAC,QAAQ,EAAE,QAAQ,QAIzC;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,QAE1C;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,QAE3C;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,QAI3C;AAoED,eAAO,MAAM,UAAU,EAAE,UAiNxB,CAAC;AAGF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,QAI3D;AA2CD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI,CAM5G;AAUD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI,CA6BtF;AAKD,wBAAgB,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI,CA8N3E;AAGD,wBAAgB,MAAM,IAAI,IAAI,GAAG,MAAM,CA+BtC;AAQD,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CA6BtF;AAGD,wBAAgB,OAAO,kBA4BtB;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,EAAE,SAAS,EAAE,GAAG,iBA8B7D;AAID,eAAO,MAAM,CAAC,EAAE,CAGf,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  var __defProp = Object.defineProperty;
2
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
@@ -56,7 +57,9 @@ var Vnode = function Vnode2(tag, props, children) {
56
57
  this.children = children;
57
58
  };
58
59
  function isComponent(component) {
59
- return component && (typeof component === "function" || typeof component === "object" && "view" in component);
60
+ return Boolean(
61
+ component && (typeof component === "function" || typeof component === "object" && "view" in component)
62
+ );
60
63
  }
61
64
  var isVnode = (object) => {
62
65
  return object instanceof Vnode;