solid-new-bucket
Version:
Better Signal API for SolidJS
1 lines • 33.4 kB
Source Map (JSON)
{"version":3,"sources":["../src/arrayHelpers.ts","../src/buckets.ts","../src/checks.ts","../src/wrappers.ts","../src/converters.ts","../src/generators.ts","../src/others.ts","../src/conditionals.ts","../src/Handle.ts","../src/Disposable.ts","../src/SimpleEventRegistry.ts"],"sourcesContent":["import { Func } from \".\";\n\n/**\n * Filter out and remove elements from array.\n * @param arr array\n * @param filter filter\n * @returns new array\n */\nexport function removeElementsFromArray<T>(arr: T[], filter: (t: T) => boolean): T[] {\n const idx: number[] = [];\n arr.forEach((t, i) => {\n if (filter(t)) {\n idx.push(i);\n }\n });\n return idx.map(i => arr.splice(i, 1)[0]);\n}\n\n/**\n * Copy range or array.\n * @param arr array\n * @param start start pos\n * @param end end pos\n * @returns sub range of array\n */\nexport function copyOfRange<T>(arr: T[], start: number, end: number): T[] {\n const r: T[] = [];\n start = Math.max(0, start);\n end = Math.min(arr.length, end);\n for (let i = start; i < end; i++) {\n r.push(arr[i]);\n }\n return r;\n}\n\n/**\n * Find first element in array which passes test.\n * @param arr array\n * @param test test\n * @returns index\n */\nexport function indexOf<T>(arr: T[], test: Func<T, boolean>) {\n for (let i = 0; i < arr.length; i++) {\n if (test(arr[i])) {\n return i;\n }\n }\n return -1;\n}\n","import { createSignal, Accessor, createMemo, SignalOptions, splitProps, untrack } from \"solid-js\"\nimport { Bucket, Mapper, ObjectIndex, StampedBucket, StampedData } from \".\";\n\n\n/**\n * Stamped Bucket help to trigger rerendering after updating object without recreate new object.\n * @returns StampedBucket<T>\n */\nexport function stampedBucket<T>(value: T, options?: {\n beforeUpdate?: (value: T) => void;\n afterUpdate?: (value: T) => void;\n localStorageName?: string;\n}): StampedBucket<T> {\n // load from local storage\n if (options?.localStorageName) {\n const raw = localStorage.getItem(options.localStorageName);\n if (raw) {\n if (raw === 'undefined') {\n value = undefined as any;\n } else {\n value = JSON.parse(raw);\n }\n }\n }\n\n const [timestamp, setTimestamp] = createSignal(performance.now());\n const v: Accessor<StampedData<T>> = createMemo(() => {\n return {\n timestamp: timestamp(),\n data: value,\n markChanged() {\n setTimestamp(performance.now());\n }\n };\n });\n const setV = (newValue: T) => {\n value = newValue;\n setTimestamp(new Date().getTime());\n };\n\n const call = function(updater?: (v: T) => void) {\n if (updater) {\n options?.beforeUpdate?.(value)\n\n updater(value)\n\n // save to local storage\n if (options?.localStorageName) {\n localStorage.setItem(options.localStorageName, JSON.stringify(value));\n }\n\n // mark changed\n setTimestamp(new Date().getTime());\n \n options?.afterUpdate?.(value)\n }\n\n return v().data\n }\n\n call.map = <O>(mapper: (v: T) => O) => {\n return mapper(v().data);\n };\n\n call.markChanged = () => {\n setTimestamp(new Date().getTime())\n };\n\n call.reset = (v: T) => {\n setV(v)\n };\n\n return call\n}\n\nfunction getFieldOfObject(o: any, paths: ObjectIndex[]) {\n for (let i = 0; i < paths.length - 1; i++) {\n o = o[paths[i]];\n if (!o) {\n throw new Error(`cannot find ${paths.join('.')} in ${o}`)\n }\n }\n return o[paths[paths.length - 1]]\n}\n\nfunction setFieldOfObject(o: any, newValue: any, paths: ObjectIndex[]) {\n for (let i = 0; i < paths.length - 1; i++) {\n o = o[paths[i]];\n if (!o) {\n throw new Error(`cannot find ${paths.join('.')} in ${o}`)\n }\n }\n o[paths[paths.length - 1]] = newValue\n}\n\nexport function asBucket<O, FieldType, DecadeType>(s: StampedBucket<O>, path: ObjectIndex[], mapper?: Mapper<FieldType, DecadeType>): Bucket<FieldType> {\n const getField = (data: O) => {\n let v = getFieldOfObject(data, path)\n return mapper ? mapper.from?.(v) : v\n }\n const setField = (data: O, v: any) => {\n if (mapper) {\n v = mapper.to?.(v)\n }\n setFieldOfObject(data, v, path)\n }\n return (t) => {\n if (t != undefined) {\n s(data => {\n if (typeof(t) === \"function\") {\n const oldValue = getField(data)\n // @ts-ignore\n setField(data, t(oldValue))\n } else {\n setField(data, t)\n }\n })\n\n }\n return getField(s())\n }\n}\n\nexport function asAccessor<T, K extends (keyof T)>(v: T | Accessor<T>, k: K): Accessor<T[K]> {\n return () => {\n if (typeof(v) === \"function\") {\n return (v as Function)()[k]\n }\n return v[k]\n }\n}\n\n/**\n * Create a bucket to track data.\n * @param value value or Accessor of value\n * @param options options\n * @returns Bucket<T>\n */\nexport function bucket<T>(value: T | Accessor<T>, options?: {\n useValueAsAccessor?: boolean\n beforeUpdate?: (newValue: T) => void\n afterUpdate?: (newValue: T) => void\n localStorageName?: string;\n} & SignalOptions<T>): Bucket<T> {\n if (options?.useValueAsAccessor && typeof(value) === \"function\") {\n const [_, others] = splitProps(options, [\"useValueAsAccessor\"])\n const memo = createMemo(() => bucket<T>((value as any)(), others))\n return (t) => {\n // @ts-ignore\n return memo()(t)\n }\n }\n \n const [local, others] = options && splitProps(options, [\"beforeUpdate\", \"afterUpdate\", \"localStorageName\"]) || [];\n\n // load from local storage\n if (local?.localStorageName) {\n const raw = localStorage.getItem(local.localStorageName);\n if (raw !== null) {\n if (raw === 'undefined') {\n value = undefined as any;\n } else {\n value = JSON.parse(raw);\n }\n }\n }\n\n // @ts-ignore\n const [v, setV] = createSignal<T>(value, others)\n\n const b = function(t) {\n if (t !== undefined) {\n const newValue = setV((prev) => {\n local?.beforeUpdate?.(prev);\n if (typeof(t) === \"function\") {\n return (t as Function)(prev);\n } else {\n return t;\n }\n });\n // save to local storage\n if (local?.localStorageName) {\n localStorage.setItem(local.localStorageName, JSON.stringify(newValue));\n }\n local?.afterUpdate?.(newValue);\n return newValue;\n }\n return v()\n } as Bucket<T>;\n\n Object.defineProperty(b, 'value', {\n get: function() {\n return untrack(v);\n },\n });\n\n return b;\n}\n","\n/**\n * Check if array or string is not empty.\n * @param v array of any, string or undefined\n * @returns true if target is not empty\n */\nexport function isNotEmpty<T>(v?: T[]): boolean\nexport function isNotEmpty(v?: string): boolean\nexport function isNotEmpty(v: any) {\n if (!v) return false\n if (typeof(v) === \"string\") {\n return v.length > 0\n }\n if (typeof(v) === \"object\") {\n if (Array.isArray(v)) {\n return v.length > 0\n }\n return Object.keys(v).length > 0\n }\n return false\n}\n\n/**\n * Check if value is number.\n * @param v any\n * @returns true if value is number\n */\nexport function isNumber(v: any) {\n return typeof(v) === \"number\";\n}\n\n/**\n * Compare two date string.\n * @param a date 1\n * @param b date 2\n * @returns true if a is later than b\n */\nexport function compareDateString(a: string, b: string): number {\n return Date.parse(a) - Date.parse(b);\n}\n\n/**\n * Check whether there is an element in b exists in a as well.\n * @param a array 1\n * @param b array 2\n * @returns boolean\n */\nexport function containsAny(a: any[], b: any[]) {\n for (let i of a) {\n for (let j of b) {\n if (i === j) {\n return true;\n }\n }\n }\n return false;\n}\n","\n\nexport function wrapDateNumber(v: number, bits: number = 2) {\n if (v == 0) {\n return '0'.repeat(bits);\n }\n \n let n = v;\n while (n > 0) {\n n = Math.floor(n / 10);\n bits--;\n }\n return bits > 0 ? '0'.repeat(bits) + v : v;\n}\n\nexport function wrapString(v: any): string {\n if (typeof(v) === \"string\") {\n return v;\n }\n return v?.toString() || \"\";\n}\n\nexport function wrapNumber(v: any) {\n if (typeof(v) === \"number\") {\n return v;\n }\n return 0;\n}\n","import { wrapDateNumber } from \"./wrappers\";\n\n/**\n * Parse and format timestamp from number to string.\n * @param timestamp time\n * @param showTime show only date if false\n * @param showMilliseconds show ms if true\n * @returns formatted string\n */\nexport function parseTimestamp(timestamp: number, showTime?: boolean, showMilliseconds?: boolean) {\n const date = new Date(timestamp);\n // TODO: toLocaleString\n // return date.toLocaleString(undefined, {\n // });\n let r = `${wrapDateNumber(date.getFullYear())}-${wrapDateNumber(date.getMonth() + 1)}-${wrapDateNumber(date.getDate())}`;\n if (showTime) {\n r += ` ${wrapDateNumber(date.getHours())}:${wrapDateNumber(date.getMinutes())}:${wrapDateNumber(date.getSeconds())}`;\n }\n if (showMilliseconds) {\n r += `.${wrapDateNumber(date.getMilliseconds(), 3)}`;\n };\n return r;\n}\n\nexport function toCapital(v: string) {\n return v.charAt(0).toUpperCase() + v.substring(1);\n}","\n/**\n * Genereate a sequence.\n * @param start start\n * @param end end\n * @param step step\n * @returns array\n */\nexport function sequence(start: number, end: number, step: number = 1) {\n const r = [];\n for (let i = start; i < end; i += step) {\n r.push(i);\n }\n return r;\n}\n\n/**\n * Generate a array of size.\n * @param size size\n * @returns \n */\nexport function iterate(size: number) {\n return Array.from(Array(size).keys())\n}","import { Context, createContext, useContext } from \"solid-js\";\n\nexport function useCtx<T>(c: Context<T>, displayName?: string): T {\n const context = useContext(c);\n if (!context) {\n throw new Error(\"cannot find a context of \" + (displayName || 'unknown'))\n }\n return context;\n}\n\ntype UseFunc<T> = () => T;\n\n/**\n * Create context and use function\n * @returns [context, useContext]\n */\nexport function context<T>(displayName?: string): [Context<T | undefined>, UseFunc<T>] {\n const ctx = createContext<T>();\n const use = function () {\n return useCtx<T>(ctx as any, displayName);\n }\n return [ctx, use];\n}\n\nexport function names(...v: (string | undefined)[]) {\n return v.filter((name) => Boolean(name)).join(' ');\n}\n\nexport function clone(obj: any) {\n const type = typeof(obj);\n switch (type) {\n case 'object': {\n let r: any = Array.isArray(obj) ? [] : {};\n for (let key of Object.keys(obj)) {\n r[key] = clone(obj[key]);\n }\n return r;\n }\n default:\n return obj;\n }\n}\n","import { Supplier } from \".\"\n\n/**\n * Invoke function or return value if condition is true.\n * @param condition any\n * @param value function to be invoked or value to be return\n * @param defaultValue fallback value, optional\n */\nexport function conditional<T>(condition: any, value: () => void): void;\nexport function conditional<T>(condition: any, value: T, defaultValue?: T): T;\nexport function conditional<T>(condition: any, value: Supplier<T>, defaultValue?: T): T;\nexport function conditional(condition: any, value: any, defaultValue?: any) {\n if (typeof(value) === \"function\") {\n if (condition) {\n const r = value()\n if (r) {\n return r\n }\n }\n return defaultValue\n }\n\n if (typeof(value === \"string\")) {\n return condition ? value : (defaultValue || '')\n }\n\n if (typeof(value) === \"number\") {\n return condition ? value : (defaultValue || 0)\n }\n\n if (condition) {\n return value\n } else if (defaultValue !== undefined && defaultValue !== null) {\n return defaultValue\n }\n}\n","import { onCleanup, onMount, untrack } from \"solid-js\";\nimport { DisposableCollector, DisposableSupport } from \"./Disposable\";\nimport { EventDefinitions, SimpleEventRegistry } from \"./SimpleEventRegistry\";\nimport { Consumer, IDisposableCollector, Callback } from \".\";\nimport { bucket } from \"./buckets\";\n\nexport interface HandleProps<T> {\n handle?: Handle<T>;\n}\n\ninterface HandleFuncs<T> {\n get mounted(): boolean;\n safeAccess<K extends keyof T, E = T[K]>(key: K): E | undefined;\n}\n\ninterface HandleHook {\n onMount(callback: Consumer<IDisposableCollector>): void;\n /**\n * Called when all SolidJS onMount hooks are invoked.\n * @param callback callback\n */\n onReady(callback: Consumer<IDisposableCollector>): void;\n onCleanup(callback: Callback): void;\n}\n\ninterface HandleHookImpl<T> {\n mount(target: T): void;\n cleanup(): void;\n}\n\ninterface HasMount {\n mount(target: any): void;\n}\ninterface HasCleanup {\n cleanup(): void;\n}\ninterface HasMounted {\n get mounted(): boolean;\n}\ninterface HasSafeAccess<T> {\n safeAccess<K extends keyof T, E = T[K]>(key: K): E | undefined;\n}\ninterface HasOnMount {\n onMount: (callback: Consumer<IDisposableCollector>) => void;\n}\ninterface HasOnReady {\n onReady: (callback: Consumer<IDisposableCollector>) => void;\n}\ninterface HasOnCleanup {\n onCleanup: (callback: Callback) => void;\n}\n\nexport type Handle<T> = T extends (HasMount | HasCleanup | HasMounted | HasSafeAccess<T> | HasOnMount | HasOnReady | HasOnCleanup) ?\n never : T & HandleFuncs<T> & HandleHook;\n\nclass ProxyHandlerImpl<T extends Object> implements ProxyHandler<T> {\n\n private target = bucket<T | null>(null);\n private mountCallbacks: Consumer<IDisposableCollector>[] = [];\n private readyCallbacks: Consumer<IDisposableCollector>[] = [];\n private cleanupCallbacks: Callback[] = [];\n\n private readonly internalMethods = {\n onMount: (callback: Consumer<IDisposableCollector>) => {\n if (untrack(this.target)) {\n // Execute directly.\n const collector = new DisposableCollector();\n\n callback(collector);\n\n if (collector.size() > 0) {\n this.cleanupCallbacks.push(() => {\n collector.disposeAll();\n });\n }\n } else {\n this.mountCallbacks.push(callback);\n }\n },\n onReady: (callback: Callback) => {\n if (untrack(this.target)) {\n // Execute directly.\n const collector = new DisposableCollector();\n\n callback(collector);\n\n if (collector.size() > 0) {\n this.cleanupCallbacks.push(() => {\n collector.disposeAll();\n });\n }\n } else {\n this.readyCallbacks.push(callback);\n }\n },\n onCleanup: (callback: Callback) => {\n this.cleanupCallbacks.push(callback);\n },\n mounted: () => {\n return Boolean(untrack(this.target));\n },\n safeAccess: (k: any) => {\n const t = this.target();\n if (t) {\n const p = t[k as keyof T];\n if (typeof (p) === 'function') {\n return p.bind(t);\n }\n return p;\n }\n },\n mount: (target: T) => {\n this.target(target);\n const collector = new DisposableCollector();\n this.mountCallbacks.forEach(c => c(collector));\n if (collector.size() > 0) {\n this.cleanupCallbacks.push(() => {\n collector.disposeAll();\n });\n }\n\n if (this.readyCallbacks.length > 0) {\n // Add onMount listener in onMount to make sure this is the last one.\n onMount(() => {\n const collector = new DisposableCollector();\n this.readyCallbacks.forEach(c => c(collector));\n if (collector.size() > 0) {\n this.cleanupCallbacks.push(() => {\n collector.disposeAll();\n });\n };\n });\n }\n },\n cleanup: () => {\n this.cleanupCallbacks.forEach(c => c());\n this.target(null);\n }\n }\n\n get(_: T, methodName: string | symbol, proxy: any): any {\n if (methodName in this.internalMethods) {\n if (methodName === 'mounted') {\n return this.internalMethods['mounted']();\n }\n return this.internalMethods[methodName as keyof typeof this.internalMethods];\n }\n\n const target = untrack(this.target);\n if (!target) {\n throw new Error(`Target is not mounted yet, cannot access ${String(methodName)}.`);\n }\n\n const result = target?.[methodName as keyof T];\n if (typeof (result) === 'function') {\n return result.bind(target);\n }\n return result;\n }\n}\n\nexport function handle<T extends Object>(): Handle<T> {\n const handler = new ProxyHandlerImpl();\n const proxy = new Proxy({}, handler);\n return proxy as Handle<T>;\n}\n\nexport function completeHandle<T extends Object, I extends T>(target: I, handle?: Handle<T>) {\n if (!handle) return;\n\n const h = handle as any as HandleHookImpl<T>;\n\n onMount(() => {\n h.mount(target);\n });\n\n onCleanup(() => {\n h.cleanup();\n });\n}\n\nexport class HandleTarget<T> extends DisposableSupport {\n\n constructor(handle?: Handle<T>) {\n super();\n completeHandle(this, handle);\n }\n}\n\nexport class EventSupportedHandleTarget<T, ET extends EventDefinitions>\n extends SimpleEventRegistry<ET> {\n\n protected readonly dc = new DisposableCollector();\n\n constructor(handle?: Handle<T>) {\n super();\n completeHandle(this, handle);\n\n onCleanup(() => {\n this.dc.disposeAll();\n });\n }\n}","import { onCleanup } from \"solid-js\";\nimport { IDisposableCollector, IDisposable } from \".\";\n\nexport class DisposableSupport {\n\n protected readonly dc = new DisposableCollector();\n\n constructor() {\n onCleanup(() => {\n this.dc.disposeAll();\n });\n }\n}\n\nexport class DisposableCollector implements IDisposableCollector {\n\n private dc: IDisposable[] = [];\n\n size() {\n return this.dc.length;\n }\n\n collect(disposable: IDisposable) {\n this.dc.push(disposable);\n }\n\n disposeAll() {\n this.dc.forEach(d => d.dispose());\n }\n}","import { IDisposable, IDisposableCollector } from \".\";\n\ntype EventHandler = (...args: any[]) => void | EventHandlingResult | Promise<void | EventHandlingResult>;\n\nexport type EventDefinitions = Record<string, EventHandler>;\n\nexport type Events<D extends EventDefinitions> = { [K in keyof D]: K };\n\nexport interface IEventRegistry<ED extends EventDefinitions> {\n emit<E extends keyof ED>(event: E, ...args: Parameters<ED[E]>): any;\n emitAsync<E extends keyof ED>(event: E, ...args: Parameters<ED[E]>): Promise<any>;\n\n /**\n * Listen event.\n * \n * @deprecated\n * @param event \n * @param callback \n * @returns disposable\n */\n on<E extends keyof ED>(event: E, callback: ED[E]): IDisposable;\n\n /**\n * Listen event.\n * @param event \n * @param callback \n * @param dc disposable collector\n */\n on<E extends keyof ED>(event: E, callback: ED[E], dc: IDisposableCollector): void;\n\n once<E extends keyof ED>(event: E, callback: ED[E]): void;\n}\n\nenum EventHandlingAction {\n Forward,\n Terminate\n}\n\nexport function forward(params?: any): EventHandlingResult {\n return { action: EventHandlingAction.Forward, params };\n}\n\nexport function terminate(params?: any): EventHandlingResult {\n return { action: EventHandlingAction.Terminate, params };\n}\n\nexport interface EventHandlingResult {\n action: EventHandlingAction;\n params: any;\n}\n\nexport abstract class SimpleEventRegistry<ED extends EventDefinitions> implements IEventRegistry<ED> {\n\n private registry: Map<any, Set<EventHandler>> = new Map();\n\n public emit<E extends keyof ED>(event: E, ...args: Parameters<ED[E]>) {\n let handlers = this.registry.get(event);\n let eventResult: any;\n\n if (handlers) {\n for (const cb of handlers) {\n let r = cb(...args);\n if (r) {\n if (r instanceof Promise) {\n throw new Error('emit not support Promise');\n }\n\n if (typeof (r) === 'object') {\n const { action, params } = r;\n if (action === EventHandlingAction.Terminate) {\n return params;\n } else {\n eventResult = params;\n }\n }\n }\n }\n }\n\n return eventResult;\n }\n\n public async emitAsync<E extends keyof ED>(event: E, ...args: Parameters<ED[E]>) {\n let handlers = this.registry.get(event);\n let eventResult: any;\n\n if (handlers) {\n for (const cb of handlers) {\n let r = cb(...args);\n if (r) {\n if (r instanceof Promise) {\n r = await r;\n }\n if (typeof (r) === 'object') {\n const { action, params } = r;\n if (action === EventHandlingAction.Terminate) {\n return params;\n } else {\n eventResult = params;\n }\n }\n }\n }\n }\n\n return eventResult;\n }\n\n /**\n * Listen event.\n * \n * @deprecated\n * @param event \n * @param callback \n * @returns disposable\n */\n public on<E extends keyof ED>(event: E, callback: ED[E]): IDisposable;\n public on<E extends keyof ED>(event: E, callback: ED[E], dc: IDisposableCollector): void;\n public on<E extends keyof ED>(event: E, callback: ED[E], dc?: IDisposableCollector): IDisposable | undefined {\n let set = this.registry.get(event);\n if (!set) {\n set = new Set();\n this.registry.set(event, set);\n }\n set.add(callback);\n\n const disposable: IDisposable = { dispose: () => this.off(event, callback) };\n if (dc) {\n dc.collect(disposable);\n } else {\n return disposable;\n }\n }\n\n once<E extends keyof ED>(event: E, callback: ED[E]): void {\n const disposable = this.on(event, ((args) => {\n const r = callback(args);\n disposable.dispose();\n return r;\n }) as ED[E]);\n }\n\n private off<E extends keyof ED>(event: E, callback: EventHandler): void {\n let set = this.registry.get(event);\n if (set) {\n set.delete(callback!);\n }\n }\n}\n\nexport class Trace {\n\n constructor(readonly source: any, readonly parent?: any) {\n }\n}\n"],"mappings":"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","names":["v","others","context","onCleanup","untrack","untrack","collector","handle","onCleanup"]}