@quasarbright/projection
Version:
A static site generator that creates a beautiful, interactive gallery to showcase your coding projects. Features search, filtering, tags, responsive design, and an admin UI.
86 lines • 3.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BuildHelper = void 0;
const generator_1 = require("../generator");
const errors_1 = require("./errors");
const logger_1 = require("./logger");
/**
* Shared build logic used by build, dev, and deploy commands
* This ensures consistent behavior across all commands
*/
class BuildHelper {
/**
* Run a build with the given options
* @throws ProjectionError if build fails
*/
static async runBuild(options = {}) {
const cwd = options.cwd || process.cwd();
try {
if (!options.silent) {
logger_1.Logger.header('🚀 Starting build process');
logger_1.Logger.newline();
}
// Prepare generator options
// Default to relative paths for all builds (works locally and in production)
const generatorOptions = {
cwd,
configPath: options.configPath,
outputDir: options.outputDir,
clean: options.clean,
baseUrl: options.baseUrl !== undefined ? options.baseUrl : './',
adminMode: options.adminMode
};
// Create generator instance
const generator = await generator_1.Generator.create(generatorOptions);
// Run the build process
await generator.generate();
const outputDir = generator.getOutputDir();
if (!options.silent) {
logger_1.Logger.newline();
logger_1.Logger.icon('✨', 'Build complete!', '\x1b[32m');
logger_1.Logger.keyValue('Output', outputDir);
logger_1.Logger.newline();
}
return {
outputDir,
generator
};
}
catch (error) {
if (error instanceof errors_1.ProjectionError) {
if (!options.silent) {
logger_1.Logger.newline();
logger_1.Logger.error(`Build failed: ${error.message}`);
logger_1.Logger.newline();
if (error.details) {
if (error.details.errors && Array.isArray(error.details.errors)) {
logger_1.Logger.error('Errors:');
error.details.errors.forEach((err) => {
if (typeof err === 'string') {
logger_1.Logger.dim(` • ${err}`);
}
else if (err.message) {
const projectInfo = err.projectId ? `[${err.projectId}]` : `[Project ${err.projectIndex}]`;
logger_1.Logger.dim(` • ${projectInfo} ${err.field}: ${err.message}`);
}
else {
logger_1.Logger.dim(` • ${JSON.stringify(err)}`);
}
});
logger_1.Logger.newline();
}
else if (error.details.message) {
logger_1.Logger.dim(error.details.message);
logger_1.Logger.newline();
}
}
}
throw error;
}
// Wrap unexpected errors
throw new errors_1.ProjectionError('Build process failed', errors_1.ErrorCodes.RUNTIME_ERROR, { originalError: error.message });
}
}
}
exports.BuildHelper = BuildHelper;
//# sourceMappingURL=build-helper.js.map