¶Ô±ÈÐÂÎļþ |
| | |
| | | import { onBeforeMount, onUnmounted, reactive, ref, toRefs, Ref } from 'vue' |
| | | import set from 'lodash/set' |
| | | import get from 'lodash/get' |
| | | |
| | | interface ControllerType { |
| | | Models: Record<string, Function> |
| | | } |
| | | |
| | | let Modules = {} |
| | | /** |
| | | * è·åæä»¶å |
| | | * @param filePath |
| | | * @returns |
| | | */ |
| | | const extractNameFromPath = (filePath: string) => { |
| | | const regex = /\/([^\/0-9][A-Za-z-0-9]+)\.ts$/ |
| | | const match = filePath.match(regex) |
| | | |
| | | if (match && match[1]) { |
| | | return match[1] |
| | | } else { |
| | | return null |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è½¬æ¢æåç§°å½æ°æ°ç» |
| | | * @param fileMap |
| | | */ |
| | | const getFunctionByName = (fileMap: Record<string, Function>) => { |
| | | const entries = Object.entries(fileMap) |
| | | return entries.map(([filePath, fn]) => { |
| | | const name = extractNameFromPath(filePath) |
| | | if (name) { |
| | | return [name, fn] |
| | | } else { |
| | | throw new Error(`${filePath} æä»¶åæ ¼å¼ä¸æ£ç¡®ï¼è¯·æ£æ¥`) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * åå
¥modules |
| | | * @param data [[a,b]] |
| | | * @param namespace |
| | | * @param bool æ¯å¦å®ä¾åç±»ï¼é»è®¤ä¸ºfalse |
| | | */ |
| | | const saveModules = (data: (string | Function)[][]) => { |
| | | for (let i = 0; i < data.length; i++) { |
| | | const [name, Module]: any[] = data[i] |
| | | |
| | | Object.entries(Module).map(([hookName, fn]: any) => { |
| | | const fnKey = hookName.toLocaleLowerCase() |
| | | try { |
| | | set(Modules, fnKey, new fn()) |
| | | } catch (error) { |
| | | console.error(error) |
| | | throw new Error(`${name} ç±»ä¸ ${fnKey} æ¹æ³æ ¼å¼ä¸æ£ç¡®ï¼è¯·æ£æ¥`) |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * åå§åmodels |
| | | * @param param |
| | | */ |
| | | export const createModels = ({ Models }: ControllerType) => { |
| | | const models = getFunctionByName(Models) |
| | | saveModules(models) |
| | | } |
| | | |
| | | /** |
| | | * è·åmodel |
| | | * @param modelName |
| | | * @returns |
| | | */ |
| | | export const injectModel = <T>(modelName: string): T => { |
| | | const key = modelName.toLocaleLowerCase() |
| | | const InstanceModel = get(Modules, key) |
| | | return InstanceModel |
| | | } |
| | | |
| | | /** |
| | | * è·åå
¨å±models |
| | | * @param modelName |
| | | * @returns |
| | | */ |
| | | export const injectModels = () => { |
| | | return Modules |
| | | } |