Skip to content

Commit

Permalink
fix(@angular/cli): retain existing EOL when updating JSON files
Browse files Browse the repository at this point in the history
This commit updates the JSON utility to retain the existing EOF when updating files.
  • Loading branch information
alan-agius4 committed Jan 5, 2024
1 parent 94082a7 commit 640a76a
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
25 changes: 25 additions & 0 deletions packages/angular/cli/src/utilities/eol.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/

import { EOL } from 'node:os';

const CRLF = '\r\n';
const LF = '\n';

export function getEOL(content: string): string {
const newlines = content.match(/(?:\r?\n)/g);

if (newlines?.length) {
const crlf = newlines.filter((l) => l === CRLF).length;
const lf = newlines.length - crlf;

return crlf > lf ? CRLF : LF;
}

return EOL;
}
5 changes: 5 additions & 0 deletions packages/angular/cli/src/utilities/json-file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,15 @@ import {
parseTree,
printParseErrorCode,
} from 'jsonc-parser';
import { getEOL } from './eol';

export type InsertionIndex = (properties: string[]) => number;
export type JSONPath = (string | number)[];

/** @internal */
export class JSONFile {
content: string;
private eol: string;

constructor(private readonly path: string) {
const buffer = readFileSync(this.path);
Expand All @@ -34,6 +36,8 @@ export class JSONFile {
} else {
throw new Error(`Could not read '${path}'.`);
}

this.eol = getEOL(this.content);
}

private _jsonAst: Node | undefined;
Expand Down Expand Up @@ -91,6 +95,7 @@ export class JSONFile {
formattingOptions: {
insertSpaces: true,
tabSize: 2,
eol: this.eol,
},
});

Expand Down

0 comments on commit 640a76a

Please sign in to comment.