index.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.keyboard = keyboard;
  6. exports.keyboardImplementationWrapper = keyboardImplementationWrapper;
  7. Object.defineProperty(exports, "specialCharMap", {
  8. enumerable: true,
  9. get: function () {
  10. return _specialCharMap.specialCharMap;
  11. }
  12. });
  13. var _dom = require("@testing-library/dom");
  14. var _keyboardImplementation = require("./keyboardImplementation");
  15. var _keyMap = require("./keyMap");
  16. var _specialCharMap = require("./specialCharMap");
  17. function keyboard(text, options) {
  18. var _options$delay;
  19. const {
  20. promise,
  21. state
  22. } = keyboardImplementationWrapper(text, options);
  23. if (((_options$delay = options == null ? void 0 : options.delay) != null ? _options$delay : 0) > 0) {
  24. return (0, _dom.getConfig)().asyncWrapper(() => promise.then(() => state));
  25. } else {
  26. // prevent users from dealing with UnhandledPromiseRejectionWarning in sync call
  27. promise.catch(console.error);
  28. return state;
  29. }
  30. }
  31. function keyboardImplementationWrapper(text, config = {}) {
  32. const {
  33. keyboardState: state = createKeyboardState(),
  34. delay = 0,
  35. document: doc = document,
  36. autoModify = false,
  37. keyboardMap = _keyMap.defaultKeyMap
  38. } = config;
  39. const options = {
  40. delay,
  41. document: doc,
  42. autoModify,
  43. keyboardMap
  44. };
  45. return {
  46. promise: (0, _keyboardImplementation.keyboardImplementation)(text, options, state),
  47. state,
  48. releaseAllKeys: () => (0, _keyboardImplementation.releaseAllKeys)(options, state)
  49. };
  50. }
  51. function createKeyboardState() {
  52. return {
  53. activeElement: null,
  54. pressed: [],
  55. carryChar: '',
  56. modifiers: {
  57. alt: false,
  58. caps: false,
  59. ctrl: false,
  60. meta: false,
  61. shift: false
  62. }
  63. };
  64. }