UNPKG

@vulcan-sql/build

Version:

VulcanSQL package for building projects

51 lines 2.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.VulcanBuilder = void 0; const tslib_1 = require("tslib"); const containers_1 = require("../containers/index"); const core_1 = require("@vulcan-sql/core"); const lodash_1 = require("lodash"); const logger = (0, core_1.getLogger)({ scopeName: 'BUILD' }); class VulcanBuilder { constructor(options) { this.options = options; } build(packagerOptions) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const container = new containers_1.Container(); yield container.load(this.options); const schemaParser = container.get(containers_1.TYPES.SchemaParser); const templateEngine = container.get(core_1.TYPES.TemplateEngine); const artifactBuilder = container.get(core_1.TYPES.ArtifactBuilder); const documentGenerator = container.get(containers_1.TYPES.DocumentGenerator); // Activate data sources const dataSources = container.getAll(core_1.TYPES.Extension_DataSource) || []; for (const dataSource of dataSources) { logger.debug(`Initializing data source: ${dataSource.getExtensionId()}`); yield dataSource.activate(); logger.debug(`Data source ${dataSource.getExtensionId()} initialized`); } const { metadata, templates } = yield templateEngine.compile(); const { schemas } = yield schemaParser.parse({ metadata }); // check if exist duplicate url paths in schemas, before generating API document and build artifact. const urlPaths = schemas.map((schema) => schema.urlPath); if ((0, lodash_1.uniq)(urlPaths).length !== urlPaths.length) throw new core_1.ConfigurationError('Duplicate "urlPath" found in schemas, please check your definition of each schemas.'); artifactBuilder.addArtifact(core_1.BuiltInArtifactKeys.Templates, templates); artifactBuilder.addArtifact(core_1.BuiltInArtifactKeys.Schemas, schemas); yield documentGenerator.generateDocuments(schemas); yield artifactBuilder.build(); // Package if (packagerOptions) { const packagerName = `${packagerOptions.output}_${packagerOptions.target}`; const packagerFactory = container.get(containers_1.TYPES.Factory_Packager); const packager = packagerFactory(packagerName); yield packager.activate(); yield packager.package(this.options); } yield container.unload(); }); } } exports.VulcanBuilder = VulcanBuilder; //# sourceMappingURL=vulcanBuilder.js.map