Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: Upgrading from 5 to 6: illegal operation on a directory #1266

Open
1 task done
aminya opened this issue Aug 24, 2024 · 1 comment · May be fixed by #1308
Open
1 task done

[Bug]: Upgrading from 5 to 6: illegal operation on a directory #1266

aminya opened this issue Aug 24, 2024 · 1 comment · May be fixed by #1308

Comments

@aminya
Copy link

aminya commented Aug 24, 2024

Describe the bug

I upgraded from purgecss 5 to 6, but I have started to get these errors. Not sure where they come from. Seems to be related to glob.

node:internal/process/promises:391
    triggerUncaughtException(err, true /* fromPromise */);
    ^

[Error: EISDIR: illegal operation on a directory, read] {
  errno: -21,
  code: 'EISDIR',
  syscall: 'read'
}

Node.js v22.6.0

To Reproduce

The purgecss.config.ts

import type { UserDefinedOptions } from "purgecss"

export const purgeCSSConfig: UserDefinedOptions = {
  content: [".solid/**/*.{js,html,json,svg}", "dist/**/*.{js,html,json,svg}", "**/!(bundle-visualizer.html)"],
  css: ["dist/**/*.css", ".solid/**/*.css"],
  // this extractor works with Tailwind's class names (e.g. `bg-red-500`, `dark:bg-red-500`, `px-2.5`, `.max-w-[800px]`, `bg-[#FFFFFF]`)
  defaultExtractor: (content) => content.match(/[\w#%./:[\]-]+(?<!:)/g) ?? [],
}

The script

import { PurgeCSS } from "purgecss"
import { purgeCSSConfig } from "./purgecss.config.js"
import { writeFileWithStats } from "./lib.js"

async function main() {
  if (process.env.NODE_ENV !== "production") {
    return
  }

  const purgeCssResult = await new PurgeCSS().purge(purgeCSSConfig)

  await Promise.all([
    ...purgeCssResult.map(async ({ css, file }) => {
      if (file === undefined) {
        return
      }
      await writeFileWithStats(file, file, css)
    }),
  ])
}
await main()

Environment

Node 22, Linux

Add any other context about the problem here

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct
@aminya aminya added the bug label Aug 24, 2024
aminya added a commit to aminya/purgecss that referenced this issue Dec 15, 2024
This fixes the glob regression issues from v5 + parallelizes the async IO operations for faster purge.

## Proposed changes

Fixes an issue that the previously working glob expressions no longer work in v6 and v7. This changes the glob dependency to fast-glob to fix the issue. I also parallelized the async-io operations for faster purge.
Fixes FullHuman#1266

## Types of changes

What types of changes does your code introduce?
_Put an `x` in the boxes that apply_

- [x] Bugfix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

## Checklist

_Put an `x` in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code._

- [x] Lint and unit tests pass locally with my changes
- [x] I have added tests that prove my fix is effective or that my feature works
- [ ] I have added necessary documentation (if appropriate)

## Further comments
aminya added a commit to aminya/purgecss that referenced this issue Dec 15, 2024
This fixes the glob regression issues from v5 + parallelizes the async IO operations for faster purge.

## Proposed changes

Fixes an issue that the previously working glob expressions no longer work in v6 and v7. This changes the glob dependency to fast-glob to fix the issue. I also parallelized the async-io operations for faster purge.
Fixes FullHuman#1266

## Types of changes

What types of changes does your code introduce?
_Put an `x` in the boxes that apply_

- [x] Bugfix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

## Checklist

_Put an `x` in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code._

- [x] Lint and unit tests pass locally with my changes
- [x] I have added tests that prove my fix is effective or that my feature works
- [ ] I have added necessary documentation (if appropriate)

## Further comments
@aminya aminya linked a pull request Dec 15, 2024 that will close this issue
6 tasks
@aminya
Copy link
Author

aminya commented Dec 15, 2024

I made a pull request in #1308 and verified that the issue is now fixed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants