@nstudio/angular
Version:
Angular Plugin for xplat
157 lines (156 loc) • 9.35 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.XplatAngularHelpers = exports.ComponentHelpers = void 0;
const schematics_1 = require("@angular-devkit/schematics");
const xplat_1 = require("@nstudio/xplat");
const xplat_utils_1 = require("@nstudio/xplat-utils");
const generator_1 = require("./generator");
const versions_1 = require("./versions");
var ComponentHelpers;
(function (ComponentHelpers) {
function platformGenerator(options, platform) {
const chains = [(0, xplat_utils_1.prerun)()];
const componentSettings = xplat_1.XplatComponentHelpers.prepare(options);
if (options.onlyProject) {
for (const fullProjectPath of componentSettings.projectNames) {
const projectName = (0, xplat_utils_1.parseProjectNameFromPath)(fullProjectPath);
const projectParts = projectName.split('-');
const platPrefix = projectParts[0];
const platSuffix = projectParts.pop();
if (platPrefix === platform || platSuffix === platform) {
const appDir = platform === 'web' ? '/app' : '';
const prefixPath = `apps/${fullProjectPath}/src${appDir}`;
const featurePath = `${prefixPath}/features/${componentSettings.directory ? componentSettings.directory + '/' : ''}${componentSettings.featureName}`;
const featureModulePath = `${featurePath}/${componentSettings.featureName}.module.ts`;
const barrelIndex = `${featurePath}/components/index.ts`;
// console.log('will adjustProject:', projectName);
chains.push((tree, context) => {
if (!tree.exists(featureModulePath)) {
throw new Error((0, xplat_1.needFeatureModuleError)(featureModulePath, componentSettings.featureName, fullProjectPath, true));
}
return (0, generator_1.addToFeature)('', 'component', options, prefixPath, tree)(tree, context);
});
chains.push((tree, context) => {
return (0, generator_1.adjustBarrelIndex)('component', options, barrelIndex, true)(tree, context);
});
chains.push((tree, context) => {
return (0, generator_1.addToFeature)('', 'component', options, prefixPath, tree, '_index')(tree, context);
});
}
}
}
else {
// add component
chains.push((tree, context) => {
const xplatFolderName = xplat_1.XplatHelpers.getXplatFoldername(platform, 'angular');
return (0, generator_1.addToFeature)(xplatFolderName, 'component', options, `libs/xplat/${xplatFolderName}`, tree, ``, true)(tree, context);
});
if (options.subFolder) {
// adjust components barrel for subFolder
chains.push((tree, context) => {
const xplatFolderName = xplat_1.XplatHelpers.getXplatFoldername(platform, 'angular');
return (0, generator_1.adjustBarrelIndex)('component', options, `libs/xplat/${xplatFolderName}/features/src/lib/${componentSettings.directory
? componentSettings.directory + '/'
: ''}${componentSettings.featureName}/components/${options.subFolder}/index.ts`, true)(tree, context);
});
chains.push((tree, context) => {
const xplatFolderName = xplat_1.XplatHelpers.getXplatFoldername(platform, 'angular');
return options.needsIndex
? (0, generator_1.addToFeature)(xplatFolderName, 'component', options, `libs/xplat/${xplatFolderName}`, tree, '_index', true)(tree, context)
: (0, schematics_1.noop)()(tree, context);
});
}
// adjust overall components barrel
chains.push((tree, context) => {
const xplatFolderName = xplat_1.XplatHelpers.getXplatFoldername(platform, 'angular');
return (0, generator_1.adjustBarrelIndex)('component', options, `libs/xplat/${xplatFolderName}/features/src/lib/${componentSettings.directory ? componentSettings.directory + '/' : ''}${componentSettings.featureName}/components/index.ts`, true, false, true)(tree, context);
});
chains.push((tree, context) => {
const xplatFolderName = xplat_1.XplatHelpers.getXplatFoldername(platform, 'angular');
return options.needsIndex
? (0, generator_1.addToFeature)(xplatFolderName, 'component', options, `libs/xplat/${xplatFolderName}`, tree, '_index')(tree, context)
: (0, schematics_1.noop)()(tree, context);
});
}
return chains;
}
ComponentHelpers.platformGenerator = platformGenerator;
})(ComponentHelpers || (exports.ComponentHelpers = ComponentHelpers = {}));
var XplatAngularHelpers;
(function (XplatAngularHelpers) {
function updateRootDeps(options) {
return (tree, context) => {
const dependencies = {};
const devDependencies = {};
const packageJson = (0, xplat_utils_1.getJsonFromFile)(tree, 'package.json');
let ngVersion;
if (packageJson.dependencies) {
if (packageJson.dependencies['@angular/core']) {
// use existing
ngVersion = packageJson.dependencies['@angular/core'];
}
else {
ngVersion = versions_1.angularVersion;
}
dependencies[`@angular/animations`] = ngVersion;
dependencies[`@angular/common`] = ngVersion;
dependencies[`@angular/compiler`] = ngVersion;
dependencies[`@angular/core`] = ngVersion;
dependencies[`@angular/forms`] = ngVersion;
dependencies[`@angular/platform-browser`] = ngVersion;
dependencies[`@angular/platform-browser-dynamic`] = ngVersion;
dependencies[`@angular/router`] = ngVersion;
if (!dependencies[`rxjs`]) {
dependencies[`rxjs`] = versions_1.rxjsVersion;
}
dependencies[`zone.js`] = versions_1.zonejsVersion;
devDependencies[`@angular/compiler-cli`] = ngVersion;
devDependencies[`@angular/language-service`] = ngVersion;
}
if (!packageJson.devDependencies['@nx/angular']) {
packageJson.devDependencies['@nx/angular'] = versions_1.nxVersion;
}
if (!packageJson.devDependencies['@nx/jest']) {
packageJson.devDependencies['@nx/jest'] = versions_1.nxVersion;
}
if (!packageJson.devDependencies['@nstudio/web']) {
packageJson.devDependencies['@nstudio/web'] = versions_1.xplatVersion;
}
dependencies[`@${(0, xplat_utils_1.getNpmScope)()}/xplat-scss`] = 'file:libs/xplat/scss/src';
return xplat_1.XplatHelpers.updatePackageForXplat(options, {
dependencies: Object.assign(Object.assign({}, dependencies), { '@ngx-translate/core': versions_1.ngxTranslateVersion, '@ngx-translate/http-loader': versions_1.ngxTranslateHttpVersion }),
devDependencies: Object.assign(Object.assign({}, devDependencies), { '@types/jest': versions_1.typesJest }),
})(tree, context);
};
}
XplatAngularHelpers.updateRootDeps = updateRootDeps;
function externalChains(options) {
const platforms = xplat_1.XplatHelpers.getPlatformsFromOption(options.platforms);
const chains = [];
for (const platform of platforms) {
// console.log('angular externalChains:', `@nstudio/${platform}-angular`)
chains.push((0, schematics_1.externalSchematic)(`@nstudio/${platform}-angular`, 'xplat', options, {
interactive: false,
}));
}
return chains;
}
XplatAngularHelpers.externalChains = externalChains;
function addLibFiles(options, relativeTo = './', libName) {
return (tree, context) => {
if (libName === 'scss' &&
tree.exists(`libs/xplat/${libName}/src/package.json`)) {
return (0, schematics_1.noop)()(tree, context);
}
else if (tree.exists(`libs/xplat/${libName}/src/lib/index.ts`)) {
return (0, schematics_1.noop)()(tree, context);
}
const libSrcFolder = `/${libName}/src${libName === 'scss' ? '' : '/lib'}`;
return (0, schematics_1.branchAndMerge)((0, schematics_1.mergeWith)((0, schematics_1.apply)((0, schematics_1.url)(`${relativeTo}_files_${libName}`), [
(0, schematics_1.template)(Object.assign(Object.assign({}, options), (0, xplat_1.getDefaultTemplateOptions)())),
(0, schematics_1.move)(`libs/xplat/${libSrcFolder}`),
])))(tree, context);
};
}
XplatAngularHelpers.addLibFiles = addLibFiles;
})(XplatAngularHelpers || (exports.XplatAngularHelpers = XplatAngularHelpers = {}));
;