@rxap/schematics-ts-morph
Version:
This package provides utilities for manipulating TypeScript code using ts-morph, particularly for Angular and NestJS projects. It offers functions to add, coerce, and modify code elements like classes, methods, decorators, and imports. The package also in
105 lines • 5.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.initGenerator = initGenerator;
const tslib_1 = require("tslib");
const devkit_1 = require("@nx/devkit");
const path_1 = require("path");
function initGenerator(tree, options) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
var _a, _b, _c, _d, _e;
const packageJsonFilePath = (0, path_1.relative)(tree.root, (0, path_1.join)(__dirname, '..', '..', '..', 'package.json'));
if (!tree.exists(packageJsonFilePath)) {
console.error('package.json not found in: ' + packageJsonFilePath);
return;
}
const { peerDependencies, name: packageName } = JSON.parse(tree.read(packageJsonFilePath, 'utf-8'));
console.log(`Coerce peer dependencies for package: ${packageName}`);
if (!peerDependencies || !Object.keys(peerDependencies).length) {
console.log('No peer dependencies found');
return;
}
console.log(`Peer dependencies: ${Object.keys(peerDependencies).join(', ')}`);
const rootPackageJson = JSON.parse(tree.read('package.json', 'utf-8'));
let isDevDependency = !!((_a = rootPackageJson.devDependencies) === null || _a === void 0 ? void 0 : _a[packageName]);
if (isDevDependency &&
[/^@rxap\/ngx/, /^@rxap\/nest/].some((rx) => rx.test(packageName))) {
(_b = rootPackageJson.dependencies) !== null && _b !== void 0 ? _b : (rootPackageJson.dependencies = {});
rootPackageJson.dependencies[packageName] =
rootPackageJson.devDependencies[packageName];
delete rootPackageJson.devDependencies[packageName];
isDevDependency = false;
tree.write('package.json', JSON.stringify(rootPackageJson, null, 2));
}
if (!isDevDependency && [
/^@rxap\/plugin/,
/^@rxap\/workspace/,
/@rxap\/schematic/,
]) {
(_c = rootPackageJson.devDependencies) !== null && _c !== void 0 ? _c : (rootPackageJson.devDependencies = {});
rootPackageJson.devDependencies[packageName] =
rootPackageJson.dependencies[packageName];
delete rootPackageJson.dependencies[packageName];
isDevDependency = true;
tree.write('package.json', JSON.stringify(rootPackageJson, null, 2));
}
const missingPeerDependencies = Object.entries(peerDependencies)
.filter(([dep]) => {
var _a, _b;
return !((_a = rootPackageJson.dependencies) === null || _a === void 0 ? void 0 : _a[dep]) &&
!((_b = rootPackageJson.devDependencies) === null || _b === void 0 ? void 0 : _b[dep]);
})
.reduce((acc, [dep, version]) => (Object.assign(Object.assign({}, acc), { [dep]: version })), {});
if (!Object.keys(missingPeerDependencies).length) {
console.log('No missing peer dependencies');
return;
}
if (isDevDependency) {
(0, devkit_1.addDependenciesToPackageJson)(tree, {}, missingPeerDependencies);
}
else {
(0, devkit_1.addDependenciesToPackageJson)(tree, missingPeerDependencies, {});
}
yield (0, devkit_1.formatFiles)(tree);
(0, devkit_1.installPackagesTask)(tree);
for (const peer of Object.keys(missingPeerDependencies)) {
console.log(`Peer dependency ${peer} added to package.json`);
const peerPackageJsonFilePath = (0, path_1.join)('node_modules', ...peer.split('/'), 'package.json');
if (!tree.exists(peerPackageJsonFilePath)) {
console.log(`Peer dependency ${peer} has no package.json`);
continue;
}
const { generators, schematics } = JSON.parse(tree.read(peerPackageJsonFilePath, 'utf-8'));
if (!generators && !schematics) {
console.log(`Peer dependency ${peer} has no generators or schematics`);
continue;
}
const configFile = generators || schematics;
if (!tree.exists((0, path_1.join)('node_modules', ...peer.split('/'), configFile))) {
console.log(`Peer dependency ${peer} has no generators or schematics file`);
continue;
}
const config = JSON.parse(tree.read((0, path_1.join)('node_modules', ...peer.split('/'), configFile), 'utf-8'));
if (!((_d = config.generators) === null || _d === void 0 ? void 0 : _d.init)) {
console.log(`Peer dependency ${peer} has no init generator`);
continue;
}
const initGeneratorFilePath = config.generators.init.factory;
const fullInitGeneratorFilePath = (0, path_1.join)('node_modules', ...peer.split('/'), initGeneratorFilePath) + '.js';
if (!tree.exists(fullInitGeneratorFilePath)) {
console.log(`Peer dependency ${peer} has no init generator file: ` +
fullInitGeneratorFilePath);
continue;
}
// eslint-disable-next-line @typescript-eslint/no-var-requires
const initGenerator = (_e = require((0, path_1.join)('node_modules', ...peer.split('/'), initGeneratorFilePath))) === null || _e === void 0 ? void 0 : _e.default;
if (typeof initGenerator !== 'function') {
console.log(`Peer dependency ${peer} has no init generator function`);
continue;
}
console.log(`Run init generator for peer dependency ${peer}`);
yield initGenerator(tree, options);
}
});
}
exports.default = initGenerator;
//# sourceMappingURL=generator.js.map