Skip to content

Commit 194a783

Browse files
committed
feat: custom runtime package + info in package.json
1 parent d1930d3 commit 194a783

4 files changed

Lines changed: 83 additions & 23 deletions

File tree

lib/controllers/prepare-controller.ts

Lines changed: 58 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ import {
1818
CONFIG_FILE_NAME_TS,
1919
PACKAGE_JSON_FILE_NAME,
2020
PLATFORMS_DIR_NAME,
21+
PlatformTypes,
2122
PREPARE_READY_EVENT_NAME,
23+
SCOPED_ANDROID_RUNTIME_NAME,
24+
SCOPED_IOS_RUNTIME_NAME,
2225
SupportedPlatform,
2326
TrackActionNames,
2427
} from "../constants";
@@ -36,6 +39,7 @@ import {
3639
IProjectDataService,
3740
IProjectService,
3841
} from "../definitions/project";
42+
import { resolvePackageJSONPath } from "@rigor789/resolve-package-path";
3943

4044
interface IPlatformWatcherData {
4145
hasWebpackCompilerProcess: boolean;
@@ -447,30 +451,72 @@ export class PrepareController extends EventEmitter {
447451
this.$logger.info(
448452
"Updating runtime package.json with configuration values...",
449453
);
450-
const nsConfig = this.$projectConfigService.readConfig(
451-
projectData.projectDir,
454+
455+
456+
const {hooks, ignoredNativeDependencies, webpackPackageName, webpackConfigPath, appResourcesPath, buildPath, appPath, ...nsConfig} = this.$projectConfigService.readConfig(
457+
projectData.projectDir
458+
);
459+
460+
const platform = platformData.platformNameLowerCase;
461+
let installedRuntimePackageJSON;
462+
let runtimePackageName: string;
463+
if (platform === PlatformTypes.ios) {
464+
runtimePackageName = projectData.nsConfig.ios?.runtimePackageName || SCOPED_IOS_RUNTIME_NAME;
465+
} else if (platform === PlatformTypes.android) {
466+
runtimePackageName = projectData.nsConfig.android?.runtimePackageName || SCOPED_ANDROID_RUNTIME_NAME;
467+
}
468+
// try reading from installed runtime first before reading from the npm registry...
469+
const installedRuntimePackageJSONPath = resolvePackageJSONPath(
470+
runtimePackageName,
471+
{
472+
paths: [projectData.projectDir],
473+
}
452474
);
475+
476+
if (installedRuntimePackageJSONPath) {
477+
installedRuntimePackageJSON = this.$fs.readJson(
478+
installedRuntimePackageJSONPath
479+
);
480+
}
453481
const packageData: any = {
454482
..._.pick(projectData.packageJsonData, ["name"]),
455483
...nsConfig,
456484
main: "bundle",
485+
...(installedRuntimePackageJSON? {}:{})
457486
};
458-
459487
if (
460-
platformData.platformNameLowerCase === "ios" &&
461-
packageData.ios &&
462-
packageData.ios.discardUncaughtJsExceptions
488+
platform === PlatformTypes.ios
463489
) {
464-
packageData.discardUncaughtJsExceptions =
490+
if (installedRuntimePackageJSON) {
491+
packageData.ios = packageData.ios || {};
492+
packageData.ios.runtime = {
493+
version: installedRuntimePackageJSON.version
494+
};
495+
}
496+
if (packageData.ios &&
497+
packageData.ios.discardUncaughtJsExceptions) {
498+
packageData.discardUncaughtJsExceptions =
465499
packageData.ios.discardUncaughtJsExceptions;
500+
}
501+
delete packageData.android;
466502
}
467503
if (
468-
platformData.platformNameLowerCase === "android" &&
469-
packageData.android &&
470-
packageData.android.discardUncaughtJsExceptions
504+
platform === PlatformTypes.android
471505
) {
472-
packageData.discardUncaughtJsExceptions =
473-
packageData.android.discardUncaughtJsExceptions;
506+
if (installedRuntimePackageJSON) {
507+
packageData.android = packageData.android || {};
508+
packageData.android.runtime = {
509+
version: installedRuntimePackageJSON.version,
510+
version_info: installedRuntimePackageJSON.version_info,
511+
gradle:installedRuntimePackageJSON.gradle
512+
};
513+
}
514+
if (packageData.android &&
515+
packageData.android.discardUncaughtJsExceptions) {
516+
packageData.discardUncaughtJsExceptions =
517+
packageData.android.discardUncaughtJsExceptions;
518+
}
519+
delete packageData.ios;
474520
}
475521
let packagePath: string;
476522
if (

lib/definitions/project.d.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,10 @@ interface INsConfigIOS extends INsConfigPlaform {
130130
* List packages to be included in the iOS build.
131131
*/
132132
SPMPackages?: Array<IOSSPMPackage>;
133+
/**
134+
* Custom runtime package name
135+
*/
136+
runtimePackageName?: string
133137
}
134138

135139
interface INSConfigVisionOS extends INsConfigIOS {}
@@ -168,6 +172,11 @@ interface INsConfigAndroid extends INsConfigPlaform {
168172
enableLineBreakpoints?: boolean;
169173

170174
enableMultithreadedJavascript?: boolean;
175+
176+
/**
177+
* Custom runtime package name
178+
*/
179+
runtimePackageName?: string
171180
}
172181

173182
interface INsConfigHooks {

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

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -490,10 +490,10 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
490490

491491
private async getLatestRuntimeVersion(): Promise<string> {
492492
let runtimeVersion: string = null;
493-
493+
const packageName = this.$projectData.nsConfig.android?.runtimePackageName || SCOPED_ANDROID_RUNTIME_NAME;
494494
try {
495495
let result = await this.$packageManager.view(
496-
SCOPED_ANDROID_RUNTIME_NAME,
496+
packageName,
497497
{
498498
"dist-tags": true,
499499
}
@@ -505,7 +505,7 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
505505
`Error while getting latest android runtime version from view command: ${err}`
506506
);
507507
const registryData = await this.$packageManager.getRegistryPackageData(
508-
SCOPED_ANDROID_RUNTIME_NAME
508+
packageName
509509
);
510510
runtimeVersion = registryData["dist-tags"].latest;
511511
}
@@ -529,9 +529,10 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
529529
};
530530
}
531531

532+
const packageName = this.$projectData.nsConfig.android?.runtimePackageName || SCOPED_ANDROID_RUNTIME_NAME;
532533
// try reading from installed runtime first before reading from the npm registry...
533534
const installedRuntimePackageJSONPath = resolvePackageJSONPath(
534-
SCOPED_ANDROID_RUNTIME_NAME,
535+
packageName,
535536
{
536537
paths: [this.$projectData.projectDir],
537538
}
@@ -584,10 +585,11 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
584585
return localVersionInfo;
585586
}
586587

588+
const packageName = this.$projectData.nsConfig.android?.runtimePackageName || SCOPED_ANDROID_RUNTIME_NAME;
587589
// fallback to reading from npm...
588590
try {
589591
let output = await this.$packageManager.view(
590-
`${SCOPED_ANDROID_RUNTIME_NAME}@${runtimeVersion}`,
592+
`${packageName}@${runtimeVersion}`,
591593
{ version_info: true }
592594
);
593595
output = output?.["version_info"] ?? output;
@@ -602,7 +604,7 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
602604
*
603605
*/
604606
output = await this.$packageManager.view(
605-
`${SCOPED_ANDROID_RUNTIME_NAME}@${runtimeVersion}`,
607+
`${packageName}@${runtimeVersion}`,
606608
{ gradle: true }
607609
);
608610
output = output?.["gradle"] ?? output;
@@ -622,7 +624,7 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
622624
`Error while getting gradle data for android runtime from view command: ${err}`
623625
);
624626
const registryData = await this.$packageManager.getRegistryPackageData(
625-
SCOPED_ANDROID_RUNTIME_NAME
627+
packageName
626628
);
627629
runtimeGradleVersions = registryData.versions[runtimeVersion];
628630
}

lib/services/project-data-service.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export class ProjectDataService implements IProjectDataService {
5050
private $fs: IFileSystem,
5151
private $staticConfig: IStaticConfig,
5252
private $logger: ILogger,
53+
private $projectData: IProjectData,
5354
private $devicePlatformsConstants: Mobile.IDevicePlatformsConstants,
5455
private $androidResourcesMigrationService: IAndroidResourcesMigrationService,
5556
private $injector: IInjector
@@ -628,13 +629,15 @@ export class ProjectDataService implements IProjectDataService {
628629
.getDependenciesFromPackageJson(projectDir)
629630
.devDependencies.find((d) => {
630631
if (platform === constants.PlatformTypes.ios) {
632+
const packageName = this.$projectData.nsConfig.ios?.runtimePackageName || constants.SCOPED_IOS_RUNTIME_NAME;
631633
return [
632-
constants.SCOPED_IOS_RUNTIME_NAME,
634+
packageName,
633635
constants.TNS_IOS_RUNTIME_NAME,
634636
].includes(d.name);
635637
} else if (platform === constants.PlatformTypes.android) {
638+
const packageName = this.$projectData.nsConfig.android?.runtimePackageName || constants.SCOPED_ANDROID_RUNTIME_NAME;
636639
return [
637-
constants.SCOPED_ANDROID_RUNTIME_NAME,
640+
packageName,
638641
constants.TNS_ANDROID_RUNTIME_NAME,
639642
].includes(d.name);
640643
} else if (platform === constants.PlatformTypes.visionos) {
@@ -687,12 +690,12 @@ export class ProjectDataService implements IProjectDataService {
687690
);
688691
if (platform === constants.PlatformTypes.ios) {
689692
return {
690-
name: constants.SCOPED_IOS_RUNTIME_NAME,
693+
name: this.$projectData.nsConfig.ios?.runtimePackageName || constants.SCOPED_IOS_RUNTIME_NAME,
691694
version: null,
692695
};
693696
} else if (platform === constants.PlatformTypes.android) {
694697
return {
695-
name: constants.SCOPED_ANDROID_RUNTIME_NAME,
698+
name: this.$projectData.nsConfig.android?.runtimePackageName || constants.SCOPED_ANDROID_RUNTIME_NAME,
696699
version: null,
697700
};
698701
} else if (platform === constants.PlatformTypes.visionos) {

0 commit comments

Comments
 (0)