react-native-web-serial-api 0.0.2 → 0.1.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.
- package/README.md +23 -0
- package/TESTING.md +301 -0
- package/android/build.gradle +2 -2
- package/android/src/main/java/dev/webserialapi/NativeUsbSerialModule.java +7 -1
- package/lib/commonjs/UsbSerial.js +58 -26
- package/lib/commonjs/UsbSerial.js.map +1 -1
- package/lib/commonjs/WebSerial.js +169 -57
- package/lib/commonjs/WebSerial.js.map +1 -1
- package/lib/commonjs/index.js +13 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/lib/dom-exception.js +176 -0
- package/lib/commonjs/lib/dom-exception.js.map +1 -0
- package/lib/commonjs/lib/event-target.js +138 -0
- package/lib/commonjs/lib/event-target.js.map +1 -0
- package/lib/commonjs/lib/promise.js +23 -0
- package/lib/commonjs/lib/promise.js.map +1 -0
- package/lib/commonjs/testing/index.js +70 -0
- package/lib/commonjs/testing/index.js.map +1 -0
- package/lib/commonjs/testing/install.js +54 -0
- package/lib/commonjs/testing/install.js.map +1 -0
- package/lib/commonjs/testing/serial-device.js +164 -0
- package/lib/commonjs/testing/serial-device.js.map +1 -0
- package/lib/commonjs/testing/virtual-serial.js +615 -0
- package/lib/commonjs/testing/virtual-serial.js.map +1 -0
- package/lib/commonjs/transport.js +61 -0
- package/lib/commonjs/transport.js.map +1 -0
- package/lib/typescript/src/UsbSerial.d.ts +24 -67
- package/lib/typescript/src/UsbSerial.d.ts.map +1 -1
- package/lib/typescript/src/WebSerial.d.ts +11 -2
- package/lib/typescript/src/WebSerial.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +2 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/lib/dom-exception.d.ts +100 -0
- package/lib/typescript/src/lib/dom-exception.d.ts.map +1 -0
- package/lib/typescript/src/lib/event-target.d.ts +53 -0
- package/lib/typescript/src/lib/event-target.d.ts.map +1 -0
- package/lib/typescript/src/lib/promise.d.ts +11 -0
- package/lib/typescript/src/lib/promise.d.ts.map +1 -0
- package/lib/typescript/src/testing/index.d.ts +23 -0
- package/lib/typescript/src/testing/index.d.ts.map +1 -0
- package/lib/typescript/src/testing/install.d.ts +25 -0
- package/lib/typescript/src/testing/install.d.ts.map +1 -0
- package/lib/typescript/src/testing/serial-device.d.ts +127 -0
- package/lib/typescript/src/testing/serial-device.d.ts.map +1 -0
- package/lib/typescript/src/testing/virtual-serial.d.ts +205 -0
- package/lib/typescript/src/testing/virtual-serial.d.ts.map +1 -0
- package/lib/typescript/src/transport.d.ts +131 -0
- package/lib/typescript/src/transport.d.ts.map +1 -0
- package/package.json +38 -2
- package/src/UsbSerial.ts +65 -90
- package/src/WebSerial.ts +227 -88
- package/src/index.ts +2 -7
- package/src/lib/dom-exception.ts +129 -60
- package/src/lib/event-target.ts +46 -21
- package/src/lib/promise.ts +7 -7
- package/src/testing/index.ts +42 -0
- package/src/testing/install.ts +65 -0
- package/src/testing/serial-device.ts +193 -0
- package/src/testing/virtual-serial.ts +801 -0
- package/src/transport.ts +200 -0
- package/babel.config.js +0 -3
- package/biome.json +0 -35
- package/example/.watchmanconfig +0 -1
- package/example/App.tsx +0 -71
- package/example/__tests__/App.test.tsx +0 -16
- package/example/__tests__/connectEvents.test.tsx +0 -81
- package/example/__tests__/getPorts.test.tsx +0 -140
- package/example/android/app/build.gradle +0 -120
- package/example/android/app/debug.keystore +0 -0
- package/example/android/app/proguard-rules.pro +0 -10
- package/example/android/app/src/debug/AndroidManifest.xml +0 -9
- package/example/android/app/src/main/AndroidManifest.xml +0 -38
- package/example/android/app/src/main/java/dev/uzlopak/MainActivity.kt +0 -22
- package/example/android/app/src/main/java/dev/uzlopak/MainApplication.kt +0 -41
- package/example/android/app/src/main/res/drawable/rn_edit_text_material.xml +0 -37
- package/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
- package/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
- package/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
- package/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- package/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- package/example/android/app/src/main/res/values/strings.xml +0 -3
- package/example/android/app/src/main/res/values/styles.xml +0 -9
- package/example/android/build.gradle +0 -22
- package/example/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/example/android/gradle/wrapper/gradle-wrapper.properties +0 -7
- package/example/android/gradle.properties +0 -47
- package/example/android/gradlew +0 -252
- package/example/android/gradlew.bat +0 -94
- package/example/android/settings.gradle +0 -6
- package/example/app.json +0 -4
- package/example/babel.config.js +0 -21
- package/example/biome.json +0 -47
- package/example/deploy.sh +0 -11
- package/example/index.html +0 -26
- package/example/index.js +0 -9
- package/example/index.web.js +0 -8
- package/example/jest.config.js +0 -12
- package/example/metro.config.js +0 -58
- package/example/package-lock.json +0 -14510
- package/example/package.json +0 -48
- package/example/react-native.config.js +0 -17
- package/example/src/components/AppBar.tsx +0 -73
- package/example/src/components/Menu.tsx +0 -90
- package/example/src/components/SingleChoiceDialog.tsx +0 -120
- package/example/src/screens/ConnectScreen.tsx +0 -195
- package/example/src/screens/DevicesScreen.tsx +0 -248
- package/example/src/screens/TerminalScreen.tsx +0 -564
- package/example/src/settings.ts +0 -43
- package/example/src/theme.ts +0 -19
- package/example/src/util/TextUtil.ts +0 -129
- package/example/tsconfig.json +0 -10
- package/example/vite.config.mjs +0 -55
- package/scripts/deploy-release.sh +0 -127
- package/tsconfig.build.json +0 -7
- package/tsconfig.json +0 -20
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.DOM_EXCEPTION_NAMES = exports.DOM_EXCEPTION_CODES = exports.DOMExceptionPolyfill = exports.DOMExceptionImpl = exports.DOMException = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* DOMException Polyfill
|
|
9
|
+
*
|
|
10
|
+
* Provides a spec-compliant DOMException implementation for environments
|
|
11
|
+
* where it is missing or incomplete (e.g. Node.js < 17, some older browsers).
|
|
12
|
+
*
|
|
13
|
+
* Spec: https://webidl.spec.whatwg.org/#idl-DOMException
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
const DOM_EXCEPTION_CODES = exports.DOM_EXCEPTION_CODES = {
|
|
17
|
+
IndexSizeError: 1,
|
|
18
|
+
HierarchyRequestError: 3,
|
|
19
|
+
WrongDocumentError: 4,
|
|
20
|
+
InvalidCharacterError: 5,
|
|
21
|
+
NoModificationAllowedError: 7,
|
|
22
|
+
NotFoundError: 8,
|
|
23
|
+
NotSupportedError: 9,
|
|
24
|
+
InUseAttributeError: 10,
|
|
25
|
+
InvalidStateError: 11,
|
|
26
|
+
SyntaxError: 12,
|
|
27
|
+
InvalidModificationError: 13,
|
|
28
|
+
NamespaceError: 14,
|
|
29
|
+
InvalidAccessError: 15,
|
|
30
|
+
TypeMismatchError: 17,
|
|
31
|
+
SecurityError: 18,
|
|
32
|
+
NetworkError: 19,
|
|
33
|
+
AbortError: 20,
|
|
34
|
+
URLMismatchError: 21,
|
|
35
|
+
QuotaExceededError: 22,
|
|
36
|
+
TimeoutError: 23,
|
|
37
|
+
InvalidNodeTypeError: 24,
|
|
38
|
+
DataCloneError: 25
|
|
39
|
+
};
|
|
40
|
+
const DOM_EXCEPTION_NAMES = exports.DOM_EXCEPTION_NAMES = Object.fromEntries(Object.entries(DOM_EXCEPTION_CODES).map(([name, code]) => [code, name]));
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
// Polyfill class
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
|
|
45
|
+
class DOMExceptionPolyfill extends Error {
|
|
46
|
+
// Instance numeric legacy code (0 when name has no legacy code)
|
|
47
|
+
|
|
48
|
+
// Error name (defaults to "Error" per spec)
|
|
49
|
+
|
|
50
|
+
// --- Static legacy-code constants ---
|
|
51
|
+
static INDEX_SIZE_ERR = 1;
|
|
52
|
+
static DOMSTRING_SIZE_ERR = 2;
|
|
53
|
+
static HIERARCHY_REQUEST_ERR = 3;
|
|
54
|
+
static WRONG_DOCUMENT_ERR = 4;
|
|
55
|
+
static INVALID_CHARACTER_ERR = 5;
|
|
56
|
+
static NO_DATA_ALLOWED_ERR = 6;
|
|
57
|
+
static NO_MODIFICATION_ALLOWED_ERR = 7;
|
|
58
|
+
static NOT_FOUND_ERR = 8;
|
|
59
|
+
static NOT_SUPPORTED_ERR = 9;
|
|
60
|
+
static INUSE_ATTRIBUTE_ERR = 10;
|
|
61
|
+
static INVALID_STATE_ERR = 11;
|
|
62
|
+
static SYNTAX_ERR = 12;
|
|
63
|
+
static INVALID_MODIFICATION_ERR = 13;
|
|
64
|
+
static NAMESPACE_ERR = 14;
|
|
65
|
+
static INVALID_ACCESS_ERR = 15;
|
|
66
|
+
static VALIDATION_ERR = 16;
|
|
67
|
+
static TYPE_MISMATCH_ERR = 17;
|
|
68
|
+
static SECURITY_ERR = 18;
|
|
69
|
+
static NETWORK_ERR = 19;
|
|
70
|
+
static ABORT_ERR = 20;
|
|
71
|
+
static URL_MISMATCH_ERR = 21;
|
|
72
|
+
static QUOTA_EXCEEDED_ERR = 22;
|
|
73
|
+
static TIMEOUT_ERR = 23;
|
|
74
|
+
static INVALID_NODE_TYPE_ERR = 24;
|
|
75
|
+
static DATA_CLONE_ERR = 25;
|
|
76
|
+
constructor(message = '', name = 'Error') {
|
|
77
|
+
super(message);
|
|
78
|
+
|
|
79
|
+
// Restore the correct prototype chain when transpiled to ES5
|
|
80
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
81
|
+
this.name = name;
|
|
82
|
+
this.message = message;
|
|
83
|
+
this.code = DOM_EXCEPTION_CODES[name] ?? 0;
|
|
84
|
+
|
|
85
|
+
// Provide a useful stack trace in V8 / SpiderMonkey
|
|
86
|
+
const ErrorWithStack = Error;
|
|
87
|
+
if (typeof ErrorWithStack.captureStackTrace === 'function') {
|
|
88
|
+
ErrorWithStack.captureStackTrace(this, new.target);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** Mirror static constants on the prototype (spec §3.1.2) */
|
|
93
|
+
get INDEX_SIZE_ERR() {
|
|
94
|
+
return 1;
|
|
95
|
+
}
|
|
96
|
+
get DOMSTRING_SIZE_ERR() {
|
|
97
|
+
return 2;
|
|
98
|
+
}
|
|
99
|
+
get HIERARCHY_REQUEST_ERR() {
|
|
100
|
+
return 3;
|
|
101
|
+
}
|
|
102
|
+
get WRONG_DOCUMENT_ERR() {
|
|
103
|
+
return 4;
|
|
104
|
+
}
|
|
105
|
+
get INVALID_CHARACTER_ERR() {
|
|
106
|
+
return 5;
|
|
107
|
+
}
|
|
108
|
+
get NO_DATA_ALLOWED_ERR() {
|
|
109
|
+
return 6;
|
|
110
|
+
}
|
|
111
|
+
get NO_MODIFICATION_ALLOWED_ERR() {
|
|
112
|
+
return 7;
|
|
113
|
+
}
|
|
114
|
+
get NOT_FOUND_ERR() {
|
|
115
|
+
return 8;
|
|
116
|
+
}
|
|
117
|
+
get NOT_SUPPORTED_ERR() {
|
|
118
|
+
return 9;
|
|
119
|
+
}
|
|
120
|
+
get INUSE_ATTRIBUTE_ERR() {
|
|
121
|
+
return 10;
|
|
122
|
+
}
|
|
123
|
+
get INVALID_STATE_ERR() {
|
|
124
|
+
return 11;
|
|
125
|
+
}
|
|
126
|
+
get SYNTAX_ERR() {
|
|
127
|
+
return 12;
|
|
128
|
+
}
|
|
129
|
+
get INVALID_MODIFICATION_ERR() {
|
|
130
|
+
return 13;
|
|
131
|
+
}
|
|
132
|
+
get NAMESPACE_ERR() {
|
|
133
|
+
return 14;
|
|
134
|
+
}
|
|
135
|
+
get INVALID_ACCESS_ERR() {
|
|
136
|
+
return 15;
|
|
137
|
+
}
|
|
138
|
+
get VALIDATION_ERR() {
|
|
139
|
+
return 16;
|
|
140
|
+
}
|
|
141
|
+
get TYPE_MISMATCH_ERR() {
|
|
142
|
+
return 17;
|
|
143
|
+
}
|
|
144
|
+
get SECURITY_ERR() {
|
|
145
|
+
return 18;
|
|
146
|
+
}
|
|
147
|
+
get NETWORK_ERR() {
|
|
148
|
+
return 19;
|
|
149
|
+
}
|
|
150
|
+
get ABORT_ERR() {
|
|
151
|
+
return 20;
|
|
152
|
+
}
|
|
153
|
+
get URL_MISMATCH_ERR() {
|
|
154
|
+
return 21;
|
|
155
|
+
}
|
|
156
|
+
get QUOTA_EXCEEDED_ERR() {
|
|
157
|
+
return 22;
|
|
158
|
+
}
|
|
159
|
+
get TIMEOUT_ERR() {
|
|
160
|
+
return 23;
|
|
161
|
+
}
|
|
162
|
+
get INVALID_NODE_TYPE_ERR() {
|
|
163
|
+
return 24;
|
|
164
|
+
}
|
|
165
|
+
get DATA_CLONE_ERR() {
|
|
166
|
+
return 25;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/** Canonical string representation */
|
|
170
|
+
toString() {
|
|
171
|
+
return `${this.name}: ${this.message}`;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
exports.DOMExceptionPolyfill = DOMExceptionPolyfill;
|
|
175
|
+
const DOMExceptionImpl = exports.DOMException = exports.DOMExceptionImpl = globalThis.DOMException ? globalThis.DOMException : DOMExceptionPolyfill;
|
|
176
|
+
//# sourceMappingURL=dom-exception.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DOM_EXCEPTION_CODES","exports","IndexSizeError","HierarchyRequestError","WrongDocumentError","InvalidCharacterError","NoModificationAllowedError","NotFoundError","NotSupportedError","InUseAttributeError","InvalidStateError","SyntaxError","InvalidModificationError","NamespaceError","InvalidAccessError","TypeMismatchError","SecurityError","NetworkError","AbortError","URLMismatchError","QuotaExceededError","TimeoutError","InvalidNodeTypeError","DataCloneError","DOM_EXCEPTION_NAMES","Object","fromEntries","entries","map","name","code","DOMExceptionPolyfill","Error","INDEX_SIZE_ERR","DOMSTRING_SIZE_ERR","HIERARCHY_REQUEST_ERR","WRONG_DOCUMENT_ERR","INVALID_CHARACTER_ERR","NO_DATA_ALLOWED_ERR","NO_MODIFICATION_ALLOWED_ERR","NOT_FOUND_ERR","NOT_SUPPORTED_ERR","INUSE_ATTRIBUTE_ERR","INVALID_STATE_ERR","SYNTAX_ERR","INVALID_MODIFICATION_ERR","NAMESPACE_ERR","INVALID_ACCESS_ERR","VALIDATION_ERR","TYPE_MISMATCH_ERR","SECURITY_ERR","NETWORK_ERR","ABORT_ERR","URL_MISMATCH_ERR","QUOTA_EXCEEDED_ERR","TIMEOUT_ERR","INVALID_NODE_TYPE_ERR","DATA_CLONE_ERR","constructor","message","setPrototypeOf","new","target","prototype","ErrorWithStack","captureStackTrace","toString","DOMExceptionImpl","DOMException","globalThis"],"sourceRoot":"../../../src","sources":["lib/dom-exception.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.EventTarget = exports.Event = void 0;
|
|
7
|
+
exports.setEventParent = setEventParent;
|
|
8
|
+
class Event {
|
|
9
|
+
target = null;
|
|
10
|
+
currentTarget = null;
|
|
11
|
+
defaultPrevented = false;
|
|
12
|
+
cancelBubble = false;
|
|
13
|
+
_stopImmediatePropagationFlag = false;
|
|
14
|
+
timeStamp = Date.now();
|
|
15
|
+
isTrusted = false;
|
|
16
|
+
static NONE = 0;
|
|
17
|
+
static CAPTURING_PHASE = 1;
|
|
18
|
+
static AT_TARGET = 2;
|
|
19
|
+
static BUBBLING_PHASE = 3;
|
|
20
|
+
NONE = 0;
|
|
21
|
+
CAPTURING_PHASE = 1;
|
|
22
|
+
AT_TARGET = 2;
|
|
23
|
+
BUBBLING_PHASE = 3;
|
|
24
|
+
eventPhase = Event.NONE;
|
|
25
|
+
constructor(type, options) {
|
|
26
|
+
this.type = type;
|
|
27
|
+
this.bubbles = options?.bubbles ?? false;
|
|
28
|
+
this.cancelable = options?.cancelable ?? false;
|
|
29
|
+
this.composed = options?.composed ?? false;
|
|
30
|
+
}
|
|
31
|
+
preventDefault() {
|
|
32
|
+
if (this.cancelable) {
|
|
33
|
+
this.defaultPrevented = true;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
stopPropagation() {
|
|
37
|
+
this.cancelBubble = true;
|
|
38
|
+
}
|
|
39
|
+
stopImmediatePropagation() {
|
|
40
|
+
this.cancelBubble = true;
|
|
41
|
+
this._stopImmediatePropagationFlag = true;
|
|
42
|
+
}
|
|
43
|
+
composedPath() {
|
|
44
|
+
return this.currentTarget ? [this.currentTarget] : [];
|
|
45
|
+
}
|
|
46
|
+
initEvent(type, bubbles, cancelable) {
|
|
47
|
+
this.type = type;
|
|
48
|
+
this.bubbles = bubbles ?? false;
|
|
49
|
+
this.cancelable = cancelable ?? false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.Event = Event;
|
|
53
|
+
const wm = new WeakMap();
|
|
54
|
+
|
|
55
|
+
// Optional event-propagation parents. An event dispatched on a child also runs
|
|
56
|
+
// its parent's listeners, while event.target stays the original child. This
|
|
57
|
+
// models the W3C "SerialPort's parent is the Serial" relationship, so a
|
|
58
|
+
// connect/disconnect observed on `serial` reports event.target === the
|
|
59
|
+
// SerialPort (per the Web Serial spec and WPT).
|
|
60
|
+
const eventParents = new WeakMap();
|
|
61
|
+
|
|
62
|
+
/** Make events dispatched on `child` also bubble to `parent`'s listeners. */
|
|
63
|
+
function setEventParent(child, parent) {
|
|
64
|
+
eventParents.set(child, parent);
|
|
65
|
+
}
|
|
66
|
+
function define(target, name, value) {
|
|
67
|
+
Object.defineProperty(target, name, {
|
|
68
|
+
configurable: true,
|
|
69
|
+
writable: true,
|
|
70
|
+
value
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
function dispatch(info) {
|
|
74
|
+
const options = info.options;
|
|
75
|
+
const once = typeof options === 'object' && options !== null ? options.once : false;
|
|
76
|
+
if (once) {
|
|
77
|
+
info.target.removeEventListener(this.type, info.listener);
|
|
78
|
+
}
|
|
79
|
+
if (typeof info.listener === 'function') {
|
|
80
|
+
info.listener.call(info.target, this);
|
|
81
|
+
} else {
|
|
82
|
+
info.listener.handleEvent(this);
|
|
83
|
+
}
|
|
84
|
+
return this._stopImmediatePropagationFlag;
|
|
85
|
+
}
|
|
86
|
+
class EventTarget {
|
|
87
|
+
constructor() {
|
|
88
|
+
wm.set(this, Object.create(null));
|
|
89
|
+
}
|
|
90
|
+
addEventListener(type, listener, options) {
|
|
91
|
+
const secret = wm.get(this);
|
|
92
|
+
let listeners = secret[type];
|
|
93
|
+
if (!listeners) {
|
|
94
|
+
listeners = [];
|
|
95
|
+
secret[type] = listeners;
|
|
96
|
+
}
|
|
97
|
+
for (let i = 0; i < listeners.length; i++) {
|
|
98
|
+
if (listeners[i].listener === listener) return;
|
|
99
|
+
}
|
|
100
|
+
listeners.push({
|
|
101
|
+
target: this,
|
|
102
|
+
listener,
|
|
103
|
+
options
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
dispatchEvent(event) {
|
|
107
|
+
// The event's target is the node it was dispatched on; it then bubbles up
|
|
108
|
+
// the eventParents chain (currentTarget changes, target does not).
|
|
109
|
+
define(event, 'target', this);
|
|
110
|
+
let node = this;
|
|
111
|
+
while (node) {
|
|
112
|
+
const listeners = wm.get(node)?.[event.type];
|
|
113
|
+
if (listeners?.length) {
|
|
114
|
+
define(event, 'currentTarget', node);
|
|
115
|
+
listeners.slice(0).some(dispatch, event);
|
|
116
|
+
}
|
|
117
|
+
if (event.cancelBubble) break;
|
|
118
|
+
node = eventParents.get(node) ?? null;
|
|
119
|
+
}
|
|
120
|
+
// Per the DOM, target persists after dispatch (a re-dispatch overwrites it
|
|
121
|
+
// at the top of this method); only currentTarget is cleared.
|
|
122
|
+
define(event, 'currentTarget', null);
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
removeEventListener(type, listener, _options) {
|
|
126
|
+
const secret = wm.get(this);
|
|
127
|
+
const listeners = secret[type];
|
|
128
|
+
if (!listeners) return;
|
|
129
|
+
for (let i = 0; i < listeners.length; i++) {
|
|
130
|
+
if (listeners[i].listener === listener) {
|
|
131
|
+
listeners.splice(i, 1);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
exports.EventTarget = EventTarget;
|
|
138
|
+
//# sourceMappingURL=event-target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Event","target","currentTarget","defaultPrevented","cancelBubble","_stopImmediatePropagationFlag","timeStamp","Date","now","isTrusted","NONE","CAPTURING_PHASE","AT_TARGET","BUBBLING_PHASE","eventPhase","constructor","type","options","bubbles","cancelable","composed","preventDefault","stopPropagation","stopImmediatePropagation","composedPath","initEvent","exports","wm","WeakMap","eventParents","setEventParent","child","parent","set","define","name","value","Object","defineProperty","configurable","writable","dispatch","info","once","removeEventListener","listener","call","handleEvent","EventTarget","create","addEventListener","secret","get","listeners","i","length","push","dispatchEvent","event","node","slice","some","_options","splice"],"sourceRoot":"../../../src","sources":["lib/event-target.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createDeferredPromise = createDeferredPromise;
|
|
7
|
+
/**
|
|
8
|
+
* @returns An object containing a promise and its resolve/reject methods.
|
|
9
|
+
*/
|
|
10
|
+
function createDeferredPromise() {
|
|
11
|
+
let res;
|
|
12
|
+
let rej;
|
|
13
|
+
const promise = new Promise((resolve, reject) => {
|
|
14
|
+
res = resolve;
|
|
15
|
+
rej = reject;
|
|
16
|
+
});
|
|
17
|
+
return {
|
|
18
|
+
promise,
|
|
19
|
+
resolve: res,
|
|
20
|
+
reject: rej
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=promise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createDeferredPromise","res","rej","promise","Promise","resolve","reject"],"sourceRoot":"../../../src","sources":["lib/promise.ts"],"mappings":";;;;;;AAMA;AACA;AACA;AACO,SAASA,qBAAqBA,CAAA,EAA0B;EAC7D,IAAIC,GAAY;EAChB,IAAIC,GAAY;EAChB,MAAMC,OAAO,GAAG,IAAIC,OAAO,CAAI,CAACC,OAAO,EAAEC,MAAM,KAAK;IAClDL,GAAG,GAAGI,OAAO;IACbH,GAAG,GAAGI,MAAM;EACd,CAAC,CAAC;EAEF,OAAO;IAACH,OAAO;IAAEE,OAAO,EAAEJ,GAAG;IAAEK,MAAM,EAAEJ;EAAG,CAAC;AAC7C","ignoreList":[]}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "EchoDevice", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _serialDevice.EchoDevice;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "LineDevice", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _serialDevice.LineDevice;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "SerialDevice", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () {
|
|
21
|
+
return _serialDevice.SerialDevice;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports, "SilentDevice", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function () {
|
|
27
|
+
return _serialDevice.SilentDevice;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(exports, "VirtualDevice", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function () {
|
|
33
|
+
return _virtualSerial.VirtualDevice;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
Object.defineProperty(exports, "VirtualSerialTransport", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
get: function () {
|
|
39
|
+
return _virtualSerial.VirtualSerialTransport;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
Object.defineProperty(exports, "getUsbSerial", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
get: function () {
|
|
45
|
+
return _UsbSerial.getUsbSerial;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
Object.defineProperty(exports, "installSerialMock", {
|
|
49
|
+
enumerable: true,
|
|
50
|
+
get: function () {
|
|
51
|
+
return _install.installSerialMock;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
Object.defineProperty(exports, "resetUsbSerial", {
|
|
55
|
+
enumerable: true,
|
|
56
|
+
get: function () {
|
|
57
|
+
return _UsbSerial.resetUsbSerial;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
Object.defineProperty(exports, "setUsbSerial", {
|
|
61
|
+
enumerable: true,
|
|
62
|
+
get: function () {
|
|
63
|
+
return _UsbSerial.setUsbSerial;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
var _UsbSerial = require("../UsbSerial");
|
|
67
|
+
var _install = require("./install");
|
|
68
|
+
var _serialDevice = require("./serial-device");
|
|
69
|
+
var _virtualSerial = require("./virtual-serial");
|
|
70
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_UsbSerial","require","_install","_serialDevice","_virtualSerial"],"sourceRoot":"../../../src","sources":["testing/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,IAAAA,UAAA,GAAAC,OAAA;AAGA,IAAAC,QAAA,GAAAD,OAAA;AASA,IAAAE,aAAA,GAAAF,OAAA;AAWA,IAAAG,cAAA,GAAAH,OAAA","ignoreList":[]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.installSerialMock = installSerialMock;
|
|
7
|
+
var _UsbSerial = require("../UsbSerial");
|
|
8
|
+
var _serialDevice = require("./serial-device");
|
|
9
|
+
var _virtualSerial = require("./virtual-serial");
|
|
10
|
+
/**
|
|
11
|
+
* installSerialMock — point the library at a virtual device set in one call.
|
|
12
|
+
*
|
|
13
|
+
* Built for E2E: call it once at app startup, behind your own env/build flag, to
|
|
14
|
+
* make `navigator.serial` / this library's `serial` talk to simulated
|
|
15
|
+
* {@link SerialDevice}s instead of real USB hardware while a test driver
|
|
16
|
+
* (Maestro, Detox, …) exercises the app on a device/emulator.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* // index.js (debug/E2E build only)
|
|
20
|
+
* import {installSerialMock, EchoDevice} from 'react-native-web-serial-api/testing';
|
|
21
|
+
* installSerialMock({
|
|
22
|
+
* enabled: process.env.RNWS_SERIAL_MOCK === '1',
|
|
23
|
+
* devices: [new EchoDevice(), new MyThermometer()],
|
|
24
|
+
* });
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
/** A device to register: a SerialDevice, optionally with transport options. */
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Build a {@link VirtualSerialTransport} from `devices` and install it globally
|
|
31
|
+
* via {@link setUsbSerial}. SerialDevices default to granted USB permission (so
|
|
32
|
+
* they show up immediately); pass the `{device, options}` form to override.
|
|
33
|
+
* Returns the transport (handy for driving devices in-test), or `null` when
|
|
34
|
+
* disabled.
|
|
35
|
+
*/
|
|
36
|
+
function installSerialMock(options) {
|
|
37
|
+
if (options.enabled === false) return null;
|
|
38
|
+
const transport = new _virtualSerial.VirtualSerialTransport(options.transport);
|
|
39
|
+
for (const entry of options.devices) {
|
|
40
|
+
if (entry instanceof _serialDevice.SerialDevice) {
|
|
41
|
+
transport.addDevice(entry, {
|
|
42
|
+
hasPermission: true
|
|
43
|
+
});
|
|
44
|
+
} else {
|
|
45
|
+
transport.addDevice(entry.device, {
|
|
46
|
+
hasPermission: true,
|
|
47
|
+
...entry.options
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
(0, _UsbSerial.setUsbSerial)(transport);
|
|
52
|
+
return transport;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_UsbSerial","require","_serialDevice","_virtualSerial","installSerialMock","options","enabled","transport","VirtualSerialTransport","entry","devices","SerialDevice","addDevice","hasPermission","device","setUsbSerial"],"sourceRoot":"../../../src","sources":["testing/install.ts"],"mappings":";;;;;;AAgBA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAKA,IAAAE,cAAA,GAAAF,OAAA;AAtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA;;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,iBAAiBA,CAC/BC,OAAiC,EACF;EAC/B,IAAIA,OAAO,CAACC,OAAO,KAAK,KAAK,EAAE,OAAO,IAAI;EAE1C,MAAMC,SAAS,GAAG,IAAIC,qCAAsB,CAACH,OAAO,CAACE,SAAS,CAAC;EAC/D,KAAK,MAAME,KAAK,IAAIJ,OAAO,CAACK,OAAO,EAAE;IACnC,IAAID,KAAK,YAAYE,0BAAY,EAAE;MACjCJ,SAAS,CAACK,SAAS,CAACH,KAAK,EAAE;QAACI,aAAa,EAAE;MAAI,CAAC,CAAC;IACnD,CAAC,MAAM;MACLN,SAAS,CAACK,SAAS,CAACH,KAAK,CAACK,MAAM,EAAE;QAChCD,aAAa,EAAE,IAAI;QACnB,GAAGJ,KAAK,CAACJ;MACX,CAAC,CAAC;IACJ;EACF;EAEA,IAAAU,uBAAY,EAACR,SAAS,CAAC;EACvB,OAAOA,SAAS;AAClB","ignoreList":[]}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.SilentDevice = exports.SerialDevice = exports.LineDevice = exports.EchoDevice = void 0;
|
|
7
|
+
exports.toBytes = toBytes;
|
|
8
|
+
/**
|
|
9
|
+
* SerialDevice — author a complete simulated serial peripheral.
|
|
10
|
+
*
|
|
11
|
+
* Extend the class and override the lifecycle hooks to model a real device's
|
|
12
|
+
* whole behaviour (firmware/protocol): react to `open()`, to bytes the host
|
|
13
|
+
* writes, to control-signal changes, and stream data back over time. It is
|
|
14
|
+
* hosted by a {@link VirtualSerialTransport} ({@link ./virtual-serial}) and is
|
|
15
|
+
* free of any `react-native` dependency, so the same device runs under Jest,
|
|
16
|
+
* in a browser, and inside a React Native app on a device/emulator (for E2E).
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* class Thermometer extends SerialDevice {
|
|
20
|
+
* usbVendorId = 0x0403;
|
|
21
|
+
* usbProductId = 0x6001;
|
|
22
|
+
* #timer?: ReturnType<typeof setInterval>;
|
|
23
|
+
* onOpen() {
|
|
24
|
+
* this.#timer = setInterval(() => this.send(`${20 + Math.random()}C\r\n`), 1000);
|
|
25
|
+
* }
|
|
26
|
+
* onData(bytes) { // host wrote a command
|
|
27
|
+
* if (String.fromCharCode(...bytes).trim() === 'ID?') this.send('ACME-TEMP\r\n');
|
|
28
|
+
* }
|
|
29
|
+
* onClose() { clearInterval(this.#timer); }
|
|
30
|
+
* }
|
|
31
|
+
* transport.addDevice(new Thermometer(), {hasPermission: true});
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/** The negotiated connection parameters (native parity code: 0 none/1 odd/2 even). */
|
|
35
|
+
|
|
36
|
+
/** Device-asserted input signals — what the host reads via getSignals(). */
|
|
37
|
+
|
|
38
|
+
/** Host-asserted output signals (DTR/RTS/break) the device observes. */
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The handle a {@link SerialDevice} uses to talk back to the host. Provided by
|
|
42
|
+
* the transport; you normally use the `protected` helpers on `SerialDevice`
|
|
43
|
+
* rather than this directly.
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
/** Coerce a payload into a byte array (string → char codes, & 0xff). */
|
|
47
|
+
function toBytes(data) {
|
|
48
|
+
if (typeof data === 'string') {
|
|
49
|
+
return Array.from(data, c => c.charCodeAt(0) & 0xff);
|
|
50
|
+
}
|
|
51
|
+
if (data instanceof Uint8Array) return Array.from(data);
|
|
52
|
+
return data.map(n => n & 0xff);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Base class for a simulated serial peripheral. Override the `on*` hooks you
|
|
57
|
+
* care about (all default to no-ops and may be async) and use the `protected`
|
|
58
|
+
* helpers to drive the host.
|
|
59
|
+
*/
|
|
60
|
+
class SerialDevice {
|
|
61
|
+
/** USB Vendor ID this device reports for enumeration. */
|
|
62
|
+
|
|
63
|
+
/** USB Product ID this device reports for enumeration. */
|
|
64
|
+
|
|
65
|
+
/** Optional USB serial number. */
|
|
66
|
+
|
|
67
|
+
#host = null;
|
|
68
|
+
|
|
69
|
+
/** @internal Bind the transport host (called by VirtualSerialTransport). */
|
|
70
|
+
_bind(host) {
|
|
71
|
+
this.#host = host;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** Send bytes to the host (they appear on `port.readable`). */
|
|
75
|
+
send(data) {
|
|
76
|
+
this.#host?.send(toBytes(data));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Raise a typed read error on the host's readable stream. `name` is the W3C
|
|
81
|
+
* error type, e.g. "BreakError", "BufferOverrunError", "FramingError",
|
|
82
|
+
* "ParityError" (defaults to "NetworkError").
|
|
83
|
+
*/
|
|
84
|
+
raiseError(message, name) {
|
|
85
|
+
this.#host?.raiseError(message, name);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** Set device-asserted input signals (DCD/CTS/RI/DSR) the host can read. */
|
|
89
|
+
setSignals(signals) {
|
|
90
|
+
this.#host?.setSignals(signals);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** The parameters the host opened the port with, or null when closed. */
|
|
94
|
+
get openOptions() {
|
|
95
|
+
return this.#host?.openOptions ?? null;
|
|
96
|
+
}
|
|
97
|
+
get deviceId() {
|
|
98
|
+
return this.#host?.deviceId ?? -1;
|
|
99
|
+
}
|
|
100
|
+
get portNumber() {
|
|
101
|
+
return this.#host?.portNumber ?? 0;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** The host opened the port. */
|
|
105
|
+
onOpen(_options) {}
|
|
106
|
+
/** The host wrote bytes to the device. */
|
|
107
|
+
onData(_data) {}
|
|
108
|
+
/** The host changed DTR/RTS/break. */
|
|
109
|
+
onHostSignals(_signals) {}
|
|
110
|
+
/** The host closed the port. */
|
|
111
|
+
onClose() {}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/** Optional USB identity for the built-in devices. */
|
|
115
|
+
exports.SerialDevice = SerialDevice;
|
|
116
|
+
/** A loopback device: every byte written is echoed straight back. */
|
|
117
|
+
class EchoDevice extends SerialDevice {
|
|
118
|
+
constructor(identity = {}) {
|
|
119
|
+
super();
|
|
120
|
+
this.usbVendorId = identity.usbVendorId ?? 0x0403;
|
|
121
|
+
this.usbProductId = identity.usbProductId ?? 0x6001;
|
|
122
|
+
this.serialNumber = identity.serialNumber;
|
|
123
|
+
}
|
|
124
|
+
onData(data) {
|
|
125
|
+
this.send(data);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Base for a line-oriented command/response device: buffers incoming bytes and
|
|
131
|
+
* calls {@link onLine} for each `\n`-terminated line (trailing CR/LF stripped).
|
|
132
|
+
*/
|
|
133
|
+
exports.EchoDevice = EchoDevice;
|
|
134
|
+
class LineDevice extends SerialDevice {
|
|
135
|
+
#buffer = '';
|
|
136
|
+
|
|
137
|
+
/** Handle one line received from the host. */
|
|
138
|
+
|
|
139
|
+
onData(data) {
|
|
140
|
+
for (let i = 0; i < data.length; i++) {
|
|
141
|
+
this.#buffer += String.fromCharCode(data[i]);
|
|
142
|
+
}
|
|
143
|
+
let nl = this.#buffer.indexOf('\n');
|
|
144
|
+
while (nl >= 0) {
|
|
145
|
+
const line = this.#buffer.slice(0, nl).replace(/\r$/, '');
|
|
146
|
+
this.#buffer = this.#buffer.slice(nl + 1);
|
|
147
|
+
void this.onLine(line);
|
|
148
|
+
nl = this.#buffer.indexOf('\n');
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/** A device that accepts writes but never sends anything back. */
|
|
154
|
+
exports.LineDevice = LineDevice;
|
|
155
|
+
class SilentDevice extends SerialDevice {
|
|
156
|
+
constructor(identity = {}) {
|
|
157
|
+
super();
|
|
158
|
+
this.usbVendorId = identity.usbVendorId ?? 0x0403;
|
|
159
|
+
this.usbProductId = identity.usbProductId ?? 0x6001;
|
|
160
|
+
this.serialNumber = identity.serialNumber;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
exports.SilentDevice = SilentDevice;
|
|
164
|
+
//# sourceMappingURL=serial-device.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["toBytes","data","Array","from","c","charCodeAt","Uint8Array","map","n","SerialDevice","host","_bind","send","raiseError","message","name","setSignals","signals","openOptions","deviceId","portNumber","onOpen","_options","onData","_data","onHostSignals","_signals","onClose","exports","EchoDevice","constructor","identity","usbVendorId","usbProductId","serialNumber","LineDevice","buffer","i","length","String","fromCharCode","nl","indexOf","line","slice","replace","onLine","SilentDevice"],"sourceRoot":"../../../src","sources":["testing/serial-device.ts"],"mappings":"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","ignoreList":[]}
|