UNPKG

@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
"use strict"; 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