@@ -22,7 +22,9 @@ export function registerInitCommand(cli) {
2222 . action ( async ( options ) => {
2323 console . log ( 'Initializing ObjectDocs...\n' ) ;
2424
25- const targetDir = path . resolve ( process . cwd ( ) , 'content/.objectdocs' ) ;
25+ const contentDir = path . resolve ( process . cwd ( ) , 'content' ) ;
26+ const targetDir = path . resolve ( contentDir , '.objectdocs' ) ;
27+ const contentPackageJsonPath = path . resolve ( contentDir , 'package.json' ) ;
2628
2729 // Check if already initialized
2830 if ( fs . existsSync ( targetDir ) ) {
@@ -31,6 +33,12 @@ export function registerInitCommand(cli) {
3133 return ;
3234 }
3335
36+ // Create content directory if it doesn't exist
37+ if ( ! fs . existsSync ( contentDir ) ) {
38+ fs . mkdirSync ( contentDir , { recursive : true } ) ;
39+ console . log ( `📁 Created content directory\n` ) ;
40+ }
41+
3442 // Resolve the site package directory
3543 let siteDir ;
3644 try {
@@ -65,48 +73,96 @@ export function registerInitCommand(cli) {
6573
6674 console . log ( '✅ ObjectDocs site copied successfully!\n' ) ;
6775
76+ // Initialize or update content/package.json
77+ let packageJson = { } ;
78+ if ( fs . existsSync ( contentPackageJsonPath ) ) {
79+ console . log ( '📝 Updating existing content/package.json\n' ) ;
80+ packageJson = JSON . parse ( fs . readFileSync ( contentPackageJsonPath , 'utf-8' ) ) ;
81+ } else {
82+ console . log ( '📝 Creating content/package.json\n' ) ;
83+ packageJson = {
84+ name : 'objectdocs-content' ,
85+ version : '0.1.0' ,
86+ private : true ,
87+ description : 'ObjectDocs documentation content'
88+ } ;
89+ }
90+
91+ // Ensure scripts section exists
92+ if ( ! packageJson . scripts ) {
93+ packageJson . scripts = { } ;
94+ }
95+
96+ // Add/update ObjectDocs scripts
97+ packageJson . scripts = {
98+ ...packageJson . scripts ,
99+ dev : 'cd .objectdocs && npm run dev' ,
100+ build : 'cd .objectdocs && npm run build' ,
101+ start : 'cd .objectdocs && npm run start'
102+ } ;
103+
104+ // Write package.json
105+ fs . writeFileSync (
106+ contentPackageJsonPath ,
107+ JSON . stringify ( packageJson , null , 2 ) + '\n'
108+ ) ;
109+
110+ console . log ( '✅ content/package.json configured\n' ) ;
111+
68112 // Add to .gitignore
69113 const gitignorePath = path . resolve ( process . cwd ( ) , '.gitignore' ) ;
70- const gitignoreEntry = 'content/.objectdocs' ;
114+ const gitignoreEntries = [ 'content/.objectdocs' , 'content/node_modules' ] ;
71115
72116 try {
73117 let gitignoreContent = '' ;
74118 if ( fs . existsSync ( gitignorePath ) ) {
75119 gitignoreContent = fs . readFileSync ( gitignorePath , 'utf-8' ) ;
76120 }
77121
78- // Check if the entry already exists (as a complete line)
79122 const lines = gitignoreContent . split ( '\n' ) . map ( line => line . trim ( ) ) ;
80- if ( ! lines . includes ( gitignoreEntry ) ) {
81- // Add the entry with a comment
123+ const entriesToAdd = gitignoreEntries . filter ( entry => ! lines . includes ( entry ) ) ;
124+
125+ if ( entriesToAdd . length > 0 ) {
82126 const separator = gitignoreContent . trim ( ) ? '\n\n' : '' ;
83- const newContent = `${ gitignoreContent . trim ( ) } ${ separator } # ObjectDocs\n${ gitignoreEntry } \n` ;
127+ const newContent = `${ gitignoreContent . trim ( ) } ${ separator } # ObjectDocs\n${ entriesToAdd . join ( '\n' ) } \n` ;
84128 fs . writeFileSync ( gitignorePath , newContent ) ;
85- console . log ( ' 📝 Added content/.objectdocs to .gitignore\n' ) ;
129+ console . log ( ` 📝 Added ${ entriesToAdd . join ( ', ' ) } to .gitignore\n` ) ;
86130 }
87131 } catch ( e ) {
88132 console . warn ( '⚠️ Could not update .gitignore:' , e . message ) ;
89133 }
90134
91135 // Install dependencies in the target directory
92- console . log ( '📦 Installing dependencies...\n' ) ;
136+ console . log ( '📦 Installing dependencies in content/.objectdocs ...\n' ) ;
93137
94138 const npmCmd = process . platform === 'win32' ? 'npm.cmd' : 'npm' ;
95139 const installProcess = spawn ( npmCmd , [ 'install' , '--legacy-peer-deps' ] , {
96140 cwd : targetDir ,
97141 stdio : 'inherit'
98142 } ) ;
99143
100- installProcess . on ( 'close' , ( code ) => {
101- if ( code === 0 ) {
102- console . log ( '\n✅ Dependencies installed successfully!' ) ;
103- console . log ( '\n🎉 ObjectDocs initialized! You can now run:' ) ;
104- console . log ( ' pnpm dev - Start development server' ) ;
105- console . log ( ' pnpm build - Build for production\n' ) ;
106- } else {
107- console . error ( '\n❌ Failed to install dependencies' ) ;
108- process . exit ( code ) ;
109- }
144+ // Wait for the install process to complete
145+ await new Promise ( ( resolve , reject ) => {
146+ installProcess . on ( 'close' , ( code ) => {
147+ if ( code === 0 ) {
148+ console . log ( '\n✅ Dependencies installed successfully!' ) ;
149+ console . log ( '\n🎉 ObjectDocs initialized! You can now run:' ) ;
150+ console . log ( ' cd content && npm run dev - Start development server' ) ;
151+ console . log ( ' cd content && npm run build - Build for production\n' ) ;
152+ console . log ( 'Or if you have npm scripts in your root package.json:' ) ;
153+ console . log ( ' npm run dev - Start development server' ) ;
154+ console . log ( ' npm run build - Build for production\n' ) ;
155+ resolve ( ) ;
156+ } else {
157+ console . error ( '\n❌ Failed to install dependencies' ) ;
158+ reject ( new Error ( `Install failed with code ${ code } ` ) ) ;
159+ }
160+ } ) ;
161+
162+ installProcess . on ( 'error' , ( err ) => {
163+ console . error ( '\n❌ Failed to start install process:' , err . message ) ;
164+ reject ( err ) ;
165+ } ) ;
110166 } ) ;
111167 } ) ;
112168}
0 commit comments