UNPKG

ng-afelio

Version:
99 lines (98 loc) 4.5 kB
"use strict"; 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;