dualsense-ts 2.2.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/README.md +9 -2
  2. package/dist/comparators.d.ts +13 -0
  3. package/dist/comparators.d.ts.map +1 -0
  4. package/dist/comparators.js +27 -0
  5. package/dist/comparators.js.map +1 -0
  6. package/dist/dualsense.d.ts +10 -1
  7. package/dist/dualsense.d.ts.map +1 -1
  8. package/dist/dualsense.js +46 -45
  9. package/dist/dualsense.js.map +1 -1
  10. package/dist/elements/analog.d.ts +1 -1
  11. package/dist/elements/analog.d.ts.map +1 -1
  12. package/dist/elements/analog.js +13 -3
  13. package/dist/elements/analog.js.map +1 -1
  14. package/dist/elements/dpad.d.ts +1 -1
  15. package/dist/elements/dpad.d.ts.map +1 -1
  16. package/dist/elements/dpad.js +6 -5
  17. package/dist/elements/dpad.js.map +1 -1
  18. package/dist/elements/touch.d.ts +1 -1
  19. package/dist/elements/touch.d.ts.map +1 -1
  20. package/dist/elements/touch.js.map +1 -1
  21. package/dist/elements/touchpad.d.ts +1 -1
  22. package/dist/elements/touchpad.d.ts.map +1 -1
  23. package/dist/elements/touchpad.js.map +1 -1
  24. package/dist/elements/trigger.d.ts.map +1 -1
  25. package/dist/elements/trigger.js +1 -1
  26. package/dist/elements/trigger.js.map +1 -1
  27. package/dist/elements/unisense.d.ts +1 -1
  28. package/dist/elements/unisense.d.ts.map +1 -1
  29. package/dist/elements/unisense.js +12 -5
  30. package/dist/elements/unisense.js.map +1 -1
  31. package/dist/hid/dualsense_hid.d.ts +16 -58
  32. package/dist/hid/dualsense_hid.d.ts.map +1 -1
  33. package/dist/hid/dualsense_hid.js +25 -101
  34. package/dist/hid/dualsense_hid.js.map +1 -1
  35. package/dist/hid/hid_provider.d.ts +86 -0
  36. package/dist/hid/hid_provider.d.ts.map +1 -0
  37. package/dist/hid/hid_provider.js +45 -0
  38. package/dist/hid/hid_provider.js.map +1 -0
  39. package/dist/hid/index.d.ts +4 -1
  40. package/dist/hid/index.d.ts.map +1 -1
  41. package/dist/hid/index.js +4 -1
  42. package/dist/hid/index.js.map +1 -1
  43. package/dist/hid/node_hid_provider.d.ts +11 -0
  44. package/dist/hid/node_hid_provider.d.ts.map +1 -0
  45. package/dist/hid/node_hid_provider.js +97 -0
  46. package/dist/hid/node_hid_provider.js.map +1 -0
  47. package/dist/hid/platform_hid_provider.d.ts +4 -0
  48. package/dist/hid/platform_hid_provider.d.ts.map +1 -0
  49. package/dist/hid/platform_hid_provider.js +7 -0
  50. package/dist/hid/platform_hid_provider.js.map +1 -0
  51. package/dist/hid/web_hid_provider.d.ts +10 -0
  52. package/dist/hid/web_hid_provider.d.ts.map +1 -0
  53. package/dist/hid/web_hid_provider.js +102 -0
  54. package/dist/hid/web_hid_provider.js.map +1 -0
  55. package/dist/{hid/ids.d.ts → id.d.ts} +6 -2
  56. package/dist/id.d.ts.map +1 -0
  57. package/dist/{hid/ids.js → id.js} +1 -1
  58. package/dist/id.js.map +1 -0
  59. package/dist/index.d.ts +2 -0
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +2 -0
  62. package/dist/index.js.map +1 -1
  63. package/dist/input.d.ts +81 -36
  64. package/dist/input.d.ts.map +1 -1
  65. package/dist/input.js +128 -89
  66. package/dist/input.js.map +1 -1
  67. package/docs/Analog.md +81 -131
  68. package/docs/AnalogParams.md +7 -9
  69. package/docs/Axis.md +72 -79
  70. package/docs/Brightness.md +8 -8
  71. package/docs/CommandScopeA.md +16 -16
  72. package/docs/CommandScopeB.md +14 -14
  73. package/docs/Dpad.md +74 -81
  74. package/docs/DpadParams.md +8 -8
  75. package/docs/DualSenseCommand.md +45 -45
  76. package/docs/Dualsense.md +83 -90
  77. package/docs/DualsenseHID.md +47 -42
  78. package/docs/DualsenseHIDState.md +41 -41
  79. package/docs/DualsenseParams.md +17 -17
  80. package/docs/Exports.md +18 -21
  81. package/docs/Haptic.md +1 -1
  82. package/docs/Home.md +29 -31
  83. package/docs/Indicator.md +2 -2
  84. package/docs/Input.md +70 -79
  85. package/docs/InputId.md +84 -84
  86. package/docs/InputParams.md +4 -4
  87. package/docs/LedOptions.md +10 -10
  88. package/docs/Momentary.md +70 -77
  89. package/docs/Motion.md +2 -2
  90. package/docs/Mute.md +71 -89
  91. package/docs/PlayerID.md +12 -12
  92. package/docs/PulseOptions.md +8 -8
  93. package/docs/Touchpad.md +120 -94
  94. package/docs/Trigger.md +75 -82
  95. package/docs/TriggerMode.md +22 -22
  96. package/docs/Unisense.md +74 -81
  97. package/docs/UnisenseParams.md +7 -7
  98. package/package.json +16 -10
  99. package/src/comparators.ts +26 -0
  100. package/src/dualsense.ts +61 -58
  101. package/src/elements/analog.spec.ts +17 -0
  102. package/src/elements/analog.ts +14 -8
  103. package/src/elements/axis.spec.ts +31 -0
  104. package/src/elements/dpad.ts +7 -6
  105. package/src/elements/touch.ts +1 -1
  106. package/src/elements/touchpad.ts +1 -1
  107. package/src/elements/trigger.ts +1 -1
  108. package/src/elements/unisense.ts +16 -15
  109. package/src/hid/dualsense_hid.ts +25 -156
  110. package/src/hid/{dualsense_hid.spec.ts → hid_provider.spec.ts} +1 -1
  111. package/src/hid/hid_provider.ts +100 -0
  112. package/src/hid/index.ts +4 -1
  113. package/src/hid/node_hid_provider.ts +108 -0
  114. package/src/hid/platform_hid_provider.ts +4 -0
  115. package/src/hid/web_hid_provider.ts +116 -0
  116. package/src/{hid/ids.ts → id.ts} +6 -1
  117. package/src/index.ts +2 -0
  118. package/src/input.ts +178 -142
  119. package/src/readme.spec.ts +6 -8
  120. package/webpack.config.js +42 -0
  121. package/dist/hid/ids.d.ts.map +0 -1
  122. package/dist/hid/ids.js.map +0 -1
  123. package/docs/Increment.md +0 -1554
  124. package/docs/Touch.md +0 -1824
@@ -1,3 +1,6 @@
1
+ /**
2
+ * IDs for real and virtual controller inputs.
3
+ */
1
4
  export declare const enum InputId {
2
5
  Options = "Options",
3
6
  Create = "Create",
@@ -39,6 +42,7 @@ export declare const enum InputId {
39
42
  GyroZ = "GyroZ",
40
43
  AccelX = "AccelX",
41
44
  AccelY = "AccelY",
42
- AccelZ = "AccelZ"
45
+ AccelZ = "AccelZ",
46
+ Unknown = "Unknown"
43
47
  }
44
- //# sourceMappingURL=ids.d.ts.map
48
+ //# sourceMappingURL=id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../src/id.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,0BAAkB,OAAO;IACvB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,WAAW,gBAAgB;IAC3B,IAAI,SAAS;IACb,MAAM,WAAW;IAEjB,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,MAAM,WAAW;IAEjB,IAAI,SAAS;IACb,EAAE,OAAO;IACT,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;IAEf,WAAW,gBAAgB;IAE3B,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,aAAa,kBAAkB;IAC/B,QAAQ,aAAa;IAErB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,aAAa,kBAAkB;IAC/B,QAAQ,aAAa;IAErB,gBAAgB,OAAO;IACvB,iBAAiB,OAAO;IAExB,WAAW,OAAO;IAClB,YAAY,OAAO;IACnB,iBAAiB,aAAa;IAC9B,kBAAkB,aAAa;IAE/B,UAAU,OAAO;IACjB,WAAW,OAAO;IAElB,WAAW,OAAO;IAClB,WAAW,OAAO;IAClB,YAAY,OAAO;IACnB,YAAY,OAAO;IAEnB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,KAAK,UAAU;IAEf,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,MAAM,WAAW;IAGjB,OAAO,YAAY;CACpB"}
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=ids.js.map
3
+ //# sourceMappingURL=id.js.map
package/dist/id.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.js","sourceRoot":"","sources":["../src/id.ts"],"names":[],"mappings":""}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  /**
2
2
  * @file Automatically generated by barrelsby.
3
3
  */
4
+ export * from "./comparators";
4
5
  export * from "./dualsense";
6
+ export * from "./id";
5
7
  export * from "./input";
6
8
  export * from "./math";
7
9
  export * from "./elements/index";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,MAAM,CAAC;AACrB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -17,7 +17,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
17
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
+ __exportStar(require("./comparators"), exports);
20
21
  __exportStar(require("./dualsense"), exports);
22
+ __exportStar(require("./id"), exports);
21
23
  __exportStar(require("./input"), exports);
22
24
  __exportStar(require("./math"), exports);
23
25
  __exportStar(require("./elements/index"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,8CAA4B;AAC5B,0CAAwB;AACxB,yCAAuB;AACvB,mDAAiC;AACjC,kDAAgC;AAChC,8CAA4B;AAC5B,qDAAmC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,gDAA8B;AAC9B,8CAA4B;AAC5B,uCAAqB;AACrB,0CAAwB;AACxB,yCAAuB;AACvB,mDAAiC;AACjC,kDAAgC;AAChC,8CAA4B;AAC5B,qDAAmC"}
package/dist/input.d.ts CHANGED
@@ -1,75 +1,120 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- import { EventEmitter } from "events";
4
- import { inspect } from "util";
1
+ import { InputId } from "./id";
2
+ export { InputId } from "./id";
5
3
  export interface InputParams {
6
4
  name?: string;
7
5
  icon?: string;
8
6
  threshold?: number;
9
- parent?: Input<unknown>;
10
7
  }
11
- declare const InputAdopt: unique symbol;
12
- declare const InputChildless: unique symbol;
13
- declare const InputParent: unique symbol;
14
- declare const InputSetComparison: unique symbol;
15
- declare const InputChangedPrimitive: unique symbol;
16
- declare const InputChangedThreshold: unique symbol;
17
- declare const InputChangedVirtual: unique symbol;
8
+ export declare type InputChangeType = "change" | "press" | "release";
9
+ export declare type InputEventType = InputChangeType | "input";
10
+ export declare type InputCallback<Instance> = (input: Instance, changed: Instance | Input<unknown>) => unknown | Promise<unknown>;
11
+ /**
12
+ * Private utilities
13
+ */
14
+ export declare const InputSetComparator: unique symbol;
18
15
  export declare const InputChanged: unique symbol;
19
16
  export declare const InputSet: unique symbol;
20
17
  export declare const InputName: unique symbol;
21
18
  export declare const InputIcon: unique symbol;
22
- export declare type InputEvent = "change" | "input" | "press" | "release";
23
- export declare interface Input<Type> {
24
- on(event: InputEvent, listener: (input: Input<Type>, changed: Input<unknown>) => unknown | Promise<unknown>): this;
25
- emit(event: InputEvent, ...args: [Input<Type>, Input<unknown> | Input<Type>]): boolean;
26
- }
19
+ /**
20
+ * Private properties
21
+ */
22
+ declare const InputOns: unique symbol;
23
+ declare const InputOnces: unique symbol;
24
+ declare const InputAdopt: unique symbol;
25
+ declare const InputParents: unique symbol;
26
+ declare const InputComparator: unique symbol;
27
27
  /**
28
28
  * Input manages the state of a single device input,
29
29
  * a virtual input, or a group of Input children.
30
30
  */
31
- export declare abstract class Input<Type> extends EventEmitter implements AsyncIterator<Input<Type>> {
32
- readonly id: symbol;
33
- lastChange: number;
34
- lastInput: number;
31
+ export declare abstract class Input<Type> implements AsyncIterator<Input<Type>> {
32
+ readonly id: InputId;
33
+ /**
34
+ * For numeric inputs, ignore state changes smaller than this threshold.
35
+ */
35
36
  threshold: number;
37
+ /**
38
+ * Provide the type and default value for the input.
39
+ */
36
40
  abstract state: Type;
41
+ /**
42
+ * Stores event listeners.
43
+ */
44
+ private [InputOns];
45
+ /**
46
+ * Stores callbacks waiting for one-time events.
47
+ */
48
+ private [InputOnces];
49
+ constructor(params?: InputParams);
50
+ /**
51
+ * Implement a function that returns true if the user is actively engaged with the input.
52
+ */
37
53
  abstract get active(): boolean;
54
+ /**
55
+ * Register a callback to recieve state updates from this Input.
56
+ */
57
+ on(event: InputEventType, listener: InputCallback<this>): this;
58
+ /**
59
+ * Register a callback to recieve the next specified update.
60
+ */
61
+ once(event: InputChangeType, listener: InputCallback<this>): this;
62
+ /**
63
+ * Notify listeners and parents of a state change.
64
+ */
65
+ private emit;
66
+ /**
67
+ * Notify one-time listeners of a state change.
68
+ */
69
+ private emitOnce;
70
+ /**
71
+ * Register a callback to recieve state updates from this Input.
72
+ */
73
+ addEventListener(event: InputEventType, listener: InputCallback<this>, { once }?: {
74
+ once: boolean;
75
+ }): this;
38
76
  /**
39
77
  * Resolves on the next change to this input's state.
40
78
  */
41
- next(type?: "press" | "release" | "change"): Promise<IteratorResult<this>>;
79
+ next(type?: InputChangeType): Promise<IteratorResult<this>>;
42
80
  /**
43
81
  * Resolves on the next change to this input's state.
44
82
  */
45
83
  promise(type?: "press" | "release" | "change"): Promise<this>;
46
84
  /**
47
- * Render a convenient debugging string.
85
+ * Render a debugging string.
48
86
  */
49
87
  toString(): string;
50
- constructor(params?: InputParams);
51
- [InputChanged]: (state: Type, newState: Type) => boolean;
52
- [inspect.custom](): string;
88
+ /**
89
+ * Returns true if the provided state is worth an event
90
+ */
91
+ [InputComparator]: (state: Type, newState: Type) => boolean;
53
92
  [Symbol.asyncIterator](): AsyncIterator<this>;
54
93
  [Symbol.toPrimitive](hint: "number" | "string" | "default"): number | string;
55
94
  get [Symbol.toStringTag](): string;
95
+ /**
96
+ * The name of this input.
97
+ */
56
98
  readonly [InputName]: string;
99
+ /**
100
+ * A short name for this input.
101
+ */
57
102
  readonly [InputIcon]: string;
58
- [InputParent]?: Input<unknown>;
59
- [InputChildless]: boolean;
60
103
  /**
61
- * Cascade events from nested Inputs.
62
- * And decide if this is the root Input.
104
+ * Other Inputs that contain this one.
105
+ */
106
+ private [InputParents];
107
+ /**
108
+ * Links Inputs to bubble up events.
109
+ */
110
+ [InputAdopt](parent: Input<unknown>): void;
111
+ /**
112
+ * Sets a default comparison type for the Input by discovering the generic type.
63
113
  */
64
- [InputAdopt](): void;
65
- [InputChangedVirtual](): boolean;
66
- [InputChangedPrimitive](state: Type, newState: Type): boolean;
67
- [InputChangedThreshold](state: number, newState: number): boolean;
68
- [InputSetComparison](): (state: Type, newState: Type) => boolean;
114
+ [InputSetComparator](): void;
69
115
  /**
70
116
  * Update the input's state and trigger all necessary callbacks.
71
117
  */
72
118
  [InputSet](state: Type): void;
73
119
  }
74
- export {};
75
120
  //# sourceMappingURL=input.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"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"}
package/dist/input.js CHANGED
@@ -1,57 +1,131 @@
1
1
  "use strict";
2
- var _a;
2
+ var _a, _b, _c, _d;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.Input = exports.InputIcon = exports.InputName = exports.InputSet = exports.InputChanged = void 0;
5
- const events_1 = require("events");
6
- const util_1 = require("util");
7
- const InputDefaults = {
8
- name: "???",
9
- icon: "???",
10
- threshold: 0,
11
- };
12
- // Private properties
13
- const InputAdopt = Symbol("InputAdopt");
14
- const InputChildless = Symbol("InputChildless");
15
- const InputParent = Symbol("InputParent");
16
- const InputSetComparison = Symbol("InputSetComparison");
17
- const InputChangedPrimitive = Symbol("InputChangedPrimitive");
18
- const InputChangedThreshold = Symbol("InputChangedThreshold");
19
- const InputChangedVirtual = Symbol("InputChangedVirtual");
20
- // Optional abstract properties
4
+ exports.Input = exports.InputIcon = exports.InputName = exports.InputSet = exports.InputChanged = exports.InputSetComparator = void 0;
5
+ const comparators_1 = require("./comparators");
6
+ /**
7
+ * Private utilities
8
+ */
9
+ exports.InputSetComparator = Symbol("InputSetComparator");
21
10
  exports.InputChanged = Symbol("InputChanged");
22
- // Utilities
23
11
  exports.InputSet = Symbol("InputSet");
24
12
  exports.InputName = Symbol("InputName");
25
13
  exports.InputIcon = Symbol("InputIcon");
14
+ /**
15
+ * Private properties
16
+ */
17
+ const InputOns = Symbol("InputOns");
18
+ const InputOnces = Symbol("InputOnces");
19
+ const InputAdopt = Symbol("InputAdopt");
20
+ const InputParents = Symbol("InputParents");
21
+ const InputComparator = Symbol("InputComparator");
26
22
  /**
27
23
  * Input manages the state of a single device input,
28
24
  * a virtual input, or a group of Input children.
29
25
  */
30
- class Input extends events_1.EventEmitter {
31
- constructor(params) {
32
- super();
33
- // Timestamp of the last received input that changed the state.
34
- this.lastChange = Date.now();
35
- // Timestamp of the last received input, even if it didn't change the state.
36
- this.lastInput = Date.now();
37
- // For numeric inputs, ignore state changes smaller than this threshold.
26
+ class Input {
27
+ constructor(params = {}) {
28
+ this.id = "Unknown" /* InputId.Unknown */;
29
+ /**
30
+ * For numeric inputs, ignore state changes smaller than this threshold.
31
+ */
38
32
  this.threshold = 0;
39
- this[_a] = true;
40
- const { icon, name, parent, threshold } = {
41
- ...InputDefaults,
42
- ...(params || {}),
33
+ /**
34
+ * Stores event listeners.
35
+ */
36
+ this[_a] = new Map();
37
+ /**
38
+ * Stores callbacks waiting for one-time events.
39
+ */
40
+ this[_b] = new Map();
41
+ /**
42
+ * Returns true if the provided state is worth an event
43
+ */
44
+ this[_c] = comparators_1.BasicComparator;
45
+ /**
46
+ * Other Inputs that contain this one.
47
+ */
48
+ this[_d] = new Set();
49
+ const { name, icon, threshold } = {
50
+ icon: "???",
51
+ name: "Nameless Input",
52
+ threshold: 0,
53
+ ...params,
43
54
  };
44
55
  this[exports.InputName] = name;
45
56
  this[exports.InputIcon] = icon;
46
- this[InputParent] = parent;
47
57
  this.threshold = threshold;
48
- this.id = Symbol(this[exports.InputName]);
49
- this[exports.InputChanged] = this[InputSetComparison]();
50
- setImmediate(() => {
51
- this[InputAdopt]();
52
- this[exports.InputChanged] = this[InputSetComparison]();
58
+ setTimeout(() => {
59
+ this[exports.InputSetComparator]();
60
+ Object.values(this).forEach((value) => {
61
+ if (value === this)
62
+ return;
63
+ if (value instanceof Input)
64
+ value[InputAdopt](this);
65
+ });
53
66
  });
54
67
  }
68
+ /**
69
+ * Register a callback to recieve state updates from this Input.
70
+ */
71
+ on(event, listener) {
72
+ const listeners = this[InputOns].get(event);
73
+ if (!listeners) {
74
+ this[InputOns].set(event, []);
75
+ return this.on(event, listener);
76
+ }
77
+ listeners.push(listener);
78
+ return this;
79
+ }
80
+ /**
81
+ * Register a callback to recieve the next specified update.
82
+ */
83
+ once(event, listener) {
84
+ const listeners = this[InputOnces].get(event);
85
+ if (!listeners) {
86
+ this[InputOnces].set(event, []);
87
+ return this.once(event, listener);
88
+ }
89
+ listeners.push(listener);
90
+ return this;
91
+ }
92
+ /**
93
+ * Notify listeners and parents of a state change.
94
+ */
95
+ emit(event, changed) {
96
+ const listeners = this[InputOns].get(event) || [];
97
+ listeners.forEach((callback) => {
98
+ callback(this, changed);
99
+ });
100
+ if (event !== "input") {
101
+ this.emitOnce(event, changed);
102
+ this[InputParents].forEach((input) => {
103
+ input.emit(event, changed);
104
+ });
105
+ }
106
+ }
107
+ /**
108
+ * Notify one-time listeners of a state change.
109
+ */
110
+ emitOnce(event, changed = this) {
111
+ const listeners = this[InputOnces].get(event) || [];
112
+ this[InputOnces].set(event, []);
113
+ listeners.forEach((callback) => {
114
+ callback(this, changed);
115
+ });
116
+ }
117
+ /**
118
+ * Register a callback to recieve state updates from this Input.
119
+ */
120
+ addEventListener(event, listener, { once } = { once: false }) {
121
+ if (once) {
122
+ if (event === "input") {
123
+ throw new Error("Can't listen once to `input` events");
124
+ }
125
+ return this.once(event, listener);
126
+ }
127
+ return this.on(event, listener);
128
+ }
55
129
  /**
56
130
  * Resolves on the next change to this input's state.
57
131
  */
@@ -71,18 +145,12 @@ class Input extends events_1.EventEmitter {
71
145
  });
72
146
  }
73
147
  /**
74
- * Render a convenient debugging string.
148
+ * Render a debugging string.
75
149
  */
76
150
  toString() {
77
151
  return `${this[exports.InputIcon]} [${this.active ? "X" : "_"}]`;
78
152
  }
79
- // TODO Support params for nested inputs
80
- [util_1.inspect.custom]() {
81
- return `${this[exports.InputName]} ${this[exports.InputIcon]}: ${JSON.stringify(this.state instanceof Input && this.state.id === this.id
82
- ? "virtual"
83
- : this.state)}`;
84
- }
85
- [Symbol.asyncIterator]() {
153
+ [(_a = InputOns, _b = InputOnces, _c = InputComparator, Symbol.asyncIterator)]() {
86
154
  return this;
87
155
  }
88
156
  [Symbol.toPrimitive](hint) {
@@ -96,65 +164,36 @@ class Input extends events_1.EventEmitter {
96
164
  return this.toString();
97
165
  }
98
166
  /**
99
- * Cascade events from nested Inputs.
100
- * And decide if this is the root Input.
167
+ * Links Inputs to bubble up events.
101
168
  */
102
- [(_a = InputChildless, InputAdopt)]() {
103
- Object.values(this).forEach((value) => {
104
- if (value === this)
105
- return;
106
- if (value instanceof Input) {
107
- this[InputChildless] = false;
108
- if (!value[InputChildless])
109
- return;
110
- value.on("change", (that, value) => {
111
- that;
112
- this.emit("change", this, value);
113
- });
114
- value.on("input", (that, value) => {
115
- that;
116
- this.emit("input", this, value);
117
- });
118
- }
119
- });
120
- }
121
- [InputChangedVirtual]() {
122
- return true;
169
+ [(_d = InputParents, InputAdopt)](parent) {
170
+ this[InputParents].add(parent);
123
171
  }
124
- [InputChangedPrimitive](state, newState) {
125
- return state !== newState;
126
- }
127
- [InputChangedThreshold](state, newState) {
128
- return Math.abs(state - newState) > this.threshold;
129
- }
130
- // Sets a default comparison type for the Input based on the generic type.
131
- [InputSetComparison]() {
172
+ /**
173
+ * Sets a default comparison type for the Input by discovering the generic type.
174
+ */
175
+ [exports.InputSetComparator]() {
132
176
  if (typeof this.state === "number") {
133
- return this[InputChangedThreshold];
177
+ this[InputComparator] = comparators_1.ThresholdComparator.bind(this, this.threshold);
134
178
  }
135
179
  else if (this.state instanceof Input) {
136
- return this[InputChangedVirtual];
180
+ this[InputComparator] = comparators_1.VirtualComparator;
137
181
  }
138
182
  else {
139
- return this[InputChangedPrimitive];
183
+ this[InputComparator] = comparators_1.BasicComparator;
140
184
  }
141
185
  }
142
186
  /**
143
187
  * Update the input's state and trigger all necessary callbacks.
144
188
  */
145
189
  [exports.InputSet](state) {
146
- this.lastInput = Date.now();
147
- if (this[exports.InputChanged](this.state, state)) {
190
+ if (this[InputComparator](this.state, state)) {
148
191
  this.state = state;
149
- this.lastChange = Date.now();
150
- this.emit("change", this, this);
151
- if (typeof state === "boolean") {
152
- state
153
- ? this.emit("press", this, this)
154
- : this.emit("release", this, this);
155
- }
192
+ this.emit("change", this);
193
+ if (typeof state === "boolean")
194
+ this.emit(state ? "press" : "release", this);
156
195
  }
157
- this.emit("input", this, this);
196
+ this.emit("input", this);
158
197
  }
159
198
  }
160
199
  exports.Input = Input;
package/dist/input.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":";;;;AAAA,mCAAsC;AACtC,+BAA+B;AAS/B,MAAM,aAAa,GAA0C;IAC3D,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,SAAS,EAAE,CAAC;CACb,CAAC;AAEF,qBAAqB;AACrB,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AACxC,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAChD,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAC1C,MAAM,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AACxD,MAAM,qBAAqB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAC9D,MAAM,qBAAqB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAC9D,MAAM,mBAAmB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAE1D,+BAA+B;AAClB,QAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAEnD,YAAY;AACC,QAAA,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAC9B,QAAA,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAChC,QAAA,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAkB7C;;;GAGG;AACH,MAAsB,KACpB,SAAQ,qBAAY;IAmDpB,YAAY,MAAoB;QAC9B,KAAK,EAAE,CAAC;QA/CV,+DAA+D;QACxD,eAAU,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvC,4EAA4E;QACrE,cAAS,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;QAEtC,wEAAwE;QACjE,cAAS,GAAW,CAAC,CAAC;QA+F7B,QAAgB,GAAY,IAAI,CAAC;QArD/B,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG;YACxC,GAAG,aAAa;YAChB,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;SAClB,CAAC;QACF,IAAI,CAAC,iBAAS,CAAC,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,iBAAS,CAAC,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;QAE3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAS,CAAC,CAAC,CAAC;QAElC,IAAI,CAAC,oBAAY,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAChD,YAAY,CAAC,GAAG,EAAE;YAChB,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,oBAAY,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;IAlDD;;OAEG;IACI,IAAI,CACT,OAAuC,QAAQ;QAE/C,OAAO,IAAI,OAAO,CAAuB,CAAC,OAAO,EAAE,EAAE;YACnD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;gBACnB,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,OAAO,CACZ,OAAuC,QAAQ;QAE/C,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,QAAQ;QACb,OAAO,GAAG,IAAI,CAAC,iBAAS,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC3D,CAAC;IA0BD,wCAAwC;IACxC,CAAC,cAAO,CAAC,MAAM,CAAC;QACd,OAAO,GAAG,IAAI,CAAC,iBAAS,CAAC,IAAI,IAAI,CAAC,iBAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAC7D,IAAI,CAAC,KAAK,YAAY,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;YACtD,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,CAAC,KAAK,CACf,EAAE,CAAC;IACN,CAAC;IAED,CAAC,MAAM,CAAC,aAAa,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAqC;QACxD,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QACtD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAaD;;;OAGG;IACH,OANC,cAAc,EAMd,UAAU,EAAC;QACV,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACpC,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO;YAC3B,IAAI,KAAK,YAAY,KAAK,EAAE;gBAC1B,IAAI,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC;gBAC7B,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;oBAAE,OAAO;gBACnC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;oBACjC,IAAI,CAAC;oBACL,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;gBACnC,CAAC,CAAC,CAAC;gBACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;oBAChC,IAAI,CAAC;oBACL,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;gBAClC,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,CAAC,mBAAmB,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,CAAC,qBAAqB,CAAC,CAAC,KAAW,EAAE,QAAc;QACjD,OAAO,KAAK,KAAK,QAAQ,CAAC;IAC5B,CAAC;IAED,CAAC,qBAAqB,CAAC,CAAC,KAAa,EAAE,QAAgB;QACrD,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;IACrD,CAAC;IAED,0EAA0E;IAC1E,CAAC,kBAAkB,CAAC;QAClB,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;YAClC,OAAO,IAAI,CAAC,qBAAqB,CAGrB,CAAC;SACd;aAAM,IAAI,IAAI,CAAC,KAAK,YAAY,KAAK,EAAE;YACtC,OAAO,IAAI,CAAC,mBAAmB,CAAC,CAAC;SAClC;aAAM;YACL,OAAO,IAAI,CAAC,qBAAqB,CAAC,CAAC;SACpC;IACH,CAAC;IAED;;OAEG;IACH,CAAC,gBAAQ,CAAC,CAAC,KAAW;QACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,oBAAY,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;YACzC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAChC,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;gBAC9B,KAAK;oBACH,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;oBAChC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;aACtC;SACF;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;CACF;AAhLD,sBAgLC"}
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"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"}