From a1a1cdaf4acbf2b5c5568712d7c1b538d7c6516f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leosvel=20P=C3=A9rez=20Espinosa?= Date: Fri, 17 Feb 2023 15:17:29 +0000 Subject: [PATCH] fix(angular): support large buffers in angular cli adapter (#15082) --- packages/nx/src/adapter/ngcli-adapter.spec.ts | 11 +++++++++++ packages/nx/src/adapter/ngcli-adapter.ts | 15 +++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 packages/nx/src/adapter/ngcli-adapter.spec.ts diff --git a/packages/nx/src/adapter/ngcli-adapter.spec.ts b/packages/nx/src/adapter/ngcli-adapter.spec.ts new file mode 100644 index 0000000000..ef66325da0 --- /dev/null +++ b/packages/nx/src/adapter/ngcli-adapter.spec.ts @@ -0,0 +1,11 @@ +import { arrayBufferToString } from './ngcli-adapter'; + +describe('ngcli-adapter', () => { + it('arrayBufferToString should support large buffers', () => { + const largeString = 'a'.repeat(1000000); + + const result = arrayBufferToString(Buffer.from(largeString)); + + expect(result).toBe(largeString); + }); +}); diff --git a/packages/nx/src/adapter/ngcli-adapter.ts b/packages/nx/src/adapter/ngcli-adapter.ts index 96f39d4971..287cde58d0 100644 --- a/packages/nx/src/adapter/ngcli-adapter.ts +++ b/packages/nx/src/adapter/ngcli-adapter.ts @@ -388,8 +388,19 @@ export class NxScopedHost extends virtualFs.ScopedHost { } } -function arrayBufferToString(buffer: any) { - return String.fromCharCode.apply(null, new Uint8Array(buffer)); +export function arrayBufferToString(buffer: any) { + const array = new Uint8Array(buffer); + let result = ''; + const chunkSize = 8 * 1024; + let i = 0; + for (i = 0; i < array.length / chunkSize; i++) { + result += String.fromCharCode.apply( + null, + array.subarray(i * chunkSize, (i + 1) * chunkSize) + ); + } + result += String.fromCharCode.apply(null, array.subarray(i * chunkSize)); + return result; } export class NxScopeHostUsedForWrappedSchematics extends NxScopedHost {