Skip to content

Commit ae35b47

Browse files
committed
[scramjet/core] fix optional postmessage call
1 parent cb2e01c commit ae35b47

File tree

5 files changed

+22
-9
lines changed

5 files changed

+22
-9
lines changed

packages/scramjet/packages/controller/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ export class Controller {
117117

118118
let payload = "";
119119
payload +=
120-
"console.warn('WTF'); if ('document' in self && document.currentScript) { document.currentScript.remove(); }\n";
120+
"if ('document' in self && document.currentScript) { document.currentScript.remove(); }\n";
121121
payload += `self.WASM = '${b64}';`;
122122
wasmPayload = payload;
123123
}

packages/scramjet/packages/core/rewriter/js/src/changes.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,12 @@ pub enum JsChangeType<'alloc: 'data, 'data> {
5252
},
5353

5454
/// insert `$wrapPostMessage(`
55-
WrapPostMessage,
55+
WrapPostMessageLeft,
56+
57+
/// insert `)`, or `)?.` if optional
58+
WrapPostMessageRight {
59+
optional: bool,
60+
},
5661
/// insert `$scramerr(ident);`
5762
ScramErrFn {
5863
ident: Atom<'data>,
@@ -236,7 +241,14 @@ impl<'alloc: 'data, 'data> Transform<'data> for JsChange<'alloc, 'data> {
236241
let steps: &'static str = Box::leak(steps.into_boxed_str());
237242
LL::insert(transforms![",", &cfg.tempunusedid, "=(", &steps, "0)"])
238243
}
239-
Ty::WrapPostMessage => LL::insert(transforms![&cfg.wrappostmessagefn, "("]),
244+
Ty::WrapPostMessageLeft => LL::insert(transforms![&cfg.wrappostmessagefn, "("]),
245+
Ty::WrapPostMessageRight { optional } => LL::replace(
246+
if optional {
247+
transforms![")?."]
248+
} else {
249+
transforms![")"]
250+
}
251+
),
240252
Ty::ScramErrFn { ident } => LL::insert(transforms!["$scramerr(", ident, ");"]),
241253
Ty::ScramitizeFn => LL::insert(transforms![" $scramitize("]),
242254
Ty::EvalRewriteFn => LL::insert(transforms![&cfg.rewritefn, "("]),

packages/scramjet/packages/core/rewriter/js/src/rewrite.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ pub(crate) enum RewriteType<'alloc: 'data, 'data> {
2222
/// `wrapPostMessage(object)`
2323
WrapPostMessage {
2424
inner: Span,
25+
optional: bool,
2526
},
2627

2728
/// `(cfg.importfn("cfg.base"))`
@@ -232,12 +233,10 @@ impl<'alloc: 'data, 'data> RewriteType<'alloc, 'data> {
232233
location_assigned
233234
}
234235
)],
235-
Self::WrapPostMessage { inner } => smallvec![change!(span!(start), WrapPostMessage), change!(
236+
Self::WrapPostMessage { inner, optional } => smallvec![change!(span!(start), WrapPostMessageLeft), change!(
236237
inner,
237-
ClosingParen {
238-
semi: false,
239-
replace: true
240-
}
238+
// ClosingParen { semi: false, replace: true }
239+
WrapPostMessageRight { optional }
241240
)],
242241
Self::SetRealmFn => smallvec![change!(span, SetRealmFn)],
243242
Self::ImportFn => smallvec![change!(span, ImportFn)],

packages/scramjet/packages/core/rewriter/js/src/visitor.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,8 +485,9 @@ where
485485

486486
self.jschanges.add(rewrite!(s.span, WrapPostMessage {
487487
inner: Span::new(s.property.span.start - offset, s.property.span.end),
488+
optional: s.optional,
488489
}));
489-
490+
490491
walk::walk_expression(self, &s.object);
491492
return; // unwise to walk the rest of the tree
492493
}

packages/scramjet/packages/core/src/client/shared/postmessage.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ export default function (client: ScramjetClient, self: Self) {
8484
});
8585
Object.defineProperty(self, client.config.globals.wrappostmessagefn, {
8686
value: function (obj: any) {
87+
if (!obj || typeof obj.postMessage !== "function") return obj;
8788
return obj.postMessage.bind(obj);
8889
},
8990
configurable: false,

0 commit comments

Comments
 (0)