@lomray/react-mobx-manager 3.3.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@ import { TAnyStore } from "./types.js";
3
3
  * Make store props exported for Manager.toJSON
4
4
  * @see Manager.toJSON
5
5
  */
6
- declare const makeExported: <T extends object>(store: T, props: { [P in Exclude<keyof T, "toString">]?: "observable" | "simple" | "excluded" | undefined; }) => void;
6
+ declare const makeExported: <T extends object>(store: T, props: { [P in Exclude<keyof T, "toString">]?: "observable" | "simple" | "excluded" | undefined; }, shouldExtend?: boolean) => void;
7
7
  /**
8
8
  * Check if store prop is observable exported
9
9
  */
package/make-exported.js CHANGED
@@ -1,2 +1,2 @@
1
- const e="libExported",l=(l,o)=>{l[e]=o},o=(l,o)=>"observable"===l?.[e]?.[o],b=(l,o)=>"simple"===l?.[e]?.[o],d=(l,o)=>"excluded"===l?.[e]?.[o];export{d as isPropExcludedFromExport,o as isPropObservableExported,b as isPropSimpleExported,l as makeExported};
1
+ const e="libExported",l=(l,o,b=!0)=>{l[e]={...b?l?.[e]??{}:{},...o}},o=(l,o)=>"observable"===l?.[e]?.[o],b=(l,o)=>"simple"===l?.[e]?.[o],d=(l,o)=>"excluded"===l?.[e]?.[o];export{d as isPropExcludedFromExport,o as isPropObservableExported,b as isPropSimpleExported,l as makeExported};
2
2
  //# sourceMappingURL=make-exported.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"make-exported.js","sources":["../src/make-exported.ts"],"sourcesContent":["import type { TAnyStore } from '@src/types';\n\nconst exportedPropName = 'libExported';\n\n/**\n * Make store props exported for Manager.toJSON\n * @see Manager.toJSON\n */\nconst makeExported = <T extends object>(\n store: T,\n props: {\n [P in Exclude<keyof T, 'toString'>]?: 'observable' | 'simple' | 'excluded';\n },\n): void => {\n store[exportedPropName] = props;\n};\n\n/**\n * Check if store prop is observable exported\n */\nconst isPropObservableExported = (store: TAnyStore, prop: string): boolean =>\n store?.[exportedPropName]?.[prop] === 'observable';\n\n/**\n * Check if store prop is simple exported\n */\nconst isPropSimpleExported = (store: TAnyStore, prop: string): boolean =>\n store?.[exportedPropName]?.[prop] === 'simple';\n\n/**\n * Check if store prop is excluded from export\n */\nconst isPropExcludedFromExport = (store: TAnyStore, prop: string): boolean =>\n store?.[exportedPropName]?.[prop] === 'excluded';\n\nexport { makeExported, isPropObservableExported, isPropSimpleExported, isPropExcludedFromExport };\n"],"names":["exportedPropName","makeExported","store","props","isPropObservableExported","prop","isPropSimpleExported","isPropExcludedFromExport"],"mappings":"AAEA,MAAMA,EAAmB,cAMnBC,EAAe,CACnBC,EACAC,KAIAD,EAAMF,GAAoBG,CAAK,EAM3BC,EAA2B,CAACF,EAAkBG,IACZ,eAAtCH,IAAQF,KAAoBK,GAKxBC,EAAuB,CAACJ,EAAkBG,IACR,WAAtCH,IAAQF,KAAoBK,GAKxBE,EAA2B,CAACL,EAAkBG,IACZ,aAAtCH,IAAQF,KAAoBK"}
1
+ {"version":3,"file":"make-exported.js","sources":["../src/make-exported.ts"],"sourcesContent":["import type { TAnyStore } from '@src/types';\n\nconst exportedPropName = 'libExported';\n\n/**\n * Make store props exported for Manager.toJSON\n * @see Manager.toJSON\n */\nconst makeExported = <T extends object>(\n store: T,\n props: {\n [P in Exclude<keyof T, 'toString'>]?: 'observable' | 'simple' | 'excluded';\n },\n shouldExtend = true,\n): void => {\n store[exportedPropName] = { ...(shouldExtend ? store?.[exportedPropName] ?? {} : {}), ...props };\n};\n\n/**\n * Check if store prop is observable exported\n */\nconst isPropObservableExported = (store: TAnyStore, prop: string): boolean =>\n store?.[exportedPropName]?.[prop] === 'observable';\n\n/**\n * Check if store prop is simple exported\n */\nconst isPropSimpleExported = (store: TAnyStore, prop: string): boolean =>\n store?.[exportedPropName]?.[prop] === 'simple';\n\n/**\n * Check if store prop is excluded from export\n */\nconst isPropExcludedFromExport = (store: TAnyStore, prop: string): boolean =>\n store?.[exportedPropName]?.[prop] === 'excluded';\n\nexport { makeExported, isPropObservableExported, isPropSimpleExported, isPropExcludedFromExport };\n"],"names":["exportedPropName","makeExported","store","props","shouldExtend","isPropObservableExported","prop","isPropSimpleExported","isPropExcludedFromExport"],"mappings":"AAEA,MAAMA,EAAmB,cAMnBC,EAAe,CACnBC,EACAC,EAGAC,GAAe,KAEfF,EAAMF,GAAoB,IAAMI,EAAeF,IAAQF,IAAqB,CAAE,EAAG,MAAQG,EAAO,EAM5FE,EAA2B,CAACH,EAAkBI,IACZ,eAAtCJ,IAAQF,KAAoBM,GAKxBC,EAAuB,CAACL,EAAkBI,IACR,WAAtCJ,IAAQF,KAAoBM,GAKxBE,EAA2B,CAACN,EAAkBI,IACZ,aAAtCJ,IAAQF,KAAoBM"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lomray/react-mobx-manager",
3
- "version": "3.3.0",
3
+ "version": "3.4.0",
4
4
  "description": "This package provides Mobx stores manager for react.",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -8,6 +8,9 @@ interface ISuspenseQueryParams {
8
8
  fieldName?: string;
9
9
  errorFields?: string[];
10
10
  }
11
+ interface ISuspenseQueryOptions {
12
+ hash?: unknown;
13
+ }
11
14
  interface ISuspenseSubqueryOptions {
12
15
  id: string;
13
16
  hash: unknown;
@@ -57,6 +60,13 @@ declare class SuspenseQuery {
57
60
  * Assign custom error fields to error
58
61
  */
59
62
  protected jsonToError(e: Error, values: Record<string, any>): Error;
63
+ /**
64
+ * Throw suspense error
65
+ */
66
+ /**
67
+ * Throw suspense error
68
+ */
69
+ protected throwError(): void;
60
70
  /**
61
71
  * Detect if suspense is restored from server side:
62
72
  * - throw error if exist
@@ -67,12 +77,12 @@ declare class SuspenseQuery {
67
77
  * - throw error if exist
68
78
  * - skip run suspense if already completed
69
79
  */
70
- protected isComplete(): boolean;
80
+ protected isComplete(hash: unknown): boolean;
71
81
  /**
72
82
  * Run request
73
83
  * Save request resolve status
74
84
  */
75
- query: <TReturn>(promise: () => Promise<TReturn>) => TReturn | undefined;
85
+ query: <TReturn>(promise: () => Promise<TReturn>, options?: ISuspenseQueryOptions) => TReturn | undefined;
76
86
  /**
77
87
  * Run subquery
78
88
  * Re-fetch data from query by hash changes in children components
package/suspense-query.js CHANGED
@@ -1,2 +1,2 @@
1
- import{extendObservable as s,observable as e,runInAction as r}from"mobx";class t{promise;subqueries=new Map;store;params;constructor(r,{fieldName:t="sR",errorFields:i=["name","message"]}={}){this.store=r,this.params={fieldName:t,errorFields:i};const o=r.init?.bind(r);r.init=()=>{this.isComplete(),o?.()},s(r,{[t]:!1},{[t]:e})}errorJson(s){s.toJSON=()=>this.params.errorFields.reduce(((e,r)=>({...e,[r]:s?.[r]})),{})}jsonToError(s,e){return this.params.errorFields.forEach((r=>{s[r]=e?.[r]})),s}isComplete(){const s=this.store[this.params.fieldName];if("boolean"!==typeof s)throw this.jsonToError(new Error(s?.message??s?.name),s);return!0===s}query=s=>{const{fieldName:e}=this.params;if(!this.isComplete())return this.promise||(this.promise=s(),this.promise.then((()=>{r((()=>{this.store[e]=!0}))}),(s=>{r((()=>{this.errorJson(s),this.store[e]=s}))}))),t.run(this.promise)};subquery=(s,e)=>{const{id:r,hash:i}=e,o=this.subqueries.get(r);if(!o)return void this.subqueries.set(r,{hash:i});if(o?.hash===i)return t.run(o?.promise);const a=s();return this.subqueries.set(r,{hash:i,promise:a}),t.run(a)};static run=s=>{if(s){switch(s.status){case"fulfilled":return s.value;case"pending":throw s;case"rejected":throw s.reason;default:s.status="pending",s.then((e=>{s.status="fulfilled",s.value=e}),(e=>{s.status="rejected",s.reason=e}))}throw s}}}export{t as default};
1
+ import{makeExported as r}from"./make-exported.js";class s{promise;subqueries=new Map;store;params;constructor(s,{fieldName:e="sR",errorFields:t=["name","message"]}={}){this.store=s,this.params={fieldName:e,errorFields:t};const i=s.init?.bind(s);s.init=()=>{this.throwError(),i?.()},r(s,{[e]:"simple"})}errorJson(r){r.toJSON=()=>this.params.errorFields.reduce(((s,e)=>({...s,[e]:r?.[e]})),{})}jsonToError(r,s){return this.params.errorFields.forEach((e=>{r[e]=s?.[e]})),r}throwError(){const r=this.store[this.params.fieldName];if(r?.error)throw this.jsonToError(new Error(r?.message??r?.name),r)}isComplete(r){const s=this.store[this.params.fieldName];return s?.error&&this.throwError(),!0===s?.done&&s.hash===r}query=(r,e={})=>{const{hash:t=""}=e,{fieldName:i}=this.params;if(!this.isComplete(t))return this.store[i]?.hash!==t&&(this.store[i]={hash:t,done:!1},this.promise=void 0),this.promise||(this.promise=r(),this.promise.then((()=>{this.store[i]={hash:t,done:!0}}),(r=>{this.errorJson(r),this.store[i]={error:r}}))),s.run(this.promise)};subquery=(r,e)=>{const{id:t,hash:i}=e,o=this.subqueries.get(t);if(!o)return void this.subqueries.set(t,{hash:i});if(o?.hash===i)return s.run(o?.promise);const h=r();return this.subqueries.set(t,{hash:i,promise:h}),s.run(h)};static run=r=>{if(r){switch(r.status){case"fulfilled":return r.value;case"pending":throw r;case"rejected":throw r.reason;default:r.status="pending",r.then((s=>{r.status="fulfilled",r.value=s}),(s=>{r.status="rejected",r.reason=s}))}throw r}}}export{s as default};
2
2
  //# sourceMappingURL=suspense-query.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"suspense-query.js","sources":["../src/suspense-query.ts"],"sourcesContent":["import { extendObservable, observable, runInAction } from 'mobx';\nimport type { TInitStore } from './types';\n\nexport interface IPromise<TReturn> extends Promise<TReturn> {\n status?: 'fulfilled' | 'pending' | 'rejected';\n value?: TReturn;\n reason?: any;\n}\n\ninterface ISuspenseQueryParams {\n fieldName?: string; // field name in target store for save suspense state\n errorFields?: string[];\n}\n\ninterface ISuspenseSubqueryOptions {\n id: string;\n hash: unknown;\n}\n\n/**\n * Run request and cache promise\n * Sync suspense status between server and client\n */\nclass SuspenseQuery {\n /**\n * @protected\n */\n protected promise: Promise<any> | undefined;\n\n /**\n * Subqueries info\n */\n protected subqueries: Map<string, { hash: unknown; promise?: IPromise<any> }> = new Map();\n\n /**\n * Target store\n */\n protected readonly store: TInitStore;\n\n /**\n * @protected\n */\n protected readonly params: Required<ISuspenseQueryParams>;\n\n /**\n * @constructor\n */\n constructor(\n store: TInitStore,\n { fieldName = 'sR', errorFields = ['name', 'message'] }: ISuspenseQueryParams = {},\n ) {\n this.store = store;\n this.params = { fieldName, errorFields };\n\n const defaultInit = store.init?.bind(store);\n\n store.init = () => {\n this.isComplete(); // throw error immediately from server side if exist\n defaultInit?.();\n };\n\n extendObservable(\n store,\n { [fieldName]: false },\n {\n [fieldName]: observable,\n },\n );\n }\n\n /**\n * Error to json\n */\n protected errorJson(e: any): void {\n e.toJSON = () =>\n this.params.errorFields.reduce(\n (res, name) => ({\n ...res,\n [name]: e?.[name],\n }),\n {},\n );\n }\n\n /**\n * Assign custom error fields to error\n */\n protected jsonToError(e: Error, values: Record<string, any>): Error {\n this.params.errorFields.forEach((name) => {\n e[name] = values?.[name];\n });\n\n return e;\n }\n\n /**\n * Detect if suspense is restored from server side:\n * - throw error if exist\n * - skip run suspense if already completed\n */\n protected isComplete(): boolean {\n const value = this.store[this.params.fieldName];\n const valueType = typeof value;\n\n // pass error to error boundary\n if (valueType !== 'boolean') {\n throw this.jsonToError(\n new Error((value?.message ?? value?.name) as string),\n value as Record<string, any>,\n );\n }\n\n return value === true;\n }\n\n /**\n * Run request\n * Save request resolve status\n */\n public query = <TReturn>(promise: () => Promise<TReturn>): TReturn | undefined => {\n const { fieldName } = this.params;\n\n if (this.isComplete()) {\n return;\n }\n\n if (!this.promise) {\n this.promise = promise();\n\n this.promise.then(\n () => {\n runInAction(() => {\n this.store[fieldName] = true;\n });\n },\n (e) => {\n runInAction(() => {\n this.errorJson(e);\n\n this.store[fieldName] = e;\n });\n },\n );\n }\n\n return SuspenseQuery.run<TReturn>(this.promise);\n };\n\n /**\n * Run subquery\n * Re-fetch data from query by hash changes in children components\n * NOTE: only client side\n */\n public subquery = <TReturn>(\n promise: () => Promise<TReturn>,\n options: ISuspenseSubqueryOptions,\n ): TReturn | undefined => {\n const { id, hash } = options;\n const subquery = this.subqueries.get(id);\n\n // skip first run\n if (!subquery) {\n this.subqueries.set(id, { hash });\n\n return undefined;\n }\n\n if (subquery?.hash === hash) {\n return SuspenseQuery.run<TReturn>(subquery?.promise);\n }\n\n const newQuery = promise();\n\n this.subqueries.set(id, { hash, promise: newQuery });\n\n return SuspenseQuery.run<TReturn>(newQuery);\n };\n\n /**\n * Change status of promise.\n * Throw promise to react suspense\n */\n public static run = <TReturn>(promise: IPromise<TReturn> | undefined): TReturn | undefined => {\n if (!promise) {\n return;\n }\n\n switch (promise.status) {\n case 'fulfilled':\n return promise.value;\n\n case 'pending':\n throw promise;\n\n case 'rejected':\n throw promise.reason;\n\n default:\n promise.status = 'pending';\n\n promise.then(\n (result) => {\n promise.status = 'fulfilled';\n promise.value = result;\n },\n (reason) => {\n promise.status = 'rejected';\n promise.reason = reason;\n },\n );\n }\n\n throw promise;\n };\n}\n\nexport default SuspenseQuery;\n"],"names":["SuspenseQuery","promise","subqueries","Map","store","params","constructor","fieldName","errorFields","this","defaultInit","init","bind","isComplete","extendObservable","observable","errorJson","e","toJSON","reduce","res","name","jsonToError","values","forEach","value","Error","message","query","then","runInAction","run","subquery","options","id","hash","get","set","newQuery","static","status","reason","result"],"mappings":"yEAuBA,MAAMA,EAIMC,QAKAC,WAAsE,IAAIC,IAKjEC,MAKAC,OAKnBC,YACEF,GACAG,UAAEA,EAAY,KAAIC,YAAEA,EAAc,CAAC,OAAQ,YAAqC,IAEhFC,KAAKL,MAAQA,EACbK,KAAKJ,OAAS,CAAEE,YAAWC,eAE3B,MAAME,EAAcN,EAAMO,MAAMC,KAAKR,GAErCA,EAAMO,KAAO,KACXF,KAAKI,aACLH,KAAe,EAGjBI,EACEV,EACA,CAAEG,CAACA,IAAY,GACf,CACEA,CAACA,GAAYQ,GAGlB,CAKSC,UAAUC,GAClBA,EAAEC,OAAS,IACTT,KAAKJ,OAAOG,YAAYW,QACtB,CAACC,EAAKC,KAAU,IACXD,EACHC,CAACA,GAAOJ,IAAII,MAEd,CAAE,EAEP,CAKSC,YAAYL,EAAUM,GAK9B,OAJAd,KAAKJ,OAAOG,YAAYgB,SAASH,IAC/BJ,EAAEI,GAAQE,IAASF,EAAK,IAGnBJ,CACR,CAOSJ,aACR,MAAMY,EAAQhB,KAAKL,MAAMK,KAAKJ,OAAOE,WAIrC,GAAkB,mBAHOkB,EAIvB,MAAMhB,KAAKa,YACT,IAAII,MAAOD,GAAOE,SAAWF,GAAOJ,MACpCI,GAIJ,OAAiB,IAAVA,CACR,CAMMG,MAAkB3B,IACvB,MAAMM,UAAEA,GAAcE,KAAKJ,OAE3B,IAAII,KAAKI,aAuBT,OAnBKJ,KAAKR,UACRQ,KAAKR,QAAUA,IAEfQ,KAAKR,QAAQ4B,MACX,KACEC,GAAY,KACVrB,KAAKL,MAAMG,IAAa,CAAI,GAC5B,IAEHU,IACCa,GAAY,KACVrB,KAAKO,UAAUC,GAEfR,KAAKL,MAAMG,GAAaU,CAAC,GACzB,KAKDjB,EAAc+B,IAAatB,KAAKR,QAAQ,EAQ1C+B,SAAW,CAChB/B,EACAgC,KAEA,MAAMC,GAAEA,EAAEC,KAAEA,GAASF,EACfD,EAAWvB,KAAKP,WAAWkC,IAAIF,GAGrC,IAAKF,EAGH,YAFAvB,KAAKP,WAAWmC,IAAIH,EAAI,CAAEC,SAK5B,GAAIH,GAAUG,OAASA,EACrB,OAAOnC,EAAc+B,IAAaC,GAAU/B,SAG9C,MAAMqC,EAAWrC,IAIjB,OAFAQ,KAAKP,WAAWmC,IAAIH,EAAI,CAAEC,OAAMlC,QAASqC,IAElCtC,EAAc+B,IAAaO,EAAS,EAOtCC,WAAuBtC,IAC5B,GAAKA,EAAL,CAIA,OAAQA,EAAQuC,QACd,IAAK,YACH,OAAOvC,EAAQwB,MAEjB,IAAK,UACH,MAAMxB,EAER,IAAK,WACH,MAAMA,EAAQwC,OAEhB,QACExC,EAAQuC,OAAS,UAEjBvC,EAAQ4B,MACLa,IACCzC,EAAQuC,OAAS,YACjBvC,EAAQwB,MAAQiB,CAAM,IAEvBD,IACCxC,EAAQuC,OAAS,WACjBvC,EAAQwC,OAASA,CAAM,IAK/B,MAAMxC,CA3BL,CA2BY"}
1
+ {"version":3,"file":"suspense-query.js","sources":["../src/suspense-query.ts"],"sourcesContent":["import { makeExported } from './make-exported';\nimport type { TInitStore } from './types';\n\nexport interface IPromise<TReturn> extends Promise<TReturn> {\n status?: 'fulfilled' | 'pending' | 'rejected';\n value?: TReturn;\n reason?: any;\n}\n\ninterface ISuspenseQueryParams {\n fieldName?: string; // field name in target store for save suspense state\n errorFields?: string[];\n}\n\ninterface ISuspenseQueryOptions {\n hash?: unknown;\n}\n\ninterface ISuspenseSubqueryOptions {\n id: string;\n hash: unknown;\n}\n\n/**\n * Run request and cache promise\n * Sync suspense status between server and client\n */\nclass SuspenseQuery {\n /**\n * @protected\n */\n protected promise: Promise<any> | undefined;\n\n /**\n * Subqueries info\n */\n protected subqueries: Map<string, { hash: unknown; promise?: IPromise<any> }> = new Map();\n\n /**\n * Target store\n */\n protected readonly store: TInitStore;\n\n /**\n * @protected\n */\n protected readonly params: Required<ISuspenseQueryParams>;\n\n /**\n * @constructor\n */\n constructor(\n store: TInitStore,\n { fieldName = 'sR', errorFields = ['name', 'message'] }: ISuspenseQueryParams = {},\n ) {\n this.store = store;\n this.params = { fieldName, errorFields };\n\n const defaultInit = store.init?.bind(store);\n\n store.init = () => {\n this.throwError(); // throw error immediately from server side if exist\n defaultInit?.();\n };\n\n makeExported(store, { [fieldName]: 'simple' });\n }\n\n /**\n * Error to json\n */\n protected errorJson(e: any): void {\n e.toJSON = () =>\n this.params.errorFields.reduce(\n (res, name) => ({\n ...res,\n [name]: e?.[name],\n }),\n {},\n );\n }\n\n /**\n * Assign custom error fields to error\n */\n protected jsonToError(e: Error, values: Record<string, any>): Error {\n this.params.errorFields.forEach((name) => {\n e[name] = values?.[name];\n });\n\n return e;\n }\n\n /**\n * Throw suspense error\n */\n protected throwError(): void {\n const value = this.store[this.params.fieldName];\n\n // pass error to error boundary\n if (value?.error) {\n throw this.jsonToError(\n new Error((value?.message ?? value?.name) as string),\n value as Record<string, any>,\n );\n }\n }\n\n /**\n * Detect if suspense is restored from server side:\n * - throw error if exist\n * - skip run suspense if already completed\n */\n protected isComplete(hash: unknown): boolean {\n const value = this.store[this.params.fieldName];\n\n // pass error to error boundary\n if (value?.error) {\n this.throwError();\n }\n\n return value?.done === true && value.hash === hash;\n }\n\n /**\n * Run request\n * Save request resolve status\n */\n public query = <TReturn>(\n promise: () => Promise<TReturn>,\n options: ISuspenseQueryOptions = {},\n ): TReturn | undefined => {\n const { hash = '' } = options;\n const { fieldName } = this.params;\n\n if (this.isComplete(hash)) {\n return;\n }\n\n if (this.store[fieldName]?.hash !== hash) {\n this.store[fieldName] = { hash, done: false };\n this.promise = undefined;\n }\n\n if (!this.promise) {\n this.promise = promise();\n\n this.promise.then(\n () => {\n this.store[fieldName] = { hash, done: true };\n },\n (e) => {\n this.errorJson(e);\n\n this.store[fieldName] = { error: e };\n },\n );\n }\n\n return SuspenseQuery.run<TReturn>(this.promise);\n };\n\n /**\n * Run subquery\n * Re-fetch data from query by hash changes in children components\n * NOTE: only client side\n */\n public subquery = <TReturn>(\n promise: () => Promise<TReturn>,\n options: ISuspenseSubqueryOptions,\n ): TReturn | undefined => {\n const { id, hash } = options;\n const subquery = this.subqueries.get(id);\n\n // skip first run\n if (!subquery) {\n this.subqueries.set(id, { hash });\n\n return undefined;\n }\n\n if (subquery?.hash === hash) {\n return SuspenseQuery.run<TReturn>(subquery?.promise);\n }\n\n const newQuery = promise();\n\n this.subqueries.set(id, { hash, promise: newQuery });\n\n return SuspenseQuery.run<TReturn>(newQuery);\n };\n\n /**\n * Change status of promise.\n * Throw promise to react suspense\n */\n public static run = <TReturn>(promise: IPromise<TReturn> | undefined): TReturn | undefined => {\n if (!promise) {\n return;\n }\n\n switch (promise.status) {\n case 'fulfilled':\n return promise.value;\n\n case 'pending':\n throw promise;\n\n case 'rejected':\n throw promise.reason;\n\n default:\n promise.status = 'pending';\n\n promise.then(\n (result) => {\n promise.status = 'fulfilled';\n promise.value = result;\n },\n (reason) => {\n promise.status = 'rejected';\n promise.reason = reason;\n },\n );\n }\n\n throw promise;\n };\n}\n\nexport default SuspenseQuery;\n"],"names":["SuspenseQuery","promise","subqueries","Map","store","params","constructor","fieldName","errorFields","this","defaultInit","init","bind","throwError","makeExported","errorJson","e","toJSON","reduce","res","name","jsonToError","values","forEach","value","error","Error","message","isComplete","hash","done","query","options","undefined","then","run","subquery","id","get","set","newQuery","static","status","reason","result"],"mappings":"kDA2BA,MAAMA,EAIMC,QAKAC,WAAsE,IAAIC,IAKjEC,MAKAC,OAKnBC,YACEF,GACAG,UAAEA,EAAY,KAAIC,YAAEA,EAAc,CAAC,OAAQ,YAAqC,IAEhFC,KAAKL,MAAQA,EACbK,KAAKJ,OAAS,CAAEE,YAAWC,eAE3B,MAAME,EAAcN,EAAMO,MAAMC,KAAKR,GAErCA,EAAMO,KAAO,KACXF,KAAKI,aACLH,KAAe,EAGjBI,EAAaV,EAAO,CAAEG,CAACA,GAAY,UACpC,CAKSQ,UAAUC,GAClBA,EAAEC,OAAS,IACTR,KAAKJ,OAAOG,YAAYU,QACtB,CAACC,EAAKC,KAAU,IACXD,EACHC,CAACA,GAAOJ,IAAII,MAEd,CAAE,EAEP,CAKSC,YAAYL,EAAUM,GAK9B,OAJAb,KAAKJ,OAAOG,YAAYe,SAASH,IAC/BJ,EAAEI,GAAQE,IAASF,EAAK,IAGnBJ,CACR,CAKSH,aACR,MAAMW,EAAQf,KAAKL,MAAMK,KAAKJ,OAAOE,WAGrC,GAAIiB,GAAOC,MACT,MAAMhB,KAAKY,YACT,IAAIK,MAAOF,GAAOG,SAAWH,GAAOJ,MACpCI,EAGL,CAOSI,WAAWC,GACnB,MAAML,EAAQf,KAAKL,MAAMK,KAAKJ,OAAOE,WAOrC,OAJIiB,GAAOC,OACThB,KAAKI,cAGgB,IAAhBW,GAAOM,MAAiBN,EAAMK,OAASA,CAC/C,CAMME,MAAQ,CACb9B,EACA+B,EAAiC,MAEjC,MAAMH,KAAEA,EAAO,IAAOG,GAChBzB,UAAEA,GAAcE,KAAKJ,OAE3B,IAAII,KAAKmB,WAAWC,GAwBpB,OApBIpB,KAAKL,MAAMG,IAAYsB,OAASA,IAClCpB,KAAKL,MAAMG,GAAa,CAAEsB,OAAMC,MAAM,GACtCrB,KAAKR,aAAUgC,GAGZxB,KAAKR,UACRQ,KAAKR,QAAUA,IAEfQ,KAAKR,QAAQiC,MACX,KACEzB,KAAKL,MAAMG,GAAa,CAAEsB,OAAMC,MAAM,EAAM,IAE7Cd,IACCP,KAAKM,UAAUC,GAEfP,KAAKL,MAAMG,GAAa,CAAEkB,MAAOT,EAAG,KAKnChB,EAAcmC,IAAa1B,KAAKR,QAAQ,EAQ1CmC,SAAW,CAChBnC,EACA+B,KAEA,MAAMK,GAAEA,EAAER,KAAEA,GAASG,EACfI,EAAW3B,KAAKP,WAAWoC,IAAID,GAGrC,IAAKD,EAGH,YAFA3B,KAAKP,WAAWqC,IAAIF,EAAI,CAAER,SAK5B,GAAIO,GAAUP,OAASA,EACrB,OAAO7B,EAAcmC,IAAaC,GAAUnC,SAG9C,MAAMuC,EAAWvC,IAIjB,OAFAQ,KAAKP,WAAWqC,IAAIF,EAAI,CAAER,OAAM5B,QAASuC,IAElCxC,EAAcmC,IAAaK,EAAS,EAOtCC,WAAuBxC,IAC5B,GAAKA,EAAL,CAIA,OAAQA,EAAQyC,QACd,IAAK,YACH,OAAOzC,EAAQuB,MAEjB,IAAK,UACH,MAAMvB,EAER,IAAK,WACH,MAAMA,EAAQ0C,OAEhB,QACE1C,EAAQyC,OAAS,UAEjBzC,EAAQiC,MACLU,IACC3C,EAAQyC,OAAS,YACjBzC,EAAQuB,MAAQoB,CAAM,IAEvBD,IACC1C,EAAQyC,OAAS,WACjBzC,EAAQ0C,OAASA,CAAM,IAK/B,MAAM1C,CA3BL,CA2BY"}