mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2024-08-18 19:59:24 +00:00
56 lines
2.0 KiB
JavaScript
56 lines
2.0 KiB
JavaScript
import { readFileSync, promises as fs } from "fs";
|
|
import path from "path";
|
|
|
|
import typescript from "@rollup/plugin-typescript";
|
|
|
|
const input = "src/web";
|
|
const requirejs = readFileSync("node_modules/requirejs/require.js");
|
|
|
|
export default {
|
|
input: [`${input}/index.tsx`],
|
|
output: {
|
|
file: "build/rollup/index.js",
|
|
// We bundle requirejs (and config) into the header. It's rather gross
|
|
// but also works reasonably well.
|
|
banner: `${requirejs}\nrequire.config({ paths: { copycat: "https://copy-cat.squiddev.cc" } });`,
|
|
format: "amd",
|
|
preferConst: true,
|
|
amd: {
|
|
define: "require",
|
|
}
|
|
},
|
|
context: "window",
|
|
external: ["copycat/embed"],
|
|
|
|
plugins: [
|
|
typescript(),
|
|
|
|
{
|
|
name: "cc-tweaked",
|
|
async options(options) {
|
|
// Generate .d.ts files for all /mount files. This is the worst way to do it,
|
|
// but we need to run before the TS pass.
|
|
const template = "declare const contents : string;\nexport default contents;\n";
|
|
const files = await fs.readdir(`${input}/mount`);
|
|
|
|
await Promise.all(files
|
|
.filter(x => path.extname(x) !== ".ts")
|
|
.map(async file => {
|
|
const path = `${input}/mount/${file}.d.ts`;
|
|
const contents = await fs.readFile(path, { encoding: "utf-8" }).catch(() => "");
|
|
if (contents !== template) await fs.writeFile(path, template);
|
|
})
|
|
);
|
|
return options;
|
|
},
|
|
async transform(code, file) {
|
|
// Allow loading files in /mount.
|
|
const ext = path.extname(file);
|
|
return ext != '.tsx' && ext != '.ts' && path.dirname(file) === path.resolve(`${input}/mount`)
|
|
? `export default ${JSON.stringify(code)};\n`
|
|
: null;
|
|
},
|
|
}
|
|
],
|
|
};
|