UNPKG

4.4 kBSource Map (JSON)View Raw
1{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { callbackify } from 'util'\nimport { transformAsync, createConfigItem } from '@babel/core'\nimport { transform, Config, State } from '@svgr/core'\nimport { normalize } from 'path'\nimport svgo from '@svgr/plugin-svgo'\nimport jsx from '@svgr/plugin-jsx'\n// @ts-ignore\nimport presetReact from '@babel/preset-react'\n// @ts-ignore\nimport presetEnv from '@babel/preset-env'\n// @ts-ignore\nimport presetTS from '@babel/preset-typescript'\n// @ts-ignore\nimport pluginTransformReactConstantElements from '@babel/plugin-transform-react-constant-elements'\nimport type * as webpack from 'webpack'\n\nconst babelOptions = {\n babelrc: false,\n configFile: false,\n presets: [\n createConfigItem(presetReact, { type: 'preset' }),\n createConfigItem([presetEnv, { modules: false }], { type: 'preset' }),\n ],\n plugins: [createConfigItem(pluginTransformReactConstantElements)],\n}\n\nconst typeScriptBabelOptions = {\n ...babelOptions,\n presets: [\n ...babelOptions.presets,\n createConfigItem(\n [presetTS, { allowNamespaces: true, allExtensions: true, isTSX: true }],\n { type: 'preset' },\n ),\n ],\n}\n\ninterface LoaderOptions extends Config {\n babel?: boolean\n}\n\nconst tranformSvg = callbackify(\n async (contents: string, options: LoaderOptions, state: Partial<State>) => {\n const { babel = true, ...config } = options\n const jsCode = await transform(contents, config, state)\n if (!babel) return jsCode\n const result = await transformAsync(\n jsCode,\n options.typescript ? typeScriptBabelOptions : babelOptions,\n )\n if (!result?.code) {\n throw new Error(`Error while transforming using Babel`)\n }\n return result.code\n },\n)\n\nfunction svgrLoader(\n this: webpack.LoaderContext<LoaderOptions>,\n contents: string,\n): void {\n this.cacheable && this.cacheable()\n const callback = this.async()\n\n const options = this.getOptions()\n\n const previousExport = (() => {\n if (contents.startsWith('export ')) return contents\n const exportMatches = contents.match(/^module.exports\\s*=\\s*(.*)/)\n return exportMatches ? `export default ${exportMatches[1]}` : null\n })()\n\n const state = {\n caller: {\n name: '@svgr/webpack',\n previousExport,\n defaultPlugins: [svgo, jsx],\n },\n filePath: normalize(this.resourcePath),\n }\n\n if (!previousExport) {\n tranformSvg(contents, options, state, callback)\n } else {\n this.fs.readFile(this.resourcePath, (err, result) => {\n if (err) {\n callback(err)\n return\n }\n tranformSvg(String(result), options, state, (err, content) => {\n if (err) {\n callback(err)\n return\n }\n callback(null, `${content}\\n${previousExport}`)\n })\n })\n }\n}\n\nexport default svgrLoader\n"],"names":["createConfigItem","presetReact","presetEnv","pluginTransformReactConstantElements","presetTS","callbackify","transform","transformAsync","svgo","jsx","normalize"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,MAAM,eAAe;AAAA,EACnB,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AAAA,IACPA,sBAAiBC,iCAAa,EAAE,MAAM;AAAA,IACtCD,sBAAiB,CAACE,+BAAW,EAAE,SAAS,UAAU,EAAE,MAAM;AAAA;AAAA,EAE5D,SAAS,CAACF,sBAAiBG;AAAA;AAG7B,MAAM,yBAAyB,iCAC1B,eAD0B;AAAA,EAE7B,SAAS;AAAA,IACP,GAAG,aAAa;AAAA,IAChBH,sBACE,CAACI,8BAAU,EAAE,iBAAiB,MAAM,eAAe,MAAM,OAAO,SAChE,EAAE,MAAM;AAAA;AAAA;AASd,MAAM,cAAcC,iBAClB,OAAO,UAAkB,SAAwB,UAA0B;AACzE,QAAoC,cAA5B,UAAQ,SAAoB,IAAX,mBAAW,IAAX,CAAjB;AACR,QAAM,SAAS,MAAMC,iBAAU,UAAU,QAAQ;AACjD,MAAI,CAAC;AAAO,WAAO;AACnB,QAAM,SAAS,MAAMC,oBACnB,QACA,QAAQ,aAAa,yBAAyB;AAEhD,MAAI,mCAAS,OAAM;AACjB,UAAM,IAAI,MAAM;AAAA;AAElB,SAAO,OAAO;AAAA;AAIlB,oBAEE,UACM;AACN,OAAK,aAAa,KAAK;AACvB,QAAM,WAAW,KAAK;AAEtB,QAAM,UAAU,KAAK;AAErB,QAAM,iBAAkB,OAAM;AAC5B,QAAI,SAAS,WAAW;AAAY,aAAO;AAC3C,UAAM,gBAAgB,SAAS,MAAM;AACrC,WAAO,gBAAgB,kBAAkB,cAAc,OAAO;AAAA;AAGhE,QAAM,QAAQ;AAAA,IACZ,QAAQ;AAAA,MACN,MAAM;AAAA,MACN;AAAA,MACA,gBAAgB,CAACC,0BAAMC;AAAA;AAAA,IAEzB,UAAUC,eAAU,KAAK;AAAA;AAG3B,MAAI,CAAC,gBAAgB;AACnB,gBAAY,UAAU,SAAS,OAAO;AAAA,SACjC;AACL,SAAK,GAAG,SAAS,KAAK,cAAc,CAAC,KAAK,WAAW;AACnD,UAAI,KAAK;AACP,iBAAS;AACT;AAAA;AAEF,kBAAY,OAAO,SAAS,SAAS,OAAO,CAAC,MAAK,YAAY;AAC5D,YAAI,MAAK;AACP,mBAAS;AACT;AAAA;AAEF,iBAAS,MAAM,GAAG;AAAA,EAAY;AAAA;AAAA;AAAA;AAAA;;;;"}
\No newline at end of file