{"version":3,"sources":["../../../../../../../src/build/webpack/loaders/lightningcss-loader/src/minify.ts"],"sourcesContent":["// @ts-ignore\nimport { ModuleFilenameHelpers } from 'next/dist/compiled/webpack/webpack'\nimport { webpack } from 'next/dist/compiled/webpack/webpack'\n// @ts-ignore\nimport { RawSource, SourceMapSource } from 'next/dist/compiled/webpack-sources3'\nimport { ECacheKey } from './interface'\nimport type { Compilation, Compiler } from 'webpack'\nimport { getTargets } from './utils'\nimport { Buffer } from 'buffer'\nimport { getBindingsSync } from '../../../../../build/swc'\n\nconst PLUGIN_NAME = 'lightning-css-minify'\nconst CSS_FILE_REG = /\\.css(?:\\?.*)?$/i\n\nexport class LightningCssMinifyPlugin {\n  private readonly options: any\n  private transform: any | undefined\n\n  constructor(opts: any = {}) {\n    const { implementation, ...otherOpts } = opts\n    if (implementation && typeof implementation.transformCss !== 'function') {\n      throw new TypeError(\n        `[LightningCssMinifyPlugin]: implementation.transformCss must be an 'lightningcss' transform function. Received ${typeof implementation.transformCss}`\n      )\n    }\n\n    this.transform = implementation?.transformCss\n    this.options = otherOpts\n  }\n\n  apply(compiler: Compiler) {\n    const meta = JSON.stringify({\n      name: '@next/lightningcss-loader',\n      version: '0.0.0',\n      options: this.options,\n    })\n\n    compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {\n      compilation.hooks.chunkHash.tap(PLUGIN_NAME, (_, hash) =>\n        hash.update(meta)\n      )\n\n      compilation.hooks.processAssets.tapPromise(\n        {\n          name: PLUGIN_NAME,\n          stage: webpack.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_SIZE,\n          additionalAssets: true,\n        },\n        async () => await this.transformAssets(compilation)\n      )\n\n      compilation.hooks.statsPrinter.tap(PLUGIN_NAME, (statsPrinter) => {\n        statsPrinter.hooks.print\n          .for('asset.info.minimized')\n          // @ts-ignore\n          .tap(PLUGIN_NAME, (minimized, { green, formatFlag }) => {\n            // @ts-ignore\n            return minimized ? green(formatFlag('minimized')) : undefined\n          })\n      })\n    })\n  }\n\n  private async transformAssets(compilation: Compilation): Promise<void> {\n    const {\n      options: { devtool },\n    } = compilation.compiler\n\n    if (!this.transform) {\n      this.transform = getBindingsSync().css.lightning.transform\n    }\n\n    const sourcemap =\n      this.options.sourceMap === undefined\n        ? ((devtool && (devtool as string).includes('source-map')) as boolean)\n        : this.options.sourceMap\n\n    const {\n      include,\n      exclude,\n      test: testRegExp,\n      targets: userTargets,\n      ...transformOptions\n    } = this.options\n\n    const assets = compilation.getAssets().filter(\n      (asset) =>\n        // Filter out already minimized\n        !asset.info.minimized &&\n        // Filter out by file type\n        (testRegExp || CSS_FILE_REG).test(asset.name) &&\n        ModuleFilenameHelpers.matchObject({ include, exclude }, asset.name)\n    )\n\n    await Promise.all(\n      assets.map(async (asset) => {\n        const { source, map } = asset.source.sourceAndMap()\n        const sourceAsString = source.toString()\n        const code = typeof source === 'string' ? Buffer.from(source) : source\n        const targets = getTargets({\n          targets: userTargets,\n          key: ECacheKey.minify,\n        })\n\n        const result = await this.transform!({\n          filename: asset.name,\n          code,\n          minify: true,\n          sourceMap: sourcemap,\n          targets,\n          ...transformOptions,\n        })\n        const codeString = result.code.toString()\n\n        compilation.updateAsset(\n          asset.name,\n          // @ts-ignore\n          sourcemap\n            ? new SourceMapSource(\n                codeString,\n                asset.name,\n                JSON.parse(result.map!.toString()),\n                sourceAsString,\n                map as any,\n                true\n              )\n            : new RawSource(codeString),\n          {\n            ...asset.info,\n            minimized: true,\n          }\n        )\n      })\n    )\n  }\n}\n"],"names":["ModuleFilenameHelpers","webpack","RawSource","SourceMapSource","ECacheKey","getTargets","Buffer","getBindingsSync","PLUGIN_NAME","CSS_FILE_REG","LightningCssMinifyPlugin","constructor","opts","implementation","otherOpts","transformCss","TypeError","transform","options","apply","compiler","meta","JSON","stringify","name","version","hooks","compilation","tap","chunkHash","_","hash","update","processAssets","tapPromise","stage","Compilation","PROCESS_ASSETS_STAGE_OPTIMIZE_SIZE","additionalAssets","transformAssets","statsPrinter","print","for","minimized","green","formatFlag","undefined","devtool","css","lightning","sourcemap","sourceMap","includes","include","exclude","test","testRegExp","targets","userTargets","transformOptions","assets","getAssets","filter","asset","info","matchObject","Promise","all","map","source","sourceAndMap","sourceAsString","toString","code","from","key","minify","result","filename","codeString","updateAsset","parse"],"mappings":"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","ignoreList":[0]}