@objectivity/angular-schematic-web-ci
Version:
Adds configuration of CI.
108 lines • 5.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.karma = void 0;
const schematics_1 = require("@angular-devkit/schematics");
const dependences_1 = require("../dependences");
const core_1 = require("@angular-devkit/core");
const tasks_1 = require("@angular-devkit/schematics/tasks");
const schematics_utilities_1 = require("schematics-utilities");
const angular_schematic_utils_1 = require("@objectivity/angular-schematic-utils");
const angular_schematic_utils_2 = require("@objectivity/angular-schematic-utils");
function karma(options) {
return (tree, _context) => {
const karmaConfigurationContext = createKarmaConfigurationContext(tree, options);
return schematics_1.chain([
createKarmaCiFile(tree, karmaConfigurationContext, options),
addJUnitFolderToIgnore(options),
updatePackageScripts(options),
installPackages(options),
createProtractorCiFile(tree, karmaConfigurationContext, options)
]);
};
}
exports.karma = karma;
function updatePackageScripts(_options) {
return (tree, _context) => {
const json = new angular_schematic_utils_1.JSONFile(tree, 'package.json');
const existingScripts = json.get(['scripts']);
const updatedScripts = Object.assign(Object.assign({}, existingScripts), {
"install-puppeteer": "cd node_modules/puppeteer && npm run install"
});
json.modify(['scripts'], updatedScripts);
};
}
function addJUnitFolderToIgnore(_options) {
return (host, context) => {
context.logger.info(`Updating .gitignore configuration`);
const gitignorePath = '.gitignore';
try {
const buffer = host.read(gitignorePath);
if (buffer !== null) {
let content = buffer.toString();
content = content.concat('\n', '# Unit tests results.', '\n', '/junit', '\n');
host.overwrite(gitignorePath, content);
}
}
catch (_a) { }
return host;
};
}
function installPackages(_options) {
return (host, context) => {
schematics_utilities_1.addPackageJsonDependency(host, { type: schematics_utilities_1.NodeDependencyType.Dev, version: dependences_1.karmaJunitReporterPkg.version, name: dependences_1.karmaJunitReporterPkg.pkg });
schematics_utilities_1.addPackageJsonDependency(host, { type: schematics_utilities_1.NodeDependencyType.Dev, version: dependences_1.puppeteerPkg.version, name: dependences_1.puppeteerPkg.pkg });
schematics_utilities_1.addPackageJsonDependency(host, { type: schematics_utilities_1.NodeDependencyType.Dev, version: dependences_1.jasmineReportersPkg.version, name: dependences_1.jasmineReportersPkg.pkg });
if (_options.skipInstall !== true) {
context.addTask(new tasks_1.NodePackageInstallTask());
}
return host;
};
}
function createProtractorCiFile(tree, karmaConfigurationContext, options) {
const templateSource = schematics_1.apply(schematics_1.url('./files/e2e'), [
schematics_1.applyTemplates(Object.assign(Object.assign({}, options), {
junitReporterOutputDir: karmaConfigurationContext.rootPath + '/../junit'
})),
schematics_1.move(karmaConfigurationContext.protractorConfigPath),
angular_schematic_utils_1.overwriteIfExists(tree)
]);
return schematics_1.chain([
schematics_1.mergeWith(templateSource)
]);
}
function createKarmaCiFile(tree, karmaConfigurationContext, options) {
const templateSource = schematics_1.apply(schematics_1.url('./files/src'), [
schematics_1.applyTemplates(Object.assign(Object.assign({}, options), {
junitReporterOutputDir: karmaConfigurationContext.rootPath + '/junit',
coverageReporterOutputDir: karmaConfigurationContext.rootPath + '/coverage/' + options.project
})),
schematics_1.move(karmaConfigurationContext.karmaConfigPath),
angular_schematic_utils_1.overwriteIfExists(tree)
]);
return schematics_1.chain([
schematics_1.mergeWith(templateSource)
]);
}
function createKarmaConfigurationContext(host, options) {
const workspace = schematics_utilities_1.getWorkspace(host);
const projectName = options.project;
const workspaceProject = angular_schematic_utils_2.getProjectFromWorkspace(workspace, projectName);
const karmaPath = getProjectKarmaPath(workspaceProject);
const protractorPath = getProjectProtractorPath(workspaceProject);
return {
karmaConfigPath: karmaPath,
protractorConfigPath: protractorPath,
rootPath: workspaceProject.root === '' ? '.' : workspaceProject.root.split('/').map(_ => '..').join('/')
};
}
function getProjectKarmaPath(project) {
const testOptions = angular_schematic_utils_1.getProjectTargetOptions(project, 'test');
const karmaConfigFile = core_1.normalize(testOptions.karmaConfig);
return karmaConfigFile.substring(0, karmaConfigFile.lastIndexOf("/"));
}
function getProjectProtractorPath(project) {
const testOptions = angular_schematic_utils_1.getProjectTargetOptions(project, 'e2e');
const protractorConfigFile = core_1.normalize(testOptions.protractorConfig);
return protractorConfigFile.substring(0, protractorConfigFile.lastIndexOf("/"));
}
//# sourceMappingURL=index.js.map