123 lines
3.5 KiB
TypeScript
123 lines
3.5 KiB
TypeScript
import {
|
|
Rule,
|
|
SchematicContext,
|
|
chain,
|
|
template,
|
|
apply,
|
|
mergeWith,
|
|
url
|
|
} from '@angular-devkit/schematics';
|
|
import { stripIndents } from '@angular-devkit/core/src/utils/literals';
|
|
import { updateJsonInTree } from '@nrwl/workspace';
|
|
import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks';
|
|
|
|
function displayInformation(_, context: SchematicContext) {
|
|
context.logger.info(stripIndents`
|
|
A global base karma config has been added at karma.conf.js
|
|
|
|
This file exports a karma config to be extended in each project
|
|
|
|
This new file is not being used yet!
|
|
|
|
Generate a new project to see an example of how it might be used.
|
|
`);
|
|
}
|
|
|
|
function setDependencyVersionIfExisting(
|
|
packageNames: string[],
|
|
version: string,
|
|
areDev: boolean
|
|
) {
|
|
return updateJsonInTree('package.json', json => {
|
|
const dependencies = areDev ? json.devDependencies : json.dependencies;
|
|
packageNames
|
|
.filter(packageName => !!dependencies[packageName])
|
|
.forEach(packageName => {
|
|
dependencies[packageName] = version;
|
|
});
|
|
return json;
|
|
});
|
|
}
|
|
|
|
function updateDependencies() {
|
|
return chain([
|
|
updateJsonInTree('package.json', json => {
|
|
json.scripts = json.scripts || {};
|
|
json.dependencies = json.dependencies || {};
|
|
json.devDependencies = json.devDependencies || {};
|
|
|
|
json.scripts['affected:libs'] = './node_modules/.bin/nx affected:libs';
|
|
if (json.dependencies['@ngrx/store-devtools']) {
|
|
json.devDependencies['@ngrx/store-devtools'] =
|
|
json.dependencies['@ngrx/store-devtools'];
|
|
delete json.dependencies['@ngrx/store-devtools'];
|
|
}
|
|
if (json.dependencies['ngrx-store-freeze']) {
|
|
json.devDependencies['ngrx-store-freeze'] =
|
|
json.dependencies['ngrx-store-freeze'];
|
|
delete json.dependencies['ngrx-store-freeze'];
|
|
}
|
|
delete json.devDependencies['@ngrx/schematics'];
|
|
return json;
|
|
}),
|
|
setDependencyVersionIfExisting(
|
|
[
|
|
'@angular/animations',
|
|
'@angular/common',
|
|
'@angular/compiler',
|
|
'@angular/core',
|
|
'@angular/forms',
|
|
'@angular/http',
|
|
'@angular/platform-browser',
|
|
'@angular/platform-browser-dynamic',
|
|
'@angular/platform-server',
|
|
'@angular/platform-webworker',
|
|
'@angular/platform-webworker-dynamic',
|
|
'@angular/router',
|
|
'@angular/service-worker',
|
|
'@angular/upgrade'
|
|
],
|
|
'^6.1.0',
|
|
false
|
|
),
|
|
setDependencyVersionIfExisting(['rxjs'], '6.2.2', false),
|
|
setDependencyVersionIfExisting(
|
|
['@ngrx/effects', '@ngrx/store', '@ngrx/router-store'],
|
|
'6.0.1',
|
|
false
|
|
),
|
|
setDependencyVersionIfExisting(['@angular/cli'], '6.1.2', true),
|
|
setDependencyVersionIfExisting(
|
|
['@angular/compiler-cli', '@angular/language-service'],
|
|
'^6.1.0',
|
|
true
|
|
),
|
|
setDependencyVersionIfExisting(
|
|
['@angular-devkit/build-angular'],
|
|
'~0.7.0',
|
|
true
|
|
),
|
|
setDependencyVersionIfExisting(['ngrx-store-freeze'], '0.2.4', true),
|
|
setDependencyVersionIfExisting(['@ngrx/store-devtools'], '6.0.1', true),
|
|
setDependencyVersionIfExisting(['typescript'], '~2.7.2', true)
|
|
]);
|
|
}
|
|
|
|
function addGlobalKarmaConf() {
|
|
const templateSource = url('./files');
|
|
return mergeWith(templateSource);
|
|
}
|
|
|
|
const addInstall = (_, context: SchematicContext) => {
|
|
context.addTask(new NodePackageInstallTask());
|
|
};
|
|
|
|
export default function(): Rule {
|
|
return chain([
|
|
displayInformation,
|
|
updateDependencies(),
|
|
addGlobalKarmaConf(),
|
|
addInstall
|
|
]);
|
|
}
|