Skip to content

Commit

Permalink
fix: check for buildTarged attribute in ts safe way
Browse files Browse the repository at this point in the history
  • Loading branch information
daniel-sc committed Feb 21, 2024
1 parent 7547523 commit 26e3850
Show file tree
Hide file tree
Showing 5 changed files with 7 additions and 18 deletions.
3 changes: 1 addition & 2 deletions schematics/migrations/2_0_0/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {Rule, SchematicContext, SchematicsException, Tree} from '@angular-devkit/schematics';
import {updateWorkspace} from '@schematics/angular/utility/workspace';
import * as extractI18nSchema from '@angular-devkit/build-angular/src/builders/extract-i18n/schema.json';
import {buildTargetAttribute} from '../../../src/buildTargetAttribute';

function updateNpmScript(tree: Tree, logger: SchematicContext['logger']) {
const pkgPath = '/package.json';
Expand Down Expand Up @@ -29,7 +29,6 @@ export default function (): Rule {
const i18nMergeTarget = project.targets.get('extract-i18n-merge');
if (i18nMergeTarget) {
context.logger.info(`updating extract-i18n(-merge) targets for project ${projectName}..`)
const buildTargetAttribute = extractI18nSchema.properties.buildTarget ? 'buildTarget' : 'browserTarget';
const i18nTarget = {...(project.targets.get('extract-i18n') ?? {builder: 'ng-extract-i18n-merge:ng-extract-i18n-merge'})};
i18nTarget.builder = 'ng-extract-i18n-merge:ng-extract-i18n-merge';
i18nTarget.options = {
Expand Down
13 changes: 1 addition & 12 deletions schematics/ng-add/index.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,10 @@ import * as path from 'path';
import {Schema as WorkspaceOptions} from '@schematics/angular/workspace/schema';
import {Schema as ApplicationOptions, Style} from '@schematics/angular/application/schema';
import {Tree} from '@angular-devkit/schematics';
import * as extractI18nSchema from '@angular-devkit/build-angular/src/builders/extract-i18n/schema.json';
import {buildTargetAttribute} from '../../src/buildTargetAttribute';

const collectionPath = path.join(__dirname, '../collection.json');

async function getBuildTargetAttribute() {
return extractI18nSchema.properties.buildTarget ? 'buildTarget' : 'browserTarget';
}

const workspaceOptions: WorkspaceOptions = {
name: 'workspace',
newProjectRoot: 'projects',
Expand Down Expand Up @@ -51,7 +47,6 @@ describe('ngAdd', () => {
});

it('works', async () => {
const buildTargetAttribute = await getBuildTargetAttribute();
const tree = await runSchematic(runner, 'ng-add', {}, appTree);
expect(norm(tree.readContent('/angular.json'))).toContain(norm('"extract-i18n": {\n' +
' "builder": "ng-extract-i18n-merge:ng-extract-i18n-merge",\n' +
Expand All @@ -78,7 +73,6 @@ describe('ngAdd', () => {
appTree.overwrite('/angular.json', JSON.stringify(angularJson));

const tree = await runSchematic(runner, 'ng-add', {}, appTree);
const buildTargetAttribute = await getBuildTargetAttribute();
expect(norm(tree.readContent('/angular.json'))).toContain(norm('"extract-i18n": {\n' +
' "builder": "ng-extract-i18n-merge:ng-extract-i18n-merge",\n' +
' "options": {\n' +
Expand Down Expand Up @@ -111,7 +105,6 @@ describe('ngAdd', () => {
appTree.create('/src/some-path/my-messages.xlf', '<>');

const tree = await runSchematic(runner, 'ng-add', {}, appTree);
const buildTargetAttribute = await getBuildTargetAttribute();
expect(norm(tree.readContent('/angular.json'))).toContain(norm('"extract-i18n": {\n' +
' "builder": "ng-extract-i18n-merge:ng-extract-i18n-merge",\n' +
' "options": {\n' +
Expand All @@ -137,7 +130,6 @@ describe('ngAdd', () => {
appTree.overwrite('/angular.json', JSON.stringify(angularJson));

const tree = await runSchematic(runner, 'ng-add', {}, appTree);
const buildTargetAttribute = await getBuildTargetAttribute();
expect(norm(tree.readContent('/angular.json'))).toContain(norm('"extract-i18n": {\n' +
' "builder": "ng-extract-i18n-merge:ng-extract-i18n-merge",\n' +
' "options": {\n' +
Expand All @@ -159,7 +151,6 @@ describe('ngAdd', () => {
appTree.overwrite('/angular.json', JSON.stringify(angularJson));

const tree = await runSchematic(runner, 'ng-add', {}, appTree);
const buildTargetAttribute = await getBuildTargetAttribute();
expect(norm(tree.readContent('/angular.json'))).toContain(norm('"extract-i18n": {\n' +
' "builder": "ng-extract-i18n-merge:ng-extract-i18n-merge",\n' +
' "options": {\n' +
Expand Down Expand Up @@ -187,7 +178,6 @@ describe('ngAdd', () => {
appTree.overwrite('/angular.json', JSON.stringify(angularJson));

const tree = await runSchematic(runner, 'ng-add', {}, appTree);
const buildTargetAttribute = await getBuildTargetAttribute();
expect(norm(tree.readContent('/angular.json'))).toContain(norm('"extract-i18n": {\n' +
' "builder": "ng-extract-i18n-merge:ng-extract-i18n-merge",\n' +
' "options": {\n' +
Expand Down Expand Up @@ -216,7 +206,6 @@ describe('ngAdd', () => {
appTree.overwrite('/angular.json', JSON.stringify(angularJson));

const tree = await runSchematic(runner, 'ng-add', {}, appTree);
const buildTargetAttribute = await getBuildTargetAttribute();
expect(norm(tree.readContent('/angular.json'))).toContain(norm('"extract-i18n": {\n' +
' "builder": "ng-extract-i18n-merge:ng-extract-i18n-merge",\n' +
' "options": {\n' +
Expand Down
3 changes: 1 addition & 2 deletions schematics/ng-add/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {Schema} from './schema';
import {JsonArray, JsonObject, normalize, Path, relative} from '@angular-devkit/core';

import {Options} from '../../src/options';
import * as extractI18nSchema from '@angular-devkit/build-angular/src/builders/extract-i18n/schema.json';
import {buildTargetAttribute} from '../../src/buildTargetAttribute';

function getTargetFiles(i18nExtension: JsonObject | undefined): string[] {
const locales = i18nExtension?.locales ? (Object.values(i18nExtension?.locales) as JsonArray | string[] | undefined) : undefined;
Expand Down Expand Up @@ -94,7 +94,6 @@ export function ngAdd(_options: Schema): Rule {
const filesWithoutOutputPath = files?.map(f => relative(`/${outputPath}` as Path, `/${f}` as Path));

const target = projectWorkspace.targets.get('extract-i18n');
const buildTargetAttribute = extractI18nSchema.properties.buildTarget ? 'buildTarget' : 'browserTarget';
const builderOptions: Partial<Options> = {
[buildTargetAttribute]: buildTarget,
format,
Expand Down
3 changes: 3 additions & 0 deletions src/buildTargetAttribute.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import * as extractI18nSchema from '@angular-devkit/build-angular/src/builders/extract-i18n/schema.json';

export const buildTargetAttribute = (extractI18nSchema.properties as any).buildTarget ? 'buildTarget' : 'browserTarget'
3 changes: 1 addition & 2 deletions src/builder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {TranslationFile, TranslationUnit} from './model/translationFileModels';
import {Merger} from './merger';
import {Options} from './options';
import {doCollapseWhitespace} from './stringUtils';
import * as extractI18nSchema from '@angular-devkit/build-angular/src/builders/extract-i18n/schema.json';
import {buildTargetAttribute} from './buildTargetAttribute';


const STATE_INITIAL_XLF_2_0 = 'initial';
Expand Down Expand Up @@ -109,7 +109,6 @@ async function extractI18nMergeBuilder(options: Options, context: BuilderContext
const sourcePath = join(normalize(outputPath), options.sourceFile ?? 'messages.xlf');
const translationSourceFileOriginal = fromXlf(await readFileIfExists(sourcePath));

const buildTargetAttribute = extractI18nSchema.properties.buildTarget ? 'buildTarget' : 'browserTarget';
const extractI18nRun = await context.scheduleBuilder(options.builderI18n ?? '@angular-devkit/build-angular:extract-i18n', {
[buildTargetAttribute]: options.browserTarget ?? options.buildTarget,
outputPath: dirname(sourcePath),
Expand Down

0 comments on commit 26e3850

Please sign in to comment.