import { joinPathFragments, ProjectConfiguration } from '@nx/devkit';
import { WebComponentTargetNames } from '../../generator';
interface ArrayOptionInProjectConfig {
input: string;
[key: string]: unknown;
}
export function updateBuildTarget(
project: ProjectConfiguration,
targetNames: WebComponentTargetNames,
deployUrl?: string
) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const existingScripts = project.targets![targetNames.buildTarget].options?.scripts || [];
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const existingAssets = project.targets![targetNames.buildTarget].options?.assets || [];
const existingScriptsWithoutDuplicates = existingScripts.filter(
(script: ArrayOptionInProjectConfig | string) => {
const scriptPath = typeof script === 'string' ? script : script?.input;
return !scriptPath.includes('node_modules/zone.js/fesm2015/zone.min.js');
}
);
const existingAssetsWithoutDuplicates = existingAssets.filter(
(asset: ArrayOptionInProjectConfig | string) => {
const assetPath = typeof asset === 'string' ? asset : asset?.input;
return !(
assetPath?.includes('node_modules/@allianz/ngx-ndbx/css/fonts/allianz-icons') ||
assetPath?.includes('node_modules/@allianz/ngx-ndbx/css/fonts/allianz-neo') ||
assetPath?.includes('node_modules/@aposin/ng-aquila/css')
);
}
);
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
project.targets![targetNames.buildTarget].configurations = {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
...(project.targets![targetNames.buildTarget].configurations || {}),
[targetNames.buildConfiguration]: {
localize: true,
optimization: {
styles: {
inlineCritical: false
}
},
outputHashing: 'none',
scripts: [
...existingScriptsWithoutDuplicates,
{
input: 'node_modules/zone.js/fesm2015/zone.min.js',
inject: false,
bundleName: 'zone'
}
],
assets: [
...existingAssetsWithoutDuplicates,
{
glob: '**/*',
input: 'node_modules/@allianz/ngx-ndbx/css/fonts/allianz-icons',
output: '/fonts/'
},
{
glob: '**/*',
input: 'node_modules/@allianz/ngx-ndbx/css/fonts/allianz-neo',
output: '/fonts/'
},
{
glob: 'normalize.css',
input: 'node_modules/@aposin/ng-aquila/css',
output: '/'
}
]
}
};
if (deployUrl) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
project.targets![targetNames.buildTarget].configurations![
targetNames.buildConfiguration
].deployUrl = deployUrl;
}
}
export function updateServeTarget(
project: ProjectConfiguration,
targetNames: WebComponentTargetNames
) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
project.targets![targetNames.serveTarget].configurations = {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
...(project.targets![targetNames.serveTarget].configurations || {}),
[targetNames.serveConfiguration]: {
buildTarget: project.name + `:${targetNames.buildTarget}:${targetNames.buildConfiguration}`
}
};
}
export function updateDevelopTarget(
project: ProjectConfiguration,
targetNames: WebComponentTargetNames
) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
project.targets![targetNames.developTarget].configurations = {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
...(project.targets![targetNames.developTarget].configurations || {}),
[targetNames.developConfiguration]: {
serveTarget: project.name + `:${targetNames.serveTarget}:${targetNames.serveConfiguration}`,
target: 'webcomponent'
}
};
}
export function updateGenerateTarget(
project: ProjectConfiguration,
targetNames: WebComponentTargetNames
) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
project.targets![targetNames.generateTarget].configurations = {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
...(project.targets![targetNames.generateTarget].configurations || {}),
[targetNames.generateConfiguration]: {
target: 'webcomponent'
}
};
}
export function addBundleTarget(
project: ProjectConfiguration,
projectDistFolder: string,
targetNames: WebComponentTargetNames
) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
project!.targets![targetNames.bundleTarget] = {
command: `node ${joinPathFragments(
project.root,
'generated',
'tools',
'scripts',
'element-builder.js'
)} --dist-path=${projectDistFolder}`
};
}