diff --git a/.github/workflows/codspeed.yml b/.github/workflows/codspeed.yml index 5b47c823e..c9d9a49a8 100644 --- a/.github/workflows/codspeed.yml +++ b/.github/workflows/codspeed.yml @@ -18,14 +18,14 @@ jobs: fail-fast: false matrix: include: - - package: lightningcss + - package: rspack_lightningcss bench: transform steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 - - uses: dtolnay/rust-toolchain@stable - - uses: Swatinem/rust-cache@v2 + - uses: dtolnay/rust-toolchain@686976e191b89faba57d3206551f0f330d8cb249 # stable + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 - name: Install cargo-codspeed run: cargo install cargo-codspeed --locked @@ -34,7 +34,7 @@ jobs: run: cargo codspeed build -p ${{ matrix.package }} --bench ${{ matrix.bench }} - name: Run benchmarks - uses: CodSpeedHQ/action@v4 + uses: CodSpeedHQ/action@f22792bfac16f3e14eb9fbea76f4a48e9cc22b93 # v4.19.1 with: mode: simulation run: cargo codspeed run -p ${{ matrix.package }} --bench ${{ matrix.bench }} diff --git a/.github/workflows/release-crates.yml b/.github/workflows/release-crates.yml index 6217bc50b..032c2cc25 100644 --- a/.github/workflows/release-crates.yml +++ b/.github/workflows/release-crates.yml @@ -1,19 +1,40 @@ name: release-crates on: workflow_dispatch: + inputs: + dry_run: + description: Validate publishing without uploading + type: boolean + default: false + workflow_call: + inputs: + dry_run: + type: boolean + default: false + secrets: + CRATES_IO_TOKEN: + required: false + +permissions: + contents: read + +concurrency: + group: release-rspack-lightningcss-crate + cancel-in-progress: false jobs: release-crates: runs-on: ubuntu-latest name: Release Rust crate steps: - - uses: actions/checkout@v3 - - uses: bahmutov/npm-install@v1.8.32 + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 - name: Install Rust - uses: dtolnay/rust-toolchain@stable - - run: cargo login ${CRATES_IO_TOKEN} + uses: dtolnay/rust-toolchain@686976e191b89faba57d3206551f0f330d8cb249 # stable + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 + - name: Validate crate + run: cargo publish -p rspack_lightningcss --dry-run + - name: Publish crate + if: ${{ !inputs.dry_run }} + run: cargo publish -p rspack_lightningcss env: - CRATES_IO_TOKEN: ${{ secrets.CRATES_IO_TOKEN }} - - run: | - cargo install cargo-workspaces - cargo workspaces publish --no-remove-dev-deps --from-git -y + CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_IO_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 95d304311..707741559 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,6 +1,18 @@ name: release on: workflow_dispatch: + inputs: + dry_run: + description: Validate publishing without uploading + type: boolean + default: false + +permissions: + contents: read + +concurrency: + group: release-rspack-lightningcss-npm + cancel-in-progress: false jobs: build: @@ -24,18 +36,18 @@ jobs: name: build-${{ matrix.target }} runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 - name: Install Node.JS - uses: actions/setup-node@v3 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: - node-version: 18 + node-version: 24 - name: Install Rust - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@686976e191b89faba57d3206551f0f330d8cb249 # stable - name: Setup rust target run: rustup target add ${{ matrix.target }} - - uses: bahmutov/npm-install@v1.8.32 + - uses: bahmutov/npm-install@c5482d70ec8706408996e31ac94075030694993f # v1.8.32 - name: Build release run: yarn build-release env: @@ -48,7 +60,7 @@ jobs: if: ${{ matrix.strip }} run: ${{ matrix.strip }} *.node ${{ matrix.binary }} - name: Upload artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: bindings-${{ matrix.target }} path: | @@ -59,18 +71,18 @@ jobs: name: build-apple-silicon runs-on: macos-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 - name: Install Node.JS - uses: actions/setup-node@v3 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: - node-version: 18 + node-version: 24 - name: Install Rust - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@686976e191b89faba57d3206551f0f330d8cb249 # stable - name: Setup rust target run: rustup target add aarch64-apple-darwin - - uses: bahmutov/npm-install@v1.8.32 + - uses: bahmutov/npm-install@c5482d70ec8706408996e31ac94075030694993f # v1.8.32 - name: Build release run: yarn build-release env: @@ -90,7 +102,7 @@ jobs: - name: Strip debug symbols # https://github.com/rust-lang/rust/issues/46034 run: strip -x *.node lightningcss - name: Upload artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: bindings-aarch64-apple-darwin path: | @@ -128,13 +140,13 @@ jobs: image: ${{ matrix.image }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 - name: Install Node.JS - uses: actions/setup-node@v3 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: - node-version: 18 + node-version: 24 - name: Install Rust - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@686976e191b89faba57d3206551f0f330d8cb249 # stable - name: Setup Android NDK if: ${{ matrix.target == 'aarch64-linux-android' }} @@ -151,7 +163,7 @@ jobs: - name: Setup rust target run: rustup target add ${{ matrix.target }} - - uses: bahmutov/npm-install@v1.8.32 + - uses: bahmutov/npm-install@c5482d70ec8706408996e31ac94075030694993f # v1.8.32 - name: Build release run: yarn build-release env: @@ -167,7 +179,7 @@ jobs: if: ${{ matrix.strip }} run: ${{ matrix.strip }} *.node lightningcss - name: Upload artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: bindings-${{ matrix.target }} path: | @@ -177,9 +189,9 @@ jobs: build-freebsd: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 - name: Build FreeBSD - uses: cross-platform-actions/action@v0.25.0 + uses: cross-platform-actions/action@cdc9ee69ef84a5f2e59c9058335d9c57bcb4ac86 # v0.25.0 env: DEBUG: napi:* RUSTUP_HOME: /usr/local/rustup @@ -215,7 +227,7 @@ jobs: rm -rf .yarn/cache - name: Upload artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: bindings-x86_64-unknown-freebsd path: | @@ -225,28 +237,28 @@ jobs: build-wasm: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 - name: Install Node.JS - uses: actions/setup-node@v3 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: - node-version: 18 - - uses: bahmutov/npm-install@v1.8.32 + node-version: 24 + - uses: bahmutov/npm-install@c5482d70ec8706408996e31ac94075030694993f # v1.8.32 - name: Install Rust - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@686976e191b89faba57d3206551f0f330d8cb249 # stable with: targets: wasm32-unknown-unknown - name: Setup rust target run: rustup target add wasm32-unknown-unknown - name: Install wasm-opt run: | - curl -L -O https://github.com/WebAssembly/binaryen/releases/download/version_111/binaryen-version_111-x86_64-linux.tar.gz - tar -xf binaryen-version_111-x86_64-linux.tar.gz + curl -L -O https://github.com/WebAssembly/binaryen/releases/download/version_133/binaryen-version_133-x86_64-linux.tar.gz + tar -xf binaryen-version_133-x86_64-linux.tar.gz - name: Build wasm run: | - export PATH="$PATH:./binaryen-version_111/bin" + export PATH="$PATH:./binaryen-version_133/bin" yarn wasm:build-release - name: Upload artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: wasm path: wasm/lightningcss_node.wasm @@ -261,10 +273,15 @@ jobs: - build-freebsd - build-wasm steps: - - uses: actions/checkout@v3 - - uses: bahmutov/npm-install@v1.8.32 + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + - name: Install Node.JS + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: 24 + registry-url: https://registry.npmjs.org + - uses: bahmutov/npm-install@c5482d70ec8706408996e31ac94075030694993f # v1.8.32 - name: Download artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: path: artifacts - name: Show artifacts @@ -274,10 +291,37 @@ jobs: node scripts/build-npm.js cp artifacts/wasm/* wasm/. node scripts/build-wasm.js - - run: echo //registry.npmjs.org/:_authToken=${NPM_TOKEN} > ~/.npmrc - env: - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + - name: Validate npm packages + run: | + for pkg in npm/* wasm cli .; do + npm publish "./$pkg" --dry-run + done + - name: Test installed npm packages + run: | + package_dir=$(mktemp -d) + npm pack . ./npm/node-linux-x64-gnu ./cli ./npm/cli-linux-x64-gnu ./wasm --pack-destination "$package_dir" + cd "$package_dir" + npm install --omit=optional --no-audit --no-fund ./*.tgz + node --input-type=module <<'NODE' + import assert from 'node:assert/strict'; + import { createRequire } from 'node:module'; + const require = createRequire(import.meta.url); + for (const name of ['rspack_lightningcss', 'rspack_lightningcss-wasm']) { + for (const pkg of [require(name), await import(name)]) { + const result = pkg.transform({ + filename: 'input.css', + code: Buffer.from('a { color: red; }'), + minify: true + }); + assert.equal(Buffer.from(result.code).toString(), 'a{color:red}'); + } + } + NODE + ./node_modules/.bin/lightningcss --help - name: Publish to npm + if: ${{ !inputs.dry_run }} + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} run: | for pkg in npm/*; do echo "Publishing $pkg..." @@ -286,27 +330,19 @@ jobs: cd ../..; done cd wasm - echo "Publishing lightningcss-wasm..."; + echo "Publishing rspack_lightningcss-wasm..."; npm publish cd .. cd cli - echo "Publishing lightningcss-cli..."; + echo "Publishing rspack_lightningcss-cli..."; npm publish cd .. - echo "Publishing lightningcss..."; + echo "Publishing rspack_lightningcss..."; npm publish release-crates: - runs-on: ubuntu-latest - name: Release Rust crate - steps: - - uses: actions/checkout@v3 - - uses: bahmutov/npm-install@v1.8.32 - - name: Install Rust - uses: dtolnay/rust-toolchain@stable - - run: cargo login ${CRATES_IO_TOKEN} - env: - CRATES_IO_TOKEN: ${{ secrets.CRATES_IO_TOKEN }} - - run: | - cargo install cargo-workspaces - cargo workspaces publish --no-remove-dev-deps --from-git -y + uses: ./.github/workflows/release-crates.yml + with: + dry_run: ${{ inputs.dry_run }} + secrets: + CRATES_IO_TOKEN: ${{ secrets.CRATES_IO_TOKEN }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1d88f08a8..dc3390ef8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -2,9 +2,9 @@ name: test on: push: - branches: [master] + branches: [master, rspack] pull_request: - branches: [master] + branches: [master, rspack] permissions: contents: read @@ -17,22 +17,22 @@ jobs: RUST_BACKTRACE: full RUSTFLAGS: -D warnings steps: - - uses: actions/checkout@v3 - - uses: dtolnay/rust-toolchain@stable - - uses: Swatinem/rust-cache@v2 + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + - uses: dtolnay/rust-toolchain@686976e191b89faba57d3206551f0f330d8cb249 # stable + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 - run: cargo fmt - run: cargo test --all-features test-js: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: - node-version: 18 - - uses: bahmutov/npm-install@v1.8.32 - - uses: dtolnay/rust-toolchain@stable - - uses: Swatinem/rust-cache@v2 + node-version: 24 + - uses: bahmutov/npm-install@c5482d70ec8706408996e31ac94075030694993f # v1.8.32 + - uses: dtolnay/rust-toolchain@686976e191b89faba57d3206551f0f330d8cb249 # stable + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 - run: yarn build - run: yarn test - run: yarn tsc @@ -40,24 +40,24 @@ jobs: test-wasm: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: - node-version: 18 - - uses: bahmutov/npm-install@v1.8.32 - - uses: dtolnay/rust-toolchain@stable + node-version: 24 + - uses: bahmutov/npm-install@c5482d70ec8706408996e31ac94075030694993f # v1.8.32 + - uses: dtolnay/rust-toolchain@686976e191b89faba57d3206551f0f330d8cb249 # stable with: targets: wasm32-unknown-unknown - name: Setup rust target run: rustup target add wasm32-unknown-unknown - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 - name: Install wasm-opt run: | - curl -L -O https://github.com/WebAssembly/binaryen/releases/download/version_111/binaryen-version_111-x86_64-linux.tar.gz - tar -xf binaryen-version_111-x86_64-linux.tar.gz + curl -L -O https://github.com/WebAssembly/binaryen/releases/download/version_133/binaryen-version_133-x86_64-linux.tar.gz + tar -xf binaryen-version_133-x86_64-linux.tar.gz - name: Build wasm run: | - export PATH="$PATH:./binaryen-version_111/bin" + export PATH="$PATH:./binaryen-version_133/bin" yarn wasm:build-release - run: TEST_WASM=node yarn test - run: TEST_WASM=browser yarn test diff --git a/Cargo.lock b/Cargo.lock index 6b787c7e3..969046e61 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -948,44 +948,6 @@ dependencies = [ "windows-targets", ] -[[package]] -name = "lightningcss" -version = "1.0.0-alpha.72" -dependencies = [ - "ahash 0.8.12", - "assert_cmd", - "assert_fs", - "bitflags 2.6.0", - "browserslist-rs", - "clap 3.2.25", - "codspeed-criterion-compat", - "const-str", - "cssparser", - "cssparser-color", - "dashmap", - "data-encoding", - "getrandom 0.3.3", - "indexmap 2.7.0", - "indoc", - "itertools 0.10.5", - "jemallocator", - "lazy_static", - "lightningcss-derive", - "parcel_selectors", - "parcel_sourcemap", - "pastey", - "pathdiff", - "predicates 2.1.5", - "pretty_assertions", - "rayon", - "schemars", - "serde", - "serde-content", - "serde_json", - "smallvec", - "static-self", -] - [[package]] name = "lightningcss-derive" version = "1.0.0-alpha.43" @@ -1002,10 +964,10 @@ version = "0.4.9" dependencies = [ "crossbeam-channel", "cssparser", - "lightningcss", "napi", "parcel_sourcemap", "rayon", + "rspack_lightningcss", "serde", "serde-content", "serde-detach", @@ -1019,8 +981,8 @@ version = "0.1.0" dependencies = [ "browserslist-rs", "cbindgen", - "lightningcss", "parcel_sourcemap", + "rspack_lightningcss", ] [[package]] @@ -1603,6 +1565,44 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "rspack_lightningcss" +version = "0.1.0" +dependencies = [ + "ahash 0.8.12", + "assert_cmd", + "assert_fs", + "bitflags 2.6.0", + "browserslist-rs", + "clap 3.2.25", + "codspeed-criterion-compat", + "const-str", + "cssparser", + "cssparser-color", + "dashmap", + "data-encoding", + "getrandom 0.3.3", + "indexmap 2.7.0", + "indoc", + "itertools 0.10.5", + "jemallocator", + "lazy_static", + "lightningcss-derive", + "parcel_selectors", + "parcel_sourcemap", + "pastey", + "pathdiff", + "predicates 2.1.5", + "pretty_assertions", + "rayon", + "schemars", + "serde", + "serde-content", + "serde_json", + "smallvec", + "static-self", +] + [[package]] name = "rustc-hash" version = "2.1.0" diff --git a/Cargo.toml b/Cargo.toml index 04cf96f3e..31fdac0e9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,13 +11,13 @@ members = [ [package] authors = ["Devon Govett "] -name = "lightningcss" -version = "1.0.0-alpha.72" +name = "rspack_lightningcss" +version = "0.1.0" description = "A CSS parser, transformer, and minifier" license = "MPL-2.0" edition = "2021" keywords = ["CSS", "minifier", "Parcel"] -repository = "https://github.com/parcel-bundler/lightningcss" +repository = "https://github.com/rstackjs/lightningcss" [package.metadata.docs.rs] all-features = true @@ -29,7 +29,7 @@ path = "src/main.rs" required-features = ["cli"] [lib] -name = "lightningcss" +name = "rspack_lightningcss" path = "src/lib.rs" crate-type = ["rlib"] diff --git a/README.md b/README.md index f44d7b3cd..9df2ec5c0 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,12 @@ +> [!NOTE] +> **Rspack fork:** This repository maintains Lightning CSS for Rspack integration and independent releases. The upstream project is [parcel-bundler/lightningcss](https://github.com/parcel-bundler/lightningcss). +> +> - **Rust:** Use `rspack_lightningcss`. Its version starts at `0.1.0` and is independent of upstream Lightning CSS versions. +> - **npm:** The package names are `rspack_lightningcss`, `rspack_lightningcss-cli`, and `rspack_lightningcss-wasm`. The CLI command remains `lightningcss`. +> - **Publishing:** Manually run `release-crates` for Rust, or `release` for npm/CLI/WASM and Rust. Both support `dry_run` to validate without publishing; pushes and tags do not automatically publish packages. +> +> The original upstream README is preserved below. Its package names and links refer to upstream Lightning CSS; use the fork's package names when integrating this repository. + # ⚡️ Lightning CSS An extremely fast CSS parser, transformer, and minifier written in Rust. Use it with [Parcel](https://parceljs.org), as a standalone library or CLI, or via a plugin with any other tool. diff --git a/benches/common/mod.rs b/benches/common/mod.rs index 16fbef8a5..5c2a96948 100644 --- a/benches/common/mod.rs +++ b/benches/common/mod.rs @@ -1,5 +1,5 @@ use criterion::black_box; -use lightningcss::stylesheet::{MinifyOptions, ParserOptions, PrinterOptions, StyleSheet}; +use rspack_lightningcss::stylesheet::{MinifyOptions, ParserOptions, PrinterOptions, StyleSheet}; use std::fmt::Write; pub struct Fixture { diff --git a/c/Cargo.toml b/c/Cargo.toml index 89978ef46..7868c8f73 100644 --- a/c/Cargo.toml +++ b/c/Cargo.toml @@ -9,7 +9,7 @@ publish = false crate-type = ["cdylib"] [dependencies] -lightningcss = { path = "../", features = ["browserslist"] } +lightningcss = { package = "rspack_lightningcss", path = "../", features = ["browserslist"] } parcel_sourcemap = { version = "2.1.1", features = ["json"] } browserslist-rs = { version = "0.21.0" } diff --git a/cli/postinstall.js b/cli/postinstall.js index 19dadc796..f70cb9c2a 100644 --- a/cli/postinstall.js +++ b/cli/postinstall.js @@ -1,6 +1,8 @@ let fs = require('fs'); let path = require('path'); +const { name } = require('./package.json'); + let parts = [process.platform, process.arch]; if (process.platform === 'linux') { const {MUSL, familySync} = require('detect-libc'); @@ -20,7 +22,7 @@ let binary = process.platform === 'win32' ? 'lightningcss.exe' : 'lightningcss'; let pkgPath; try { - pkgPath = path.dirname(require.resolve(`lightningcss-cli-${parts.join('-')}/package.json`)); + pkgPath = path.dirname(require.resolve(`${name}-${parts.join('-')}/package.json`)); } catch (err) { pkgPath = path.join(__dirname, '..', 'target', 'release'); if (!fs.existsSync(path.join(pkgPath, binary))) { @@ -34,7 +36,7 @@ try { try { fs.copyFileSync(path.join(pkgPath, binary), path.join(__dirname, binary)); } catch (err) { - console.error('Failed to move lightningcss-cli binary into place.'); + console.error('Failed to move CLI binary into place.'); process.exit(1); } } diff --git a/examples/custom_at_rule.rs b/examples/custom_at_rule.rs index 3f573371c..324e9a82f 100644 --- a/examples/custom_at_rule.rs +++ b/examples/custom_at_rule.rs @@ -1,7 +1,7 @@ use std::{collections::HashMap, convert::Infallible}; use cssparser::*; -use lightningcss::{ +use rspack_lightningcss::{ declaration::DeclarationBlock, error::PrinterError, printer::Printer, @@ -160,7 +160,7 @@ impl<'i, 'a> Visitor<'i, AtRule> for StyleRuleCollector<'i, 'a> { VisitTypes::RULES } - fn visit_rule(&mut self, rule: &mut lightningcss::rules::CssRule<'i, AtRule>) -> Result<(), Self::Error> { + fn visit_rule(&mut self, rule: &mut rspack_lightningcss::rules::CssRule<'i, AtRule>) -> Result<(), Self::Error> { match rule { CssRule::Style(rule) => { for selector in rule.selectors.0.iter() { @@ -224,17 +224,20 @@ impl<'a, 'i> Visitor<'i, AtRule> for ApplyVisitor<'a, 'i> { rule.visit_children(self) } - fn visit_url(&mut self, url: &mut lightningcss::values::url::Url<'i>) -> Result<(), Self::Error> { + fn visit_url(&mut self, url: &mut rspack_lightningcss::values::url::Url<'i>) -> Result<(), Self::Error> { url.url = format!("https://mywebsite.com/{}", url.url).into(); Ok(()) } - fn visit_color(&mut self, color: &mut lightningcss::values::color::CssColor) -> Result<(), Self::Error> { + fn visit_color(&mut self, color: &mut rspack_lightningcss::values::color::CssColor) -> Result<(), Self::Error> { *color = color.to_lab().unwrap(); Ok(()) } - fn visit_length(&mut self, length: &mut lightningcss::values::length::LengthValue) -> Result<(), Self::Error> { + fn visit_length( + &mut self, + length: &mut rspack_lightningcss::values::length::LengthValue, + ) -> Result<(), Self::Error> { match length { LengthValue::Px(px) => *length = LengthValue::Rem(*px / 16.0), _ => {} @@ -245,7 +248,7 @@ impl<'a, 'i> Visitor<'i, AtRule> for ApplyVisitor<'a, 'i> { fn visit_dashed_ident( &mut self, - ident: &mut lightningcss::values::ident::DashedIdent, + ident: &mut rspack_lightningcss::values::ident::DashedIdent, ) -> Result<(), Self::Error> { ident.0 = format!("--tw-{}", &ident.0[2..]).into(); Ok(()) diff --git a/examples/schema.rs b/examples/schema.rs index 9bfe3f694..48eb6eeb4 100644 --- a/examples/schema.rs +++ b/examples/schema.rs @@ -1,7 +1,7 @@ fn main() { #[cfg(feature = "jsonschema")] { - let schema = schemars::schema_for!(lightningcss::stylesheet::StyleSheet); + let schema = schemars::schema_for!(rspack_lightningcss::stylesheet::StyleSheet); let output = serde_json::to_string_pretty(&schema).unwrap(); let _ = std::fs::write("node/ast.json", output); } diff --git a/examples/serialize.rs b/examples/serialize.rs index 00d37210d..1b08ec28a 100644 --- a/examples/serialize.rs +++ b/examples/serialize.rs @@ -4,7 +4,7 @@ fn main() { #[cfg(feature = "serde")] fn parse() { - use lightningcss::stylesheet::{ParserOptions, StyleSheet}; + use rspack_lightningcss::stylesheet::{ParserOptions, StyleSheet}; use std::{env, fs}; let args: Vec = env::args().collect(); diff --git a/napi/Cargo.toml b/napi/Cargo.toml index 7480488ba..17c21c99f 100644 --- a/napi/Cargo.toml +++ b/napi/Cargo.toml @@ -17,7 +17,7 @@ serde = { version = "1.0.201", features = ["derive"] } serde-content = { version = "0.1.2", features = ["serde"] } serde_bytes = "0.11.5" cssparser = "0.37.0" -lightningcss = { version = "1.0.0-alpha.72", path = "../", features = [ +lightningcss = { package = "rspack_lightningcss", version = "0.1.0", path = "../", features = [ "nodejs", "serde", ] } diff --git a/node/ast.d.ts b/node/ast.d.ts index a57fe7f92..face74830 100644 --- a/node/ast.d.ts +++ b/node/ast.d.ts @@ -7742,7 +7742,7 @@ export type DefaultAtRule = null; * * # Example * - * ``` use lightningcss::stylesheet::{ StyleSheet, ParserOptions, MinifyOptions, PrinterOptions }; + * ``` use rspack_lightningcss::stylesheet::{ StyleSheet, ParserOptions, MinifyOptions, PrinterOptions }; * * // Parse a style sheet from a string. let mut stylesheet = StyleSheet::parse( r#" .foo { color: red; } * diff --git a/node/index.js b/node/index.js index 6fe25aef4..e4e64e55c 100644 --- a/node/index.js +++ b/node/index.js @@ -1,3 +1,5 @@ +const { name } = require('../package.json'); + let parts = [process.platform, process.arch]; if (process.platform === 'linux') { const { MUSL, familySync } = require('detect-libc'); @@ -15,7 +17,7 @@ if (process.platform === 'linux') { let native; try { - native = require(`lightningcss-${parts.join('-')}`); + native = require(`${name}-${parts.join('-')}`); } catch (err) { native = require(`../lightningcss.${parts.join('-')}.node`); } diff --git a/package.json b/package.json index 932dc5245..1bb4afada 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "lightningcss", + "name": "rspack_lightningcss", "version": "1.33.0", "license": "MPL-2.0", "description": "A CSS parser, transformer, and minifier written in Rust", @@ -24,7 +24,7 @@ }, "repository": { "type": "git", - "url": "https://github.com/parcel-bundler/lightningcss.git" + "url": "https://github.com/rstackjs/lightningcss.git" }, "engines": { "node": ">= 12.0.0" diff --git a/scripts/build-npm.js b/scripts/build-npm.js index ef447a7ea..8e2b1e26f 100644 --- a/scripts/build-npm.js +++ b/scripts/build-npm.js @@ -133,7 +133,7 @@ function buildNode(triple, cpu, os, libc, t) { } catch (err) { } fs.writeFileSync(`${dir}/npm/node-${t}/package.json`, JSON.stringify(pkg2, false, 2) + '\n'); fs.copyFileSync(`${dir}/artifacts/bindings-${triple}/${name}`, `${dir}/npm/node-${t}/${name}`); - fs.writeFileSync(`${dir}/npm/node-${t}/README.md`, `This is the ${triple} build of lightningcss. See https://github.com/parcel-bundler/lightningcss for details.`); + fs.writeFileSync(`${dir}/npm/node-${t}/README.md`, `This is the ${triple} build of ${pkg.name}. See ${pkg.repository.url} for details.`); fs.copyFileSync(`${dir}/LICENSE`, `${dir}/npm/node-${t}/LICENSE`); } @@ -165,6 +165,6 @@ function buildCLI(triple, cpu, os, libc, t) { fs.writeFileSync(`${dir}/npm/cli-${t}/package.json`, JSON.stringify(pkg2, false, 2) + '\n'); fs.copyFileSync(`${dir}/artifacts/bindings-${triple}/${binary}`, `${dir}/npm/cli-${t}/${binary}`); fs.chmodSync(`${dir}/npm/cli-${t}/${binary}`, 0o755); // Ensure execute bit is set. - fs.writeFileSync(`${dir}/npm/cli-${t}/README.md`, `This is the ${triple} build of lightningcss-cli. See https://github.com/parcel-bundler/lightningcss for details.`); + fs.writeFileSync(`${dir}/npm/cli-${t}/README.md`, `This is the ${triple} build of ${pkg.name}-cli. See ${pkg.repository.url} for details.`); fs.copyFileSync(`${dir}/LICENSE`, `${dir}/npm/cli-${t}/LICENSE`); } diff --git a/scripts/build-wasm.js b/scripts/build-wasm.js index 718821da9..a952cd002 100644 --- a/scripts/build-wasm.js +++ b/scripts/build-wasm.js @@ -29,7 +29,7 @@ fs.copyFileSync(`${dir}/node/ast.d.ts`, `${dir}/wasm/ast.d.ts`); fs.cpSync(`${dir}/node_modules/napi-wasm`, `${dir}/wasm/node_modules/napi-wasm`, {recursive: true}); let readme = fs.readFileSync(`${dir}/README.md`, 'utf8'); -readme = readme.replace('# ⚡️ Lightning CSS', '# ⚡️ lightningcss-wasm'); +readme = readme.replace('# ⚡️ Lightning CSS', `# ⚡️ ${pkg.name}-wasm`); fs.writeFileSync(`${dir}/wasm/README.md`, readme); const cjsBuild = { @@ -46,10 +46,13 @@ const cjsBuild = { inject: [`${dir}/wasm/import.meta.url-polyfill.js`], define: { 'import.meta.url': 'import_meta_url' }, }; -esbuild.build(cjsBuild).catch(console.error); +esbuild.build(cjsBuild).catch(err => { + console.error(err); + process.exitCode = 1; +}); let wasmPkg = { ...pkg }; -wasmPkg.name = 'lightningcss-wasm'; +wasmPkg.name += '-wasm'; wasmPkg.type = 'module'; wasmPkg.main = 'index.mjs'; wasmPkg.module = 'index.mjs'; diff --git a/scripts/build.js b/scripts/build.js index 59807fabf..9660a1205 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -28,7 +28,13 @@ async function build() { }); yarn.on('error', reject); - yarn.on('close', resolve); + yarn.on('close', code => { + if (code === 0) { + resolve(); + } else { + reject(new Error(`Native build failed with exit code ${code}`)); + } + }); }); } diff --git a/src/bundler.rs b/src/bundler.rs index 0bb4ccc65..db852b270 100644 --- a/src/bundler.rs +++ b/src/bundler.rs @@ -13,7 +13,7 @@ //! //! ```no_run //! use std::path::Path; -//! use lightningcss::{ +//! use rspack_lightningcss::{ //! bundler::{Bundler, FileProvider}, //! stylesheet::ParserOptions //! }; diff --git a/src/main.rs b/src/main.rs index 44a717bc3..a3ff7e520 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,8 @@ use clap::{ArgGroup, Parser}; -use lightningcss::bundler::{Bundler, FileProvider}; -use lightningcss::stylesheet::{MinifyOptions, ParserFlags, ParserOptions, PrinterOptions, StyleSheet}; -use lightningcss::targets::Browsers; use parcel_sourcemap::SourceMap; +use rspack_lightningcss::bundler::{Bundler, FileProvider}; +use rspack_lightningcss::stylesheet::{MinifyOptions, ParserFlags, ParserOptions, PrinterOptions, StyleSheet}; +use rspack_lightningcss::targets::Browsers; use serde::Serialize; use std::borrow::Cow; use std::io::IsTerminal; @@ -123,7 +123,7 @@ pub fn main() -> Result<(), std::io::Error> { let css_modules = if let Some(_) = cli_args.css_modules { let pattern = if let Some(pattern) = cli_args.css_modules_pattern.as_ref() { - match lightningcss::css_modules::Pattern::parse(pattern) { + match rspack_lightningcss::css_modules::Pattern::parse(pattern) { Ok(p) => p, Err(e) => { eprintln!("{}", e); @@ -134,7 +134,7 @@ pub fn main() -> Result<(), std::io::Error> { Default::default() }; - Some(lightningcss::css_modules::Config { + Some(rspack_lightningcss::css_modules::Config { pattern, dashed_idents: cli_args.css_modules_dashed_idents, ..Default::default() diff --git a/src/properties/mod.rs b/src/properties/mod.rs index 61659be31..097f1f45f 100644 --- a/src/properties/mod.rs +++ b/src/properties/mod.rs @@ -25,7 +25,7 @@ //! //! ``` //! use smallvec::smallvec; -//! use lightningcss::{ +//! use rspack_lightningcss::{ //! properties::{Property, PropertyId, background::*}, //! values::{number::NonNegative, url::Url, image::Image, color::{CssColor, RGBA}, position::*, length::*}, //! stylesheet::{ParserOptions, PrinterOptions}, diff --git a/src/rules/mod.rs b/src/rules/mod.rs index 2e1dc70bc..1e35a4635 100644 --- a/src/rules/mod.rs +++ b/src/rules/mod.rs @@ -12,7 +12,7 @@ //! This example shows how you could parse a single CSS rule, and serialize it to a string. //! //! ``` -//! use lightningcss::{ +//! use rspack_lightningcss::{ //! rules::CssRule, //! traits::ToCss, //! stylesheet::{ParserOptions, PrinterOptions} diff --git a/src/stylesheet.rs b/src/stylesheet.rs index f251cf334..65784708e 100644 --- a/src/stylesheet.rs +++ b/src/stylesheet.rs @@ -34,7 +34,7 @@ pub use crate::printer::PseudoClasses; /// # Example /// /// ``` -/// use lightningcss::stylesheet::{ +/// use rspack_lightningcss::stylesheet::{ /// StyleSheet, ParserOptions, MinifyOptions, PrinterOptions /// }; /// @@ -349,7 +349,7 @@ where /// # Example /// /// ``` -/// use lightningcss::stylesheet::{ +/// use rspack_lightningcss::stylesheet::{ /// StyleAttribute, ParserOptions, MinifyOptions, PrinterOptions /// }; /// diff --git a/src/targets.rs b/src/targets.rs index 91ff8c677..0f8eeb144 100644 --- a/src/targets.rs +++ b/src/targets.rs @@ -19,7 +19,7 @@ use serde::{Deserialize, Serialize}; /// This example represents a target of Safari 13.2.0. /// /// ``` -/// use lightningcss::targets::Browsers; +/// use rspack_lightningcss::targets::Browsers; /// /// let targets = Browsers { /// safari: Some((13 << 16) | (2 << 8)), diff --git a/src/values/mod.rs b/src/values/mod.rs index 93c2af750..79a540480 100644 --- a/src/values/mod.rs +++ b/src/values/mod.rs @@ -11,7 +11,7 @@ //! Similar patterns for parsing and serializing are possible across all value types. //! //! ``` -//! use lightningcss::{ +//! use rspack_lightningcss::{ //! traits::{Parse, ToCss}, //! values::color::CssColor, //! printer::PrinterOptions diff --git a/src/visitor.rs b/src/visitor.rs index a8df3d85a..846cd9067 100644 --- a/src/visitor.rs +++ b/src/visitor.rs @@ -11,7 +11,7 @@ //! //! ``` //! use std::convert::Infallible; -//! use lightningcss::{ +//! use rspack_lightningcss::{ //! stylesheet::{StyleSheet, ParserOptions, PrinterOptions}, //! visitor::{Visitor, Visit, VisitTypes}, //! visit_types, diff --git a/test-integration.mjs b/test-integration.mjs index 839a13d86..395c99cdc 100644 --- a/test-integration.mjs +++ b/test-integration.mjs @@ -2,7 +2,7 @@ import puppeteer from 'puppeteer'; import fetch from 'node-fetch'; import assert from 'assert'; import {diff} from 'jest-diff'; -import * as css from 'lightningcss'; +import * as css from 'rspack_lightningcss'; let urls = [ 'https://getbootstrap.com/docs/5.1/examples/headers/', diff --git a/tests/cli_integration_tests.rs b/tests/cli_integration_tests.rs index 943beaa71..1d8158352 100644 --- a/tests/cli_integration_tests.rs +++ b/tests/cli_integration_tests.rs @@ -2,8 +2,8 @@ use assert_cmd::prelude::*; use assert_fs::fixture::FixtureError; use assert_fs::prelude::*; use indoc::indoc; -use lightningcss::css_modules::CssModuleExport; use predicates::prelude::*; +use rspack_lightningcss::css_modules::CssModuleExport; use std::collections::HashMap; use std::fs; use std::process::Command; diff --git a/tests/test_cssom.rs b/tests/test_cssom.rs index 4e13842a6..4add7f0c8 100644 --- a/tests/test_cssom.rs +++ b/tests/test_cssom.rs @@ -1,4 +1,4 @@ -use lightningcss::{ +use rspack_lightningcss::{ declaration::DeclarationBlock, properties::{Property, PropertyId}, stylesheet::{ParserOptions, PrinterOptions}, diff --git a/tests/test_custom_parser.rs b/tests/test_custom_parser.rs index a48f68136..6eb0bc903 100644 --- a/tests/test_custom_parser.rs +++ b/tests/test_custom_parser.rs @@ -1,5 +1,5 @@ use cssparser::*; -use lightningcss::{ +use rspack_lightningcss::{ declaration::DeclarationBlock, error::{ParserError, PrinterError}, printer::Printer, diff --git a/tests/test_serde.rs b/tests/test_serde.rs index a754edf12..23b3397d9 100644 --- a/tests/test_serde.rs +++ b/tests/test_serde.rs @@ -1,5 +1,5 @@ #[cfg(feature = "serde")] -use lightningcss::stylesheet::{ParserOptions, StyleSheet}; +use rspack_lightningcss::stylesheet::{ParserOptions, StyleSheet}; #[cfg(feature = "serde")] #[test] diff --git a/website/include/layout.html b/website/include/layout.html index 772a152ab..4ff881e13 100644 --- a/website/include/layout.html +++ b/website/include/layout.html @@ -26,7 +26,7 @@ Lightning CSS -

Playground • Docs • Rust docs • npm • GitHub

+

Playground • Docs • Rust docs • npm • GitHub