plugin.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { isFunction, isObject, isString } from 'lodash';
  2. /**
  3. * 对插件参数进行处理并引入
  4. * @param plugins 插件列表
  5. * @param args 参数
  6. */
  7. const usePluginOptions = (plugins, ...args) => {
  8. if (!args[0]) {
  9. throw new Error('DrawPoster Error: plugins arguments required');
  10. }
  11. let _options = { name: '' };
  12. if (isString(args[0]) && isFunction(args[1])) {
  13. _options.name = args[0];
  14. _options.mounted = args[1];
  15. }
  16. if (isString(args[0]) && isObject(args[1])) {
  17. _options = { name: args[0], ...args[1] };
  18. }
  19. if (isObject(args[0])) {
  20. _options = args[0];
  21. }
  22. if (![...globalPlugins, ...plugins].some((v) => _options.name === v.name)) {
  23. plugins.push(_options);
  24. return _options;
  25. }
  26. console.warn(`该扩展已存在: ${_options.name}`);
  27. };
  28. const globalPlugins = [];
  29. export const globalUse = (...args) => usePluginOptions(globalPlugins, ...args);
  30. export class Plugins {
  31. dp;
  32. $plugins = [];
  33. get plugins() {
  34. return [...globalPlugins, ...this.$plugins];
  35. }
  36. constructor(dp) {
  37. this.dp = dp;
  38. if (dp.$options?.plugins)
  39. this.$plugins.push(...dp.$options?.plugins);
  40. }
  41. use = (...args) => {
  42. const plugin = usePluginOptions(this.$plugins, ...args);
  43. if (this.dp['canvas'])
  44. plugin?.mounted?.(this.dp);
  45. };
  46. run = (lifeCycleName) => {
  47. this.plugins.forEach((lifeCycle) => {
  48. lifeCycle[lifeCycleName]?.(this.dp);
  49. });
  50. };
  51. }
  52. //# sourceMappingURL=plugin.js.map