From f8a11dbe7dcaed289de27ff203a72182a1c77f26 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Thu, 25 Jan 2024 12:44:46 +0000 Subject: [PATCH 1/3] feat(@angular/cli): add support to `bun` package manager This commit adds support to use `bun` as a package manager. Closes #26837 --- .../cli/lib/config/workspace-schema.json | 4 ++-- .../src/commands/update/schematic/schema.json | 2 +- .../cli/src/utilities/package-manager.ts | 24 ++++++++++++++++--- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/packages/angular/cli/lib/config/workspace-schema.json b/packages/angular/cli/lib/config/workspace-schema.json index 64d10f7b7225..2695b69e9215 100644 --- a/packages/angular/cli/lib/config/workspace-schema.json +++ b/packages/angular/cli/lib/config/workspace-schema.json @@ -47,7 +47,7 @@ "packageManager": { "description": "Specify which package manager tool to use.", "type": "string", - "enum": ["npm", "cnpm", "yarn", "pnpm"] + "enum": ["npm", "cnpm", "yarn", "pnpm", "bun"] }, "warnings": { "description": "Control CLI specific console warnings", @@ -101,7 +101,7 @@ "packageManager": { "description": "Specify which package manager tool to use.", "type": "string", - "enum": ["npm", "cnpm", "yarn", "pnpm"] + "enum": ["npm", "cnpm", "yarn", "pnpm", "bun"] }, "warnings": { "description": "Control CLI specific console warnings", diff --git a/packages/angular/cli/src/commands/update/schematic/schema.json b/packages/angular/cli/src/commands/update/schematic/schema.json index 9811d1a3fe9a..649d2f5db01f 100644 --- a/packages/angular/cli/src/commands/update/schematic/schema.json +++ b/packages/angular/cli/src/commands/update/schematic/schema.json @@ -57,7 +57,7 @@ "description": "The preferred package manager configuration files to use for registry settings.", "type": "string", "default": "npm", - "enum": ["npm", "yarn", "cnpm", "pnpm"] + "enum": ["npm", "yarn", "cnpm", "pnpm", "bun"] } }, "required": [] diff --git a/packages/angular/cli/src/utilities/package-manager.ts b/packages/angular/cli/src/utilities/package-manager.ts index 2290960d0fe5..74710a05df64 100644 --- a/packages/angular/cli/src/utilities/package-manager.ts +++ b/packages/angular/cli/src/utilities/package-manager.ts @@ -141,6 +141,14 @@ export class PackageManagerUtils { prefix: '--prefix', noLockfile: '--no-lockfile', }; + case PackageManager.Bun: + return { + saveDev: '--development', + install: 'add', + installAll: 'install', + prefix: '--cwd', + noLockfile: '', + }; default: return { saveDev: '--save-dev', @@ -218,6 +226,7 @@ export class PackageManagerUtils { const hasNpmLock = this.hasLockfile(PackageManager.Npm); const hasYarnLock = this.hasLockfile(PackageManager.Yarn); const hasPnpmLock = this.hasLockfile(PackageManager.Pnpm); + const hasBunLock = this.hasLockfile(PackageManager.Bun); // PERF NOTE: `this.getVersion` spawns the package a the child_process which can take around ~300ms at times. // Therefore, we should only call this method when needed. IE: don't call `this.getVersion(PackageManager.Pnpm)` unless truly needed. @@ -225,7 +234,7 @@ export class PackageManagerUtils { if (hasNpmLock) { // Has NPM lock file. - if (!hasYarnLock && !hasPnpmLock && this.getVersion(PackageManager.Npm)) { + if (!hasYarnLock && !hasPnpmLock && !hasBunLock && this.getVersion(PackageManager.Npm)) { // Only NPM lock file and NPM binary is available. return PackageManager.Npm; } @@ -237,6 +246,9 @@ export class PackageManagerUtils { } else if (hasPnpmLock && this.getVersion(PackageManager.Pnpm)) { // PNPM lock file and PNPM binary is available. return PackageManager.Pnpm; + } else if (hasBunLock && this.getVersion(PackageManager.Bun)) { + // Bun lock file and Bun binary is available. + return PackageManager.Bun; } } @@ -244,11 +256,14 @@ export class PackageManagerUtils { // Doesn't have NPM installed. const hasYarn = !!this.getVersion(PackageManager.Yarn); const hasPnpm = !!this.getVersion(PackageManager.Pnpm); + const hasBun = !!this.getVersion(PackageManager.Bun); - if (hasYarn && !hasPnpm) { + if (hasYarn && !hasPnpm && !hasBun) { return PackageManager.Yarn; - } else if (!hasYarn && hasPnpm) { + } else if (hasPnpm && !hasYarn && !hasBun) { return PackageManager.Pnpm; + } else if (hasBun && !hasYarn && !hasPnpm) { + return PackageManager.Bun; } } @@ -266,6 +281,9 @@ export class PackageManagerUtils { case PackageManager.Pnpm: lockfileName = 'pnpm-lock.yaml'; break; + case PackageManager.Bun: + lockfileName = 'bun.lockb'; + break; case PackageManager.Npm: default: lockfileName = 'package-lock.json'; From 81c4a8a51e3b87d78404c13d30f2a6af69182cda Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Thu, 25 Jan 2024 12:45:10 +0000 Subject: [PATCH 2/3] feat(@angular/create): add support to `bun` package manager This commit adds support to use `bun` as a package manager. Closes #26837 --- packages/angular/create/README.md | 6 ++++++ packages/angular/create/src/index.ts | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/angular/create/README.md b/packages/angular/create/README.md index ce573fd52580..becdfac12ffc 100644 --- a/packages/angular/create/README.md +++ b/packages/angular/create/README.md @@ -23,3 +23,9 @@ yarn create @angular [project-name] [...options] ``` pnpm create @angular [project-name] [...options] ``` + +### bun + +``` +bun create @angular [project-name] [...options] +``` diff --git a/packages/angular/create/src/index.ts b/packages/angular/create/src/index.ts index 2833649c9c61..7d4aaf280637 100644 --- a/packages/angular/create/src/index.ts +++ b/packages/angular/create/src/index.ts @@ -17,7 +17,7 @@ const hasPackageManagerArg = args.some((a) => a.startsWith('--package-manager')) if (!hasPackageManagerArg) { // Ex: yarn/1.22.18 npm/? node/v16.15.1 linux x64 const packageManager = process.env['npm_config_user_agent']?.split('/')[0]; - if (packageManager && ['npm', 'pnpm', 'yarn', 'cnpm'].includes(packageManager)) { + if (packageManager && ['npm', 'pnpm', 'yarn', 'cnpm', 'bun'].includes(packageManager)) { args.push('--package-manager', packageManager); } } From 2adde5c5b11564539dd2ac9fa896a61bf629ed6c Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Thu, 25 Jan 2024 12:45:28 +0000 Subject: [PATCH 3/3] feat(@schematics/angular): add support to `bun` package manager This commit adds support to use `bun` as a package manager. Closes #26837 --- packages/schematics/angular/ng-new/schema.json | 2 +- packages/schematics/angular/workspace/schema.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/schematics/angular/ng-new/schema.json b/packages/schematics/angular/ng-new/schema.json index 01be5be820b8..0c776b709542 100644 --- a/packages/schematics/angular/ng-new/schema.json +++ b/packages/schematics/angular/ng-new/schema.json @@ -132,7 +132,7 @@ "packageManager": { "description": "The package manager used to install dependencies.", "type": "string", - "enum": ["npm", "yarn", "pnpm", "cnpm"] + "enum": ["npm", "yarn", "pnpm", "cnpm", "bun"] }, "standalone": { "description": "Creates an application based upon the standalone API, without NgModules.", diff --git a/packages/schematics/angular/workspace/schema.json b/packages/schematics/angular/workspace/schema.json index 4944eddf14fd..426e49aefb4a 100644 --- a/packages/schematics/angular/workspace/schema.json +++ b/packages/schematics/angular/workspace/schema.json @@ -40,7 +40,7 @@ "packageManager": { "description": "The package manager used to install dependencies.", "type": "string", - "enum": ["npm", "yarn", "pnpm", "cnpm"] + "enum": ["npm", "yarn", "pnpm", "cnpm", "bun"] } }, "required": ["name", "version"]