super-productivity/packages/plugin-dev/sync-md/scripts/build.js
2025-07-07 18:39:14 +02:00

103 lines
3.1 KiB
JavaScript
Executable file

#!/usr/bin/env node
const fs = require('fs');
const path = require('path');
const { build } = require('esbuild');
const ROOT_DIR = path.join(__dirname, '..');
const SRC_DIR = path.join(ROOT_DIR, 'src');
const DIST_DIR = path.join(ROOT_DIR, 'dist');
async function buildPlugin() {
console.log('Building sync-md plugin with esbuild...');
// Clean dist directory
if (fs.existsSync(DIST_DIR)) {
fs.rmSync(DIST_DIR, { recursive: true });
}
fs.mkdirSync(DIST_DIR);
try {
// Build the background script
console.log('Building plugin.js...');
await build({
entryPoints: [path.join(SRC_DIR, 'background/background.ts')],
bundle: true,
outfile: path.join(DIST_DIR, 'plugin.js'),
platform: 'browser',
target: 'es2020',
format: 'iife',
globalName: 'SyncMdPlugin',
define: {
'process.env.NODE_ENV': '"production"',
},
banner: {
js: `// sync-md plugin v2.0.0
// This file is auto-generated. Do not edit directly.
(function() {
'use strict';
`,
},
footer: {
js: `
// Initialize plugin - initPlugin should already be attached to window by the plugin code
console.log('[Plugin Build] Checking for initPlugin function...');
if (typeof window.initPlugin === 'function') {
console.log('[Plugin Build] initPlugin function found on window');
} else if (typeof window.SyncMdPlugin !== 'undefined' && window.SyncMdPlugin.initPlugin) {
console.log('[Plugin Build] initPlugin found on SyncMdPlugin, attaching to window');
window.initPlugin = window.SyncMdPlugin.initPlugin;
} else {
console.error('[Plugin Build] initPlugin function not found!');
}
})();`,
},
external: ['fs', 'path', 'child_process'],
logLevel: 'info',
minify: true,
sourcemap: false,
});
// Copy index.html
console.log('Copying index.html...');
fs.copyFileSync(
path.join(SRC_DIR, 'ui', 'index.html'),
path.join(DIST_DIR, 'index.html'),
);
// Copy manifest.json
console.log('Copying manifest.json...');
fs.copyFileSync(
path.join(SRC_DIR, 'manifest.json'),
path.join(DIST_DIR, 'manifest.json'),
);
// Copy or create icon.svg
console.log('Copying icon.svg...');
const iconPath = path.join(SRC_DIR, 'assets', 'icon.svg');
if (fs.existsSync(iconPath)) {
fs.copyFileSync(iconPath, path.join(DIST_DIR, 'icon.svg'));
} else {
// Create a simple default icon if not exists
const defaultIcon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/>
<polyline points="14 2 14 8 20 8"/>
<line x1="9" y1="15" x2="15" y2="15"/>
</svg>`;
fs.writeFileSync(path.join(DIST_DIR, 'icon.svg'), defaultIcon);
}
console.log('\nBuild complete! Output in dist/');
console.log('Files created:');
console.log(' - plugin.js');
console.log(' - index.html');
console.log(' - manifest.json');
console.log(' - icon.svg');
} catch (error) {
console.error('Build failed:', error);
process.exit(1);
}
}
// Run the build
buildPlugin();