fix: make Function.compile do less stuff

This commit is contained in:
2025-01-22 20:34:00 +02:00
parent f712fb09ae
commit 40f6cfe616
6 changed files with 29 additions and 35 deletions

View File

@@ -10,6 +10,8 @@ declare interface String {
charCodeAt(i: number): number;
codePointAt(i: number): number;
startsWith(search: string): boolean;
endsWith(search: string): boolean;
includes(search: string, offset?: number): number;
indexOf(search: string, offset?: number): number;
lastIndexOf(search: string, offset?: number): number;

View File

@@ -105,7 +105,7 @@ export interface Primordials {
exec(target: string, offset: number, indices: boolean): { matches: RegExpMatchArray, end: number } | null;
groupCount(): number;
};
compile(src: string): Function;
compile(src: string, filename?: string): Function;
setGlobalPrototypes(prototype: Record<string, any>): void;
now(): number;
next(func: () => void): void;

View File

@@ -55,23 +55,8 @@ export const Function = (() => {
return res;
}
public static compile(src = "", { globals = [], wrap = false }: { globals?: string[], wrap?: boolean } = {}) {
const parts = [];
if (wrap) parts[parts.length] = "return (function() {\n";
if (globals.length > 0) {
parts[parts.length] = "let {";
for (let i = 0; i < globals.length; i++) {
if (i > 0) parts[parts.length] = ",";
parts[parts.length] = globals[i];
}
parts[parts.length] = "} = arguments[0];";
}
parts[parts.length] = src;
if (wrap) parts[parts.length] = "\n})(arguments[0])";
const res = compile(string.stringBuild(parts));
return res;
public static compile(src: string, filename?: string) {
return compile(String(src), filename);
}
}

View File

@@ -109,10 +109,12 @@ export default function typescript(next: Compiler): Compiler {
registerSource(filename, code);
const compiled = next("ts-internal://" + filename, result, SourceMap.chain(map, prevMap));
return function (this: any) {
const func = function (this: any) {
const res = compiled.apply(this, arguments);
if (declaration !== '') files["/src." + declI++ + ".d.ts"] = ScriptSnapshot.fromString(declaration);
return res;
};
func.name = filename;
return func;
};
}

View File

@@ -1,17 +1,17 @@
{
"include": ["**/*.ts"],
"compilerOptions": {
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"moduleResolution": "Bundler",
"module": "ESNext",
"target": "ESNext",
"noLib": true,
"forceConsistentCasingInFileNames": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowImportingTsExtensions": true,
"noEmit": true
}
"include": ["**/*.ts"],
"compilerOptions": {
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"moduleResolution": "Bundler",
"module": "ESNext",
"target": "ESNext",
"noLib": true,
"forceConsistentCasingInFileNames": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowImportingTsExtensions": true,
"noEmit": true
}
}