@reset-framework/sdk 1.1.1 → 1.1.4
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/LICENSE +20 -20
- package/README.md +41 -41
- package/package.json +1 -1
- package/src/client.js +836 -823
- package/src/errors.js +33 -33
- package/src/events.js +123 -123
- package/src/index.d.ts +574 -574
- package/src/index.js +39 -39
- package/src/transport.js +180 -180
package/src/errors.js
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
export class ResetRuntimeError extends Error {
|
|
2
|
-
constructor(message, options = {}) {
|
|
3
|
-
super(message)
|
|
4
|
-
this.name = new.target.name
|
|
5
|
-
|
|
6
|
-
if ("cause" in options) {
|
|
7
|
-
this.cause = options.cause
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export class ResetRuntimeUnavailableError extends ResetRuntimeError {
|
|
13
|
-
constructor(message = "Reset runtime is not available in the current environment.") {
|
|
14
|
-
super(message)
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export class ResetProtocolError extends ResetRuntimeError {
|
|
19
|
-
constructor(message, options = {}) {
|
|
20
|
-
super(message, options)
|
|
21
|
-
this.command = options.command
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export class ResetInvocationError extends ResetRuntimeError {
|
|
26
|
-
constructor(command, message, response, options = {}) {
|
|
27
|
-
super(message, options)
|
|
28
|
-
this.command = command
|
|
29
|
-
this.code = response?.code
|
|
30
|
-
this.details = response?.details
|
|
31
|
-
this.response = response
|
|
32
|
-
}
|
|
33
|
-
}
|
|
1
|
+
export class ResetRuntimeError extends Error {
|
|
2
|
+
constructor(message, options = {}) {
|
|
3
|
+
super(message)
|
|
4
|
+
this.name = new.target.name
|
|
5
|
+
|
|
6
|
+
if ("cause" in options) {
|
|
7
|
+
this.cause = options.cause
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export class ResetRuntimeUnavailableError extends ResetRuntimeError {
|
|
13
|
+
constructor(message = "Reset runtime is not available in the current environment.") {
|
|
14
|
+
super(message)
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export class ResetProtocolError extends ResetRuntimeError {
|
|
19
|
+
constructor(message, options = {}) {
|
|
20
|
+
super(message, options)
|
|
21
|
+
this.command = options.command
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export class ResetInvocationError extends ResetRuntimeError {
|
|
26
|
+
constructor(command, message, response, options = {}) {
|
|
27
|
+
super(message, options)
|
|
28
|
+
this.command = command
|
|
29
|
+
this.code = response?.code
|
|
30
|
+
this.details = response?.details
|
|
31
|
+
this.response = response
|
|
32
|
+
}
|
|
33
|
+
}
|
package/src/events.js
CHANGED
|
@@ -1,123 +1,123 @@
|
|
|
1
|
-
function getDefaultWindowTarget() {
|
|
2
|
-
if (typeof window === "undefined") {
|
|
3
|
-
return undefined
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
return window
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
function getState(target = getDefaultWindowTarget()) {
|
|
10
|
-
if (!target) {
|
|
11
|
-
return null
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
if (!target.__resetEventState) {
|
|
15
|
-
const listeners = new Map()
|
|
16
|
-
|
|
17
|
-
target.__resetEventState = {
|
|
18
|
-
listeners,
|
|
19
|
-
dispatch(envelope) {
|
|
20
|
-
const eventName = typeof envelope?.event === "string" ? envelope.event : ""
|
|
21
|
-
if (eventName === "") {
|
|
22
|
-
return
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const handlers = listeners.get(eventName)
|
|
26
|
-
if (!handlers) {
|
|
27
|
-
return
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
for (const handler of [...handlers]) {
|
|
31
|
-
handler(envelope.payload)
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
Object.defineProperty(target, "__resetDispatchEvent", {
|
|
37
|
-
value: (envelope) => target.__resetEventState.dispatch(envelope),
|
|
38
|
-
configurable: false,
|
|
39
|
-
enumerable: false,
|
|
40
|
-
writable: false
|
|
41
|
-
})
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
return target.__resetEventState
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export function listen(eventName, handler, target = getDefaultWindowTarget()) {
|
|
48
|
-
if (typeof eventName !== "string" || eventName.trim() === "") {
|
|
49
|
-
throw new TypeError("Reset event name must be a non-empty string.")
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
if (typeof handler !== "function") {
|
|
53
|
-
throw new TypeError("Reset event handler must be a function.")
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const state = getState(target)
|
|
57
|
-
if (!state) {
|
|
58
|
-
return () => {}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
const handlers = state.listeners.get(eventName) ?? new Set()
|
|
62
|
-
handlers.add(handler)
|
|
63
|
-
state.listeners.set(eventName, handlers)
|
|
64
|
-
|
|
65
|
-
return () => {
|
|
66
|
-
const current = state.listeners.get(eventName)
|
|
67
|
-
if (!current) {
|
|
68
|
-
return
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
current.delete(handler)
|
|
72
|
-
if (current.size === 0) {
|
|
73
|
-
state.listeners.delete(eventName)
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
export function once(eventName, handler, target = getDefaultWindowTarget()) {
|
|
79
|
-
let dispose = () => {}
|
|
80
|
-
|
|
81
|
-
dispose = listen(
|
|
82
|
-
eventName,
|
|
83
|
-
(payload) => {
|
|
84
|
-
dispose()
|
|
85
|
-
handler(payload)
|
|
86
|
-
},
|
|
87
|
-
target
|
|
88
|
-
)
|
|
89
|
-
|
|
90
|
-
return dispose
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export function emitLocal(eventName, payload, target = getDefaultWindowTarget()) {
|
|
94
|
-
const state = getState(target)
|
|
95
|
-
if (!state) {
|
|
96
|
-
return
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
state.dispatch({
|
|
100
|
-
event: eventName,
|
|
101
|
-
payload
|
|
102
|
-
})
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
export function createEventApi(transport, target = getDefaultWindowTarget()) {
|
|
106
|
-
return Object.freeze({
|
|
107
|
-
listen(eventName, handler) {
|
|
108
|
-
return listen(eventName, handler, target)
|
|
109
|
-
},
|
|
110
|
-
once(eventName, handler) {
|
|
111
|
-
return once(eventName, handler, target)
|
|
112
|
-
},
|
|
113
|
-
emitLocal(eventName, payload) {
|
|
114
|
-
emitLocal(eventName, payload, target)
|
|
115
|
-
},
|
|
116
|
-
emit(eventName, payload = null) {
|
|
117
|
-
return transport.invoke("event.emit", {
|
|
118
|
-
event: eventName,
|
|
119
|
-
payload
|
|
120
|
-
})
|
|
121
|
-
}
|
|
122
|
-
})
|
|
123
|
-
}
|
|
1
|
+
function getDefaultWindowTarget() {
|
|
2
|
+
if (typeof window === "undefined") {
|
|
3
|
+
return undefined
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
return window
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function getState(target = getDefaultWindowTarget()) {
|
|
10
|
+
if (!target) {
|
|
11
|
+
return null
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
if (!target.__resetEventState) {
|
|
15
|
+
const listeners = new Map()
|
|
16
|
+
|
|
17
|
+
target.__resetEventState = {
|
|
18
|
+
listeners,
|
|
19
|
+
dispatch(envelope) {
|
|
20
|
+
const eventName = typeof envelope?.event === "string" ? envelope.event : ""
|
|
21
|
+
if (eventName === "") {
|
|
22
|
+
return
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const handlers = listeners.get(eventName)
|
|
26
|
+
if (!handlers) {
|
|
27
|
+
return
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
for (const handler of [...handlers]) {
|
|
31
|
+
handler(envelope.payload)
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
Object.defineProperty(target, "__resetDispatchEvent", {
|
|
37
|
+
value: (envelope) => target.__resetEventState.dispatch(envelope),
|
|
38
|
+
configurable: false,
|
|
39
|
+
enumerable: false,
|
|
40
|
+
writable: false
|
|
41
|
+
})
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return target.__resetEventState
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function listen(eventName, handler, target = getDefaultWindowTarget()) {
|
|
48
|
+
if (typeof eventName !== "string" || eventName.trim() === "") {
|
|
49
|
+
throw new TypeError("Reset event name must be a non-empty string.")
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (typeof handler !== "function") {
|
|
53
|
+
throw new TypeError("Reset event handler must be a function.")
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const state = getState(target)
|
|
57
|
+
if (!state) {
|
|
58
|
+
return () => {}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const handlers = state.listeners.get(eventName) ?? new Set()
|
|
62
|
+
handlers.add(handler)
|
|
63
|
+
state.listeners.set(eventName, handlers)
|
|
64
|
+
|
|
65
|
+
return () => {
|
|
66
|
+
const current = state.listeners.get(eventName)
|
|
67
|
+
if (!current) {
|
|
68
|
+
return
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
current.delete(handler)
|
|
72
|
+
if (current.size === 0) {
|
|
73
|
+
state.listeners.delete(eventName)
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export function once(eventName, handler, target = getDefaultWindowTarget()) {
|
|
79
|
+
let dispose = () => {}
|
|
80
|
+
|
|
81
|
+
dispose = listen(
|
|
82
|
+
eventName,
|
|
83
|
+
(payload) => {
|
|
84
|
+
dispose()
|
|
85
|
+
handler(payload)
|
|
86
|
+
},
|
|
87
|
+
target
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
return dispose
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export function emitLocal(eventName, payload, target = getDefaultWindowTarget()) {
|
|
94
|
+
const state = getState(target)
|
|
95
|
+
if (!state) {
|
|
96
|
+
return
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
state.dispatch({
|
|
100
|
+
event: eventName,
|
|
101
|
+
payload
|
|
102
|
+
})
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export function createEventApi(transport, target = getDefaultWindowTarget()) {
|
|
106
|
+
return Object.freeze({
|
|
107
|
+
listen(eventName, handler) {
|
|
108
|
+
return listen(eventName, handler, target)
|
|
109
|
+
},
|
|
110
|
+
once(eventName, handler) {
|
|
111
|
+
return once(eventName, handler, target)
|
|
112
|
+
},
|
|
113
|
+
emitLocal(eventName, payload) {
|
|
114
|
+
emitLocal(eventName, payload, target)
|
|
115
|
+
},
|
|
116
|
+
emit(eventName, payload = null) {
|
|
117
|
+
return transport.invoke("event.emit", {
|
|
118
|
+
event: eventName,
|
|
119
|
+
payload
|
|
120
|
+
})
|
|
121
|
+
}
|
|
122
|
+
})
|
|
123
|
+
}
|