devui-admin-test
Version:
Schematics for ng-devui-admin
145 lines • 5.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const schematics_1 = require("@angular-devkit/schematics");
const tasks_1 = require("@angular-devkit/schematics/tasks");
const utils_1 = require("../utils");
const fs = require("fs");
const path = require("path");
let projectWorkspace;
function getWorkSpace(tree) {
var _a;
let angularJSON;
if (tree.read(utils_1.ANGULAR_JSON_PATH)) {
angularJSON = JSON.parse((_a = tree.read(utils_1.ANGULAR_JSON_PATH)) === null || _a === void 0 ? void 0 : _a.toString());
}
else {
throw new schematics_1.SchematicsException('Please make sure the project is an Angular project.');
}
let defaultProject = angularJSON.defaultProject;
projectWorkspace = {
root: '/',
sourceRoot: angularJSON.projects[defaultProject].sourceRoot,
defaultProject,
};
return projectWorkspace;
}
function removeOriginalFiles() {
return (tree) => {
[
`${projectWorkspace.root}/README.md`,
`${projectWorkspace.root}/tslint.json`,
`${projectWorkspace.sourceRoot}/main.ts`,
`${projectWorkspace.sourceRoot}/index.html`,
`${projectWorkspace.sourceRoot}/styles.scss`,
`${projectWorkspace.sourceRoot}/styles.css`,
`${projectWorkspace.sourceRoot}/favicon.ico`,
`${projectWorkspace.sourceRoot}/app/app.module.ts`,
`${projectWorkspace.sourceRoot}/app/app.component.spec.ts`,
`${projectWorkspace.sourceRoot}/app/app.component.ts`,
`${projectWorkspace.sourceRoot}/app/app.component.html`,
`${projectWorkspace.sourceRoot}/app/app.component.scss`,
`${projectWorkspace.sourceRoot}/app/app.component.css`,
`${projectWorkspace.sourceRoot}/app/app-routing.module.ts`,
]
.filter((f) => tree.exists(f))
.forEach((f) => tree.delete(f));
};
}
function modifyTsConfig() {
return (tree) => {
const configPath = path.join(__dirname, '..', '..', '..', '..', 'tsconfig.json');
let content = fs.readFileSync(configPath, 'utf-8');
let strContent;
if (content) {
strContent = JSON.parse(content.replace(/\/\*(.*?)\*\//, ''));
strContent.compilerOptions['strict'] = false;
strContent.compilerOptions['noImplicitReturns'] = false;
strContent.angularCompilerOptions['strictPropertyInitialization'] = false;
}
else {
throw new schematics_1.SchematicsException('Please make sure there is a tsconfig.json.');
}
tree.overwrite('tsconfig.json', JSON.stringify(strContent, null, 2));
return tree;
};
}
function addDependencies(options) {
return (tree) => {
const packages = options.i18n ? utils_1.PACKAGES_I18N : utils_1.PACKAGES;
utils_1.addPackage(tree, packages, 'dependencies');
};
}
function addLintFiles(options, tree) {
if (options.eslintFile) {
addLintScripts(tree);
return schematics_1.chain([schematics_1.mergeWith(schematics_1.apply(schematics_1.url('./files/lint-files'), [schematics_1.move(projectWorkspace.root)]))]);
}
else {
return schematics_1.chain([]);
}
}
function addLintScripts(tree) {
var _a;
let packageJson;
if (tree.read(utils_1.PACKAGE_JSON_PATH)) {
packageJson = JSON.parse((_a = tree.read(utils_1.PACKAGE_JSON_PATH)) === null || _a === void 0 ? void 0 : _a.toString());
}
else {
throw new schematics_1.SchematicsException('Please make sure there is a package.json file in your project.');
}
packageJson.scripts['prettier'] = 'prettier --config ./.prettierrc --write "src/app/pages/**/**/*.html"';
packageJson.scripts['stylelint'] = 'stylelint "src/app/pages/**/**/*.{scss,css}" --config ./.stylelintrc.json --fix';
packageJson.scripts['tslint'] = 'tslint --fix -c ./tslint.json "src/**/*{.ts}"';
tree.overwrite(utils_1.PACKAGE_JSON_PATH, JSON.stringify(packageJson, null, 2));
}
function addSourceFiles(options) {
return schematics_1.chain([
schematics_1.mergeWith(schematics_1.apply(schematics_1.url('./files/src'), [
schematics_1.applyTemplates({
defaultLanguage: options.defaultLanguage,
i18n: options.i18n,
mock: options.mock,
}),
schematics_1.move(projectWorkspace.sourceRoot),
])),
]);
}
function addI18nFiles(options) {
if (options.i18n) {
return schematics_1.chain([schematics_1.mergeWith(schematics_1.apply(schematics_1.url('./files/i18n'), [schematics_1.move(`${projectWorkspace.sourceRoot}/assets/i18n`)]))]);
}
else {
return schematics_1.chain([]);
}
}
function addMockFiles(options) {
if (options.mock) {
return schematics_1.chain([schematics_1.mergeWith(schematics_1.apply(schematics_1.url('./files/mock-files'), [schematics_1.move(`${projectWorkspace.sourceRoot}/app/@core`)]))]);
}
else {
return schematics_1.chain([]);
}
}
function installPackages() {
return (_tree, context) => {
context.addTask(new tasks_1.NodePackageInstallTask());
};
}
function default_1(options) {
return (tree) => {
getWorkSpace(tree);
return schematics_1.chain([
removeOriginalFiles(),
utils_1.modifyAngularJson(utils_1.STYLES, projectWorkspace.defaultProject),
modifyTsConfig(),
addDependencies(options),
addLintFiles(options, tree),
addSourceFiles(options),
addI18nFiles(options),
addMockFiles(options),
installPackages(),
]);
};
}
exports.default = default_1;
//# sourceMappingURL=index.js.map