afterVersionBump.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #!/usr/bin/env node
  2. import { readFileSync } from 'node:fs'
  3. import { open } from 'node:fs/promises'
  4. import { fileURLToPath } from 'node:url'
  5. import { globby } from 'globby'
  6. const ROOT = new URL('../../', import.meta.url)
  7. const PACKAGES_FOLDER = new URL('./packages/', ROOT)
  8. const VERSION_URL = /(?<=https:\/\/\S+\/v)\d+\.\d+\.\d+(?:-(?:alpha|beta)(?:[.-]\d+)?)?(?=\/)/g
  9. async function replaceInFile (filename, replacements) {
  10. const file = await open(filename, 'r+')
  11. let content = await file.readFile('utf8')
  12. let hasBeenModified = false
  13. let exec
  14. while (exec = VERSION_URL.exec(content)) {
  15. // eslint-disable-next-line no-loop-func
  16. const pkg = Object.keys(replacements).find(pkgName => content.slice(exec.index - pkgName.length, exec.index) === pkgName)
  17. if (pkg && exec[0] !== replacements[pkg]) {
  18. hasBeenModified = true
  19. content = content.slice(0, exec.index) + replacements[pkg] + content.slice(VERSION_URL.lastIndex)
  20. }
  21. }
  22. if (hasBeenModified) {
  23. const { bytesWritten } = await file.write(content, 0, 'utf8')
  24. await file.truncate(bytesWritten)
  25. console.log(filename)
  26. }
  27. await file.close()
  28. }
  29. async function updateVersions (files, packageNames) {
  30. const replacements = Object.fromEntries(packageNames.map(packageName => {
  31. const { version } = JSON.parse(readFileSync(new URL(`./${packageName}/package.json`, PACKAGES_FOLDER), 'utf8'))
  32. // uppy → /uppy/v
  33. // @uppy/robodog → /uppy/robodog/v
  34. const urlPart = `/${packageName.replace(/^@/, '')}/v`
  35. return [urlPart, version]
  36. }))
  37. await Promise.all(files.map(f => replaceInFile(f, replacements)))
  38. }
  39. const files = await globby([
  40. 'README.md',
  41. 'BUNDLE-README.md',
  42. 'examples/**/*.html',
  43. 'packages/*/README.md',
  44. 'packages/@uppy/*/README.md',
  45. 'website/src/docs/**',
  46. 'website/src/examples/**',
  47. 'website/themes/uppy/layout/**',
  48. '!**/node_modules/**',
  49. ], {
  50. gitignore: true,
  51. onlyFiles: true,
  52. cwd: fileURLToPath(ROOT),
  53. absolute: true,
  54. })
  55. await updateVersions(files, [
  56. 'uppy',
  57. '@uppy/locales',
  58. ])