Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 58 additions & 12 deletions lib/controllers/prepare-controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,10 @@ import {
CONFIG_FILE_NAME_TS,
PACKAGE_JSON_FILE_NAME,
PLATFORMS_DIR_NAME,
PlatformTypes,
PREPARE_READY_EVENT_NAME,
SCOPED_ANDROID_RUNTIME_NAME,
SCOPED_IOS_RUNTIME_NAME,
SupportedPlatform,
TrackActionNames,
} from "../constants";
Expand All @@ -36,6 +39,7 @@ import {
IProjectDataService,
IProjectService,
} from "../definitions/project";
import { resolvePackageJSONPath } from "@rigor789/resolve-package-path";

interface IPlatformWatcherData {
hasWebpackCompilerProcess: boolean;
Expand Down Expand Up @@ -447,30 +451,72 @@ export class PrepareController extends EventEmitter {
this.$logger.info(
"Updating runtime package.json with configuration values...",
);
const nsConfig = this.$projectConfigService.readConfig(
projectData.projectDir,


const {hooks, ignoredNativeDependencies, webpackPackageName, webpackConfigPath, appResourcesPath, buildPath, appPath, ...nsConfig} = this.$projectConfigService.readConfig(
projectData.projectDir
);

const platform = platformData.platformNameLowerCase;
let installedRuntimePackageJSON;
let runtimePackageName: string;
if (platform === PlatformTypes.ios) {
runtimePackageName = projectData.nsConfig.ios?.runtimePackageName || SCOPED_IOS_RUNTIME_NAME;
} else if (platform === PlatformTypes.android) {
runtimePackageName = projectData.nsConfig.android?.runtimePackageName || SCOPED_ANDROID_RUNTIME_NAME;
}
// try reading from installed runtime first before reading from the npm registry...
const installedRuntimePackageJSONPath = resolvePackageJSONPath(
runtimePackageName,
{
paths: [projectData.projectDir],
}
);

if (installedRuntimePackageJSONPath) {
installedRuntimePackageJSON = this.$fs.readJson(
installedRuntimePackageJSONPath
);
}
const packageData: any = {
..._.pick(projectData.packageJsonData, ["name"]),
...nsConfig,
main: "bundle",
...(installedRuntimePackageJSON? {}:{})
};

if (
platformData.platformNameLowerCase === "ios" &&
packageData.ios &&
packageData.ios.discardUncaughtJsExceptions
platform === PlatformTypes.ios
) {
packageData.discardUncaughtJsExceptions =
if (installedRuntimePackageJSON) {
packageData.ios = packageData.ios || {};
packageData.ios.runtime = {
version: installedRuntimePackageJSON.version
};
}
if (packageData.ios &&
packageData.ios.discardUncaughtJsExceptions) {
packageData.discardUncaughtJsExceptions =
packageData.ios.discardUncaughtJsExceptions;
}
delete packageData.android;
}
if (
platformData.platformNameLowerCase === "android" &&
packageData.android &&
packageData.android.discardUncaughtJsExceptions
platform === PlatformTypes.android
) {
packageData.discardUncaughtJsExceptions =
packageData.android.discardUncaughtJsExceptions;
if (installedRuntimePackageJSON) {
packageData.android = packageData.android || {};
packageData.android.runtime = {
version: installedRuntimePackageJSON.version,
version_info: installedRuntimePackageJSON.version_info,
gradle:installedRuntimePackageJSON.gradle
};
}
if (packageData.android &&
packageData.android.discardUncaughtJsExceptions) {
packageData.discardUncaughtJsExceptions =
packageData.android.discardUncaughtJsExceptions;
}
delete packageData.ios;
}
let packagePath: string;
if (
Expand Down
9 changes: 9 additions & 0 deletions lib/definitions/project.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,10 @@ interface INsConfigIOS extends INsConfigPlaform {
* List packages to be included in the iOS build.
*/
SPMPackages?: Array<IOSSPMPackage>;
/**
* Custom runtime package name
*/
runtimePackageName?: string
}

interface INSConfigVisionOS extends INsConfigIOS {}
Expand Down Expand Up @@ -168,6 +172,11 @@ interface INsConfigAndroid extends INsConfigPlaform {
enableLineBreakpoints?: boolean;

enableMultithreadedJavascript?: boolean;

/**
* Custom runtime package name
*/
runtimePackageName?: string
}

interface INsConfigHooks {
Expand Down
16 changes: 9 additions & 7 deletions lib/services/android-plugin-build-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -490,10 +490,10 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {

private async getLatestRuntimeVersion(): Promise<string> {
let runtimeVersion: string = null;

const packageName = this.$projectData.nsConfig.android?.runtimePackageName || SCOPED_ANDROID_RUNTIME_NAME;
try {
let result = await this.$packageManager.view(
SCOPED_ANDROID_RUNTIME_NAME,
packageName,
{
"dist-tags": true,
}
Expand All @@ -505,7 +505,7 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
`Error while getting latest android runtime version from view command: ${err}`
);
const registryData = await this.$packageManager.getRegistryPackageData(
SCOPED_ANDROID_RUNTIME_NAME
packageName
);
runtimeVersion = registryData["dist-tags"].latest;
}
Expand All @@ -529,9 +529,10 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
};
}

const packageName = this.$projectData.nsConfig.android?.runtimePackageName || SCOPED_ANDROID_RUNTIME_NAME;
// try reading from installed runtime first before reading from the npm registry...
const installedRuntimePackageJSONPath = resolvePackageJSONPath(
SCOPED_ANDROID_RUNTIME_NAME,
packageName,
{
paths: [this.$projectData.projectDir],
}
Expand Down Expand Up @@ -584,10 +585,11 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
return localVersionInfo;
}

const packageName = this.$projectData.nsConfig.android?.runtimePackageName || SCOPED_ANDROID_RUNTIME_NAME;
// fallback to reading from npm...
try {
let output = await this.$packageManager.view(
`${SCOPED_ANDROID_RUNTIME_NAME}@${runtimeVersion}`,
`${packageName}@${runtimeVersion}`,
{ version_info: true }
);
output = output?.["version_info"] ?? output;
Expand All @@ -602,7 +604,7 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
*
*/
output = await this.$packageManager.view(
`${SCOPED_ANDROID_RUNTIME_NAME}@${runtimeVersion}`,
`${packageName}@${runtimeVersion}`,
{ gradle: true }
);
output = output?.["gradle"] ?? output;
Expand All @@ -622,7 +624,7 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
`Error while getting gradle data for android runtime from view command: ${err}`
);
const registryData = await this.$packageManager.getRegistryPackageData(
SCOPED_ANDROID_RUNTIME_NAME
packageName
);
runtimeGradleVersions = registryData.versions[runtimeVersion];
}
Expand Down
11 changes: 7 additions & 4 deletions lib/services/project-data-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ export class ProjectDataService implements IProjectDataService {
private $fs: IFileSystem,
private $staticConfig: IStaticConfig,
private $logger: ILogger,
private $projectData: IProjectData,
private $devicePlatformsConstants: Mobile.IDevicePlatformsConstants,
private $androidResourcesMigrationService: IAndroidResourcesMigrationService,
private $injector: IInjector
Expand Down Expand Up @@ -628,13 +629,15 @@ export class ProjectDataService implements IProjectDataService {
.getDependenciesFromPackageJson(projectDir)
.devDependencies.find((d) => {
if (platform === constants.PlatformTypes.ios) {
const packageName = this.$projectData.nsConfig.ios?.runtimePackageName || constants.SCOPED_IOS_RUNTIME_NAME;
return [
constants.SCOPED_IOS_RUNTIME_NAME,
packageName,
constants.TNS_IOS_RUNTIME_NAME,
].includes(d.name);
} else if (platform === constants.PlatformTypes.android) {
const packageName = this.$projectData.nsConfig.android?.runtimePackageName || constants.SCOPED_ANDROID_RUNTIME_NAME;
return [
constants.SCOPED_ANDROID_RUNTIME_NAME,
packageName,
constants.TNS_ANDROID_RUNTIME_NAME,
].includes(d.name);
} else if (platform === constants.PlatformTypes.visionos) {
Expand Down Expand Up @@ -687,12 +690,12 @@ export class ProjectDataService implements IProjectDataService {
);
if (platform === constants.PlatformTypes.ios) {
return {
name: constants.SCOPED_IOS_RUNTIME_NAME,
name: this.$projectData.nsConfig.ios?.runtimePackageName || constants.SCOPED_IOS_RUNTIME_NAME,
version: null,
};
} else if (platform === constants.PlatformTypes.android) {
return {
name: constants.SCOPED_ANDROID_RUNTIME_NAME,
name: this.$projectData.nsConfig.android?.runtimePackageName || constants.SCOPED_ANDROID_RUNTIME_NAME,
version: null,
};
} else if (platform === constants.PlatformTypes.visionos) {
Expand Down
Loading