vite-plugin-dev-external
Version:
1 lines • 5.83 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../src/constant.ts","../src/rollup.utils.ts","../src/moduleprefixtransform.ts","../src/index.ts"],"sourcesContent":["\nconst viteImportAnalysisModulePrefix = '/@id/';\nconst tag = 'external:';\nconst prefix = `${viteImportAnalysisModulePrefix}${tag}`;\n\nexport { viteImportAnalysisModulePrefix, tag, prefix };\n","// https://github.com/rollup/rollup/blob/ef820b637a8d6f8f51955a1d3163de81c7830249/src/utils/options/normalizeInputOptions.ts#L112\n// https://github.com/rollup/rollup/blob/ef820b637a8d6f8f51955a1d3163de81c7830249/src/utils/ensureArray.ts#L1\n\nimport type { ExternalOption } from 'rollup';\n\nfunction ensureArray<T>(items: T[] | T): T[] {\n if (Array.isArray(items)) return items.filter(Boolean) as T[];\n if (items) return [items];\n return [];\n}\n\ninterface External {\n (source: string, importer: string | undefined, isResolved: boolean): boolean;\n}\n\nfunction getIdMatcher(option?: ExternalOption | boolean): External {\n if (!option) return () => false;\n if (option === true) return () => true;\n if (typeof option === 'function') return function (id) {\n return !id.startsWith('\\0') && Reflect.apply(option, undefined, arguments);\n };\n const ids = new Set<string>();\n const matchers: RegExp[] = [];\n for (const value of ensureArray(option)) {\n if (value instanceof RegExp) matchers.push(value);\n else ids.add(value);\n }\n return (id: string) => ids.has(id) || matchers.some(matcher => matcher.test(id));\n};\n\nexport type { External };\nexport default getIdMatcher;\n","import MagicString from 'magic-string';\nimport { walk } from 'estree-walker';\nimport { prefix } from './constant.js';\nimport type { Node } from 'estree';\nimport type { Plugin } from 'vite';\n\nexport default {\n name: 'module-prefix-transform',\n transform(code, id) {\n if (!code.includes(prefix)) return;\n const ast = this.parse(code) as Node;\n let ms: MagicString | undefined;\n walk(ast, {\n enter(node) {\n if (!('source' in node)) return;\n const { source } = node;\n if (!source) return;\n if (source.type !== 'Literal') return;\n const { value } = source;\n if (typeof value !== 'string') return;\n if (!value.startsWith(prefix)) return;\n // @ts-ignore\n const start = source.start + 1;\n ms ??= new MagicString(code);\n ms.overwrite(start, start + prefix.length, '');\n },\n });\n if (!ms) return;\n return {\n code: ms.toString(),\n map: ms.generateMap({\n file: id,\n includeContent: true,\n hires: true\n }),\n };\n },\n} as Plugin;\n","import { tag } from './constant.js';\nimport getIdMatcher from './rollup.utils.js';\nimport modulePrefixTransform from './moduleprefixtransform.js';\nimport type { ExternalOption } from 'rollup';\nimport type { Plugin } from 'vite';\nimport type { External } from './rollup.utils.js';\n\ninterface PluginOptions {\n external?: ExternalOption;\n}\n\nfunction externalize(options?: PluginOptions): Plugin {\n let external: External;\n\n return {\n name: 'vite-plugin-externalize',\n apply: 'serve',\n configResolved({ plugins, build: { rollupOptions } }) {\n external = getIdMatcher(options?.external ?? rollupOptions.external);\n Array.prototype.push.call(plugins, modulePrefixTransform);\n },\n resolveId(source, importer) {\n if (external(source, importer, false))\n return `${tag}${source}`;\n },\n load(id) {\n if (id.startsWith(tag)) return 'export{}';\n },\n };\n}\n\nexport type { PluginOptions };\nexport default externalize;\n"],"names":["viteImportAnalysisModulePrefix","tag","prefix","ensureArray","items","getIdMatcher","option","id","ids","matchers","value","matcher","modulePrefixTransform","code","ast","ms","walk","node","source","start","MagicString","externalize","options","external","plugins","rollupOptions","importer"],"mappings":"wEACMA,EAAiC,QACjCC,EAAM,YACNC,EAAS,GAAGF,CAA8B,GAAGC,CAAG,GCEtD,SAASE,EAAeC,EAAqB,CACrC,OAAA,MAAM,QAAQA,CAAK,EAAUA,EAAM,OAAO,OAAO,EACjDA,EAAc,CAACA,CAAK,EACjB,EACX,CAMA,SAASC,EAAaC,EAA6C,CAC/D,GAAI,CAACA,EAAQ,MAAO,IAAM,GAC1B,GAAIA,IAAW,GAAM,MAAO,IAAM,GAClC,GAAI,OAAOA,GAAW,WAAY,OAAO,SAAUC,EAAI,CAC5C,MAAA,CAACA,EAAG,WAAW,IAAI,GAAK,QAAQ,MAAMD,EAAQ,OAAW,SAAS,CAAA,EAEvE,MAAAE,MAAU,IACVC,EAAqB,CAAA,EAChB,UAAAC,KAASP,EAAYG,CAAM,EAC9BI,aAAiB,OAAQD,EAAS,KAAKC,CAAK,EAC3CF,EAAI,IAAIE,CAAK,EAEtB,OAAQH,GAAeC,EAAI,IAAID,CAAE,GAAKE,EAAS,KAAgBE,GAAAA,EAAQ,KAAKJ,CAAE,CAAC,CACnF,CCtBA,MAAeK,EAAA,CACX,KAAM,0BACN,UAAUC,EAAMN,EAAI,CACZ,GAAA,CAACM,EAAK,SAASX,CAAM,EAAG,OACtB,MAAAY,EAAM,KAAK,MAAMD,CAAI,EACvB,IAAAE,EAgBJ,GAfAC,EAAAA,KAAKF,EAAK,CACN,MAAMG,EAAM,CACR,GAAI,EAAE,WAAYA,GAAO,OACnB,KAAA,CAAE,OAAAC,CAAW,EAAAD,EAEnB,GADI,CAACC,GACDA,EAAO,OAAS,UAAW,OACzB,KAAA,CAAE,MAAAR,CAAU,EAAAQ,EAEd,GADA,OAAOR,GAAU,UACjB,CAACA,EAAM,WAAWR,CAAM,EAAG,OAEzB,MAAAiB,EAAQD,EAAO,MAAQ,EACtBH,MAAA,IAAIK,EAAYP,CAAI,GAC3BE,EAAG,UAAUI,EAAOA,EAAQjB,EAAO,OAAQ,EAAE,CACjD,CAAA,CACH,EACG,EAACa,EACE,MAAA,CACH,KAAMA,EAAG,SAAS,EAClB,IAAKA,EAAG,YAAY,CAChB,KAAMR,EACN,eAAgB,GAChB,MAAO,EAAA,CACV,CAAA,CAET,CACJ,EC1BA,SAASc,EAAYC,EAAiC,CAC9C,IAAAC,EAEG,MAAA,CACH,KAAM,0BACN,MAAO,QACP,eAAe,CAAE,QAAAC,EAAS,MAAO,CAAE,cAAAC,IAAmB,CAClDF,EAAWlB,GAAaiB,GAAA,YAAAA,EAAS,WAAYG,EAAc,QAAQ,EACnE,MAAM,UAAU,KAAK,KAAKD,EAASZ,CAAqB,CAC5D,EACA,UAAUM,EAAQQ,EAAU,CACpB,GAAAH,EAASL,EAAQQ,EAAU,EAAK,EACzB,MAAA,GAAGzB,CAAG,GAAGiB,CAAM,EAC9B,EACA,KAAKX,EAAI,CACD,GAAAA,EAAG,WAAWN,CAAG,EAAU,MAAA,UACnC,CAAA,CAER"}