diff --git a/packages/angular/cli/lib/config/workspace-schema.json b/packages/angular/cli/lib/config/workspace-schema.json index f73424b5b554..d5156c96258b 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", "yarn", "pnpm", "bun"] + "enum": ["npm", "yarn", "pnpm", "bun", "aube"] }, "warnings": { "description": "Control CLI specific console warnings", @@ -101,7 +101,7 @@ "packageManager": { "description": "Specify which package manager tool to use.", "type": "string", - "enum": ["npm", "yarn", "pnpm", "bun"] + "enum": ["npm", "yarn", "pnpm", "bun", "aube"] }, "warnings": { "description": "Control CLI specific console warnings", diff --git a/packages/angular/cli/src/package-managers/discovery_spec.ts b/packages/angular/cli/src/package-managers/discovery_spec.ts index 077d5d93c604..408102285bf2 100644 --- a/packages/angular/cli/src/package-managers/discovery_spec.ts +++ b/packages/angular/cli/src/package-managers/discovery_spec.ts @@ -108,4 +108,12 @@ describe('discover', () => { const result = await discover(host, '/project'); expect(result).toBe('bun'); }); + + it('should discover the aube lockfile', async () => { + const host = new MockHost({ + '/project': ['aube-lock.yaml'], + }); + const result = await discover(host, '/project'); + expect(result).toBe('aube'); + }); }); diff --git a/packages/angular/cli/src/package-managers/package-manager-descriptor.ts b/packages/angular/cli/src/package-managers/package-manager-descriptor.ts index cad01202462d..0806419e318c 100644 --- a/packages/angular/cli/src/package-managers/package-manager-descriptor.ts +++ b/packages/angular/cli/src/package-managers/package-manager-descriptor.ts @@ -281,6 +281,31 @@ export const SUPPORTED_PACKAGE_MANAGERS = { }, isNotFound: isKnownNotFound, }, + aube: { + binary: 'aube', + lockfiles: ['aube-lock.yaml'], + addCommand: 'add', + installCommand: ['install'], + forceFlag: '--force', + saveExactFlag: '--save-exact', + saveTildeFlag: '--save-tilde', + saveDevFlag: '--save-dev', + noLockfileFlag: '', // Aube does not have a flag for this. + ignoreScriptsFlag: '--ignore-scripts', + configFiles: ['.npmrc'], + getRegistryOptions: (registry: string) => ({ args: ['--registry', registry] }), + versionCommand: ['--version'], + listDependenciesCommand: ['list', '--depth=0', '--json'], + getManifestCommand: ['view', '--json'], + viewCommandFieldArgFormatter: (fields) => [...fields], + outputParsers: { + listDependencies: parseNpmLikeDependencies, + getRegistryManifest: parseNpmLikeManifest, + getRegistryMetadata: parseNpmLikeMetadata, + getError: parseNpmLikeError, + }, + isNotFound: isKnownNotFound, + }, bun: { binary: 'bun', lockfiles: ['bun.lockb', 'bun.lock'], @@ -347,6 +372,7 @@ export const SUPPORTED_PACKAGE_MANAGERS = { export const PACKAGE_MANAGER_PRECEDENCE: readonly PackageManagerName[] = [ 'pnpm', 'yarn', + 'aube', 'bun', 'npm', ]; diff --git a/packages/angular/create/src/index.ts b/packages/angular/create/src/index.ts index 5e225fd1b1ca..c1f20234aa00 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', 'bun'].includes(packageManager)) { + if (packageManager && ['npm', 'pnpm', 'yarn', 'bun', 'aube'].includes(packageManager)) { args.push('--package-manager', packageManager); } } diff --git a/packages/schematics/angular/ng-new/schema.json b/packages/schematics/angular/ng-new/schema.json index 257628fcda9e..d048582b0f3a 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", "bun"] + "enum": ["npm", "yarn", "pnpm", "bun", "aube"] }, "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 51ec1a22e889..66171ea2a542 100644 --- a/packages/schematics/angular/workspace/schema.json +++ b/packages/schematics/angular/workspace/schema.json @@ -40,7 +40,7 @@ "packageManager": { "description": "The package manager to use for installing dependencies.", "type": "string", - "enum": ["npm", "yarn", "pnpm", "bun"], + "enum": ["npm", "yarn", "pnpm", "bun", "aube"], "$default": { "$source": "packageManager" } diff --git a/tests/e2e/utils/packages.ts b/tests/e2e/utils/packages.ts index 087d771f14b8..df07128e4e8c 100644 --- a/tests/e2e/utils/packages.ts +++ b/tests/e2e/utils/packages.ts @@ -1,5 +1,5 @@ import { getGlobalVariable } from './env'; -import { ProcessOutput, silentBun, silentNpm, silentPnpm, silentYarn } from './process'; +import { ProcessOutput, silentAube, silentBun, silentNpm, silentPnpm, silentYarn } from './process'; export interface PkgInfo { readonly name: string; @@ -7,7 +7,7 @@ export interface PkgInfo { readonly path: string; } -export function getActivePackageManager(): 'npm' | 'yarn' | 'bun' | 'pnpm' { +export function getActivePackageManager(): 'npm' | 'yarn' | 'bun' | 'pnpm' | 'aube' { return getGlobalVariable('package-manager'); } @@ -29,6 +29,9 @@ export async function installWorkspacePackages(options?: { force?: boolean }): P case 'bun': await silentBun('install'); break; + case 'aube': + await silentAube('install'); + break; } } @@ -43,6 +46,8 @@ export function installPackage(specifier: string, registry?: string): Promise { case 'pnpm': await silentPnpm('remove', name); break; + case 'aube': + await silentAube('remove', name); + break; } } catch (e) { // Yarn throws an error when trying to remove a package that is not installed. diff --git a/tests/e2e/utils/process.ts b/tests/e2e/utils/process.ts index 102acb0af65a..a2c256dd7fda 100644 --- a/tests/e2e/utils/process.ts +++ b/tests/e2e/utils/process.ts @@ -411,6 +411,10 @@ export function silentBun(...args: string[]) { return _exec({ silent: true }, 'bun', args); } +export function silentAube(...args: string[]) { + return _exec({ silent: true }, 'aube', args); +} + export function globalNpm(args: string[], env?: NodeJS.ProcessEnv) { if (!process.env.LEGACY_CLI_RUNNER) { throw new Error(