{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { PluginOption, UserConfig } from 'vite';\n\ninterface ExternalExtensionType {\n  [key: string]: {\n    getter?: string | ((window: any) => any);\n    url: string | (() => Promise<string>);\n  }\n}\n\nenum EnForceType {\n  PRE = 'pre',\n  POST = 'post',\n}\n\nconst externalRE = /^(https?:)?\\/\\//;\n\nconst isExternalUrl = (url: string) => externalRE.test(url);\n\nconst exclude: Array<string | RegExp> = [];\n\nlet tempOptions: ExternalExtensionType = {};\n\nfunction externalsExtensionResolverConfigFilter(): PluginOption {\n  return {\n    name: \"vite-plugin-externals-extension-config-filter\",\n    enforce: EnForceType.POST,\n    async config(config: UserConfig) {\n      const include = config.optimizeDeps?.include ?? [];\n      include?.forEach((url, index) => {\n        if (exclude.includes(url)) {\n          include.splice(index, 1);\n        }\n      });\n    }\n  }\n}\n\nasync function getExcludeUrls(options: ExternalExtensionType) {\n  if (exclude.length) {\n    return exclude;\n  }\n  exclude.push(\n    ...await Promise.all(\n      Object.entries(options).filter((option) => !option[1].getter).map(async (option) => {\n        option[1].url = typeof option[1].url === \"function\" ? await option[1].url() : option[1].url;\n        return option[1].url;\n      })\n    )\n  );\n  return exclude;\n}\n\nfunction externalsExtensionResolver(options: ExternalExtensionType): PluginOption {\n  tempOptions = options;\n  return {\n    name: 'vite-plugin-externals-extension',\n    enforce: EnForceType.PRE,\n\n    async resolveId(id: string) {\n      if (options[id] && !!options[id].getter) {\n        return id;\n      } else if (options[id]) {\n        return options[id].url as string;\n      }\n      return null;\n    },\n\n    async config() {\n      return {\n        build: {\n          rollupOptions: {\n            external: await getExcludeUrls(tempOptions)\n          }\n        }\n      };\n    },\n    \n    async transformIndexHtml() {\n      return Object\n              .entries(options)\n              .filter(option => !!option[1].getter)\n              .map(option => option[1].url as string)\n              .filter(isExternalUrl)\n              .map(url => ({\n                tag: 'script',\n                attrs: {\n                  src: url\n                }\n              }));\n    },\n\n    async load(id: string) {\n      if (options[id]) {\n        const { getter } = options[id] || {};\n        if (typeof getter === 'function') {\n          return `\n            const getter = ${getter};\n            const fetchGetterModule = getter(window);\n            export default fetchGetterModule;\n          `;\n        }\n        return `\n          export default window['${getter}']\n        `;\n      }\n      return null;\n    }\n  };\n}\n\nexport async function compatLowVersion(): Promise<(string | RegExp)[]> {\n  return await getExcludeUrls(tempOptions);\n}\n\nexport function externalsExtension(options: ExternalExtensionType): PluginOption {\n  return [externalsExtensionResolver(options), externalsExtensionResolverConfigFilter()];\n}\n"],"mappings":";AAcA,IAAM,aAAa;AAEnB,IAAM,gBAAgB,CAAC,QAAgB,WAAW,KAAK,GAAG;AAE1D,IAAM,UAAkC,CAAC;AAEzC,IAAI,cAAqC,CAAC;AAE1C,SAAS,yCAAuD;AAC9D,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM,OAAO,QAAoB;AA1BrC;AA2BM,YAAM,WAAU,kBAAO,iBAAP,mBAAqB,YAArB,YAAgC,CAAC;AACjD,yCAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAI,QAAQ,SAAS,GAAG,GAAG;AACzB,kBAAQ,OAAO,OAAO,CAAC;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAe,eAAe,SAAgC;AAC5D,MAAI,QAAQ,QAAQ;AAClB,WAAO;AAAA,EACT;AACA,UAAQ;AAAA,IACN,GAAG,MAAM,QAAQ;AAAA,MACf,OAAO,QAAQ,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,OAAO,GAAG,MAAM,EAAE,IAAI,OAAO,WAAW;AAClF,eAAO,GAAG,MAAM,OAAO,OAAO,GAAG,QAAQ,aAAa,MAAM,OAAO,GAAG,IAAI,IAAI,OAAO,GAAG;AACxF,eAAO,OAAO,GAAG;AAAA,MACnB,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,2BAA2B,SAA8C;AAChF,gBAAc;AACd,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IAET,MAAM,UAAU,IAAY;AAC1B,UAAI,QAAQ,OAAO,CAAC,CAAC,QAAQ,IAAI,QAAQ;AACvC,eAAO;AAAA,MACT,WAAW,QAAQ,KAAK;AACtB,eAAO,QAAQ,IAAI;AAAA,MACrB;AACA,aAAO;AAAA,IACT;AAAA,IAEA,MAAM,SAAS;AACb,aAAO;AAAA,QACL,OAAO;AAAA,UACL,eAAe;AAAA,YACb,UAAU,MAAM,eAAe,WAAW;AAAA,UAC5C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,MAAM,qBAAqB;AACzB,aAAO,OACE,QAAQ,OAAO,EACf,OAAO,YAAU,CAAC,CAAC,OAAO,GAAG,MAAM,EACnC,IAAI,YAAU,OAAO,GAAG,GAAa,EACrC,OAAO,aAAa,EACpB,IAAI,UAAQ;AAAA,QACX,KAAK;AAAA,QACL,OAAO;AAAA,UACL,KAAK;AAAA,QACP;AAAA,MACF,EAAE;AAAA,IACZ;AAAA,IAEA,MAAM,KAAK,IAAY;AACrB,UAAI,QAAQ,KAAK;AACf,cAAM,EAAE,OAAO,IAAI,QAAQ,OAAO,CAAC;AACnC,YAAI,OAAO,WAAW,YAAY;AAChC,iBAAO;AAAA,6BACY;AAAA;AAAA;AAAA;AAAA,QAIrB;AACA,eAAO;AAAA,mCACoB;AAAA;AAAA,MAE7B;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,eAAsB,mBAAiD;AACrE,SAAO,MAAM,eAAe,WAAW;AACzC;AAEO,SAAS,mBAAmB,SAA8C;AAC/E,SAAO,CAAC,2BAA2B,OAAO,GAAG,uCAAuC,CAAC;AACvF;","names":[]}