mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 22:12:21 -04:00
avoid temporary .ts file due to lack of sandbox on Windows
Just a quick hack for now to store it in memory, as the temp file conflicts on Windows due to the lack of a sandbox, and we don't really have a need to write it to the filesystem anyway.
This commit is contained in:
parent
aabcc8a7db
commit
e0b85865f4
2 changed files with 32 additions and 17 deletions
|
@ -6,18 +6,15 @@ def _svelte(ctx):
|
||||||
args.use_param_file("@%s", use_always = True)
|
args.use_param_file("@%s", use_always = True)
|
||||||
args.set_param_file_format("multiline")
|
args.set_param_file_format("multiline")
|
||||||
|
|
||||||
temp_ts_path = ctx.actions.declare_file(ctx.attr.name + ".svelte.ts")
|
|
||||||
|
|
||||||
args.add(ctx.file.entry_point.path)
|
args.add(ctx.file.entry_point.path)
|
||||||
args.add(ctx.outputs.mjs.path)
|
args.add(ctx.outputs.mjs.path)
|
||||||
args.add(ctx.outputs.dts.path)
|
args.add(ctx.outputs.dts.path)
|
||||||
args.add(temp_ts_path)
|
|
||||||
args.add_all(ctx.files._shims)
|
args.add_all(ctx.files._shims)
|
||||||
|
|
||||||
ctx.actions.run(
|
ctx.actions.run(
|
||||||
execution_requirements = {"supports-workers": "1"},
|
execution_requirements = {"supports-workers": "1"},
|
||||||
executable = ctx.executable._svelte_bin,
|
executable = ctx.executable._svelte_bin,
|
||||||
outputs = [ctx.outputs.mjs, ctx.outputs.dts, temp_ts_path],
|
outputs = [ctx.outputs.mjs, ctx.outputs.dts],
|
||||||
inputs = [ctx.file.entry_point] + ctx.files._shims,
|
inputs = [ctx.file.entry_point] + ctx.files._shims,
|
||||||
mnemonic = "Svelte",
|
mnemonic = "Svelte",
|
||||||
arguments = [args],
|
arguments = [args],
|
||||||
|
|
|
@ -16,24 +16,38 @@ let parsedCommandLine: ts.ParsedCommandLine = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let tsText = "";
|
||||||
|
|
||||||
// largely taken from https://github.com/Asana/bazeltsc/blob/7dfa0ba2bd5eb9ee556e146df35cf793fad2d2c3/src/bazeltsc.ts (MIT)
|
// largely taken from https://github.com/Asana/bazeltsc/blob/7dfa0ba2bd5eb9ee556e146df35cf793fad2d2c3/src/bazeltsc.ts (MIT)
|
||||||
const languageServiceHost: ts.LanguageServiceHost = {
|
const languageServiceHost: ts.LanguageServiceHost = {
|
||||||
getCompilationSettings: (): ts.CompilerOptions => parsedCommandLine.options,
|
getCompilationSettings: (): ts.CompilerOptions => parsedCommandLine.options,
|
||||||
getNewLine: () => ts.sys.newLine,
|
getNewLine: () => ts.sys.newLine,
|
||||||
getScriptFileNames: (): string[] => parsedCommandLine.fileNames,
|
getScriptFileNames: (): string[] => parsedCommandLine.fileNames,
|
||||||
getScriptVersion: (fileName: string): string => {
|
getScriptVersion: (fileName: string): string => {
|
||||||
// If the file's size or modified-timestamp changed, it's a different version.
|
if (fileName == parsedCommandLine.fileNames[0]) {
|
||||||
return (
|
return require("crypto").createHash("md5").update(tsText).digest("hex");
|
||||||
ts.sys.getFileSize!(fileName) +
|
} else {
|
||||||
":" +
|
// If the file's size or modified-timestamp changed, it's a different version.
|
||||||
ts.sys.getModifiedTime!(fileName)!.getTime()
|
return (
|
||||||
);
|
ts.sys.getFileSize!(fileName) +
|
||||||
|
":" +
|
||||||
|
ts.sys.getModifiedTime!(fileName)!.getTime()
|
||||||
|
);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
getScriptSnapshot: (fileName: string): ts.IScriptSnapshot | undefined => {
|
getScriptSnapshot: (fileName: string): ts.IScriptSnapshot | undefined => {
|
||||||
if (!ts.sys.fileExists(fileName)) {
|
let text;
|
||||||
return undefined;
|
if (fileName == parsedCommandLine.fileNames[0]) {
|
||||||
|
// serve out generated ts file from memory, so we can avoid writing a temporary
|
||||||
|
// file that causes conflicts on Windows
|
||||||
|
text = tsText;
|
||||||
|
} else {
|
||||||
|
if (!ts.sys.fileExists(fileName)) {
|
||||||
|
return undefined;
|
||||||
|
} else {
|
||||||
|
text = ts.sys.readFile(fileName)!;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
let text = ts.sys.readFile(fileName)!;
|
|
||||||
return {
|
return {
|
||||||
getText: (start: number, end: number) => {
|
getText: (start: number, end: number) => {
|
||||||
if (start === 0 && end === text.length) {
|
if (start === 0 && end === text.length) {
|
||||||
|
@ -129,7 +143,7 @@ async function writeDts(tsPath, dtsPath, shims) {
|
||||||
await writeFile(dtsPath, dtsSource);
|
await writeFile(dtsPath, dtsSource);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function writeTs(svelteSource, sveltePath, tsPath) {
|
function writeTs(svelteSource, sveltePath) {
|
||||||
let tsSource = svelte2tsx(svelteSource, {
|
let tsSource = svelte2tsx(svelteSource, {
|
||||||
filename: sveltePath,
|
filename: sveltePath,
|
||||||
strictMode: true,
|
strictMode: true,
|
||||||
|
@ -139,7 +153,8 @@ async function writeTs(svelteSource, sveltePath, tsPath) {
|
||||||
// replace the "///<reference types="svelte" />" with a line
|
// replace the "///<reference types="svelte" />" with a line
|
||||||
// turning off checking, as we'll use svelte-check for that
|
// turning off checking, as we'll use svelte-check for that
|
||||||
codeLines[0] = "// @ts-nocheck";
|
codeLines[0] = "// @ts-nocheck";
|
||||||
await writeFile(tsPath, codeLines.join("\n"));
|
// write to our global
|
||||||
|
tsText = codeLines.join("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
async function writeJs(source, inputFilename, outputPath) {
|
async function writeJs(source, inputFilename, outputPath) {
|
||||||
|
@ -167,10 +182,13 @@ async function writeJs(source, inputFilename, outputPath) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function compileSvelte(args) {
|
async function compileSvelte(args) {
|
||||||
const [sveltePath, mjsPath, dtsPath, tempTsPath, ...shims] = args;
|
const [sveltePath, mjsPath, dtsPath, ...shims] = args;
|
||||||
const svelteSource = await readFile(sveltePath);
|
const svelteSource = await readFile(sveltePath);
|
||||||
|
|
||||||
await writeTs(svelteSource, sveltePath, tempTsPath);
|
// mock filename
|
||||||
|
const tempTsPath = sveltePath + ".ts";
|
||||||
|
|
||||||
|
await writeTs(svelteSource, sveltePath);
|
||||||
await writeDts(tempTsPath, dtsPath, shims);
|
await writeDts(tempTsPath, dtsPath, shims);
|
||||||
await writeJs(svelteSource, sveltePath, mjsPath);
|
await writeJs(svelteSource, sveltePath, mjsPath);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue