clipboard-utils.js 1.2 KB

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