80 lines
1.7 KiB
JavaScript
80 lines
1.7 KiB
JavaScript
"use strict";
|
|
|
|
const path = require("path");
|
|
const fs = require("fs");
|
|
|
|
const root = path.resolve(__dirname, "../../");
|
|
|
|
const tsPkgs = fs
|
|
.readdirSync(path.join(root, "packages"))
|
|
.filter(name => name.startsWith("babel-"))
|
|
.map(name => ({
|
|
name: name.replace(/^babel-/, "@babel/"),
|
|
dir: path.resolve(root, "packages", name),
|
|
}))
|
|
.filter(({ dir }) => {
|
|
try {
|
|
fs.statSync(path.join(dir, "src", "index.ts"));
|
|
return true;
|
|
} catch {
|
|
return false;
|
|
}
|
|
});
|
|
|
|
for (const { dir } of tsPkgs) {
|
|
const pkg = require(`${dir}/package.json`);
|
|
|
|
try {
|
|
const tsconfig = require(`${dir}/tsconfig.json`);
|
|
// Don't overwrite manually written configs
|
|
if (!tsconfig.generated) continue;
|
|
} catch {}
|
|
|
|
const deps = [];
|
|
if (pkg.dependencies) deps.push(...Object.keys(pkg.dependencies));
|
|
if (pkg.peerDependencies) deps.push(...Object.keys(pkg.peerDependencies));
|
|
|
|
const references = [];
|
|
for (const dep of deps) {
|
|
if (!dep.startsWith("@babel/")) continue;
|
|
for (const { name, dir: depDir } of tsPkgs) {
|
|
if (name === dep) {
|
|
references.push({ path: path.relative(dir, depDir) });
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
fs.writeFileSync(
|
|
path.resolve(dir, "tsconfig.json"),
|
|
JSON.stringify(
|
|
{
|
|
generated: true,
|
|
extends: "../../tsconfig.base.json",
|
|
compilerOptions: {
|
|
outDir: "./lib",
|
|
rootDir: "./src",
|
|
},
|
|
include: ["./src/**/*"],
|
|
references,
|
|
},
|
|
null,
|
|
2
|
|
)
|
|
);
|
|
}
|
|
|
|
fs.writeFileSync(
|
|
path.resolve(root, `tsconfig.json`),
|
|
JSON.stringify(
|
|
{
|
|
files: [],
|
|
references: tsPkgs.map(({ dir }) => ({
|
|
path: path.relative(root, dir),
|
|
})),
|
|
},
|
|
null,
|
|
2
|
|
)
|
|
);
|