utils.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // @ts-check
  2. import fs from 'node:fs'
  3. import pico from 'picocolors'
  4. import { createRequire } from 'node:module'
  5. const require = createRequire(import.meta.url)
  6. export const targets = fs.readdirSync('packages').filter(f => {
  7. if (
  8. !fs.statSync(`packages/${f}`).isDirectory() ||
  9. !fs.existsSync(`packages/${f}/package.json`)
  10. ) {
  11. return false
  12. }
  13. const pkg = require(`../packages/${f}/package.json`)
  14. if (pkg.private && !pkg.buildOptions) {
  15. return false
  16. }
  17. return true
  18. })
  19. /**
  20. *
  21. * @param {ReadonlyArray<string>} partialTargets
  22. * @param {boolean | undefined} includeAllMatching
  23. */
  24. export function fuzzyMatchTarget(partialTargets, includeAllMatching) {
  25. /** @type {Array<string>} */
  26. const matched = []
  27. partialTargets.forEach(partialTarget => {
  28. for (const target of targets) {
  29. if (target.match(partialTarget)) {
  30. matched.push(target)
  31. if (!includeAllMatching) {
  32. break
  33. }
  34. }
  35. }
  36. })
  37. if (matched.length) {
  38. return matched
  39. } else {
  40. console.log()
  41. console.error(
  42. ` ${pico.white(pico.bgRed(' ERROR '))} ${pico.red(
  43. `Target ${pico.underline(partialTargets.toString())} not found!`,
  44. )}`,
  45. )
  46. console.log()
  47. process.exit(1)
  48. }
  49. }