base-utils.js 1018 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. let idSeed = 0
  2. function clampInteger(value, minValue, maxValue, fallback) {
  3. const numberValue = Number(value)
  4. if (!Number.isFinite(numberValue)) return fallback
  5. return Math.min(Math.max(Math.round(numberValue), minValue), maxValue)
  6. }
  7. function createId(prefix = 'id') {
  8. idSeed += 1
  9. return `${prefix}-${Date.now()}-${idSeed}`
  10. }
  11. function delay(ms) {
  12. return new Promise((resolve) => {
  13. setTimeout(resolve, ms)
  14. })
  15. }
  16. function parseHexInteger(value, fallback = 0) {
  17. const text = String(value === undefined || value === null ? '' : value).trim()
  18. if (!text) return fallback
  19. const parsed = parseInt(text, 16)
  20. return Number.isFinite(parsed) ? parsed : fallback
  21. }
  22. function normalizeTextValue(value) {
  23. return String(value === undefined || value === null ? '' : value)
  24. }
  25. function padHex(value, length = 4) {
  26. return Number(value || 0).toString(16).toUpperCase().padStart(length, '0')
  27. }
  28. module.exports = {
  29. clampInteger,
  30. createId,
  31. delay,
  32. normalizeTextValue,
  33. padHex,
  34. parseHexInteger
  35. }