ohayolibs
Version:
Ohayo is a set of essential modules for ohayojp.
75 lines (70 loc) • 2.52 kB
text/typescript
import { chain, Rule, SchematicContext, SchematicsException, Tree } from '@angular-devkit/schematics';
import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks';
import { getProject } from '../utils/project';
import { PluginOptions } from './interface';
import { pluginAsdf } from './plugin.asdf';
import { pluginCodeStyle } from './plugin.code-style';
import { pluginDefaultLanguage } from './plugin.default-language';
import { pluginDocker } from './plugin.docker';
import { pluginHmr } from './plugin.hmr';
import { pluginIcon } from './plugin.icon';
import { pluginIE } from './plugin.ie';
import { pluginNetworkEnv } from './plugin.network-env';
import { pluginSTS } from './plugin.sts';
import { Schema as PluginSchema } from './schema';
function installPackages(): (_host: Tree, context: SchematicContext) => void {
return (_host: Tree, context: SchematicContext) => {
context.addTask(new NodePackageInstallTask());
};
}
export default function (options: PluginSchema): Rule {
return (host: Tree, context: SchematicContext) => {
const project = getProject(host, options.project);
const pluginOptions: PluginOptions = {
type: options.type,
name: project.name,
projectPrefix: project.prefix,
root: project.root,
sourceRoot: project.sourceRoot,
project: options.project,
};
const rules: Rule[] = [];
switch (options.name) {
case 'codeStyle':
rules.push(pluginCodeStyle(pluginOptions), installPackages());
break;
case 'networkEnv':
rules.push(pluginNetworkEnv({ ...pluginOptions, packageManager: options.packageManager }));
break;
case 'hmr':
rules.push(pluginHmr(pluginOptions), installPackages());
break;
case 'docker':
rules.push(pluginDocker(pluginOptions));
break;
case 'defaultLanguage':
rules.push(
pluginDefaultLanguage({
...pluginOptions,
defaultLanguage: options.defaultLanguage,
}),
);
break;
case 'icon':
rules.push(pluginIcon(pluginOptions));
break;
case 'sts':
rules.push(...pluginSTS(pluginOptions));
break;
case 'ie':
rules.push(pluginIE(pluginOptions));
break;
case 'asdf':
rules.push(pluginAsdf());
break;
default:
throw new SchematicsException(`Could not find plugin name: ${options.name}`);
}
return chain(rules)(host, context);
};
}