mirror of
https://github.com/MercuryWorkshop/scramjet.git
synced 2025-05-12 22:10:01 -04:00
add more flags
This commit is contained in:
parent
7adf76d37f
commit
4d1b7ef1b8
10 changed files with 85 additions and 57 deletions
21
rewriter/Cargo.lock
generated
21
rewriter/Cargo.lock
generated
|
@ -1360,19 +1360,20 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen"
|
name = "wasm-bindgen"
|
||||||
version = "0.2.92"
|
version = "0.2.93"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
|
checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
|
"once_cell",
|
||||||
"wasm-bindgen-macro",
|
"wasm-bindgen-macro",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-backend"
|
name = "wasm-bindgen-backend"
|
||||||
version = "0.2.92"
|
version = "0.2.93"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
|
checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bumpalo",
|
"bumpalo",
|
||||||
"log",
|
"log",
|
||||||
|
@ -1385,9 +1386,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-macro"
|
name = "wasm-bindgen-macro"
|
||||||
version = "0.2.92"
|
version = "0.2.93"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
|
checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"quote",
|
"quote",
|
||||||
"wasm-bindgen-macro-support",
|
"wasm-bindgen-macro-support",
|
||||||
|
@ -1395,9 +1396,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-macro-support"
|
name = "wasm-bindgen-macro-support"
|
||||||
version = "0.2.92"
|
version = "0.2.93"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
|
checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -1408,9 +1409,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-shared"
|
name = "wasm-bindgen-shared"
|
||||||
version = "0.2.92"
|
version = "0.2.93"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
|
checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "web-sys"
|
name = "web-sys"
|
||||||
|
|
|
@ -37,6 +37,10 @@ fn get_obj(obj: &JsValue, k: &str) -> JsValue {
|
||||||
Reflect::get(obj, &k.into()).unwrap()
|
Reflect::get(obj, &k.into()).unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_bool(obj: &JsValue, k: &str) -> bool {
|
||||||
|
Reflect::get(obj, &k.into()).unwrap().as_bool().unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
fn get_str(obj: &JsValue, k: &str) -> String {
|
fn get_str(obj: &JsValue, k: &str) -> String {
|
||||||
Reflect::get(obj, &k.into()).unwrap().as_string().unwrap()
|
Reflect::get(obj, &k.into()).unwrap().as_string().unwrap()
|
||||||
}
|
}
|
||||||
|
@ -44,6 +48,7 @@ fn get_str(obj: &JsValue, k: &str) -> String {
|
||||||
fn get_config(scramjet: &Object) -> Config {
|
fn get_config(scramjet: &Object) -> Config {
|
||||||
let codec = &get_obj(scramjet, "codec");
|
let codec = &get_obj(scramjet, "codec");
|
||||||
let config = &get_obj(scramjet, "config");
|
let config = &get_obj(scramjet, "config");
|
||||||
|
let flags = &get_obj(config, "flags");
|
||||||
|
|
||||||
Config {
|
Config {
|
||||||
prefix: get_str(config, "prefix"),
|
prefix: get_str(config, "prefix"),
|
||||||
|
@ -53,6 +58,8 @@ fn get_config(scramjet: &Object) -> Config {
|
||||||
rewritefn: get_str(config, "rewritefn"),
|
rewritefn: get_str(config, "rewritefn"),
|
||||||
metafn: get_str(config, "metafn"),
|
metafn: get_str(config, "metafn"),
|
||||||
setrealmfn: get_str(config, "setrealmfn"),
|
setrealmfn: get_str(config, "setrealmfn"),
|
||||||
|
|
||||||
|
capture_errors: get_bool(flags, "captureErrors"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -120,6 +120,7 @@ fn dorewrite(source_text: &str) -> String {
|
||||||
rewritefn: "$rewrite".to_string(),
|
rewritefn: "$rewrite".to_string(),
|
||||||
metafn: "$meta".to_string(),
|
metafn: "$meta".to_string(),
|
||||||
setrealmfn: "$setrealm".to_string(),
|
setrealmfn: "$setrealm".to_string(),
|
||||||
|
capture_errors: true,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.as_slice(),
|
.as_slice(),
|
||||||
|
|
|
@ -43,6 +43,8 @@ pub struct Config {
|
||||||
pub setrealmfn: String,
|
pub setrealmfn: String,
|
||||||
pub metafn: String,
|
pub metafn: String,
|
||||||
pub encode: EncodeFn,
|
pub encode: EncodeFn,
|
||||||
|
|
||||||
|
pub capture_errors: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Rewriter {
|
impl Rewriter {
|
||||||
|
@ -206,6 +208,7 @@ impl<'a> Visit<'a> for Rewriter {
|
||||||
fn visit_try_statement(&mut self, it: &oxc_ast::ast::TryStatement<'a>) {
|
fn visit_try_statement(&mut self, it: &oxc_ast::ast::TryStatement<'a>) {
|
||||||
// for debugging we need to know what the error was
|
// for debugging we need to know what the error was
|
||||||
|
|
||||||
|
if self.config.capture_errors {
|
||||||
if let Some(h) = &it.handler {
|
if let Some(h) = &it.handler {
|
||||||
if let Some(name) = &h.param {
|
if let Some(name) = &h.param {
|
||||||
if let Some(name) = name.pattern.get_identifier() {
|
if let Some(name) = name.pattern.get_identifier() {
|
||||||
|
@ -216,6 +219,7 @@ impl<'a> Visit<'a> for Rewriter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
walk::walk_try_statement(self, it);
|
walk::walk_try_statement(self, it);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -133,7 +133,7 @@ export class ScramjetClient {
|
||||||
for (const module of modules) {
|
for (const module of modules) {
|
||||||
if (!module.enabled || module.enabled())
|
if (!module.enabled || module.enabled())
|
||||||
module.default(this, this.global);
|
module.default(this, this.global);
|
||||||
else module.disabled(this, this.global);
|
else if (module.disabled) module.disabled(this, this.global);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
44
src/client/shared/err.ts
Normal file
44
src/client/shared/err.ts
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
import { config } from "../../shared";
|
||||||
|
import { ScramjetClient } from "../client";
|
||||||
|
|
||||||
|
export const enabled = () => config.flags.captureErrors;
|
||||||
|
|
||||||
|
export default function (client: ScramjetClient, self: typeof globalThis) {
|
||||||
|
function argdbg(arg) {
|
||||||
|
switch (typeof arg) {
|
||||||
|
case "string":
|
||||||
|
if (arg.includes("scramjet") && !arg.includes("\n")) debugger;
|
||||||
|
break;
|
||||||
|
case "object":
|
||||||
|
if (arg instanceof Location) debugger;
|
||||||
|
if (
|
||||||
|
arg &&
|
||||||
|
arg[Symbol.iterator] &&
|
||||||
|
typeof arg[Symbol.iterator] === "function"
|
||||||
|
)
|
||||||
|
for (let ar of arg) argdbg(ar);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self.$scramerr = function scramerr(e) {
|
||||||
|
console.warn("CAUGHT ERROR", e);
|
||||||
|
};
|
||||||
|
|
||||||
|
self.$scramdbg = function scramdbg(args, t) {
|
||||||
|
if (args && typeof args === "object" && args.length > 0) argdbg(args);
|
||||||
|
argdbg(t);
|
||||||
|
return t;
|
||||||
|
};
|
||||||
|
|
||||||
|
client.Proxy("Promise.prototype.catch", {
|
||||||
|
apply(ctx) {
|
||||||
|
ctx.args[0] = new Proxy(ctx.args[0], {
|
||||||
|
apply(target, thisArg, argArray) {
|
||||||
|
// console.warn("CAUGHT PROMISE REJECTION", argArray);
|
||||||
|
Reflect.apply(target, thisArg, argArray);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
|
@ -76,41 +76,4 @@ export default function (client: ScramjetClient, self: typeof globalThis) {
|
||||||
writable: false,
|
writable: false,
|
||||||
configurable: false,
|
configurable: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
function argdbg(arg) {
|
|
||||||
switch (typeof arg) {
|
|
||||||
case "string":
|
|
||||||
if (arg.includes("scramjet") && !arg.includes("\n")) debugger;
|
|
||||||
break;
|
|
||||||
case "object":
|
|
||||||
if (arg instanceof Location) debugger;
|
|
||||||
if (
|
|
||||||
arg &&
|
|
||||||
arg[Symbol.iterator] &&
|
|
||||||
typeof arg[Symbol.iterator] === "function"
|
|
||||||
)
|
|
||||||
for (let ar of arg) argdbg(ar);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
self.$scramerr = function scramerr(e) {
|
|
||||||
console.warn("CAUGHT ERROR", e);
|
|
||||||
};
|
|
||||||
|
|
||||||
self.$scramdbg = function scramdbg(args, t) {
|
|
||||||
if (args && typeof args === "object" && args.length > 0) argdbg(args);
|
|
||||||
argdbg(t);
|
|
||||||
return t;
|
|
||||||
};
|
|
||||||
|
|
||||||
// client.Proxy("Promise.prototype.catch", {
|
|
||||||
// apply(ctx) {
|
|
||||||
// ctx.args[0] = new Proxy(ctx.args[0], {
|
|
||||||
// apply(target, thisArg, argArray) {
|
|
||||||
// // console.warn("CAUGHT PROMISE REJECTION", argArray);
|
|
||||||
// Reflect.apply(target, thisArg, argArray);
|
|
||||||
// },
|
|
||||||
// });
|
|
||||||
// },
|
|
||||||
// });
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ export class ScramjetController {
|
||||||
codec: Codec;
|
codec: Codec;
|
||||||
|
|
||||||
constructor(config: ScramjetConfig) {
|
constructor(config: ScramjetConfig) {
|
||||||
const defaultConfig = {
|
const defaultConfig: Partial<ScramjetConfig> = {
|
||||||
prefix: "/scramjet/",
|
prefix: "/scramjet/",
|
||||||
codec: "plain",
|
codec: "plain",
|
||||||
wrapfn: "$scramjet$wrap",
|
wrapfn: "$scramjet$wrap",
|
||||||
|
@ -27,6 +27,8 @@ export class ScramjetController {
|
||||||
codecs: "/scramjet.codecs.js",
|
codecs: "/scramjet.codecs.js",
|
||||||
flags: {
|
flags: {
|
||||||
serviceworkers: true,
|
serviceworkers: true,
|
||||||
|
naiiveRewriter: false,
|
||||||
|
captureErrors: false,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,11 @@ export function rewriteJs(js: string | ArrayBuffer, origin?: URL) {
|
||||||
if ("window" in globalThis)
|
if ("window" in globalThis)
|
||||||
origin = origin ?? new URL(decodeUrl(location.href));
|
origin = origin ?? new URL(decodeUrl(location.href));
|
||||||
|
|
||||||
|
if (self.$scramjet.config.flags.naiiveRewriter) {
|
||||||
|
const text = typeof js === "string" ? js : new TextDecoder().decode(js);
|
||||||
|
return rewriteJsNaiive(text, origin);
|
||||||
|
}
|
||||||
|
|
||||||
const before = performance.now();
|
const before = performance.now();
|
||||||
if (typeof js === "string") {
|
if (typeof js === "string") {
|
||||||
js = new TextDecoder().decode(
|
js = new TextDecoder().decode(
|
||||||
|
|
3
src/types.d.ts
vendored
3
src/types.d.ts
vendored
|
@ -21,7 +21,8 @@ import { ScramjetFrame } from "./controller/frame";
|
||||||
|
|
||||||
type ScramjetFlags = {
|
type ScramjetFlags = {
|
||||||
serviceworkers: boolean;
|
serviceworkers: boolean;
|
||||||
naiiverewriter: boolean;
|
naiiveRewriter: boolean;
|
||||||
|
captureErrors: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
interface ScramjetConfig {
|
interface ScramjetConfig {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue