From 98d5b3d771f7e59a68bda02960a9cd6ffeb179db Mon Sep 17 00:00:00 2001
From: jurgenhaas <juergen.haas@lakedrops.com>
Date: Thu, 27 Jun 2024 10:07:39 +0200
Subject: [PATCH] composer/plugin/drupal-environment#17 Implement default
 settings for composer.json

---
 defaults/config.json |  9 ++++-----
 src/Plugin.php       | 29 ++++++++++++++++-------------
 2 files changed, 20 insertions(+), 18 deletions(-)

diff --git a/defaults/config.json b/defaults/config.json
index d8021db..f63e599 100644
--- a/defaults/config.json
+++ b/defaults/config.json
@@ -9,17 +9,16 @@
   ],
   "allow-plugins": {
     "composer/installers": true,
-    "dealerdirect/phpcodesniffer-composer-installer": true,
     "cweagans/composer-patches": true,
+    "dealerdirect/phpcodesniffer-composer-installer": true,
     "drupal/core-composer-scaffold": true,
+    "drupal/core-vendor-hardening": true,
     "endroid/installer": true,
-    "bitegra/*": true,
     "lakedrops/*": true,
-    "php-http/discovery": false,
-    "phpstan/extension-installer": true,
     "mxr576/ddqg-composer-audit": true,
     "oomphinc/composer-installers-extender": true,
-    "drupal/core-vendor-hardening": true,
+    "php-http/discovery": false,
+    "phpstan/extension-installer": true,
     "zodiacmedia/drupal-libraries-installer": true
   }
 }
diff --git a/src/Plugin.php b/src/Plugin.php
index 48a6d49..55ab7ce 100644
--- a/src/Plugin.php
+++ b/src/Plugin.php
@@ -3,14 +3,12 @@
 namespace LakeDrops\DrupalEnvironment;
 
 use Composer\Composer;
-use Composer\Config;
 use Composer\IO\IOInterface;
 use Composer\Plugin\Capability\CommandProvider as ComposerCommandProvider;
 use Composer\Script\Event;
 use Composer\Script\ScriptEvents;
 use Drupal\Composer\Plugin\Scaffold\Handler as DrupalScaffoldHandler;
 use LakeDrops\Component\Composer\BasePlugin;
-use LakeDrops\Component\Composer\NestedArray;
 
 /**
  * Composer plugin for handling drupal scaffold.
@@ -29,20 +27,21 @@ class Plugin extends BasePlugin {
    */
   public function activate(Composer $composer, IOInterface $io): void {
     parent::activate($composer, $io);
-    $this->scaffoldHandler = new DrupalScaffoldHandler($composer, $io);
+    if (class_exists(DrupalScaffoldHandler::class)) {
+      $this->scaffoldHandler = new DrupalScaffoldHandler($composer, $io);
+    }
     $extra = $composer->getPackage()->getExtra();
     if (isset($extra['lakedrops-config-file']) || isset($extra['lakedrops-curated-file'])) {
-      $config = $composer->getConfig()->all()['config'] ?? [];
       if (isset($extra['lakedrops-config-file'])) {
-        $defaultConfig = $this->readJson('config', $extra['lakedrops-config-file'], $io);
-        $config = NestedArray::mergeDeep($defaultConfig, $config);
+        foreach ($this->readJson('config', $extra['lakedrops-config-file'], $io) as $key => $value) {
+          $composer->getConfig()->getConfigSource()->addConfigSetting($key, $value);
+        }
       }
       if (isset($extra['lakedrops-curated-file'])) {
-        $config['audit']['ignore'] = $this->readJson('audit ignore', $extra['lakedrops-curated-file'], $io);
+        $audit = $composer->getConfig()->get('audit');
+        $audit['ignore'] = $this->readJson('audit ignore', $extra['lakedrops-curated-file'], $io);
+        $composer->getConfig()->getConfigSource()->addConfigSetting('audit', $audit);
       }
-      $composerConfig = new Config();
-      $composerConfig->merge(['config' => $config]);
-      $composer->setConfig($composerConfig);
     }
 
     $extras = [
@@ -120,9 +119,13 @@ class Plugin extends BasePlugin {
    */
   protected function readJson(string $type, string $filename, IOInterface $io): array {
     $io->write('<info>Gathering ' . $type . ' from patch file.</info>');
-    $data = file_get_contents($filename);
-    $data = json_decode($data, TRUE);
-    $error = json_last_error();
+    try {
+      $data = json_decode(file_get_contents($filename), TRUE, 512, JSON_THROW_ON_ERROR);
+      $error = json_last_error();
+    }
+    catch (\JsonException) {
+      $error = JSON_ERROR_SYNTAX;
+    }
     if ($error !== 0) {
       $msg = match ($error) {
         JSON_ERROR_DEPTH => ' - Maximum stack depth exceeded',
-- 
GitLab