Skip to content

Commit 363db96

Browse files
authored
feat: experimental yarn2+ support (#5701)
1 parent 1c27c2b commit 363db96

16 files changed

+211
-14
lines changed

lib/base-package-manager.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ export abstract class BasePackageManager implements INodePackageManager {
130130
protected getFlagsString(config: any, asArray: boolean): any {
131131
const array: Array<string> = [];
132132
for (const flag in config) {
133-
if (flag === "global" && this.packageManager !== "yarn") {
133+
if (flag === "global" && this.packageManager !== "yarn" && this.packageManager !== "yarn2") {
134134
array.push(`--${flag}`);
135135
array.push(`${config[flag]}`);
136136
} else if (config[flag]) {
@@ -141,7 +141,12 @@ export abstract class BasePackageManager implements INodePackageManager {
141141
flag === "gradle" ||
142142
flag === "version_info"
143143
) {
144-
array.push(` ${flag}`);
144+
if (this.packageManager === "yarn2") {
145+
array.push(`--fields ${flag}`);
146+
} else {
147+
array.push(` ${flag}`);
148+
149+
}
145150
continue;
146151
}
147152
array.push(`--${flag}`);

lib/bootstrap.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ injector.requireCommand("setup|*", "./commands/setup");
219219
injector.requirePublic("packageManager", "./package-manager");
220220
injector.requirePublic("npm", "./node-package-manager");
221221
injector.requirePublic("yarn", "./yarn-package-manager");
222+
injector.requirePublic("yarn2", "./yarn2-package-manager");
222223
injector.requirePublic("pnpm", "./pnpm-package-manager");
223224
injector.requireCommand(
224225
"package-manager|*get",

lib/commands/preview.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ export class PreviewCommand implements ICommand {
5151
installCommand = "npm install --save-dev @nativescript/preview-cli";
5252
break;
5353
case PackageManagers.yarn:
54+
case PackageManagers.yarn2:
5455
installCommand = "yarn add -D @nativescript/preview-cli";
5556
break;
5657
case PackageManagers.pnpm:

lib/common/dispatchers.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ export class CommandDispatcher implements ICommandDispatcher {
124124
updateCommand = "npm i -g nativescript";
125125
break;
126126
case PackageManagers.yarn:
127+
case PackageManagers.yarn2:
127128
updateCommand = "yarn global add nativescript";
128129
break;
129130
case PackageManagers.pnpm:

lib/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,4 +493,5 @@ export enum PackageManagers {
493493
npm = "npm",
494494
pnpm = "pnpm",
495495
yarn = "yarn",
496+
yarn2 = "yarn2",
496497
}

lib/declarations.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -663,6 +663,7 @@ interface IOptions
663663
frameworkName: string;
664664
frameworkVersion: string;
665665
yarn: string;
666+
yarn2: string;
666667
pnpm: string;
667668
ipa: string;
668669
tsc: boolean;

lib/options.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ export class Options {
136136
ts: { type: OptionType.Boolean, hasSensitiveValue: false },
137137
typescript: { type: OptionType.Boolean, hasSensitiveValue: false },
138138
yarn: { type: OptionType.Boolean, hasSensitiveValue: false },
139+
yarn2: { type: OptionType.Boolean, hasSensitiveValue: false },
139140
pnpm: { type: OptionType.Boolean, hasSensitiveValue: false },
140141
androidTypings: { type: OptionType.Boolean, hasSensitiveValue: false },
141142
bundle: { type: OptionType.String, hasSensitiveValue: false },

lib/package-installation-manager.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ export class PackageInstallationManager implements IPackageInstallationManager {
7070
versions: true,
7171
});
7272

73-
return semver.maxSatisfying(data, versionRange);
73+
return semver.maxSatisfying(data?.versions ?? data, versionRange);
7474
}
7575

7676
public async getMaxSatisfyingVersionSafe(
@@ -320,9 +320,10 @@ export class PackageInstallationManager implements IPackageInstallationManager {
320320
packageName: string,
321321
version: string
322322
): Promise<string> {
323-
const data: any = await this.$packageManager.view(packageName, {
323+
let data: any = await this.$packageManager.view(packageName, {
324324
"dist-tags": true,
325325
});
326+
data = data?.["dist-tags"] ?? data;
326327
this.$logger.trace("Using version %s. ", data[version]);
327328

328329
return data[version];

lib/package-manager.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export class PackageManager implements IPackageManager {
2626
private $npm: INodePackageManager,
2727
private $options: IOptions,
2828
private $yarn: INodePackageManager,
29+
private $yarn2: INodePackageManager,
2930
private $pnpm: INodePackageManager,
3031
private $logger: ILogger,
3132
private $userSettingsService: IUserSettingsService,
@@ -164,6 +165,9 @@ export class PackageManager implements IPackageManager {
164165
if (pm === PackageManagers.yarn || this.$options.yarn) {
165166
this._packageManagerName = PackageManagers.yarn;
166167
return this.$yarn;
168+
} if (pm === PackageManagers.yarn2 || this.$options.yarn2) {
169+
this._packageManagerName = PackageManagers.yarn2;
170+
return this.$yarn2;
167171
} else if (pm === PackageManagers.pnpm || this.$options.pnpm) {
168172
this._packageManagerName = PackageManagers.pnpm;
169173
return this.$pnpm;

lib/services/android-plugin-build-service.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
375375
const allGradleTemplateFiles = path.join(gradleTemplatePath, "*");
376376
const buildGradlePath = path.join(pluginTempDir, "build.gradle");
377377
const settingsGradlePath = path.join(pluginTempDir, "settings.gradle");
378-
378+
379379
this.$fs.copyFile(allGradleTemplateFiles, pluginTempDir);
380380
const runtimeGradleVersions = await this.getRuntimeGradleVersions(
381381
projectDir
@@ -430,12 +430,13 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
430430
let runtimeVersion: string = null;
431431

432432
try {
433-
const result = await this.$packageManager.view(
433+
let result = await this.$packageManager.view(
434434
SCOPED_ANDROID_RUNTIME_NAME,
435435
{
436436
"dist-tags": true,
437437
}
438438
);
439+
result = result?.["dist-tags"] ?? result;
439440
runtimeVersion = result.latest;
440441
} catch (err) {
441442
this.$logger.trace(
@@ -529,6 +530,7 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
529530
`${SCOPED_ANDROID_RUNTIME_NAME}@${runtimeVersion}`,
530531
{ version_info: true }
531532
);
533+
output = output?.["version_info"] ?? output;
532534

533535
if (!output) {
534536
/**
@@ -543,6 +545,7 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
543545
`${SCOPED_ANDROID_RUNTIME_NAME}@${runtimeVersion}`,
544546
{ gradle: true }
545547
);
548+
output = output?.["gradle"] ?? output;
546549

547550
const { version, android } = output;
548551

@@ -709,7 +712,9 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
709712
projectDir: pluginBuildSettings.projectDir,
710713
});
711714
pluginBuildSettings.androidToolsInfo = this.$androidToolsInfo.getToolsInfo(
712-
{ projectDir: pluginBuildSettings.projectDir }
715+
{
716+
projectDir: pluginBuildSettings.projectDir,
717+
}
713718
);
714719
}
715720

0 commit comments

Comments
 (0)