codeplay-common 4.1.0 → 4.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -12,7 +12,13 @@ Donate to get full code including many common functions
12
12
  https://ko-fi.com/codeplay
13
13
 
14
14
 
15
- Version 4.1.0
15
+ Version 4.1.3
16
+ "consentDebug": false automatically adds if not
17
+
18
+ Version 4.1.2
19
+ Speedup
20
+
21
+ Version 4.1.1
16
22
  Auto admob integration updated
17
23
 
18
24
 
@@ -14,9 +14,12 @@ const { readFileSync } = require("fs");
14
14
  const ENABLE_AUTO_UPDATE = true;
15
15
  const USE_LIVE_SERVER_VERSION = true;
16
16
 
17
- const configPath = path.join(process.cwd(), 'capacitor.config.json');
18
- const packageJsonPath = path.join(process.cwd(), 'package.json');
19
- const updateLogFile = path.join(process.cwd(), "", "plugin-update-log.txt");
17
+ const configPath = path.join(process.cwd(), 'capacitor.config.json');
18
+ const packageJsonPath = path.join(process.cwd(), 'package.json');
19
+ const updateLogFile = path.join(process.cwd(), "", "plugin-update-log.txt");
20
+ const ADMOB_NEXTGEN_FILE = "admob-emi-nextgen-1.4.js";
21
+ const ADMOB_NEXTGEN_CONFIG = "admob-ad-configuration-nextgen.json";
22
+ const ADMOB_OLD_CONFIG = "admob-ad-configuration.json";
20
23
 
21
24
  // Expected plugin list with minimum versions
22
25
  /* const requiredPlugins = [
@@ -1216,7 +1219,7 @@ function checkAndCopyResources() {
1216
1219
 
1217
1220
 
1218
1221
 
1219
- function getAdMobConfig() {
1222
+ function getAdMobConfig() {
1220
1223
  if (!fileExists(configPath)) {
1221
1224
  throw new Error('❌ capacitor.config.json not found. Ensure this is a Capacitor project.');
1222
1225
  }
@@ -1226,8 +1229,9 @@ function getAdMobConfig() {
1226
1229
  ? JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'))
1227
1230
  : {};
1228
1231
 
1229
- const legacyAdmobConfig = capacitorConfig.plugins?.AdMob || {};
1230
- const nextGenAdmobConfig = packageJson.admob || {};
1232
+ const legacyAdmobConfig = capacitorConfig.plugins?.AdMob || {};
1233
+ const nextGenAdmobConfig = packageJson.admob || {};
1234
+ const admobJsonAppIds = getAdmobJsonAppIds();
1231
1235
 
1232
1236
  if (!legacyAdmobConfig && !nextGenAdmobConfig) {
1233
1237
  throw new Error('❌ AdMob configuration is missing in package.json or capacitor.config.json.');
@@ -1241,8 +1245,8 @@ function getAdMobConfig() {
1241
1245
  return { ADMOB_ENABLED: false };
1242
1246
  }
1243
1247
 
1244
- const androidAppId = nextGenAdmobConfig.androidAppId || legacyAdmobConfig.APP_ID_ANDROID;
1245
- const iosAppId = nextGenAdmobConfig.iosAppId || legacyAdmobConfig.APP_ID_IOS;
1248
+ const androidAppId = admobJsonAppIds.androidAppId || nextGenAdmobConfig.androidAppId || legacyAdmobConfig.APP_ID_ANDROID;
1249
+ const iosAppId = admobJsonAppIds.iosAppId || nextGenAdmobConfig.iosAppId || legacyAdmobConfig.APP_ID_IOS;
1246
1250
  const userTrackingDescription =
1247
1251
  nextGenAdmobConfig.userTrackingDescription ||
1248
1252
  legacyAdmobConfig.USER_TRACKING_DESCRIPTION ||
@@ -1261,17 +1265,18 @@ function getAdMobConfig() {
1261
1265
  };
1262
1266
  }
1263
1267
 
1264
- function syncNextGenAdmobPackageJsonFromCapacitorConfig() {
1265
- if (!fileExists(configPath) || !fileExists(packageJsonPath)) {
1266
- return;
1267
- }
1268
-
1269
- const capacitorConfig = JSON.parse(fs.readFileSync(configPath, 'utf8'));
1270
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
1271
-
1272
- const legacyAdmobConfig = capacitorConfig.plugins?.AdMob || {};
1273
- const androidAppId = legacyAdmobConfig.APP_ID_ANDROID;
1274
- const iosAppId = legacyAdmobConfig.APP_ID_IOS;
1268
+ function syncNextGenAdmobPackageJsonFromCapacitorConfig() {
1269
+ if (!fileExists(configPath) || !fileExists(packageJsonPath)) {
1270
+ return;
1271
+ }
1272
+
1273
+ const capacitorConfig = JSON.parse(fs.readFileSync(configPath, 'utf8'));
1274
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
1275
+
1276
+ const legacyAdmobConfig = capacitorConfig.plugins?.AdMob || {};
1277
+ const admobJsonAppIds = getAdmobJsonAppIds();
1278
+ const androidAppId = admobJsonAppIds.androidAppId || legacyAdmobConfig.APP_ID_ANDROID;
1279
+ const iosAppId = admobJsonAppIds.iosAppId || legacyAdmobConfig.APP_ID_IOS;
1275
1280
 
1276
1281
  if (!androidAppId || !iosAppId) {
1277
1282
  return;
@@ -1319,9 +1324,11 @@ function syncNextGenAdmobPackageJsonFromCapacitorConfig() {
1319
1324
  }
1320
1325
 
1321
1326
  packageJson.admob = mergedAdmobConfig;
1322
- fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n', 'utf8');
1323
- console.log('✅ package.json AdMob settings synced from capacitor.config.json');
1324
- }
1327
+ fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n', 'utf8');
1328
+ console.log(admobJsonAppIds.androidAppId || admobJsonAppIds.iosAppId
1329
+ ? '✅ package.json AdMob settings synced from AdMob configuration JSON'
1330
+ : '✅ package.json AdMob settings synced from capacitor.config.json');
1331
+ }
1325
1332
 
1326
1333
  function validateAndroidBuildOptions() {
1327
1334
 
@@ -1607,41 +1614,54 @@ const https = require("https");
1607
1614
  /**
1608
1615
  * Check if file exists on server using HEAD request
1609
1616
  */
1610
- function urlExists(url) {
1611
- return new Promise(resolve => {
1612
- const req = https.request(url, { method: "HEAD" }, res => {
1613
- resolve(res.statusCode === 200);
1614
- });
1615
-
1616
- req.on("error", () => resolve(false));
1617
- req.end();
1618
- });
1619
- }
1617
+ function urlExists(url) {
1618
+ return new Promise(resolve => {
1619
+ const req = https.request(url, { method: "HEAD" }, res => {
1620
+ res.resume();
1621
+ resolve(res.statusCode === 200);
1622
+ });
1623
+
1624
+ req.on("error", () => resolve(false));
1625
+ req.setTimeout(8000, () => {
1626
+ req.destroy();
1627
+ resolve(false);
1628
+ });
1629
+ req.end();
1630
+ });
1631
+ }
1620
1632
 
1621
1633
  /**
1622
1634
  * Download file from server
1623
1635
  */
1624
- function downloadFile(url, dest) {
1625
- return new Promise((resolve, reject) => {
1626
- const file = fs.createWriteStream(dest);
1627
-
1628
- https.get(url, response => {
1629
- if (response.statusCode !== 200) {
1630
- reject("Download failed");
1631
- return;
1632
- }
1633
-
1634
- response.pipe(file);
1636
+ function downloadFile(url, dest) {
1637
+ return new Promise((resolve, reject) => {
1638
+ const file = fs.createWriteStream(dest);
1639
+
1640
+ const req = https.get(url, response => {
1641
+ if (response.statusCode !== 200) {
1642
+ response.resume();
1643
+ file.close(() => fs.unlink(dest, () => {}));
1644
+ reject("Download failed");
1645
+ return;
1646
+ }
1647
+
1648
+ response.pipe(file);
1635
1649
 
1636
1650
  file.on("finish", () => {
1637
1651
  file.close(resolve);
1638
1652
  });
1639
- }).on("error", err => {
1640
- fs.unlink(dest, () => {});
1641
- reject(err);
1642
- });
1643
- });
1644
- }
1653
+ }).on("error", err => {
1654
+ fs.unlink(dest, () => {});
1655
+ reject(err);
1656
+ });
1657
+
1658
+ req.setTimeout(30000, () => {
1659
+ req.destroy();
1660
+ file.close(() => fs.unlink(dest, () => {}));
1661
+ reject(new Error(`Download timed out: ${url}`));
1662
+ });
1663
+ });
1664
+ }
1645
1665
 
1646
1666
  /**
1647
1667
  * Update imports across src folder
@@ -2679,6 +2699,256 @@ const runNpmCommand = (command) => {
2679
2699
  execSync(command, { stdio: "inherit" });
2680
2700
  };
2681
2701
 
2702
+ const ADMOB_NEXTGEN_DEFAULTS = {
2703
+ VERSION: "1.6",
2704
+ ios: { nativeid: "" },
2705
+ android: { nativeid: "" },
2706
+ config: {
2707
+ bannerStartupDelayMs: "",
2708
+ interstitialStartupDelayMs: "",
2709
+ appOpenLoadOnColdStart: "",
2710
+ appOpenStartupDelayMs: "",
2711
+ useAndroidPreloadAds: true,
2712
+ useAndroidBannerPreloadAds: false,
2713
+ preloadBufferSize: 1,
2714
+ consentDebug: false
2715
+ },
2716
+ testid: {
2717
+ nativeid: "",
2718
+ nativeid_android: "ca-app-pub-3940256099942544/2247696110",
2719
+ nativeid_ios: "ca-app-pub-3940256099942544/3986624511"
2720
+ }
2721
+ };
2722
+
2723
+ function getAdmobJsonPath() {
2724
+ const adsDir = path.join(process.cwd(), "src", "js", "Ads");
2725
+ const possiblePaths = [
2726
+ path.join(adsDir, ADMOB_NEXTGEN_CONFIG),
2727
+ path.join(adsDir, ADMOB_OLD_CONFIG)
2728
+ ];
2729
+
2730
+ return possiblePaths.find(fileExists);
2731
+ }
2732
+
2733
+ function readJsonSafe(filePath) {
2734
+ try {
2735
+ return filePath && fileExists(filePath)
2736
+ ? JSON.parse(fs.readFileSync(filePath, "utf8"))
2737
+ : null;
2738
+ } catch {
2739
+ return null;
2740
+ }
2741
+ }
2742
+
2743
+ function pickFirstValue(...values) {
2744
+ return values.find(value => typeof value === "string" && value.trim() !== "") || "";
2745
+ }
2746
+
2747
+ function getAdmobJsonAppIds(config = readJsonSafe(getAdmobJsonPath())) {
2748
+ return {
2749
+ androidAppId: pickFirstValue(
2750
+ config?.androidAppId,
2751
+ config?.android_app_id,
2752
+ config?.android?.appId,
2753
+ config?.android?.appid,
2754
+ config?.android?.applicationId
2755
+ ),
2756
+ iosAppId: pickFirstValue(
2757
+ config?.iosAppId,
2758
+ config?.ios_app_id,
2759
+ config?.ios?.appId,
2760
+ config?.ios?.appid,
2761
+ config?.ios?.applicationId
2762
+ )
2763
+ };
2764
+ }
2765
+
2766
+ const mergeObjects = (template, source) => {
2767
+ if (!template || typeof template !== "object" || Array.isArray(template)) {
2768
+ return source !== undefined ? source : template;
2769
+ }
2770
+
2771
+ const output = { ...template };
2772
+
2773
+ if (!source || typeof source !== "object" || Array.isArray(source)) {
2774
+ return output;
2775
+ }
2776
+
2777
+ Object.keys(source).forEach(key => {
2778
+ if (
2779
+ template[key] &&
2780
+ typeof template[key] === "object" &&
2781
+ !Array.isArray(template[key]) &&
2782
+ source[key] &&
2783
+ typeof source[key] === "object" &&
2784
+ !Array.isArray(source[key])
2785
+ ) {
2786
+ output[key] = mergeObjects(template[key], source[key]);
2787
+ } else if (key !== "VERSION") {
2788
+ output[key] = source[key];
2789
+ }
2790
+ });
2791
+
2792
+ return output;
2793
+ };
2794
+
2795
+ const hasObjectKeys = (value) => {
2796
+ return value && typeof value === "object" && !Array.isArray(value) && Object.keys(value).length > 0;
2797
+ };
2798
+
2799
+ const buildNextgenAdmobConfigFromOldConfig = (templateConfig, existingNextgenConfig, oldConfig) => {
2800
+ const mergedConfig = mergeObjects(templateConfig, mergeObjects(existingNextgenConfig, oldConfig));
2801
+
2802
+ if (hasObjectKeys(oldConfig)) {
2803
+ if (hasObjectKeys(oldConfig.ios)) {
2804
+ mergedConfig.ios = mergeObjects(ADMOB_NEXTGEN_DEFAULTS.ios, oldConfig.ios);
2805
+ }
2806
+
2807
+ if (hasObjectKeys(oldConfig.android)) {
2808
+ mergedConfig.android = mergeObjects(ADMOB_NEXTGEN_DEFAULTS.android, oldConfig.android);
2809
+ }
2810
+
2811
+ if (hasObjectKeys(oldConfig.testid)) {
2812
+ mergedConfig.testid = mergeObjects(ADMOB_NEXTGEN_DEFAULTS.testid, oldConfig.testid);
2813
+ }
2814
+
2815
+ if (hasObjectKeys(oldConfig.IAP)) {
2816
+ mergedConfig.IAP = oldConfig.IAP;
2817
+ }
2818
+
2819
+ if (hasObjectKeys(oldConfig.config)) {
2820
+ const templateRuntimeConfig = mergeObjects(ADMOB_NEXTGEN_DEFAULTS.config, templateConfig.config || {});
2821
+ const existingRuntimeConfig = existingNextgenConfig.config || {};
2822
+ mergedConfig.config = mergeObjects(templateRuntimeConfig, mergeObjects(existingRuntimeConfig, oldConfig.config));
2823
+ }
2824
+ }
2825
+
2826
+ mergedConfig.VERSION = templateConfig.VERSION || ADMOB_NEXTGEN_DEFAULTS.VERSION;
2827
+
2828
+ return mergedConfig;
2829
+ };
2830
+
2831
+ const syncAdmobNextgenPackage = () => {
2832
+ if (!fs.existsSync(packageJsonPath)) {
2833
+ console.warn("⚠️ package.json not found. Skipping AdMob nextgen package sync.");
2834
+ return;
2835
+ }
2836
+
2837
+ if (isPackageAvailable("emi-indo-cordova-plugin-admob")) {
2838
+ runNpmCommand("npm uninstall emi-indo-cordova-plugin-admob");
2839
+ } else {
2840
+ console.log("ℹ️ emi-indo-cordova-plugin-admob is not installed.");
2841
+ }
2842
+
2843
+ if (!isPackageAvailable("capacitor-admob-nextgen")) {
2844
+ runNpmCommand("npm install capacitor-admob-nextgen");
2845
+ } else {
2846
+ console.log("ℹ️ capacitor-admob-nextgen is already installed.");
2847
+ }
2848
+ };
2849
+
2850
+ const downloadOptionalCodeplayFile = async (fileName, destPath) => {
2851
+ const url = `https://htmlcodeplay.com/code-play-plugin/${fileName}`;
2852
+
2853
+ if (!(await urlExists(url))) {
2854
+ return false;
2855
+ }
2856
+
2857
+ await downloadFile(url, destPath);
2858
+ console.log(`⬇ Downloaded → ${fileName}`);
2859
+ return true;
2860
+ };
2861
+
2862
+ const syncAdmobConfigImports = () => {
2863
+ const adsDir = path.join(process.cwd(), "src", "js", "Ads");
2864
+ if (!fs.existsSync(adsDir)) return;
2865
+
2866
+ const scan = (dir) => {
2867
+ fs.readdirSync(dir, { withFileTypes: true }).forEach(entry => {
2868
+ const fullPath = path.join(dir, entry.name);
2869
+
2870
+ if (entry.isDirectory()) {
2871
+ scan(fullPath);
2872
+ return;
2873
+ }
2874
+
2875
+ if (!/\.(js|mjs|ts|f7)$/.test(entry.name) || entry.name.endsWith(".min.js")) return;
2876
+
2877
+ let content = fs.readFileSync(fullPath, "utf8");
2878
+ if (!content.includes(ADMOB_OLD_CONFIG)) return;
2879
+
2880
+ content = content.split(ADMOB_OLD_CONFIG).join(ADMOB_NEXTGEN_CONFIG);
2881
+ fs.writeFileSync(fullPath, content, "utf8");
2882
+ console.log(`✏️ Updated AdMob config import in ${path.relative(process.cwd(), fullPath)}`);
2883
+ });
2884
+ };
2885
+
2886
+ scan(adsDir);
2887
+ };
2888
+
2889
+ const ensureAdmobNextgenFiles = async () => {
2890
+ const adsDir = path.join(process.cwd(), "src", "js", "Ads");
2891
+ if (!fs.existsSync(adsDir)) {
2892
+ console.log("ℹ️ Ads folder not found. Skipping AdMob nextgen file sync.");
2893
+ return;
2894
+ }
2895
+
2896
+ const nextgenPath = path.join(adsDir, ADMOB_NEXTGEN_FILE);
2897
+ const nextgenConfigPath = path.join(adsDir, ADMOB_NEXTGEN_CONFIG);
2898
+ const oldConfigPath = path.join(adsDir, ADMOB_OLD_CONFIG);
2899
+ const tempTemplatePath = path.join(adsDir, `${ADMOB_NEXTGEN_CONFIG}.template`);
2900
+
2901
+ if (!fs.existsSync(nextgenPath)) {
2902
+ const downloaded = await downloadOptionalCodeplayFile(ADMOB_NEXTGEN_FILE, nextgenPath);
2903
+ if (!downloaded) {
2904
+ console.error(`❌ ${ADMOB_NEXTGEN_FILE} missing and live download failed.`);
2905
+ process.exit(1);
2906
+ }
2907
+ }
2908
+
2909
+ let templateConfig = ADMOB_NEXTGEN_DEFAULTS;
2910
+
2911
+ if (await downloadOptionalCodeplayFile(ADMOB_NEXTGEN_CONFIG, tempTemplatePath)) {
2912
+ templateConfig = JSON.parse(fs.readFileSync(tempTemplatePath, "utf8"));
2913
+ fs.unlinkSync(tempTemplatePath);
2914
+ } else if (fs.existsSync(nextgenConfigPath)) {
2915
+ templateConfig = mergeObjects(ADMOB_NEXTGEN_DEFAULTS, JSON.parse(fs.readFileSync(nextgenConfigPath, "utf8")));
2916
+ }
2917
+
2918
+ const oldConfig = fs.existsSync(oldConfigPath)
2919
+ ? JSON.parse(fs.readFileSync(oldConfigPath, "utf8"))
2920
+ : {};
2921
+ const existingNextgenConfig = fs.existsSync(nextgenConfigPath)
2922
+ ? JSON.parse(fs.readFileSync(nextgenConfigPath, "utf8"))
2923
+ : {};
2924
+
2925
+ const mergedConfig = buildNextgenAdmobConfigFromOldConfig(templateConfig, existingNextgenConfig, oldConfig);
2926
+
2927
+ const capacitorConfig = readJsonSafe(configPath) || {};
2928
+ const legacyAdmobConfig = capacitorConfig.plugins?.AdMob || {};
2929
+ const mergedAppIds = getAdmobJsonAppIds(mergedConfig);
2930
+ const androidAppId = mergedAppIds.androidAppId || legacyAdmobConfig.APP_ID_ANDROID || "";
2931
+ const iosAppId = mergedAppIds.iosAppId || legacyAdmobConfig.APP_ID_IOS || "";
2932
+
2933
+ if (androidAppId && !mergedAppIds.androidAppId) {
2934
+ mergedConfig.androidAppId = androidAppId;
2935
+ }
2936
+
2937
+ if (iosAppId && !mergedAppIds.iosAppId) {
2938
+ mergedConfig.iosAppId = iosAppId;
2939
+ }
2940
+
2941
+ fs.writeFileSync(nextgenConfigPath, JSON.stringify(mergedConfig, null, 2) + "\n", "utf8");
2942
+ syncAdmobConfigImports();
2943
+ console.log("✅ AdMob nextgen files and configuration are ready.");
2944
+ };
2945
+
2946
+ const syncAdmobNextgenMigration = async () => {
2947
+ syncAdmobNextgenPackage();
2948
+ await ensureAdmobNextgenFiles();
2949
+ syncAdmobAliasInViteConfig();
2950
+ };
2951
+
2682
2952
  const syncSystemBarsSafeAreaMigration = () => {
2683
2953
  if (isPackageAvailable("@capacitor-community/safe-area")) {
2684
2954
  runNpmCommand("npm uninstall @capacitor-community/safe-area");
@@ -3250,9 +3520,10 @@ const checkAdmobConfigurationProperty=()=>{
3250
3520
 
3251
3521
 
3252
3522
  const REQUIRED_CONFIG_KEYS = [
3253
- "isKidsApp",
3254
- "isTesting",
3255
- "isConsoleLogEnabled",
3523
+ "isKidsApp",
3524
+ "isTesting",
3525
+ "consentDebug",
3526
+ "isConsoleLogEnabled",
3256
3527
  "bannerEnabled",
3257
3528
  "interstitialEnabled",
3258
3529
  "appOpenEnabled",
@@ -3368,24 +3639,9 @@ function ensureGitignoreEntry(entry) {
3368
3639
  ensureGitignoreEntry('buildCodeplay/');
3369
3640
 
3370
3641
 
3371
- // Run the validation
3372
- (async () => {
3373
-
3374
- await loadPluginVersions(); // 🔥 NEW
3375
-
3376
- syncSystemBarsSafeAreaMigration();
3377
- await checkPlugins();
3378
- syncRevenueCatIapSetup();
3379
- syncFirebaseAnalyticsSetup();
3380
- checkAndupdateDropInViteConfig();
3381
- syncAdmobAliasInViteConfig();
3382
- checkAdmobConfigurationProperty()
3383
- })();
3384
-
3385
-
3386
- // ======================================================
3387
- // Validate theme folder location (src/js/theme is NOT allowed)
3388
- // ======================================================
3642
+ // ======================================================
3643
+ // Validate theme folder location (src/js/theme is NOT allowed)
3644
+ // ======================================================
3389
3645
 
3390
3646
  function validateThemeFolderLocation() {
3391
3647
  const oldThemePath = path.join(process.cwd(), 'src', 'js', 'theme');
@@ -3415,11 +3671,7 @@ function validateThemeFolderLocation() {
3415
3671
  console.log('✅ Theme folder structure validated (src/theme).');
3416
3672
  }
3417
3673
  }
3418
- validateThemeFolderLocation()
3419
-
3420
-
3421
-
3422
- const validateAndRestoreSignDetails=()=>{
3674
+ const validateAndRestoreSignDetails=()=>{
3423
3675
 
3424
3676
  // Read config file
3425
3677
  const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
@@ -3451,18 +3703,7 @@ const validateAndRestoreSignDetails=()=>{
3451
3703
 
3452
3704
  }
3453
3705
 
3454
- validateAndRestoreSignDetails()
3455
-
3456
-
3457
- execSync('node buildCodeplay/fix-onesignal-plugin.js', { stdio: 'inherit' });
3458
-
3459
-
3460
-
3461
-
3462
-
3463
-
3464
-
3465
- //################################## SystemBars.java update for "@capacitor/android": "^8.3.0" plugin START ###############################
3706
+ //################################## SystemBars.java update for "@capacitor/android": "^8.3.0" plugin START ###############################
3466
3707
 
3467
3708
 
3468
3709
  const filePath = path.join(
@@ -3568,13 +3809,34 @@ function patchFile() {
3568
3809
  console.log("✅ SystemBars.java patched with Codeplay keyboard inset fix!");
3569
3810
  }
3570
3811
 
3571
- //patchFile();
3572
-
3573
- //################################## SystemBars.java update for "@capacitor/android": "^8.3.0" plugin END ###############################
3574
-
3575
-
3576
-
3577
-
3812
+ //patchFile();
3813
+
3814
+ //################################## SystemBars.java update for "@capacitor/android": "^8.3.0" plugin END ###############################
3815
+
3816
+ async function main() {
3817
+ validateThemeFolderLocation();
3818
+ validateAndRestoreSignDetails();
3819
+ execSync('node buildCodeplay/fix-onesignal-plugin.js', { stdio: 'inherit' });
3820
+
3821
+ await loadPluginVersions(); // 🔥 NEW
3822
+
3823
+ await syncAdmobNextgenMigration();
3824
+ syncSystemBarsSafeAreaMigration();
3825
+ await checkPlugins();
3826
+ syncRevenueCatIapSetup();
3827
+ syncFirebaseAnalyticsSetup();
3828
+ checkAndupdateDropInViteConfig();
3829
+ checkAdmobConfigurationProperty();
3830
+ }
3831
+
3832
+ main().catch(err => {
3833
+ console.error(err?.message || err);
3834
+ process.exit(1);
3835
+ });
3836
+
3837
+
3838
+
3839
+
3578
3840
  /*
3579
3841
  Release Notes
3580
3842
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeplay-common",
3
- "version": "4.1.0",
3
+ "version": "4.1.3",
4
4
  "description": "Common build scripts and files",
5
5
  "scripts": {
6
6
  "postinstall": "node scripts/sync-files.js",