@adobe/uix-core 0.7.0 → 0.7.1-nightly.20230115
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/dist/constants.d.ts +2 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/index.js +136 -47
- package/dist/index.js.map +1 -1
- package/dist/object-simulator.d.ts +1 -1
- package/dist/object-simulator.d.ts.map +1 -1
- package/dist/object-walker.d.ts +2 -1
- package/dist/object-walker.d.ts.map +1 -1
- package/dist/tunnel/tunnel-messenger.d.ts +25 -0
- package/dist/tunnel/tunnel-messenger.d.ts.map +1 -0
- package/dist/tunnel/tunnel-messenger.test.d.ts +2 -0
- package/dist/tunnel/tunnel-messenger.test.d.ts.map +1 -0
- package/dist/tunnel/tunnel.d.ts +4 -0
- package/dist/tunnel/tunnel.d.ts.map +1 -1
- package/dist/value-assertions.d.ts +3 -0
- package/dist/value-assertions.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/constants.ts +5 -1
- package/src/object-simulator.test.ts +193 -0
- package/src/object-simulator.ts +12 -3
- package/src/object-walker.ts +45 -5
- package/src/tunnel/tunnel-messenger.test.ts +183 -0
- package/src/tunnel/tunnel-messenger.ts +99 -0
- package/src/tunnel/tunnel.test.ts +20 -5
- package/src/tunnel/tunnel.ts +22 -11
- package/src/value-assertions.ts +10 -0
- package/dist/tunnel/tunnel-message.d.ts +0 -19
- package/dist/tunnel/tunnel-message.d.ts.map +0 -1
- package/src/tunnel/tunnel-message.ts +0 -75
package/src/tunnel/tunnel.ts
CHANGED
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import EventEmitter from "eventemitter3";
|
|
2
|
-
import { isIframe
|
|
3
|
-
import {
|
|
4
|
-
isHandshakeAccepting,
|
|
5
|
-
isHandshakeOffer,
|
|
6
|
-
makeAccepted,
|
|
7
|
-
makeOffered,
|
|
8
|
-
} from "./tunnel-message";
|
|
2
|
+
import { isIframe } from "../value-assertions";
|
|
3
|
+
import { TunnelMessenger } from "./tunnel-messenger";
|
|
9
4
|
import { unwrap } from "../message-wrapper";
|
|
10
5
|
|
|
11
6
|
/**
|
|
@@ -46,6 +41,10 @@ export interface TunnelConfig {
|
|
|
46
41
|
* @defaultValue 4000
|
|
47
42
|
*/
|
|
48
43
|
timeout: number;
|
|
44
|
+
/**
|
|
45
|
+
* Logger instance to use for debugging tunnel connection.
|
|
46
|
+
*/
|
|
47
|
+
logger: Console;
|
|
49
48
|
|
|
50
49
|
// #endregion Properties
|
|
51
50
|
}
|
|
@@ -120,17 +119,23 @@ export class Tunnel extends EventEmitter {
|
|
|
120
119
|
)}`
|
|
121
120
|
);
|
|
122
121
|
}
|
|
122
|
+
|
|
123
123
|
const source = target.contentWindow;
|
|
124
124
|
const config = Tunnel._normalizeConfig(options);
|
|
125
125
|
const tunnel = new Tunnel(config);
|
|
126
|
+
const messenger = new TunnelMessenger({
|
|
127
|
+
myOrigin: window.location.origin,
|
|
128
|
+
targetOrigin: options.targetOrigin,
|
|
129
|
+
logger: options.logger || console,
|
|
130
|
+
});
|
|
126
131
|
let frameStatusCheck: number;
|
|
127
132
|
let timeout: number;
|
|
128
133
|
const offerListener = (event: MessageEvent) => {
|
|
129
134
|
if (
|
|
130
135
|
isFromOrigin(event, source, config.targetOrigin) &&
|
|
131
|
-
isHandshakeOffer(event.data)
|
|
136
|
+
messenger.isHandshakeOffer(event.data)
|
|
132
137
|
) {
|
|
133
|
-
const accepted = makeAccepted(unwrap(event.data).offers);
|
|
138
|
+
const accepted = messenger.makeAccepted(unwrap(event.data).offers);
|
|
134
139
|
const channel = new MessageChannel();
|
|
135
140
|
source.postMessage(accepted, config.targetOrigin, [channel.port1]);
|
|
136
141
|
tunnel.connect(channel.port2);
|
|
@@ -187,11 +192,16 @@ export class Tunnel extends EventEmitter {
|
|
|
187
192
|
const key = makeKey();
|
|
188
193
|
const config = Tunnel._normalizeConfig(opts);
|
|
189
194
|
const tunnel = new Tunnel(config);
|
|
195
|
+
const messenger = new TunnelMessenger({
|
|
196
|
+
myOrigin: window.location.origin,
|
|
197
|
+
targetOrigin: config.targetOrigin,
|
|
198
|
+
logger: config.logger,
|
|
199
|
+
});
|
|
190
200
|
const acceptListener = (event: MessageEvent) => {
|
|
191
201
|
if (
|
|
192
202
|
!timedOut &&
|
|
193
203
|
isFromOrigin(event, source, config.targetOrigin) &&
|
|
194
|
-
isHandshakeAccepting(event.data, key)
|
|
204
|
+
messenger.isHandshakeAccepting(event.data, key)
|
|
195
205
|
) {
|
|
196
206
|
cleanup();
|
|
197
207
|
if (!event.ports || !event.ports.length) {
|
|
@@ -225,7 +235,7 @@ export class Tunnel extends EventEmitter {
|
|
|
225
235
|
tunnel.on("connected", cleanup);
|
|
226
236
|
|
|
227
237
|
const sendOffer = () =>
|
|
228
|
-
source.postMessage(makeOffered(key), config.targetOrigin);
|
|
238
|
+
source.postMessage(messenger.makeOffered(key), config.targetOrigin);
|
|
229
239
|
retrying = window.setInterval(sendOffer, RETRY_MS);
|
|
230
240
|
sendOffer();
|
|
231
241
|
|
|
@@ -279,6 +289,7 @@ export class Tunnel extends EventEmitter {
|
|
|
279
289
|
let errorMessage = "";
|
|
280
290
|
const config: Partial<TunnelConfig> = {
|
|
281
291
|
timeout: 4000,
|
|
292
|
+
logger: console,
|
|
282
293
|
...options,
|
|
283
294
|
};
|
|
284
295
|
|
package/src/value-assertions.ts
CHANGED
|
@@ -46,3 +46,13 @@ export function isIframe(value: unknown): value is HTMLIFrameElement {
|
|
|
46
46
|
const { nodeName } = value as HTMLIFrameElement;
|
|
47
47
|
return typeof nodeName === "string" && nodeName.toLowerCase() === "iframe";
|
|
48
48
|
}
|
|
49
|
+
|
|
50
|
+
export function isObjectWithPrototype<T>(
|
|
51
|
+
value: unknown
|
|
52
|
+
): value is T & { [key: string | symbol]: unknown } {
|
|
53
|
+
if (!value || typeof value !== "object") {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
const proto = Reflect.getPrototypeOf(value);
|
|
57
|
+
return proto !== Object.prototype;
|
|
58
|
+
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { WrappedMessage } from "../message-wrapper";
|
|
2
|
-
import { HandshakeAcceptedTicket, HandshakeOfferedTicket } from "../tickets";
|
|
3
|
-
declare type HandshakeAccepted = WrappedMessage<HandshakeAcceptedTicket>;
|
|
4
|
-
declare type HandshakeOffered = WrappedMessage<HandshakeOfferedTicket>;
|
|
5
|
-
declare type HandshakeMessage = HandshakeAccepted | HandshakeOffered;
|
|
6
|
-
export declare function resetWarnings(): void;
|
|
7
|
-
export declare function makeAccepted(id: string): HandshakeAccepted;
|
|
8
|
-
export declare function makeOffered(id: string): HandshakeOffered;
|
|
9
|
-
export declare function isHandshakeAccepting(message: unknown, id: string): message is HandshakeAccepted;
|
|
10
|
-
export declare function isHandshakeOffer(message: unknown): message is HandshakeOffered;
|
|
11
|
-
export declare function isHandshake(message: unknown): message is HandshakeMessage;
|
|
12
|
-
declare const _default: {
|
|
13
|
-
makeOffered: typeof makeOffered;
|
|
14
|
-
makeAccepted: typeof makeAccepted;
|
|
15
|
-
isHandshake: typeof isHandshake;
|
|
16
|
-
resetWarnings: typeof resetWarnings;
|
|
17
|
-
};
|
|
18
|
-
export default _default;
|
|
19
|
-
//# sourceMappingURL=tunnel-message.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel-message.d.ts","sourceRoot":"","sources":["../../src/tunnel/tunnel-message.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAA2B,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAG7E,aAAK,iBAAiB,GAAG,cAAc,CAAC,uBAAuB,CAAC,CAAC;AACjE,aAAK,gBAAgB,GAAG,cAAc,CAAC,sBAAsB,CAAC,CAAC;AAC/D,aAAK,gBAAgB,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;AAI7D,wBAAgB,aAAa,SAE5B;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,CAK1D;AACD,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,CAKxD;AACD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,MAAM,GACT,OAAO,IAAI,iBAAiB,CAI9B;AACD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,GACf,OAAO,IAAI,gBAAgB,CAK7B;AACD,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,gBAAgB,CAuBzE;;;;;;;AAED,wBAKE"}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { NS_ROOT, VERSION } from "../constants";
|
|
2
|
-
import { isPlainObject } from "../value-assertions";
|
|
3
|
-
import { WrappedMessage, isWrapped, wrap, unwrap } from "../message-wrapper";
|
|
4
|
-
import { HandshakeAcceptedTicket, HandshakeOfferedTicket } from "../tickets";
|
|
5
|
-
|
|
6
|
-
type Handshake = HandshakeAcceptedTicket | HandshakeOfferedTicket;
|
|
7
|
-
type HandshakeAccepted = WrappedMessage<HandshakeAcceptedTicket>;
|
|
8
|
-
type HandshakeOffered = WrappedMessage<HandshakeOfferedTicket>;
|
|
9
|
-
type HandshakeMessage = HandshakeAccepted | HandshakeOffered;
|
|
10
|
-
|
|
11
|
-
const VERSION_WARNINGS = new Set();
|
|
12
|
-
|
|
13
|
-
export function resetWarnings() {
|
|
14
|
-
VERSION_WARNINGS.clear();
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export function makeAccepted(id: string): HandshakeAccepted {
|
|
18
|
-
return wrap({
|
|
19
|
-
accepts: id,
|
|
20
|
-
version: VERSION,
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
export function makeOffered(id: string): HandshakeOffered {
|
|
24
|
-
return wrap({
|
|
25
|
-
offers: id,
|
|
26
|
-
version: VERSION,
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
export function isHandshakeAccepting(
|
|
30
|
-
message: unknown,
|
|
31
|
-
id: string
|
|
32
|
-
): message is HandshakeAccepted {
|
|
33
|
-
return (
|
|
34
|
-
isHandshake(message) && unwrap(message as HandshakeAccepted).accepts === id
|
|
35
|
-
);
|
|
36
|
-
}
|
|
37
|
-
export function isHandshakeOffer(
|
|
38
|
-
message: unknown
|
|
39
|
-
): message is HandshakeOffered {
|
|
40
|
-
return (
|
|
41
|
-
isHandshake(message) &&
|
|
42
|
-
typeof unwrap(message as HandshakeOffered).offers === "string"
|
|
43
|
-
);
|
|
44
|
-
}
|
|
45
|
-
export function isHandshake(message: unknown): message is HandshakeMessage {
|
|
46
|
-
if (!isWrapped(message)) {
|
|
47
|
-
return false;
|
|
48
|
-
}
|
|
49
|
-
const tunnelData: Handshake = unwrap<Handshake>(message as HandshakeMessage);
|
|
50
|
-
if (
|
|
51
|
-
!isPlainObject(tunnelData) ||
|
|
52
|
-
typeof tunnelData.version !== "string" ||
|
|
53
|
-
!(Reflect.has(tunnelData, "accepts") || Reflect.has(tunnelData, "offers"))
|
|
54
|
-
) {
|
|
55
|
-
console.error(
|
|
56
|
-
`malformed tunnel message, message.${NS_ROOT} must be an object with a "version" string and an either an "accepts" or "offers" property containing an ID string.`
|
|
57
|
-
);
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
const { version } = tunnelData;
|
|
61
|
-
if (version !== VERSION && !VERSION_WARNINGS.has(version)) {
|
|
62
|
-
VERSION_WARNINGS.add(version);
|
|
63
|
-
console.warn(
|
|
64
|
-
`Version mismatch: current Tunnel is ${VERSION} and remote Tunnel is ${version}. May cause problems.`
|
|
65
|
-
);
|
|
66
|
-
}
|
|
67
|
-
return true;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export default {
|
|
71
|
-
makeOffered,
|
|
72
|
-
makeAccepted,
|
|
73
|
-
isHandshake,
|
|
74
|
-
resetWarnings,
|
|
75
|
-
};
|