Skip to content

Commit 6a6ee37

Browse files
committed
feat: Convert protocol-registry to ESM and improve build system
- Convert all protocol-registry files from CommonJS to ESM - Fix all CommonJS warnings in build process - Improve esbuild configuration with advanced optimization - Add bundle analysis and development build modes - Fix all linting issues (eqeqeq, unused variables, import order) - Update build scripts and configuration - Ensure all tests pass (32/32 tests passing) - Version bump to 1.2.0 Breaking changes: - All protocol-registry modules now use ESM syntax - esbuild.config.js renamed to esbuild.config.cjs
1 parent 5ad6395 commit 6a6ee37

28 files changed

+1892
-22
lines changed

esbuild.config.cjs

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
const { analyzeMetafile, build } = require('esbuild');
2+
const { readFileSync, writeFileSync } = require('fs');
3+
const { join } = require('path');
4+
5+
// Use current directory
6+
7+
// Read package.json to get version
8+
const packageJson = JSON.parse(readFileSync(join(process.cwd(), 'package.json'), 'utf8'));
9+
10+
// Parse command line arguments
11+
const args = process.argv.slice(2);
12+
const isDev = args.includes('--dev');
13+
const isAnalyze = args.includes('--analyze');
14+
15+
const commonConfig = {
16+
platform: 'node',
17+
format: 'cjs',
18+
target: 'node18',
19+
bundle: true,
20+
minify: !isDev,
21+
sourcemap: isDev,
22+
external: [],
23+
banner: {
24+
js: `#!/usr/bin/env node\n// ${packageJson.name} v${packageJson.version}`
25+
},
26+
define: {
27+
'process.env.NODE_ENV': isDev ? '"development"' : '"production"'
28+
},
29+
logLevel: 'info',
30+
metafile: isAnalyze,
31+
// Optimize for smaller bundle size
32+
treeShaking: true,
33+
drop: isDev ? [] : ['console', 'debugger'],
34+
// Keep only necessary Node.js built-ins
35+
conditions: ['node'],
36+
mainFields: ['main', 'module'],
37+
// Optimize imports
38+
splitting: false,
39+
chunkNames: '[name]-[hash]'
40+
};
41+
42+
const builds = [
43+
{
44+
entryPoints: ['src/bin-simple.js'],
45+
outfile: 'dist/bin-simple.cjs',
46+
...commonConfig
47+
},
48+
{
49+
entryPoints: ['src/bin/fopen-handler-simple.js'],
50+
outfile: 'dist/bin/fopen-handler-simple.cjs',
51+
...commonConfig
52+
}
53+
];
54+
55+
async function buildAll() {
56+
const mode = isDev ? 'development' : isAnalyze ? 'analysis' : 'production';
57+
console.log(`🔨 Building with esbuild (${mode} mode)...`);
58+
59+
try {
60+
const results = await Promise.all(
61+
builds.map(config => build(config))
62+
);
63+
64+
console.log('✅ Build completed successfully!');
65+
66+
// Log build results
67+
results.forEach((result, index) => {
68+
const config = builds[index];
69+
if (result.metafile) {
70+
const output = Object.values(result.metafile.outputs)[0];
71+
const size = output ? output.bytes / 1024 : 0;
72+
console.log(` 📦 ${config.entryPoints[0]}${config.outfile} (${size.toFixed(1)}KB)`);
73+
} else {
74+
console.log(` 📦 ${config.entryPoints[0]}${config.outfile}`);
75+
}
76+
});
77+
78+
// Generate bundle analysis if requested
79+
if (isAnalyze) {
80+
console.log('\n📊 Generating bundle analysis...');
81+
for (let i = 0; i < results.length; i++) {
82+
const result = results[i];
83+
const config = builds[i];
84+
if (result.metafile) {
85+
const analysis = await analyzeMetafile(result.metafile, {
86+
verbose: true
87+
});
88+
const analysisFile = config.outfile.replace('.cjs', '.analysis.txt');
89+
writeFileSync(analysisFile, analysis);
90+
console.log(` 📈 Analysis saved to ${analysisFile}`);
91+
}
92+
}
93+
}
94+
95+
} catch (error) {
96+
console.error('❌ Build failed:', error);
97+
process.exit(1);
98+
}
99+
}
100+
101+
buildAll();

package.json

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@context-action/fopen-cli",
3-
"version": "1.1.0",
3+
"version": "1.2.0",
44
"packageManager": "pnpm@10.14.0",
55
"type": "module",
66
"license": "MIT",
@@ -17,20 +17,25 @@
1717
"directory": "dist"
1818
},
1919
"scripts": {
20-
"build": "mkdir -p dist/bin && cp src/bin-simple.js dist/bin-simple.cjs && cp src/bin/fopen-handler-simple.js dist/bin/fopen-handler-simple.cjs && node scripts/copy-package-json.js",
21-
"clean": "rimraf dist/*",
20+
"build": "mkdir -p dist/bin && node esbuild.config.cjs && node scripts/copy-package-json.js",
21+
"build:dev": "mkdir -p dist/bin && node esbuild.config.cjs --dev && node scripts/copy-package-json.js",
22+
"build:analyze": "mkdir -p dist/bin && node esbuild.config.cjs --analyze && node scripts/copy-package-json.js",
23+
"clean": "rm -rf dist/*",
2224
"test": "vitest run",
2325
"test:watch": "vitest",
2426
"test:coverage": "vitest run --coverage",
2527
"lint": "eslint . --ext .js,.mjs,.cjs",
2628
"lint:fix": "eslint . --ext .js,.mjs,.cjs --fix",
27-
"copy-package-json": "node scripts/copy-package-json.js"
29+
"copy-package-json": "node scripts/copy-package-json.js",
30+
"prebuild": "pnpm clean",
31+
"prepublishOnly": "pnpm build && pnpm test"
2832
},
2933
"devDependencies": {
3034
"@eslint/compat": "^1.2.0",
3135
"@eslint/eslintrc": "^3.0.0",
3236
"@eslint/js": "^9.0.0",
3337
"@vitest/coverage-v8": "3.2.4",
38+
"esbuild": "^0.24.0",
3439
"eslint": "^9.0.0",
3540
"eslint-plugin-codegen": "^0.33.0",
3641
"eslint-plugin-import": "^2.29.0",
@@ -39,6 +44,9 @@
3944
"vitest": "^3.2.0"
4045
},
4146
"dependencies": {
42-
"protocol-registry": "github:mineclover/protocol-registry"
47+
"ejs": "^3.1.8",
48+
"joi": "^17.13.3",
49+
"plist": "^3.1.0",
50+
"winreg": "^1.2.5"
4351
}
4452
}

0 commit comments

Comments
 (0)