valyrian.js 7.2.11 → 8.0.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 (165) hide show
  1. package/README.md +6 -6
  2. package/dist/flux-store/index.d.ts +32 -0
  3. package/dist/flux-store/index.d.ts.map +1 -0
  4. package/dist/flux-store/index.js +258 -0
  5. package/dist/flux-store/index.js.map +7 -0
  6. package/dist/flux-store/index.min.js +1 -0
  7. package/dist/flux-store/index.min.js.map +1 -0
  8. package/dist/flux-store/index.mjs +237 -0
  9. package/dist/flux-store/index.mjs.map +7 -0
  10. package/dist/hooks/index.d.ts.map +1 -1
  11. package/dist/hooks/index.js +42 -75
  12. package/dist/hooks/index.js.map +2 -2
  13. package/dist/hooks/index.min.js +1 -0
  14. package/dist/hooks/index.min.js.map +1 -0
  15. package/dist/hooks/index.mjs +43 -76
  16. package/dist/hooks/index.mjs.map +2 -2
  17. package/dist/index.d.ts +52 -54
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +397 -328
  20. package/dist/index.js.map +3 -3
  21. package/dist/index.min.js +1 -1
  22. package/dist/index.min.js.map +1 -1
  23. package/dist/index.mjs +397 -328
  24. package/dist/index.mjs.map +3 -3
  25. package/dist/native-store/index.d.ts +14 -0
  26. package/dist/native-store/index.d.ts.map +1 -0
  27. package/dist/native-store/index.js +103 -0
  28. package/dist/native-store/index.js.map +7 -0
  29. package/dist/native-store/index.min.js +1 -0
  30. package/dist/native-store/index.min.js.map +1 -0
  31. package/dist/native-store/index.mjs +82 -0
  32. package/dist/native-store/index.mjs.map +7 -0
  33. package/dist/node/index.d.ts.map +1 -1
  34. package/dist/node/index.js +223 -86
  35. package/dist/node/index.js.map +4 -4
  36. package/dist/node/index.mjs +223 -86
  37. package/dist/node/index.mjs.map +4 -4
  38. package/dist/node/node.sw.js +152 -0
  39. package/dist/node/utils/inline.d.ts.map +1 -1
  40. package/dist/node/utils/node.sw.js +152 -0
  41. package/dist/node/utils/session-storage.d.ts +22 -0
  42. package/dist/node/utils/session-storage.d.ts.map +1 -0
  43. package/dist/node/utils/sw.d.ts.map +1 -1
  44. package/dist/node/utils/tree-adapter.d.ts +9 -0
  45. package/dist/node/utils/tree-adapter.d.ts.map +1 -1
  46. package/dist/pulse-store/index.d.ts +13 -0
  47. package/dist/pulse-store/index.d.ts.map +1 -0
  48. package/dist/pulse-store/index.js +143 -0
  49. package/dist/pulse-store/index.js.map +7 -0
  50. package/dist/pulse-store/index.min.js +1 -0
  51. package/dist/pulse-store/index.min.js.map +1 -0
  52. package/dist/pulse-store/index.mjs +122 -0
  53. package/dist/pulse-store/index.mjs.map +7 -0
  54. package/dist/request/index.d.ts.map +1 -1
  55. package/dist/request/index.js +68 -89
  56. package/dist/request/index.js.map +2 -2
  57. package/dist/request/index.min.js +1 -0
  58. package/dist/request/index.min.js.map +1 -0
  59. package/dist/request/index.mjs +68 -89
  60. package/dist/request/index.mjs.map +2 -2
  61. package/dist/router/index.d.ts +32 -31
  62. package/dist/router/index.d.ts.map +1 -1
  63. package/dist/router/index.js +256 -104
  64. package/dist/router/index.js.map +3 -3
  65. package/dist/router/index.min.js +1 -0
  66. package/dist/router/index.min.js.map +1 -0
  67. package/dist/router/index.mjs +256 -104
  68. package/dist/router/index.mjs.map +3 -3
  69. package/dist/signals/index.d.ts +6 -0
  70. package/dist/signals/index.d.ts.map +1 -0
  71. package/dist/signals/index.js +92 -0
  72. package/dist/signals/index.js.map +7 -0
  73. package/dist/signals/index.min.js +1 -0
  74. package/dist/signals/index.min.js.map +1 -0
  75. package/dist/signals/index.mjs +71 -0
  76. package/dist/signals/index.mjs.map +7 -0
  77. package/dist/suspense/index.d.ts +6 -0
  78. package/dist/suspense/index.d.ts.map +1 -0
  79. package/dist/suspense/index.js +67 -0
  80. package/dist/suspense/index.js.map +7 -0
  81. package/dist/suspense/index.min.js +1 -0
  82. package/dist/suspense/index.min.js.map +1 -0
  83. package/dist/suspense/index.mjs +46 -0
  84. package/dist/suspense/index.mjs.map +7 -0
  85. package/dist/sw/index.min.js +1 -0
  86. package/dist/sw/index.min.js.map +1 -0
  87. package/dist/translate/index.d.ts +19 -0
  88. package/dist/translate/index.d.ts.map +1 -0
  89. package/dist/translate/index.js +150 -0
  90. package/dist/translate/index.js.map +7 -0
  91. package/dist/translate/index.min.js +1 -0
  92. package/dist/translate/index.min.js.map +1 -0
  93. package/dist/translate/index.mjs +129 -0
  94. package/dist/translate/index.mjs.map +7 -0
  95. package/dist/tsconfig.tsbuildinfo +1 -1
  96. package/dist/utils/deep-freeze.d.ts +3 -0
  97. package/dist/utils/deep-freeze.d.ts.map +1 -0
  98. package/dist/utils/getter-setter.d.ts +3 -0
  99. package/dist/utils/getter-setter.d.ts.map +1 -0
  100. package/dist/utils/has-changed.d.ts +2 -0
  101. package/dist/utils/has-changed.d.ts.map +1 -0
  102. package/dist/utils/index.d.ts +4 -0
  103. package/dist/utils/index.d.ts.map +1 -0
  104. package/dist/utils/index.js +138 -0
  105. package/dist/utils/index.js.map +7 -0
  106. package/dist/utils/index.min.js +1 -0
  107. package/dist/utils/index.min.js.map +1 -0
  108. package/dist/utils/index.mjs +115 -0
  109. package/dist/utils/index.mjs.map +7 -0
  110. package/lib/flux-store/index.ts +301 -0
  111. package/lib/hooks/index.ts +52 -101
  112. package/lib/index.ts +479 -719
  113. package/lib/native-store/index.ts +106 -0
  114. package/lib/node/index.ts +5 -3
  115. package/lib/node/utils/icons.ts +5 -5
  116. package/lib/node/utils/inline.ts +17 -17
  117. package/lib/node/utils/node.sw.js +152 -0
  118. package/lib/node/utils/session-storage.ts +117 -0
  119. package/lib/node/utils/sw.ts +35 -11
  120. package/lib/node/utils/tree-adapter.ts +99 -52
  121. package/lib/pulse-store/index.ts +181 -0
  122. package/lib/request/index.ts +86 -116
  123. package/lib/router/index.ts +358 -170
  124. package/lib/signals/index.ts +98 -0
  125. package/lib/suspense/index.ts +57 -0
  126. package/lib/translate/index.ts +156 -0
  127. package/lib/utils/deep-freeze.ts +54 -0
  128. package/lib/utils/getter-setter.ts +40 -0
  129. package/lib/utils/has-changed.ts +43 -0
  130. package/lib/utils/index.ts +3 -0
  131. package/package.json +38 -50
  132. package/tsconfig.json +1 -1
  133. package/dist/dataset/index.d.ts +0 -24
  134. package/dist/dataset/index.d.ts.map +0 -1
  135. package/dist/dataset/index.js +0 -178
  136. package/dist/dataset/index.js.map +0 -7
  137. package/dist/dataset/index.mjs +0 -157
  138. package/dist/dataset/index.mjs.map +0 -7
  139. package/dist/node/node.sw.tpl +0 -133
  140. package/dist/node/utils/node.sw.tpl +0 -133
  141. package/dist/proxy-signal/index.d.ts +0 -23
  142. package/dist/proxy-signal/index.d.ts.map +0 -1
  143. package/dist/proxy-signal/index.js +0 -138
  144. package/dist/proxy-signal/index.js.map +0 -7
  145. package/dist/proxy-signal/index.mjs +0 -117
  146. package/dist/proxy-signal/index.mjs.map +0 -7
  147. package/dist/signal/index.d.ts +0 -20
  148. package/dist/signal/index.d.ts.map +0 -1
  149. package/dist/signal/index.js +0 -95
  150. package/dist/signal/index.js.map +0 -7
  151. package/dist/signal/index.mjs +0 -74
  152. package/dist/signal/index.mjs.map +0 -7
  153. package/dist/store/index.d.ts +0 -16
  154. package/dist/store/index.d.ts.map +0 -1
  155. package/dist/store/index.js +0 -93
  156. package/dist/store/index.js.map +0 -7
  157. package/dist/store/index.mjs +0 -72
  158. package/dist/store/index.mjs.map +0 -7
  159. package/lib/dataset/index.ts +0 -193
  160. package/lib/index.d.ts +0 -0
  161. package/lib/interfaces.ts.bak +0 -141
  162. package/lib/node/utils/node.sw.tpl +0 -133
  163. package/lib/proxy-signal/index.ts +0 -187
  164. package/lib/signal/index.ts +0 -161
  165. package/lib/store/index.ts +0 -101
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../lib/flux-store/index.ts"],
4
+ "sourcesContent": ["import { debouncedUpdate } from \"valyrian.js\";\nimport { deepCloneUnfreeze, deepFreeze } from \"valyrian.js/utils\";\n\ninterface StoreOptions {\n state?: Record<string, any> | (() => Record<string, any>);\n // eslint-disable-next-line no-unused-vars\n mutations?: Record<string, (state: Record<string, any>, ...args: any[]) => void>;\n // eslint-disable-next-line no-unused-vars, no-use-before-define\n actions?: Record<string, (store: FluxStore, ...args: any[]) => any>;\n getters?: Record<\n string,\n // eslint-disable-next-line no-unused-vars\n (state: Record<string, any>, getters: Record<string, any>, globalState?: any, globalGetters?: any) => any\n >;\n modules?: Record<string, StoreOptions>;\n shouldFreeze?: boolean;\n namespace?: string;\n // eslint-disable-next-line no-use-before-define\n rootStore?: FluxStore;\n}\n\n// This is the store entity\nexport class FluxStore {\n public state: Record<string, any>;\n public getters: Record<string, any>;\n private init: {\n frozen: boolean;\n plugins: Function[];\n // eslint-disable-next-line no-use-before-define\n modules: Record<string, FluxStore>;\n childModuleNamespaces: string[];\n listeners: Record<string, Function[]>;\n getters: StoreOptions[\"getters\"];\n mutations: StoreOptions[\"mutations\"];\n actions: StoreOptions[\"actions\"];\n };\n // eslint-disable-next-line no-use-before-define\n public rootStore: FluxStore | null;\n public namespace: string | null;\n\n // eslint-disable-next-line sonarjs/cognitive-complexity\n constructor({\n state = {},\n mutations = {},\n actions = {},\n getters = {},\n modules = {},\n shouldFreeze = true,\n namespace,\n rootStore\n }: StoreOptions = {}) {\n // Initialize the localState for this store\n const localState = typeof state === \"function\" ? state() : state;\n\n // We create a proxy for the state\n this.state = new Proxy(localState || {}, {\n // Every time we try to access a property from the state we try to deep freeze the property\n // to prevent direct modifications to the state\n get: (state, prop: string) => {\n if ((this.rootStore || this).init.modules[prop]) {\n return state[prop];\n }\n if (shouldFreeze) {\n // We are accessing a property from outside the store\n if (this.init.frozen) {\n return deepFreeze(state[prop]);\n }\n\n // We are accessing a property from inside the store\n // So we need to unfreeze the state\n const newState = deepCloneUnfreeze(state);\n for (const key of Reflect.ownKeys(newState)) {\n localState[key] = newState[key];\n }\n }\n return state[prop];\n },\n // If the user tries to set directly it will throw an error, only if we have unfrozen the state via commit\n // this will proceed to set the value\n set: (state, prop: string, value: any) => {\n this.isUnfrozen();\n const old = state[prop];\n state[prop] = value;\n if (this.namespace) {\n prop = `${this.namespace}.${prop}`;\n }\n (this.rootStore || this).trigger(\"set\", prop, value, old);\n return true;\n },\n // If the user tries to delete directly it will throw an error, only if we have unfrozen the state via commit\n // this will proceed to delete the property\n deleteProperty: (state, prop: string) => {\n this.isUnfrozen();\n const old = state[prop];\n Reflect.deleteProperty(state, prop);\n if (this.namespace) {\n prop = `${this.namespace}.${prop}`;\n }\n (this.rootStore || this).trigger(\"delete\", prop, old);\n return true;\n }\n });\n\n // If this is a store been attached to another store\n // this will have the rootStore for future reference\n this.rootStore = rootStore || null;\n\n // If this is a store been attached to another store\n // this will have the namespace attached\n this.namespace = namespace || null;\n\n // We initialize the store with the initial values\n this.init = {\n frozen: true,\n plugins: [],\n modules: {},\n childModuleNamespaces: Object.keys(modules || {}),\n listeners: {\n set: [],\n delete: [],\n beforecommit: [],\n commit: [],\n beforedispatch: [],\n dispatch: [],\n getter: [],\n addlistener: [],\n removelistener: [],\n plugin: [],\n registerModule: [],\n unregisterModule: []\n },\n getters: getters || {},\n mutations: mutations || {},\n actions: actions || {}\n };\n\n // We create a proxy for the getters\n this.getters = new Proxy(getters || {}, {\n // When we try to get a property of the getter we will call the original\n // getter method passing the state as first argument and the other getters as second\n // if we try to get a non existent getter it will fail silently as if\n // we were trying to get an undefined property\n get: (getters, getter: string) => {\n try {\n const { store, key } = this.getStore(this, getter);\n if (store instanceof FluxStore && store.init.getters![key]) {\n const value = store.init.getters![key](store.state, store.getters, this.state, this.getters);\n if (this.namespace) {\n getter = `${this.namespace}.${getter}`;\n }\n (this.rootStore || this).trigger(\"getter\", getter, value);\n return value;\n }\n } catch (error) {\n return;\n }\n }\n });\n\n // Finally we attach the initial modules\n if (modules) {\n Object.keys(modules).forEach((namespace) => {\n const n = this.namespace ? `${this.namespace}.${namespace}` : namespace;\n (this.rootStore || this).registerModule(n, modules[namespace]);\n });\n }\n }\n\n private keyExists(objectname: string, object: Record<string, any>, key: string) {\n if (!object[key]) {\n throw new Error(`The ${objectname} \"${key}\" does not exists.`);\n }\n }\n\n private isFunction(type: string, callback: Function) {\n if (typeof callback !== \"function\") {\n throw new Error(`You need to provide a valid function as ${type}.`);\n }\n }\n\n // Giving a dot based namespace this method will be used to find the module to be called\n private getStore(store: FluxStore, namespace: string) {\n let key = namespace;\n if (key.indexOf(\".\") > -1) {\n const parts = key.split(\".\");\n key = parts.pop()!;\n const moduleName = parts.join(\".\");\n this.keyExists(\"module\", store.init.modules, moduleName);\n store = store.init.modules[moduleName];\n }\n return {\n store,\n key\n };\n }\n\n private isUnfrozen() {\n if (this.init.frozen) {\n throw new Error(\"You need to commit a mutation to change the state\");\n }\n }\n\n // This method unfroze the state and process a mutation\n public commit(mutation: string, ...args: any[]) {\n const { store, key } = this.getStore(this, mutation);\n this.keyExists(\"mutation\", store.init.mutations!, key);\n store.init.frozen = false;\n this.trigger(\"beforecommit\", mutation, ...args);\n store.init.mutations![key](store.state, ...args);\n this.trigger(\"commit\", mutation, ...args);\n store.init.frozen = true;\n\n // We call the debounced update to notify the changes\n debouncedUpdate();\n }\n\n // This method will dispatch an action\n public async dispatch(action: string, ...args: any[]): Promise<any> {\n const { store, key } = this.getStore(this, action);\n this.keyExists(\"action\", store.init.actions!, key);\n this.trigger(\"beforedispatch\", action, ...args);\n try {\n const result = await store.init.actions![key](store, ...args);\n this.trigger(\"dispatch\", action, ...args);\n return result;\n } finally {\n debouncedUpdate();\n }\n }\n\n // This method will trigger an event\n public trigger(event: string, ...args: any[]) {\n this.init.listeners[event].forEach((callback) => callback(this, ...args));\n }\n\n // This method will add a listener to the store\n public on(event: string, listener: Function) {\n this.isFunction(\"listener\", listener);\n this.keyExists(\"event\", this.init.listeners, event);\n if (this.init.listeners[event].indexOf(listener) === -1) {\n this.init.listeners[event].push(listener);\n this.trigger(\"addlistener\", event, listener);\n }\n return () => this.off(event, listener);\n }\n\n // Remove a listener from the store\n public off(event: string, listener: Function) {\n this.isFunction(\"listener\", listener);\n this.keyExists(\"event\", this.init.listeners, event);\n const index = this.init.listeners[event].indexOf(listener);\n if (index > -1) {\n this.init.listeners[event].splice(index, 1);\n this.trigger(\"removelistener\", event, listener);\n }\n }\n\n // This method will add a plugin to the store\n public use(plugin: Function, ...options: any[]) {\n this.isFunction(\"plugin\", plugin);\n if (this.init.plugins.indexOf(plugin) === -1) {\n plugin(this, ...options);\n this.init.plugins.push(plugin);\n this.trigger(\"plugin\", plugin, ...options);\n }\n }\n\n // This method will register a module to the store\n public registerModule(namespace: string, module: StoreOptions) {\n const rootStore = this;\n if (rootStore.init.modules[namespace]) {\n throw new Error(`A module with the namespace \"${namespace}\" is already registered.`);\n }\n const newStore = new FluxStore({ ...module, rootStore, namespace });\n rootStore.init.frozen = false;\n rootStore.init.modules[namespace] = newStore;\n rootStore.state[namespace] = newStore.state;\n rootStore.init.frozen = true;\n rootStore.trigger(\"registerModule\", namespace, module, newStore);\n\n // We call the debounced update to notify the changes\n debouncedUpdate();\n }\n\n // This method will unregister a module from the store\n public unregisterModule(namespace: string) {\n const rootStore = this;\n const store = rootStore.init.modules[namespace];\n if (store) {\n store.init.childModuleNamespaces.forEach((n) => rootStore.unregisterModule(`${namespace}.${n}`));\n rootStore.init.frozen = false;\n Reflect.deleteProperty(rootStore.init.modules, namespace);\n Reflect.deleteProperty(rootStore.state, namespace);\n rootStore.init.frozen = true;\n rootStore.trigger(\"unregisterModule\", namespace, store);\n\n // We call the debounced update to notify the changes\n debouncedUpdate();\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["state", "getters", "namespace"]
7
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/hooks/index.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,IAAI,GAAG,GAAG,CAAC;AAEvB,MAAM,WAAW,cAAc;IAE7B,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;IAElC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;IAE/C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,CAAC;IAEhC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,CAAC;IAE/B,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,CAAC;CACnC;AAED,MAAM,WAAW,UAAU;IAEzB,CAAC,cAAc,EAAE,cAAc,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;CAC3D;AAED,eAAO,MAAM,UAAU,YAiEG,CAAC;AAS3B,eAAO,MAAM,QAAQ,YA7EyB,GAAG,EAAE,KAAK,GAqGtD,CAAC;AAGH,eAAO,MAAM,SAAS,YAxGwB,GAAG,EAAE,KAAK,GA4JtD,CAAC;AAEH,eAAO,MAAM,MAAM,YA9J2B,GAAG,EAAE,KAAK,GAqKtD,CAAC;AAEH,eAAO,MAAM,WAAW,YAvKsB,GAAG,EAAE,KAAK,GAqLtD,CAAC;AAEH,eAAO,MAAM,OAAO,YAvL0B,GAAG,EAAE,KAAK,GAuMtD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/hooks/index.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,IAAI,GAAG,GAAG,CAAC;AAEvB,MAAM,WAAW,cAAc;IAE7B,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;IAElC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;IAE/C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,CAAC;IAEhC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,CAAC;IAE/B,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,CAAC;CACnC;AAED,MAAM,WAAW,UAAU;IAEzB,CAAC,cAAc,EAAE,cAAc,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;CAC3D;AASD,eAAO,MAAM,UAAU,EA+BP,UAAU,CAAC;AAG3B,eAAO,MAAM,QAAQ,YA5CyB,GAAG,EAAE,KAAK,GAkEtD,CAAC;AAEH,eAAO,MAAM,SAAS,YApEwB,GAAG,EAAE,KAAK,GAwHtD,CAAC;AAEH,eAAO,MAAM,MAAM,YA1H2B,GAAG,EAAE,KAAK,GAiItD,CAAC;AAEH,eAAO,MAAM,WAAW,YAnIsB,GAAG,EAAE,KAAK,GA8ItD,CAAC;AAEH,eAAO,MAAM,OAAO,YAhJ0B,GAAG,EAAE,KAAK,GA2JtD,CAAC"}
@@ -29,6 +29,8 @@ __export(hooks_exports, {
29
29
  });
30
30
  module.exports = __toCommonJS(hooks_exports);
31
31
  var import_valyrian = require("valyrian.js");
32
+ var import_utils = require("valyrian.js/utils");
33
+ var componentToHooksWeakMap = /* @__PURE__ */ new WeakMap();
32
34
  var createHook = function createHook2({
33
35
  onCreate,
34
36
  onUpdate: onUpdateHook,
@@ -37,65 +39,40 @@ var createHook = function createHook2({
37
39
  returnValue
38
40
  }) {
39
41
  return (...args) => {
40
- let { component, vnode } = import_valyrian.current;
41
- let hook = null;
42
- if (vnode) {
43
- if (!vnode.components) {
44
- vnode.components = [];
45
- }
46
- if (vnode.components.indexOf(component) === -1) {
47
- vnode.hook_calls = -1;
48
- vnode.components.push(component);
49
- if (!component.hooks) {
50
- component.hooks = [];
51
- (0, import_valyrian.onUnmount)(() => Reflect.deleteProperty(component, "hooks"));
52
- }
53
- }
54
- hook = component.hooks[++vnode.hook_calls];
42
+ const component = import_valyrian.current.component;
43
+ let HookCalls = componentToHooksWeakMap.get(component);
44
+ if (!HookCalls) {
45
+ HookCalls = { hooks: [], hook_calls: -1 };
46
+ componentToHooksWeakMap.set(component, HookCalls);
47
+ (0, import_valyrian.onUnmount)(() => componentToHooksWeakMap.delete(component));
55
48
  }
56
- if (!hook) {
57
- hook = onCreate(...args);
58
- if (vnode) {
59
- component.hooks.push(hook);
60
- }
61
- if (onRemove) {
62
- (0, import_valyrian.onUnmount)(() => onRemove(hook));
63
- }
49
+ (0, import_valyrian.onCleanup)(() => HookCalls.hook_calls = -1);
50
+ let hook = HookCalls.hooks[++HookCalls.hook_calls];
51
+ if (hook) {
52
+ onUpdateHook?.(hook, ...args);
64
53
  } else {
65
- if (onUpdateHook) {
66
- onUpdateHook(hook, ...args);
67
- }
68
- }
69
- if (onCleanupHook) {
70
- (0, import_valyrian.onCleanup)(() => onCleanupHook(hook));
71
- }
72
- if (returnValue) {
73
- return returnValue(hook);
54
+ hook = onCreate(...args);
55
+ HookCalls.hooks.push(hook);
56
+ onRemove && (0, import_valyrian.onUnmount)(() => onRemove(hook));
74
57
  }
75
- return hook;
58
+ onCleanupHook && (0, import_valyrian.onCleanup)(() => onCleanupHook(hook));
59
+ return returnValue ? returnValue(hook) : hook;
76
60
  };
77
61
  };
78
- var updateTimeout;
79
- function delayedUpdate() {
80
- clearTimeout(updateTimeout);
81
- updateTimeout = setTimeout(import_valyrian.update);
82
- }
83
62
  var useState = createHook({
84
63
  onCreate: (value) => {
64
+ let state = value;
85
65
  function get() {
86
- return value;
66
+ return state;
87
67
  }
88
- get.value = value;
89
- get.toJSON = get.valueOf = get;
90
- get.toString = () => `${value}`;
91
68
  function set(newValue) {
92
- if (import_valyrian.current.event) {
69
+ if (import_valyrian.current.event && !import_valyrian.current.event.defaultPrevented) {
93
70
  import_valyrian.current.event.preventDefault();
94
71
  }
95
- if (value !== newValue) {
96
- value = newValue;
97
- get.value = newValue;
98
- delayedUpdate();
72
+ const resolvedValue = typeof newValue === "function" ? newValue(state) : newValue;
73
+ if ((0, import_utils.hasChanged)(state, resolvedValue)) {
74
+ state = resolvedValue;
75
+ (0, import_valyrian.debouncedUpdate)();
99
76
  }
100
77
  }
101
78
  return [get, set];
@@ -103,7 +80,7 @@ var useState = createHook({
103
80
  });
104
81
  var useEffect = createHook({
105
82
  onCreate: (effect, changes) => {
106
- let hook = { effect, prev: [] };
83
+ const hook = { effect, prev: [] };
107
84
  if (changes === null) {
108
85
  hook.onRemove = effect;
109
86
  return hook;
@@ -121,17 +98,15 @@ var useEffect = createHook({
121
98
  hook.onCleanup = hook.effect();
122
99
  return;
123
100
  }
124
- if (Array.isArray(changes)) {
125
- for (let i = 0, l = changes.length; i < l; i++) {
126
- if (changes[i] !== hook.prev[i]) {
127
- hook.prev = changes;
128
- if (typeof hook.onCleanup === "function") {
129
- hook.onCleanup();
130
- }
131
- hook.onCleanup = hook.effect();
132
- return;
133
- }
101
+ if (Array.isArray(changes) && changes.length === 0) {
102
+ return;
103
+ }
104
+ if (Array.isArray(changes) && (0, import_utils.hasChanged)(hook.prev, changes)) {
105
+ hook.prev = changes;
106
+ if (typeof hook.onCleanup === "function") {
107
+ hook.onCleanup();
134
108
  }
109
+ hook.onCleanup = hook.effect();
135
110
  }
136
111
  },
137
112
  onRemove: (hook) => {
@@ -153,33 +128,25 @@ var useRef = createHook({
153
128
  });
154
129
  var useCallback = createHook({
155
130
  onCreate: (callback, changes) => {
156
- callback();
157
131
  return { callback, changes };
158
132
  },
159
133
  onUpdate: (hook, callback, changes) => {
160
- for (let i = 0, l = changes.length; i < l; i++) {
161
- if (changes[i] !== hook.changes[i]) {
162
- hook.changes = changes;
163
- hook.callback();
164
- return;
165
- }
134
+ if ((0, import_utils.hasChanged)(hook.changes, changes)) {
135
+ hook.changes = changes;
136
+ hook.callback = callback;
166
137
  }
167
- }
138
+ },
139
+ returnValue: (hook) => hook.callback
168
140
  });
169
141
  var useMemo = createHook({
170
142
  onCreate: (callback, changes) => {
171
143
  return { callback, changes, value: callback() };
172
144
  },
173
145
  onUpdate: (hook, callback, changes) => {
174
- for (let i = 0, l = changes.length; i < l; i++) {
175
- if (changes[i] !== hook.changes[i]) {
176
- hook.changes = changes;
177
- hook.value = callback();
178
- return;
179
- }
146
+ if ((0, import_utils.hasChanged)(hook.changes, changes)) {
147
+ hook.changes = changes;
148
+ hook.value = callback();
180
149
  }
181
150
  },
182
- returnValue: (hook) => {
183
- return hook.value;
184
- }
151
+ returnValue: (hook) => hook.value
185
152
  });
@@ -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: 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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",
4
+ "sourcesContent": ["import { Component, POJOComponent, current, directive, onCleanup, onUnmount, debouncedUpdate } from \"valyrian.js\";\nimport { hasChanged } from \"valyrian.js/utils\";\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\ntype HookCalls = {\n hooks: Hook[];\n hook_calls: number;\n};\n\nconst componentToHooksWeakMap = new WeakMap<Component | POJOComponent, HookCalls>();\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 const component = current.component as Component | POJOComponent;\n let HookCalls = componentToHooksWeakMap.get(component);\n\n if (!HookCalls) {\n HookCalls = { hooks: [], hook_calls: -1 };\n componentToHooksWeakMap.set(component, HookCalls);\n onUnmount(() => componentToHooksWeakMap.delete(component));\n }\n\n onCleanup(() => ((HookCalls as HookCalls).hook_calls = -1));\n\n let hook = HookCalls.hooks[++HookCalls.hook_calls];\n if (hook) {\n onUpdateHook?.(hook, ...args);\n } else {\n hook = onCreate(...args);\n HookCalls.hooks.push(hook);\n onRemove && onUnmount(() => onRemove(hook));\n }\n\n onCleanupHook && onCleanup(() => onCleanupHook(hook));\n return returnValue ? returnValue(hook) : hook;\n };\n} as unknown as CreateHook;\n\n// Use state hook\nexport const useState = createHook({\n onCreate: (value) => {\n let state = value;\n function get() {\n return state;\n }\n\n function set(newValue: any) {\n if (current.event && !current.event.defaultPrevented) {\n current.event.preventDefault();\n }\n\n const resolvedValue = typeof newValue === \"function\" ? newValue(state) : newValue;\n\n if (hasChanged(state, resolvedValue)) {\n state = resolvedValue;\n debouncedUpdate();\n }\n }\n\n return [get, set];\n }\n});\n\nexport const useEffect = createHook({\n onCreate: (effect: Function, changes: any[]) => {\n const 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 if (Array.isArray(changes) && changes.length === 0) {\n // Si las dependencias son un array vac\u00EDo, no se debe volver a ejecutar.\n return;\n }\n\n // on update if there are changes\n if (Array.isArray(changes) && hasChanged(hook.prev, changes)) {\n hook.prev = changes;\n if (typeof hook.onCleanup === \"function\") {\n hook.onCleanup();\n }\n hook.onCleanup = hook.effect();\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 return { callback, changes };\n },\n onUpdate: (hook, callback, changes) => {\n if (hasChanged(hook.changes, changes)) {\n hook.changes = changes;\n hook.callback = callback;\n }\n },\n returnValue: (hook) => hook.callback\n});\n\nexport const useMemo = createHook({\n onCreate: (callback, changes) => {\n return { callback, changes, value: callback() };\n },\n onUpdate: (hook, callback, changes) => {\n if (hasChanged(hook.changes, changes)) {\n hook.changes = changes;\n hook.value = callback();\n }\n },\n returnValue: (hook) => hook.value\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["createHook"]
7
7
  }
@@ -0,0 +1 @@
1
+ (()=>{"use strict";var e=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,t=Object.prototype.hasOwnProperty,r={};((n,o)=>{for(var t in o)e(n,t,{get:o[t],enumerable:!0})})(r,{createHook:()=>s,useCallback:()=>d,useEffect:()=>i,useMemo:()=>h,useRef:()=>v,useState:()=>f});var a,u=(a=r,((r,a,u,l)=>{if(a&&"object"==typeof a||"function"==typeof a)for(let c of o(a))t.call(r,c)||c===u||e(r,c,{get:()=>a[c],enumerable:!(l=n(a,c))||l.enumerable});return r})(e({},"__esModule",{value:!0}),a)),l=require("valyrian.js"),c=require("valyrian.js/utils"),p=new WeakMap,s=function({onCreate:e,onUpdate:n,onCleanup:o,onRemove:t,returnValue:r}){return(...a)=>{const u=l.current.component;let c=p.get(u);c||(c={hooks:[],hook_calls:-1},p.set(u,c),(0,l.onUnmount)(()=>p.delete(u))),(0,l.onCleanup)(()=>c.hook_calls=-1);let s=c.hooks[++c.hook_calls];return s?n?.(s,...a):(s=e(...a),c.hooks.push(s),t&&(0,l.onUnmount)(()=>t(s))),o&&(0,l.onCleanup)(()=>o(s)),r?r(s):s}},f=s({onCreate:e=>{let n=e;return[function(){return n},function(e){l.current.event&&!l.current.event.defaultPrevented&&l.current.event.preventDefault();const o="function"==typeof e?e(n):e;(0,c.hasChanged)(n,o)&&(n=o,(0,l.debouncedUpdate)())}]}}),i=s({onCreate:(e,n)=>{const o={effect:e,prev:[]};return null===n?(o.onRemove=e,o):(o.prev=n,o.onCleanup=o.effect(),o)},onUpdate:(e,n,o)=>{if(void 0===o)return e.prev=o,"function"==typeof e.onCleanup&&e.onCleanup(),void(e.onCleanup=e.effect());Array.isArray(o)&&0===o.length||Array.isArray(o)&&(0,c.hasChanged)(e.prev,o)&&(e.prev=o,"function"==typeof e.onCleanup&&e.onCleanup(),e.onCleanup=e.effect())},onRemove:e=>{"function"==typeof e.onCleanup&&e.onCleanup(),"function"==typeof e.onRemove&&e.onRemove()}}),v=s({onCreate:e=>((0,l.directive)("ref",(e,n)=>{e.current=n.dom}),{current:e})}),d=s({onCreate:(e,n)=>({callback:e,changes:n}),onUpdate:(e,n,o)=>{(0,c.hasChanged)(e.changes,o)&&(e.changes=o,e.callback=n)},returnValue:e=>e.callback}),h=s({onCreate:(e,n)=>({callback:e,changes:n,value:e()}),onUpdate:(e,n,o)=>{(0,c.hasChanged)(e.changes,o)&&(e.changes=o,e.value=n())},returnValue:e=>e.value});"undefined"!=typeof module?module.exports=u:self.ValyrianHooks=u})();//# sourceMappingURL=index.min.js.map
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJob29rc19leHBvcnRzIiwiX19leHBvcnQiLCJjcmVhdGVIb29rIiwidXNlQ2FsbGJhY2siLCJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlU3RhdGUiLCJfX0VYUE9SVFNfXyIsImltcG9ydF92YWx5cmlhbiIsInJlcXVpcmUiLCJpbXBvcnRfdXRpbHMiLCJjb21wb25lbnRUb0hvb2tzV2Vha01hcCIsIldlYWtNYXAiLCJvbkNyZWF0ZSIsIm9uVXBkYXRlIiwib25VcGRhdGVIb29rIiwib25DbGVhbnVwIiwib25DbGVhbnVwSG9vayIsIm9uUmVtb3ZlIiwicmV0dXJuVmFsdWUiLCJhcmdzIiwiY29tcG9uZW50IiwiY3VycmVudCIsIkhvb2tDYWxscyIsImdldCIsImhvb2tzIiwiaG9va19jYWxscyIsInNldCIsIm9uVW5tb3VudCIsImRlbGV0ZSIsImhvb2siLCJwdXNoIiwidmFsdWUiLCJzdGF0ZSIsIm5ld1ZhbHVlIiwiZXZlbnQiLCJkZWZhdWx0UHJldmVudGVkIiwicHJldmVudERlZmF1bHQiLCJyZXNvbHZlZFZhbHVlIiwiaGFzQ2hhbmdlZCIsImRlYm91bmNlZFVwZGF0ZSIsImVmZmVjdCIsImNoYW5nZXMiLCJwcmV2IiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiaW5pdGlhbFZhbHVlIiwiZGlyZWN0aXZlIiwicmVmIiwidm5vZGUiLCJkb20iLCJjYWxsYmFjayJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9ob29rcy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFBPSk9Db21wb25lbnQsIGN1cnJlbnQsIGRpcmVjdGl2ZSwgb25DbGVhbnVwLCBvblVubW91bnQsIGRlYm91bmNlZFVwZGF0ZSB9IGZyb20gXCJ2YWx5cmlhbi5qc1wiO1xuaW1wb3J0IHsgaGFzQ2hhbmdlZCB9IGZyb20gXCJ2YWx5cmlhbi5qcy91dGlsc1wiO1xuXG5leHBvcnQgdHlwZSBIb29rID0gYW55O1xuXG5leHBvcnQgaW50ZXJmYWNlIEhvb2tEZWZpbml0aW9uIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIG9uQ3JlYXRlOiAoLi4uYXJnczogYW55W10pID0+IGFueTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIG9uVXBkYXRlPzogKGhvb2s6IEhvb2ssIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBvbkNsZWFudXA/OiAoaG9vazogSG9vaykgPT4gYW55O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgb25SZW1vdmU/OiAoaG9vazogSG9vaykgPT4gYW55O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgcmV0dXJuVmFsdWU/OiAoaG9vazogSG9vaykgPT4gYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUhvb2sge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgKEhvb2tEZWZpbml0aW9uOiBIb29rRGVmaW5pdGlvbik6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xufVxuXG50eXBlIEhvb2tDYWxscyA9IHtcbiAgaG9va3M6IEhvb2tbXTtcbiAgaG9va19jYWxsczogbnVtYmVyO1xufTtcblxuY29uc3QgY29tcG9uZW50VG9Ib29rc1dlYWtNYXAgPSBuZXcgV2Vha01hcDxDb21wb25lbnQgfCBQT0pPQ29tcG9uZW50LCBIb29rQ2FsbHM+KCk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVIb29rID0gZnVuY3Rpb24gY3JlYXRlSG9vayh7XG4gIG9uQ3JlYXRlLFxuICBvblVwZGF0ZTogb25VcGRhdGVIb29rLFxuICBvbkNsZWFudXA6IG9uQ2xlYW51cEhvb2ssXG4gIG9uUmVtb3ZlLFxuICByZXR1cm5WYWx1ZVxufTogSG9va0RlZmluaXRpb24pOiBIb29rIHtcbiAgcmV0dXJuICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IGN1cnJlbnQuY29tcG9uZW50IGFzIENvbXBvbmVudCB8IFBPSk9Db21wb25lbnQ7XG4gICAgbGV0IEhvb2tDYWxscyA9IGNvbXBvbmVudFRvSG9va3NXZWFrTWFwLmdldChjb21wb25lbnQpO1xuXG4gICAgaWYgKCFIb29rQ2FsbHMpIHtcbiAgICAgIEhvb2tDYWxscyA9IHsgaG9va3M6IFtdLCBob29rX2NhbGxzOiAtMSB9O1xuICAgICAgY29tcG9uZW50VG9Ib29rc1dlYWtNYXAuc2V0KGNvbXBvbmVudCwgSG9va0NhbGxzKTtcbiAgICAgIG9uVW5tb3VudCgoKSA9PiBjb21wb25lbnRUb0hvb2tzV2Vha01hcC5kZWxldGUoY29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgb25DbGVhbnVwKCgpID0+ICgoSG9va0NhbGxzIGFzIEhvb2tDYWxscykuaG9va19jYWxscyA9IC0xKSk7XG5cbiAgICBsZXQgaG9vayA9IEhvb2tDYWxscy5ob29rc1srK0hvb2tDYWxscy5ob29rX2NhbGxzXTtcbiAgICBpZiAoaG9vaykge1xuICAgICAgb25VcGRhdGVIb29rPy4oaG9vaywgLi4uYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhvb2sgPSBvbkNyZWF0ZSguLi5hcmdzKTtcbiAgICAgIEhvb2tDYWxscy5ob29rcy5wdXNoKGhvb2spO1xuICAgICAgb25SZW1vdmUgJiYgb25Vbm1vdW50KCgpID0+IG9uUmVtb3ZlKGhvb2spKTtcbiAgICB9XG5cbiAgICBvbkNsZWFudXBIb29rICYmIG9uQ2xlYW51cCgoKSA9PiBvbkNsZWFudXBIb29rKGhvb2spKTtcbiAgICByZXR1cm4gcmV0dXJuVmFsdWUgPyByZXR1cm5WYWx1ZShob29rKSA6IGhvb2s7XG4gIH07XG59IGFzIHVua25vd24gYXMgQ3JlYXRlSG9vaztcblxuLy8gVXNlIHN0YXRlIGhvb2tcbmV4cG9ydCBjb25zdCB1c2VTdGF0ZSA9IGNyZWF0ZUhvb2soe1xuICBvbkNyZWF0ZTogKHZhbHVlKSA9PiB7XG4gICAgbGV0IHN0YXRlID0gdmFsdWU7XG4gICAgZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldChuZXdWYWx1ZTogYW55KSB7XG4gICAgICBpZiAoY3VycmVudC5ldmVudCAmJiAhY3VycmVudC5ldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgIGN1cnJlbnQuZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzb2x2ZWRWYWx1ZSA9IHR5cGVvZiBuZXdWYWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gbmV3VmFsdWUoc3RhdGUpIDogbmV3VmFsdWU7XG5cbiAgICAgIGlmIChoYXNDaGFuZ2VkKHN0YXRlLCByZXNvbHZlZFZhbHVlKSkge1xuICAgICAgICBzdGF0ZSA9IHJlc29sdmVkVmFsdWU7XG4gICAgICAgIGRlYm91bmNlZFVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbZ2V0LCBzZXRdO1xuICB9XG59KTtcblxuZXhwb3J0IGNvbnN0IHVzZUVmZmVjdCA9IGNyZWF0ZUhvb2soe1xuICBvbkNyZWF0ZTogKGVmZmVjdDogRnVuY3Rpb24sIGNoYW5nZXM6IGFueVtdKSA9PiB7XG4gICAgY29uc3QgaG9vazoge1xuICAgICAgZWZmZWN0OiBGdW5jdGlvbjtcbiAgICAgIHByZXY6IGFueVtdO1xuICAgICAgb25SZW1vdmU/OiBGdW5jdGlvbjtcbiAgICAgIG9uQ2xlYW51cD86IEZ1bmN0aW9uO1xuICAgIH0gPSB7IGVmZmVjdCwgcHJldjogW10gfTtcbiAgICAvLyBvbiB1bm1vdW50XG4gICAgaWYgKGNoYW5nZXMgPT09IG51bGwpIHtcbiAgICAgIGhvb2sub25SZW1vdmUgPSBlZmZlY3Q7XG4gICAgICByZXR1cm4gaG9vaztcbiAgICB9XG5cbiAgICAvLyBvbiBjcmVhdGVcbiAgICBob29rLnByZXYgPSBjaGFuZ2VzO1xuICAgIGhvb2sub25DbGVhbnVwID0gaG9vay5lZmZlY3QoKTtcbiAgICByZXR1cm4gaG9vaztcbiAgfSxcbiAgb25VcGRhdGU6IChob29rLCBlZmZlY3QsIGNoYW5nZXMpID0+IHtcbiAgICAvLyBvbiB1cGRhdGVcbiAgICBpZiAodHlwZW9mIGNoYW5nZXMgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGhvb2sucHJldiA9IGNoYW5nZXM7XG4gICAgICBpZiAodHlwZW9mIGhvb2sub25DbGVhbnVwID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgaG9vay5vbkNsZWFudXAoKTtcbiAgICAgIH1cbiAgICAgIGhvb2sub25DbGVhbnVwID0gaG9vay5lZmZlY3QoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGFuZ2VzKSAmJiBjaGFuZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gU2kgbGFzIGRlcGVuZGVuY2lhcyBzb24gdW4gYXJyYXkgdmFjw61vLCBubyBzZSBkZWJlIHZvbHZlciBhIGVqZWN1dGFyLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG9uIHVwZGF0ZSBpZiB0aGVyZSBhcmUgY2hhbmdlc1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNoYW5nZXMpICYmIGhhc0NoYW5nZWQoaG9vay5wcmV2LCBjaGFuZ2VzKSkge1xuICAgICAgaG9vay5wcmV2ID0gY2hhbmdlcztcbiAgICAgIGlmICh0eXBlb2YgaG9vay5vbkNsZWFudXAgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBob29rLm9uQ2xlYW51cCgpO1xuICAgICAgfVxuICAgICAgaG9vay5vbkNsZWFudXAgPSBob29rLmVmZmVjdCgpO1xuICAgIH1cbiAgfSxcbiAgb25SZW1vdmU6IChob29rKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBob29rLm9uQ2xlYW51cCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBob29rLm9uQ2xlYW51cCgpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGhvb2sub25SZW1vdmUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgaG9vay5vblJlbW92ZSgpO1xuICAgIH1cbiAgfVxufSk7XG5cbmV4cG9ydCBjb25zdCB1c2VSZWYgPSBjcmVhdGVIb29rKHtcbiAgb25DcmVhdGU6IChpbml0aWFsVmFsdWUpID0+IHtcbiAgICBkaXJlY3RpdmUoXCJyZWZcIiwgKHJlZiwgdm5vZGUpID0+IHtcbiAgICAgIHJlZi5jdXJyZW50ID0gdm5vZGUuZG9tO1xuICAgIH0pO1xuICAgIHJldHVybiB7IGN1cnJlbnQ6IGluaXRpYWxWYWx1ZSB9O1xuICB9XG59KTtcblxuZXhwb3J0IGNvbnN0IHVzZUNhbGxiYWNrID0gY3JlYXRlSG9vayh7XG4gIG9uQ3JlYXRlOiAoY2FsbGJhY2ssIGNoYW5nZXMpID0+IHtcbiAgICByZXR1cm4geyBjYWxsYmFjaywgY2hhbmdlcyB9O1xuICB9LFxuICBvblVwZGF0ZTogKGhvb2ssIGNhbGxiYWNrLCBjaGFuZ2VzKSA9PiB7XG4gICAgaWYgKGhhc0NoYW5nZWQoaG9vay5jaGFuZ2VzLCBjaGFuZ2VzKSkge1xuICAgICAgaG9vay5jaGFuZ2VzID0gY2hhbmdlcztcbiAgICAgIGhvb2suY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG4gIH0sXG4gIHJldHVyblZhbHVlOiAoaG9vaykgPT4gaG9vay5jYWxsYmFja1xufSk7XG5cbmV4cG9ydCBjb25zdCB1c2VNZW1vID0gY3JlYXRlSG9vayh7XG4gIG9uQ3JlYXRlOiAoY2FsbGJhY2ssIGNoYW5nZXMpID0+IHtcbiAgICByZXR1cm4geyBjYWxsYmFjaywgY2hhbmdlcywgdmFsdWU6IGNhbGxiYWNrKCkgfTtcbiAgfSxcbiAgb25VcGRhdGU6IChob29rLCBjYWxsYmFjaywgY2hhbmdlcykgPT4ge1xuICAgIGlmIChoYXNDaGFuZ2VkKGhvb2suY2hhbmdlcywgY2hhbmdlcykpIHtcbiAgICAgIGhvb2suY2hhbmdlcyA9IGNoYW5nZXM7XG4gICAgICBob29rLnZhbHVlID0gY2FsbGJhY2soKTtcbiAgICB9XG4gIH0sXG4gIHJldHVyblZhbHVlOiAoaG9vaykgPT4gaG9vay52YWx1ZVxufSk7XG4iXSwibWFwcGluZ3MiOiJnSkFBQUEsRUFBQSxHLHlEQUFBQyxDQUFBRCxFQUFBLENBQUFFLFdBQUEsSUFBQUEsRUFBQUMsWUFBQSxJQUFBQSxFQUFBQyxVQUFBLElBQUFBLEVBQUFDLFFBQUEsSUFBQUEsRUFBQUMsT0FBQSxJQUFBQSxFQUFBQyxTQUFBLElBQUFBLElBQUEsSSxFQUFBQyxHLEVBQUFSLEUsME1BQUFTLEVBQW9HQyxRQUFBLGVBQ3BHQyxFQUEyQkQsUUFBQSxxQkEyQnJCRSxFQUEwQixJQUFJQyxRQUV2QlgsRUFBYSxVQUFvQlksU0FDNUNBLEVBQ0FDLFNBQVVDLEVBQ1ZDLFVBQVdDLEVBQUFDLFNBQ1hBLEVBQUFDLFlBQ0FBLElBRUEsTUFBTyxJQUFJQyxLQUNULE1BQU1DLEVBQVliLEVBQUFjLFFBQVFELFVBQzFCLElBQUlFLEVBQVlaLEVBQXdCYSxJQUFJSCxHQUV2Q0UsSUFDSEEsRUFBWSxDQUFFRSxNQUFPLEdBQUlDLFlBQVksR0FDckNmLEVBQXdCZ0IsSUFBSU4sRUFBV0UsSUFDdkMsRUFBQWYsRUFBQW9CLFdBQVUsSUFBTWpCLEVBQXdCa0IsT0FBT1IsTUFHakQsRUFBQWIsRUFBQVEsV0FBVSxJQUFRTyxFQUF3QkcsWUFBYSxHQUV2RCxJQUFJSSxFQUFPUCxFQUFVRSxRQUFRRixFQUFVRyxZQVV2QyxPQVRJSSxFQUNGZixJQUFlZSxLQUFTVixJQUV4QlUsRUFBT2pCLEtBQVlPLEdBQ25CRyxFQUFVRSxNQUFNTSxLQUFLRCxHQUNyQlosSUFBQSxFQUFZVixFQUFBb0IsV0FBVSxJQUFNVixFQUFTWSxLQUd2Q2IsSUFBQSxFQUFpQlQsRUFBQVEsV0FBVSxJQUFNQyxFQUFjYSxJQUN4Q1gsRUFBY0EsRUFBWVcsR0FBUUEsQ0FBQSxDQUU3QyxFQUdheEIsRUFBV0wsRUFBVyxDQUNqQ1ksU0FBV21CLElBQ1QsSUFBSUMsRUFBUUQsRUFrQlosTUFBTyxDQWpCUCxXQUNFLE9BQU9DLENBQ1QsRUFFQSxTQUFhQyxHQUNQMUIsRUFBQWMsUUFBUWEsUUFBVTNCLEVBQUFjLFFBQVFhLE1BQU1DLGtCQUNsQzVCLEVBQUFjLFFBQVFhLE1BQU1FLGlCQUdoQixNQUFNQyxFQUFvQyxtQkFBYkosRUFBMEJBLEVBQVNELEdBQVNDLEdBRXpFLEVBQUl4QixFQUFBNkIsWUFBV04sRUFBT0ssS0FDcEJMLEVBQVFLLEdBQ1IsRUFBQTlCLEVBQUFnQyxtQkFFSixFQUVnQixJQUlQckMsRUFBWUYsRUFBVyxDQUNsQ1ksU0FBVSxDQUFDNEIsRUFBa0JDLEtBQzNCLE1BQU1aLEVBS0YsQ0FBRVcsU0FBUUUsS0FBTSxJQUVwQixPQUFnQixPQUFaRCxHQUNGWixFQUFLWixTQUFXdUIsRUFDVFgsSUFJVEEsRUFBS2EsS0FBT0QsRUFDWlosRUFBS2QsVUFBWWMsRUFBS1csU0FDZlgsRUFBQSxFQUVUaEIsU0FBVSxDQUFDZ0IsRUFBTVcsRUFBUUMsS0FFdkIsUUFBdUIsSUFBWkEsRUFNVCxPQUxBWixFQUFLYSxLQUFPRCxFQUNrQixtQkFBbkJaLEVBQUtkLFdBQ2RjLEVBQUtkLGlCQUVQYyxFQUFLZCxVQUFZYyxFQUFLVyxVQUlwQkcsTUFBTUMsUUFBUUgsSUFBK0IsSUFBbkJBLEVBQVFJLFFBTWxDRixNQUFNQyxRQUFRSCxLQUFPLEVBQUtoQyxFQUFBNkIsWUFBV1QsRUFBS2EsS0FBTUQsS0FDbERaLEVBQUthLEtBQU9ELEVBQ2tCLG1CQUFuQlosRUFBS2QsV0FDZGMsRUFBS2QsWUFFUGMsRUFBS2QsVUFBWWMsRUFBS1csU0FDeEIsRUFFRnZCLFNBQVdZLElBQ3FCLG1CQUFuQkEsRUFBS2QsV0FDZGMsRUFBS2QsWUFFc0IsbUJBQWxCYyxFQUFLWixVQUNkWSxFQUFLWixVQUNQLElBSVNiLEVBQVNKLEVBQVcsQ0FDL0JZLFNBQVdrQyxLQUNULEVBQUF2QyxFQUFBd0MsV0FBVSxNQUFPLENBQUNDLEVBQUtDLEtBQ3JCRCxFQUFJM0IsUUFBVTRCLEVBQU1DLEdBQUEsR0FFZixDQUFFN0IsUUFBU3lCLE1BSVQ3QyxFQUFjRCxFQUFXLENBQ3BDWSxTQUFVLENBQUN1QyxFQUFVVixLQUNaLENBQUVVLFdBQVVWLFlBRXJCNUIsU0FBVSxDQUFDZ0IsRUFBTXNCLEVBQVVWLE1BQ3pCLEVBQUloQyxFQUFBNkIsWUFBV1QsRUFBS1ksUUFBU0EsS0FDM0JaLEVBQUtZLFFBQVVBLEVBQ2ZaLEVBQUtzQixTQUFXQSxFQUNsQixFQUVGakMsWUFBY1csR0FBU0EsRUFBS3NCLFdBR2pCaEQsRUFBVUgsRUFBVyxDQUNoQ1ksU0FBVSxDQUFDdUMsRUFBVVYsS0FDWixDQUFFVSxXQUFVVixVQUFTVixNQUFPb0IsTUFFckN0QyxTQUFVLENBQUNnQixFQUFNc0IsRUFBVVYsTUFDekIsRUFBSWhDLEVBQUE2QixZQUFXVCxFQUFLWSxRQUFTQSxLQUMzQlosRUFBS1ksUUFBVUEsRUFDZlosRUFBS0UsTUFBUW9CLElBQ2YsRUFFRmpDLFlBQWNXLEdBQVNBLEVBQUtFLFEifQ==
@@ -1,5 +1,7 @@
1
1
  // lib/hooks/index.ts
2
- import { current, directive, onCleanup, onUnmount, update } from "valyrian.js";
2
+ import { current, directive, onCleanup, onUnmount, debouncedUpdate } from "valyrian.js";
3
+ import { hasChanged } from "valyrian.js/utils";
4
+ var componentToHooksWeakMap = /* @__PURE__ */ new WeakMap();
3
5
  var createHook = function createHook2({
4
6
  onCreate,
5
7
  onUpdate: onUpdateHook,
@@ -8,65 +10,40 @@ var createHook = function createHook2({
8
10
  returnValue
9
11
  }) {
10
12
  return (...args) => {
11
- let { component, vnode } = current;
12
- let hook = null;
13
- if (vnode) {
14
- if (!vnode.components) {
15
- vnode.components = [];
16
- }
17
- if (vnode.components.indexOf(component) === -1) {
18
- vnode.hook_calls = -1;
19
- vnode.components.push(component);
20
- if (!component.hooks) {
21
- component.hooks = [];
22
- onUnmount(() => Reflect.deleteProperty(component, "hooks"));
23
- }
24
- }
25
- hook = component.hooks[++vnode.hook_calls];
13
+ const component = current.component;
14
+ let HookCalls = componentToHooksWeakMap.get(component);
15
+ if (!HookCalls) {
16
+ HookCalls = { hooks: [], hook_calls: -1 };
17
+ componentToHooksWeakMap.set(component, HookCalls);
18
+ onUnmount(() => componentToHooksWeakMap.delete(component));
26
19
  }
27
- if (!hook) {
28
- hook = onCreate(...args);
29
- if (vnode) {
30
- component.hooks.push(hook);
31
- }
32
- if (onRemove) {
33
- onUnmount(() => onRemove(hook));
34
- }
20
+ onCleanup(() => HookCalls.hook_calls = -1);
21
+ let hook = HookCalls.hooks[++HookCalls.hook_calls];
22
+ if (hook) {
23
+ onUpdateHook?.(hook, ...args);
35
24
  } else {
36
- if (onUpdateHook) {
37
- onUpdateHook(hook, ...args);
38
- }
39
- }
40
- if (onCleanupHook) {
41
- onCleanup(() => onCleanupHook(hook));
42
- }
43
- if (returnValue) {
44
- return returnValue(hook);
25
+ hook = onCreate(...args);
26
+ HookCalls.hooks.push(hook);
27
+ onRemove && onUnmount(() => onRemove(hook));
45
28
  }
46
- return hook;
29
+ onCleanupHook && onCleanup(() => onCleanupHook(hook));
30
+ return returnValue ? returnValue(hook) : hook;
47
31
  };
48
32
  };
49
- var updateTimeout;
50
- function delayedUpdate() {
51
- clearTimeout(updateTimeout);
52
- updateTimeout = setTimeout(update);
53
- }
54
33
  var useState = createHook({
55
34
  onCreate: (value) => {
35
+ let state = value;
56
36
  function get() {
57
- return value;
37
+ return state;
58
38
  }
59
- get.value = value;
60
- get.toJSON = get.valueOf = get;
61
- get.toString = () => `${value}`;
62
39
  function set(newValue) {
63
- if (current.event) {
40
+ if (current.event && !current.event.defaultPrevented) {
64
41
  current.event.preventDefault();
65
42
  }
66
- if (value !== newValue) {
67
- value = newValue;
68
- get.value = newValue;
69
- delayedUpdate();
43
+ const resolvedValue = typeof newValue === "function" ? newValue(state) : newValue;
44
+ if (hasChanged(state, resolvedValue)) {
45
+ state = resolvedValue;
46
+ debouncedUpdate();
70
47
  }
71
48
  }
72
49
  return [get, set];
@@ -74,7 +51,7 @@ var useState = createHook({
74
51
  });
75
52
  var useEffect = createHook({
76
53
  onCreate: (effect, changes) => {
77
- let hook = { effect, prev: [] };
54
+ const hook = { effect, prev: [] };
78
55
  if (changes === null) {
79
56
  hook.onRemove = effect;
80
57
  return hook;
@@ -92,17 +69,15 @@ var useEffect = createHook({
92
69
  hook.onCleanup = hook.effect();
93
70
  return;
94
71
  }
95
- if (Array.isArray(changes)) {
96
- for (let i = 0, l = changes.length; i < l; i++) {
97
- if (changes[i] !== hook.prev[i]) {
98
- hook.prev = changes;
99
- if (typeof hook.onCleanup === "function") {
100
- hook.onCleanup();
101
- }
102
- hook.onCleanup = hook.effect();
103
- return;
104
- }
72
+ if (Array.isArray(changes) && changes.length === 0) {
73
+ return;
74
+ }
75
+ if (Array.isArray(changes) && hasChanged(hook.prev, changes)) {
76
+ hook.prev = changes;
77
+ if (typeof hook.onCleanup === "function") {
78
+ hook.onCleanup();
105
79
  }
80
+ hook.onCleanup = hook.effect();
106
81
  }
107
82
  },
108
83
  onRemove: (hook) => {
@@ -124,35 +99,27 @@ var useRef = createHook({
124
99
  });
125
100
  var useCallback = createHook({
126
101
  onCreate: (callback, changes) => {
127
- callback();
128
102
  return { callback, changes };
129
103
  },
130
104
  onUpdate: (hook, callback, changes) => {
131
- for (let i = 0, l = changes.length; i < l; i++) {
132
- if (changes[i] !== hook.changes[i]) {
133
- hook.changes = changes;
134
- hook.callback();
135
- return;
136
- }
105
+ if (hasChanged(hook.changes, changes)) {
106
+ hook.changes = changes;
107
+ hook.callback = callback;
137
108
  }
138
- }
109
+ },
110
+ returnValue: (hook) => hook.callback
139
111
  });
140
112
  var useMemo = createHook({
141
113
  onCreate: (callback, changes) => {
142
114
  return { callback, changes, value: callback() };
143
115
  },
144
116
  onUpdate: (hook, callback, changes) => {
145
- for (let i = 0, l = changes.length; i < l; i++) {
146
- if (changes[i] !== hook.changes[i]) {
147
- hook.changes = changes;
148
- hook.value = callback();
149
- return;
150
- }
117
+ if (hasChanged(hook.changes, changes)) {
118
+ hook.changes = changes;
119
+ hook.value = callback();
151
120
  }
152
121
  },
153
- returnValue: (hook) => {
154
- return hook.value;
155
- }
122
+ returnValue: (hook) => hook.value
156
123
  });
157
124
  export {
158
125
  createHook,
@@ -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: 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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",
4
+ "sourcesContent": ["import { Component, POJOComponent, current, directive, onCleanup, onUnmount, debouncedUpdate } from \"valyrian.js\";\nimport { hasChanged } from \"valyrian.js/utils\";\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\ntype HookCalls = {\n hooks: Hook[];\n hook_calls: number;\n};\n\nconst componentToHooksWeakMap = new WeakMap<Component | POJOComponent, HookCalls>();\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 const component = current.component as Component | POJOComponent;\n let HookCalls = componentToHooksWeakMap.get(component);\n\n if (!HookCalls) {\n HookCalls = { hooks: [], hook_calls: -1 };\n componentToHooksWeakMap.set(component, HookCalls);\n onUnmount(() => componentToHooksWeakMap.delete(component));\n }\n\n onCleanup(() => ((HookCalls as HookCalls).hook_calls = -1));\n\n let hook = HookCalls.hooks[++HookCalls.hook_calls];\n if (hook) {\n onUpdateHook?.(hook, ...args);\n } else {\n hook = onCreate(...args);\n HookCalls.hooks.push(hook);\n onRemove && onUnmount(() => onRemove(hook));\n }\n\n onCleanupHook && onCleanup(() => onCleanupHook(hook));\n return returnValue ? returnValue(hook) : hook;\n };\n} as unknown as CreateHook;\n\n// Use state hook\nexport const useState = createHook({\n onCreate: (value) => {\n let state = value;\n function get() {\n return state;\n }\n\n function set(newValue: any) {\n if (current.event && !current.event.defaultPrevented) {\n current.event.preventDefault();\n }\n\n const resolvedValue = typeof newValue === \"function\" ? newValue(state) : newValue;\n\n if (hasChanged(state, resolvedValue)) {\n state = resolvedValue;\n debouncedUpdate();\n }\n }\n\n return [get, set];\n }\n});\n\nexport const useEffect = createHook({\n onCreate: (effect: Function, changes: any[]) => {\n const 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 if (Array.isArray(changes) && changes.length === 0) {\n // Si las dependencias son un array vac\u00EDo, no se debe volver a ejecutar.\n return;\n }\n\n // on update if there are changes\n if (Array.isArray(changes) && hasChanged(hook.prev, changes)) {\n hook.prev = changes;\n if (typeof hook.onCleanup === \"function\") {\n hook.onCleanup();\n }\n hook.onCleanup = hook.effect();\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 return { callback, changes };\n },\n onUpdate: (hook, callback, changes) => {\n if (hasChanged(hook.changes, changes)) {\n hook.changes = changes;\n hook.callback = callback;\n }\n },\n returnValue: (hook) => hook.callback\n});\n\nexport const useMemo = createHook({\n onCreate: (callback, changes) => {\n return { callback, changes, value: callback() };\n },\n onUpdate: (hook, callback, changes) => {\n if (hasChanged(hook.changes, changes)) {\n hook.changes = changes;\n hook.value = callback();\n }\n },\n returnValue: (hook) => hook.value\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["createHook"]
7
7
  }