mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 22:12:21 -04:00

The separate repo made it difficult to update the rules, and made things more complicated than they needed to be.
56 lines
1.4 KiB
JavaScript
56 lines
1.4 KiB
JavaScript
const fs = require("fs");
|
|
const process = require("process");
|
|
const path = require("path");
|
|
|
|
const input = process.argv[2];
|
|
const outputJs = process.argv[3];
|
|
const temp = process.argv[4];
|
|
|
|
|
|
const svelte = require("svelte/compiler");
|
|
|
|
const source = fs.readFileSync(input, "utf8");
|
|
|
|
const preprocessOptions = require("svelte-preprocess")({});
|
|
preprocessOptions.filename = input;
|
|
|
|
const svelte2tsx = require("svelte2tsx");
|
|
|
|
let tsoutput = svelte2tsx(source, {
|
|
filename: input,
|
|
strictMode: true,
|
|
isTsFile: true,
|
|
});
|
|
let codeLines = tsoutput.code.split("\n");
|
|
// replace the "///<reference types="svelte" />" with a line
|
|
// turning off checking, as we'll use svelte-check for that
|
|
codeLines[0] = "// @ts-nocheck";
|
|
const outputBase = path.basename(outputJs.replace(".mjs", ".tsx"));
|
|
const outputTs = path.join(temp, outputBase);
|
|
fs.writeFileSync(outputTs, codeLines.join("\n"));
|
|
|
|
svelte.preprocess(source, preprocessOptions).then(
|
|
(processed) => {
|
|
let result;
|
|
try {
|
|
result = svelte.compile(processed.toString(), {
|
|
format: "esm",
|
|
generate: "dom",
|
|
filename: outputJs,
|
|
});
|
|
} catch (err) {
|
|
console.log(`compile failed: ${err}`);
|
|
return;
|
|
}
|
|
if (result.warnings.length > 0) {
|
|
console.log(`warnings during compile: ${result.warnings}`);
|
|
return;
|
|
}
|
|
|
|
let code = result.js.code;
|
|
fs.writeFileSync(outputJs, code);
|
|
},
|
|
(error) => {
|
|
console.log(`preprocess failed: ${error}`);
|
|
}
|
|
);
|