Skip to content

Commit

Permalink
fix(@schematics/angular): 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.

(cherry picked from commit 1e364bd)
  • Loading branch information
alan-agius4 committed Jan 5, 2024
1 parent 9f71d2e commit 4a5e708
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 1 deletion.
25 changes: 25 additions & 0 deletions packages/schematics/angular/utility/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;
}
10 changes: 9 additions & 1 deletion packages/schematics/angular/utility/json-file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,22 @@ import {
parseTree,
printParseErrorCode,
} from 'jsonc-parser';
import { getEOL } from './eol';

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

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

constructor(private readonly host: Tree, private readonly path: string) {
constructor(
private readonly host: Tree,
private readonly path: string,
) {
this.content = this.host.readText(this.path);
this.eol = getEOL(this.content);
}

private _jsonAst: Node | undefined;
Expand Down Expand Up @@ -81,7 +87,9 @@ export class JSONFile {

const edits = modify(this.content, jsonPath, value, {
getInsertionIndex,

formattingOptions: {
eol: this.eol,
insertSpaces: true,
tabSize: 2,
},
Expand Down

0 comments on commit 4a5e708

Please sign in to comment.