{"version":3,"file":"install.mjs","sources":["../../../../src/utils/install.ts"],"sourcesContent":["import { NOOP } from '@vue/shared';\r\n\r\nimport type { AppContext, Plugin, App } from 'vue';\r\n\r\nexport type SFCWithInstall<T> = T & Plugin;\r\n\r\nexport type SFCInstallWithContext<T> = SFCWithInstall<T> & {\r\n  _context: AppContext | null;\r\n};\r\n\r\n// 安装组件 Record -> 构造一个对象类型 其属性键为Keys，其属性值为Type\r\nexport const withInstall = <T, E extends Record<string, any>>(\r\n  // 当前组件\r\n  main: T,\r\n  // 关联的组件\r\n  extra?: E\r\n) => {\r\n  // 安装组件 组件.install\r\n  (main as SFCWithInstall<T>).install = (app): void => {\r\n    for (const comp of [main, ...Object.values(extra ?? {})]) {\r\n      app.component(comp.name, comp);\r\n    }\r\n  };\r\n\r\n  // 关联的组件\r\n  if (extra) {\r\n    for (const [key, comp] of Object.entries(extra)) {\r\n      (main as any)[key] = comp;\r\n    }\r\n  }\r\n\r\n  return main as SFCWithInstall<T> & E;\r\n};\r\n\r\n// 使用noop安装\r\nexport const withNoopInstall = <T>(component: T) => {\r\n  (component as SFCWithInstall<T>).install = NOOP;\r\n\r\n  return component as SFCWithInstall<T>;\r\n};\r\n\r\n// 注册指令\r\nexport const withInstallDirective = <T>(directive: T, name: string) => {\r\n  (directive as SFCWithInstall<T>).install = (app: App): any => {\r\n    app.directive(name, directive);\r\n  };\r\n\r\n  return directive as SFCWithInstall<T>;\r\n};\r\n\r\n// 注册全局方法\r\nexport const withInstallFunction = <T>(fn: T, name: string) => {\r\n  (fn as SFCWithInstall<T>).install = (app: App) => {\r\n    // 当前vue实例\r\n    (fn as SFCInstallWithContext<T>)._context = app._context;\r\n\r\n    // 注册全局方法\r\n    app.config.globalProperties[name] = fn;\r\n  };\r\n\r\n  return fn as SFCInstallWithContext<T>;\r\n};\r\n"],"names":[],"mappings":";;AAWa,MAAA,WAAA,GAAc,CAEzB,IAAA,EAEA,KACG,KAAA;AAEH,EAAC,IAAA,CAA2B,OAAU,GAAA,CAAC,GAAc,KAAA;AACnD,IAAW,KAAA,MAAA,IAAA,IAAQ,CAAC,IAAA,EAAM,GAAG,MAAA,CAAO,OAAO,KAAS,IAAA,IAAA,GAAA,KAAA,GAAA,EAAE,CAAC,CAAG,EAAA;AACxD,MAAI,GAAA,CAAA,SAAA,CAAU,IAAK,CAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAAA,KAC/B;AAAA,GACF,CAAA;AAGA,EAAA,IAAI,KAAO,EAAA;AACT,IAAA,KAAA,MAAW,CAAC,GAAK,EAAA,IAAI,KAAK,MAAO,CAAA,OAAA,CAAQ,KAAK,CAAG,EAAA;AAC/C,MAAC,KAAa,GAAO,CAAA,GAAA,IAAA,CAAA;AAAA,KACvB;AAAA,GACF;AAEA,EAAO,OAAA,IAAA,CAAA;AACT,EAAA;AAGa,MAAA,eAAA,GAAkB,CAAI,SAAiB,KAAA;AAClD,EAAC,UAAgC,OAAU,GAAA,IAAA,CAAA;AAE3C,EAAO,OAAA,SAAA,CAAA;AACT,EAAA;AAGa,MAAA,oBAAA,GAAuB,CAAI,SAAA,EAAc,IAAiB,KAAA;AACrE,EAAC,SAAA,CAAgC,OAAU,GAAA,CAAC,GAAkB,KAAA;AAC5D,IAAI,GAAA,CAAA,SAAA,CAAU,MAAM,SAAS,CAAA,CAAA;AAAA,GAC/B,CAAA;AAEA,EAAO,OAAA,SAAA,CAAA;AACT,EAAA;AAGa,MAAA,mBAAA,GAAsB,CAAI,EAAA,EAAO,IAAiB,KAAA;AAC7D,EAAC,EAAA,CAAyB,OAAU,GAAA,CAAC,GAAa,KAAA;AAEhD,IAAC,EAAA,CAAgC,WAAW,GAAI,CAAA,QAAA,CAAA;AAGhD,IAAI,GAAA,CAAA,MAAA,CAAO,iBAAiB,IAAQ,CAAA,GAAA,EAAA,CAAA;AAAA,GACtC,CAAA;AAEA,EAAO,OAAA,EAAA,CAAA;AACT;;;;"}