vite-plugin-mettle
Version:
Mettle.js integration plugin for vite
1 lines • 5.21 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../src/index.ts"],"sourcesContent":["import * as babel from '@babel/core';\nimport mettle from 'babel-preset-mettle';\nimport { createFilter } from 'vite';\nimport type { Plugin, FilterPattern } from 'vite';\n\nexport interface ExtensionOptions {\n typescript?: boolean;\n}\n\nexport interface Options {\n include?: FilterPattern;\n exclude?: FilterPattern;\n extensions?: (string | [string, ExtensionOptions])[];\n babel?:\n | babel.TransformOptions\n | ((source: string, id: string, ssr: boolean) => babel.TransformOptions)\n | ((source: string, id: string, ssr: boolean) => Promise<babel.TransformOptions>);\n}\n\nfunction getExtension(filename: string): string {\n const index = filename.lastIndexOf('.');\n return index < 0 ? '' : filename.substring(index).replace(/\\?.+$/, '');\n}\n\nexport default function mettlePlugin(options: Partial<Options> = {}): Plugin {\n const filter = createFilter(options.include, options.exclude);\n let projectRoot = process.cwd();\n\n return {\n name: 'mettle',\n enforce: 'pre',\n async transform(source, id) {\n const currentFileExtension = getExtension(id);\n const extensionsToWatch = options.extensions || [];\n const allExtensions = extensionsToWatch.map((extension) =>\n typeof extension === 'string' ? extension : extension[0]\n );\n\n if (\n !filter(id) ||\n !(/\\.[mc]?[tj]sx$/i.test(id) || allExtensions.includes(currentFileExtension))\n ) {\n return null;\n }\n\n id = id.replace(/\\?.+$/, '');\n\n const shouldBeProcessedWithTypescript =\n /\\.[mc]?tsx$/i.test(id) ||\n extensionsToWatch.some((extension) => {\n if (typeof extension === 'string') {\n return extension.includes('tsx');\n }\n\n const [extensionName, extensionOptions] = extension;\n if (extensionName !== currentFileExtension) return false;\n\n return extensionOptions.typescript;\n });\n const plugins: NonNullable<NonNullable<babel.TransformOptions['parserOpts']>['plugins']> = [\n 'jsx',\n ];\n\n if (shouldBeProcessedWithTypescript) {\n plugins.push('typescript');\n }\n\n const opts: babel.TransformOptions = {\n root: projectRoot,\n filename: id,\n sourceFileName: id,\n presets: [[mettle]],\n ast: false,\n sourceMaps: true,\n configFile: false,\n babelrc: false,\n parserOpts: {\n plugins,\n },\n };\n\n const { code, map } = await babel.transformAsync(source, opts);\n\n return { code, map };\n },\n };\n}\n"],"names":["getExtension","filename","index","lastIndexOf","substring","replace","mettlePlugin","options","filter","createFilter","include","exclude","projectRoot","process","cwd","name","enforce","transform","source","id","currentFileExtension","extensionsToWatch","extensions","allExtensions","map","extension","test","includes","shouldBeProcessedWithTypescript","some","extensionName","extensionOptions","typescript","plugins","push","opts","root","sourceFileName","presets","mettle","ast","sourceMaps","configFile","babelrc","parserOpts","code","babel","transformAsync"],"mappings":";;;;AAmBA,SAASA,YAAYA,CAACC,QAAgB,EAAU;AAC9C,EAAA,MAAMC,KAAK,GAAGD,QAAQ,CAACE,WAAW,CAAC,GAAG,CAAC;AACvC,EAAA,OAAOD,KAAK,GAAG,CAAC,GAAG,EAAE,GAAGD,QAAQ,CAACG,SAAS,CAACF,KAAK,CAAC,CAACG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;AACxE;AAEe,SAASC,YAAYA,CAACC,OAAyB,GAAG,EAAE,EAAU;EAC3E,MAAMC,MAAM,GAAGC,YAAY,CAACF,OAAO,CAACG,OAAO,EAAEH,OAAO,CAACI,OAAO,CAAC;AAC7D,EAAA,IAAIC,WAAW,GAAGC,OAAO,CAACC,GAAG,EAAE;EAE/B,OAAO;AACLC,IAAAA,IAAI,EAAE,QAAQ;AACdC,IAAAA,OAAO,EAAE,KAAK;AACd,IAAA,MAAMC,SAASA,CAACC,MAAM,EAAEC,EAAE,EAAE;AAC1B,MAAA,MAAMC,oBAAoB,GAAGpB,YAAY,CAACmB,EAAE,CAAC;AAC7C,MAAA,MAAME,iBAAiB,GAAGd,OAAO,CAACe,UAAU,IAAI,EAAE;AAClD,MAAA,MAAMC,aAAa,GAAGF,iBAAiB,CAACG,GAAG,CAAEC,SAAS,IACpD,OAAOA,SAAS,KAAK,QAAQ,GAAGA,SAAS,GAAGA,SAAS,CAAC,CAAC,CACzD,CAAC;MAED,IACE,CAACjB,MAAM,CAACW,EAAE,CAAC,IACX,EAAE,iBAAiB,CAACO,IAAI,CAACP,EAAE,CAAC,IAAII,aAAa,CAACI,QAAQ,CAACP,oBAAoB,CAAC,CAAC,EAC7E;AACA,QAAA,OAAO,IAAI;AACb,MAAA;MAEAD,EAAE,GAAGA,EAAE,CAACd,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;AAE5B,MAAA,MAAMuB,+BAA+B,GACnC,cAAc,CAACF,IAAI,CAACP,EAAE,CAAC,IACvBE,iBAAiB,CAACQ,IAAI,CAAEJ,SAAS,IAAK;AACpC,QAAA,IAAI,OAAOA,SAAS,KAAK,QAAQ,EAAE;AACjC,UAAA,OAAOA,SAAS,CAACE,QAAQ,CAAC,KAAK,CAAC;AAClC,QAAA;AAEA,QAAA,MAAM,CAACG,aAAa,EAAEC,gBAAgB,CAAC,GAAGN,SAAS;AACnD,QAAA,IAAIK,aAAa,KAAKV,oBAAoB,EAAE,OAAO,KAAK;QAExD,OAAOW,gBAAgB,CAACC,UAAU;AACpC,MAAA,CAAC,CAAC;AACJ,MAAA,MAAMC,OAAkF,GAAG,CACzF,KAAK,CACN;AAED,MAAA,IAAIL,+BAA+B,EAAE;AACnCK,QAAAA,OAAO,CAACC,IAAI,CAAC,YAAY,CAAC;AAC5B,MAAA;AAEA,MAAA,MAAMC,IAA4B,GAAG;AACnCC,QAAAA,IAAI,EAAExB,WAAW;AACjBX,QAAAA,QAAQ,EAAEkB,EAAE;AACZkB,QAAAA,cAAc,EAAElB,EAAE;AAClBmB,QAAAA,OAAO,EAAE,CAAC,CAACC,MAAM,CAAC,CAAC;AACnBC,QAAAA,GAAG,EAAE,KAAK;AACVC,QAAAA,UAAU,EAAE,IAAI;AAChBC,QAAAA,UAAU,EAAE,KAAK;AACjBC,QAAAA,OAAO,EAAE,KAAK;AACdC,QAAAA,UAAU,EAAE;AACVX,UAAAA;AACF;OACD;MAED,MAAM;QAAEY,IAAI;AAAErB,QAAAA;OAAK,GAAG,MAAMsB,KAAK,CAACC,cAAc,CAAC7B,MAAM,EAAEiB,IAAI,CAAC;MAE9D,OAAO;QAAEU,IAAI;AAAErB,QAAAA;OAAK;AACtB,IAAA;GACD;AACH;;;;"}