clipboard-utils.ts 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. const { nativeImage, NativeImage } = process.electronBinding('native_image')
  2. const objectMap = function (source: Object, mapper: (value: any) => any) {
  3. const sourceEntries = Object.entries(source)
  4. const targetEntries = sourceEntries.map(([key, val]) => [key, mapper(val)])
  5. return Object.fromEntries(targetEntries)
  6. }
  7. export function serialize (value: any): any {
  8. if (value instanceof NativeImage) {
  9. return {
  10. buffer: value.toBitmap(),
  11. size: value.getSize(),
  12. __ELECTRON_SERIALIZED_NativeImage__: true
  13. }
  14. } else if (Array.isArray(value)) {
  15. return value.map(serialize)
  16. } else if (value instanceof Buffer) {
  17. return value
  18. } else if (value instanceof Object) {
  19. return objectMap(value, serialize)
  20. } else {
  21. return value
  22. }
  23. }
  24. export function deserialize (value: any): any {
  25. if (value && value.__ELECTRON_SERIALIZED_NativeImage__) {
  26. return nativeImage.createFromBitmap(value.buffer, value.size)
  27. } else if (Array.isArray(value)) {
  28. return value.map(deserialize)
  29. } else if (value instanceof Buffer) {
  30. return value
  31. } else if (value instanceof Object) {
  32. return objectMap(value, deserialize)
  33. } else {
  34. return value
  35. }
  36. }