start js rewriting, added todo list

This commit is contained in:
Avad3 2024-05-13 00:01:45 -04:00
parent 5c53e59d07
commit b43f2360a0
6 changed files with 99 additions and 14 deletions

View file

@ -1,5 +1,5 @@
import { Parser } from "htmlparser2";
import { DomHandler, hasChildren } from "domhandler";
import { DomHandler } from "domhandler";
import { hasAttrib } from "domutils";
import render from "dom-serializer";
import { encodeUrl } from "./url";
@ -37,10 +37,8 @@ function traverseParsedHtml(node, origin?: string) {
if (hasAttrib(node, "srcset")) node.attribs.srcset = rewriteSrcset(node.attribs.srcset, origin);
if (hasAttrib(node, "imagesrcset")) node.attribs.imagesrcset = rewriteSrcset(node.attribs.imagesrcset, origin);
if (node.name === "style" && hasChildren(node)) node.children[0].data = rewriteCss(node.children[0].data, origin);
// if (node.name === "script" && /((application|text)\/javascript)|importmap|undefined/.test(node.attribs.type) && !!node.children[0].data) {
// node.children[0].data = rewriteJs(node.children[0].data);
// }
if (node.name === "style" && node.children[0] !== undefined) node.children[0].data = rewriteCss(node.children[0].data, origin);
if (node.name === "script" && /(application|text)\/javascript|importmap|undefined/.test(node.attribs.type) && node.children[0] !== undefined) node.children[0].data = rewriteJs(node.children[0].data, origin);
if (node.childNodes) {
for (const childNode in node.childNodes) {

View file

@ -1,6 +1,34 @@
// don't do js rewriting yet
// i'm making a benchmark on different rewriting methods
import { parse } from "meriyah";
import { generate } from "astring";
import { makeTraveler } from "astravel";
import { encodeUrl } from "./url";
// i am a cat. i like to be petted. i like to be fed. i like to be
export function rewriteJs(js: string, origin?: string) {
return js;
const ast = parse(js, {
module: true
});
const customTraveler = makeTraveler({
ImportDeclaration: (node) => {
node.source.value = encodeUrl(node.source.value, origin);
},
ImportExpression: (node) => {
node.source.value = encodeUrl(node.source.value, origin);
},
ExportAllDeclaration: (node) => {
node.source.value = encodeUrl(node.source.value, origin);
},
ExportNamedDeclaration: (node) => {
if (node.source) node.source.value = encodeUrl(node.source.value, origin);
}
});
customTraveler.go(ast);
return generate(ast);
}

View file

@ -18,9 +18,9 @@ function canParseUrl(url: string, origin?: string) {
// something is broken with this but i didn't debug it
export function encodeUrl(url: string, origin?: string) {
// if (!origin) {
// origin = self.__scramjet$config.codec.decode(location.href.slice((location.origin + self.__scramjet$config.prefix).length));
// }
if (!origin) {
origin = self.__scramjet$config.codec.decode(location.href.slice((location.origin + self.__scramjet$config.prefix).length));
}
if (url.startsWith("javascript:")) {
return "javascript:" + rewriteJs(url.slice("javascript:".length));