UNPKG

@qundus/qstate

Version:
1 lines 9.94 kB
{"version":3,"sources":["../../../src/core/persist-options/persist-options-from-setup.ts","../../../src/core/persist-options/persist-options-from-store.ts"],"names":["persistOptionsFromSetup","_base","base","target","__spreadValues","persistOptionsForDerived","persistOptionsFromStore","store","_options","storeOptions","persistOptionsFromStoreDerived"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { NanoAnyStore, NanoReadable, Options, OptionsDerived } from \"../../_model\";\nimport type { MergedOptions, MergedOptionsDerived, OptionsSetup } from \"./_model\";\n\nexport function persistOptionsFromSetup<G extends OptionsSetup<NanoAnyStore>>(_base?: G) {\n\t// first mix both incase of store specific options like atom persistent\n\tconst base = _base as G;\n\t// const base = Object.assign({}, _base ?? {}) as G;\n\n\t// TODO: process setup options\n\n\t// for now types have to be defined manually\n\treturn function persistOptionsFromSetupRoot<S extends NanoAnyStore, O extends Options<S>>(\n\t\ttarget?: O,\n\t): MergedOptions<S, O, G> {\n\t\tif (target == null) {\n\t\t\tif (_base == null) {\n\t\t\t\treturn null as any;\n\t\t\t}\n\t\t\treturn base as any;\n\t\t}\n\t\ttarget = { ...base, ...target };\n\n\t\t// special handling\n\t\t// addons\n\t\tif (base?.addons != null || target?.addons != null) {\n\t\t\ttarget.addons = { ...(base?.addons as any), ...target?.addons };\n\t\t}\n\n\t\t// hooks\n\t\tif (base?.hooks != null || target?.hooks != null) {\n\t\t\ttarget.hooks = { ...(base?.hooks as any), ...target?.hooks };\n\t\t}\n\n\t\t// events\n\t\tif (base?.events != null || target?.events != null) {\n\t\t\ttarget.events = { ...(base?.events as any), ...target?.events };\n\t\t\t// console.log(\"merging options :: \", target.events);\n\t\t}\n\n\t\treturn target as any;\n\t};\n}\n\nexport function persistOptionsForDerived<G extends OptionsDerived | Options<NanoAnyStore>>(\n\t_base?: G,\n) {\n\t// first mix both incase of store specific options like atom persistent\n\tconst base = Object.assign({}, _base ?? {}) as G;\n\n\t// TODO: process setup options\n\n\t// for now types have to be defined manually\n\treturn function persistOptionsForDerivedRoot<S extends NanoReadable, O extends OptionsDerived>(\n\t\ttarget?: O,\n\t): MergedOptionsDerived<S, O, G> {\n\t\tif (target == null) {\n\t\t\tif (_base == null) {\n\t\t\t\treturn null as any;\n\t\t\t}\n\t\t\treturn base as any;\n\t\t}\n\t\ttarget = { ...base, ...target };\n\n\t\t// special handling\n\t\t// hooks\n\t\tif (base?.hooks != null || target?.hooks != null) {\n\t\t\ttarget.hooks = { ...(base?.hooks as any), ...target?.hooks };\n\t\t}\n\n\t\t// events\n\t\t// if (target?.events != null) {\n\t\t// \t// why even merge on error??????!!!\n\t\t// \t// let baseOnError = null as null | ((error: unknown) => void);\n\t\t// \t// if (base?.events != null && \"onError\" in base.events) {\n\t\t// \t// \tbaseOnError = base.events.onError as typeof baseOnError;\n\t\t// \t// }\n\t\t// \t// if (baseOnError != null || target?.events?.onError != null) {\n\t\t// \t// \tresult.events.onError = (err) => {\n\t\t// \t// \t\tbaseOnError?.(err);\n\t\t// \t// \t\ttarget?.events?.onError?.(err);\n\t\t// \t// \t};\n\t\t// \t// }\n\t\t// }\n\n\t\treturn target as any;\n\t};\n}\n//\n// export type MergedOptionsDerived<\n// \tG extends OptionsDerived | Options<NanoAnyStore> | unknown,\n// \tD extends OptionsDerived | unknown,\n// > = G extends OptionsDerived | Options<NanoAnyStore>\n// \t? {\n// \t\t\thooks: D extends OptionsDerived ? G[\"hooks\"] & D[\"hooks\"] : G[\"hooks\"];\n// \t\t\tevents: D extends OptionsDerived\n// \t\t\t\t? G extends OptionsDerived\n// \t\t\t\t\t? G[\"events\"] & D[\"events\"]\n// \t\t\t\t\t: D[\"events\"]\n// \t\t\t\t: G[\"events\"];\n// \t\t\tpersistOptions: D extends OptionsDerived ? D[\"persistOptions\"] : unknown;\n// \t\t}\n// \t: D;\n// export function mergeOptionsDerived<\n// \tG extends OptionsDerived | Options<NanoAnyStore> | undefined | null,\n// \tD extends OptionsDerived | undefined | null,\n// >(base?: G, target?: D) {\n// \tif (base == null && target == null) {\n// \t\treturn null as any;\n// \t}\n\n// \t// first mix both incase of store specific options like atom persistent\n// \tconst result = { ...base, ...target, events: null, hooks: null } as unknown as OptionsDerived;\n\n// \t// hooks\n// \tif (base?.hooks == null && target?.hooks == null) {\n// \t\tresult.hooks = null;\n// \t} else {\n// \t\tresult.hooks = {};\n// \t\tif (base?.hooks != null) {\n// \t\t\tresult.hooks = { ...base?.hooks };\n// \t\t}\n// \t\tif (target?.hooks != null) {\n// \t\t\tresult.hooks = { ...(result.hooks as any), ...target?.hooks };\n// \t\t}\n// \t}\n\n// \t// events\n// \tif (base?.events == null && target?.events == null) {\n// \t\tresult.events = null as any;\n// \t} else {\n// \t\tresult.events = {};\n// \t\tlet baseOnError = null as null | ((error: unknown) => void);\n// \t\t// @ts-ignore\n// \t\tif (base?.events != null && \"onError\" in base.events) {\n// \t\t\tbaseOnError = base.events.onError as typeof baseOnError;\n// \t\t}\n// \t\tif (baseOnError != null || target?.events?.onError != null) {\n// \t\t\tresult.events.onError = (err) => {\n// \t\t\t\tbaseOnError?.(err);\n// \t\t\t\ttarget?.events?.onError?.(err);\n// \t\t\t};\n// \t\t}\n// \t}\n\n// \treturn result as MergedOptionsDerived<G, D>;\n// }\n","import type {\n\tNanoAnyStore,\n\tNanoReadable,\n\tOptions,\n\tOptionsDerived,\n\tStoreWithOptions,\n} from \"../../_model\";\nimport { persistOptionsForDerived, persistOptionsFromSetup } from \"./persist-options-from-setup\";\n\nexport const persistOptionsFromStore = <\n\tS extends NanoAnyStore,\n\tO extends Options<S>,\n\tOther extends StoreWithOptions,\n>(\n\tstore: Other,\n\t_options: O | undefined,\n) => {\n\tif (store == null) {\n\t\tthrow new Error(\"qstate: persistOptionsFromStore.store is null!\");\n\t}\n\tif ((store as any).__options == null) {\n\t\tthrow new Error(\"qstate: persistOptionsFromStore.store must set option.persistOptions!\");\n\t}\n\tconst storeOptions = store.__options as Other[\"__options\"];\n\t// TODO: allow for certain keys to be chosen from base options\n\t// let options = {} as unknown as Options<NanoAtom<T>>;\n\t// if (keys.length <= 0) {\n\t// \toptions = other.__options;\n\t// } else {\n\t// \tfor (const _key in other.__options) {\n\t// \t\tconst key = _key as keyof Options<NanoAtom<T>>;\n\t// \t\toptions[key] = other.__options[key];\n\t// \t}\n\t// }\n\tconst optionsMerger = persistOptionsFromSetup<Other[\"__options\"]>(storeOptions);\n\tconst options = optionsMerger<S, O>(_options);\n\treturn options;\n};\n\nexport const persistOptionsFromStoreDerived = <\n\tS extends NanoReadable | NanoAnyStore,\n\tO extends OptionsDerived,\n\tOther extends StoreWithOptions,\n>(\n\tstore: Other,\n\t_options: O | undefined,\n) => {\n\tif (store == null) {\n\t\tthrow new Error(\"qstate: persistOptionsFromStoreDerived.store is null!\");\n\t}\n\tif ((store as any).__options == null) {\n\t\tthrow new Error(\"qstate: persistOptionsFromStoreDerived.store must set option.persistOptions!\");\n\t}\n\tconst storeOptions = store.__options as Other[\"__options\"];\n\t// TODO: allow for certain keys to be chosen from base options\n\t// let options = {} as unknown as Options<NanoAtom<T>>;\n\t// if (keys.length <= 0) {\n\t// \toptions = other.__options;\n\t// } else {\n\t// \tfor (const _key in other.__options) {\n\t// \t\tconst key = _key as keyof Options<NanoAtom<T>>;\n\t// \t\toptions[key] = other.__options[key];\n\t// \t}\n\t// }\n\tconst optionsMerger = persistOptionsForDerived<Other[\"__options\"]>(storeOptions);\n\tconst options = optionsMerger<S, O>(_options);\n\treturn options;\n};\n"]}