@o3r/core
Version:
Core of the Otter Framework
81 lines • 4.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ngAddCreate = exports.updateTemplates = void 0;
const fs = require("node:fs");
const path = require("node:path");
const schematics_1 = require("@angular-devkit/schematics");
const schematics_2 = require("@o3r/schematics");
/**
* Rule factory to include `ng add` skeleton
* @param options
*/
function updateTemplatesFn(options) {
const targetPath = options.path ? path.posix.join('/', options.path) : '/';
const packageJsonPath = path.posix.join(targetPath, 'package.json');
return (tree, context) => {
// register scripts
if (tree.exists(packageJsonPath)) {
const packageJson = JSON.parse(tree.read(packageJsonPath).toString());
if (!packageJson.devDependencies?.['@angular/cli'] && !packageJson.devDependencies?.['@angular/core']) {
context.logger.info('You are not in an angular project. Ng add skeleton creation aborted.');
return tree;
}
const o3rCorePackageJsonPath = path.resolve(__dirname, '..', '..', 'package.json');
const o3rCorePackageJson = JSON.parse(fs.readFileSync(o3rCorePackageJsonPath).toString());
// prepare needed deps for schematics
const angularVersion = packageJson.devDependencies?.['@angular/cli'] || packageJson.devDependencies?.['@angular/core'];
const otterVersion = o3rCorePackageJson.dependencies['@o3r/schematics'];
const exec = (0, schematics_2.getPackageManagerExecutor)();
packageJson.scripts ||= {};
packageJson.scripts['build:schematics'] = `tsc -b tsconfig.builders.json --pretty && ${exec} cpy 'schematics/**/*.json' dist/schematics && ${exec} cpy collection.json dist`;
packageJson.schematics = './collection.json';
packageJson.peerDependencies ||= {};
packageJson.peerDependencies['@angular-devkit/schematics'] = angularVersion;
packageJson.peerDependencies['@angular-devkit/core'] = angularVersion;
packageJson.peerDependencies['@o3r/schematics'] = otterVersion;
packageJson.peerDependenciesMeta ||= {};
packageJson.peerDependenciesMeta['@angular-devkit/schematics'] = { optional: true };
packageJson.peerDependenciesMeta['@angular-devkit/core'] = { optional: true };
packageJson.peerDependenciesMeta['@schematics/angular'] = { optional: true };
packageJson.peerDependenciesMeta['@o3r/schematics'] = { optional: true };
packageJson.devDependencies['@angular-devkit/schematics'] = angularVersion;
packageJson.devDependencies['@angular-devkit/core'] = angularVersion;
packageJson.devDependencies['cpy-cli'] = o3rCorePackageJson.generatorDependencies['cpy-cli'];
packageJson.dependencies ||= {};
packageJson.dependencies['@o3r/schematics'] = otterVersion;
tree.overwrite(packageJsonPath, JSON.stringify(packageJson, null, 2));
}
// generate skeleton
const featureName = options.name || path.basename(process.cwd());
const templateSource = (0, schematics_1.apply)((0, schematics_1.url)('./templates'), [
(0, schematics_1.template)({
featureName,
tsconfigBuildPath: (0, schematics_2.findConfigFileRelativePath)(tree, ['tsconfig.build.json', 'tsconfig.base.json', 'tsconfig.json'], targetPath)
}),
(0, schematics_1.renameTemplateFiles)(),
(0, schematics_1.move)(targetPath)
]);
const rule = (0, schematics_1.mergeWith)(templateSource, schematics_1.MergeStrategy.AllowCreationConflict);
return rule(tree, context);
};
}
/**
* Rule factory to include `ng add` skeleton
* @param options
*/
exports.updateTemplates = (0, schematics_2.createOtterSchematic)(updateTemplatesFn);
/**
* add a new ngUpdate function
* @param options
*/
function ngAddCreateFn(options) {
return (0, schematics_1.chain)([
(0, exports.updateTemplates)(options)
]);
}
/**
* add a new ngUpdate function
* @param options
*/
exports.ngAddCreate = (0, schematics_2.createOtterSchematic)(ngAddCreateFn);
//# sourceMappingURL=index.js.map