ng-afelio
Version:
Extended Angular CLI
99 lines (98 loc) • 4.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const core_1 = require("@angular-devkit/core");
const schematics_1 = require("@angular-devkit/schematics");
const workspace_1 = require("@schematics/angular/utility/workspace");
const dependencies_1 = require("@schematics/angular/utility/dependencies");
const fs_extra_1 = require("fs-extra");
const path_1 = require("path");
const loading = require("loading-cli");
const package_json_1 = require("../../package.json");
const connector_builder_1 = require("./connector.builder");
const name_parser_1 = require("../util/name-parser");
const tempDirectoryPath = (0, path_1.join)(__dirname, 'temp-files');
function addDeps(dependencies, dependenciesType = dependencies_1.NodeDependencyType.Default) {
if (dependencies && dependencies.length > 0) {
return (host, context) => {
dependencies.forEach(dep => {
const dependency = (0, name_parser_1.parsePackageName)(dep);
if (dependency.name) {
const lib = {
type: dependenciesType,
name: dependency.name,
version: dependency.version,
overwrite: false,
};
(0, dependencies_1.addPackageJsonDependency)(host, lib);
}
});
};
}
else {
return (0, schematics_1.noop)();
}
}
function default_1(options) {
return async (host) => {
if (!options.project) {
throw new schematics_1.SchematicsException('Option (project) is required.');
}
const workspace = await (0, workspace_1.getWorkspace)(host);
const project = workspace.projects.get(options.project);
let projectAppPath;
if (project) {
projectAppPath = (0, workspace_1.buildDefaultPath)(project);
}
else {
throw new schematics_1.SchematicsException(`Project "${options.project}" not found.`);
}
const connector = connector_builder_1.ConnectorBuilder.build(options.pluginRepo);
const loader = loading({});
loader.start(`Checking repository "${options.pluginRepo}"`);
// Get release
let releases = await connector.getReleases();
// Filter releases
releases = connector.filterByNgAfelioVersion(releases, package_json_1.version);
releases = connector.filterByName(releases, options.pluginName);
let release;
if (releases.length > 0) {
release = releases[0];
}
else {
throw new schematics_1.SchematicsException(`No compatible version of this plugin ("${options.pluginName}") into selected repo ("${options.pluginRepo}") for this ng-afelio version.`);
}
const ignoredParts = options.ignoredParts ? options.ignoredParts.split(',') : [];
// Download release
if ((0, fs_extra_1.existsSync)(tempDirectoryPath)) {
(0, fs_extra_1.removeSync)(tempDirectoryPath);
}
(0, fs_extra_1.mkdirSync)(tempDirectoryPath);
loader.text = `Downloading plugin "${options.pluginName}"`;
await connector.download(release, tempDirectoryPath);
loader.succeed('Plugin downloaded');
const templates = release.config.parts.map(part => {
if (ignoredParts.includes(part.name)) {
return (0, schematics_1.noop)();
}
const sourcePath = (0, path_1.join)(tempDirectoryPath, part.source);
const destinationPath = (0, core_1.join)(projectAppPath, options.path, part.destination);
const templateSource = (0, schematics_1.apply)((0, schematics_1.url)('file://' + sourcePath), [
(0, schematics_1.filter)(p => !p.endsWith('.stories.ts')),
(0, schematics_1.template)({
...core_1.strings,
...options,
}),
(0, schematics_1.move)(destinationPath),
]);
return (0, schematics_1.mergeWith)(templateSource, schematics_1.MergeStrategy.Overwrite);
});
return (0, schematics_1.chain)([
(0, schematics_1.branchAndMerge)((0, schematics_1.chain)([
...templates,
addDeps(release.config.deps),
addDeps(release.config.devDeps, dependencies_1.NodeDependencyType.Dev)
])),
]);
};
}
exports.default = default_1;