UNPKG

reactrators

Version:

A React library for composing and enhancing components with flexible and chainable functions. Simplify the process of injecting functionality and props into React components by providing a composable utility for building component enhancers.

1 lines 3.41 kB
{"version":3,"file":"reactrators.mjs","sources":["../src/composable/index.ts"],"sourcesContent":["import {ComponentType, createElement } from \"react\";\nimport {ComposableOptions, EnhancedProps, InjectableEntry, InjectableFunction} from \"./types\";\nconst _composeFns = (props: Record<string, any>, toCompose: (InjectableFunction | InjectableEntry)[], opts?: ComposableOptions): Record<string, any> => {\n return toCompose.reduce((acc, fn) => {\n if(!Array.isArray(fn) && typeof fn !== \"function\") {\n throw new Error(\"Hook must be a function or an array\");\n }\n if(Array.isArray(fn) && fn.length !== 2) {\n throw new Error(\"Hook must be an array with 2 elements\");\n }\n\n let fnToCall = fn;\n let params = undefined;\n\n if(Array.isArray(fn)) {\n if(typeof fn[0] !== \"function\" && typeof fn[1] !== \"object\") {\n throw new Error(\"Hook must be an array with first element as a function and second element as an object\");\n }\n const [ fnArray , paramsArray ] = fn as InjectableEntry;\n fnToCall = fnArray;\n params = paramsArray;\n }\n\n let fnInstanceParams = { ...params, ...props };\n if(opts?.chainable) {\n fnInstanceParams = { ...acc, ...params, ...props };\n }\n\n const fnInstance = (fnToCall as InjectableFunction)(fnInstanceParams);\n acc = { ...acc, ...fnInstance };\n return acc\n }, {});\n}\nconst composable = (fn: (props?: Record<any, any>) => (InjectableFunction | InjectableEntry)[], opts: ComposableOptions ) => <P extends EnhancedProps>(\n Component: ComponentType<P>\n) => {\n return (props: P) => {\n const injectable = fn();\n const toInject = _composeFns(props, injectable, opts);\n return createElement(Component, { ...toInject, ...props });\n }\n}\n\nexport default composable;"],"names":[],"mappings":";;AAEA,MAAM,WAAc,GAAA,CAAC,KAA4B,EAAA,SAAA,EAAqD,IAAkD,KAAA;AACpJ,EAAA,OAAO,SAAU,CAAA,MAAA,CAAO,CAAC,GAAA,EAAK,EAAO,KAAA;AACjC,IAAA,IAAG,CAAC,KAAM,CAAA,OAAA,CAAQ,EAAE,CAAK,IAAA,OAAO,OAAO,UAAY,EAAA;AAC/C,MAAM,MAAA,IAAI,MAAM,qCAAqC,CAAA,CAAA;AAAA,KACzD;AACA,IAAA,IAAG,MAAM,OAAQ,CAAA,EAAE,CAAK,IAAA,EAAA,CAAG,WAAW,CAAG,EAAA;AACrC,MAAM,MAAA,IAAI,MAAM,uCAAuC,CAAA,CAAA;AAAA,KAC3D;AAEA,IAAA,IAAI,QAAW,GAAA,EAAA,CAAA;AACf,IAAA,IAAI,MAAS,GAAA,KAAA,CAAA,CAAA;AAEb,IAAG,IAAA,KAAA,CAAM,OAAQ,CAAA,EAAE,CAAG,EAAA;AAClB,MAAG,IAAA,OAAO,GAAG,CAAC,CAAA,KAAM,cAAc,OAAO,EAAA,CAAG,CAAC,CAAA,KAAM,QAAU,EAAA;AACzD,QAAM,MAAA,IAAI,MAAM,wFAAwF,CAAA,CAAA;AAAA,OAC5G;AACA,MAAM,MAAA,CAAE,OAAU,EAAA,WAAY,CAAI,GAAA,EAAA,CAAA;AAClC,MAAW,QAAA,GAAA,OAAA,CAAA;AACX,MAAS,MAAA,GAAA,WAAA,CAAA;AAAA,KACb;AAEA,IAAA,IAAI,gBAAmB,GAAA,EAAE,GAAG,MAAA,EAAQ,GAAG,KAAM,EAAA,CAAA;AAC7C,IAAA,IAAG,MAAM,SAAW,EAAA;AAChB,MAAA,gBAAA,GAAmB,EAAE,GAAG,GAAA,EAAK,GAAG,MAAA,EAAQ,GAAG,KAAM,EAAA,CAAA;AAAA,KACrD;AAEA,IAAM,MAAA,UAAA,GAAc,SAAgC,gBAAgB,CAAA,CAAA;AACpE,IAAA,GAAA,GAAM,EAAE,GAAG,GAAK,EAAA,GAAG,UAAW,EAAA,CAAA;AAC9B,IAAO,OAAA,GAAA,CAAA;AAAA,GACX,EAAG,EAAE,CAAA,CAAA;AACT,CAAA,CAAA;AACA,MAAM,UAAa,GAAA,CAAC,EAA4E,EAAA,IAAA,KAA6B,CACzH,SACE,KAAA;AACF,EAAA,OAAO,CAAC,KAAa,KAAA;AACjB,IAAA,MAAM,aAAa,EAAG,EAAA,CAAA;AACtB,IAAA,MAAM,QAAW,GAAA,WAAA,CAAY,KAAO,EAAA,UAAA,EAAY,IAAI,CAAA,CAAA;AACpD,IAAA,OAAO,cAAc,SAAW,EAAA,EAAE,GAAG,QAAU,EAAA,GAAG,OAAO,CAAA,CAAA;AAAA,GAC7D,CAAA;AACJ;;;;"}