From ca88f622d1a0c5bba33feea38a86720f61cd0f97 Mon Sep 17 00:00:00 2001 From: Valentin Silyutin Date: Wed, 21 Jan 2026 15:13:48 +0400 Subject: [PATCH] @advdominion/lightningcss-loader --- packages/lightningcss-loader/README.md | 53 +++++++++++++++++++++++ packages/lightningcss-loader/index.js | 22 ++++++++++ packages/lightningcss-loader/package.json | 14 ++++++ yarn.lock | 6 +++ 4 files changed, 95 insertions(+) create mode 100644 packages/lightningcss-loader/README.md create mode 100644 packages/lightningcss-loader/index.js create mode 100644 packages/lightningcss-loader/package.json diff --git a/packages/lightningcss-loader/README.md b/packages/lightningcss-loader/README.md new file mode 100644 index 0000000..4232dce --- /dev/null +++ b/packages/lightningcss-loader/README.md @@ -0,0 +1,53 @@ +# lightningcss-loader + +[Lightning CSS](https://lightningcss.dev) loader for [Webpack](https://webpack.js.org) + +## Usage + +```js +import { transform } from 'lightningcss'; + +return { + ..., + rules: [ + { + test: /\.css$/, + use: [ + { + loader: '@advdominion/lightningcss-loader', + options: { + implementation: transform, + }, + }, + ], + }, + ], +}; +``` + +### Passing options to Lightning CSS + +```js +import { transform } from 'lightningcss'; + +return { + ..., + rules: [ + { + test: /\.css$/, + use: [ + { + loader: '@advdominion/lightningcss-loader', + options: { + implementation: transform, + drafts: { + customMedia: true, + }, + minify: false, + }, + }, + ], + }, + ], +}; +``` diff --git a/packages/lightningcss-loader/index.js b/packages/lightningcss-loader/index.js new file mode 100644 index 0000000..e904148 --- /dev/null +++ b/packages/lightningcss-loader/index.js @@ -0,0 +1,22 @@ +const lightningcssLoader = (source, sourceMap) => { + const { implementation, ...options } = this.getOptions(); + const callback = this.async(); + + if (typeof implementation !== 'function') { + throw new TypeError( + `[lightningcss-loader]: The "implementation" option is required and must provide "transform" function of the LightningCSS`, + ); + } + + const { code, map } = implementation({ + filename: this.resourcePath, + code: Buffer.from(source), + sourceMap: this.sourceMap, + inputSourceMap: this.sourceMap && sourceMap ? JSON.stringify(sourceMap) : undefined, + ...options, + }); + + callback(undefined, code.toString(), map && JSON.parse(map.toString())); +} + +export default lightningcssLoader; diff --git a/packages/lightningcss-loader/package.json b/packages/lightningcss-loader/package.json new file mode 100644 index 0000000..4f80465 --- /dev/null +++ b/packages/lightningcss-loader/package.json @@ -0,0 +1,14 @@ +{ + "name": "@advdominion/lightningcss-loader", + "version": "1.0.0", + "type": "module", + "main": "index.js", + "repository": { + "type": "git", + "url": "https://gitea.optiweb.ru/public/frontend.git" + }, + "license": "MIT", + "publishConfig": { + "access": "public" + } +} diff --git a/yarn.lock b/yarn.lock index fbe9db7..e7d313b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -43,6 +43,12 @@ __metadata: languageName: unknown linkType: soft +"@advdominion/lightningcss-loader@workspace:packages/lightningcss-loader": + version: 0.0.0-use.local + resolution: "@advdominion/lightningcss-loader@workspace:packages/lightningcss-loader" + languageName: unknown + linkType: soft + "@advdominion/pluralize@workspace:packages/pluralize": version: 0.0.0-use.local resolution: "@advdominion/pluralize@workspace:packages/pluralize"