Skip to content

Commit 7ffb641

Browse files
committed
get unified bundle working, update demo ui to use new paths
1 parent 17482c8 commit 7ffb641

File tree

11 files changed

+71
-52
lines changed

11 files changed

+71
-52
lines changed

lib/index.d.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
11
declare const scramjetPath: string;
22

33
import * as controller from "../dist/types/controller/index.ts";
4+
import * as worker from "../dist/types/worker/index.ts";
45
import * as types from "../dist/types/types.ts";
56
import * as frame from "../dist/types/controller/frame.ts";
67

78
declare global {
8-
const ScramjetController: typeof controller.ScramjetController;
9-
const ScramjetFrame: typeof frame.ScramjetFrame;
9+
function $scramjetLoadController(): typeof controller;
10+
function $scramjetLoadWorker(): typeof worker;
11+
function $scramjetLoadClient(config: ScramjetConfig);
1012
type ScramjetController = controller.ScramjetController;
1113
type ScramjetFrame = frame.ScramjetFrame;
1214

1315
type ScramjetConfig = types.ScramjetConfig;
1416
type ScramjetInitConfig = types.ScramjetInitConfig;
17+
var $scramjetVersion: {
18+
build: string;
19+
version: string;
20+
};
1521
}
1622
export { scramjetPath };

src/client/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// entrypoint for scramjet.client.js
22

3-
import { loadCodecs } from "../shared/index";
3+
import { loadCodecs, setConfig } from "../shared/index";
44
import { SCRAMJETCLIENT } from "../symbols";
55
import { ScramjetClient } from "./client";
66
import { ScramjetContextEvent, UrlChangeEvent } from "./events";
@@ -21,7 +21,8 @@ function createFrameId() {
2121
.join("")}`;
2222
}
2323

24-
export function clientInitHook() {
24+
export function clientInitHook(config: ScramjetConfig) {
25+
setConfig(config);
2526
dbg.log("initializing scramjet client");
2627
// if it already exists, that means the handlers have probably already been setup by the parent document
2728
if (!(SCRAMJETCLIENT in <Partial<typeof self>>self)) {

src/client/shared/sourcemaps.ts

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { flagEnabled } from "../../shared";
1+
import { config, flagEnabled } from "../../shared";
22
import { SCRAMJETCLIENT, SCRAMJETCLIENTNAME } from "../../symbols";
33
import { ProxyCtx, ScramjetClient } from "../client";
44

@@ -185,20 +185,16 @@ export const enabled = (client: ScramjetClient) =>
185185

186186
export default function (client: ScramjetClient, self: Self) {
187187
// every script will push a sourcemap
188-
Object.defineProperty(
189-
self,
190-
globalThis.$scramjet.config.globals.pushsourcemapfn,
191-
{
192-
value: (buf: Array<number>, tag: string) => {
193-
const before = performance.now();
194-
registerRewrites(buf, tag);
195-
dbg.time(client.meta, before, `scramtag parse for ${tag}`);
196-
},
197-
enumerable: false,
198-
writable: false,
199-
configurable: false,
200-
}
201-
);
188+
Object.defineProperty(self, config.globals.pushsourcemapfn, {
189+
value: (buf: Array<number>, tag: string) => {
190+
const before = performance.now();
191+
registerRewrites(buf, tag);
192+
dbg.time(client.meta, before, `scramtag parse for ${tag}`);
193+
},
194+
enumerable: false,
195+
writable: false,
196+
configurable: false,
197+
});
202198

203199
// when we rewrite javascript it will make function.toString leak internals
204200
// this can lead to double rewrites which is bad

src/entry.ts

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
11
/// <reference types="@rspack/core/module" />
2+
import "../lib/index.d.ts";
23

3-
export function $scramjetLoadController() {
4+
self.$scramjetLoadController = function () {
45
return require("./controller/index");
5-
}
6+
};
67

7-
export function $scramjetLoadClient() {
8+
self.$scramjetLoadClient = function (config) {
89
const client = require("./client/index");
9-
client.clientInitHook();
10+
client.clientInitHook(config);
1011

1112
return client;
12-
}
13+
};
1314

14-
export function $scramjetLoadWorker() {
15+
self.$scramjetLoadWorker = function () {
1516
return require("./worker/index");
16-
}
17+
};
1718

18-
export const $scramjet = {
19-
version: {
20-
build: COMMITHASH,
21-
version: VERSION,
22-
},
19+
export const $scramjetVersion = {
20+
build: COMMITHASH,
21+
version: VERSION,
2322
};
2423

24+
self.$scramjetVersion = $scramjetVersion;
25+
2526
if ("document" in self && document?.currentScript) {
2627
document.currentScript.remove();
2728
}

src/shared/rewriters/js.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,7 @@ function rewriteJsWasm(
4545
let { js, map, scramtag, errors } = out;
4646

4747
if (flagEnabled("sourcemaps", meta.base) && !globalThis.clients) {
48-
globalThis[globalThis.$scramjet.config.globals.pushsourcemapfn](
49-
Array.from(map),
50-
scramtag
51-
);
48+
globalThis[config.globals.pushsourcemapfn](Array.from(map), scramtag);
5249

5350
map = null;
5451
}

src/shared/rewriters/wasm.ts

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
// i am a cat. i like to be petted. i like to be fed. i like to be
22
import { initSync, Rewriter } from "../../../rewriter/wasm/out/wasm.js";
33
import type { JsRewriterOutput } from "../../../rewriter/wasm/out/wasm.js";
4-
import { config, flagEnabled } from "..";
4+
import { codecDecode, codecEncode, config, flagEnabled } from "..";
55

66
export type { JsRewriterOutput, Rewriter };
77

8-
import { URLMeta } from "./url";
8+
import { rewriteUrl, URLMeta } from "./url";
9+
import { htmlRules } from "../htmlRules";
10+
import { rewriteCss, unrewriteCss } from "./css";
11+
import { rewriteJs } from "./js";
912

1013
let wasm_u8: Uint8Array;
1114
if (self.WASM)
@@ -47,7 +50,22 @@ export function getRewriter(meta: URLMeta): [Rewriter, () => void] {
4750
if (flagEnabled("rewriterLogs", meta.base))
4851
console.log(`creating new rewriter, ${len} rewriters made already`);
4952

50-
let rewriter = new Rewriter({});
53+
let rewriter = new Rewriter({
54+
config,
55+
shared: {
56+
rewrite: {
57+
htmlRules,
58+
rewriteUrl,
59+
rewriteCss,
60+
rewriteJs,
61+
},
62+
},
63+
flagEnabled,
64+
codec: {
65+
encode: codecEncode,
66+
decode: codecDecode,
67+
},
68+
});
5169
obj = { rewriter, inUse: false };
5270
rewriters.push(obj);
5371
} else {

src/shared/rewriters/worker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export function rewriteWorkers(
2020

2121
script("wasm");
2222
script("all");
23-
str += `$scramjetLoadClient(${JSON.stringify(config)})`;
23+
str += `$scramjetLoadClient(${JSON.stringify(config)});`;
2424

2525
let rewritten = rewriteJs(js, url, meta, module);
2626
if (rewritten instanceof Uint8Array) {

src/worker/error.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
1-
import { $scramjet } from "../entry";
2-
31
export function errorTemplate(trace: string, fetchedURL: string) {
42
// turn script into a data URI so we don"t have to escape any HTML values
53
const script = `
64
errorTrace.value = ${JSON.stringify(trace)};
75
fetchedURL.textContent = ${JSON.stringify(fetchedURL)};
86
for (const node of document.querySelectorAll("#hostname")) node.textContent = ${JSON.stringify(location.hostname)};
97
reload.addEventListener("click", () => location.reload());
10-
version.textContent = ${JSON.stringify($scramjet.version.version)};
11-
build.textContent = ${JSON.stringify($scramjet.version.build)};
8+
version.textContent = ${JSON.stringify($scramjetVersion)};
9+
build.textContent = ${JSON.stringify($scramjetVersion)};
1210
1311
document.getElementById('copy-button').addEventListener('click', async () => {
1412
const text = document.getElementById('errorTrace').value;

src/worker/fetch.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -289,13 +289,13 @@ export async function handleFetch(
289289
message: err.message,
290290
url: request.url,
291291
destination: request.destination,
292-
timestamp: new Date().toISOString(),
293292
};
294293
if (err.stack) {
295294
errorDetails["stack"] = err.stack;
296295
}
297296

298297
console.error("ERROR FROM SERVICE WORKER FETCH: ", errorDetails);
298+
console.error(err);
299299

300300
if (!["document", "iframe"].includes(request.destination))
301301
return new Response(undefined, { status: 500 });
@@ -508,7 +508,7 @@ async function rewriteBody(
508508
if (js instanceof Uint8Array) {
509509
js = new TextDecoder().decode(js);
510510
}
511-
const sourcemapfn = `${globalThis.$scramjet.config.globals.pushsourcemapfn}([${map.join(",")}], "${tag}");`;
511+
const sourcemapfn = `${config.globals.pushsourcemapfn}([${map.join(",")}], "${tag}");`;
512512
const strictMode = /^\s*(['"])use strict\1;?/;
513513
if (strictMode.test(js)) {
514514
js = js.replace(strictMode, `$&\n${sourcemapfn}`);

static/sw.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
/// <reference path="../lib/index.d.ts" />
2+
13
// dumb hack to allow firefox to work (please dont do this in prod)
24
if (navigator.userAgent.includes("Firefox")) {
35
Object.defineProperty(globalThis, "crossOriginIsolated", {
@@ -6,8 +8,8 @@ if (navigator.userAgent.includes("Firefox")) {
68
});
79
}
810

9-
importScripts("/scram/scramjet.shared.js", "/scram/scramjet.worker.js");
10-
11+
importScripts("/scram/scramjet.all.js");
12+
const { ScramjetServiceWorker } = $scramjetLoadWorker();
1113
const scramjet = new ScramjetServiceWorker();
1214

1315
async function handleRequest(event) {

0 commit comments

Comments
 (0)