@vulcan-sql/build
Version:
VulcanSQL package for building projects
51 lines • 2.76 kB
JavaScript
;
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