shared-reducer 4.0.1 → 4.0.2

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/backend/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";class t{t=crypto.randomUUID().substring(0,8);i=0;get(){const t=this.i;return this.i++,`${this.t}-${t}`}}class e extends EventTarget{o=[];h=!1;push(t){return new Promise(((e,r)=>{this.o.push({task:t,resolve:e,reject:r}),this.h||this.u()}))}async u(){for(this.h=!0;this.o.length>0;){const{task:t,resolve:e,reject:r}=this.o.shift();let s=null,i=!1;try{s=await t(),i=!0}catch(t){r(t)}i&&e(s)}this.h=!1,this.dispatchEvent(new CustomEvent("drain"))}}class r{l;p=new Map;constructor(t=()=>new e){this.l=t}push(t,e){let r=this.p.get(t);return r||(r=this.l(),r.addEventListener("drain",(()=>{this.p.delete(t)})),this.p.set(t,r)),r.push(e)}}class s{v;_=new Map;constructor(t){this.v=t}async add(t,e){let r=this._.get(t);r||(r=this.v(t),this._.set(t,r)),await r.add(e)}async remove(t,e){const r=this._.get(t);if(r){await r.remove(e)||this._.delete(t)}}async broadcast(t,e){const r=this._.get(t);r&&await r.broadcast(e)}}class i{m=new Set;add(t){this.m.add(t)}remove(t){return this.m.delete(t),this.m.size>0}broadcast(t){this.m.forEach((e=>e(t)))}}const n={validateWrite(){}};class a{O;j;m;C;S;constructor(t,e,r,s,i){this.O=t,this.j=e,this.m=r,this.C=s,this.S=i}static for(e){let n,o,c,h;return{withReducer(t){return n=t,this},withSubscribers(t){return o=t,this},withTaskQueues(t){return c=t,this},withIdProvider(t){return h=t,this},build(){if(!n)throw new Error("must set broadcaster context");return new a(e,n,o||new s((()=>new i)),c||new r,h||new t)}}}async subscribe(t,e,r=n){let s=await this.O.read(t);if(null==s)return null;const i=this.S.get(),a=({message:t,source:r,meta:s})=>{r===i?e(t,s):t.change&&e(t,void 0)};return this.m.add(t,a),{getInitialData:()=>{if(null===s)throw new Error("Already fetched initialData");const t=s;return s=null,t},send:(e,s)=>this.I(t,e,r,i,s),close:async()=>{await this.m.remove(t,a)}}}update(t,e,r=n){return this.I(t,e,r,null,void 0)}async J(t,e,r,s,i){try{const s=await this.O.read(t);if(!s)throw new Error("Deleted");r.validateWriteSpec?.(e);const i=this.j.update(s,e),n=this.O.validate(i);r.validateWrite(n,s),await this.O.write(t,n,s)}catch(e){return void this.m.broadcast(t,{message:{error:e instanceof Error?e.message:"Internal error"},source:s,meta:i})}this.m.broadcast(t,{message:{change:e},source:s,meta:i})}async I(t,e,r,s,i){return this.C.push(t,(()=>this.J(t,e,r,s,i)))}}function o(t){if("object"!=typeof(e=t)||null===e||Array.isArray(e))throw new Error("Must specify change and optional id");var e;const{id:r,change:s}=t;if(void 0===r)return{change:s};if("number"!=typeof r)throw new Error("if specified, id must be a number");return{change:s,id:r}}function c(t){return{error:t instanceof Error?t.message:"Internal error"}}const h=t=>t;class u extends Error{}const l="Cannot modify data",d={validateWriteSpec(){throw new u(l)},validateWrite(){throw new u(l)}};exports.AsyncTaskQueue=e,exports.Broadcaster=a,exports.CollectionStorageModel=class{N;P;validate;$;k;constructor(t,e,r,s=h,i=h){this.N=t,this.P=e,this.validate=r,this.$=s,this.k=i}async read(t){try{return await this.N.get(this.P,t)}catch(t){throw this.$(t)}}async write(t,e,r){const s={};Object.entries(e).forEach((([t,e])=>{const i=t;e!==(Object.prototype.hasOwnProperty.call(r,i)?r[i]:void 0)&&(s[i]?Object.defineProperty(s,i,{value:e,configurable:!0,enumerable:!0,writable:!0}):s[i]=e)}));try{await this.N.update(this.P,t,s)}catch(t){throw this.k(t)}}},exports.InMemoryModel=class{read=this.get;validate;q=new Map;constructor(t=t=>t){this.validate=t}set(t,e){this.q.set(t,e)}get(t){return this.q.get(t)}delete(t){this.q.delete(t)}write(t,e,r){if(r!==this.q.get(t))throw new Error("Unexpected previous value");this.q.set(t,e)}},exports.InMemoryTopic=i,exports.PING="P",exports.PONG="p",exports.PermissionError=u,exports.ReadOnly=d,exports.ReadWrite=n,exports.ReadWriteStruct=class{M;constructor(t=[]){this.M=t}validateWrite(t,e){Object.keys(e).forEach((e=>{const r=e;if(!Object.prototype.hasOwnProperty.call(t,r)&&this.M.includes(r))throw new u(`Cannot remove field ${r}`)})),Object.keys(t).forEach((r=>{const s=r;if(this.M.includes(s)){if(!Object.prototype.hasOwnProperty.call(e,s))throw new u(`Cannot add field ${s}`);if(t[s]!==e[s])throw new u(`Cannot edit field ${s}`)}}))}},exports.TaskQueueMap=r,exports.TrackingTopicMap=s,exports.UniqueIdProvider=t,exports.websocketHandler=t=>(e,r)=>async(s,i)=>{const n=await i.accept(),a=(t,e)=>{const r=void 0!==e?{id:e,...t}:t;n.send(JSON.stringify(r))};let h;try{const n=await e(s,i),o=await r(s,i);h=await t.subscribe(n,a,o)}catch(t){return void n.send(JSON.stringify(c(t)))}h?(n.on("close",h.close),n.on("message",((t,e)=>{try{if(e)return;const r=String(t);if("P"===r)return void n.send("p");const s=function(t){return o(JSON.parse(t))}(r);i.beginTransaction(),h.send(s.change,s.id).finally((()=>i.endTransaction()))}catch(t){n.send(JSON.stringify(c(t)))}})),n.send(JSON.stringify({init:h.getInitialData()}))):i.sendError(404)};
1
+ "use strict";var t=require("node:crypto");class e{t=t.randomUUID().substring(0,8);i=0;get(){const t=this.i;return this.i++,`${this.t}-${t}`}}class r extends EventTarget{o=[];h=!1;push(t){return new Promise(((e,r)=>{this.o.push({task:t,resolve:e,reject:r}),this.h||this.u()}))}async u(){for(this.h=!0;this.o.length>0;){const{task:t,resolve:e,reject:r}=this.o.shift();let s=null,i=!1;try{s=await t(),i=!0}catch(t){r(t)}i&&e(s)}this.h=!1,this.dispatchEvent(new CustomEvent("drain"))}}class s{l;p=new Map;constructor(t=()=>new r){this.l=t}push(t,e){let r=this.p.get(t);return r||(r=this.l(),r.addEventListener("drain",(()=>{this.p.delete(t)})),this.p.set(t,r)),r.push(e)}}class i{v;_=new Map;constructor(t){this.v=t}async add(t,e){let r=this._.get(t);r||(r=this.v(t),this._.set(t,r)),await r.add(e)}async remove(t,e){const r=this._.get(t);if(r){await r.remove(e)||this._.delete(t)}}async broadcast(t,e){const r=this._.get(t);r&&await r.broadcast(e)}}class n{m=new Set;add(t){this.m.add(t)}remove(t){return this.m.delete(t),this.m.size>0}broadcast(t){this.m.forEach((e=>e(t)))}}const a={validateWrite(){}};class o{O;j;m;C;S;constructor(t,e,r,s,i){this.O=t,this.j=e,this.m=r,this.C=s,this.S=i}static for(t){let r,a,c,h;return{withReducer(t){return r=t,this},withSubscribers(t){return a=t,this},withTaskQueues(t){return c=t,this},withIdProvider(t){return h=t,this},build(){if(!r)throw new Error("must set broadcaster context");return new o(t,r,a||new i((()=>new n)),c||new s,h||new e)}}}async subscribe(t,e,r=a){let s=await this.O.read(t);if(null==s)return null;const i=this.S.get(),n=({message:t,source:r,meta:s})=>{r===i?e(t,s):t.change&&e(t,void 0)};return this.m.add(t,n),{getInitialData:()=>{if(null===s)throw new Error("Already fetched initialData");const t=s;return s=null,t},send:(e,s)=>this.I(t,e,r,i,s),close:async()=>{await this.m.remove(t,n)}}}update(t,e,r=a){return this.I(t,e,r,null,void 0)}async q(t,e,r,s,i){try{const s=await this.O.read(t);if(!s)throw new Error("Deleted");r.validateWriteSpec?.(e);const i=this.j.update(s,e),n=this.O.validate(i);r.validateWrite(n,s),await this.O.write(t,n,s)}catch(e){return void this.m.broadcast(t,{message:{error:e instanceof Error?e.message:"Internal error"},source:s,meta:i})}this.m.broadcast(t,{message:{change:e},source:s,meta:i})}async I(t,e,r,s,i){return this.C.push(t,(()=>this.q(t,e,r,s,i)))}}function c(t){if("object"!=typeof(e=t)||null===e||Array.isArray(e))throw new Error("Must specify change and optional id");var e;const{id:r,change:s}=t;if(void 0===r)return{change:s};if("number"!=typeof r)throw new Error("if specified, id must be a number");return{change:s,id:r}}function h(t){return{error:t instanceof Error?t.message:"Internal error"}}const u=t=>t;class l extends Error{}const d="Cannot modify data",w={validateWriteSpec(){throw new l(d)},validateWrite(){throw new l(d)}};exports.AsyncTaskQueue=r,exports.Broadcaster=o,exports.CollectionStorageModel=class{J;N;validate;P;$;constructor(t,e,r,s=u,i=u){this.J=t,this.N=e,this.validate=r,this.P=s,this.$=i}async read(t){try{return await this.J.get(this.N,t)}catch(t){throw this.P(t)}}async write(t,e,r){const s={};Object.entries(e).forEach((([t,e])=>{const i=t;e!==(Object.prototype.hasOwnProperty.call(r,i)?r[i]:void 0)&&(s[i]?Object.defineProperty(s,i,{value:e,configurable:!0,enumerable:!0,writable:!0}):s[i]=e)}));try{await this.J.update(this.N,t,s)}catch(t){throw this.$(t)}}},exports.InMemoryModel=class{read=this.get;validate;k=new Map;constructor(t=t=>t){this.validate=t}set(t,e){this.k.set(t,e)}get(t){return this.k.get(t)}delete(t){this.k.delete(t)}write(t,e,r){if(r!==this.k.get(t))throw new Error("Unexpected previous value");this.k.set(t,e)}},exports.InMemoryTopic=n,exports.PING="P",exports.PONG="p",exports.PermissionError=l,exports.ReadOnly=w,exports.ReadWrite=a,exports.ReadWriteStruct=class{M;constructor(t=[]){this.M=t}validateWrite(t,e){Object.keys(e).forEach((e=>{const r=e;if(!Object.prototype.hasOwnProperty.call(t,r)&&this.M.includes(r))throw new l(`Cannot remove field ${r}`)})),Object.keys(t).forEach((r=>{const s=r;if(this.M.includes(s)){if(!Object.prototype.hasOwnProperty.call(e,s))throw new l(`Cannot add field ${s}`);if(t[s]!==e[s])throw new l(`Cannot edit field ${s}`)}}))}},exports.TaskQueueMap=s,exports.TrackingTopicMap=i,exports.UniqueIdProvider=e,exports.websocketHandler=t=>(e,r)=>async(s,i)=>{const n=await i.accept(),a=(t,e)=>{const r=void 0!==e?{id:e,...t}:t;n.send(JSON.stringify(r))};let o;try{const n=await e(s,i),c=await r(s,i);o=await t.subscribe(n,a,c)}catch(t){return void n.send(JSON.stringify(h(t)))}o?(n.on("close",o.close),n.on("message",((t,e)=>{try{if(e)return;const r=String(t);if("P"===r)return void n.send("p");const s=function(t){return c(JSON.parse(t))}(r);i.beginTransaction(),o.send(s.change,s.id).finally((()=>i.endTransaction()))}catch(t){n.send(JSON.stringify(h(t)))}})),n.send(JSON.stringify({init:o.getInitialData()}))):i.sendError(404)};
package/backend/index.mjs CHANGED
@@ -1 +1 @@
1
- class t{t=crypto.randomUUID().substring(0,8);i=0;get(){const t=this.i;return this.i++,`${this.t}-${t}`}}class e extends EventTarget{o=[];h=!1;push(t){return new Promise(((e,r)=>{this.o.push({task:t,resolve:e,reject:r}),this.h||this.u()}))}async u(){for(this.h=!0;this.o.length>0;){const{task:t,resolve:e,reject:r}=this.o.shift();let s=null,i=!1;try{s=await t(),i=!0}catch(t){r(t)}i&&e(s)}this.h=!1,this.dispatchEvent(new CustomEvent("drain"))}}class r{l;v=new Map;constructor(t=()=>new e){this.l=t}push(t,e){let r=this.v.get(t);return r||(r=this.l(),r.addEventListener("drain",(()=>{this.v.delete(t)})),this.v.set(t,r)),r.push(e)}}class s{p;_=new Map;constructor(t){this.p=t}async add(t,e){let r=this._.get(t);r||(r=this.p(t),this._.set(t,r)),await r.add(e)}async remove(t,e){const r=this._.get(t);if(r){await r.remove(e)||this._.delete(t)}}async broadcast(t,e){const r=this._.get(t);r&&await r.broadcast(e)}}class i{m=new Set;add(t){this.m.add(t)}remove(t){return this.m.delete(t),this.m.size>0}broadcast(t){this.m.forEach((e=>e(t)))}}const n={validateWrite(){}};class a{O;j;m;C;S;constructor(t,e,r,s,i){this.O=t,this.j=e,this.m=r,this.C=s,this.S=i}static for(e){let n,o,c,h;return{withReducer(t){return n=t,this},withSubscribers(t){return o=t,this},withTaskQueues(t){return c=t,this},withIdProvider(t){return h=t,this},build(){if(!n)throw new Error("must set broadcaster context");return new a(e,n,o||new s((()=>new i)),c||new r,h||new t)}}}async subscribe(t,e,r=n){let s=await this.O.read(t);if(null==s)return null;const i=this.S.get(),a=({message:t,source:r,meta:s})=>{r===i?e(t,s):t.change&&e(t,void 0)};return this.m.add(t,a),{getInitialData:()=>{if(null===s)throw new Error("Already fetched initialData");const t=s;return s=null,t},send:(e,s)=>this.I(t,e,r,i,s),close:async()=>{await this.m.remove(t,a)}}}update(t,e,r=n){return this.I(t,e,r,null,void 0)}async J(t,e,r,s,i){try{const s=await this.O.read(t);if(!s)throw new Error("Deleted");r.validateWriteSpec?.(e);const i=this.j.update(s,e),n=this.O.validate(i);r.validateWrite(n,s),await this.O.write(t,n,s)}catch(e){return void this.m.broadcast(t,{message:{error:e instanceof Error?e.message:"Internal error"},source:s,meta:i})}this.m.broadcast(t,{message:{change:e},source:s,meta:i})}async I(t,e,r,s,i){return this.C.push(t,(()=>this.J(t,e,r,s,i)))}}function o(t){if("object"!=typeof(e=t)||null===e||Array.isArray(e))throw new Error("Must specify change and optional id");var e;const{id:r,change:s}=t;if(void 0===r)return{change:s};if("number"!=typeof r)throw new Error("if specified, id must be a number");return{change:s,id:r}}const c="P",h="p",u=t=>(e,r)=>async(s,i)=>{const n=await i.accept(),a=(t,e)=>{const r=void 0!==e?{id:e,...t}:t;n.send(JSON.stringify(r))};let c;try{const n=await e(s,i),o=await r(s,i);c=await t.subscribe(n,a,o)}catch(t){return void n.send(JSON.stringify(l(t)))}c?(n.on("close",c.close),n.on("message",((t,e)=>{try{if(e)return;const r=String(t);if("P"===r)return void n.send("p");const s=function(t){return o(JSON.parse(t))}(r);i.beginTransaction(),c.send(s.change,s.id).finally((()=>i.endTransaction()))}catch(t){n.send(JSON.stringify(l(t)))}})),n.send(JSON.stringify({init:c.getInitialData()}))):i.sendError(404)};function l(t){return{error:t instanceof Error?t.message:"Internal error"}}const d=t=>t;class w{N;P;validate;$;k;constructor(t,e,r,s=d,i=d){this.N=t,this.P=e,this.validate=r,this.$=s,this.k=i}async read(t){try{return await this.N.get(this.P,t)}catch(t){throw this.$(t)}}async write(t,e,r){const s={};Object.entries(e).forEach((([t,e])=>{const i=t;e!==(Object.prototype.hasOwnProperty.call(r,i)?r[i]:void 0)&&(s[i]?Object.defineProperty(s,i,{value:e,configurable:!0,enumerable:!0,writable:!0}):s[i]=e)}));try{await this.N.update(this.P,t,s)}catch(t){throw this.k(t)}}}class f extends Error{}class y{read=this.get;validate;q=new Map;constructor(t=t=>t){this.validate=t}set(t,e){this.q.set(t,e)}get(t){return this.q.get(t)}delete(t){this.q.delete(t)}write(t,e,r){if(r!==this.q.get(t))throw new Error("Unexpected previous value");this.q.set(t,e)}}const v="Cannot modify data",b={validateWriteSpec(){throw new f(v)},validateWrite(){throw new f(v)}};class p{M;constructor(t=[]){this.M=t}validateWrite(t,e){Object.keys(e).forEach((e=>{const r=e;if(!Object.prototype.hasOwnProperty.call(t,r)&&this.M.includes(r))throw new f(`Cannot remove field ${r}`)})),Object.keys(t).forEach((r=>{const s=r;if(this.M.includes(s)){if(!Object.prototype.hasOwnProperty.call(e,s))throw new f(`Cannot add field ${s}`);if(t[s]!==e[s])throw new f(`Cannot edit field ${s}`)}}))}}export{e as AsyncTaskQueue,a as Broadcaster,w as CollectionStorageModel,y as InMemoryModel,i as InMemoryTopic,c as PING,h as PONG,f as PermissionError,b as ReadOnly,n as ReadWrite,p as ReadWriteStruct,r as TaskQueueMap,s as TrackingTopicMap,t as UniqueIdProvider,u as websocketHandler};
1
+ import{randomUUID as t}from"node:crypto";class e{t=t().substring(0,8);i=0;get(){const t=this.i;return this.i++,`${this.t}-${t}`}}class r extends EventTarget{o=[];h=!1;push(t){return new Promise(((e,r)=>{this.o.push({task:t,resolve:e,reject:r}),this.h||this.u()}))}async u(){for(this.h=!0;this.o.length>0;){const{task:t,resolve:e,reject:r}=this.o.shift();let s=null,i=!1;try{s=await t(),i=!0}catch(t){r(t)}i&&e(s)}this.h=!1,this.dispatchEvent(new CustomEvent("drain"))}}class s{l;v=new Map;constructor(t=()=>new r){this.l=t}push(t,e){let r=this.v.get(t);return r||(r=this.l(),r.addEventListener("drain",(()=>{this.v.delete(t)})),this.v.set(t,r)),r.push(e)}}class i{m;p=new Map;constructor(t){this.m=t}async add(t,e){let r=this.p.get(t);r||(r=this.m(t),this.p.set(t,r)),await r.add(e)}async remove(t,e){const r=this.p.get(t);if(r){await r.remove(e)||this.p.delete(t)}}async broadcast(t,e){const r=this.p.get(t);r&&await r.broadcast(e)}}class n{_=new Set;add(t){this._.add(t)}remove(t){return this._.delete(t),this._.size>0}broadcast(t){this._.forEach((e=>e(t)))}}const a={validateWrite(){}};class o{O;j;_;C;S;constructor(t,e,r,s,i){this.O=t,this.j=e,this._=r,this.C=s,this.S=i}static for(t){let r,a,c,h;return{withReducer(t){return r=t,this},withSubscribers(t){return a=t,this},withTaskQueues(t){return c=t,this},withIdProvider(t){return h=t,this},build(){if(!r)throw new Error("must set broadcaster context");return new o(t,r,a||new i((()=>new n)),c||new s,h||new e)}}}async subscribe(t,e,r=a){let s=await this.O.read(t);if(null==s)return null;const i=this.S.get(),n=({message:t,source:r,meta:s})=>{r===i?e(t,s):t.change&&e(t,void 0)};return this._.add(t,n),{getInitialData:()=>{if(null===s)throw new Error("Already fetched initialData");const t=s;return s=null,t},send:(e,s)=>this.I(t,e,r,i,s),close:async()=>{await this._.remove(t,n)}}}update(t,e,r=a){return this.I(t,e,r,null,void 0)}async J(t,e,r,s,i){try{const s=await this.O.read(t);if(!s)throw new Error("Deleted");r.validateWriteSpec?.(e);const i=this.j.update(s,e),n=this.O.validate(i);r.validateWrite(n,s),await this.O.write(t,n,s)}catch(e){return void this._.broadcast(t,{message:{error:e instanceof Error?e.message:"Internal error"},source:s,meta:i})}this._.broadcast(t,{message:{change:e},source:s,meta:i})}async I(t,e,r,s,i){return this.C.push(t,(()=>this.J(t,e,r,s,i)))}}function c(t){if("object"!=typeof(e=t)||null===e||Array.isArray(e))throw new Error("Must specify change and optional id");var e;const{id:r,change:s}=t;if(void 0===r)return{change:s};if("number"!=typeof r)throw new Error("if specified, id must be a number");return{change:s,id:r}}const h="P",u="p",l=t=>(e,r)=>async(s,i)=>{const n=await i.accept(),a=(t,e)=>{const r=void 0!==e?{id:e,...t}:t;n.send(JSON.stringify(r))};let o;try{const n=await e(s,i),c=await r(s,i);o=await t.subscribe(n,a,c)}catch(t){return void n.send(JSON.stringify(d(t)))}o?(n.on("close",o.close),n.on("message",((t,e)=>{try{if(e)return;const r=String(t);if("P"===r)return void n.send("p");const s=function(t){return c(JSON.parse(t))}(r);i.beginTransaction(),o.send(s.change,s.id).finally((()=>i.endTransaction()))}catch(t){n.send(JSON.stringify(d(t)))}})),n.send(JSON.stringify({init:o.getInitialData()}))):i.sendError(404)};function d(t){return{error:t instanceof Error?t.message:"Internal error"}}const w=t=>t;class f{N;P;validate;$;k;constructor(t,e,r,s=w,i=w){this.N=t,this.P=e,this.validate=r,this.$=s,this.k=i}async read(t){try{return await this.N.get(this.P,t)}catch(t){throw this.$(t)}}async write(t,e,r){const s={};Object.entries(e).forEach((([t,e])=>{const i=t;e!==(Object.prototype.hasOwnProperty.call(r,i)?r[i]:void 0)&&(s[i]?Object.defineProperty(s,i,{value:e,configurable:!0,enumerable:!0,writable:!0}):s[i]=e)}));try{await this.N.update(this.P,t,s)}catch(t){throw this.k(t)}}}class y extends Error{}class v{read=this.get;validate;q=new Map;constructor(t=t=>t){this.validate=t}set(t,e){this.q.set(t,e)}get(t){return this.q.get(t)}delete(t){this.q.delete(t)}write(t,e,r){if(r!==this.q.get(t))throw new Error("Unexpected previous value");this.q.set(t,e)}}const b="Cannot modify data",m={validateWriteSpec(){throw new y(b)},validateWrite(){throw new y(b)}};class p{M;constructor(t=[]){this.M=t}validateWrite(t,e){Object.keys(e).forEach((e=>{const r=e;if(!Object.prototype.hasOwnProperty.call(t,r)&&this.M.includes(r))throw new y(`Cannot remove field ${r}`)})),Object.keys(t).forEach((r=>{const s=r;if(this.M.includes(s)){if(!Object.prototype.hasOwnProperty.call(e,s))throw new y(`Cannot add field ${s}`);if(t[s]!==e[s])throw new y(`Cannot edit field ${s}`)}}))}}export{r as AsyncTaskQueue,o as Broadcaster,f as CollectionStorageModel,v as InMemoryModel,n as InMemoryTopic,h as PING,u as PONG,y as PermissionError,m as ReadOnly,a as ReadWrite,p as ReadWriteStruct,s as TaskQueueMap,i as TrackingTopicMap,e as UniqueIdProvider,l as websocketHandler};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shared-reducer",
3
- "version": "4.0.1",
3
+ "version": "4.0.2",
4
4
  "description": "shared state management",
5
5
  "author": "David Evans",
6
6
  "license": "MIT",