solid-use
Version:
A collection of SolidJS utilities
8 lines (7 loc) • 3.48 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../src/props.ts"],
"sourcesContent": ["import { createMemo } from 'solid-js';\n\nexport function omitProps<T extends Record<string, any>, K extends keyof T>(\n value: T,\n keys: K[],\n): Omit<T, K> {\n const newObject = {};\n\n const currentKeys = Object.keys(value);\n\n for (let i = 0, len = currentKeys.length; i < len; i += 1) {\n const key = currentKeys[i];\n if (!keys.includes(key as K)) {\n Object.defineProperty(newObject, key, {\n get() {\n return value[key];\n },\n configurable: true,\n enumerable: true,\n });\n }\n }\n\n return newObject as Omit<T, K>;\n}\n\nexport function pickProps<T extends Record<string, any>, K extends keyof T>(\n value: T,\n keys: K[],\n): Pick<T, K> {\n const newObject = {};\n\n const currentKeys = Object.keys(value);\n\n for (let i = 0, len = currentKeys.length; i < len; i += 1) {\n const key = currentKeys[i];\n if (keys.includes(key as K)) {\n Object.defineProperty(newObject, key, {\n get() {\n return value[key];\n },\n configurable: true,\n enumerable: true,\n });\n }\n }\n\n return newObject as Pick<T, K>;\n}\n\ntype ReactiveObject = Record<string | symbol, any> | any[];\n\nexport type Spread<T extends ReactiveObject> = {\n [key in keyof T]: Readonly<() => T[key]>;\n};\n\nexport type KeyType<T extends ReactiveObject> = T extends any[]\n ? number\n : keyof T;\n\nexport function destructure<T extends ReactiveObject>(source: T): Spread<T> {\n const proxy = new Proxy((Array.isArray(source) ? [] : {}) as Spread<T>, {\n get(target, key) {\n const ref = Reflect.get(target, key);\n if (ref) {\n return ref;\n }\n const newRef = createMemo(() => source[key as keyof T]);\n Reflect.set(target, key, newRef);\n return newRef;\n },\n });\n\n return proxy;\n}\n\nexport function spread<T extends ReactiveObject>(source: T): Spread<T> {\n const proxy = (Array.isArray(source) ? [] : {}) as Spread<T>;\n\n for (const key of Object.keys(source)) {\n const k = key as keyof Spread<T>;\n proxy[k] = createMemo(() => source[k]);\n }\n\n return proxy;\n}\n"],
"mappings": ";AAAA,SAAS,kBAAkB;AAEpB,SAAS,UACd,OACA,MACY;AACZ,QAAM,YAAY,CAAC;AAEnB,QAAM,cAAc,OAAO,KAAK,KAAK;AAErC,WAAS,IAAI,GAAG,MAAM,YAAY,QAAQ,IAAI,KAAK,KAAK,GAAG;AACzD,UAAM,MAAM,YAAY,CAAC;AACzB,QAAI,CAAC,KAAK,SAAS,GAAQ,GAAG;AAC5B,aAAO,eAAe,WAAW,KAAK;AAAA,QACpC,MAAM;AACJ,iBAAO,MAAM,GAAG;AAAA,QAClB;AAAA,QACA,cAAc;AAAA,QACd,YAAY;AAAA,MACd,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,UACd,OACA,MACY;AACZ,QAAM,YAAY,CAAC;AAEnB,QAAM,cAAc,OAAO,KAAK,KAAK;AAErC,WAAS,IAAI,GAAG,MAAM,YAAY,QAAQ,IAAI,KAAK,KAAK,GAAG;AACzD,UAAM,MAAM,YAAY,CAAC;AACzB,QAAI,KAAK,SAAS,GAAQ,GAAG;AAC3B,aAAO,eAAe,WAAW,KAAK;AAAA,QACpC,MAAM;AACJ,iBAAO,MAAM,GAAG;AAAA,QAClB;AAAA,QACA,cAAc;AAAA,QACd,YAAY;AAAA,MACd,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;AAYO,SAAS,YAAsC,QAAsB;AAC1E,QAAM,QAAQ,IAAI,MAAO,MAAM,QAAQ,MAAM,IAAI,CAAC,IAAI,CAAC,GAAiB;AAAA,IACtE,IAAI,QAAQ,KAAK;AACf,YAAM,MAAM,QAAQ,IAAI,QAAQ,GAAG;AACnC,UAAI,KAAK;AACP,eAAO;AAAA,MACT;AACA,YAAM,SAAS,WAAW,MAAM,OAAO,GAAc,CAAC;AACtD,cAAQ,IAAI,QAAQ,KAAK,MAAM;AAC/B,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEO,SAAS,OAAiC,QAAsB;AACrE,QAAM,QAAS,MAAM,QAAQ,MAAM,IAAI,CAAC,IAAI,CAAC;AAE7C,aAAW,OAAO,OAAO,KAAK,MAAM,GAAG;AACrC,UAAM,IAAI;AACV,UAAM,CAAC,IAAI,WAAW,MAAM,OAAO,CAAC,CAAC;AAAA,EACvC;AAEA,SAAO;AACT;",
"names": []
}