1- import { mkdir , readdir , readFile , rm , writeFile } from "fs/promises" ;
1+ import { mkdir , readdir , readFile , rm , symlink , writeFile } from "fs/promises" ;
22import path from "path" ;
33
44const 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 \. t s $ / . 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
76125function getPackageNameAndPathOfLib ( libFile : string ) {
0 commit comments