convert.ts 920 B

12345678910111213141516171819202122232425262728293031323334353637
  1. import * as fs from 'node:fs'
  2. import { createConsola } from 'consola'
  3. import { ungzip } from 'pako'
  4. const dir = './public'
  5. const logger = createConsola({
  6. formatOptions: {
  7. colors: true,
  8. compact: false,
  9. date: true,
  10. },
  11. defaults: {
  12. tag: 'TGS2LOTTIE',
  13. },
  14. })
  15. export default defineNitroPlugin(async ({ hooks }) => {
  16. hooks.hookOnce('request', () => {
  17. const files = fs.readdirSync(`${dir}/tgs`)
  18. let converted = 0
  19. files.forEach((fileName: string) => {
  20. const tgz_file = fs.readFileSync(`${dir}/tgs/${fileName}`)
  21. if (tgz_file) {
  22. try {
  23. fs.readFileSync(`${dir}/lottie/${fileName.slice(0, fileName.length - 4)}.json`)
  24. }
  25. catch {
  26. fs.writeFileSync(`${dir}/lottie/${fileName.slice(0, fileName.length - 4)}.json`, ungzip(tgz_file))
  27. converted += 1
  28. }
  29. }
  30. })
  31. logger.info(`Converted ${converted} TGZ files`)
  32. })
  33. })