@preact/signals-react 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # @preact/signals-react
2
2
 
3
+ ## 1.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#221](https://github.com/preactjs/signals/pull/221) [`7e8d4c2`](https://github.com/preactjs/signals/commit/7e8d4c25dfdc7fa9434b6c2af4aa0e495b9fae55) Thanks [@marvinhagemeister](https://github.com/marvinhagemeister)! - Fix signal not updated in React production build
8
+
9
+ - Updated dependencies [[`4b73164`](https://github.com/preactjs/signals/commit/4b7316497aee03413f91e9f714cdcf9f553e39d9), [`57fd2e7`](https://github.com/preactjs/signals/commit/57fd2e723528a36cc5d4ebf09ba34178aa84c879), [`49756ae`](https://github.com/preactjs/signals/commit/49756aef28fe12c6ae6b801224bf5ae608ddf562)]:
10
+ - @preact/signals-core@1.2.1
11
+
3
12
  ## 1.1.0
4
13
 
5
14
  ### Minor Changes
package/dist/signals.js CHANGED
@@ -1 +1 @@
1
- var r=require("react"),n=require("@preact/signals-core");function t(r){return r&&"object"==typeof r&&"default"in r?r.default:r}var e,u=/*#__PURE__*/t(r),i=u.createElement;u.createElement=function(r,t){if("string"==typeof r&&t)for(var e in t){var u=t[e];if("children"!==e&&u instanceof n.Signal)t[e]=u.value}return i.apply(this,arguments)};var o=new WeakMap;function f(r){if(e)e();e=r&&r.S()}var c,a=i("a").$$typeof;Object.defineProperties(n.Signal.prototype,{$$typeof:{configurable:!0,value:a},type:{configurable:!0,value:function(r){return r.data.value}},props:{configurable:!0,get:function(){return{data:this}}},ref:{configurable:!0,value:null}});var s=null;Object.defineProperty(r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,"current",{get:function(){return s},set:function(r){if(s=r)c=s}});var v,l=!1,p=function(){return{}};Object.defineProperty(r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,"current",{get:function(){return v},set:function(r){v=r;if(!l)if(c&&r&&!function(r){var n=g.get(r);if(void 0!==n)return n;var t=r.useCallback.length<2||/warnInvalidHookAccess/.test(r.useCallback);g.set(r,t);return t}(r)){l=!0;var t=r.useReducer(p,{})[1];l=!1;var e=o.get(c);if(!e){e=function(r){var t;n.effect(function(){t=this});t.c=r;return t}(t);o.set(c,e)}else e.c=t;f(e)}else f()}});var g=new Map;exports.Signal=n.Signal;exports.batch=n.batch;exports.computed=n.computed;exports.effect=n.effect;exports.signal=n.signal;exports.useComputed=function(t){var e=r.useRef(t);e.current=t;return r.useMemo(function(){return n.computed(function(){return e.current()})},[])};exports.useSignal=function(t){return r.useMemo(function(){return n.signal(t)},[])};exports.useSignalEffect=function(t){var e=r.useRef(t);e.current=t;r.useEffect(function(){return n.effect(function(){return e.current()})},[])};//# sourceMappingURL=signals.js.map
1
+ var r=require("react"),n=require("@preact/signals-core");function t(r){return r&&"object"==typeof r&&"default"in r?r.default:r}var e,u=/*#__PURE__*/t(r),i=u.createElement;u.createElement=function(r,t){if("string"==typeof r&&t)for(var e in t){var u=t[e];if("children"!==e&&u instanceof n.Signal)t[e]=u.value}return i.apply(this,arguments)};var o=new WeakMap;function f(r){if(e)e();e=r&&r.S()}var a=i("a").$$typeof;Object.defineProperties(n.Signal.prototype,{$$typeof:{configurable:!0,value:a},type:{configurable:!0,value:function(r){return r.data.value}},props:{configurable:!0,get:function(){return{data:this}}},ref:{configurable:!0,value:null}});var c,v=!1,s=function(){return{}};Object.defineProperty(r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,"current",{get:function(){return c},set:function(r){c=r;if(!v)if(r&&!function(r){var n=p.get(r);if(void 0!==n)return n;var t=r.useCallback.length<2||/Invalid/.test(r.useCallback);p.set(r,t);return t}(r)){v=!0;var t=r.useReducer(s,{})[1];v=!1;var e=o.get(t);if(!e){e=function(r){var t;n.effect(function(){t=this});t.c=r;return t}(t);o.set(t,e)}else e.c=t;f(e)}else f()}});var p=new Map;exports.Signal=n.Signal;exports.batch=n.batch;exports.computed=n.computed;exports.effect=n.effect;exports.signal=n.signal;exports.useComputed=function(t){var e=r.useRef(t);e.current=t;return r.useMemo(function(){return n.computed(function(){return e.current()})},[])};exports.useSignal=function(t){return r.useMemo(function(){return n.signal(t)},[])};exports.useSignalEffect=function(t){var e=r.useRef(t);e.current=t;r.useEffect(function(){return n.effect(function(){return e.current()})},[])};//# sourceMappingURL=signals.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signals.js","sources":["../src/index.ts"],"sourcesContent":["import {\n\tuseRef,\n\tuseMemo,\n\tuseEffect,\n\t// @ts-ignore-next-line\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as internals,\n} from \"react\";\nimport React from \"react\";\nimport {\n\tsignal,\n\tcomputed,\n\tbatch,\n\teffect,\n\tSignal,\n\ttype ReadonlySignal,\n} from \"@preact/signals-core\";\nimport { Effect, ReactOwner, ReactDispatcher } from \"./internal\";\n\nexport { signal, computed, batch, effect, Signal, type ReadonlySignal };\n\n/**\n * Install a middleware into React.createElement to replace any Signals in props with their value.\n * @todo this likely needs to be duplicated for jsx()...\n */\nconst createElement = React.createElement;\n// @ts-ignore-next-line\nReact.createElement = function (type, props) {\n\tif (typeof type === \"string\" && props) {\n\t\tfor (let i in props) {\n\t\t\tlet v = props[i];\n\t\t\tif (i !== \"children\" && v instanceof Signal) {\n\t\t\t\t// createPropUpdater(props, i, v);\n\t\t\t\tprops[i] = v.value;\n\t\t\t}\n\t\t}\n\t}\n\t// @ts-ignore-next-line\n\treturn createElement.apply(this, arguments);\n};\n\n/*\n// This breaks React's controlled components implementation\nfunction createPropUpdater(props: any, prop: string, signal: Signal) {\n\tlet ref = props.ref;\n\tif (!ref) ref = props.ref = React.createRef();\n\teffect(() => {\n\t\tif (props) props[prop] = signal.value;\n\t\tlet el = ref.current;\n\t\tif (!el) return; // unsubscribe\n\t\t(el as any)[prop] = signal.value;\n\t});\n\tprops = null;\n}\n*/\n\nlet finishUpdate: (() => void) | undefined;\nconst updaterForComponent = new WeakMap<ReactOwner, Effect>();\n\nfunction setCurrentUpdater(updater?: Effect) {\n\t// end tracking for the current update:\n\tif (finishUpdate) finishUpdate();\n\t// start tracking the new update:\n\tfinishUpdate = updater && updater._start();\n}\n\nfunction createUpdater(update: () => void) {\n\tlet updater!: Effect;\n\teffect(function (this: Effect) {\n\t\tupdater = this;\n\t});\n\tupdater._callback = update;\n\treturn updater;\n}\n\n/**\n * A wrapper component that renders a Signal's value directly as a Text node.\n */\nfunction Text({ data }: { data: Signal }) {\n\treturn data.value;\n}\n\n// Decorate Signals so React renders them as <Text> components.\n//@ts-ignore-next-line\nconst $$typeof = createElement(\"a\").$$typeof;\nObject.defineProperties(Signal.prototype, {\n\t$$typeof: { configurable: true, value: $$typeof },\n\ttype: { configurable: true, value: Text },\n\tprops: {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn { data: this };\n\t\t},\n\t},\n\tref: { configurable: true, value: null },\n});\n\n// Track the current owner (roughly equiv to current vnode)\nlet lastOwner: ReactOwner | undefined;\nlet currentOwner: ReactOwner | null = null;\nObject.defineProperty(internals.ReactCurrentOwner, \"current\", {\n\tget() {\n\t\treturn currentOwner;\n\t},\n\tset(owner) {\n\t\tcurrentOwner = owner;\n\t\tif (currentOwner) lastOwner = currentOwner;\n\t},\n});\n\n// Track the current dispatcher (roughly equiv to current component impl)\nlet lock = false;\nconst UPDATE = () => ({});\nlet currentDispatcher: ReactDispatcher;\nObject.defineProperty(internals.ReactCurrentDispatcher, \"current\", {\n\tget() {\n\t\treturn currentDispatcher;\n\t},\n\tset(api) {\n\t\tcurrentDispatcher = api;\n\t\tif (lock) return;\n\t\tif (lastOwner && api && !isInvalidHookAccessor(api)) {\n\t\t\t// prevent re-injecting useReducer when the Dispatcher\n\t\t\t// context changes to run the reducer callback:\n\t\t\tlock = true;\n\t\t\tconst rerender = api.useReducer(UPDATE, {})[1];\n\t\t\tlock = false;\n\n\t\t\tlet updater = updaterForComponent.get(lastOwner);\n\t\t\tif (!updater) {\n\t\t\t\tupdater = createUpdater(rerender);\n\t\t\t\tupdaterForComponent.set(lastOwner, updater);\n\t\t\t} else {\n\t\t\t\tupdater._callback = rerender;\n\t\t\t}\n\t\t\tsetCurrentUpdater(updater);\n\t\t} else {\n\t\t\tsetCurrentUpdater();\n\t\t}\n\t},\n});\n\n// We inject a useReducer into every function component via CurrentDispatcher.\n// This prevents injecting into anything other than a function component render.\nconst invalidHookAccessors = new Map();\nfunction isInvalidHookAccessor(api: ReactDispatcher) {\n\tconst cached = invalidHookAccessors.get(api);\n\tif (cached !== undefined) return cached;\n\t// we only want the real implementation, not the warning ones\n\tconst invalid =\n\t\tapi.useCallback.length < 2 ||\n\t\t/warnInvalidHookAccess/.test(api.useCallback as any);\n\tinvalidHookAccessors.set(api, invalid);\n\treturn invalid;\n}\n\nexport function useSignal<T>(value: T) {\n\treturn useMemo(() => signal<T>(value), []);\n}\n\nexport function useComputed<T>(compute: () => T) {\n\tconst $compute = useRef(compute);\n\t$compute.current = compute;\n\treturn useMemo(() => computed<T>(() => $compute.current()), []);\n}\n\nexport function useSignalEffect(cb: () => void | (() => void)) {\n\tconst callback = useRef(cb);\n\tcallback.current = cb;\n\n\tuseEffect(() => {\n\t\treturn effect(() => {\n\t\t\treturn callback.current();\n\t\t});\n\t}, []);\n}\n"],"names":["React","require","signalsCore","_interopDefaultLegacy","e","default","finishUpdate","React__default","createElement","type","props","i","v","Signal","value","apply","this","arguments","updaterForComponent","setCurrentUpdater","updater","_start","lastOwner","$$typeof","Object","defineProperties","prototype","configurable","_ref","data","get","ref","currentOwner","defineProperty","internals","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","set","owner","currentDispatcher","UPDATE","ReactCurrentDispatcher","api","lock","cached","invalidHookAccessors","undefined","invalid","useCallback","length","test","isInvalidHookAccessor","rerender","useReducer","update","effect","_callback","createUpdater","Map","exports","batch","computed","signal","useComputed","compute","$compute","useRef","current","useMemo","useSignal","useSignalEffect","cb","callback","useEffect"],"mappings":"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"}
1
+ {"version":3,"file":"signals.js","sources":["../src/index.ts"],"sourcesContent":["import {\n\tuseRef,\n\tuseMemo,\n\tuseEffect,\n\t// @ts-ignore-next-line\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as internals,\n} from \"react\";\nimport React from \"react\";\nimport {\n\tsignal,\n\tcomputed,\n\tbatch,\n\teffect,\n\tSignal,\n\ttype ReadonlySignal,\n} from \"@preact/signals-core\";\nimport { Effect, ReactDispatcher } from \"./internal\";\n\nexport { signal, computed, batch, effect, Signal, type ReadonlySignal };\n\n/**\n * Install a middleware into React.createElement to replace any Signals in props with their value.\n * @todo this likely needs to be duplicated for jsx()...\n */\nconst createElement = React.createElement;\n// @ts-ignore-next-line\nReact.createElement = function (type, props) {\n\tif (typeof type === \"string\" && props) {\n\t\tfor (let i in props) {\n\t\t\tlet v = props[i];\n\t\t\tif (i !== \"children\" && v instanceof Signal) {\n\t\t\t\t// createPropUpdater(props, i, v);\n\t\t\t\tprops[i] = v.value;\n\t\t\t}\n\t\t}\n\t}\n\t// @ts-ignore-next-line\n\treturn createElement.apply(this, arguments);\n};\n\n/*\n// This breaks React's controlled components implementation\nfunction createPropUpdater(props: any, prop: string, signal: Signal) {\n\tlet ref = props.ref;\n\tif (!ref) ref = props.ref = React.createRef();\n\teffect(() => {\n\t\tif (props) props[prop] = signal.value;\n\t\tlet el = ref.current;\n\t\tif (!el) return; // unsubscribe\n\t\t(el as any)[prop] = signal.value;\n\t});\n\tprops = null;\n}\n*/\n\nlet finishUpdate: (() => void) | undefined;\nconst updaterForComponent = new WeakMap<() => void, Effect>();\n\nfunction setCurrentUpdater(updater?: Effect) {\n\t// end tracking for the current update:\n\tif (finishUpdate) finishUpdate();\n\t// start tracking the new update:\n\tfinishUpdate = updater && updater._start();\n}\n\nfunction createUpdater(update: () => void) {\n\tlet updater!: Effect;\n\teffect(function (this: Effect) {\n\t\tupdater = this;\n\t});\n\tupdater._callback = update;\n\treturn updater;\n}\n\n/**\n * A wrapper component that renders a Signal's value directly as a Text node.\n */\nfunction Text({ data }: { data: Signal }) {\n\treturn data.value;\n}\n\n// Decorate Signals so React renders them as <Text> components.\n//@ts-ignore-next-line\nconst $$typeof = createElement(\"a\").$$typeof;\nObject.defineProperties(Signal.prototype, {\n\t$$typeof: { configurable: true, value: $$typeof },\n\ttype: { configurable: true, value: Text },\n\tprops: {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn { data: this };\n\t\t},\n\t},\n\tref: { configurable: true, value: null },\n});\n\n// Track the current dispatcher (roughly equiv to current component impl)\nlet lock = false;\nconst UPDATE = () => ({});\nlet currentDispatcher: ReactDispatcher;\nObject.defineProperty(internals.ReactCurrentDispatcher, \"current\", {\n\tget() {\n\t\treturn currentDispatcher;\n\t},\n\tset(api) {\n\t\tcurrentDispatcher = api;\n\t\tif (lock) return;\n\t\tif (api && !isInvalidHookAccessor(api)) {\n\t\t\t// prevent re-injecting useReducer when the Dispatcher\n\t\t\t// context changes to run the reducer callback:\n\t\t\tlock = true;\n\t\t\tconst rerender = api.useReducer(UPDATE, {})[1];\n\t\t\tlock = false;\n\n\t\t\tlet updater = updaterForComponent.get(rerender);\n\t\t\tif (!updater) {\n\t\t\t\tupdater = createUpdater(rerender);\n\t\t\t\tupdaterForComponent.set(rerender, updater);\n\t\t\t} else {\n\t\t\t\tupdater._callback = rerender;\n\t\t\t}\n\t\t\tsetCurrentUpdater(updater);\n\t\t} else {\n\t\t\tsetCurrentUpdater();\n\t\t}\n\t},\n});\n\n// We inject a useReducer into every function component via CurrentDispatcher.\n// This prevents injecting into anything other than a function component render.\nconst invalidHookAccessors = new Map();\nfunction isInvalidHookAccessor(api: ReactDispatcher) {\n\tconst cached = invalidHookAccessors.get(api);\n\tif (cached !== undefined) return cached;\n\t// we only want the real implementation, not the warning ones\n\tconst invalid =\n\t\tapi.useCallback.length < 2 || /Invalid/.test(api.useCallback as any);\n\tinvalidHookAccessors.set(api, invalid);\n\treturn invalid;\n}\n\nexport function useSignal<T>(value: T) {\n\treturn useMemo(() => signal<T>(value), []);\n}\n\nexport function useComputed<T>(compute: () => T) {\n\tconst $compute = useRef(compute);\n\t$compute.current = compute;\n\treturn useMemo(() => computed<T>(() => $compute.current()), []);\n}\n\nexport function useSignalEffect(cb: () => void | (() => void)) {\n\tconst callback = useRef(cb);\n\tcallback.current = cb;\n\n\tuseEffect(() => {\n\t\treturn effect(() => {\n\t\t\treturn callback.current();\n\t\t});\n\t}, []);\n}\n"],"names":["React","require","signalsCore","_interopDefaultLegacy","e","default","React__default","createElement","type","props","i","v","Signal","value","apply","this","arguments","updaterForComponent","WeakMap","updater","finishUpdate","_start","$$typeof","Object","defineProperties","prototype","configurable","_ref","data","get","ref","currentDispatcher","lock","UPDATE","defineProperty","internals","ReactCurrentDispatcher","set","api","cached","invalidHookAccessors","undefined","invalid","useCallback","length","test","isInvalidHookAccessor","rerender","useReducer","update","effect","_callback","createUpdater","setCurrentUpdater","Map","exports","batch","computed","signal","useComputed","compute","useRef","$compute","current","useMemo","useSignal","useSignalEffect","cb","callback","useEffect"],"mappings":"AAyBA,IAAAA,EAAAC,QAAA,SAAAC,EAAAD,QAAA,wBAAA,SAAAE,EAAAC,GAAA,OAAAA,GAAA,iBAAAA,GAAA,YAAAA,EAAAA,EAAAC,QAAAD,CAAA,CAAA,MAAAE,eAAAH,EAAAH,GAAmBO,EAAGP,EAAMO,cAE5BP,EAAMO,cAAgB,SAAUC,EAAMC,GACrC,GAAoB,iBAAhBD,GAA4BC,EAC/B,IAAK,IAALC,KAAAD,EAAqB,CACpB,IAAKE,EAAGF,EAAMC,GACd,GAAU,aAANA,GAAoBC,aAAaC,EAAAA,OAEpCH,EAAMC,GAAKC,EAAEE,KAEd,CAGF,OAAON,EAAcO,MAAMC,KAAMC,UACjC,EAkBD,IAAyBC,EAAG,IAAIC,QAEhC,WAA2BC,GAE1B,GAAIC,EAAcA,IAElBA,EAAeD,GAAWA,EAAQE,GAClC,CAoBD,IAAcC,EAAGf,EAAc,KAAKe,SACpCC,OAAOC,iBAAiBZ,SAAOa,UAAW,CACzCH,SAAU,CAAEI,cAAc,EAAMb,MAAOS,GACvCd,KAAM,CAAEkB,cAAc,EAAMb,MAT7B,SAAAc,GACC,OADeC,EAAAA,KACHf,KACZ,GAQAJ,MAAO,CACNiB,cAAc,EACdG,IAAG,WACF,MAAO,CAAED,KAAMb,KACf,GAEFe,IAAK,CAAEJ,cAAc,EAAMb,MAAO,QAInC,IAEIkB,EAFAC,GAAO,EACLC,EAAS,WAAA,MAAO,CAAP,CAAA,EAEfV,OAAOW,eAAeC,EAAAA,mDAAUC,uBAAwB,UAAW,CAClEP,IADkE,WAEjE,OAAOE,CACP,EACDM,IAJkE,SAI9DC,GACHP,EAAoBO,EACpB,IAAIN,EACJ,GAAIM,IAwBN,SAA+BA,GAC9B,IAAYC,EAAGC,EAAqBX,IAAIS,GACxC,QAAeG,IAAXF,EAAsB,OAAAA,EAE1B,IAAMG,EACLJ,EAAIK,YAAYC,OAAS,GAAK,UAAUC,KAAKP,EAAIK,aAClDH,EAAqBH,IAAIC,EAAKI,GAC9B,OACAA,CAAA,CAhCaI,CAAsBR,GAAM,CAGvCN,GAAO,EACP,IAAMe,EAAWT,EAAIU,WAAWf,EAAQ,CAAA,GAAI,GAC5CD,GAAO,EAEP,IAAIb,EAAUF,EAAoBY,IAAIkB,GACtC,IAAK5B,EAAS,CACbA,EAnDJ,SAAuB8B,GACtB,MACAC,EAAAA,OAAO,WACN/B,EAAUJ,IACV,GACDI,EAAQgC,EAAYF,EACpB,OAAO9B,CACP,CA4CaiC,CAAcL,GACxB9B,EAAoBoB,IAAIU,EAAU5B,EAClC,MACAA,EAAQgC,EAAYJ,EAErBM,EAAkBlC,EAClB,MACAkC,GAED,IAKF,MAA6B,IAA7BC,IA8BCC,QAAA3C,OAAAV,EAAAU,OAAA2C,QAAAC,MAAAtD,EAAAsD,MAAAD,QAAAE,SAAAvD,EAAAuD,SAAAF,QAAAL,OAAAhD,EAAAgD,OAAAK,QAAAG,OAAAxD,EAAAwD,OAAAH,QAAAI,YAfK,SAAyBC,GAC9B,MAAiBC,EAAAA,OAAOD,GACxBE,EAASC,QAAUH,EACnB,OAAOI,EAAOA,QAAC,WAAA,kBAAkB,WAAA,OAAcF,EAACC,SAAf,EAAlB,EAA6C,GAC5D,EAWAR,QAAAU,UAnBK,SAAuBpD,GAC5B,OAAcmD,EAAAA,QAAC,kBAAYN,EAAAA,OAAI7C,EAAhB,EAAwB,GACvC,EAiBA0C,QAAAW,gBATK,SAA0BC,GAC/B,IAAMC,EAAWP,EAAMA,OAACM,GACxBC,EAASL,QAAUI,EAEnBE,EAAAA,UAAU,WACT,OAAanB,EAAAA,OAAC,WACb,OAAekB,EAACL,SAChB,EACD,EAAE,GACH"}
@@ -1 +1 @@
1
- !function(n,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("react"),require("@preact/signals-core")):"function"==typeof define&&define.amd?define(["exports","react","@preact/signals-core"],e):e((n||self).reactSignals={},n.react,n.signalsCore)}(this,function(n,e,r){function t(n){return n&&"object"==typeof n&&"default"in n?n.default:n}var i,u=/*#__PURE__*/t(e),f=u.createElement;u.createElement=function(n,e){if("string"==typeof n&&e)for(var t in e){var i=e[t];if("children"!==t&&i instanceof r.Signal)e[t]=i.value}return f.apply(this,arguments)};var o=new WeakMap;function c(n){if(i)i();i=n&&n.S()}var a,l=f("a").$$typeof;Object.defineProperties(r.Signal.prototype,{$$typeof:{configurable:!0,value:l},type:{configurable:!0,value:function(n){return n.data.value}},props:{configurable:!0,get:function(){return{data:this}}},ref:{configurable:!0,value:null}});var s=null;Object.defineProperty(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,"current",{get:function(){return s},set:function(n){if(s=n)a=s}});var v,p=!1,d=function(){return{}};Object.defineProperty(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,"current",{get:function(){return v},set:function(n){v=n;if(!p)if(a&&n&&!function(n){var e=g.get(n);if(void 0!==e)return e;var r=n.useCallback.length<2||/warnInvalidHookAccess/.test(n.useCallback);g.set(n,r);return r}(n)){p=!0;var e=n.useReducer(d,{})[1];p=!1;var t=o.get(a);if(!t){t=function(n){var e;r.effect(function(){e=this});e.c=n;return e}(e);o.set(a,t)}else t.c=e;c(t)}else c()}});var g=new Map;n.Signal=r.Signal;n.batch=r.batch;n.computed=r.computed;n.effect=r.effect;n.signal=r.signal;n.useComputed=function(n){var t=e.useRef(n);t.current=n;return e.useMemo(function(){return r.computed(function(){return t.current()})},[])};n.useSignal=function(n){return e.useMemo(function(){return r.signal(n)},[])};n.useSignalEffect=function(n){var t=e.useRef(n);t.current=n;e.useEffect(function(){return r.effect(function(){return t.current()})},[])}});//# sourceMappingURL=signals.min.js.map
1
+ !function(n,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("react"),require("@preact/signals-core")):"function"==typeof define&&define.amd?define(["exports","react","@preact/signals-core"],e):e((n||self).reactSignals={},n.react,n.signalsCore)}(this,function(n,e,r){function t(n){return n&&"object"==typeof n&&"default"in n?n.default:n}var i,u=/*#__PURE__*/t(e),f=u.createElement;u.createElement=function(n,e){if("string"==typeof n&&e)for(var t in e){var i=e[t];if("children"!==t&&i instanceof r.Signal)e[t]=i.value}return f.apply(this,arguments)};var o=new WeakMap;function c(n){if(i)i();i=n&&n.S()}var a=f("a").$$typeof;Object.defineProperties(r.Signal.prototype,{$$typeof:{configurable:!0,value:a},type:{configurable:!0,value:function(n){return n.data.value}},props:{configurable:!0,get:function(){return{data:this}}},ref:{configurable:!0,value:null}});var l,s=!1,v=function(){return{}};Object.defineProperty(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,"current",{get:function(){return l},set:function(n){l=n;if(!s)if(n&&!function(n){var e=p.get(n);if(void 0!==e)return e;var r=n.useCallback.length<2||/Invalid/.test(n.useCallback);p.set(n,r);return r}(n)){s=!0;var e=n.useReducer(v,{})[1];s=!1;var t=o.get(e);if(!t){t=function(n){var e;r.effect(function(){e=this});e.c=n;return e}(e);o.set(e,t)}else t.c=e;c(t)}else c()}});var p=new Map;n.Signal=r.Signal;n.batch=r.batch;n.computed=r.computed;n.effect=r.effect;n.signal=r.signal;n.useComputed=function(n){var t=e.useRef(n);t.current=n;return e.useMemo(function(){return r.computed(function(){return t.current()})},[])};n.useSignal=function(n){return e.useMemo(function(){return r.signal(n)},[])};n.useSignalEffect=function(n){var t=e.useRef(n);t.current=n;e.useEffect(function(){return r.effect(function(){return t.current()})},[])}});//# sourceMappingURL=signals.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signals.min.js","sources":["../src/index.ts"],"sourcesContent":["import {\n\tuseRef,\n\tuseMemo,\n\tuseEffect,\n\t// @ts-ignore-next-line\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as internals,\n} from \"react\";\nimport React from \"react\";\nimport {\n\tsignal,\n\tcomputed,\n\tbatch,\n\teffect,\n\tSignal,\n\ttype ReadonlySignal,\n} from \"@preact/signals-core\";\nimport { Effect, ReactOwner, ReactDispatcher } from \"./internal\";\n\nexport { signal, computed, batch, effect, Signal, type ReadonlySignal };\n\n/**\n * Install a middleware into React.createElement to replace any Signals in props with their value.\n * @todo this likely needs to be duplicated for jsx()...\n */\nconst createElement = React.createElement;\n// @ts-ignore-next-line\nReact.createElement = function (type, props) {\n\tif (typeof type === \"string\" && props) {\n\t\tfor (let i in props) {\n\t\t\tlet v = props[i];\n\t\t\tif (i !== \"children\" && v instanceof Signal) {\n\t\t\t\t// createPropUpdater(props, i, v);\n\t\t\t\tprops[i] = v.value;\n\t\t\t}\n\t\t}\n\t}\n\t// @ts-ignore-next-line\n\treturn createElement.apply(this, arguments);\n};\n\n/*\n// This breaks React's controlled components implementation\nfunction createPropUpdater(props: any, prop: string, signal: Signal) {\n\tlet ref = props.ref;\n\tif (!ref) ref = props.ref = React.createRef();\n\teffect(() => {\n\t\tif (props) props[prop] = signal.value;\n\t\tlet el = ref.current;\n\t\tif (!el) return; // unsubscribe\n\t\t(el as any)[prop] = signal.value;\n\t});\n\tprops = null;\n}\n*/\n\nlet finishUpdate: (() => void) | undefined;\nconst updaterForComponent = new WeakMap<ReactOwner, Effect>();\n\nfunction setCurrentUpdater(updater?: Effect) {\n\t// end tracking for the current update:\n\tif (finishUpdate) finishUpdate();\n\t// start tracking the new update:\n\tfinishUpdate = updater && updater._start();\n}\n\nfunction createUpdater(update: () => void) {\n\tlet updater!: Effect;\n\teffect(function (this: Effect) {\n\t\tupdater = this;\n\t});\n\tupdater._callback = update;\n\treturn updater;\n}\n\n/**\n * A wrapper component that renders a Signal's value directly as a Text node.\n */\nfunction Text({ data }: { data: Signal }) {\n\treturn data.value;\n}\n\n// Decorate Signals so React renders them as <Text> components.\n//@ts-ignore-next-line\nconst $$typeof = createElement(\"a\").$$typeof;\nObject.defineProperties(Signal.prototype, {\n\t$$typeof: { configurable: true, value: $$typeof },\n\ttype: { configurable: true, value: Text },\n\tprops: {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn { data: this };\n\t\t},\n\t},\n\tref: { configurable: true, value: null },\n});\n\n// Track the current owner (roughly equiv to current vnode)\nlet lastOwner: ReactOwner | undefined;\nlet currentOwner: ReactOwner | null = null;\nObject.defineProperty(internals.ReactCurrentOwner, \"current\", {\n\tget() {\n\t\treturn currentOwner;\n\t},\n\tset(owner) {\n\t\tcurrentOwner = owner;\n\t\tif (currentOwner) lastOwner = currentOwner;\n\t},\n});\n\n// Track the current dispatcher (roughly equiv to current component impl)\nlet lock = false;\nconst UPDATE = () => ({});\nlet currentDispatcher: ReactDispatcher;\nObject.defineProperty(internals.ReactCurrentDispatcher, \"current\", {\n\tget() {\n\t\treturn currentDispatcher;\n\t},\n\tset(api) {\n\t\tcurrentDispatcher = api;\n\t\tif (lock) return;\n\t\tif (lastOwner && api && !isInvalidHookAccessor(api)) {\n\t\t\t// prevent re-injecting useReducer when the Dispatcher\n\t\t\t// context changes to run the reducer callback:\n\t\t\tlock = true;\n\t\t\tconst rerender = api.useReducer(UPDATE, {})[1];\n\t\t\tlock = false;\n\n\t\t\tlet updater = updaterForComponent.get(lastOwner);\n\t\t\tif (!updater) {\n\t\t\t\tupdater = createUpdater(rerender);\n\t\t\t\tupdaterForComponent.set(lastOwner, updater);\n\t\t\t} else {\n\t\t\t\tupdater._callback = rerender;\n\t\t\t}\n\t\t\tsetCurrentUpdater(updater);\n\t\t} else {\n\t\t\tsetCurrentUpdater();\n\t\t}\n\t},\n});\n\n// We inject a useReducer into every function component via CurrentDispatcher.\n// This prevents injecting into anything other than a function component render.\nconst invalidHookAccessors = new Map();\nfunction isInvalidHookAccessor(api: ReactDispatcher) {\n\tconst cached = invalidHookAccessors.get(api);\n\tif (cached !== undefined) return cached;\n\t// we only want the real implementation, not the warning ones\n\tconst invalid =\n\t\tapi.useCallback.length < 2 ||\n\t\t/warnInvalidHookAccess/.test(api.useCallback as any);\n\tinvalidHookAccessors.set(api, invalid);\n\treturn invalid;\n}\n\nexport function useSignal<T>(value: T) {\n\treturn useMemo(() => signal<T>(value), []);\n}\n\nexport function useComputed<T>(compute: () => T) {\n\tconst $compute = useRef(compute);\n\t$compute.current = compute;\n\treturn useMemo(() => computed<T>(() => $compute.current()), []);\n}\n\nexport function useSignalEffect(cb: () => void | (() => void)) {\n\tconst callback = useRef(cb);\n\tcallback.current = cb;\n\n\tuseEffect(() => {\n\t\treturn effect(() => {\n\t\t\treturn callback.current();\n\t\t});\n\t}, []);\n}\n"],"names":["g","f","exports","module","require","define","amd","globalThis","self","reactSignals","react","signalsCore","this","React","_interopDefaultLegacy","e","default","finishUpdate","React__default","createElement","type","props","i","v","Signal","value","apply","arguments","updaterForComponent","setCurrentUpdater","updater","_start","lastOwner","$$typeof","Object","defineProperties","prototype","configurable","_ref","data","get","ref","currentOwner","defineProperty","internals","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","set","owner","currentDispatcher","UPDATE","ReactCurrentDispatcher","api","lock","cached","invalidHookAccessors","undefined","invalid","useCallback","length","test","isInvalidHookAccessor","rerender","useReducer","update","effect","_callback","createUpdater","Map","batch","computed","signal","useComputed","compute","$compute","useRef","current","useMemo","useSignal","useSignalEffect","cb","callback","useEffect"],"mappings":"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"}
1
+ {"version":3,"file":"signals.min.js","sources":["../src/index.ts"],"sourcesContent":["import {\n\tuseRef,\n\tuseMemo,\n\tuseEffect,\n\t// @ts-ignore-next-line\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as internals,\n} from \"react\";\nimport React from \"react\";\nimport {\n\tsignal,\n\tcomputed,\n\tbatch,\n\teffect,\n\tSignal,\n\ttype ReadonlySignal,\n} from \"@preact/signals-core\";\nimport { Effect, ReactDispatcher } from \"./internal\";\n\nexport { signal, computed, batch, effect, Signal, type ReadonlySignal };\n\n/**\n * Install a middleware into React.createElement to replace any Signals in props with their value.\n * @todo this likely needs to be duplicated for jsx()...\n */\nconst createElement = React.createElement;\n// @ts-ignore-next-line\nReact.createElement = function (type, props) {\n\tif (typeof type === \"string\" && props) {\n\t\tfor (let i in props) {\n\t\t\tlet v = props[i];\n\t\t\tif (i !== \"children\" && v instanceof Signal) {\n\t\t\t\t// createPropUpdater(props, i, v);\n\t\t\t\tprops[i] = v.value;\n\t\t\t}\n\t\t}\n\t}\n\t// @ts-ignore-next-line\n\treturn createElement.apply(this, arguments);\n};\n\n/*\n// This breaks React's controlled components implementation\nfunction createPropUpdater(props: any, prop: string, signal: Signal) {\n\tlet ref = props.ref;\n\tif (!ref) ref = props.ref = React.createRef();\n\teffect(() => {\n\t\tif (props) props[prop] = signal.value;\n\t\tlet el = ref.current;\n\t\tif (!el) return; // unsubscribe\n\t\t(el as any)[prop] = signal.value;\n\t});\n\tprops = null;\n}\n*/\n\nlet finishUpdate: (() => void) | undefined;\nconst updaterForComponent = new WeakMap<() => void, Effect>();\n\nfunction setCurrentUpdater(updater?: Effect) {\n\t// end tracking for the current update:\n\tif (finishUpdate) finishUpdate();\n\t// start tracking the new update:\n\tfinishUpdate = updater && updater._start();\n}\n\nfunction createUpdater(update: () => void) {\n\tlet updater!: Effect;\n\teffect(function (this: Effect) {\n\t\tupdater = this;\n\t});\n\tupdater._callback = update;\n\treturn updater;\n}\n\n/**\n * A wrapper component that renders a Signal's value directly as a Text node.\n */\nfunction Text({ data }: { data: Signal }) {\n\treturn data.value;\n}\n\n// Decorate Signals so React renders them as <Text> components.\n//@ts-ignore-next-line\nconst $$typeof = createElement(\"a\").$$typeof;\nObject.defineProperties(Signal.prototype, {\n\t$$typeof: { configurable: true, value: $$typeof },\n\ttype: { configurable: true, value: Text },\n\tprops: {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn { data: this };\n\t\t},\n\t},\n\tref: { configurable: true, value: null },\n});\n\n// Track the current dispatcher (roughly equiv to current component impl)\nlet lock = false;\nconst UPDATE = () => ({});\nlet currentDispatcher: ReactDispatcher;\nObject.defineProperty(internals.ReactCurrentDispatcher, \"current\", {\n\tget() {\n\t\treturn currentDispatcher;\n\t},\n\tset(api) {\n\t\tcurrentDispatcher = api;\n\t\tif (lock) return;\n\t\tif (api && !isInvalidHookAccessor(api)) {\n\t\t\t// prevent re-injecting useReducer when the Dispatcher\n\t\t\t// context changes to run the reducer callback:\n\t\t\tlock = true;\n\t\t\tconst rerender = api.useReducer(UPDATE, {})[1];\n\t\t\tlock = false;\n\n\t\t\tlet updater = updaterForComponent.get(rerender);\n\t\t\tif (!updater) {\n\t\t\t\tupdater = createUpdater(rerender);\n\t\t\t\tupdaterForComponent.set(rerender, updater);\n\t\t\t} else {\n\t\t\t\tupdater._callback = rerender;\n\t\t\t}\n\t\t\tsetCurrentUpdater(updater);\n\t\t} else {\n\t\t\tsetCurrentUpdater();\n\t\t}\n\t},\n});\n\n// We inject a useReducer into every function component via CurrentDispatcher.\n// This prevents injecting into anything other than a function component render.\nconst invalidHookAccessors = new Map();\nfunction isInvalidHookAccessor(api: ReactDispatcher) {\n\tconst cached = invalidHookAccessors.get(api);\n\tif (cached !== undefined) return cached;\n\t// we only want the real implementation, not the warning ones\n\tconst invalid =\n\t\tapi.useCallback.length < 2 || /Invalid/.test(api.useCallback as any);\n\tinvalidHookAccessors.set(api, invalid);\n\treturn invalid;\n}\n\nexport function useSignal<T>(value: T) {\n\treturn useMemo(() => signal<T>(value), []);\n}\n\nexport function useComputed<T>(compute: () => T) {\n\tconst $compute = useRef(compute);\n\t$compute.current = compute;\n\treturn useMemo(() => computed<T>(() => $compute.current()), []);\n}\n\nexport function useSignalEffect(cb: () => void | (() => void)) {\n\tconst callback = useRef(cb);\n\tcallback.current = cb;\n\n\tuseEffect(() => {\n\t\treturn effect(() => {\n\t\t\treturn callback.current();\n\t\t});\n\t}, []);\n}\n"],"names":["g","f","exports","module","require","define","amd","globalThis","self","reactSignals","react","signalsCore","this","React","_interopDefaultLegacy","e","default","React__default","createElement","type","props","i","v","Signal","value","apply","arguments","updaterForComponent","WeakMap","updater","finishUpdate","_start","$$typeof","Object","defineProperties","prototype","configurable","_ref","data","get","ref","currentDispatcher","lock","UPDATE","defineProperty","internals","ReactCurrentDispatcher","set","api","cached","invalidHookAccessors","undefined","invalid","useCallback","length","test","isInvalidHookAccessor","rerender","useReducer","update","effect","_callback","createUpdater","setCurrentUpdater","Map","batch","computed","signal","useComputed","compute","useRef","$compute","current","useMemo","useSignal","useSignalEffect","cb","callback","useEffect"],"mappings":"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"}
package/dist/signals.mjs CHANGED
@@ -1 +1 @@
1
- import t,{__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as e,useMemo as n,useRef as r,useEffect as o}from"react";import{Signal as c,effect as i,signal as f,computed as u}from"@preact/signals-core";export{Signal,batch,computed,effect,signal}from"@preact/signals-core";const l=t.createElement;t.createElement=function(t,e){if("string"==typeof t&&e)for(let t in e){let n=e[t];if("children"!==t&&n instanceof c)e[t]=n.value}return l.apply(this,arguments)};let s;const a=new WeakMap;function p(t){if(s)s();s=t&&t.S()}const g=l("a").$$typeof;Object.defineProperties(c.prototype,{$$typeof:{configurable:!0,value:g},type:{configurable:!0,value:function({data:t}){return t.value}},props:{configurable:!0,get(){return{data:this}}},ref:{configurable:!0,value:null}});let b,d=null;Object.defineProperty(e.ReactCurrentOwner,"current",{get:()=>d,set(t){d=t;if(d)b=d}});let m=!1;const h=()=>({});let v;Object.defineProperty(e.ReactCurrentDispatcher,"current",{get:()=>v,set(t){v=t;if(!m)if(b&&t&&!function(t){const e=j.get(t);if(void 0!==e)return e;const n=t.useCallback.length<2||/warnInvalidHookAccess/.test(t.useCallback);j.set(t,n);return n}(t)){m=!0;const e=t.useReducer(h,{})[1];m=!1;let n=a.get(b);if(!n){n=function(t){let e;i(function(){e=this});e.c=t;return e}(e);a.set(b,n)}else n.c=e;p(n)}else p()}});const j=new Map;function w(t){return n(()=>f(t),[])}function y(t){const e=r(t);e.current=t;return n(()=>u(()=>e.current()),[])}function O(t){const e=r(t);e.current=t;o(()=>i(()=>e.current()),[])}export{y as useComputed,w as useSignal,O as useSignalEffect};//# sourceMappingURL=signals.mjs.map
1
+ import t,{__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as n,useMemo as e,useRef as o,useEffect as r}from"react";import{Signal as c,effect as i,signal as f,computed as u}from"@preact/signals-core";export{Signal,batch,computed,effect,signal}from"@preact/signals-core";const a=t.createElement;t.createElement=function(t,n){if("string"==typeof t&&n)for(let t in n){let e=n[t];if("children"!==t&&e instanceof c)n[t]=e.value}return a.apply(this,arguments)};let l;const s=new WeakMap;function p(t){if(l)l();l=t&&t.S()}const g=a("a").$$typeof;Object.defineProperties(c.prototype,{$$typeof:{configurable:!0,value:g},type:{configurable:!0,value:function({data:t}){return t.value}},props:{configurable:!0,get(){return{data:this}}},ref:{configurable:!0,value:null}});let b=!1;const d=()=>({});let m;Object.defineProperty(n.ReactCurrentDispatcher,"current",{get:()=>m,set(t){m=t;if(!b)if(t&&!function(t){const n=h.get(t);if(void 0!==n)return n;const e=t.useCallback.length<2||/Invalid/.test(t.useCallback);h.set(t,e);return e}(t)){b=!0;const n=t.useReducer(d,{})[1];b=!1;let e=s.get(n);if(!e){e=function(t){let n;i(function(){n=this});n.c=t;return n}(n);s.set(n,e)}else e.c=n;p(e)}else p()}});const h=new Map;function v(t){return e(()=>f(t),[])}function y(t){const n=o(t);n.current=t;return e(()=>u(()=>n.current()),[])}function j(t){const n=o(t);n.current=t;r(()=>i(()=>n.current()),[])}export{y as useComputed,v as useSignal,j as useSignalEffect};//# sourceMappingURL=signals.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"signals.mjs","sources":["../src/index.ts"],"sourcesContent":["import {\n\tuseRef,\n\tuseMemo,\n\tuseEffect,\n\t// @ts-ignore-next-line\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as internals,\n} from \"react\";\nimport React from \"react\";\nimport {\n\tsignal,\n\tcomputed,\n\tbatch,\n\teffect,\n\tSignal,\n\ttype ReadonlySignal,\n} from \"@preact/signals-core\";\nimport { Effect, ReactOwner, ReactDispatcher } from \"./internal\";\n\nexport { signal, computed, batch, effect, Signal, type ReadonlySignal };\n\n/**\n * Install a middleware into React.createElement to replace any Signals in props with their value.\n * @todo this likely needs to be duplicated for jsx()...\n */\nconst createElement = React.createElement;\n// @ts-ignore-next-line\nReact.createElement = function (type, props) {\n\tif (typeof type === \"string\" && props) {\n\t\tfor (let i in props) {\n\t\t\tlet v = props[i];\n\t\t\tif (i !== \"children\" && v instanceof Signal) {\n\t\t\t\t// createPropUpdater(props, i, v);\n\t\t\t\tprops[i] = v.value;\n\t\t\t}\n\t\t}\n\t}\n\t// @ts-ignore-next-line\n\treturn createElement.apply(this, arguments);\n};\n\n/*\n// This breaks React's controlled components implementation\nfunction createPropUpdater(props: any, prop: string, signal: Signal) {\n\tlet ref = props.ref;\n\tif (!ref) ref = props.ref = React.createRef();\n\teffect(() => {\n\t\tif (props) props[prop] = signal.value;\n\t\tlet el = ref.current;\n\t\tif (!el) return; // unsubscribe\n\t\t(el as any)[prop] = signal.value;\n\t});\n\tprops = null;\n}\n*/\n\nlet finishUpdate: (() => void) | undefined;\nconst updaterForComponent = new WeakMap<ReactOwner, Effect>();\n\nfunction setCurrentUpdater(updater?: Effect) {\n\t// end tracking for the current update:\n\tif (finishUpdate) finishUpdate();\n\t// start tracking the new update:\n\tfinishUpdate = updater && updater._start();\n}\n\nfunction createUpdater(update: () => void) {\n\tlet updater!: Effect;\n\teffect(function (this: Effect) {\n\t\tupdater = this;\n\t});\n\tupdater._callback = update;\n\treturn updater;\n}\n\n/**\n * A wrapper component that renders a Signal's value directly as a Text node.\n */\nfunction Text({ data }: { data: Signal }) {\n\treturn data.value;\n}\n\n// Decorate Signals so React renders them as <Text> components.\n//@ts-ignore-next-line\nconst $$typeof = createElement(\"a\").$$typeof;\nObject.defineProperties(Signal.prototype, {\n\t$$typeof: { configurable: true, value: $$typeof },\n\ttype: { configurable: true, value: Text },\n\tprops: {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn { data: this };\n\t\t},\n\t},\n\tref: { configurable: true, value: null },\n});\n\n// Track the current owner (roughly equiv to current vnode)\nlet lastOwner: ReactOwner | undefined;\nlet currentOwner: ReactOwner | null = null;\nObject.defineProperty(internals.ReactCurrentOwner, \"current\", {\n\tget() {\n\t\treturn currentOwner;\n\t},\n\tset(owner) {\n\t\tcurrentOwner = owner;\n\t\tif (currentOwner) lastOwner = currentOwner;\n\t},\n});\n\n// Track the current dispatcher (roughly equiv to current component impl)\nlet lock = false;\nconst UPDATE = () => ({});\nlet currentDispatcher: ReactDispatcher;\nObject.defineProperty(internals.ReactCurrentDispatcher, \"current\", {\n\tget() {\n\t\treturn currentDispatcher;\n\t},\n\tset(api) {\n\t\tcurrentDispatcher = api;\n\t\tif (lock) return;\n\t\tif (lastOwner && api && !isInvalidHookAccessor(api)) {\n\t\t\t// prevent re-injecting useReducer when the Dispatcher\n\t\t\t// context changes to run the reducer callback:\n\t\t\tlock = true;\n\t\t\tconst rerender = api.useReducer(UPDATE, {})[1];\n\t\t\tlock = false;\n\n\t\t\tlet updater = updaterForComponent.get(lastOwner);\n\t\t\tif (!updater) {\n\t\t\t\tupdater = createUpdater(rerender);\n\t\t\t\tupdaterForComponent.set(lastOwner, updater);\n\t\t\t} else {\n\t\t\t\tupdater._callback = rerender;\n\t\t\t}\n\t\t\tsetCurrentUpdater(updater);\n\t\t} else {\n\t\t\tsetCurrentUpdater();\n\t\t}\n\t},\n});\n\n// We inject a useReducer into every function component via CurrentDispatcher.\n// This prevents injecting into anything other than a function component render.\nconst invalidHookAccessors = new Map();\nfunction isInvalidHookAccessor(api: ReactDispatcher) {\n\tconst cached = invalidHookAccessors.get(api);\n\tif (cached !== undefined) return cached;\n\t// we only want the real implementation, not the warning ones\n\tconst invalid =\n\t\tapi.useCallback.length < 2 ||\n\t\t/warnInvalidHookAccess/.test(api.useCallback as any);\n\tinvalidHookAccessors.set(api, invalid);\n\treturn invalid;\n}\n\nexport function useSignal<T>(value: T) {\n\treturn useMemo(() => signal<T>(value), []);\n}\n\nexport function useComputed<T>(compute: () => T) {\n\tconst $compute = useRef(compute);\n\t$compute.current = compute;\n\treturn useMemo(() => computed<T>(() => $compute.current()), []);\n}\n\nexport function useSignalEffect(cb: () => void | (() => void)) {\n\tconst callback = useRef(cb);\n\tcallback.current = cb;\n\n\tuseEffect(() => {\n\t\treturn effect(() => {\n\t\t\treturn callback.current();\n\t\t});\n\t}, []);\n}\n"],"names":["React","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","useMemo","useRef","useEffect","Signal","effect","signal","computed","batch","createElement","type","props","v","i","value","apply","this","arguments","updaterForComponent","WeakMap","updater","finishUpdate","_start","$$typeof","Object","defineProperties","prototype","configurable","data","get","ref","lastOwner","defineProperty","internals","ReactCurrentOwner","set","owner","currentOwner","lock","UPDATE","currentDispatcher","ReactCurrentDispatcher","api","cached","invalidHookAccessors","undefined","invalid","useCallback","length","test","isInvalidHookAccessor","useReducer","update","_callback","createUpdater","rerender","setCurrentUpdater","Map","useSignal","useComputed","compute","$compute","current","useSignalEffect","cb","callback"],"mappings":"OAyBAA,yDAAAC,aAAAC,YAAAC,eAAAC,MAAA,yBAAAC,YAAAC,YAAAC,cAAAC,MAAA,8BAAAH,OAAAI,MAAAD,SAAAF,OAAAC,WAAA,uBAAA,MAAmBG,EAAGV,EAAMU,cAE5BV,EAAMU,cAAgB,SAAUC,EAAMC,GACrC,GAAoB,iBAAhBD,GAA4BC,EAC/B,IAAK,SAASA,EAAO,CACpB,IAAIC,EAAID,EAAME,GACd,GAAU,aAANA,GAAoBD,aAAaR,EAEpCO,EAAME,GAAKD,EAAEE,KAEd,CAGF,OAAoBL,EAACM,MAAMC,KAAMC,UACjC,EAiBD,MACA,MAAyBC,EAAG,IAAIC,QAEhC,WAA2BC,GAE1B,GAAIC,EAAcA,IAElBA,EAAeD,GAAWA,EAAQE,GAClC,CAoBD,MAAcC,EAAGd,EAAc,KAAKc,SACpCC,OAAOC,iBAAiBrB,EAAOsB,UAAW,CACzCH,SAAU,CAAEI,cAAc,EAAMb,MAAOS,GACvCb,KAAM,CAAEiB,cAAc,EAAMb,MAT7B,UAAcc,KAAEA,IACf,SAAYd,KACZ,GAQAH,MAAO,CACNgB,cAAc,EACdE,MACC,MAAO,CAAED,KAAMZ,KACf,GAEFc,IAAK,CAAEH,cAAc,EAAMb,MAAO,QAInC,IAAIiB,IACkC,KACtCP,OAAOQ,eAAeC,EAAUC,kBAAmB,UAAW,CAC7DL,IAAG,MAGHM,IAAIC,GACHC,EAAeD,EACf,GAAIC,EAAcN,EAAYM,CAC9B,IAIF,IAAQC,GAAG,EACX,MAAMC,EAAS,KAAA,CAAA,GACf,IAAIC,EACJhB,OAAOQ,eAAeC,EAAUQ,uBAAwB,UAAW,CAClEZ,IAAG,IACKW,EAERL,IAAIO,GACHF,EAAoBE,EACpB,IAAIJ,EACJ,GAAIP,GAAaW,IAwBnB,SAA+BA,GAC9B,MAAYC,EAAGC,EAAqBf,IAAIa,GACxC,QAAeG,IAAXF,EAAsB,OAAOA,EAEjC,MAAaG,EACZJ,EAAIK,YAAYC,OAAS,GACzB,wBAAwBC,KAAKP,EAAIK,aAClCH,EAAqBT,IAAIO,EAAKI,GAC9B,OAAOA,CACP,CAjC0BI,CAAsBR,GAAM,CAGpDJ,GAAO,EACP,QAAiBI,EAAIS,WAAWZ,EAAQ,CAAA,GAAI,GAC5CD,GAAO,EAEP,MAAcpB,EAAoBW,IAAIE,GACtC,IAAKX,EAAS,CACbA,EAhEJ,SAAuBgC,GACtB,IAAAhC,EACAf,EAAO,WACNe,EAAUJ,IACV,GACDI,EAAQiC,EAAYD,EACpB,OAAOhC,CACP,CAyDakC,CAAcC,GACxBrC,EAAoBiB,IAAIJ,EAAWX,EACnC,MACAA,EAAQiC,EAAYE,EAErBC,EAAkBpC,EAClB,MACAoC,GAED,IAKF,QAA6B,IAA7BC,aAYMC,EAAuB5C,GAC5B,OAAcb,EAAC,IAAMK,EAAUQ,GAAQ,GACvC,UAEK6C,EAAyBC,GAC9B,MAAcC,EAAG3D,EAAO0D,GACxBC,EAASC,QAAUF,EACnB,OAAc3D,EAAC,IAAMM,EAAY,IAAMsD,EAASC,WAAY,GAC5D,UAEKC,EAA0BC,GAC/B,MAAcC,EAAG/D,EAAO8D,GACxBC,EAASH,QAAUE,EAEnB7D,EAAU,IACFE,EAAO,IACN4D,EAASH,WAEf,GACH,QAAAH,iBAAAD,eAAAK"}
1
+ {"version":3,"file":"signals.mjs","sources":["../src/index.ts"],"sourcesContent":["import {\n\tuseRef,\n\tuseMemo,\n\tuseEffect,\n\t// @ts-ignore-next-line\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as internals,\n} from \"react\";\nimport React from \"react\";\nimport {\n\tsignal,\n\tcomputed,\n\tbatch,\n\teffect,\n\tSignal,\n\ttype ReadonlySignal,\n} from \"@preact/signals-core\";\nimport { Effect, ReactDispatcher } from \"./internal\";\n\nexport { signal, computed, batch, effect, Signal, type ReadonlySignal };\n\n/**\n * Install a middleware into React.createElement to replace any Signals in props with their value.\n * @todo this likely needs to be duplicated for jsx()...\n */\nconst createElement = React.createElement;\n// @ts-ignore-next-line\nReact.createElement = function (type, props) {\n\tif (typeof type === \"string\" && props) {\n\t\tfor (let i in props) {\n\t\t\tlet v = props[i];\n\t\t\tif (i !== \"children\" && v instanceof Signal) {\n\t\t\t\t// createPropUpdater(props, i, v);\n\t\t\t\tprops[i] = v.value;\n\t\t\t}\n\t\t}\n\t}\n\t// @ts-ignore-next-line\n\treturn createElement.apply(this, arguments);\n};\n\n/*\n// This breaks React's controlled components implementation\nfunction createPropUpdater(props: any, prop: string, signal: Signal) {\n\tlet ref = props.ref;\n\tif (!ref) ref = props.ref = React.createRef();\n\teffect(() => {\n\t\tif (props) props[prop] = signal.value;\n\t\tlet el = ref.current;\n\t\tif (!el) return; // unsubscribe\n\t\t(el as any)[prop] = signal.value;\n\t});\n\tprops = null;\n}\n*/\n\nlet finishUpdate: (() => void) | undefined;\nconst updaterForComponent = new WeakMap<() => void, Effect>();\n\nfunction setCurrentUpdater(updater?: Effect) {\n\t// end tracking for the current update:\n\tif (finishUpdate) finishUpdate();\n\t// start tracking the new update:\n\tfinishUpdate = updater && updater._start();\n}\n\nfunction createUpdater(update: () => void) {\n\tlet updater!: Effect;\n\teffect(function (this: Effect) {\n\t\tupdater = this;\n\t});\n\tupdater._callback = update;\n\treturn updater;\n}\n\n/**\n * A wrapper component that renders a Signal's value directly as a Text node.\n */\nfunction Text({ data }: { data: Signal }) {\n\treturn data.value;\n}\n\n// Decorate Signals so React renders them as <Text> components.\n//@ts-ignore-next-line\nconst $$typeof = createElement(\"a\").$$typeof;\nObject.defineProperties(Signal.prototype, {\n\t$$typeof: { configurable: true, value: $$typeof },\n\ttype: { configurable: true, value: Text },\n\tprops: {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn { data: this };\n\t\t},\n\t},\n\tref: { configurable: true, value: null },\n});\n\n// Track the current dispatcher (roughly equiv to current component impl)\nlet lock = false;\nconst UPDATE = () => ({});\nlet currentDispatcher: ReactDispatcher;\nObject.defineProperty(internals.ReactCurrentDispatcher, \"current\", {\n\tget() {\n\t\treturn currentDispatcher;\n\t},\n\tset(api) {\n\t\tcurrentDispatcher = api;\n\t\tif (lock) return;\n\t\tif (api && !isInvalidHookAccessor(api)) {\n\t\t\t// prevent re-injecting useReducer when the Dispatcher\n\t\t\t// context changes to run the reducer callback:\n\t\t\tlock = true;\n\t\t\tconst rerender = api.useReducer(UPDATE, {})[1];\n\t\t\tlock = false;\n\n\t\t\tlet updater = updaterForComponent.get(rerender);\n\t\t\tif (!updater) {\n\t\t\t\tupdater = createUpdater(rerender);\n\t\t\t\tupdaterForComponent.set(rerender, updater);\n\t\t\t} else {\n\t\t\t\tupdater._callback = rerender;\n\t\t\t}\n\t\t\tsetCurrentUpdater(updater);\n\t\t} else {\n\t\t\tsetCurrentUpdater();\n\t\t}\n\t},\n});\n\n// We inject a useReducer into every function component via CurrentDispatcher.\n// This prevents injecting into anything other than a function component render.\nconst invalidHookAccessors = new Map();\nfunction isInvalidHookAccessor(api: ReactDispatcher) {\n\tconst cached = invalidHookAccessors.get(api);\n\tif (cached !== undefined) return cached;\n\t// we only want the real implementation, not the warning ones\n\tconst invalid =\n\t\tapi.useCallback.length < 2 || /Invalid/.test(api.useCallback as any);\n\tinvalidHookAccessors.set(api, invalid);\n\treturn invalid;\n}\n\nexport function useSignal<T>(value: T) {\n\treturn useMemo(() => signal<T>(value), []);\n}\n\nexport function useComputed<T>(compute: () => T) {\n\tconst $compute = useRef(compute);\n\t$compute.current = compute;\n\treturn useMemo(() => computed<T>(() => $compute.current()), []);\n}\n\nexport function useSignalEffect(cb: () => void | (() => void)) {\n\tconst callback = useRef(cb);\n\tcallback.current = cb;\n\n\tuseEffect(() => {\n\t\treturn effect(() => {\n\t\t\treturn callback.current();\n\t\t});\n\t}, []);\n}\n"],"names":["createElement","React","type","props","i","v","Signal","value","apply","this","arguments","finishUpdate","updaterForComponent","WeakMap","setCurrentUpdater","updater","_start","$$typeof","Object","defineProperties","prototype","configurable","data","get","ref","UPDATE","currentDispatcher","defineProperty","internals","ReactCurrentDispatcher","set","api","lock","cached","invalidHookAccessors","undefined","invalid","useCallback","length","test","isInvalidHookAccessor","useReducer","rerender","update","effect","_callback","createUpdater","Map","useSignal","signal","useComputed","compute","$compute","useRef","current","useMemo","computed","useSignalEffect","cb","callback","useEffect"],"mappings":"gRAyBA,MAAmBA,EAAGC,EAAMD,cAE5BC,EAAMD,cAAgB,SAAUE,EAAMC,GACrC,GAAoB,iBAATD,GAAqBC,EAC/B,IAAK,IAAIC,KAAKD,EAAO,CACpB,IAAIE,EAAIF,EAAMC,GACd,GAAU,aAANA,GAAoBC,aAAxBC,EAECH,EAAMC,GAAKC,EAAEE,KAEd,CAGF,OAAoBP,EAACQ,MAAMC,KAAMC,UACjC,EAiBD,IAAAC,EACA,MAAMC,EAAsB,IAA5BC,QAEA,SAAAC,EAA2BC,GAE1B,GAAIJ,EAAcA,IAElBA,EAAeI,GAAWA,EAAQC,GAClC,CAoBD,MAAMC,EAAWjB,EAAc,KAAKiB,SACpCC,OAAOC,iBAAiBb,EAAOc,UAAW,CACzCH,SAAU,CAAEI,cAAc,EAAMd,MAAOU,GACvCf,KAAM,CAAEmB,cAAc,EAAMd,MAT7B,UAAce,KAAEA,IACf,OAAOA,EAAKf,KACZ,GAQAJ,MAAO,CACNkB,cAAc,EACdE,MACC,MAAO,CAAED,KAAMb,KACf,GAEFe,IAAK,CAAEH,cAAc,EAAMd,MAAO,QAInC,OAAW,EACX,MAAYkB,EAAG,KAAO,CAAP,GACf,IAAAC,EACAR,OAAOS,eAAeC,EAAUC,uBAAwB,UAAW,CAClEN,IAAG,IAEFG,EACDI,IAAIC,GACHL,EAAoBK,EACpB,IAAIC,EACJ,GAAID,IAwBN,SAA+BA,GAC9B,MAAYE,EAAGC,EAAqBX,IAAIQ,GACxC,QAAeI,IAAXF,EAAsB,OAAAA,EAE1B,MAAMG,EACLL,EAAIM,YAAYC,OAAS,GAAK,UAAUC,KAAKR,EAAIM,aAClDH,EAAqBJ,IAAIC,EAAKK,GAC9B,OACAA,CAAA,CAhCaI,CAAsBT,GAAM,CAGvCC,GAAO,EACP,QAAiBD,EAAIU,WAAWhB,EAAQ,CAAvB,GAA2B,GAC5CO,GAAO,EAEP,IAAWjB,EAAGH,EAAoBW,IAAImB,GACtC,IAAK3B,EAAS,CACbA,EAnDJ,SAAuB4B,GACtB,IAAA5B,EACA6B,EAAO,WACN7B,EAAUN,IACV,GACDM,EAAQ8B,EAAYF,EACpB,OACA5B,CAAA,CA4Ca+B,CAAcJ,GACxB9B,EAAoBkB,IAAIY,EAAU3B,EAClC,MACAA,EAAQ8B,EAAYH,EAErB5B,EAAkBC,EAClB,MACAD,GAED,IAKF,MAAMoB,EAAuB,IAA7Ba,IAWM,SAAAC,EAAuBzC,GAC5B,SAAe,IAAM0C,EAAU1C,GAAQ,GACvC,CAEe2C,SAAAA,EAAeC,GAC9B,MAAcC,EAAGC,EAAOF,GACxBC,EAASE,QAAUH,EACnB,OAAcI,EAAC,IAAMC,EAAY,IAAMJ,EAASE,WAAY,GAC5D,CAEK,SAAAG,EAA0BC,GAC/B,MAAMC,EAAWN,EAAOK,GACxBC,EAASL,QAAUI,EAEnBE,EAAU,IACIhB,EAAC,IACEe,EAACL,WAEf,GACH,QAAAJ,iBAAAF,eAAAS"}
@@ -1 +1 @@
1
- import n,{__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as r,useMemo as t,useRef as e,useEffect as u}from"react";import{Signal as i,effect as f,signal as o,computed as c}from"@preact/signals-core";export{Signal,batch,computed,effect,signal}from"@preact/signals-core";var a,v=n.createElement;n.createElement=function(n,r){if("string"==typeof n&&r)for(var t in r){var e=r[t];if("children"!==t&&e instanceof i)r[t]=e.value}return v.apply(this,arguments)};var l=new WeakMap;function s(n){if(a)a();a=n&&n.S()}var p,g=v("a").$$typeof;Object.defineProperties(i.prototype,{$$typeof:{configurable:!0,value:g},type:{configurable:!0,value:function(n){return n.data.value}},props:{configurable:!0,get:function(){return{data:this}}},ref:{configurable:!0,value:null}});var b=null;Object.defineProperty(r.ReactCurrentOwner,"current",{get:function(){return b},set:function(n){if(b=n)p=b}});var m,d=!1,h=function(){return{}};Object.defineProperty(r.ReactCurrentDispatcher,"current",{get:function(){return m},set:function(n){m=n;if(!d)if(p&&n&&!function(n){var r=j.get(n);if(void 0!==r)return r;var t=n.useCallback.length<2||/warnInvalidHookAccess/.test(n.useCallback);j.set(n,t);return t}(n)){d=!0;var r=n.useReducer(h,{})[1];d=!1;var t=l.get(p);if(!t){t=function(n){var r;f(function(){r=this});r.c=n;return r}(r);l.set(p,t)}else t.c=r;s(t)}else s()}});var j=new Map;function w(n){return t(function(){return o(n)},[])}function y(n){var r=e(n);r.current=n;return t(function(){return c(function(){return r.current()})},[])}function O(n){var r=e(n);r.current=n;u(function(){return f(function(){return r.current()})},[])}export{y as useComputed,w as useSignal,O as useSignalEffect};//# sourceMappingURL=signals.module.js.map
1
+ import n,{__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as r,useMemo as t,useRef as e,useEffect as i}from"react";import{Signal as u,effect as f,signal as o,computed as a}from"@preact/signals-core";export{Signal,batch,computed,effect,signal}from"@preact/signals-core";var c,v=n.createElement;n.createElement=function(n,r){if("string"==typeof n&&r)for(var t in r){var e=r[t];if("children"!==t&&e instanceof u)r[t]=e.value}return v.apply(this,arguments)};var l=new WeakMap;function p(n){if(c)c();c=n&&n.S()}var s=v("a").$$typeof;Object.defineProperties(u.prototype,{$$typeof:{configurable:!0,value:s},type:{configurable:!0,value:function(n){return n.data.value}},props:{configurable:!0,get:function(){return{data:this}}},ref:{configurable:!0,value:null}});var g,b=!1,m=function(){return{}};Object.defineProperty(r.ReactCurrentDispatcher,"current",{get:function(){return g},set:function(n){g=n;if(!b)if(n&&!function(n){var r=d.get(n);if(void 0!==r)return r;var t=n.useCallback.length<2||/Invalid/.test(n.useCallback);d.set(n,t);return t}(n)){b=!0;var r=n.useReducer(m,{})[1];b=!1;var t=l.get(r);if(!t){t=function(n){var r;f(function(){r=this});r.c=n;return r}(r);l.set(r,t)}else t.c=r;p(t)}else p()}});var d=new Map;function h(n){return t(function(){return o(n)},[])}function y(n){var r=e(n);r.current=n;return t(function(){return a(function(){return r.current()})},[])}function j(n){var r=e(n);r.current=n;i(function(){return f(function(){return r.current()})},[])}export{y as useComputed,h as useSignal,j as useSignalEffect};//# sourceMappingURL=signals.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signals.module.js","sources":["../src/index.ts"],"sourcesContent":["import {\n\tuseRef,\n\tuseMemo,\n\tuseEffect,\n\t// @ts-ignore-next-line\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as internals,\n} from \"react\";\nimport React from \"react\";\nimport {\n\tsignal,\n\tcomputed,\n\tbatch,\n\teffect,\n\tSignal,\n\ttype ReadonlySignal,\n} from \"@preact/signals-core\";\nimport { Effect, ReactOwner, ReactDispatcher } from \"./internal\";\n\nexport { signal, computed, batch, effect, Signal, type ReadonlySignal };\n\n/**\n * Install a middleware into React.createElement to replace any Signals in props with their value.\n * @todo this likely needs to be duplicated for jsx()...\n */\nconst createElement = React.createElement;\n// @ts-ignore-next-line\nReact.createElement = function (type, props) {\n\tif (typeof type === \"string\" && props) {\n\t\tfor (let i in props) {\n\t\t\tlet v = props[i];\n\t\t\tif (i !== \"children\" && v instanceof Signal) {\n\t\t\t\t// createPropUpdater(props, i, v);\n\t\t\t\tprops[i] = v.value;\n\t\t\t}\n\t\t}\n\t}\n\t// @ts-ignore-next-line\n\treturn createElement.apply(this, arguments);\n};\n\n/*\n// This breaks React's controlled components implementation\nfunction createPropUpdater(props: any, prop: string, signal: Signal) {\n\tlet ref = props.ref;\n\tif (!ref) ref = props.ref = React.createRef();\n\teffect(() => {\n\t\tif (props) props[prop] = signal.value;\n\t\tlet el = ref.current;\n\t\tif (!el) return; // unsubscribe\n\t\t(el as any)[prop] = signal.value;\n\t});\n\tprops = null;\n}\n*/\n\nlet finishUpdate: (() => void) | undefined;\nconst updaterForComponent = new WeakMap<ReactOwner, Effect>();\n\nfunction setCurrentUpdater(updater?: Effect) {\n\t// end tracking for the current update:\n\tif (finishUpdate) finishUpdate();\n\t// start tracking the new update:\n\tfinishUpdate = updater && updater._start();\n}\n\nfunction createUpdater(update: () => void) {\n\tlet updater!: Effect;\n\teffect(function (this: Effect) {\n\t\tupdater = this;\n\t});\n\tupdater._callback = update;\n\treturn updater;\n}\n\n/**\n * A wrapper component that renders a Signal's value directly as a Text node.\n */\nfunction Text({ data }: { data: Signal }) {\n\treturn data.value;\n}\n\n// Decorate Signals so React renders them as <Text> components.\n//@ts-ignore-next-line\nconst $$typeof = createElement(\"a\").$$typeof;\nObject.defineProperties(Signal.prototype, {\n\t$$typeof: { configurable: true, value: $$typeof },\n\ttype: { configurable: true, value: Text },\n\tprops: {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn { data: this };\n\t\t},\n\t},\n\tref: { configurable: true, value: null },\n});\n\n// Track the current owner (roughly equiv to current vnode)\nlet lastOwner: ReactOwner | undefined;\nlet currentOwner: ReactOwner | null = null;\nObject.defineProperty(internals.ReactCurrentOwner, \"current\", {\n\tget() {\n\t\treturn currentOwner;\n\t},\n\tset(owner) {\n\t\tcurrentOwner = owner;\n\t\tif (currentOwner) lastOwner = currentOwner;\n\t},\n});\n\n// Track the current dispatcher (roughly equiv to current component impl)\nlet lock = false;\nconst UPDATE = () => ({});\nlet currentDispatcher: ReactDispatcher;\nObject.defineProperty(internals.ReactCurrentDispatcher, \"current\", {\n\tget() {\n\t\treturn currentDispatcher;\n\t},\n\tset(api) {\n\t\tcurrentDispatcher = api;\n\t\tif (lock) return;\n\t\tif (lastOwner && api && !isInvalidHookAccessor(api)) {\n\t\t\t// prevent re-injecting useReducer when the Dispatcher\n\t\t\t// context changes to run the reducer callback:\n\t\t\tlock = true;\n\t\t\tconst rerender = api.useReducer(UPDATE, {})[1];\n\t\t\tlock = false;\n\n\t\t\tlet updater = updaterForComponent.get(lastOwner);\n\t\t\tif (!updater) {\n\t\t\t\tupdater = createUpdater(rerender);\n\t\t\t\tupdaterForComponent.set(lastOwner, updater);\n\t\t\t} else {\n\t\t\t\tupdater._callback = rerender;\n\t\t\t}\n\t\t\tsetCurrentUpdater(updater);\n\t\t} else {\n\t\t\tsetCurrentUpdater();\n\t\t}\n\t},\n});\n\n// We inject a useReducer into every function component via CurrentDispatcher.\n// This prevents injecting into anything other than a function component render.\nconst invalidHookAccessors = new Map();\nfunction isInvalidHookAccessor(api: ReactDispatcher) {\n\tconst cached = invalidHookAccessors.get(api);\n\tif (cached !== undefined) return cached;\n\t// we only want the real implementation, not the warning ones\n\tconst invalid =\n\t\tapi.useCallback.length < 2 ||\n\t\t/warnInvalidHookAccess/.test(api.useCallback as any);\n\tinvalidHookAccessors.set(api, invalid);\n\treturn invalid;\n}\n\nexport function useSignal<T>(value: T) {\n\treturn useMemo(() => signal<T>(value), []);\n}\n\nexport function useComputed<T>(compute: () => T) {\n\tconst $compute = useRef(compute);\n\t$compute.current = compute;\n\treturn useMemo(() => computed<T>(() => $compute.current()), []);\n}\n\nexport function useSignalEffect(cb: () => void | (() => void)) {\n\tconst callback = useRef(cb);\n\tcallback.current = cb;\n\n\tuseEffect(() => {\n\t\treturn effect(() => {\n\t\t\treturn callback.current();\n\t\t});\n\t}, []);\n}\n"],"names":["React","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","useMemo","useRef","useEffect","Signal","effect","signal","computed","batch","finishUpdate","createElement","type","props","i","v","value","apply","this","arguments","updaterForComponent","setCurrentUpdater","updater","_start","lastOwner","$$typeof","Object","defineProperties","prototype","configurable","_ref","data","get","ref","currentOwner","defineProperty","internals","ReactCurrentOwner","set","owner","currentDispatcher","UPDATE","ReactCurrentDispatcher","api","lock","cached","invalidHookAccessors","undefined","invalid","useCallback","length","test","isInvalidHookAccessor","rerender","useReducer","update","_callback","createUpdater","Map","useSignal","useComputed","compute","$compute","current","useSignalEffect","cb","callback"],"mappings":"OAyBAA,yDAAAC,aAAAC,YAAAC,eAAAC,MAAA,yBAAAC,YAAAC,YAAAC,cAAAC,MAAA,8BAAAH,OAAAI,MAAAD,SAAAF,OAAAC,WAAA,uBAAA,IA+BIG,EA/BeC,EAAGX,EAAMW,cAE5BX,EAAMW,cAAgB,SAAUC,EAAMC,GACrC,GAAoB,oBAAYA,EAC/B,IAAK,IAAIC,KAATD,EAAqB,CACpB,IAAKE,EAAGF,EAAMC,GACd,GAAU,aAANA,GAAoBC,aAAxBV,EAECQ,EAAMC,GAAKC,EAAEC,KAEd,CAGF,OAAOL,EAAcM,MAAMC,KAAMC,UACjC,EAkBD,IAAMC,EAAsB,YAE5B,SAAAC,EAA2BC,GAE1B,GAAIZ,EAAcA,IAElBA,EAAeY,GAAWA,EAAQC,GAClC,CAoBD,IAcAC,EAdcC,EAAGd,EAAc,KAAKc,SACpCC,OAAOC,iBAAiBtB,EAAOuB,UAAW,CACzCH,SAAU,CAAEI,cAAc,EAAMb,MAAOS,GACvCb,KAAM,CAAEiB,cAAc,EAAMb,MAT7B,SAAwCc,GACvC,OADuCA,EAAxBC,KACHf,KACZ,GAQAH,MAAO,CACNgB,cAAc,EACdG,IAFM,WAGL,MAAO,CAAED,KAAMb,KACf,GAEFe,IAAK,CAAEJ,cAAc,EAAMb,MAAO,QAKnC,IAAIkB,EAAkC,KACtCR,OAAOS,eAAeC,EAAUC,kBAAmB,UAAW,CAC7DL,IAAG,WACF,OAAOE,CACP,EACDI,IAAIC,SAAAA,GAEH,GADAL,EAAeK,EACGf,EAAYU,CAC9B,IAIF,IAEAM,KAFW,EACCC,EAAG,iBAAO,CAAP,CAAA,EAEff,OAAOS,eAAeC,EAAUM,uBAAwB,UAAW,CAClEV,eACC,OACAQ,CAAA,EACDF,IAAIK,SAAAA,GACHH,EAAoBG,EACpB,IAAIC,EACJ,GAAIpB,GAAamB,IAwBnB,SAA+BA,GAC9B,IAAYE,EAAGC,EAAqBd,IAAIW,GACxC,QAAeI,IAAXF,EAAsB,OAAOA,EAEjC,IAAaG,EACZL,EAAIM,YAAYC,OAAS,GACzB,wBAAwBC,KAAKR,EAAIM,aAClCH,EAAqBR,IAAIK,EAAKK,GAC9B,OAAOA,CACP,CAjC0BI,CAAsBT,GAAM,CAGpDC,GAAO,EACP,IAAcS,EAAGV,EAAIW,WAAWb,EAAQ,CAAvB,GAA2B,GAC5CG,GAAO,EAEP,IAAWtB,EAAGF,EAAoBY,IAAIR,GACtC,IAAKF,EAAS,CACbA,EAhEJ,SAAuBiC,GACtB,IAAAjC,EACAhB,EAAO,WACNgB,EAAUJ,IACV,GACDI,EAAQkC,EAAYD,EACpB,OAAOjC,CACP,CAyDamC,CAAcJ,GACxBjC,EAAoBkB,IAAId,EAAWF,EACnC,MACAA,EAAQkC,EAAYH,EAErBhC,EAAkBC,EAClB,MACAD,GAED,IAKF,IAA0ByB,EAAG,IAA7BY,IAYM,SAAAC,EAAuB3C,GAC5B,OAAOd,EAAQ,WAAA,OAAYK,EAAIS,EAAhB,EAAwB,GACvC,CAEe4C,SAAAA,EAAeC,GAC9B,IAAcC,EAAG3D,EAAO0D,GACxBC,EAASC,QAAUF,EACnB,OAAc3D,EAAC,WAAMM,OAAAA,EAAY,WAAA,OAAcsD,EAACC,SAAf,EAAlB,EAA6C,GAC5D,UAEKC,EAA0BC,GAC/B,IAAcC,EAAG/D,EAAO8D,GACxBC,EAASH,QAAUE,EAEnB7D,EAAU,WACT,OAAOE,EAAO,WACb,OAAO4D,EAASH,SAChB,EACD,EAAE,GACH,QAAAH,iBAAAD,eAAAK"}
1
+ {"version":3,"file":"signals.module.js","sources":["../src/index.ts"],"sourcesContent":["import {\n\tuseRef,\n\tuseMemo,\n\tuseEffect,\n\t// @ts-ignore-next-line\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as internals,\n} from \"react\";\nimport React from \"react\";\nimport {\n\tsignal,\n\tcomputed,\n\tbatch,\n\teffect,\n\tSignal,\n\ttype ReadonlySignal,\n} from \"@preact/signals-core\";\nimport { Effect, ReactDispatcher } from \"./internal\";\n\nexport { signal, computed, batch, effect, Signal, type ReadonlySignal };\n\n/**\n * Install a middleware into React.createElement to replace any Signals in props with their value.\n * @todo this likely needs to be duplicated for jsx()...\n */\nconst createElement = React.createElement;\n// @ts-ignore-next-line\nReact.createElement = function (type, props) {\n\tif (typeof type === \"string\" && props) {\n\t\tfor (let i in props) {\n\t\t\tlet v = props[i];\n\t\t\tif (i !== \"children\" && v instanceof Signal) {\n\t\t\t\t// createPropUpdater(props, i, v);\n\t\t\t\tprops[i] = v.value;\n\t\t\t}\n\t\t}\n\t}\n\t// @ts-ignore-next-line\n\treturn createElement.apply(this, arguments);\n};\n\n/*\n// This breaks React's controlled components implementation\nfunction createPropUpdater(props: any, prop: string, signal: Signal) {\n\tlet ref = props.ref;\n\tif (!ref) ref = props.ref = React.createRef();\n\teffect(() => {\n\t\tif (props) props[prop] = signal.value;\n\t\tlet el = ref.current;\n\t\tif (!el) return; // unsubscribe\n\t\t(el as any)[prop] = signal.value;\n\t});\n\tprops = null;\n}\n*/\n\nlet finishUpdate: (() => void) | undefined;\nconst updaterForComponent = new WeakMap<() => void, Effect>();\n\nfunction setCurrentUpdater(updater?: Effect) {\n\t// end tracking for the current update:\n\tif (finishUpdate) finishUpdate();\n\t// start tracking the new update:\n\tfinishUpdate = updater && updater._start();\n}\n\nfunction createUpdater(update: () => void) {\n\tlet updater!: Effect;\n\teffect(function (this: Effect) {\n\t\tupdater = this;\n\t});\n\tupdater._callback = update;\n\treturn updater;\n}\n\n/**\n * A wrapper component that renders a Signal's value directly as a Text node.\n */\nfunction Text({ data }: { data: Signal }) {\n\treturn data.value;\n}\n\n// Decorate Signals so React renders them as <Text> components.\n//@ts-ignore-next-line\nconst $$typeof = createElement(\"a\").$$typeof;\nObject.defineProperties(Signal.prototype, {\n\t$$typeof: { configurable: true, value: $$typeof },\n\ttype: { configurable: true, value: Text },\n\tprops: {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn { data: this };\n\t\t},\n\t},\n\tref: { configurable: true, value: null },\n});\n\n// Track the current dispatcher (roughly equiv to current component impl)\nlet lock = false;\nconst UPDATE = () => ({});\nlet currentDispatcher: ReactDispatcher;\nObject.defineProperty(internals.ReactCurrentDispatcher, \"current\", {\n\tget() {\n\t\treturn currentDispatcher;\n\t},\n\tset(api) {\n\t\tcurrentDispatcher = api;\n\t\tif (lock) return;\n\t\tif (api && !isInvalidHookAccessor(api)) {\n\t\t\t// prevent re-injecting useReducer when the Dispatcher\n\t\t\t// context changes to run the reducer callback:\n\t\t\tlock = true;\n\t\t\tconst rerender = api.useReducer(UPDATE, {})[1];\n\t\t\tlock = false;\n\n\t\t\tlet updater = updaterForComponent.get(rerender);\n\t\t\tif (!updater) {\n\t\t\t\tupdater = createUpdater(rerender);\n\t\t\t\tupdaterForComponent.set(rerender, updater);\n\t\t\t} else {\n\t\t\t\tupdater._callback = rerender;\n\t\t\t}\n\t\t\tsetCurrentUpdater(updater);\n\t\t} else {\n\t\t\tsetCurrentUpdater();\n\t\t}\n\t},\n});\n\n// We inject a useReducer into every function component via CurrentDispatcher.\n// This prevents injecting into anything other than a function component render.\nconst invalidHookAccessors = new Map();\nfunction isInvalidHookAccessor(api: ReactDispatcher) {\n\tconst cached = invalidHookAccessors.get(api);\n\tif (cached !== undefined) return cached;\n\t// we only want the real implementation, not the warning ones\n\tconst invalid =\n\t\tapi.useCallback.length < 2 || /Invalid/.test(api.useCallback as any);\n\tinvalidHookAccessors.set(api, invalid);\n\treturn invalid;\n}\n\nexport function useSignal<T>(value: T) {\n\treturn useMemo(() => signal<T>(value), []);\n}\n\nexport function useComputed<T>(compute: () => T) {\n\tconst $compute = useRef(compute);\n\t$compute.current = compute;\n\treturn useMemo(() => computed<T>(() => $compute.current()), []);\n}\n\nexport function useSignalEffect(cb: () => void | (() => void)) {\n\tconst callback = useRef(cb);\n\tcallback.current = cb;\n\n\tuseEffect(() => {\n\t\treturn effect(() => {\n\t\t\treturn callback.current();\n\t\t});\n\t}, []);\n}\n"],"names":["React","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","useMemo","useRef","useEffect","Signal","effect","signal","computed","batch","createElement","type","props","i","v","value","apply","this","arguments","updaterForComponent","WeakMap","updater","finishUpdate","_start","$$typeof","Object","defineProperties","prototype","configurable","_ref","data","get","ref","currentDispatcher","lock","UPDATE","defineProperty","internals","ReactCurrentDispatcher","set","api","cached","invalidHookAccessors","undefined","invalid","useCallback","length","test","isInvalidHookAccessor","rerender","useReducer","update","_callback","createUpdater","setCurrentUpdater","Map","useSignal","useComputed","compute","$compute","current","useSignalEffect","cb","callback"],"mappings":"OAyBAA,yDAAAC,aAAAC,YAAAC,eAAAC,MAAA,yBAAAC,YAAAC,YAAAC,cAAAC,MAAA,8BAAAH,OAAAI,MAAAD,SAAAF,OAAAC,WAAA,uBAAA,MAAmBG,EAAGV,EAAMU,cAE5BV,EAAMU,cAAgB,SAAUC,EAAMC,GACrC,GAAoB,iBAAhBD,GAA4BC,EAC/B,IAAK,IAALC,KAAAD,EAAqB,CACpB,IAAKE,EAAGF,EAAMC,GACd,GAAU,aAANA,GAAoBC,aAAaT,EAEpCO,EAAMC,GAAKC,EAAEC,KAEd,CAGF,OAAOL,EAAcM,MAAMC,KAAMC,UACjC,EAkBD,IAAyBC,EAAG,IAAIC,QAEhC,WAA2BC,GAE1B,GAAIC,EAAcA,IAElBA,EAAeD,GAAWA,EAAQE,GAClC,CAoBD,IAAcC,EAAGd,EAAc,KAAKc,SACpCC,OAAOC,iBAAiBrB,EAAOsB,UAAW,CACzCH,SAAU,CAAEI,cAAc,EAAMb,MAAOS,GACvCb,KAAM,CAAEiB,cAAc,EAAMb,MAT7B,SAAAc,GACC,OADeC,EAAAA,KACHf,KACZ,GAQAH,MAAO,CACNgB,cAAc,EACdG,IAAG,WACF,MAAO,CAAED,KAAMb,KACf,GAEFe,IAAK,CAAEJ,cAAc,EAAMb,MAAO,QAInC,IAEIkB,EAFAC,GAAO,EACLC,EAAS,WAAA,MAAO,CAAP,CAAA,EAEfV,OAAOW,eAAeC,EAAUC,uBAAwB,UAAW,CAClEP,IADkE,WAEjE,OAAOE,CACP,EACDM,IAJkE,SAI9DC,GACHP,EAAoBO,EACpB,IAAIN,EACJ,GAAIM,IAwBN,SAA+BA,GAC9B,IAAYC,EAAGC,EAAqBX,IAAIS,GACxC,QAAeG,IAAXF,EAAsB,OAAAA,EAE1B,IAAMG,EACLJ,EAAIK,YAAYC,OAAS,GAAK,UAAUC,KAAKP,EAAIK,aAClDH,EAAqBH,IAAIC,EAAKI,GAC9B,OACAA,CAAA,CAhCaI,CAAsBR,GAAM,CAGvCN,GAAO,EACP,IAAMe,EAAWT,EAAIU,WAAWf,EAAQ,CAAA,GAAI,GAC5CD,GAAO,EAEP,IAAIb,EAAUF,EAAoBY,IAAIkB,GACtC,IAAK5B,EAAS,CACbA,EAnDJ,SAAuB8B,GACtB,MACA7C,EAAO,WACNe,EAAUJ,IACV,GACDI,EAAQ+B,EAAYD,EACpB,OAAO9B,CACP,CA4CagC,CAAcJ,GACxB9B,EAAoBoB,IAAIU,EAAU5B,EAClC,MACAA,EAAQ+B,EAAYH,EAErBK,EAAkBjC,EAClB,MACAiC,GAED,IAKF,MAA6B,IAA7BC,IAWM,SAAAC,EAAuBzC,GAC5B,OAAcb,EAAC,kBAAYK,EAAIQ,EAAhB,EAAwB,GACvC,CAEK,SAAA0C,EAAyBC,GAC9B,MAAiBvD,EAAOuD,GACxBC,EAASC,QAAUF,EACnB,OAAOxD,EAAQ,WAAA,SAAkB,WAAA,OAAcyD,EAACC,SAAf,EAAlB,EAA6C,GAC5D,CAEK,SAAAC,EAA0BC,GAC/B,IAAMC,EAAW5D,EAAO2D,GACxBC,EAASH,QAAUE,EAEnB1D,EAAU,WACT,OAAaE,EAAC,WACb,OAAeyD,EAACH,SAChB,EACD,EAAE,GACH,QAAAH,iBAAAD,eAAAK"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@preact/signals-react",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "license": "MIT",
5
5
  "description": "",
6
6
  "keywords": [],
@@ -35,7 +35,7 @@
35
35
  },
36
36
  "mangle": "../../mangle.json",
37
37
  "dependencies": {
38
- "@preact/signals-core": "^1.2.0"
38
+ "@preact/signals-core": "^1.2.1"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "react": "17.x || 18.x"
package/src/index.ts CHANGED
@@ -15,7 +15,7 @@ import {
15
15
  Signal,
16
16
  type ReadonlySignal,
17
17
  } from "@preact/signals-core";
18
- import { Effect, ReactOwner, ReactDispatcher } from "./internal";
18
+ import { Effect, ReactDispatcher } from "./internal";
19
19
 
20
20
  export { signal, computed, batch, effect, Signal, type ReadonlySignal };
21
21
 
@@ -55,7 +55,7 @@ function createPropUpdater(props: any, prop: string, signal: Signal) {
55
55
  */
56
56
 
57
57
  let finishUpdate: (() => void) | undefined;
58
- const updaterForComponent = new WeakMap<ReactOwner, Effect>();
58
+ const updaterForComponent = new WeakMap<() => void, Effect>();
59
59
 
60
60
  function setCurrentUpdater(updater?: Effect) {
61
61
  // end tracking for the current update:
@@ -95,19 +95,6 @@ Object.defineProperties(Signal.prototype, {
95
95
  ref: { configurable: true, value: null },
96
96
  });
97
97
 
98
- // Track the current owner (roughly equiv to current vnode)
99
- let lastOwner: ReactOwner | undefined;
100
- let currentOwner: ReactOwner | null = null;
101
- Object.defineProperty(internals.ReactCurrentOwner, "current", {
102
- get() {
103
- return currentOwner;
104
- },
105
- set(owner) {
106
- currentOwner = owner;
107
- if (currentOwner) lastOwner = currentOwner;
108
- },
109
- });
110
-
111
98
  // Track the current dispatcher (roughly equiv to current component impl)
112
99
  let lock = false;
113
100
  const UPDATE = () => ({});
@@ -119,17 +106,17 @@ Object.defineProperty(internals.ReactCurrentDispatcher, "current", {
119
106
  set(api) {
120
107
  currentDispatcher = api;
121
108
  if (lock) return;
122
- if (lastOwner && api && !isInvalidHookAccessor(api)) {
109
+ if (api && !isInvalidHookAccessor(api)) {
123
110
  // prevent re-injecting useReducer when the Dispatcher
124
111
  // context changes to run the reducer callback:
125
112
  lock = true;
126
113
  const rerender = api.useReducer(UPDATE, {})[1];
127
114
  lock = false;
128
115
 
129
- let updater = updaterForComponent.get(lastOwner);
116
+ let updater = updaterForComponent.get(rerender);
130
117
  if (!updater) {
131
118
  updater = createUpdater(rerender);
132
- updaterForComponent.set(lastOwner, updater);
119
+ updaterForComponent.set(rerender, updater);
133
120
  } else {
134
121
  updater._callback = rerender;
135
122
  }
@@ -148,8 +135,7 @@ function isInvalidHookAccessor(api: ReactDispatcher) {
148
135
  if (cached !== undefined) return cached;
149
136
  // we only want the real implementation, not the warning ones
150
137
  const invalid =
151
- api.useCallback.length < 2 ||
152
- /warnInvalidHookAccess/.test(api.useCallback as any);
138
+ api.useCallback.length < 2 || /Invalid/.test(api.useCallback as any);
153
139
  invalidHookAccessors.set(api, invalid);
154
140
  return invalid;
155
141
  }
package/src/internal.d.ts CHANGED
@@ -7,10 +7,6 @@ export interface Effect {
7
7
  _dispose(): void;
8
8
  }
9
9
 
10
- export interface ReactOwner {
11
- _: never;
12
- }
13
-
14
10
  export interface ReactDispatcher {
15
11
  useCallback(): unknown;
16
12
  }