UNPKG

next

Version:

The React Framework

85 lines (84 loc) 3.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = swcLoader; exports.pitch = pitch; exports.raw = void 0; var _swc = require("../../swc"); var _options = require("../../swc/options"); var _path = require("path"); function swcLoader(inputSource, inputSourceMap) { const loaderSpan = this.currentTraceSpan.traceChild('next-swc-loader'); const callback = this.async(); loaderSpan.traceAsyncFn(()=>loaderTransform.call(this, loaderSpan, inputSource, inputSourceMap) ).then(([transformedSource, outputSourceMap])=>{ callback(null, transformedSource, outputSourceMap || inputSourceMap); }, (err)=>{ callback(err); }); } async function loaderTransform(parentTrace, source, inputSourceMap) { // Make the loader async const filename = this.resourcePath; let loaderOptions = this.getOptions() || {}; const { isServer , pagesDir , hasReactRefresh , nextConfig , jsConfig } = loaderOptions; const isPageFile = filename.startsWith(pagesDir); const swcOptions = (0, _options).getLoaderSWCOptions({ pagesDir, filename, isServer: isServer, isPageFile, development: this.mode === 'development', hasReactRefresh, nextConfig, jsConfig }); const programmaticOptions = { ...swcOptions, filename, inputSourceMap: inputSourceMap ? JSON.stringify(inputSourceMap) : undefined, // Set the default sourcemap behavior based on Webpack's mapping flag, sourceMaps: this.sourceMap, inlineSourcesContent: this.sourceMap, // Ensure that Webpack will get a full absolute path in the sourcemap // so that it can properly map the module back to its internal cached // modules. sourceFileName: filename }; if (!programmaticOptions.inputSourceMap) { delete programmaticOptions.inputSourceMap; } // auto detect development mode if (this.mode && programmaticOptions.jsc && programmaticOptions.jsc.transform && programmaticOptions.jsc.transform.react && !Object.prototype.hasOwnProperty.call(programmaticOptions.jsc.transform.react, 'development')) { programmaticOptions.jsc.transform.react.development = this.mode === 'development'; } const swcSpan = parentTrace.traceChild('next-swc-transform'); return swcSpan.traceAsyncFn(()=>(0, _swc).transform(source, programmaticOptions).then((output)=>{ return [ output.code, output.map ? JSON.parse(output.map) : undefined ]; }) ); } const EXCLUDED_PATHS = /[\\/](cache[\\/][^\\/]+\.zip[\\/]node_modules|__virtual__)[\\/]/g; function pitch() { const callback = this.async(); (async ()=>{ let loaderOptions = this.getOptions() || {}; if (// TODO: investigate swc file reading in PnP mode? !process.versions.pnp && loaderOptions.fileReading && !EXCLUDED_PATHS.test(this.resourcePath) && this.loaders.length - 1 === this.loaderIndex && (0, _path).isAbsolute(this.resourcePath) && !await (0, _swc).isWasm()) { const loaderSpan = this.currentTraceSpan.traceChild('next-swc-loader'); this.addDependency(this.resourcePath); return loaderSpan.traceAsyncFn(()=>loaderTransform.call(this, loaderSpan) ); } })().then((r)=>{ if (r) return callback(null, ...r); callback(); }, callback); } const raw = true; exports.raw = raw; //# sourceMappingURL=next-swc-loader.js.map