bun.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import { dirname } from 'path';
  2. import fs from 'fs';
  3. import fsp from 'fs/promises';
  4. const peekStatus = new WeakMap<Promise<any>, 'pending' | 'rejected' | 'fulfilled'>();
  5. export function track<T>(promise: Promise<T>): Promise<T> {
  6. // only set to pending if not already tracked
  7. if (!peekStatus.has(promise)) {
  8. peekStatus.set(promise, 'pending');
  9. }
  10. // Observe the promise, saving the fulfillment in a closure scope.
  11. return promise.then(
  12. (v) => {
  13. peekStatus.set(promise, 'fulfilled');
  14. return v;
  15. },
  16. (e) => {
  17. peekStatus.set(promise, 'rejected');
  18. throw e;
  19. }
  20. );
  21. }
  22. export function peek(promise: Promise<any>): 'pending' | 'rejected' | 'fulfilled' | 'unknown' {
  23. return peekStatus.get(promise) ?? 'unknown';
  24. }
  25. interface Write {
  26. (
  27. destination: string,
  28. input: NodeJS.TypedArray | string,
  29. ): Promise<unknown>
  30. }
  31. export const writeFile: Write = async (destination: string, input) => {
  32. const dir = dirname(destination);
  33. if (!fs.existsSync(dir)) {
  34. await fsp.mkdir(dir, { recursive: true });
  35. }
  36. return fsp.writeFile(destination, input, { encoding: 'utf-8' });
  37. };