@routier/core 0.8.0 → 0.8.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.
@@ -142,6 +142,9 @@ __webpack_require__.r(__webpack_exports__);
142
142
  __webpack_require__.d(__webpack_exports__, {
143
143
  PluginEventResult: () => (/* reexport */ Result/* .PluginEventResult */.D),
144
144
  toPromise: () => (/* reexport */ toPromise),
145
+ pendingLiveQueryState: () => (/* reexport */ pendingLiveQueryState),
146
+ subscribeLiveQuery: () => (/* reexport */ subscribeLiveQuery),
147
+ toLiveQueryState: () => (/* reexport */ toLiveQueryState),
145
148
  Result: () => (/* reexport */ Result/* .Result */.Q)
146
149
  });
147
150
 
@@ -161,11 +164,48 @@ function toPromise(fn) {
161
164
  });
162
165
  }
163
166
 
167
+ ;// CONCATENATED MODULE: ./src/results/liveQuery.ts
168
+
169
+ const pendingLiveQueryState = ()=>({
170
+ status: "pending",
171
+ loading: true,
172
+ isSuccess: false,
173
+ isError: false
174
+ });
175
+ const toLiveQueryState = (result)=>result.ok === Result/* .Result.SUCCESS */.Q.SUCCESS ? {
176
+ status: "success",
177
+ loading: false,
178
+ data: result.data,
179
+ isSuccess: true,
180
+ isError: false
181
+ } : {
182
+ status: "error",
183
+ loading: false,
184
+ error: new Error(result.error?.message || "Unknown error"),
185
+ isSuccess: false,
186
+ isError: true
187
+ };
188
+ const subscribeLiveQuery = (query, onState)=>{
189
+ let active = true;
190
+ const unsubscribe = query((result)=>{
191
+ if (active) {
192
+ onState(toLiveQueryState(result));
193
+ }
194
+ });
195
+ return ()=>{
196
+ active = false;
197
+ if (typeof unsubscribe === "function") {
198
+ unsubscribe();
199
+ }
200
+ };
201
+ };
202
+
164
203
  ;// CONCATENATED MODULE: ./src/results/index.ts
165
204
 
166
205
 
167
206
 
168
207
 
208
+
169
209
  })();
170
210
 
171
211
  module.exports = __webpack_exports__;
@@ -1 +1 @@
1
- {"version":3,"file":"results/index.cjs","sources":["webpack://@routier/core/./src/results/Result.ts","webpack://@routier/core/webpack/runtime/define_property_getters","webpack://@routier/core/webpack/runtime/has_own_property","webpack://@routier/core/webpack/runtime/make_namespace_object","webpack://@routier/core/./src/results/utils.ts","webpack://@routier/core/./src/results/index.ts"],"sourcesContent":["import { PartialResultType, PluginEventPartialResultType, PluginEventResultType, ResultType } from \"./types\";\n\nabstract class BaseResult {\n static ERROR = \"error\" as const;\n static SUCCESS = \"success\" as const;\n static PARTIAL = \"partial\" as const;\n\n static resolve<T>(result: ResultType<T> | PartialResultType<T>, resolve: (data: T) => void, reject: (error?: any) => void) {\n if (result.ok === BaseResult.SUCCESS) {\n resolve(result.data);\n return;\n }\n\n if (result.ok === BaseResult.PARTIAL) {\n reject({\n partial: result.data,\n error: result.error\n });\n return;\n }\n\n reject(result.error);\n }\n\n static assertSuccess<T>(result: any): asserts result is { ok: \"success\"; data: T } {\n if (result.ok !== BaseResult.SUCCESS) {\n throw new Error(`Expected success result, but got ${result.ok}: ${result.error}`);\n }\n }\n}\n\nexport class Result extends BaseResult {\n static success<T>(data: T): ResultType<T>;\n static success(): ResultType<never>;\n static success<T>(data?: T): ResultType<T> {\n return {\n ok: Result.SUCCESS,\n data\n }\n }\n\n static error<T>(error: any): ResultType<T> {\n return {\n ok: Result.ERROR,\n error\n }\n }\n\n static partial<T>(data: T, error: any): PartialResultType<T> {\n return {\n ok: Result.PARTIAL,\n data,\n error\n }\n }\n}\n\nexport class PluginEventResult extends BaseResult {\n static success<T>(id: string, data: T): PluginEventResultType<T>;\n static success(id: string): PluginEventResultType<never>;\n static success<T>(id: string, data?: T): PluginEventResultType<T> {\n return {\n id,\n ok: Result.SUCCESS,\n data\n }\n }\n\n static error<T>(id: string, error: any): PluginEventResultType<T> {\n return {\n id,\n ok: Result.ERROR,\n error\n }\n }\n\n static partial<T>(id: string, data: T, error: any): PluginEventPartialResultType<T> {\n return {\n id,\n ok: Result.PARTIAL,\n data,\n error\n }\n }\n\n static assertSuccess<T>(result: PluginEventResultType<T>): asserts result is { ok: \"success\"; data: T; id: string } {\n if (result.ok !== Result.SUCCESS) {\n throw new Error(`Expected success result, but got ${result.ok}: ${result.error}`);\n }\n }\n}\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { Result } from \"./Result\";\nimport { CallbackResult } from \"./types\";\n\nexport function toPromise<T>(fn: (callback: CallbackResult<T>) => void) {\n return new Promise<T>((resolve, reject) => {\n fn((r) => {\n if (r.ok === Result.ERROR) {\n reject(r.error);\n return;\n }\n\n resolve(r.data);\n });\n });\n}\n","export * from './Result';\nexport * from './types';\nexport * from './utils';"],"names":["BaseResult","result","resolve","reject","Error","Result","data","error","PluginEventResult","id","toPromise","fn","Promise","r"],"mappings":";;;;;;;;AAEA,MAAeA;IACX,OAAO,QAAQ,QAAiB;IAChC,OAAO,UAAU,UAAmB;IACpC,OAAO,UAAU,UAAmB;IAEpC,OAAO,QAAWC,MAA4C,EAAEC,OAA0B,EAAEC,MAA6B,EAAE;QACvH,IAAIF,OAAO,EAAE,KAAKD,WAAW,OAAO,EAAE;YAClCE,QAAQD,OAAO,IAAI;YACnB;QACJ;QAEA,IAAIA,OAAO,EAAE,KAAKD,WAAW,OAAO,EAAE;YAClCG,OAAO;gBACH,SAASF,OAAO,IAAI;gBACpB,OAAOA,OAAO,KAAK;YACvB;YACA;QACJ;QAEAE,OAAOF,OAAO,KAAK;IACvB;IAEA,OAAO,cAAiBA,MAAW,EAAgD;QAC/E,IAAIA,OAAO,EAAE,KAAKD,WAAW,OAAO,EAAE;YAClC,MAAM,IAAII,MAAM,CAAC,iCAAiC,EAAEH,OAAO,EAAE,CAAC,EAAE,EAAEA,OAAO,KAAK,EAAE;QACpF;IACJ;AACJ;AAEO,MAAMI,eAAeL;IAGxB,OAAO,QAAWM,IAAQ,EAAiB;QACvC,OAAO;YACH,IAAID,OAAO,OAAO;YAClBC;QACJ;IACJ;IAEA,OAAO,MAASC,KAAU,EAAiB;QACvC,OAAO;YACH,IAAIF,OAAO,KAAK;YAChBE;QACJ;IACJ;IAEA,OAAO,QAAWD,IAAO,EAAEC,KAAU,EAAwB;QACzD,OAAO;YACH,IAAIF,OAAO,OAAO;YAClBC;YACAC;QACJ;IACJ;AACJ;AAEO,MAAMC,0BAA0BR;IAGnC,OAAO,QAAWS,EAAU,EAAEH,IAAQ,EAA4B;QAC9D,OAAO;YACHG;YACA,IAAIJ,OAAO,OAAO;YAClBC;QACJ;IACJ;IAEA,OAAO,MAASG,EAAU,EAAEF,KAAU,EAA4B;QAC9D,OAAO;YACHE;YACA,IAAIJ,OAAO,KAAK;YAChBE;QACJ;IACJ;IAEA,OAAO,QAAWE,EAAU,EAAEH,IAAO,EAAEC,KAAU,EAAmC;QAChF,OAAO;YACHE;YACA,IAAIJ,OAAO,OAAO;YAClBC;YACAC;QACJ;IACJ;IAEA,OAAO,cAAiBN,MAAgC,EAA4D;QAChH,IAAIA,OAAO,EAAE,KAAKI,OAAO,OAAO,EAAE;YAC9B,MAAM,IAAID,MAAM,CAAC,iCAAiC,EAAEH,OAAO,EAAE,CAAC,EAAE,EAAEA,OAAO,KAAK,EAAE;QACpF;IACJ;AACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1FA;AACA;AACA;AACA,kDAAkD,wCAAwC;AAC1F;AACA;AACA,E;;;;ACNA,wF;;;;ACAA;AACA;AACA;AACA,uDAAuD,iBAAiB;AACxE;AACA,gDAAgD,aAAa;AAC7D,E;;;;;;;;;;;;;;;;;;ACNkC;AAG3B,SAASS,UAAaC,EAAyC;IAClE,OAAO,IAAIC,QAAW,CAACV,SAASC;QAC5BQ,GAAG,CAACE;YACA,IAAIA,EAAE,EAAE,KAAKR,iCAAY,EAAE;gBACvBF,OAAOU,EAAE,KAAK;gBACd;YACJ;YAEAX,QAAQW,EAAE,IAAI;QAClB;IACJ;AACJ;;;ACdyB;AACD;AACA"}
1
+ {"version":3,"file":"results/index.cjs","sources":["webpack://@routier/core/./src/results/Result.ts","webpack://@routier/core/webpack/runtime/define_property_getters","webpack://@routier/core/webpack/runtime/has_own_property","webpack://@routier/core/webpack/runtime/make_namespace_object","webpack://@routier/core/./src/results/utils.ts","webpack://@routier/core/./src/results/liveQuery.ts","webpack://@routier/core/./src/results/index.ts"],"sourcesContent":["import { PartialResultType, PluginEventPartialResultType, PluginEventResultType, ResultType } from \"./types\";\n\nabstract class BaseResult {\n static ERROR = \"error\" as const;\n static SUCCESS = \"success\" as const;\n static PARTIAL = \"partial\" as const;\n\n static resolve<T>(result: ResultType<T> | PartialResultType<T>, resolve: (data: T) => void, reject: (error?: any) => void) {\n if (result.ok === BaseResult.SUCCESS) {\n resolve(result.data);\n return;\n }\n\n if (result.ok === BaseResult.PARTIAL) {\n reject({\n partial: result.data,\n error: result.error\n });\n return;\n }\n\n reject(result.error);\n }\n\n static assertSuccess<T>(result: any): asserts result is { ok: \"success\"; data: T } {\n if (result.ok !== BaseResult.SUCCESS) {\n throw new Error(`Expected success result, but got ${result.ok}: ${result.error}`);\n }\n }\n}\n\nexport class Result extends BaseResult {\n static success<T>(data: T): ResultType<T>;\n static success(): ResultType<never>;\n static success<T>(data?: T): ResultType<T> {\n return {\n ok: Result.SUCCESS,\n data\n }\n }\n\n static error<T>(error: any): ResultType<T> {\n return {\n ok: Result.ERROR,\n error\n }\n }\n\n static partial<T>(data: T, error: any): PartialResultType<T> {\n return {\n ok: Result.PARTIAL,\n data,\n error\n }\n }\n}\n\nexport class PluginEventResult extends BaseResult {\n static success<T>(id: string, data: T): PluginEventResultType<T>;\n static success(id: string): PluginEventResultType<never>;\n static success<T>(id: string, data?: T): PluginEventResultType<T> {\n return {\n id,\n ok: Result.SUCCESS,\n data\n }\n }\n\n static error<T>(id: string, error: any): PluginEventResultType<T> {\n return {\n id,\n ok: Result.ERROR,\n error\n }\n }\n\n static partial<T>(id: string, data: T, error: any): PluginEventPartialResultType<T> {\n return {\n id,\n ok: Result.PARTIAL,\n data,\n error\n }\n }\n\n static assertSuccess<T>(result: PluginEventResultType<T>): asserts result is { ok: \"success\"; data: T; id: string } {\n if (result.ok !== Result.SUCCESS) {\n throw new Error(`Expected success result, but got ${result.ok}: ${result.error}`);\n }\n }\n}\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { Result } from \"./Result\";\nimport { CallbackResult } from \"./types\";\n\nexport function toPromise<T>(fn: (callback: CallbackResult<T>) => void) {\n return new Promise<T>((resolve, reject) => {\n fn((r) => {\n if (r.ok === Result.ERROR) {\n reject(r.error);\n return;\n }\n\n resolve(r.data);\n });\n });\n}\n","import { Result } from \"./Result\";\nimport { ResultType } from \"./types\";\n\nexport type LiveQuery<T> = (callback: (result: ResultType<T>) => void) => void | (() => void);\n\nexport type LiveQueryState<T> =\n | {\n status: \"pending\";\n loading: true;\n isSuccess: false;\n isError: false;\n }\n | {\n status: \"error\";\n loading: false;\n error: Error;\n isSuccess: false;\n isError: true;\n }\n | {\n status: \"success\";\n loading: false;\n data: T;\n isSuccess: true;\n isError: false;\n };\n\nexport type SettledLiveQueryState<T> = Exclude<LiveQueryState<T>, { status: \"pending\" }>;\n\nexport const pendingLiveQueryState = <T>(): LiveQueryState<T> => ({\n status: \"pending\",\n loading: true,\n isSuccess: false,\n isError: false,\n});\n\nexport const toLiveQueryState = <T>(result: ResultType<T>): SettledLiveQueryState<T> =>\n result.ok === Result.SUCCESS\n ? { status: \"success\", loading: false, data: result.data, isSuccess: true, isError: false }\n : {\n status: \"error\",\n loading: false,\n error: new Error(result.error?.message || \"Unknown error\"),\n isSuccess: false,\n isError: true,\n };\n\nexport const subscribeLiveQuery = <T>(query: LiveQuery<T>, onState: (state: SettledLiveQueryState<T>) => void): (() => void) => {\n let active = true;\n\n const unsubscribe = query((result) => {\n if (active) {\n onState(toLiveQueryState(result));\n }\n });\n\n return () => {\n active = false;\n\n if (typeof unsubscribe === \"function\") {\n unsubscribe();\n }\n };\n};\n","export * from './Result';\nexport * from './types';\nexport * from './utils';export * from './liveQuery';\n"],"names":["BaseResult","result","resolve","reject","Error","Result","data","error","PluginEventResult","id","toPromise","fn","Promise","r","pendingLiveQueryState","toLiveQueryState","subscribeLiveQuery","query","onState","active","unsubscribe"],"mappings":";;;;;;;;AAEA,MAAeA;IACX,OAAO,QAAQ,QAAiB;IAChC,OAAO,UAAU,UAAmB;IACpC,OAAO,UAAU,UAAmB;IAEpC,OAAO,QAAWC,MAA4C,EAAEC,OAA0B,EAAEC,MAA6B,EAAE;QACvH,IAAIF,OAAO,EAAE,KAAKD,WAAW,OAAO,EAAE;YAClCE,QAAQD,OAAO,IAAI;YACnB;QACJ;QAEA,IAAIA,OAAO,EAAE,KAAKD,WAAW,OAAO,EAAE;YAClCG,OAAO;gBACH,SAASF,OAAO,IAAI;gBACpB,OAAOA,OAAO,KAAK;YACvB;YACA;QACJ;QAEAE,OAAOF,OAAO,KAAK;IACvB;IAEA,OAAO,cAAiBA,MAAW,EAAgD;QAC/E,IAAIA,OAAO,EAAE,KAAKD,WAAW,OAAO,EAAE;YAClC,MAAM,IAAII,MAAM,CAAC,iCAAiC,EAAEH,OAAO,EAAE,CAAC,EAAE,EAAEA,OAAO,KAAK,EAAE;QACpF;IACJ;AACJ;AAEO,MAAMI,eAAeL;IAGxB,OAAO,QAAWM,IAAQ,EAAiB;QACvC,OAAO;YACH,IAAID,OAAO,OAAO;YAClBC;QACJ;IACJ;IAEA,OAAO,MAASC,KAAU,EAAiB;QACvC,OAAO;YACH,IAAIF,OAAO,KAAK;YAChBE;QACJ;IACJ;IAEA,OAAO,QAAWD,IAAO,EAAEC,KAAU,EAAwB;QACzD,OAAO;YACH,IAAIF,OAAO,OAAO;YAClBC;YACAC;QACJ;IACJ;AACJ;AAEO,MAAMC,0BAA0BR;IAGnC,OAAO,QAAWS,EAAU,EAAEH,IAAQ,EAA4B;QAC9D,OAAO;YACHG;YACA,IAAIJ,OAAO,OAAO;YAClBC;QACJ;IACJ;IAEA,OAAO,MAASG,EAAU,EAAEF,KAAU,EAA4B;QAC9D,OAAO;YACHE;YACA,IAAIJ,OAAO,KAAK;YAChBE;QACJ;IACJ;IAEA,OAAO,QAAWE,EAAU,EAAEH,IAAO,EAAEC,KAAU,EAAmC;QAChF,OAAO;YACHE;YACA,IAAIJ,OAAO,OAAO;YAClBC;YACAC;QACJ;IACJ;IAEA,OAAO,cAAiBN,MAAgC,EAA4D;QAChH,IAAIA,OAAO,EAAE,KAAKI,OAAO,OAAO,EAAE;YAC9B,MAAM,IAAID,MAAM,CAAC,iCAAiC,EAAEH,OAAO,EAAE,CAAC,EAAE,EAAEA,OAAO,KAAK,EAAE;QACpF;IACJ;AACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1FA;AACA;AACA;AACA,kDAAkD,wCAAwC;AAC1F;AACA;AACA,E;;;;ACNA,wF;;;;ACAA;AACA;AACA;AACA,uDAAuD,iBAAiB;AACxE;AACA,gDAAgD,aAAa;AAC7D,E;;;;;;;;;;;;;;;;;;;;;ACNkC;AAG3B,SAASS,UAAaC,EAAyC;IAClE,OAAO,IAAIC,QAAW,CAACV,SAASC;QAC5BQ,GAAG,CAACE;YACA,IAAIA,EAAE,EAAE,KAAKR,iCAAY,EAAE;gBACvBF,OAAOU,EAAE,KAAK;gBACd;YACJ;YAEAX,QAAQW,EAAE,IAAI;QAClB;IACJ;AACJ;;;ACdkC;AA6B3B,MAAMC,wBAAwB,IAA6B;QAC9D,QAAQ;QACR,SAAS;QACT,WAAW;QACX,SAAS;IACb,GAAG;AAEI,MAAMC,mBAAmB,CAAId,SAChCA,OAAO,EAAE,KAAKI,qCAAc,GACtB;QAAE,QAAQ;QAAW,SAAS;QAAO,MAAMJ,OAAO,IAAI;QAAE,WAAW;QAAM,SAAS;IAAM,IACxF;QACE,QAAQ;QACR,SAAS;QACT,OAAO,IAAIG,MAAMH,OAAO,KAAK,EAAE,WAAW;QAC1C,WAAW;QACX,SAAS;IACb,EAAE;AAEH,MAAMe,qBAAqB,CAAIC,OAAqBC;IACvD,IAAIC,SAAS;IAEb,MAAMC,cAAcH,MAAM,CAAChB;QACvB,IAAIkB,QAAQ;YACRD,QAAQH,iBAAiBd;QAC7B;IACJ;IAEA,OAAO;QACHkB,SAAS;QAET,IAAI,OAAOC,gBAAgB,YAAY;YACnCA;QACJ;IACJ;AACJ,EAAE;;;AC/DuB;AACD;AACA;AAA4B"}
@@ -1,3 +1,4 @@
1
1
  export * from './Result';
2
2
  export * from './types';
3
3
  export * from './utils';
4
+ export * from './liveQuery';
@@ -128,6 +128,9 @@ var __webpack_exports__ = {};
128
128
  __webpack_require__.d(__webpack_exports__, {
129
129
  Dq: () => (/* reexport */ Result/* .PluginEventResult */.D),
130
130
  Q7: () => (/* reexport */ Result/* .Result */.Q),
131
+ jk: () => (/* reexport */ subscribeLiveQuery),
132
+ T: () => (/* reexport */ pendingLiveQueryState),
133
+ RV: () => (/* reexport */ toLiveQueryState),
131
134
  hq: () => (/* reexport */ toPromise)
132
135
  });
133
136
 
@@ -147,16 +150,56 @@ function toPromise(fn) {
147
150
  });
148
151
  }
149
152
 
153
+ ;// CONCATENATED MODULE: ./src/results/liveQuery.ts
154
+
155
+ const pendingLiveQueryState = ()=>({
156
+ status: "pending",
157
+ loading: true,
158
+ isSuccess: false,
159
+ isError: false
160
+ });
161
+ const toLiveQueryState = (result)=>result.ok === Result/* .Result.SUCCESS */.Q.SUCCESS ? {
162
+ status: "success",
163
+ loading: false,
164
+ data: result.data,
165
+ isSuccess: true,
166
+ isError: false
167
+ } : {
168
+ status: "error",
169
+ loading: false,
170
+ error: new Error(result.error?.message || "Unknown error"),
171
+ isSuccess: false,
172
+ isError: true
173
+ };
174
+ const subscribeLiveQuery = (query, onState)=>{
175
+ let active = true;
176
+ const unsubscribe = query((result)=>{
177
+ if (active) {
178
+ onState(toLiveQueryState(result));
179
+ }
180
+ });
181
+ return ()=>{
182
+ active = false;
183
+ if (typeof unsubscribe === "function") {
184
+ unsubscribe();
185
+ }
186
+ };
187
+ };
188
+
150
189
  ;// CONCATENATED MODULE: ./src/results/index.ts
151
190
 
152
191
 
153
192
 
154
193
 
194
+
155
195
  })();
156
196
 
157
197
  var __webpack_exports__PluginEventResult = __webpack_exports__.Dq;
158
198
  var __webpack_exports__Result = __webpack_exports__.Q7;
199
+ var __webpack_exports__pendingLiveQueryState = __webpack_exports__.T;
200
+ var __webpack_exports__subscribeLiveQuery = __webpack_exports__.jk;
201
+ var __webpack_exports__toLiveQueryState = __webpack_exports__.RV;
159
202
  var __webpack_exports__toPromise = __webpack_exports__.hq;
160
- export { __webpack_exports__PluginEventResult as PluginEventResult, __webpack_exports__Result as Result, __webpack_exports__toPromise as toPromise };
203
+ export { __webpack_exports__PluginEventResult as PluginEventResult, __webpack_exports__Result as Result, __webpack_exports__pendingLiveQueryState as pendingLiveQueryState, __webpack_exports__subscribeLiveQuery as subscribeLiveQuery, __webpack_exports__toLiveQueryState as toLiveQueryState, __webpack_exports__toPromise as toPromise };
161
204
 
162
205
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"results/index.js","sources":["webpack://@routier/core/./src/results/Result.ts","webpack://@routier/core/webpack/runtime/define_property_getters","webpack://@routier/core/webpack/runtime/has_own_property","webpack://@routier/core/./src/results/utils.ts","webpack://@routier/core/./src/results/index.ts"],"sourcesContent":["import { PartialResultType, PluginEventPartialResultType, PluginEventResultType, ResultType } from \"./types\";\n\nabstract class BaseResult {\n static ERROR = \"error\" as const;\n static SUCCESS = \"success\" as const;\n static PARTIAL = \"partial\" as const;\n\n static resolve<T>(result: ResultType<T> | PartialResultType<T>, resolve: (data: T) => void, reject: (error?: any) => void) {\n if (result.ok === BaseResult.SUCCESS) {\n resolve(result.data);\n return;\n }\n\n if (result.ok === BaseResult.PARTIAL) {\n reject({\n partial: result.data,\n error: result.error\n });\n return;\n }\n\n reject(result.error);\n }\n\n static assertSuccess<T>(result: any): asserts result is { ok: \"success\"; data: T } {\n if (result.ok !== BaseResult.SUCCESS) {\n throw new Error(`Expected success result, but got ${result.ok}: ${result.error}`);\n }\n }\n}\n\nexport class Result extends BaseResult {\n static success<T>(data: T): ResultType<T>;\n static success(): ResultType<never>;\n static success<T>(data?: T): ResultType<T> {\n return {\n ok: Result.SUCCESS,\n data\n }\n }\n\n static error<T>(error: any): ResultType<T> {\n return {\n ok: Result.ERROR,\n error\n }\n }\n\n static partial<T>(data: T, error: any): PartialResultType<T> {\n return {\n ok: Result.PARTIAL,\n data,\n error\n }\n }\n}\n\nexport class PluginEventResult extends BaseResult {\n static success<T>(id: string, data: T): PluginEventResultType<T>;\n static success(id: string): PluginEventResultType<never>;\n static success<T>(id: string, data?: T): PluginEventResultType<T> {\n return {\n id,\n ok: Result.SUCCESS,\n data\n }\n }\n\n static error<T>(id: string, error: any): PluginEventResultType<T> {\n return {\n id,\n ok: Result.ERROR,\n error\n }\n }\n\n static partial<T>(id: string, data: T, error: any): PluginEventPartialResultType<T> {\n return {\n id,\n ok: Result.PARTIAL,\n data,\n error\n }\n }\n\n static assertSuccess<T>(result: PluginEventResultType<T>): asserts result is { ok: \"success\"; data: T; id: string } {\n if (result.ok !== Result.SUCCESS) {\n throw new Error(`Expected success result, but got ${result.ok}: ${result.error}`);\n }\n }\n}\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import { Result } from \"./Result\";\nimport { CallbackResult } from \"./types\";\n\nexport function toPromise<T>(fn: (callback: CallbackResult<T>) => void) {\n return new Promise<T>((resolve, reject) => {\n fn((r) => {\n if (r.ok === Result.ERROR) {\n reject(r.error);\n return;\n }\n\n resolve(r.data);\n });\n });\n}\n","export * from './Result';\nexport * from './types';\nexport * from './utils';"],"names":["BaseResult","result","resolve","reject","Error","Result","data","error","PluginEventResult","id","toPromise","fn","Promise","r"],"mappings":";;;;;;AAEA,MAAeA;IACX,OAAO,QAAQ,QAAiB;IAChC,OAAO,UAAU,UAAmB;IACpC,OAAO,UAAU,UAAmB;IAEpC,OAAO,QAAWC,MAA4C,EAAEC,OAA0B,EAAEC,MAA6B,EAAE;QACvH,IAAIF,OAAO,EAAE,KAAKD,WAAW,OAAO,EAAE;YAClCE,QAAQD,OAAO,IAAI;YACnB;QACJ;QAEA,IAAIA,OAAO,EAAE,KAAKD,WAAW,OAAO,EAAE;YAClCG,OAAO;gBACH,SAASF,OAAO,IAAI;gBACpB,OAAOA,OAAO,KAAK;YACvB;YACA;QACJ;QAEAE,OAAOF,OAAO,KAAK;IACvB;IAEA,OAAO,cAAiBA,MAAW,EAAgD;QAC/E,IAAIA,OAAO,EAAE,KAAKD,WAAW,OAAO,EAAE;YAClC,MAAM,IAAII,MAAM,CAAC,iCAAiC,EAAEH,OAAO,EAAE,CAAC,EAAE,EAAEA,OAAO,KAAK,EAAE;QACpF;IACJ;AACJ;AAEO,MAAMI,eAAeL;IAGxB,OAAO,QAAWM,IAAQ,EAAiB;QACvC,OAAO;YACH,IAAID,OAAO,OAAO;YAClBC;QACJ;IACJ;IAEA,OAAO,MAASC,KAAU,EAAiB;QACvC,OAAO;YACH,IAAIF,OAAO,KAAK;YAChBE;QACJ;IACJ;IAEA,OAAO,QAAWD,IAAO,EAAEC,KAAU,EAAwB;QACzD,OAAO;YACH,IAAIF,OAAO,OAAO;YAClBC;YACAC;QACJ;IACJ;AACJ;AAEO,MAAMC,0BAA0BR;IAGnC,OAAO,QAAWS,EAAU,EAAEH,IAAQ,EAA4B;QAC9D,OAAO;YACHG;YACA,IAAIJ,OAAO,OAAO;YAClBC;QACJ;IACJ;IAEA,OAAO,MAASG,EAAU,EAAEF,KAAU,EAA4B;QAC9D,OAAO;YACHE;YACA,IAAIJ,OAAO,KAAK;YAChBE;QACJ;IACJ;IAEA,OAAO,QAAWE,EAAU,EAAEH,IAAO,EAAEC,KAAU,EAAmC;QAChF,OAAO;YACHE;YACA,IAAIJ,OAAO,OAAO;YAClBC;YACAC;QACJ;IACJ;IAEA,OAAO,cAAiBN,MAAgC,EAA4D;QAChH,IAAIA,OAAO,EAAE,KAAKI,OAAO,OAAO,EAAE;YAC9B,MAAM,IAAID,MAAM,CAAC,iCAAiC,EAAEH,OAAO,EAAE,CAAC,EAAE,EAAEA,OAAO,KAAK,EAAE;QACpF;IACJ;AACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1FA;AACA;AACA;AACA,kDAAkD,wCAAwC;AAC1F;AACA;AACA,E;;;;ACNA,wF;;;;;;;;;;;;;;;;ACAkC;AAG3B,SAASS,UAAaC,EAAyC;IAClE,OAAO,IAAIC,QAAW,CAACV,SAASC;QAC5BQ,GAAG,CAACE;YACA,IAAIA,EAAE,EAAE,KAAKR,iCAAY,EAAE;gBACvBF,OAAOU,EAAE,KAAK;gBACd;YACJ;YAEAX,QAAQW,EAAE,IAAI;QAClB;IACJ;AACJ;;;ACdyB;AACD;AACA"}
1
+ {"version":3,"file":"results/index.js","sources":["webpack://@routier/core/./src/results/Result.ts","webpack://@routier/core/webpack/runtime/define_property_getters","webpack://@routier/core/webpack/runtime/has_own_property","webpack://@routier/core/./src/results/utils.ts","webpack://@routier/core/./src/results/liveQuery.ts","webpack://@routier/core/./src/results/index.ts"],"sourcesContent":["import { PartialResultType, PluginEventPartialResultType, PluginEventResultType, ResultType } from \"./types\";\n\nabstract class BaseResult {\n static ERROR = \"error\" as const;\n static SUCCESS = \"success\" as const;\n static PARTIAL = \"partial\" as const;\n\n static resolve<T>(result: ResultType<T> | PartialResultType<T>, resolve: (data: T) => void, reject: (error?: any) => void) {\n if (result.ok === BaseResult.SUCCESS) {\n resolve(result.data);\n return;\n }\n\n if (result.ok === BaseResult.PARTIAL) {\n reject({\n partial: result.data,\n error: result.error\n });\n return;\n }\n\n reject(result.error);\n }\n\n static assertSuccess<T>(result: any): asserts result is { ok: \"success\"; data: T } {\n if (result.ok !== BaseResult.SUCCESS) {\n throw new Error(`Expected success result, but got ${result.ok}: ${result.error}`);\n }\n }\n}\n\nexport class Result extends BaseResult {\n static success<T>(data: T): ResultType<T>;\n static success(): ResultType<never>;\n static success<T>(data?: T): ResultType<T> {\n return {\n ok: Result.SUCCESS,\n data\n }\n }\n\n static error<T>(error: any): ResultType<T> {\n return {\n ok: Result.ERROR,\n error\n }\n }\n\n static partial<T>(data: T, error: any): PartialResultType<T> {\n return {\n ok: Result.PARTIAL,\n data,\n error\n }\n }\n}\n\nexport class PluginEventResult extends BaseResult {\n static success<T>(id: string, data: T): PluginEventResultType<T>;\n static success(id: string): PluginEventResultType<never>;\n static success<T>(id: string, data?: T): PluginEventResultType<T> {\n return {\n id,\n ok: Result.SUCCESS,\n data\n }\n }\n\n static error<T>(id: string, error: any): PluginEventResultType<T> {\n return {\n id,\n ok: Result.ERROR,\n error\n }\n }\n\n static partial<T>(id: string, data: T, error: any): PluginEventPartialResultType<T> {\n return {\n id,\n ok: Result.PARTIAL,\n data,\n error\n }\n }\n\n static assertSuccess<T>(result: PluginEventResultType<T>): asserts result is { ok: \"success\"; data: T; id: string } {\n if (result.ok !== Result.SUCCESS) {\n throw new Error(`Expected success result, but got ${result.ok}: ${result.error}`);\n }\n }\n}\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import { Result } from \"./Result\";\nimport { CallbackResult } from \"./types\";\n\nexport function toPromise<T>(fn: (callback: CallbackResult<T>) => void) {\n return new Promise<T>((resolve, reject) => {\n fn((r) => {\n if (r.ok === Result.ERROR) {\n reject(r.error);\n return;\n }\n\n resolve(r.data);\n });\n });\n}\n","import { Result } from \"./Result\";\nimport { ResultType } from \"./types\";\n\nexport type LiveQuery<T> = (callback: (result: ResultType<T>) => void) => void | (() => void);\n\nexport type LiveQueryState<T> =\n | {\n status: \"pending\";\n loading: true;\n isSuccess: false;\n isError: false;\n }\n | {\n status: \"error\";\n loading: false;\n error: Error;\n isSuccess: false;\n isError: true;\n }\n | {\n status: \"success\";\n loading: false;\n data: T;\n isSuccess: true;\n isError: false;\n };\n\nexport type SettledLiveQueryState<T> = Exclude<LiveQueryState<T>, { status: \"pending\" }>;\n\nexport const pendingLiveQueryState = <T>(): LiveQueryState<T> => ({\n status: \"pending\",\n loading: true,\n isSuccess: false,\n isError: false,\n});\n\nexport const toLiveQueryState = <T>(result: ResultType<T>): SettledLiveQueryState<T> =>\n result.ok === Result.SUCCESS\n ? { status: \"success\", loading: false, data: result.data, isSuccess: true, isError: false }\n : {\n status: \"error\",\n loading: false,\n error: new Error(result.error?.message || \"Unknown error\"),\n isSuccess: false,\n isError: true,\n };\n\nexport const subscribeLiveQuery = <T>(query: LiveQuery<T>, onState: (state: SettledLiveQueryState<T>) => void): (() => void) => {\n let active = true;\n\n const unsubscribe = query((result) => {\n if (active) {\n onState(toLiveQueryState(result));\n }\n });\n\n return () => {\n active = false;\n\n if (typeof unsubscribe === \"function\") {\n unsubscribe();\n }\n };\n};\n","export * from './Result';\nexport * from './types';\nexport * from './utils';export * from './liveQuery';\n"],"names":["BaseResult","result","resolve","reject","Error","Result","data","error","PluginEventResult","id","toPromise","fn","Promise","r","pendingLiveQueryState","toLiveQueryState","subscribeLiveQuery","query","onState","active","unsubscribe"],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { ResultType } from "./types";
2
+ export type LiveQuery<T> = (callback: (result: ResultType<T>) => void) => void | (() => void);
3
+ export type LiveQueryState<T> = {
4
+ status: "pending";
5
+ loading: true;
6
+ isSuccess: false;
7
+ isError: false;
8
+ } | {
9
+ status: "error";
10
+ loading: false;
11
+ error: Error;
12
+ isSuccess: false;
13
+ isError: true;
14
+ } | {
15
+ status: "success";
16
+ loading: false;
17
+ data: T;
18
+ isSuccess: true;
19
+ isError: false;
20
+ };
21
+ export type SettledLiveQueryState<T> = Exclude<LiveQueryState<T>, {
22
+ status: "pending";
23
+ }>;
24
+ export declare const pendingLiveQueryState: <T>() => LiveQueryState<T>;
25
+ export declare const toLiveQueryState: <T>(result: ResultType<T>) => SettledLiveQueryState<T>;
26
+ export declare const subscribeLiveQuery: <T>(query: LiveQuery<T>, onState: (state: SettledLiveQueryState<T>) => void) => (() => void);
@@ -4652,7 +4652,6 @@ const getChannelRegistry = (schemaId, scope)=>{
4652
4652
  registry[key] = channel;
4653
4653
  return channel;
4654
4654
  };
4655
- // Must have a sender and receiver. Sender cannot listen for it's own message
4656
4655
  class SchemaChannel {
4657
4656
  sender;
4658
4657
  receiver;
@@ -4661,8 +4660,8 @@ class SchemaChannel {
4661
4660
  // hence a count rather than a boolean.
4662
4661
  subscribers = 0;
4663
4662
  constructor(channelKey){
4664
- this.sender = new SchemaChannelSender(channelKey);
4665
4663
  this.receiver = new SchemaChannelReceiver(channelKey);
4664
+ this.sender = new SchemaChannelSender(channelKey, this.receiver);
4666
4665
  }
4667
4666
  /**
4668
4667
  * How many callbacks in THIS process are waiting on the channel.
@@ -4686,51 +4685,50 @@ class SchemaChannel {
4686
4685
  this.receiver.close();
4687
4686
  }
4688
4687
  }
4689
- /**
4690
- * Stops a channel from holding the process open.
4691
- *
4692
- * A DataStore opens a sender and a receiver per collection, and in Node an open
4693
- * BroadcastChannel is a referenced handle. Without this, any script that builds a store and
4694
- * does not call `destroyAsync()` runs to the end of its code and then hangs forever with two
4695
- * live MessagePorts per collection — including the example in the README.
4696
- *
4697
- * `unref` is Node-only; the browser's BroadcastChannel has no such method and needs none.
4698
- * A channel that is unreferenced still sends and receives normally. It only stops being a
4699
- * reason for the process to stay alive, which is the correct default for a library: a program
4700
- * with no work left should exit.
4701
- */ const unreference = (channel)=>{
4688
+ const openBroadcastChannel = (channelKey)=>{
4689
+ if (typeof BroadcastChannel !== "function") {
4690
+ return null;
4691
+ }
4692
+ const channel = new BroadcastChannel(`__routier-schema-subscription-channel:${channelKey}`);
4702
4693
  const maybeUnref = channel.unref;
4703
- if (typeof maybeUnref === 'function') {
4694
+ if (typeof maybeUnref === "function") {
4704
4695
  maybeUnref.call(channel);
4705
4696
  }
4697
+ return channel;
4706
4698
  };
4707
4699
  class SchemaChannelSender {
4708
4700
  broadcastChannel;
4709
- constructor(channelKey){
4710
- this.broadcastChannel = new BroadcastChannel(`__routier-schema-subscription-channel:${channelKey}`);
4711
- unreference(this.broadcastChannel);
4701
+ localReceiver;
4702
+ constructor(channelKey, localReceiver){
4703
+ this.broadcastChannel = openBroadcastChannel(channelKey);
4704
+ this.localReceiver = localReceiver;
4712
4705
  }
4713
4706
  send(changes) {
4714
- this.broadcastChannel.postMessage(changes);
4707
+ if (this.broadcastChannel != null) {
4708
+ this.broadcastChannel.postMessage(changes);
4709
+ return;
4710
+ }
4711
+ const copy = structuredClone(changes);
4712
+ setTimeout(()=>this.localReceiver.dispatch(copy), 0);
4715
4713
  }
4716
4714
  close() {
4717
- this.broadcastChannel.close();
4715
+ this.broadcastChannel?.close();
4718
4716
  }
4719
4717
  }
4720
4718
  class SchemaChannelReceiver {
4721
4719
  broadcastChannel;
4722
4720
  subscriptions = [];
4723
4721
  constructor(channelKey){
4724
- this.broadcastChannel = new BroadcastChannel(`__routier-schema-subscription-channel:${channelKey}`);
4725
- unreference(this.broadcastChannel);
4726
- this.broadcastChannel.onmessage = (e)=>{
4727
- // We can't send to the same instance it is not possbile
4728
- const stampedChanges = e.data;
4729
- for(let i = 0, length = this.subscriptions.length; i < length; i++){
4730
- const subscription = this.subscriptions[i];
4731
- subscription.action(stampedChanges);
4732
- }
4733
- };
4722
+ this.broadcastChannel = openBroadcastChannel(channelKey);
4723
+ if (this.broadcastChannel != null) {
4724
+ this.broadcastChannel.onmessage = (e)=>this.dispatch(e.data);
4725
+ }
4726
+ }
4727
+ dispatch(changes) {
4728
+ const subscriptions = this.subscriptions;
4729
+ for(let i = 0, length = subscriptions.length; i < length; i++){
4730
+ subscriptions[i].action(changes);
4731
+ }
4734
4732
  }
4735
4733
  get listenerCount() {
4736
4734
  return this.subscriptions.length;
@@ -4743,8 +4741,10 @@ class SchemaChannelReceiver {
4743
4741
  }
4744
4742
  close() {
4745
4743
  this.subscriptions = [];
4746
- this.broadcastChannel.onmessage = null;
4747
- this.broadcastChannel.close();
4744
+ if (this.broadcastChannel != null) {
4745
+ this.broadcastChannel.onmessage = null;
4746
+ this.broadcastChannel.close();
4747
+ }
4748
4748
  }
4749
4749
  }
4750
4750
  class SubscriptionListener {