File

libs/nx/src/generators/webcomponent-config/files/update-targets/update-targets.ts

Index

Properties

Indexable

[key: string]:

Properties

input
Type string
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}`
  };
}

results matching ""

    No results matching ""