common.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. const _ = require('lodash')
  2. const crypto = require('node:crypto')
  3. module.exports = {
  4. /* eslint-disable promise/param-names */
  5. createDeferred () {
  6. let result, resolve, reject
  7. return {
  8. resolve: function (value) {
  9. if (resolve) {
  10. resolve(value)
  11. } else {
  12. result = result || new Promise(function (r) { r(value) })
  13. }
  14. },
  15. reject: function (reason) {
  16. if (reject) {
  17. reject(reason)
  18. } else {
  19. result = result || new Promise(function (x, j) { j(reason) })
  20. }
  21. },
  22. promise: new Promise(function (r, j) {
  23. if (result) {
  24. r(result)
  25. } else {
  26. resolve = r
  27. reject = j
  28. }
  29. })
  30. }
  31. },
  32. /**
  33. * Decode a tree path
  34. *
  35. * @param {string} str String to decode
  36. * @returns Decoded tree path
  37. */
  38. decodeTreePath (str) {
  39. return str.replaceAll('_', '-').replaceAll('.', '/')
  40. },
  41. /**
  42. * Encode a tree path
  43. *
  44. * @param {string} str String to encode
  45. * @returns Encoded tree path
  46. */
  47. encodeTreePath (str) {
  48. return str?.toLowerCase()?.replaceAll('-', '_')?.replaceAll('/', '.') || ''
  49. },
  50. /**
  51. * Generate SHA-1 Hash of a string
  52. *
  53. * @param {string} str String to hash
  54. * @returns Hashed string
  55. */
  56. generateHash (str) {
  57. return crypto.createHash('sha1').update(str).digest('hex')
  58. },
  59. /**
  60. * Get default value of type
  61. *
  62. * @param {any} type primitive type name
  63. * @returns Default value
  64. */
  65. getTypeDefaultValue (type) {
  66. switch (type.toLowerCase()) {
  67. case 'string':
  68. return ''
  69. case 'number':
  70. return 0
  71. case 'boolean':
  72. return false
  73. }
  74. },
  75. parseModuleProps (props) {
  76. return _.transform(props, (result, value, key) => {
  77. let defaultValue = ''
  78. if (_.isPlainObject(value)) {
  79. defaultValue = !_.isNil(value.default) ? value.default : this.getTypeDefaultValue(value.type)
  80. } else {
  81. defaultValue = this.getTypeDefaultValue(value)
  82. }
  83. _.set(result, key, {
  84. default: defaultValue,
  85. type: (value.type || value).toLowerCase(),
  86. title: value.title || _.startCase(key),
  87. hint: value.hint || '',
  88. enum: value.enum || false,
  89. enumDisplay: value.enumDisplay || 'select',
  90. multiline: value.multiline || false,
  91. sensitive: value.sensitive || false,
  92. icon: value.icon || 'rename',
  93. order: value.order || 100
  94. })
  95. return result
  96. }, {})
  97. }
  98. }