common.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. const _ = require('lodash')
  2. module.exports = {
  3. /* eslint-disable promise/param-names */
  4. createDeferred () {
  5. let result, resolve, reject
  6. return {
  7. resolve: function (value) {
  8. if (resolve) {
  9. resolve(value)
  10. } else {
  11. result = result || new Promise(function (r) { r(value) })
  12. }
  13. },
  14. reject: function (reason) {
  15. if (reject) {
  16. reject(reason)
  17. } else {
  18. result = result || new Promise(function (x, j) { j(reason) })
  19. }
  20. },
  21. promise: new Promise(function (r, j) {
  22. if (result) {
  23. r(result)
  24. } else {
  25. resolve = r
  26. reject = j
  27. }
  28. })
  29. }
  30. },
  31. /**
  32. * Get default value of type
  33. *
  34. * @param {any} type primitive type name
  35. * @returns Default value
  36. */
  37. getTypeDefaultValue (type) {
  38. switch (type.toLowerCase()) {
  39. case 'string':
  40. return ''
  41. case 'number':
  42. return 0
  43. case 'boolean':
  44. return false
  45. }
  46. },
  47. parseModuleProps (props) {
  48. return _.transform(props, (result, value, key) => {
  49. let defaultValue = ''
  50. if (_.isPlainObject(value)) {
  51. defaultValue = !_.isNil(value.default) ? value.default : this.getTypeDefaultValue(value.type)
  52. } else {
  53. defaultValue = this.getTypeDefaultValue(value)
  54. }
  55. _.set(result, key, {
  56. default: defaultValue,
  57. type: (value.type || value).toLowerCase(),
  58. title: value.title || _.startCase(key),
  59. hint: value.hint || '',
  60. enum: value.enum || false,
  61. enumDisplay: value.enumDisplay || 'select',
  62. multiline: value.multiline || false,
  63. sensitive: value.sensitive || false,
  64. icon: value.icon || 'rename',
  65. order: value.order || 100
  66. })
  67. return result
  68. }, {})
  69. }
  70. }