Skip to content

Commit a7b000c

Browse files
committed
feat: write dependencies to __main
1 parent a68cdd4 commit a7b000c

File tree

1 file changed

+65
-16
lines changed

1 file changed

+65
-16
lines changed

build/package.ts

Lines changed: 65 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { mkdir, readdir, readFile, rm, writeFile } from "fs/promises";
1+
import { mkdir, readdir, readFile, rm, symlink, writeFile } from "fs/promises";
22
import path from "path";
33

44
const scope = "better-typescript-lib";
@@ -18,21 +18,26 @@ async function main() {
1818
});
1919

2020
// Read version from root package.json
21-
const version: string = JSON.parse(
21+
const rootPackageJson = JSON.parse(
2222
await readFile(path.join(projectDir, "package.json"), "utf-8")
23-
).version;
23+
);
24+
const rootPackageName: string = rootPackageJson.name;
25+
const version: string = rootPackageJson.version;
2426

2527
const packageTemplateFiles = await readdir(templateDir);
2628

2729
const libFiles = (await readdir(libDir)).filter((libFile) =>
2830
/\.d\.ts$/.test(libFile)
2931
);
3032

33+
const packageNames: string[] = [];
3134
for (const libFile of libFiles) {
3235
console.log(`Processing ${libFile}`);
3336
const libFilePath = path.join(libDir, libFile);
3437
const { packageName, packagePath } =
3538
getPackageNameAndPathOfLib(libFilePath);
39+
const p = `@${scope}/${packageName}`;
40+
packageNames.push(p);
3641

3742
const alreadyExisted = await mkdir(path.join(packageDir, packageName))
3843
.then(() => false)
@@ -44,25 +49,17 @@ async function main() {
4449
});
4550
if (!alreadyExisted) {
4651
// install package template files
47-
for (const file of packageTemplateFiles) {
48-
const filePath = path.join(templateDir, file);
49-
const targetPath = path.join(packageDir, packageName, file);
50-
await writeFile(targetPath, await readFile(filePath));
51-
}
52+
await installPackageTemplateFiles(path.join(packageDir, packageName));
5253
// update package.json
5354
const packageJsonPath = path.join(
5455
packageDir,
5556
packageName,
5657
"package.json"
5758
);
58-
const packageJson = JSON.parse(await readFile(packageJsonPath, "utf-8"));
59-
packageJson.name = `@${scope}/${packageName}`;
60-
packageJson.version = version;
61-
62-
await writeFile(
63-
packageJsonPath,
64-
JSON.stringify(packageJson, null, 2) + "\n"
65-
);
59+
await writeToPackageJson(packageJsonPath, {
60+
name: p,
61+
version,
62+
});
6663
}
6764

6865
// copy lib file
@@ -71,6 +68,58 @@ async function main() {
7168
await mkdir(targetDir, { recursive: true });
7269
await writeFile(targetPath, await readFile(libFilePath));
7370
}
71+
// Prepare "main" package
72+
{
73+
const mainPackageDir = path.join(packageDir, "__main");
74+
await mkdir(mainPackageDir);
75+
76+
// install package template files
77+
await installPackageTemplateFiles(mainPackageDir);
78+
// copy root README to main package
79+
await writeFile(
80+
path.join(mainPackageDir, "README.md"),
81+
await readFile(path.join(projectDir, "README.md"))
82+
);
83+
// update package.json
84+
const packageJsonPath = path.join(mainPackageDir, "package.json");
85+
await writeToPackageJson(packageJsonPath, {
86+
name: rootPackageName,
87+
version,
88+
types: "./dist/index.d.ts",
89+
dependencies: Object.fromEntries(packageNames.map((p) => [p, version])),
90+
});
91+
// prepare symlink to dist
92+
await symlink(
93+
path.join(projectDir, "dist"),
94+
path.join(mainPackageDir, "dist")
95+
);
96+
}
97+
98+
function installPackageTemplateFiles(dir: string) {
99+
return Promise.all(
100+
packageTemplateFiles.map(async (file) => {
101+
const filePath = path.join(templateDir, file);
102+
const targetPath = path.join(dir, file);
103+
return writeFile(targetPath, await readFile(filePath));
104+
})
105+
);
106+
}
107+
async function writeToPackageJson(
108+
packageJsonPath: string,
109+
obj: Record<string, unknown>
110+
) {
111+
return writeFile(
112+
packageJsonPath,
113+
JSON.stringify(
114+
{
115+
...JSON.parse(await readFile(packageJsonPath, "utf-8")),
116+
...obj,
117+
},
118+
null,
119+
2
120+
) + "\n"
121+
);
122+
}
74123
}
75124

76125
function getPackageNameAndPathOfLib(libFile: string) {

0 commit comments

Comments
 (0)