fix: use correct env declarations in bootstrap.js

This commit is contained in:
TopchetoEU 2023-12-24 14:08:20 +02:00
parent d3571d6ee2
commit cad4f34b51
Signed by: topchetoeu
GPG Key ID: 6531B8583E5F6ED4

View File

@ -1,113 +1,113 @@
(function (ts, env, libs) { (function (ts, env, libs) {
var src = '', version = 0; var src = '', version = 0;
var lib = libs.concat([ var lib = libs.concat([
'declare function exit(): never;', 'declare function exit(): never;',
'declare function go(): any;', 'declare function go(): any;',
'declare function getTsDeclarations(): string[];' 'declare function getTsDeclarations(): string[];'
]).join(''); ]).join('');
var libSnapshot = ts.ScriptSnapshot.fromString(lib); var libSnapshot = ts.ScriptSnapshot.fromString(lib);
var environments = {}; var environments = {};
var declSnapshots = []; var declSnapshots = [];
var settings = { var settings = {
outDir: "/out", outDir: "/out",
declarationDir: "/out", declarationDir: "/out",
target: ts.ScriptTarget.ES5, target: ts.ScriptTarget.ES5,
lib: [ ], lib: [ ],
module: ts.ModuleKind.None, module: ts.ModuleKind.None,
declaration: true, declaration: true,
stripInternal: true, stripInternal: true,
downlevelIteration: true, downlevelIteration: true,
forceConsistentCasingInFileNames: true, forceConsistentCasingInFileNames: true,
experimentalDecorators: true, experimentalDecorators: true,
strict: true, strict: true,
sourceMap: true, sourceMap: true,
}; };
var reg = ts.createDocumentRegistry(); var reg = ts.createDocumentRegistry();
var service = ts.createLanguageService({ var service = ts.createLanguageService({
getCurrentDirectory: function() { return "/"; }, getCurrentDirectory: function() { return "/"; },
getDefaultLibFileName: function() { return "/lib.d.ts"; }, getDefaultLibFileName: function() { return "/lib.d.ts"; },
getScriptFileNames: function() { getScriptFileNames: function() {
var res = [ "/src.ts", "/lib.d.ts" ]; var res = [ "/src.ts", "/lib.d.ts" ];
for (var i = 0; i < declSnapshots.length; i++) res.push("/glob." + (i + 1) + ".d.ts"); for (var i = 0; i < declSnapshots.length; i++) res.push("/glob." + (i + 1) + ".d.ts");
return res; return res;
}, },
getCompilationSettings: function () { return settings; }, getCompilationSettings: function () { return settings; },
fileExists: function(filename) { return filename === "/lib.d.ts" || filename === "/src.ts" || filename === "/glob.d.ts"; }, fileExists: function(filename) { return filename === "/lib.d.ts" || filename === "/src.ts" || filename === "/glob.d.ts"; },
getScriptSnapshot: function(filename) { getScriptSnapshot: function(filename) {
if (filename === "/lib.d.ts") return libSnapshot; if (filename === "/lib.d.ts") return libSnapshot;
if (filename === "/src.ts") return ts.ScriptSnapshot.fromString(src); if (filename === "/src.ts") return ts.ScriptSnapshot.fromString(src);
var index = /\/glob\.(\d+)\.d\.ts/g.exec(filename); var index = /\/glob\.(\d+)\.d\.ts/g.exec(filename);
if (index && index[1] && (index = Number(index[1])) && index > 0 && index <= declSnapshots.length) { if (index && index[1] && (index = Number(index[1])) && index > 0 && index <= declSnapshots.length) {
return declSnapshots[index - 1]; return declSnapshots[index - 1];
} }
throw new Error("File '" + filename + "' doesn't exist."); throw new Error("File '" + filename + "' doesn't exist.");
}, },
getScriptVersion: function (filename) { getScriptVersion: function (filename) {
if (filename === "/lib.d.ts" || filename.startsWith("/glob.")) return 0; if (filename === "/lib.d.ts" || filename.startsWith("/glob.")) return 0;
else return version; else return version;
}, },
}, reg); }, reg);
service.getEmitOutput("/lib.d.ts"); service.getEmitOutput("/lib.d.ts");
log("Loaded libraries!"); log("Loaded libraries!");
var oldCompile = env.compile; var oldCompile = env.compile;
function compile(code, filename, env) { function compile(code, filename, env) {
src = code; src = code;
version++; version++;
if (!environments[env.id]) environments[env.id] = [] if (!environments[env.id]) environments[env.id] = []
declSnapshots = environments[env.id]; var decls = declSnapshots = environments[env.id];
var emit = service.getEmitOutput("/src.ts"); var emit = service.getEmitOutput("/src.ts");
var diagnostics = [] var diagnostics = []
.concat(service.getCompilerOptionsDiagnostics()) .concat(service.getCompilerOptionsDiagnostics())
.concat(service.getSyntacticDiagnostics("/src.ts")) .concat(service.getSyntacticDiagnostics("/src.ts"))
.concat(service.getSemanticDiagnostics("/src.ts")) .concat(service.getSemanticDiagnostics("/src.ts"))
.map(function (diagnostic) { .map(function (diagnostic) {
var message = ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n"); var message = ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n");
if (diagnostic.file) { if (diagnostic.file) {
var pos = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start); var pos = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);
var file = diagnostic.file.fileName.substring(1); var file = diagnostic.file.fileName.substring(1);
if (file === "src.ts") file = filename; if (file === "src.ts") file = filename;
return file + ":" + (pos.line + 1) + ":" + (pos.character + 1) + ": " + message; return file + ":" + (pos.line + 1) + ":" + (pos.character + 1) + ": " + message;
} }
else return message; else return message;
}); });
if (diagnostics.length > 0) { if (diagnostics.length > 0) {
throw new SyntaxError(diagnostics.join("\n")); throw new SyntaxError(diagnostics.join("\n"));
} }
var map = JSON.parse(emit.outputFiles[0].text); var map = JSON.parse(emit.outputFiles[0].text);
var result = emit.outputFiles[1].text; var result = emit.outputFiles[1].text;
var declaration = emit.outputFiles[2].text; var declaration = emit.outputFiles[2].text;
var compiled = oldCompile(result, filename, env); var compiled = oldCompile(result, filename, env);
return { return {
function: function () { function: function () {
var val = compiled.function.apply(this, arguments); var val = compiled.function.apply(this, arguments);
if (declaration !== '') declSnapshots.push(ts.ScriptSnapshot.fromString(declaration)); if (declaration !== '') decls.push(ts.ScriptSnapshot.fromString(declaration));
return val; return val;
}, },
breakpoints: compiled.breakpoints, breakpoints: compiled.breakpoints,
mapChain: compiled.mapChain.concat(map.mappings), mapChain: compiled.mapChain.concat(map.mappings),
}; };
} }
function apply(env) { function apply(env) {
env.compile = compile; env.compile = compile;
env.global.getTsDeclarations = function() { env.global.getTsDeclarations = function() {
return environments[env.id]; return environments[env.id];
} }
} }
apply(env); apply(env);
})(arguments[0], arguments[1], arguments[2]); })(arguments[0], arguments[1], arguments[2]);