mirror of
https://github.com/MercuryWorkshop/scramjet.git
synced 2025-05-14 06:50:01 -04:00
scramitizer
This commit is contained in:
parent
c412959a5f
commit
118610cc99
6 changed files with 41 additions and 2 deletions
|
@ -63,6 +63,7 @@ fn get_config(scramjet: &Object) -> Config {
|
||||||
|
|
||||||
do_sourcemaps: get_bool(flags, "sourcemaps"),
|
do_sourcemaps: get_bool(flags, "sourcemaps"),
|
||||||
capture_errors: get_bool(flags, "captureErrors"),
|
capture_errors: get_bool(flags, "captureErrors"),
|
||||||
|
scramitize: get_bool(flags, "scramitize"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -123,6 +123,7 @@ fn dorewrite(source_text: &str) -> String {
|
||||||
pushsourcemapfn: "$pushsourcemap".to_string(),
|
pushsourcemapfn: "$pushsourcemap".to_string(),
|
||||||
capture_errors: true,
|
capture_errors: true,
|
||||||
do_sourcemaps: true,
|
do_sourcemaps: true,
|
||||||
|
scramitize: false,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.as_slice(),
|
.as_slice(),
|
||||||
|
|
|
@ -51,6 +51,7 @@ pub struct Config {
|
||||||
|
|
||||||
pub encode: EncodeFn,
|
pub encode: EncodeFn,
|
||||||
pub capture_errors: bool,
|
pub capture_errors: bool,
|
||||||
|
pub scramitize: bool,
|
||||||
pub do_sourcemaps: bool,
|
pub do_sourcemaps: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,6 +128,21 @@ impl<'a> Visit<'a> for Rewriter {
|
||||||
|
|
||||||
return; // unwise to walk the rest of the tree
|
return; // unwise to walk the rest of the tree
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if self.config.scramitize
|
||||||
|
&& !matches!(s.object, Expression::MetaProperty(_))
|
||||||
|
&& !matches!(s.object, Expression::Super(_))
|
||||||
|
{
|
||||||
|
let span = expression_span(&s.object);
|
||||||
|
self.jschanges.push(JsChange::GenericChange {
|
||||||
|
span: Span::new(span.start, span.start),
|
||||||
|
text: format!(" $scramitize("),
|
||||||
|
});
|
||||||
|
self.jschanges.push(JsChange::GenericChange {
|
||||||
|
span: Span::new(span.end, span.end),
|
||||||
|
text: format!(")"),
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
// TODO
|
// TODO
|
||||||
|
@ -135,6 +151,7 @@ impl<'a> Visit<'a> for Rewriter {
|
||||||
// and it would slow down js execution a lot
|
// and it would slow down js execution a lot
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
walk::walk_member_expression(self, it);
|
walk::walk_member_expression(self, it);
|
||||||
}
|
}
|
||||||
fn visit_this_expression(&mut self, it: &oxc_ast::ast::ThisExpression) {
|
fn visit_this_expression(&mut self, it: &oxc_ast::ast::ThisExpression) {
|
||||||
|
@ -173,6 +190,16 @@ impl<'a> Visit<'a> for Rewriter {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if self.config.scramitize {
|
||||||
|
self.jschanges.push(JsChange::GenericChange {
|
||||||
|
span: Span::new(it.span.start, it.span.start),
|
||||||
|
text: format!(" $scramitize("),
|
||||||
|
});
|
||||||
|
self.jschanges.push(JsChange::GenericChange {
|
||||||
|
span: Span::new(it.span.end, it.span.end),
|
||||||
|
text: format!(")"),
|
||||||
|
});
|
||||||
|
}
|
||||||
walk::walk_call_expression(self, it);
|
walk::walk_call_expression(self, it);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -462,7 +489,7 @@ pub fn rewrite(js: &str, url: Url, config: Config) -> Vec<u8> {
|
||||||
rhsspan: _,
|
rhsspan: _,
|
||||||
op: _,
|
op: _,
|
||||||
} => entirespan.start,
|
} => entirespan.start,
|
||||||
JsChange::SourceTag { tagstart,tagend } => *tagstart,
|
JsChange::SourceTag { tagstart, tagend } => *tagstart,
|
||||||
};
|
};
|
||||||
a.cmp(&b)
|
a.cmp(&b)
|
||||||
});
|
});
|
||||||
|
|
|
@ -51,6 +51,7 @@ export function createWrapFn(client: ScramjetClient, self: typeof globalThis) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const order = 4;
|
||||||
export default function (client: ScramjetClient, self: typeof globalThis) {
|
export default function (client: ScramjetClient, self: typeof globalThis) {
|
||||||
// the main magic of the proxy. all attempts to access any "banned objects" will be redirected here, and instead served a proxy object
|
// the main magic of the proxy. all attempts to access any "banned objects" will be redirected here, and instead served a proxy object
|
||||||
// this contrasts from how other proxies will leave the root object alone and instead attempt to catch every member access
|
// this contrasts from how other proxies will leave the root object alone and instead attempt to catch every member access
|
||||||
|
@ -61,6 +62,13 @@ export default function (client: ScramjetClient, self: typeof globalThis) {
|
||||||
configurable: false,
|
configurable: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
self.$scramitize = function (v) {
|
||||||
|
if (typeof v === "string" && v.includes("scramjet")) {
|
||||||
|
debugger;
|
||||||
|
}
|
||||||
|
return v;
|
||||||
|
};
|
||||||
|
|
||||||
// location = "..." can't be rewritten as wrapfn(location) = ..., so instead it will actually be rewritten as
|
// location = "..." can't be rewritten as wrapfn(location) = ..., so instead it will actually be rewritten as
|
||||||
// ((t)=>$scramjet$tryset(location,"+=",t)||location+=t)(...);
|
// ((t)=>$scramjet$tryset(location,"+=",t)||location+=t)(...);
|
||||||
// it has to be a discrete function because there's always the possibility that "location" is a local variable
|
// it has to be a discrete function because there's always the possibility that "location" is a local variable
|
||||||
|
|
|
@ -32,7 +32,8 @@ export class ScramjetController {
|
||||||
naiiveRewriter: false,
|
naiiveRewriter: false,
|
||||||
captureErrors: true,
|
captureErrors: true,
|
||||||
syncxhr: false,
|
syncxhr: false,
|
||||||
cleanerrors: false,
|
cleanerrors: true,
|
||||||
|
scramitize: false,
|
||||||
sourcemaps: true,
|
sourcemaps: true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
1
src/types.d.ts
vendored
1
src/types.d.ts
vendored
|
@ -24,6 +24,7 @@ type ScramjetFlags = {
|
||||||
naiiveRewriter: boolean;
|
naiiveRewriter: boolean;
|
||||||
captureErrors: boolean;
|
captureErrors: boolean;
|
||||||
cleanerrors: boolean;
|
cleanerrors: boolean;
|
||||||
|
scramitize: boolean;
|
||||||
sourcemaps: boolean;
|
sourcemaps: boolean;
|
||||||
syncxhr: boolean;
|
syncxhr: boolean;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue