Plugin Directory

Changeset 3251291


Ignore:
Timestamp:
03/05/2025 07:09:12 PM (13 months ago)
Author:
cookielegit
Message:

Update to version 1.1.0 from GitHub

Location:
cookielegit
Files:
5 added
32 edited
1 copied

Legend:

Unmodified
Added
Removed
  • cookielegit/tags/1.1.0/.distignore

    r3148254 r3251291  
    1414.travis.yml
    1515tests
     16Dockerfile
     17docker-compose.yml
     18.env
     19.env.example
     20.php-cs-fixer.*
  • cookielegit/tags/1.1.0/CHANGELOG.md

    r3149580 r3251291  
    11# Changelog
     2
     3## [1.1.0](https://github.com/WebdesignSeolab/cookie-legit/compare/v1.0.2...v1.1.0) (2025-03-05)
     4
     5
     6### Features
     7
     8* add function in setting class for single setting retrievel ([#17](https://github.com/WebdesignSeolab/cookie-legit/issues/17)) ([756d202](https://github.com/WebdesignSeolab/cookie-legit/commit/756d2028bad8401fe10b85542624f3a0febe0a04))
     9* Google Tag Manager tag integration ([#20](https://github.com/WebdesignSeolab/cookie-legit/issues/20)) ([7e500ac](https://github.com/WebdesignSeolab/cookie-legit/commit/7e500acc983a3a72e13e83b8a1479248275d7026))
    210
    311## [1.0.2](https://github.com/WebdesignSeolab/cookie-legit/compare/v1.0.1...v1.0.2) (2024-09-10)
  • cookielegit/tags/1.1.0/assets/scripts/admin.js

    r3148248 r3251291  
    1212        if(active) {
    1313            $('.row-pixel:not(.row-google_tag_manager)').addClass('hide')
     14            $('.row-google-tag').removeClass('hide')
    1415        } else {
     16            $('.row-google-tag').addClass('hide')
    1517            $('.row-pixel:not(.row-google_tag_manager)').removeClass('hide')
    1618        }
  • cookielegit/tags/1.1.0/assets/scripts/public.js

    r3148281 r3251291  
    11import CookieLegitNotice from "./public/cookielegit";
     2
     3window.cookieLegitGtmCaller = function(gtmConsentUpdate) {
     4  CookieLegitNotice.subscribe('consent-given', gtmConsentUpdate)
     5}
    26
    37jQuery(function($) {
    48
    59  const updateBlocked = function() {
    6     console.log('should update screens')
    710    $("iframe[data-cl-src]").each(function() {
    811      $(this).attr("src", $(this).attr("data-cl-src"));
     
    1518  }
    1619
    17   CookieLegitNotice.subscribe("consent-given", updateBlocked);
     20  CookieLegitNotice.subscribe('consent-given', updateBlocked);
     21
     22  let callCount = 0;
     23  CookieLegitNotice.subscribe('consent-given', function(args) {
     24    callCount++
     25
     26    console.log(`Event 'consent-given' got called ${callCount} times with args: `, args)
     27  })
    1828
    1929  window.cookieLegitNotice = new CookieLegitNotice("body", {
     
    2131    userOpt: cl_config.user_opt !== "",
    2232    baseUrl: cl_config.ajax_url,
    23     themeUrl: cl_config.themeUrl
     33    themeUrl: cl_config.themeUrl,
     34    googleTag: cl_config.googleTag !== '',
    2435  });
    2536});
  • cookielegit/tags/1.1.0/assets/scripts/public/cookielegit.js

    r3148281 r3251291  
    77  #consentedTo = [];
    88
     9  CONSENT_SETTINGS_NAME = 'cl_cus';
     10
    911  screens = ["notice", "preferences", "toggle-preferences"];
    1012
     
    1820    consentMode: false,
    1921    cookieDuration: 182,
    20     themeUrl: null
     22    themeUrl: null,
     23    googleTag: false,
     24  };
     25
     26  consentCategories = {
     27    cl_tracking: "marketingCookies",
     28    cl_marketing: "advertisingCookies",
     29    cl_essential: "essentialCookies",
    2130  };
    2231
     
    3847
    3948  buildStyle(cookieNotice) {
    40     const tag = document.createElement('link');
     49    const tag = document.createElement("link");
    4150    tag.href = this.#settings.themeUrl;
    42     tag.rel = 'stylesheet';
    43     tag.id = 'cookielegit-css';
     51    tag.rel = "stylesheet";
     52    tag.id = "cookielegit-css";
    4453
    4554    tag.onload = () => {
    46       cookieNotice.style.display = '';
    47     }
     55      cookieNotice.style.display = "";
     56    };
    4857
    4958    document.head.append(tag);
    50 
    5159  }
    5260
     
    5664      .forEach((cookie) => this.#consentedTo.push(cookie));
    5765
    58     if (this.#settings.consentMode && this.#consentedTo.length > 0) {
     66
     67    if (this.#consentedTo.length === 0) {
     68      return;
     69    }
     70   
     71    if (this.#settings.consentMode && !this.#settings.googleTag) {
    5972      this.updateGTMConsent();
    60     }
    61 
    62     if (this.#consentedTo.length > 0) {
     73     
    6374      CookieLegitNotice.#trigger('consent-given');
    64     }
     75
     76      return;
     77    }
     78
     79    const googleConsentSettings = this.getTagConsentSettings();
     80
     81    CookieLegitNotice.#trigger('consent-given', googleConsentSettings);
     82
     83    LegitCookies.create(this.CONSENT_SETTINGS_NAME, JSON.stringify(googleConsentSettings));
    6584  }
    6685
     
    7190  async insertNotice() {
    7291    let notice = await this.fetchNotice();
     92
    7393    this.#notice = document.createElement("div");
     94
    7495    this.#notice.id = "cookie-legit-notice-container";
     96
    7597    this.#notice.innerHTML = notice.html;
    76     this.#notice.style.display = 'none';
    77 
    78     let screen = this.#consentedTo.length === 0 ? "notice" : "toggle-preferences";
     98
     99    this.#notice.style.display = "none";
     100
     101    let screen =
     102      this.#consentedTo.length === 0 ? "notice" : "toggle-preferences";
     103
    79104    this.#notice.classList.add(screen);
    80105
    81106    this.#target.appendChild(this.#notice);
    82     // this.changeScreen(screen);
     107
    83108    this.setupEvents();
    84109
     
    94119      `${this.#settings.baseUrl}?action=get_cookie_notice`
    95120    );
     121
    96122    return await request.json();
    97123  }
     
    102128        .querySelector(".cookie-legit-pref-btn")
    103129        .addEventListener("click", () => this.toggleUserPreferences());
     130
    104131      this.#notice
    105132        .querySelector(".cookie-legit-save-pref-btn")
    106133        .addEventListener("click", () => this.savePreferences());
     134
    107135      this.#notice
    108136        .querySelector(".cookie-legit-accept-pref-btn")
     
    116144    this.#notice
    117145      .querySelector(".cookie-legit-preferences-change")
    118       .addEventListener("click", () => this.updatePreferences());
     146      .addEventListener("click", () => this.toggleUserPreferences());
     147
    119148    this.#notice
    120149      .querySelector(".cookie-legit-accept-btn")
     
    136165  savePreferences() {
    137166    this.changeScreen("toggle-preferences");
     167   
    138168    this.cookieNames.forEach((cookieName) => {
    139169      let value =
     
    143173      LegitCookies.create(cookieName, value, this.#settings.cookieDuration);
    144174    });
     175
    145176    this.checkConsentCookies();
    146177  }
     
    148179  updatePreferences() {
    149180    let screen = this.#settings.userOpt ? "preferences" : "notice";
     181   
    150182    this.changeScreen(screen);
    151     this.checkConsentCookies();
    152     CookieLegitNotice.#trigger('consent-updated');
     183   
     184    this.checkConsentCookies();
     185
     186    CookieLegitNotice.#trigger("consent-updated");
    153187  }
    154188
    155189  denyAllCookies() {
    156190    this.changeScreen("toggle-preferences");
     191
    157192    this.cookieNames.forEach((cookieName) => {
    158193      let value = cookieName === this.consentCookieName ? true : false;
    159194      LegitCookies.create(cookieName, value, this.#settings.cookieDuration);
    160195    });
     196
    161197    this.checkConsentCookies();
    162198  }
     
    166202      (screen) => screen !== activeScreen
    167203    );
     204
    168205    this.#notice.classList.remove(...inactiveScreens);
     206
    169207    this.#notice.classList.add(activeScreen);
    170208  }
     
    180218
    181219  async maybeInjectScripts() {
    182     if (!this.#settings.userOpt || LegitCookies.find(this.consentCookieName) !== 'true') return;
     220    if (
     221      !this.#settings.userOpt ||
     222      LegitCookies.find(this.consentCookieName) !== "true"
     223    ) {
     224      return;
     225    }
     226
    183227    let scriptReq = await fetch(
    184228      `${this.#settings.baseUrl}?action=get_tracking_scripts`
     
    186230
    187231    let scriptsWithPlacement = await scriptReq.json();
     232   
    188233    for (const placement in scriptsWithPlacement) {
    189234      if (Object.hasOwnProperty.call(scriptsWithPlacement, placement)) {
     235       
    190236        const scripts = scriptsWithPlacement[placement];
    191         Object.values(scripts).forEach(script => {
     237       
     238        Object.values(scripts).forEach((script) => {
     239       
    192240          if (!this.isJSON(script)) {
    193241            let tag = this.buildScript(placement, script);
     242       
    194243            document.querySelector(placement).append(tag);
    195244          } else {
    196245            script = JSON.parse(script);
     246       
    197247            for (const stype in script) {
     248       
    198249              if (Object.hasOwnProperty.call(script, stype)) {
    199250                const contents = script[stype];
    200                 contents.forEach(content => {
    201                   let tag = this.buildScript(placement, content, stype === 'srcs');
     251
     252                contents.forEach((content) => {
     253                  let tag = this.buildScript(
     254                    placement,
     255                    content,
     256                    stype === "srcs"
     257                  );
     258
    202259                  document.querySelector(placement).append(tag);
    203                 })
     260                });
    204261              }
    205262            }
     
    219276      0: "consent",
    220277      1: "update",
    221       2: this.getGTMConsentObject()
     278      2: this.getGTMConsentObject(),
    222279    });
    223280  }
     
    242299          : "denied",
    243300      security_storage: "granted",
    244     }
     301    };
    245302  }
    246303
    247304  isJSON(objectString) {
    248305    try {
    249       let json = JSON.parse(objectString)
     306      let json = JSON.parse(objectString);
    250307    } catch (e) {
    251308      return false;
     
    256313
    257314  buildScript(placement, scriptContent, isSrc = false) {
    258     let tagName = placement === 'head' ? 'script' : 'noscript';
     315    let tagName = placement === "head" ? "script" : "noscript";
    259316    let tag = document.createElement(tagName);
    260317
     
    268325  }
    269326
     327  getTagConsentSettings() {
     328    const consentSettings = {};
     329
     330    this.#consentedTo.forEach( consented => {
     331      if (consented.name in this.consentCategories) {
     332        consentSettings[this.consentCategories[consented.name]] = consented.value === "true";
     333      }
     334    });
     335
     336    return consentSettings;
     337  }
     338
    270339  static subscribe(event, callback) {
    271     if (!this.#events[event])
     340    if (!this.#events[event]) {
    272341      return console.warn(
    273342        `Cannot subscribe to ${event} because it does not exist!`
    274343      );
    275     if (typeof callback !== "function")
     344    }
     345
     346    if (typeof callback !== "function") {
    276347      return console.warn(
    277348        `Expected callback for ${event} got ${typeof callback}`
    278349      );
     350    }
     351
    279352    this.#events[event].push(callback);
    280353  }
    281354
    282   static #trigger(event) {
     355  static #trigger(event, ...args) {
    283356    const callbacks = this.#events[event];
    284357
    285     if (!callbacks) return console.warn(`Cannot trigger ${event} because it does not exist!`);
     358    if (!callbacks)
     359      return console.warn(`Cannot trigger ${event} because it does not exist!`);
    286360
    287361    for (let callback of callbacks) {
    288       callback();
     362      callback(...args);
    289363    }
    290364  }
  • cookielegit/tags/1.1.0/composer.json

    r3148248 r3251291  
    99        "szepeviktor/phpstan-wordpress": "dev-master",
    1010        "wp-coding-standards/wpcs": "^3.0",
    11         "phpstan/extension-installer": "1.4.x-dev"
     11        "phpstan/extension-installer": "1.4.x-dev",
     12        "friendsofphp/php-cs-fixer": "dev-master"
    1213    },
    1314    "license": "GPL-3.0",
     
    2122            "name": "Cookie Legit",
    2223            "email": "devs@cookielegit.site"
     24        },
     25        {
     26            "name": "Duco Drupsteen",
     27            "email": "duco@ducduc.nl"
    2328        }
    2429    ],
  • cookielegit/tags/1.1.0/composer.lock

    r3148248 r3251291  
    55        "This file is @generated automatically"
    66    ],
    7     "content-hash": "e0db033eea721e161c8bae85bef572d4",
     7    "content-hash": "e85cbf755d5b1738dc56184df147b860",
    88    "packages": [],
    99    "packages-dev": [
     10        {
     11            "name": "clue/ndjson-react",
     12            "version": "1.x-dev",
     13            "source": {
     14                "type": "git",
     15                "url": "https://github.com/clue/reactphp-ndjson.git",
     16                "reference": "8fc557eaa902e4f1de171b5b4eaa6246fbe4118e"
     17            },
     18            "dist": {
     19                "type": "zip",
     20                "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/8fc557eaa902e4f1de171b5b4eaa6246fbe4118e",
     21                "reference": "8fc557eaa902e4f1de171b5b4eaa6246fbe4118e",
     22                "shasum": ""
     23            },
     24            "require": {
     25                "php": ">=5.3",
     26                "react/stream": "^1.2"
     27            },
     28            "require-dev": {
     29                "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
     30                "react/event-loop": "^1.2"
     31            },
     32            "default-branch": true,
     33            "type": "library",
     34            "autoload": {
     35                "psr-4": {
     36                    "Clue\\React\\NDJson\\": "src/"
     37                }
     38            },
     39            "notification-url": "https://packagist.org/downloads/",
     40            "license": [
     41                "MIT"
     42            ],
     43            "authors": [
     44                {
     45                    "name": "Christian Lück",
     46                    "email": "christian@clue.engineering"
     47                }
     48            ],
     49            "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.",
     50            "homepage": "https://github.com/clue/reactphp-ndjson",
     51            "keywords": [
     52                "NDJSON",
     53                "json",
     54                "jsonlines",
     55                "newline",
     56                "reactphp",
     57                "streaming"
     58            ],
     59            "support": {
     60                "issues": "https://github.com/clue/reactphp-ndjson/issues",
     61                "source": "https://github.com/clue/reactphp-ndjson/tree/1.x"
     62            },
     63            "funding": [
     64                {
     65                    "url": "https://clue.engineering/support",
     66                    "type": "custom"
     67                },
     68                {
     69                    "url": "https://github.com/clue",
     70                    "type": "github"
     71                }
     72            ],
     73            "time": "2023-11-24T09:04:50+00:00"
     74        },
     75        {
     76            "name": "composer/pcre",
     77            "version": "dev-main",
     78            "source": {
     79                "type": "git",
     80                "url": "https://github.com/composer/pcre.git",
     81                "reference": "deb3871d20d5012eb5faa5a9caa71c44f151db49"
     82            },
     83            "dist": {
     84                "type": "zip",
     85                "url": "https://api.github.com/repos/composer/pcre/zipball/deb3871d20d5012eb5faa5a9caa71c44f151db49",
     86                "reference": "deb3871d20d5012eb5faa5a9caa71c44f151db49",
     87                "shasum": ""
     88            },
     89            "require": {
     90                "php": "^7.4 || ^8.0"
     91            },
     92            "conflict": {
     93                "phpstan/phpstan": "<1.11.10"
     94            },
     95            "require-dev": {
     96                "phpstan/phpstan": "^1.12 || ^2",
     97                "phpstan/phpstan-deprecation-rules": "^1 || ^2",
     98                "phpstan/phpstan-strict-rules": "^1 || ^2",
     99                "phpunit/phpunit": "^8 || ^9"
     100            },
     101            "default-branch": true,
     102            "type": "library",
     103            "extra": {
     104                "phpstan": {
     105                    "includes": [
     106                        "extension.neon"
     107                    ]
     108                },
     109                "branch-alias": {
     110                    "dev-main": "3.x-dev"
     111                }
     112            },
     113            "autoload": {
     114                "psr-4": {
     115                    "Composer\\Pcre\\": "src"
     116                }
     117            },
     118            "notification-url": "https://packagist.org/downloads/",
     119            "license": [
     120                "MIT"
     121            ],
     122            "authors": [
     123                {
     124                    "name": "Jordi Boggiano",
     125                    "email": "j.boggiano@seld.be",
     126                    "homepage": "http://seld.be"
     127                }
     128            ],
     129            "description": "PCRE wrapping library that offers type-safe preg_* replacements.",
     130            "keywords": [
     131                "PCRE",
     132                "preg",
     133                "regex",
     134                "regular expression"
     135            ],
     136            "support": {
     137                "issues": "https://github.com/composer/pcre/issues",
     138                "source": "https://github.com/composer/pcre/tree/main"
     139            },
     140            "funding": [
     141                {
     142                    "url": "https://packagist.com",
     143                    "type": "custom"
     144                },
     145                {
     146                    "url": "https://github.com/composer",
     147                    "type": "github"
     148                },
     149                {
     150                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
     151                    "type": "tidelift"
     152                }
     153            ],
     154            "time": "2024-11-20T09:10:58+00:00"
     155        },
     156        {
     157            "name": "composer/semver",
     158            "version": "dev-main",
     159            "source": {
     160                "type": "git",
     161                "url": "https://github.com/composer/semver.git",
     162                "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12"
     163            },
     164            "dist": {
     165                "type": "zip",
     166                "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
     167                "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
     168                "shasum": ""
     169            },
     170            "require": {
     171                "php": "^5.3.2 || ^7.0 || ^8.0"
     172            },
     173            "require-dev": {
     174                "phpstan/phpstan": "^1.11",
     175                "symfony/phpunit-bridge": "^3 || ^7"
     176            },
     177            "default-branch": true,
     178            "type": "library",
     179            "extra": {
     180                "branch-alias": {
     181                    "dev-main": "3.x-dev"
     182                }
     183            },
     184            "autoload": {
     185                "psr-4": {
     186                    "Composer\\Semver\\": "src"
     187                }
     188            },
     189            "notification-url": "https://packagist.org/downloads/",
     190            "license": [
     191                "MIT"
     192            ],
     193            "authors": [
     194                {
     195                    "name": "Nils Adermann",
     196                    "email": "naderman@naderman.de",
     197                    "homepage": "http://www.naderman.de"
     198                },
     199                {
     200                    "name": "Jordi Boggiano",
     201                    "email": "j.boggiano@seld.be",
     202                    "homepage": "http://seld.be"
     203                },
     204                {
     205                    "name": "Rob Bast",
     206                    "email": "rob.bast@gmail.com",
     207                    "homepage": "http://robbast.nl"
     208                }
     209            ],
     210            "description": "Semver library that offers utilities, version constraint parsing and validation.",
     211            "keywords": [
     212                "semantic",
     213                "semver",
     214                "validation",
     215                "versioning"
     216            ],
     217            "support": {
     218                "irc": "ircs://irc.libera.chat:6697/composer",
     219                "issues": "https://github.com/composer/semver/issues",
     220                "source": "https://github.com/composer/semver/tree/3.4.3"
     221            },
     222            "funding": [
     223                {
     224                    "url": "https://packagist.com",
     225                    "type": "custom"
     226                },
     227                {
     228                    "url": "https://github.com/composer",
     229                    "type": "github"
     230                },
     231                {
     232                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
     233                    "type": "tidelift"
     234                }
     235            ],
     236            "time": "2024-09-19T14:15:21+00:00"
     237        },
     238        {
     239            "name": "composer/xdebug-handler",
     240            "version": "3.0.5",
     241            "source": {
     242                "type": "git",
     243                "url": "https://github.com/composer/xdebug-handler.git",
     244                "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef"
     245            },
     246            "dist": {
     247                "type": "zip",
     248                "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef",
     249                "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef",
     250                "shasum": ""
     251            },
     252            "require": {
     253                "composer/pcre": "^1 || ^2 || ^3",
     254                "php": "^7.2.5 || ^8.0",
     255                "psr/log": "^1 || ^2 || ^3"
     256            },
     257            "require-dev": {
     258                "phpstan/phpstan": "^1.0",
     259                "phpstan/phpstan-strict-rules": "^1.1",
     260                "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5"
     261            },
     262            "type": "library",
     263            "autoload": {
     264                "psr-4": {
     265                    "Composer\\XdebugHandler\\": "src"
     266                }
     267            },
     268            "notification-url": "https://packagist.org/downloads/",
     269            "license": [
     270                "MIT"
     271            ],
     272            "authors": [
     273                {
     274                    "name": "John Stevenson",
     275                    "email": "john-stevenson@blueyonder.co.uk"
     276                }
     277            ],
     278            "description": "Restarts a process without Xdebug.",
     279            "keywords": [
     280                "Xdebug",
     281                "performance"
     282            ],
     283            "support": {
     284                "irc": "ircs://irc.libera.chat:6697/composer",
     285                "issues": "https://github.com/composer/xdebug-handler/issues",
     286                "source": "https://github.com/composer/xdebug-handler/tree/3.0.5"
     287            },
     288            "funding": [
     289                {
     290                    "url": "https://packagist.com",
     291                    "type": "custom"
     292                },
     293                {
     294                    "url": "https://github.com/composer",
     295                    "type": "github"
     296                },
     297                {
     298                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
     299                    "type": "tidelift"
     300                }
     301            ],
     302            "time": "2024-05-06T16:37:16+00:00"
     303        },
    10304        {
    11305            "name": "dealerdirect/phpcodesniffer-composer-installer",
     
    156450            ],
    157451            "time": "2024-06-20T19:34:15+00:00"
     452        },
     453        {
     454            "name": "evenement/evenement",
     455            "version": "v3.0.2",
     456            "source": {
     457                "type": "git",
     458                "url": "https://github.com/igorw/evenement.git",
     459                "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc"
     460            },
     461            "dist": {
     462                "type": "zip",
     463                "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc",
     464                "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc",
     465                "shasum": ""
     466            },
     467            "require": {
     468                "php": ">=7.0"
     469            },
     470            "require-dev": {
     471                "phpunit/phpunit": "^9 || ^6"
     472            },
     473            "type": "library",
     474            "autoload": {
     475                "psr-4": {
     476                    "Evenement\\": "src/"
     477                }
     478            },
     479            "notification-url": "https://packagist.org/downloads/",
     480            "license": [
     481                "MIT"
     482            ],
     483            "authors": [
     484                {
     485                    "name": "Igor Wiedler",
     486                    "email": "igor@wiedler.ch"
     487                }
     488            ],
     489            "description": "Événement is a very simple event dispatching library for PHP",
     490            "keywords": [
     491                "event-dispatcher",
     492                "event-emitter"
     493            ],
     494            "support": {
     495                "issues": "https://github.com/igorw/evenement/issues",
     496                "source": "https://github.com/igorw/evenement/tree/v3.0.2"
     497            },
     498            "time": "2023-08-08T05:53:35+00:00"
     499        },
     500        {
     501            "name": "fidry/cpu-core-counter",
     502            "version": "1.2.0",
     503            "source": {
     504                "type": "git",
     505                "url": "https://github.com/theofidry/cpu-core-counter.git",
     506                "reference": "8520451a140d3f46ac33042715115e290cf5785f"
     507            },
     508            "dist": {
     509                "type": "zip",
     510                "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f",
     511                "reference": "8520451a140d3f46ac33042715115e290cf5785f",
     512                "shasum": ""
     513            },
     514            "require": {
     515                "php": "^7.2 || ^8.0"
     516            },
     517            "require-dev": {
     518                "fidry/makefile": "^0.2.0",
     519                "fidry/php-cs-fixer-config": "^1.1.2",
     520                "phpstan/extension-installer": "^1.2.0",
     521                "phpstan/phpstan": "^1.9.2",
     522                "phpstan/phpstan-deprecation-rules": "^1.0.0",
     523                "phpstan/phpstan-phpunit": "^1.2.2",
     524                "phpstan/phpstan-strict-rules": "^1.4.4",
     525                "phpunit/phpunit": "^8.5.31 || ^9.5.26",
     526                "webmozarts/strict-phpunit": "^7.5"
     527            },
     528            "type": "library",
     529            "autoload": {
     530                "psr-4": {
     531                    "Fidry\\CpuCoreCounter\\": "src/"
     532                }
     533            },
     534            "notification-url": "https://packagist.org/downloads/",
     535            "license": [
     536                "MIT"
     537            ],
     538            "authors": [
     539                {
     540                    "name": "Théo FIDRY",
     541                    "email": "theo.fidry@gmail.com"
     542                }
     543            ],
     544            "description": "Tiny utility to get the number of CPU cores.",
     545            "keywords": [
     546                "CPU",
     547                "core"
     548            ],
     549            "support": {
     550                "issues": "https://github.com/theofidry/cpu-core-counter/issues",
     551                "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0"
     552            },
     553            "funding": [
     554                {
     555                    "url": "https://github.com/theofidry",
     556                    "type": "github"
     557                }
     558            ],
     559            "time": "2024-08-06T10:04:20+00:00"
     560        },
     561        {
     562            "name": "friendsofphp/php-cs-fixer",
     563            "version": "dev-master",
     564            "source": {
     565                "type": "git",
     566                "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
     567                "reference": "de9c8c6fcd7092158636d93def0067abdade87ab"
     568            },
     569            "dist": {
     570                "type": "zip",
     571                "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/de9c8c6fcd7092158636d93def0067abdade87ab",
     572                "reference": "de9c8c6fcd7092158636d93def0067abdade87ab",
     573                "shasum": ""
     574            },
     575            "require": {
     576                "clue/ndjson-react": "^1.0",
     577                "composer/semver": "^3.4",
     578                "composer/xdebug-handler": "^3.0.3",
     579                "ext-filter": "*",
     580                "ext-json": "*",
     581                "ext-tokenizer": "*",
     582                "fidry/cpu-core-counter": "^1.2",
     583                "php": "^7.4 || ^8.0",
     584                "react/child-process": "^0.6.5",
     585                "react/event-loop": "^1.0",
     586                "react/promise": "^2.0 || ^3.0",
     587                "react/socket": "^1.0",
     588                "react/stream": "^1.0",
     589                "sebastian/diff": "^4.0 || ^5.1 || ^6.0 || ^7.0",
     590                "symfony/console": "^5.4 || ^6.4 || ^7.0",
     591                "symfony/event-dispatcher": "^5.4 || ^6.4 || ^7.0",
     592                "symfony/filesystem": "^5.4 || ^6.4 || ^7.0",
     593                "symfony/finder": "^5.4 || ^6.4 || ^7.0",
     594                "symfony/options-resolver": "^5.4 || ^6.4 || ^7.0",
     595                "symfony/polyfill-mbstring": "^1.31",
     596                "symfony/polyfill-php80": "^1.31",
     597                "symfony/polyfill-php81": "^1.31",
     598                "symfony/process": "^5.4 || ^6.4 || ^7.2",
     599                "symfony/stopwatch": "^5.4 || ^6.4 || ^7.0"
     600            },
     601            "require-dev": {
     602                "facile-it/paraunit": "^1.3.1 || ^2.5",
     603                "infection/infection": "^0.29.10",
     604                "justinrainbow/json-schema": "^5.3 || ^6.0",
     605                "keradus/cli-executor": "^2.1",
     606                "mikey179/vfsstream": "^1.6.12",
     607                "php-coveralls/php-coveralls": "^2.7",
     608                "php-cs-fixer/accessible-object": "^1.1",
     609                "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6",
     610                "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6",
     611                "phpunit/phpunit": "^9.6.22 || ^10.5.45 || ^11.5.7",
     612                "symfony/var-dumper": "^5.4.48 || ^6.4.18 || ^7.2.0",
     613                "symfony/yaml": "^5.4.45 || ^6.4.18 || ^7.2.0"
     614            },
     615            "suggest": {
     616                "ext-dom": "For handling output formats in XML",
     617                "ext-mbstring": "For handling non-UTF8 characters."
     618            },
     619            "default-branch": true,
     620            "bin": [
     621                "php-cs-fixer"
     622            ],
     623            "type": "application",
     624            "autoload": {
     625                "psr-4": {
     626                    "PhpCsFixer\\": "src/"
     627                },
     628                "exclude-from-classmap": [
     629                    "src/Fixer/Internal/*"
     630                ]
     631            },
     632            "notification-url": "https://packagist.org/downloads/",
     633            "license": [
     634                "MIT"
     635            ],
     636            "authors": [
     637                {
     638                    "name": "Fabien Potencier",
     639                    "email": "fabien@symfony.com"
     640                },
     641                {
     642                    "name": "Dariusz Rumiński",
     643                    "email": "dariusz.ruminski@gmail.com"
     644                }
     645            ],
     646            "description": "A tool to automatically fix PHP code style",
     647            "keywords": [
     648                "Static code analysis",
     649                "fixer",
     650                "standards",
     651                "static analysis"
     652            ],
     653            "support": {
     654                "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
     655                "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/master"
     656            },
     657            "funding": [
     658                {
     659                    "url": "https://github.com/keradus",
     660                    "type": "github"
     661                }
     662            ],
     663            "time": "2025-02-15T22:46:01+00:00"
    158664        },
    159665        {
     
    11371643        },
    11381644        {
     1645            "name": "psr/container",
     1646            "version": "dev-master",
     1647            "source": {
     1648                "type": "git",
     1649                "url": "https://github.com/php-fig/container.git",
     1650                "reference": "707984727bd5b2b670e59559d3ed2500240cf875"
     1651            },
     1652            "dist": {
     1653                "type": "zip",
     1654                "url": "https://api.github.com/repos/php-fig/container/zipball/707984727bd5b2b670e59559d3ed2500240cf875",
     1655                "reference": "707984727bd5b2b670e59559d3ed2500240cf875",
     1656                "shasum": ""
     1657            },
     1658            "require": {
     1659                "php": ">=7.4.0"
     1660            },
     1661            "default-branch": true,
     1662            "type": "library",
     1663            "extra": {
     1664                "branch-alias": {
     1665                    "dev-master": "2.0.x-dev"
     1666                }
     1667            },
     1668            "autoload": {
     1669                "psr-4": {
     1670                    "Psr\\Container\\": "src/"
     1671                }
     1672            },
     1673            "notification-url": "https://packagist.org/downloads/",
     1674            "license": [
     1675                "MIT"
     1676            ],
     1677            "authors": [
     1678                {
     1679                    "name": "PHP-FIG",
     1680                    "homepage": "https://www.php-fig.org/"
     1681                }
     1682            ],
     1683            "description": "Common Container Interface (PHP FIG PSR-11)",
     1684            "homepage": "https://github.com/php-fig/container",
     1685            "keywords": [
     1686                "PSR-11",
     1687                "container",
     1688                "container-interface",
     1689                "container-interop",
     1690                "psr"
     1691            ],
     1692            "support": {
     1693                "issues": "https://github.com/php-fig/container/issues",
     1694                "source": "https://github.com/php-fig/container"
     1695            },
     1696            "time": "2023-09-22T11:11:30+00:00"
     1697        },
     1698        {
     1699            "name": "psr/event-dispatcher",
     1700            "version": "dev-master",
     1701            "source": {
     1702                "type": "git",
     1703                "url": "https://github.com/php-fig/event-dispatcher.git",
     1704                "reference": "bbd9eacc080d33861e5b5c75b3b8c4d7e6d01874"
     1705            },
     1706            "dist": {
     1707                "type": "zip",
     1708                "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/bbd9eacc080d33861e5b5c75b3b8c4d7e6d01874",
     1709                "reference": "bbd9eacc080d33861e5b5c75b3b8c4d7e6d01874",
     1710                "shasum": ""
     1711            },
     1712            "require": {
     1713                "php": ">=7.2.0"
     1714            },
     1715            "suggest": {
     1716                "fig/event-dispatcher-util": "Provides some useful PSR-14 utilities"
     1717            },
     1718            "default-branch": true,
     1719            "type": "library",
     1720            "extra": {
     1721                "branch-alias": {
     1722                    "dev-master": "1.0.x-dev"
     1723                }
     1724            },
     1725            "autoload": {
     1726                "psr-4": {
     1727                    "Psr\\EventDispatcher\\": "src/"
     1728                }
     1729            },
     1730            "notification-url": "https://packagist.org/downloads/",
     1731            "license": [
     1732                "MIT"
     1733            ],
     1734            "authors": [
     1735                {
     1736                    "name": "PHP-FIG",
     1737                    "homepage": "https://www.php-fig.org/"
     1738                }
     1739            ],
     1740            "description": "Standard interfaces for event handling.",
     1741            "keywords": [
     1742                "events",
     1743                "psr",
     1744                "psr-14"
     1745            ],
     1746            "support": {
     1747                "source": "https://github.com/php-fig/event-dispatcher"
     1748            },
     1749            "time": "2024-03-17T21:29:03+00:00"
     1750        },
     1751        {
     1752            "name": "psr/log",
     1753            "version": "dev-master",
     1754            "source": {
     1755                "type": "git",
     1756                "url": "https://github.com/php-fig/log.git",
     1757                "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
     1758            },
     1759            "dist": {
     1760                "type": "zip",
     1761                "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
     1762                "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
     1763                "shasum": ""
     1764            },
     1765            "require": {
     1766                "php": ">=8.0.0"
     1767            },
     1768            "default-branch": true,
     1769            "type": "library",
     1770            "extra": {
     1771                "branch-alias": {
     1772                    "dev-master": "3.x-dev"
     1773                }
     1774            },
     1775            "autoload": {
     1776                "psr-4": {
     1777                    "Psr\\Log\\": "src"
     1778                }
     1779            },
     1780            "notification-url": "https://packagist.org/downloads/",
     1781            "license": [
     1782                "MIT"
     1783            ],
     1784            "authors": [
     1785                {
     1786                    "name": "PHP-FIG",
     1787                    "homepage": "https://www.php-fig.org/"
     1788                }
     1789            ],
     1790            "description": "Common interface for logging libraries",
     1791            "homepage": "https://github.com/php-fig/log",
     1792            "keywords": [
     1793                "log",
     1794                "psr",
     1795                "psr-3"
     1796            ],
     1797            "support": {
     1798                "source": "https://github.com/php-fig/log/tree/3.0.2"
     1799            },
     1800            "time": "2024-09-11T13:17:53+00:00"
     1801        },
     1802        {
     1803            "name": "react/cache",
     1804            "version": "1.x-dev",
     1805            "source": {
     1806                "type": "git",
     1807                "url": "https://github.com/reactphp/cache.git",
     1808                "reference": "36c51f36d5f3c23cfcc2b5dc5e443bb5ff085605"
     1809            },
     1810            "dist": {
     1811                "type": "zip",
     1812                "url": "https://api.github.com/repos/reactphp/cache/zipball/36c51f36d5f3c23cfcc2b5dc5e443bb5ff085605",
     1813                "reference": "36c51f36d5f3c23cfcc2b5dc5e443bb5ff085605",
     1814                "shasum": ""
     1815            },
     1816            "require": {
     1817                "php": ">=5.3.0",
     1818                "react/promise": "^3.0 || ^2.0 || ^1.1"
     1819            },
     1820            "require-dev": {
     1821                "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
     1822            },
     1823            "default-branch": true,
     1824            "type": "library",
     1825            "autoload": {
     1826                "psr-4": {
     1827                    "React\\Cache\\": "src/"
     1828                }
     1829            },
     1830            "notification-url": "https://packagist.org/downloads/",
     1831            "license": [
     1832                "MIT"
     1833            ],
     1834            "authors": [
     1835                {
     1836                    "name": "Christian Lück",
     1837                    "email": "christian@clue.engineering",
     1838                    "homepage": "https://clue.engineering/"
     1839                },
     1840                {
     1841                    "name": "Cees-Jan Kiewiet",
     1842                    "email": "reactphp@ceesjankiewiet.nl",
     1843                    "homepage": "https://wyrihaximus.net/"
     1844                },
     1845                {
     1846                    "name": "Jan Sorgalla",
     1847                    "email": "jsorgalla@gmail.com",
     1848                    "homepage": "https://sorgalla.com/"
     1849                },
     1850                {
     1851                    "name": "Chris Boden",
     1852                    "email": "cboden@gmail.com",
     1853                    "homepage": "https://cboden.dev/"
     1854                }
     1855            ],
     1856            "description": "Async, Promise-based cache interface for ReactPHP",
     1857            "keywords": [
     1858                "cache",
     1859                "caching",
     1860                "promise",
     1861                "reactphp"
     1862            ],
     1863            "support": {
     1864                "issues": "https://github.com/reactphp/cache/issues",
     1865                "source": "https://github.com/reactphp/cache/tree/1.x"
     1866            },
     1867            "funding": [
     1868                {
     1869                    "url": "https://opencollective.com/reactphp",
     1870                    "type": "open_collective"
     1871                }
     1872            ],
     1873            "time": "2024-01-04T09:16:03+00:00"
     1874        },
     1875        {
     1876            "name": "react/child-process",
     1877            "version": "0.6.x-dev",
     1878            "source": {
     1879                "type": "git",
     1880                "url": "https://github.com/reactphp/child-process.git",
     1881                "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159"
     1882            },
     1883            "dist": {
     1884                "type": "zip",
     1885                "url": "https://api.github.com/repos/reactphp/child-process/zipball/1721e2b93d89b745664353b9cfc8f155ba8a6159",
     1886                "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159",
     1887                "shasum": ""
     1888            },
     1889            "require": {
     1890                "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
     1891                "php": ">=5.3.0",
     1892                "react/event-loop": "^1.2",
     1893                "react/stream": "^1.4"
     1894            },
     1895            "require-dev": {
     1896                "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
     1897                "react/socket": "^1.16",
     1898                "sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0"
     1899            },
     1900            "type": "library",
     1901            "autoload": {
     1902                "psr-4": {
     1903                    "React\\ChildProcess\\": "src/"
     1904                }
     1905            },
     1906            "notification-url": "https://packagist.org/downloads/",
     1907            "license": [
     1908                "MIT"
     1909            ],
     1910            "authors": [
     1911                {
     1912                    "name": "Christian Lück",
     1913                    "email": "christian@clue.engineering",
     1914                    "homepage": "https://clue.engineering/"
     1915                },
     1916                {
     1917                    "name": "Cees-Jan Kiewiet",
     1918                    "email": "reactphp@ceesjankiewiet.nl",
     1919                    "homepage": "https://wyrihaximus.net/"
     1920                },
     1921                {
     1922                    "name": "Jan Sorgalla",
     1923                    "email": "jsorgalla@gmail.com",
     1924                    "homepage": "https://sorgalla.com/"
     1925                },
     1926                {
     1927                    "name": "Chris Boden",
     1928                    "email": "cboden@gmail.com",
     1929                    "homepage": "https://cboden.dev/"
     1930                }
     1931            ],
     1932            "description": "Event-driven library for executing child processes with ReactPHP.",
     1933            "keywords": [
     1934                "event-driven",
     1935                "process",
     1936                "reactphp"
     1937            ],
     1938            "support": {
     1939                "issues": "https://github.com/reactphp/child-process/issues",
     1940                "source": "https://github.com/reactphp/child-process/tree/v0.6.6"
     1941            },
     1942            "funding": [
     1943                {
     1944                    "url": "https://opencollective.com/reactphp",
     1945                    "type": "open_collective"
     1946                }
     1947            ],
     1948            "time": "2025-01-01T16:37:48+00:00"
     1949        },
     1950        {
     1951            "name": "react/dns",
     1952            "version": "1.x-dev",
     1953            "source": {
     1954                "type": "git",
     1955                "url": "https://github.com/reactphp/dns.git",
     1956                "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5"
     1957            },
     1958            "dist": {
     1959                "type": "zip",
     1960                "url": "https://api.github.com/repos/reactphp/dns/zipball/eb8ae001b5a455665c89c1df97f6fb682f8fb0f5",
     1961                "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5",
     1962                "shasum": ""
     1963            },
     1964            "require": {
     1965                "php": ">=5.3.0",
     1966                "react/cache": "^1.0 || ^0.6 || ^0.5",
     1967                "react/event-loop": "^1.2",
     1968                "react/promise": "^3.2 || ^2.7 || ^1.2.1"
     1969            },
     1970            "require-dev": {
     1971                "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
     1972                "react/async": "^4.3 || ^3 || ^2",
     1973                "react/promise-timer": "^1.11"
     1974            },
     1975            "type": "library",
     1976            "autoload": {
     1977                "psr-4": {
     1978                    "React\\Dns\\": "src/"
     1979                }
     1980            },
     1981            "notification-url": "https://packagist.org/downloads/",
     1982            "license": [
     1983                "MIT"
     1984            ],
     1985            "authors": [
     1986                {
     1987                    "name": "Christian Lück",
     1988                    "email": "christian@clue.engineering",
     1989                    "homepage": "https://clue.engineering/"
     1990                },
     1991                {
     1992                    "name": "Cees-Jan Kiewiet",
     1993                    "email": "reactphp@ceesjankiewiet.nl",
     1994                    "homepage": "https://wyrihaximus.net/"
     1995                },
     1996                {
     1997                    "name": "Jan Sorgalla",
     1998                    "email": "jsorgalla@gmail.com",
     1999                    "homepage": "https://sorgalla.com/"
     2000                },
     2001                {
     2002                    "name": "Chris Boden",
     2003                    "email": "cboden@gmail.com",
     2004                    "homepage": "https://cboden.dev/"
     2005                }
     2006            ],
     2007            "description": "Async DNS resolver for ReactPHP",
     2008            "keywords": [
     2009                "async",
     2010                "dns",
     2011                "dns-resolver",
     2012                "reactphp"
     2013            ],
     2014            "support": {
     2015                "issues": "https://github.com/reactphp/dns/issues",
     2016                "source": "https://github.com/reactphp/dns/tree/v1.13.0"
     2017            },
     2018            "funding": [
     2019                {
     2020                    "url": "https://opencollective.com/reactphp",
     2021                    "type": "open_collective"
     2022                }
     2023            ],
     2024            "time": "2024-06-13T14:18:03+00:00"
     2025        },
     2026        {
     2027            "name": "react/event-loop",
     2028            "version": "1.x-dev",
     2029            "source": {
     2030                "type": "git",
     2031                "url": "https://github.com/reactphp/event-loop.git",
     2032                "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354"
     2033            },
     2034            "dist": {
     2035                "type": "zip",
     2036                "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354",
     2037                "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354",
     2038                "shasum": ""
     2039            },
     2040            "require": {
     2041                "php": ">=5.3.0"
     2042            },
     2043            "require-dev": {
     2044                "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
     2045            },
     2046            "suggest": {
     2047                "ext-pcntl": "For signal handling support when using the StreamSelectLoop"
     2048            },
     2049            "default-branch": true,
     2050            "type": "library",
     2051            "autoload": {
     2052                "psr-4": {
     2053                    "React\\EventLoop\\": "src/"
     2054                }
     2055            },
     2056            "notification-url": "https://packagist.org/downloads/",
     2057            "license": [
     2058                "MIT"
     2059            ],
     2060            "authors": [
     2061                {
     2062                    "name": "Christian Lück",
     2063                    "email": "christian@clue.engineering",
     2064                    "homepage": "https://clue.engineering/"
     2065                },
     2066                {
     2067                    "name": "Cees-Jan Kiewiet",
     2068                    "email": "reactphp@ceesjankiewiet.nl",
     2069                    "homepage": "https://wyrihaximus.net/"
     2070                },
     2071                {
     2072                    "name": "Jan Sorgalla",
     2073                    "email": "jsorgalla@gmail.com",
     2074                    "homepage": "https://sorgalla.com/"
     2075                },
     2076                {
     2077                    "name": "Chris Boden",
     2078                    "email": "cboden@gmail.com",
     2079                    "homepage": "https://cboden.dev/"
     2080                }
     2081            ],
     2082            "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.",
     2083            "keywords": [
     2084                "asynchronous",
     2085                "event-loop"
     2086            ],
     2087            "support": {
     2088                "issues": "https://github.com/reactphp/event-loop/issues",
     2089                "source": "https://github.com/reactphp/event-loop/tree/v1.5.0"
     2090            },
     2091            "funding": [
     2092                {
     2093                    "url": "https://opencollective.com/reactphp",
     2094                    "type": "open_collective"
     2095                }
     2096            ],
     2097            "time": "2023-11-13T13:48:05+00:00"
     2098        },
     2099        {
     2100            "name": "react/promise",
     2101            "version": "3.x-dev",
     2102            "source": {
     2103                "type": "git",
     2104                "url": "https://github.com/reactphp/promise.git",
     2105                "reference": "5f80055cc21ba7bcd3989e4902061fc12e2bcc1d"
     2106            },
     2107            "dist": {
     2108                "type": "zip",
     2109                "url": "https://api.github.com/repos/reactphp/promise/zipball/5f80055cc21ba7bcd3989e4902061fc12e2bcc1d",
     2110                "reference": "5f80055cc21ba7bcd3989e4902061fc12e2bcc1d",
     2111                "shasum": ""
     2112            },
     2113            "require": {
     2114                "php": ">=7.1.0"
     2115            },
     2116            "require-dev": {
     2117                "phpstan/phpstan": "1.10.39 || 1.4.10",
     2118                "phpunit/phpunit": "^9.6 || ^7.5"
     2119            },
     2120            "default-branch": true,
     2121            "type": "library",
     2122            "autoload": {
     2123                "files": [
     2124                    "src/functions_include.php"
     2125                ],
     2126                "psr-4": {
     2127                    "React\\Promise\\": "src/"
     2128                }
     2129            },
     2130            "notification-url": "https://packagist.org/downloads/",
     2131            "license": [
     2132                "MIT"
     2133            ],
     2134            "authors": [
     2135                {
     2136                    "name": "Jan Sorgalla",
     2137                    "email": "jsorgalla@gmail.com",
     2138                    "homepage": "https://sorgalla.com/"
     2139                },
     2140                {
     2141                    "name": "Christian Lück",
     2142                    "email": "christian@clue.engineering",
     2143                    "homepage": "https://clue.engineering/"
     2144                },
     2145                {
     2146                    "name": "Cees-Jan Kiewiet",
     2147                    "email": "reactphp@ceesjankiewiet.nl",
     2148                    "homepage": "https://wyrihaximus.net/"
     2149                },
     2150                {
     2151                    "name": "Chris Boden",
     2152                    "email": "cboden@gmail.com",
     2153                    "homepage": "https://cboden.dev/"
     2154                }
     2155            ],
     2156            "description": "A lightweight implementation of CommonJS Promises/A for PHP",
     2157            "keywords": [
     2158                "promise",
     2159                "promises"
     2160            ],
     2161            "support": {
     2162                "issues": "https://github.com/reactphp/promise/issues",
     2163                "source": "https://github.com/reactphp/promise/tree/3.x"
     2164            },
     2165            "funding": [
     2166                {
     2167                    "url": "https://opencollective.com/reactphp",
     2168                    "type": "open_collective"
     2169                }
     2170            ],
     2171            "time": "2024-11-19T18:32:50+00:00"
     2172        },
     2173        {
     2174            "name": "react/socket",
     2175            "version": "1.x-dev",
     2176            "source": {
     2177                "type": "git",
     2178                "url": "https://github.com/reactphp/socket.git",
     2179                "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1"
     2180            },
     2181            "dist": {
     2182                "type": "zip",
     2183                "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1",
     2184                "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1",
     2185                "shasum": ""
     2186            },
     2187            "require": {
     2188                "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
     2189                "php": ">=5.3.0",
     2190                "react/dns": "^1.13",
     2191                "react/event-loop": "^1.2",
     2192                "react/promise": "^3.2 || ^2.6 || ^1.2.1",
     2193                "react/stream": "^1.4"
     2194            },
     2195            "require-dev": {
     2196                "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
     2197                "react/async": "^4.3 || ^3.3 || ^2",
     2198                "react/promise-stream": "^1.4",
     2199                "react/promise-timer": "^1.11"
     2200            },
     2201            "type": "library",
     2202            "autoload": {
     2203                "psr-4": {
     2204                    "React\\Socket\\": "src/"
     2205                }
     2206            },
     2207            "notification-url": "https://packagist.org/downloads/",
     2208            "license": [
     2209                "MIT"
     2210            ],
     2211            "authors": [
     2212                {
     2213                    "name": "Christian Lück",
     2214                    "email": "christian@clue.engineering",
     2215                    "homepage": "https://clue.engineering/"
     2216                },
     2217                {
     2218                    "name": "Cees-Jan Kiewiet",
     2219                    "email": "reactphp@ceesjankiewiet.nl",
     2220                    "homepage": "https://wyrihaximus.net/"
     2221                },
     2222                {
     2223                    "name": "Jan Sorgalla",
     2224                    "email": "jsorgalla@gmail.com",
     2225                    "homepage": "https://sorgalla.com/"
     2226                },
     2227                {
     2228                    "name": "Chris Boden",
     2229                    "email": "cboden@gmail.com",
     2230                    "homepage": "https://cboden.dev/"
     2231                }
     2232            ],
     2233            "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP",
     2234            "keywords": [
     2235                "Connection",
     2236                "Socket",
     2237                "async",
     2238                "reactphp",
     2239                "stream"
     2240            ],
     2241            "support": {
     2242                "issues": "https://github.com/reactphp/socket/issues",
     2243                "source": "https://github.com/reactphp/socket/tree/v1.16.0"
     2244            },
     2245            "funding": [
     2246                {
     2247                    "url": "https://opencollective.com/reactphp",
     2248                    "type": "open_collective"
     2249                }
     2250            ],
     2251            "time": "2024-07-26T10:38:09+00:00"
     2252        },
     2253        {
     2254            "name": "react/stream",
     2255            "version": "1.x-dev",
     2256            "source": {
     2257                "type": "git",
     2258                "url": "https://github.com/reactphp/stream.git",
     2259                "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d"
     2260            },
     2261            "dist": {
     2262                "type": "zip",
     2263                "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d",
     2264                "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d",
     2265                "shasum": ""
     2266            },
     2267            "require": {
     2268                "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
     2269                "php": ">=5.3.8",
     2270                "react/event-loop": "^1.2"
     2271            },
     2272            "require-dev": {
     2273                "clue/stream-filter": "~1.2",
     2274                "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
     2275            },
     2276            "type": "library",
     2277            "autoload": {
     2278                "psr-4": {
     2279                    "React\\Stream\\": "src/"
     2280                }
     2281            },
     2282            "notification-url": "https://packagist.org/downloads/",
     2283            "license": [
     2284                "MIT"
     2285            ],
     2286            "authors": [
     2287                {
     2288                    "name": "Christian Lück",
     2289                    "email": "christian@clue.engineering",
     2290                    "homepage": "https://clue.engineering/"
     2291                },
     2292                {
     2293                    "name": "Cees-Jan Kiewiet",
     2294                    "email": "reactphp@ceesjankiewiet.nl",
     2295                    "homepage": "https://wyrihaximus.net/"
     2296                },
     2297                {
     2298                    "name": "Jan Sorgalla",
     2299                    "email": "jsorgalla@gmail.com",
     2300                    "homepage": "https://sorgalla.com/"
     2301                },
     2302                {
     2303                    "name": "Chris Boden",
     2304                    "email": "cboden@gmail.com",
     2305                    "homepage": "https://cboden.dev/"
     2306                }
     2307            ],
     2308            "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP",
     2309            "keywords": [
     2310                "event-driven",
     2311                "io",
     2312                "non-blocking",
     2313                "pipe",
     2314                "reactphp",
     2315                "readable",
     2316                "stream",
     2317                "writable"
     2318            ],
     2319            "support": {
     2320                "issues": "https://github.com/reactphp/stream/issues",
     2321                "source": "https://github.com/reactphp/stream/tree/v1.4.0"
     2322            },
     2323            "funding": [
     2324                {
     2325                    "url": "https://opencollective.com/reactphp",
     2326                    "type": "open_collective"
     2327                }
     2328            ],
     2329            "time": "2024-06-11T12:45:25+00:00"
     2330        },
     2331        {
    11392332            "name": "sebastian/cli-parser",
    11402333            "version": "1.0.x-dev",
     
    21803373            ],
    21813374            "time": "2024-08-17T17:43:40+00:00"
     3375        },
     3376        {
     3377            "name": "symfony/console",
     3378            "version": "7.3.x-dev",
     3379            "source": {
     3380                "type": "git",
     3381                "url": "https://github.com/symfony/console.git",
     3382                "reference": "eec43776d7ed956cbcc4ce92f7331c72fbf02040"
     3383            },
     3384            "dist": {
     3385                "type": "zip",
     3386                "url": "https://api.github.com/repos/symfony/console/zipball/eec43776d7ed956cbcc4ce92f7331c72fbf02040",
     3387                "reference": "eec43776d7ed956cbcc4ce92f7331c72fbf02040",
     3388                "shasum": ""
     3389            },
     3390            "require": {
     3391                "php": ">=8.2",
     3392                "symfony/deprecation-contracts": "^2.5|^3",
     3393                "symfony/polyfill-mbstring": "~1.0",
     3394                "symfony/service-contracts": "^2.5|^3",
     3395                "symfony/string": "^6.4|^7.0"
     3396            },
     3397            "conflict": {
     3398                "symfony/dependency-injection": "<6.4",
     3399                "symfony/dotenv": "<6.4",
     3400                "symfony/event-dispatcher": "<6.4",
     3401                "symfony/lock": "<6.4",
     3402                "symfony/process": "<6.4"
     3403            },
     3404            "provide": {
     3405                "psr/log-implementation": "1.0|2.0|3.0"
     3406            },
     3407            "require-dev": {
     3408                "psr/log": "^1|^2|^3",
     3409                "symfony/config": "^6.4|^7.0",
     3410                "symfony/dependency-injection": "^6.4|^7.0",
     3411                "symfony/event-dispatcher": "^6.4|^7.0",
     3412                "symfony/http-foundation": "^6.4|^7.0",
     3413                "symfony/http-kernel": "^6.4|^7.0",
     3414                "symfony/lock": "^6.4|^7.0",
     3415                "symfony/messenger": "^6.4|^7.0",
     3416                "symfony/process": "^6.4|^7.0",
     3417                "symfony/stopwatch": "^6.4|^7.0",
     3418                "symfony/var-dumper": "^6.4|^7.0"
     3419            },
     3420            "type": "library",
     3421            "autoload": {
     3422                "psr-4": {
     3423                    "Symfony\\Component\\Console\\": ""
     3424                },
     3425                "exclude-from-classmap": [
     3426                    "/Tests/"
     3427                ]
     3428            },
     3429            "notification-url": "https://packagist.org/downloads/",
     3430            "license": [
     3431                "MIT"
     3432            ],
     3433            "authors": [
     3434                {
     3435                    "name": "Fabien Potencier",
     3436                    "email": "fabien@symfony.com"
     3437                },
     3438                {
     3439                    "name": "Symfony Community",
     3440                    "homepage": "https://symfony.com/contributors"
     3441                }
     3442            ],
     3443            "description": "Eases the creation of beautiful and testable command line interfaces",
     3444            "homepage": "https://symfony.com",
     3445            "keywords": [
     3446                "cli",
     3447                "command-line",
     3448                "console",
     3449                "terminal"
     3450            ],
     3451            "support": {
     3452                "source": "https://github.com/symfony/console/tree/7.3"
     3453            },
     3454            "funding": [
     3455                {
     3456                    "url": "https://symfony.com/sponsor",
     3457                    "type": "custom"
     3458                },
     3459                {
     3460                    "url": "https://github.com/fabpot",
     3461                    "type": "github"
     3462                },
     3463                {
     3464                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     3465                    "type": "tidelift"
     3466                }
     3467            ],
     3468            "time": "2025-02-06T08:27:43+00:00"
     3469        },
     3470        {
     3471            "name": "symfony/deprecation-contracts",
     3472            "version": "dev-main",
     3473            "source": {
     3474                "type": "git",
     3475                "url": "https://github.com/symfony/deprecation-contracts.git",
     3476                "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62"
     3477            },
     3478            "dist": {
     3479                "type": "zip",
     3480                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62",
     3481                "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62",
     3482                "shasum": ""
     3483            },
     3484            "require": {
     3485                "php": ">=8.1"
     3486            },
     3487            "default-branch": true,
     3488            "type": "library",
     3489            "extra": {
     3490                "thanks": {
     3491                    "url": "https://github.com/symfony/contracts",
     3492                    "name": "symfony/contracts"
     3493                },
     3494                "branch-alias": {
     3495                    "dev-main": "3.6-dev"
     3496                }
     3497            },
     3498            "autoload": {
     3499                "files": [
     3500                    "function.php"
     3501                ]
     3502            },
     3503            "notification-url": "https://packagist.org/downloads/",
     3504            "license": [
     3505                "MIT"
     3506            ],
     3507            "authors": [
     3508                {
     3509                    "name": "Nicolas Grekas",
     3510                    "email": "p@tchwork.com"
     3511                },
     3512                {
     3513                    "name": "Symfony Community",
     3514                    "homepage": "https://symfony.com/contributors"
     3515                }
     3516            ],
     3517            "description": "A generic function and convention to trigger deprecation notices",
     3518            "homepage": "https://symfony.com",
     3519            "support": {
     3520                "source": "https://github.com/symfony/deprecation-contracts/tree/main"
     3521            },
     3522            "funding": [
     3523                {
     3524                    "url": "https://symfony.com/sponsor",
     3525                    "type": "custom"
     3526                },
     3527                {
     3528                    "url": "https://github.com/fabpot",
     3529                    "type": "github"
     3530                },
     3531                {
     3532                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     3533                    "type": "tidelift"
     3534                }
     3535            ],
     3536            "time": "2024-09-25T14:21:43+00:00"
     3537        },
     3538        {
     3539            "name": "symfony/event-dispatcher",
     3540            "version": "7.3.x-dev",
     3541            "source": {
     3542                "type": "git",
     3543                "url": "https://github.com/symfony/event-dispatcher.git",
     3544                "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1"
     3545            },
     3546            "dist": {
     3547                "type": "zip",
     3548                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1",
     3549                "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1",
     3550                "shasum": ""
     3551            },
     3552            "require": {
     3553                "php": ">=8.2",
     3554                "symfony/event-dispatcher-contracts": "^2.5|^3"
     3555            },
     3556            "conflict": {
     3557                "symfony/dependency-injection": "<6.4",
     3558                "symfony/service-contracts": "<2.5"
     3559            },
     3560            "provide": {
     3561                "psr/event-dispatcher-implementation": "1.0",
     3562                "symfony/event-dispatcher-implementation": "2.0|3.0"
     3563            },
     3564            "require-dev": {
     3565                "psr/log": "^1|^2|^3",
     3566                "symfony/config": "^6.4|^7.0",
     3567                "symfony/dependency-injection": "^6.4|^7.0",
     3568                "symfony/error-handler": "^6.4|^7.0",
     3569                "symfony/expression-language": "^6.4|^7.0",
     3570                "symfony/http-foundation": "^6.4|^7.0",
     3571                "symfony/service-contracts": "^2.5|^3",
     3572                "symfony/stopwatch": "^6.4|^7.0"
     3573            },
     3574            "type": "library",
     3575            "autoload": {
     3576                "psr-4": {
     3577                    "Symfony\\Component\\EventDispatcher\\": ""
     3578                },
     3579                "exclude-from-classmap": [
     3580                    "/Tests/"
     3581                ]
     3582            },
     3583            "notification-url": "https://packagist.org/downloads/",
     3584            "license": [
     3585                "MIT"
     3586            ],
     3587            "authors": [
     3588                {
     3589                    "name": "Fabien Potencier",
     3590                    "email": "fabien@symfony.com"
     3591                },
     3592                {
     3593                    "name": "Symfony Community",
     3594                    "homepage": "https://symfony.com/contributors"
     3595                }
     3596            ],
     3597            "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
     3598            "homepage": "https://symfony.com",
     3599            "support": {
     3600                "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0"
     3601            },
     3602            "funding": [
     3603                {
     3604                    "url": "https://symfony.com/sponsor",
     3605                    "type": "custom"
     3606                },
     3607                {
     3608                    "url": "https://github.com/fabpot",
     3609                    "type": "github"
     3610                },
     3611                {
     3612                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     3613                    "type": "tidelift"
     3614                }
     3615            ],
     3616            "time": "2024-09-25T14:21:43+00:00"
     3617        },
     3618        {
     3619            "name": "symfony/event-dispatcher-contracts",
     3620            "version": "dev-main",
     3621            "source": {
     3622                "type": "git",
     3623                "url": "https://github.com/symfony/event-dispatcher-contracts.git",
     3624                "reference": "59eb412e93815df44f05f342958efa9f46b1e586"
     3625            },
     3626            "dist": {
     3627                "type": "zip",
     3628                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586",
     3629                "reference": "59eb412e93815df44f05f342958efa9f46b1e586",
     3630                "shasum": ""
     3631            },
     3632            "require": {
     3633                "php": ">=8.1",
     3634                "psr/event-dispatcher": "^1"
     3635            },
     3636            "default-branch": true,
     3637            "type": "library",
     3638            "extra": {
     3639                "thanks": {
     3640                    "url": "https://github.com/symfony/contracts",
     3641                    "name": "symfony/contracts"
     3642                },
     3643                "branch-alias": {
     3644                    "dev-main": "3.6-dev"
     3645                }
     3646            },
     3647            "autoload": {
     3648                "psr-4": {
     3649                    "Symfony\\Contracts\\EventDispatcher\\": ""
     3650                }
     3651            },
     3652            "notification-url": "https://packagist.org/downloads/",
     3653            "license": [
     3654                "MIT"
     3655            ],
     3656            "authors": [
     3657                {
     3658                    "name": "Nicolas Grekas",
     3659                    "email": "p@tchwork.com"
     3660                },
     3661                {
     3662                    "name": "Symfony Community",
     3663                    "homepage": "https://symfony.com/contributors"
     3664                }
     3665            ],
     3666            "description": "Generic abstractions related to dispatching event",
     3667            "homepage": "https://symfony.com",
     3668            "keywords": [
     3669                "abstractions",
     3670                "contracts",
     3671                "decoupling",
     3672                "interfaces",
     3673                "interoperability",
     3674                "standards"
     3675            ],
     3676            "support": {
     3677                "source": "https://github.com/symfony/event-dispatcher-contracts/tree/main"
     3678            },
     3679            "funding": [
     3680                {
     3681                    "url": "https://symfony.com/sponsor",
     3682                    "type": "custom"
     3683                },
     3684                {
     3685                    "url": "https://github.com/fabpot",
     3686                    "type": "github"
     3687                },
     3688                {
     3689                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     3690                    "type": "tidelift"
     3691                }
     3692            ],
     3693            "time": "2024-09-25T14:21:43+00:00"
     3694        },
     3695        {
     3696            "name": "symfony/filesystem",
     3697            "version": "7.3.x-dev",
     3698            "source": {
     3699                "type": "git",
     3700                "url": "https://github.com/symfony/filesystem.git",
     3701                "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb"
     3702            },
     3703            "dist": {
     3704                "type": "zip",
     3705                "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb",
     3706                "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb",
     3707                "shasum": ""
     3708            },
     3709            "require": {
     3710                "php": ">=8.2",
     3711                "symfony/polyfill-ctype": "~1.8",
     3712                "symfony/polyfill-mbstring": "~1.8"
     3713            },
     3714            "require-dev": {
     3715                "symfony/process": "^6.4|^7.0"
     3716            },
     3717            "type": "library",
     3718            "autoload": {
     3719                "psr-4": {
     3720                    "Symfony\\Component\\Filesystem\\": ""
     3721                },
     3722                "exclude-from-classmap": [
     3723                    "/Tests/"
     3724                ]
     3725            },
     3726            "notification-url": "https://packagist.org/downloads/",
     3727            "license": [
     3728                "MIT"
     3729            ],
     3730            "authors": [
     3731                {
     3732                    "name": "Fabien Potencier",
     3733                    "email": "fabien@symfony.com"
     3734                },
     3735                {
     3736                    "name": "Symfony Community",
     3737                    "homepage": "https://symfony.com/contributors"
     3738                }
     3739            ],
     3740            "description": "Provides basic utilities for the filesystem",
     3741            "homepage": "https://symfony.com",
     3742            "support": {
     3743                "source": "https://github.com/symfony/filesystem/tree/v7.2.0"
     3744            },
     3745            "funding": [
     3746                {
     3747                    "url": "https://symfony.com/sponsor",
     3748                    "type": "custom"
     3749                },
     3750                {
     3751                    "url": "https://github.com/fabpot",
     3752                    "type": "github"
     3753                },
     3754                {
     3755                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     3756                    "type": "tidelift"
     3757                }
     3758            ],
     3759            "time": "2024-10-25T15:15:23+00:00"
     3760        },
     3761        {
     3762            "name": "symfony/finder",
     3763            "version": "7.3.x-dev",
     3764            "source": {
     3765                "type": "git",
     3766                "url": "https://github.com/symfony/finder.git",
     3767                "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d"
     3768            },
     3769            "dist": {
     3770                "type": "zip",
     3771                "url": "https://api.github.com/repos/symfony/finder/zipball/ec2344cf77a48253bbca6939aa3d2477773ea63d",
     3772                "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d",
     3773                "shasum": ""
     3774            },
     3775            "require": {
     3776                "php": ">=8.2"
     3777            },
     3778            "require-dev": {
     3779                "symfony/filesystem": "^6.4|^7.0"
     3780            },
     3781            "type": "library",
     3782            "autoload": {
     3783                "psr-4": {
     3784                    "Symfony\\Component\\Finder\\": ""
     3785                },
     3786                "exclude-from-classmap": [
     3787                    "/Tests/"
     3788                ]
     3789            },
     3790            "notification-url": "https://packagist.org/downloads/",
     3791            "license": [
     3792                "MIT"
     3793            ],
     3794            "authors": [
     3795                {
     3796                    "name": "Fabien Potencier",
     3797                    "email": "fabien@symfony.com"
     3798                },
     3799                {
     3800                    "name": "Symfony Community",
     3801                    "homepage": "https://symfony.com/contributors"
     3802                }
     3803            ],
     3804            "description": "Finds files and directories via an intuitive fluent interface",
     3805            "homepage": "https://symfony.com",
     3806            "support": {
     3807                "source": "https://github.com/symfony/finder/tree/7.3"
     3808            },
     3809            "funding": [
     3810                {
     3811                    "url": "https://symfony.com/sponsor",
     3812                    "type": "custom"
     3813                },
     3814                {
     3815                    "url": "https://github.com/fabpot",
     3816                    "type": "github"
     3817                },
     3818                {
     3819                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     3820                    "type": "tidelift"
     3821                }
     3822            ],
     3823            "time": "2024-12-30T19:00:26+00:00"
     3824        },
     3825        {
     3826            "name": "symfony/options-resolver",
     3827            "version": "7.3.x-dev",
     3828            "source": {
     3829                "type": "git",
     3830                "url": "https://github.com/symfony/options-resolver.git",
     3831                "reference": "62c278c5ba8c2904dc5665042c3d17e83829fd00"
     3832            },
     3833            "dist": {
     3834                "type": "zip",
     3835                "url": "https://api.github.com/repos/symfony/options-resolver/zipball/62c278c5ba8c2904dc5665042c3d17e83829fd00",
     3836                "reference": "62c278c5ba8c2904dc5665042c3d17e83829fd00",
     3837                "shasum": ""
     3838            },
     3839            "require": {
     3840                "php": ">=8.2",
     3841                "symfony/deprecation-contracts": "^2.5|^3"
     3842            },
     3843            "type": "library",
     3844            "autoload": {
     3845                "psr-4": {
     3846                    "Symfony\\Component\\OptionsResolver\\": ""
     3847                },
     3848                "exclude-from-classmap": [
     3849                    "/Tests/"
     3850                ]
     3851            },
     3852            "notification-url": "https://packagist.org/downloads/",
     3853            "license": [
     3854                "MIT"
     3855            ],
     3856            "authors": [
     3857                {
     3858                    "name": "Fabien Potencier",
     3859                    "email": "fabien@symfony.com"
     3860                },
     3861                {
     3862                    "name": "Symfony Community",
     3863                    "homepage": "https://symfony.com/contributors"
     3864                }
     3865            ],
     3866            "description": "Provides an improved replacement for the array_replace PHP function",
     3867            "homepage": "https://symfony.com",
     3868            "keywords": [
     3869                "config",
     3870                "configuration",
     3871                "options"
     3872            ],
     3873            "support": {
     3874                "source": "https://github.com/symfony/options-resolver/tree/7.3"
     3875            },
     3876            "funding": [
     3877                {
     3878                    "url": "https://symfony.com/sponsor",
     3879                    "type": "custom"
     3880                },
     3881                {
     3882                    "url": "https://github.com/fabpot",
     3883                    "type": "github"
     3884                },
     3885                {
     3886                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     3887                    "type": "tidelift"
     3888                }
     3889            ],
     3890            "time": "2025-01-12T17:25:01+00:00"
     3891        },
     3892        {
     3893            "name": "symfony/polyfill-ctype",
     3894            "version": "1.x-dev",
     3895            "source": {
     3896                "type": "git",
     3897                "url": "https://github.com/symfony/polyfill-ctype.git",
     3898                "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
     3899            },
     3900            "dist": {
     3901                "type": "zip",
     3902                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
     3903                "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
     3904                "shasum": ""
     3905            },
     3906            "require": {
     3907                "php": ">=7.2"
     3908            },
     3909            "provide": {
     3910                "ext-ctype": "*"
     3911            },
     3912            "suggest": {
     3913                "ext-ctype": "For best performance"
     3914            },
     3915            "default-branch": true,
     3916            "type": "library",
     3917            "extra": {
     3918                "thanks": {
     3919                    "url": "https://github.com/symfony/polyfill",
     3920                    "name": "symfony/polyfill"
     3921                }
     3922            },
     3923            "autoload": {
     3924                "files": [
     3925                    "bootstrap.php"
     3926                ],
     3927                "psr-4": {
     3928                    "Symfony\\Polyfill\\Ctype\\": ""
     3929                }
     3930            },
     3931            "notification-url": "https://packagist.org/downloads/",
     3932            "license": [
     3933                "MIT"
     3934            ],
     3935            "authors": [
     3936                {
     3937                    "name": "Gert de Pagter",
     3938                    "email": "BackEndTea@gmail.com"
     3939                },
     3940                {
     3941                    "name": "Symfony Community",
     3942                    "homepage": "https://symfony.com/contributors"
     3943                }
     3944            ],
     3945            "description": "Symfony polyfill for ctype functions",
     3946            "homepage": "https://symfony.com",
     3947            "keywords": [
     3948                "compatibility",
     3949                "ctype",
     3950                "polyfill",
     3951                "portable"
     3952            ],
     3953            "support": {
     3954                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0"
     3955            },
     3956            "funding": [
     3957                {
     3958                    "url": "https://symfony.com/sponsor",
     3959                    "type": "custom"
     3960                },
     3961                {
     3962                    "url": "https://github.com/fabpot",
     3963                    "type": "github"
     3964                },
     3965                {
     3966                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     3967                    "type": "tidelift"
     3968                }
     3969            ],
     3970            "time": "2024-09-09T11:45:10+00:00"
     3971        },
     3972        {
     3973            "name": "symfony/polyfill-intl-grapheme",
     3974            "version": "1.x-dev",
     3975            "source": {
     3976                "type": "git",
     3977                "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
     3978                "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe"
     3979            },
     3980            "dist": {
     3981                "type": "zip",
     3982                "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
     3983                "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
     3984                "shasum": ""
     3985            },
     3986            "require": {
     3987                "php": ">=7.2"
     3988            },
     3989            "suggest": {
     3990                "ext-intl": "For best performance"
     3991            },
     3992            "default-branch": true,
     3993            "type": "library",
     3994            "extra": {
     3995                "thanks": {
     3996                    "url": "https://github.com/symfony/polyfill",
     3997                    "name": "symfony/polyfill"
     3998                }
     3999            },
     4000            "autoload": {
     4001                "files": [
     4002                    "bootstrap.php"
     4003                ],
     4004                "psr-4": {
     4005                    "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
     4006                }
     4007            },
     4008            "notification-url": "https://packagist.org/downloads/",
     4009            "license": [
     4010                "MIT"
     4011            ],
     4012            "authors": [
     4013                {
     4014                    "name": "Nicolas Grekas",
     4015                    "email": "p@tchwork.com"
     4016                },
     4017                {
     4018                    "name": "Symfony Community",
     4019                    "homepage": "https://symfony.com/contributors"
     4020                }
     4021            ],
     4022            "description": "Symfony polyfill for intl's grapheme_* functions",
     4023            "homepage": "https://symfony.com",
     4024            "keywords": [
     4025                "compatibility",
     4026                "grapheme",
     4027                "intl",
     4028                "polyfill",
     4029                "portable",
     4030                "shim"
     4031            ],
     4032            "support": {
     4033                "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0"
     4034            },
     4035            "funding": [
     4036                {
     4037                    "url": "https://symfony.com/sponsor",
     4038                    "type": "custom"
     4039                },
     4040                {
     4041                    "url": "https://github.com/fabpot",
     4042                    "type": "github"
     4043                },
     4044                {
     4045                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     4046                    "type": "tidelift"
     4047                }
     4048            ],
     4049            "time": "2024-09-09T11:45:10+00:00"
     4050        },
     4051        {
     4052            "name": "symfony/polyfill-intl-normalizer",
     4053            "version": "1.x-dev",
     4054            "source": {
     4055                "type": "git",
     4056                "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
     4057                "reference": "3833d7255cc303546435cb650316bff708a1c75c"
     4058            },
     4059            "dist": {
     4060                "type": "zip",
     4061                "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c",
     4062                "reference": "3833d7255cc303546435cb650316bff708a1c75c",
     4063                "shasum": ""
     4064            },
     4065            "require": {
     4066                "php": ">=7.2"
     4067            },
     4068            "suggest": {
     4069                "ext-intl": "For best performance"
     4070            },
     4071            "default-branch": true,
     4072            "type": "library",
     4073            "extra": {
     4074                "thanks": {
     4075                    "url": "https://github.com/symfony/polyfill",
     4076                    "name": "symfony/polyfill"
     4077                }
     4078            },
     4079            "autoload": {
     4080                "files": [
     4081                    "bootstrap.php"
     4082                ],
     4083                "psr-4": {
     4084                    "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
     4085                },
     4086                "classmap": [
     4087                    "Resources/stubs"
     4088                ]
     4089            },
     4090            "notification-url": "https://packagist.org/downloads/",
     4091            "license": [
     4092                "MIT"
     4093            ],
     4094            "authors": [
     4095                {
     4096                    "name": "Nicolas Grekas",
     4097                    "email": "p@tchwork.com"
     4098                },
     4099                {
     4100                    "name": "Symfony Community",
     4101                    "homepage": "https://symfony.com/contributors"
     4102                }
     4103            ],
     4104            "description": "Symfony polyfill for intl's Normalizer class and related functions",
     4105            "homepage": "https://symfony.com",
     4106            "keywords": [
     4107                "compatibility",
     4108                "intl",
     4109                "normalizer",
     4110                "polyfill",
     4111                "portable",
     4112                "shim"
     4113            ],
     4114            "support": {
     4115                "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0"
     4116            },
     4117            "funding": [
     4118                {
     4119                    "url": "https://symfony.com/sponsor",
     4120                    "type": "custom"
     4121                },
     4122                {
     4123                    "url": "https://github.com/fabpot",
     4124                    "type": "github"
     4125                },
     4126                {
     4127                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     4128                    "type": "tidelift"
     4129                }
     4130            ],
     4131            "time": "2024-09-09T11:45:10+00:00"
     4132        },
     4133        {
     4134            "name": "symfony/polyfill-mbstring",
     4135            "version": "1.x-dev",
     4136            "source": {
     4137                "type": "git",
     4138                "url": "https://github.com/symfony/polyfill-mbstring.git",
     4139                "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493"
     4140            },
     4141            "dist": {
     4142                "type": "zip",
     4143                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493",
     4144                "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493",
     4145                "shasum": ""
     4146            },
     4147            "require": {
     4148                "ext-iconv": "*",
     4149                "php": ">=7.2"
     4150            },
     4151            "provide": {
     4152                "ext-mbstring": "*"
     4153            },
     4154            "suggest": {
     4155                "ext-mbstring": "For best performance"
     4156            },
     4157            "default-branch": true,
     4158            "type": "library",
     4159            "extra": {
     4160                "thanks": {
     4161                    "url": "https://github.com/symfony/polyfill",
     4162                    "name": "symfony/polyfill"
     4163                }
     4164            },
     4165            "autoload": {
     4166                "files": [
     4167                    "bootstrap.php"
     4168                ],
     4169                "psr-4": {
     4170                    "Symfony\\Polyfill\\Mbstring\\": ""
     4171                }
     4172            },
     4173            "notification-url": "https://packagist.org/downloads/",
     4174            "license": [
     4175                "MIT"
     4176            ],
     4177            "authors": [
     4178                {
     4179                    "name": "Nicolas Grekas",
     4180                    "email": "p@tchwork.com"
     4181                },
     4182                {
     4183                    "name": "Symfony Community",
     4184                    "homepage": "https://symfony.com/contributors"
     4185                }
     4186            ],
     4187            "description": "Symfony polyfill for the Mbstring extension",
     4188            "homepage": "https://symfony.com",
     4189            "keywords": [
     4190                "compatibility",
     4191                "mbstring",
     4192                "polyfill",
     4193                "portable",
     4194                "shim"
     4195            ],
     4196            "support": {
     4197                "source": "https://github.com/symfony/polyfill-mbstring/tree/1.x"
     4198            },
     4199            "funding": [
     4200                {
     4201                    "url": "https://symfony.com/sponsor",
     4202                    "type": "custom"
     4203                },
     4204                {
     4205                    "url": "https://github.com/fabpot",
     4206                    "type": "github"
     4207                },
     4208                {
     4209                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     4210                    "type": "tidelift"
     4211                }
     4212            ],
     4213            "time": "2024-12-23T08:48:59+00:00"
    21824214        },
    21834215        {
     
    22574289            ],
    22584290            "time": "2024-05-31T15:07:36+00:00"
     4291        },
     4292        {
     4293            "name": "symfony/polyfill-php80",
     4294            "version": "1.x-dev",
     4295            "source": {
     4296                "type": "git",
     4297                "url": "https://github.com/symfony/polyfill-php80.git",
     4298                "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
     4299            },
     4300            "dist": {
     4301                "type": "zip",
     4302                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
     4303                "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
     4304                "shasum": ""
     4305            },
     4306            "require": {
     4307                "php": ">=7.2"
     4308            },
     4309            "default-branch": true,
     4310            "type": "library",
     4311            "extra": {
     4312                "thanks": {
     4313                    "url": "https://github.com/symfony/polyfill",
     4314                    "name": "symfony/polyfill"
     4315                }
     4316            },
     4317            "autoload": {
     4318                "files": [
     4319                    "bootstrap.php"
     4320                ],
     4321                "psr-4": {
     4322                    "Symfony\\Polyfill\\Php80\\": ""
     4323                },
     4324                "classmap": [
     4325                    "Resources/stubs"
     4326                ]
     4327            },
     4328            "notification-url": "https://packagist.org/downloads/",
     4329            "license": [
     4330                "MIT"
     4331            ],
     4332            "authors": [
     4333                {
     4334                    "name": "Ion Bazan",
     4335                    "email": "ion.bazan@gmail.com"
     4336                },
     4337                {
     4338                    "name": "Nicolas Grekas",
     4339                    "email": "p@tchwork.com"
     4340                },
     4341                {
     4342                    "name": "Symfony Community",
     4343                    "homepage": "https://symfony.com/contributors"
     4344                }
     4345            ],
     4346            "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
     4347            "homepage": "https://symfony.com",
     4348            "keywords": [
     4349                "compatibility",
     4350                "polyfill",
     4351                "portable",
     4352                "shim"
     4353            ],
     4354            "support": {
     4355                "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
     4356            },
     4357            "funding": [
     4358                {
     4359                    "url": "https://symfony.com/sponsor",
     4360                    "type": "custom"
     4361                },
     4362                {
     4363                    "url": "https://github.com/fabpot",
     4364                    "type": "github"
     4365                },
     4366                {
     4367                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     4368                    "type": "tidelift"
     4369                }
     4370            ],
     4371            "time": "2024-09-09T11:45:10+00:00"
     4372        },
     4373        {
     4374            "name": "symfony/polyfill-php81",
     4375            "version": "1.x-dev",
     4376            "source": {
     4377                "type": "git",
     4378                "url": "https://github.com/symfony/polyfill-php81.git",
     4379                "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c"
     4380            },
     4381            "dist": {
     4382                "type": "zip",
     4383                "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
     4384                "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
     4385                "shasum": ""
     4386            },
     4387            "require": {
     4388                "php": ">=7.2"
     4389            },
     4390            "default-branch": true,
     4391            "type": "library",
     4392            "extra": {
     4393                "thanks": {
     4394                    "url": "https://github.com/symfony/polyfill",
     4395                    "name": "symfony/polyfill"
     4396                }
     4397            },
     4398            "autoload": {
     4399                "files": [
     4400                    "bootstrap.php"
     4401                ],
     4402                "psr-4": {
     4403                    "Symfony\\Polyfill\\Php81\\": ""
     4404                },
     4405                "classmap": [
     4406                    "Resources/stubs"
     4407                ]
     4408            },
     4409            "notification-url": "https://packagist.org/downloads/",
     4410            "license": [
     4411                "MIT"
     4412            ],
     4413            "authors": [
     4414                {
     4415                    "name": "Nicolas Grekas",
     4416                    "email": "p@tchwork.com"
     4417                },
     4418                {
     4419                    "name": "Symfony Community",
     4420                    "homepage": "https://symfony.com/contributors"
     4421                }
     4422            ],
     4423            "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
     4424            "homepage": "https://symfony.com",
     4425            "keywords": [
     4426                "compatibility",
     4427                "polyfill",
     4428                "portable",
     4429                "shim"
     4430            ],
     4431            "support": {
     4432                "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0"
     4433            },
     4434            "funding": [
     4435                {
     4436                    "url": "https://symfony.com/sponsor",
     4437                    "type": "custom"
     4438                },
     4439                {
     4440                    "url": "https://github.com/fabpot",
     4441                    "type": "github"
     4442                },
     4443                {
     4444                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     4445                    "type": "tidelift"
     4446                }
     4447            ],
     4448            "time": "2024-09-09T11:45:10+00:00"
     4449        },
     4450        {
     4451            "name": "symfony/process",
     4452            "version": "7.3.x-dev",
     4453            "source": {
     4454                "type": "git",
     4455                "url": "https://github.com/symfony/process.git",
     4456                "reference": "2b42be26326a4fae4313751b40a2ecb60e619311"
     4457            },
     4458            "dist": {
     4459                "type": "zip",
     4460                "url": "https://api.github.com/repos/symfony/process/zipball/2b42be26326a4fae4313751b40a2ecb60e619311",
     4461                "reference": "2b42be26326a4fae4313751b40a2ecb60e619311",
     4462                "shasum": ""
     4463            },
     4464            "require": {
     4465                "php": ">=8.2"
     4466            },
     4467            "type": "library",
     4468            "autoload": {
     4469                "psr-4": {
     4470                    "Symfony\\Component\\Process\\": ""
     4471                },
     4472                "exclude-from-classmap": [
     4473                    "/Tests/"
     4474                ]
     4475            },
     4476            "notification-url": "https://packagist.org/downloads/",
     4477            "license": [
     4478                "MIT"
     4479            ],
     4480            "authors": [
     4481                {
     4482                    "name": "Fabien Potencier",
     4483                    "email": "fabien@symfony.com"
     4484                },
     4485                {
     4486                    "name": "Symfony Community",
     4487                    "homepage": "https://symfony.com/contributors"
     4488                }
     4489            ],
     4490            "description": "Executes commands in sub-processes",
     4491            "homepage": "https://symfony.com",
     4492            "support": {
     4493                "source": "https://github.com/symfony/process/tree/7.3"
     4494            },
     4495            "funding": [
     4496                {
     4497                    "url": "https://symfony.com/sponsor",
     4498                    "type": "custom"
     4499                },
     4500                {
     4501                    "url": "https://github.com/fabpot",
     4502                    "type": "github"
     4503                },
     4504                {
     4505                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     4506                    "type": "tidelift"
     4507                }
     4508            ],
     4509            "time": "2025-02-14T16:23:49+00:00"
     4510        },
     4511        {
     4512            "name": "symfony/service-contracts",
     4513            "version": "dev-main",
     4514            "source": {
     4515                "type": "git",
     4516                "url": "https://github.com/symfony/service-contracts.git",
     4517                "reference": "5ad38698559cf88b6296629e19b15ef3239c9d7a"
     4518            },
     4519            "dist": {
     4520                "type": "zip",
     4521                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/5ad38698559cf88b6296629e19b15ef3239c9d7a",
     4522                "reference": "5ad38698559cf88b6296629e19b15ef3239c9d7a",
     4523                "shasum": ""
     4524            },
     4525            "require": {
     4526                "php": ">=8.1",
     4527                "psr/container": "^1.1|^2.0",
     4528                "symfony/deprecation-contracts": "^2.5|^3"
     4529            },
     4530            "conflict": {
     4531                "ext-psr": "<1.1|>=2"
     4532            },
     4533            "default-branch": true,
     4534            "type": "library",
     4535            "extra": {
     4536                "thanks": {
     4537                    "url": "https://github.com/symfony/contracts",
     4538                    "name": "symfony/contracts"
     4539                },
     4540                "branch-alias": {
     4541                    "dev-main": "3.6-dev"
     4542                }
     4543            },
     4544            "autoload": {
     4545                "psr-4": {
     4546                    "Symfony\\Contracts\\Service\\": ""
     4547                },
     4548                "exclude-from-classmap": [
     4549                    "/Test/"
     4550                ]
     4551            },
     4552            "notification-url": "https://packagist.org/downloads/",
     4553            "license": [
     4554                "MIT"
     4555            ],
     4556            "authors": [
     4557                {
     4558                    "name": "Nicolas Grekas",
     4559                    "email": "p@tchwork.com"
     4560                },
     4561                {
     4562                    "name": "Symfony Community",
     4563                    "homepage": "https://symfony.com/contributors"
     4564                }
     4565            ],
     4566            "description": "Generic abstractions related to writing services",
     4567            "homepage": "https://symfony.com",
     4568            "keywords": [
     4569                "abstractions",
     4570                "contracts",
     4571                "decoupling",
     4572                "interfaces",
     4573                "interoperability",
     4574                "standards"
     4575            ],
     4576            "support": {
     4577                "source": "https://github.com/symfony/service-contracts/tree/main"
     4578            },
     4579            "funding": [
     4580                {
     4581                    "url": "https://symfony.com/sponsor",
     4582                    "type": "custom"
     4583                },
     4584                {
     4585                    "url": "https://github.com/fabpot",
     4586                    "type": "github"
     4587                },
     4588                {
     4589                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     4590                    "type": "tidelift"
     4591                }
     4592            ],
     4593            "time": "2024-09-25T14:21:43+00:00"
     4594        },
     4595        {
     4596            "name": "symfony/stopwatch",
     4597            "version": "7.3.x-dev",
     4598            "source": {
     4599                "type": "git",
     4600                "url": "https://github.com/symfony/stopwatch.git",
     4601                "reference": "e46690d5b9d7164a6d061cab1e8d46141b9f49df"
     4602            },
     4603            "dist": {
     4604                "type": "zip",
     4605                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/e46690d5b9d7164a6d061cab1e8d46141b9f49df",
     4606                "reference": "e46690d5b9d7164a6d061cab1e8d46141b9f49df",
     4607                "shasum": ""
     4608            },
     4609            "require": {
     4610                "php": ">=8.2",
     4611                "symfony/service-contracts": "^2.5|^3"
     4612            },
     4613            "type": "library",
     4614            "autoload": {
     4615                "psr-4": {
     4616                    "Symfony\\Component\\Stopwatch\\": ""
     4617                },
     4618                "exclude-from-classmap": [
     4619                    "/Tests/"
     4620                ]
     4621            },
     4622            "notification-url": "https://packagist.org/downloads/",
     4623            "license": [
     4624                "MIT"
     4625            ],
     4626            "authors": [
     4627                {
     4628                    "name": "Fabien Potencier",
     4629                    "email": "fabien@symfony.com"
     4630                },
     4631                {
     4632                    "name": "Symfony Community",
     4633                    "homepage": "https://symfony.com/contributors"
     4634                }
     4635            ],
     4636            "description": "Provides a way to profile code",
     4637            "homepage": "https://symfony.com",
     4638            "support": {
     4639                "source": "https://github.com/symfony/stopwatch/tree/7.2"
     4640            },
     4641            "funding": [
     4642                {
     4643                    "url": "https://symfony.com/sponsor",
     4644                    "type": "custom"
     4645                },
     4646                {
     4647                    "url": "https://github.com/fabpot",
     4648                    "type": "github"
     4649                },
     4650                {
     4651                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     4652                    "type": "tidelift"
     4653                }
     4654            ],
     4655            "time": "2024-12-18T14:28:33+00:00"
     4656        },
     4657        {
     4658            "name": "symfony/string",
     4659            "version": "7.3.x-dev",
     4660            "source": {
     4661                "type": "git",
     4662                "url": "https://github.com/symfony/string.git",
     4663                "reference": "373a11f2d03e71934a0023888edf3328a583e4ec"
     4664            },
     4665            "dist": {
     4666                "type": "zip",
     4667                "url": "https://api.github.com/repos/symfony/string/zipball/373a11f2d03e71934a0023888edf3328a583e4ec",
     4668                "reference": "373a11f2d03e71934a0023888edf3328a583e4ec",
     4669                "shasum": ""
     4670            },
     4671            "require": {
     4672                "php": ">=8.2",
     4673                "symfony/polyfill-ctype": "~1.8",
     4674                "symfony/polyfill-intl-grapheme": "~1.0",
     4675                "symfony/polyfill-intl-normalizer": "~1.0",
     4676                "symfony/polyfill-mbstring": "~1.0"
     4677            },
     4678            "conflict": {
     4679                "symfony/translation-contracts": "<2.5"
     4680            },
     4681            "require-dev": {
     4682                "symfony/emoji": "^7.1",
     4683                "symfony/error-handler": "^6.4|^7.0",
     4684                "symfony/http-client": "^6.4|^7.0",
     4685                "symfony/intl": "^6.4|^7.0",
     4686                "symfony/translation-contracts": "^2.5|^3.0",
     4687                "symfony/var-exporter": "^6.4|^7.0"
     4688            },
     4689            "type": "library",
     4690            "autoload": {
     4691                "files": [
     4692                    "Resources/functions.php"
     4693                ],
     4694                "psr-4": {
     4695                    "Symfony\\Component\\String\\": ""
     4696                },
     4697                "exclude-from-classmap": [
     4698                    "/Tests/"
     4699                ]
     4700            },
     4701            "notification-url": "https://packagist.org/downloads/",
     4702            "license": [
     4703                "MIT"
     4704            ],
     4705            "authors": [
     4706                {
     4707                    "name": "Nicolas Grekas",
     4708                    "email": "p@tchwork.com"
     4709                },
     4710                {
     4711                    "name": "Symfony Community",
     4712                    "homepage": "https://symfony.com/contributors"
     4713                }
     4714            ],
     4715            "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
     4716            "homepage": "https://symfony.com",
     4717            "keywords": [
     4718                "grapheme",
     4719                "i18n",
     4720                "string",
     4721                "unicode",
     4722                "utf-8",
     4723                "utf8"
     4724            ],
     4725            "support": {
     4726                "source": "https://github.com/symfony/string/tree/7.3"
     4727            },
     4728            "funding": [
     4729                {
     4730                    "url": "https://symfony.com/sponsor",
     4731                    "type": "custom"
     4732                },
     4733                {
     4734                    "url": "https://github.com/fabpot",
     4735                    "type": "github"
     4736                },
     4737                {
     4738                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     4739                    "type": "tidelift"
     4740                }
     4741            ],
     4742            "time": "2025-01-05T16:34:30+00:00"
    22594743        },
    22604744        {
     
    25595043    "platform": [],
    25605044    "platform-dev": [],
    2561     "plugin-api-version": "2.3.0"
     5045    "plugin-api-version": "2.6.0"
    25625046}
  • cookielegit/tags/1.1.0/cookie-legit-functions.php

    r3148248 r3251291  
    11<?php
     2
     3use Cookie_Legit\Models\Cookie_Legit_Settings;
    24
    35/**
     
    3436    return null;
    3537}
     38
     39/**
     40 * Get a CookieLegit setting
     41 * @param string $group
     42 * @param string $setting
     43 * @param mixed $default
     44 * @return mixed
     45 */
     46function cookie_legit_get_setting($group, $setting, $default = null)
     47{
     48    return Cookie_Legit_Settings::get_setting($group, $setting, $default);
     49}
  • cookielegit/tags/1.1.0/cookie-legit.php

    r3149580 r3251291  
    55 * Plugin Name: CookieLegit
    66 * Description: The last cookie manager you'll need
    7  * Version: 1.0.2
     7 * Version: 1.1.0
    88 * Author: CookieLegit
    99 * Author URI: https://cookielegit.site/
     
    1414 * License URI: https://www.gnu.org/licenses/gpl-3.0.html
    1515 * Requires at least: 5.8
    16  * Tested up to: 6.6.1
     16 * Tested up to: 6.7.2
    1717 * Requires PHP: 8.0
    1818 */
     
    2424
    2525if (!defined('COOKIE_LEGIT_VERSION')) {
    26   define('COOKIE_LEGIT_VERSION', '1.0.0');
     26  define('COOKIE_LEGIT_VERSION', '1.1.0');
    2727}
    2828
  • cookielegit/tags/1.1.0/dist/admin.js

    r3148248 r3251291  
    1 (()=>{var t={};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),(()=>{var o;t.g.importScripts&&(o=t.g.location+"");var e=t.g.document;if(!o&&e&&(e.currentScript&&(o=e.currentScript.src),!o)){var n=e.getElementsByTagName("script");if(n.length)for(var i=n.length-1;i>-1&&!o;)o=n[i--].src}if(!o)throw new Error("Automatic publicPath is not supported in this browser");o=o.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),t.p=o})(),jQuery((function(t){t(".notice-type-option").on("change",(function(){const o=t(this).val();t(".banner-position-options").addClass("hide"),t(`.banner-position-options[data-notice-type="${o}"]`).removeClass("hide"),t(`.banner-position-options[data-notice-type="${o}"]`).find("input").first().prop("checked",!0)})),t("#pixel-settings-consent-mode").on("change",(function(){t(this).is(":checked")?t(".row-pixel:not(.row-google_tag_manager)").addClass("hide"):t(".row-pixel:not(.row-google_tag_manager)").removeClass("hide")})),t(window).on("scroll",(function(){const o=t(".cl-form-header"),e=t("#wpadminbar");o.offset().top===e.offset().top+e.height()?o.addClass("is-stuck"):o.removeClass("is-stuck")}))})),(()=>{"use strict";t.p})()})();
     1(()=>{var o={};o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(o){if("object"==typeof window)return window}}(),(()=>{var t;o.g.importScripts&&(t=o.g.location+"");var e=o.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var i=e.getElementsByTagName("script");if(i.length)for(var n=i.length-1;n>-1&&!t;)t=i[n--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=t})(),jQuery((function(o){o(".notice-type-option").on("change",(function(){const t=o(this).val();o(".banner-position-options").addClass("hide"),o(`.banner-position-options[data-notice-type="${t}"]`).removeClass("hide"),o(`.banner-position-options[data-notice-type="${t}"]`).find("input").first().prop("checked",!0)})),o("#pixel-settings-consent-mode").on("change",(function(){o(this).is(":checked")?(o(".row-pixel:not(.row-google_tag_manager)").addClass("hide"),o(".row-google-tag").removeClass("hide")):(o(".row-google-tag").addClass("hide"),o(".row-pixel:not(.row-google_tag_manager)").removeClass("hide"))})),o(window).on("scroll",(function(){const t=o(".cl-form-header"),e=o("#wpadminbar");t.offset().top===e.offset().top+e.height()?t.addClass("is-stuck"):t.removeClass("is-stuck")}))})),(()=>{"use strict";o.p})()})();
  • cookielegit/tags/1.1.0/dist/public.js

    r3148281 r3251291  
    1 (()=>{"use strict";var e={};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var n=e.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var s=n.getElementsByTagName("script");if(s.length)for(var i=s.length-1;i>-1&&!t;)t=s[i--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})(),(()=>{class e{static list(){const e=[],t=document.cookie.split("; ");for(let n=0;n<t.length;n++){const s=t[n].split("="),i=s[0];let c=s.length>1?s[1]:null;e.push({name:i,value:c})}return e}static find(e=""){return this.list().find((t=>t.name===e))||null}static create(e,t,n=1,s="/"){const i=new Date,c=new Date(i.getTime()+24*n*60*60*1e3);return document.cookie=`${e}=${t}; expires=${c}; path=${s}`,this}static delete(e){return document.cookie=`${e}=; Max-Age=-99999999;`,this}}class t{#e=null;#t=null;#n=null;#s=[];screens=["notice","preferences","toggle-preferences"];consentCookieName="cl_consent";cookieNames=["cl_consent","cl_essential","cl_tracking","cl_marketing"];defaultSettings={baseUrl:null,userOpt:!1,consentMode:!1,cookieDuration:182,themeUrl:null};static#i={"cookie-legit-init":[],"notice-loaded":[],"consent-given":[],"consent-updated":[]};constructor(e,t){return this.#n=Object.assign({},this.defaultSettings,t),this.#e=this.selectTarget(e),this.checkConsentCookies(),this.insertNotice(),this.maybeInjectScripts(),this}buildStyle(e){const t=document.createElement("link");t.href=this.#n.themeUrl,t.rel="stylesheet",t.id="cookielegit-css",t.onload=()=>{e.style.display=""},document.head.append(t)}checkConsentCookies(){e.list().filter((e=>e.name.startsWith("cl_"))).forEach((e=>this.#s.push(e))),this.#n.consentMode&&this.#s.length>0&&this.updateGTMConsent(),this.#s.length>0&&t.#c("consent-given")}selectTarget(e){return document.querySelector(e)}async insertNotice(){let e=await this.fetchNotice();this.#t=document.createElement("div"),this.#t.id="cookie-legit-notice-container",this.#t.innerHTML=e.html,this.#t.style.display="none";let t=0===this.#s.length?"notice":"toggle-preferences";this.#t.classList.add(t),this.#e.appendChild(this.#t),this.setupEvents(),this.#n.userOpt&&this.setPrefToggles(),this.buildStyle(this.#t)}async fetchNotice(){const e=await fetch(`${this.#n.baseUrl}?action=get_cookie_notice`);return await e.json()}setupEvents(){this.#n.userOpt?(this.#t.querySelector(".cookie-legit-pref-btn").addEventListener("click",(()=>this.toggleUserPreferences())),this.#t.querySelector(".cookie-legit-save-pref-btn").addEventListener("click",(()=>this.savePreferences())),this.#t.querySelector(".cookie-legit-accept-pref-btn").addEventListener("click",(()=>this.acceptAllCookies()))):this.#t.querySelector(".cookie-legit-deny-btn").addEventListener("click",(()=>this.denyAllCookies())),this.#t.querySelector(".cookie-legit-preferences-change").addEventListener("click",(()=>this.updatePreferences())),this.#t.querySelector(".cookie-legit-accept-btn").addEventListener("click",(()=>this.acceptAllCookies()))}toggleUserPreferences(){this.changeScreen("preferences")}acceptAllCookies(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{e.create(t,!0,this.#n.cookieDuration)})),this.checkConsentCookies()}savePreferences(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{let n=t===this.consentCookieName||this.#t.querySelector(`input[name=${t}]`).checked;e.create(t,n,this.#n.cookieDuration)})),this.checkConsentCookies()}updatePreferences(){let e=this.#n.userOpt?"preferences":"notice";this.changeScreen(e),this.checkConsentCookies(),t.#c("consent-updated")}denyAllCookies(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{let n=t===this.consentCookieName;e.create(t,n,this.#n.cookieDuration)})),this.checkConsentCookies()}changeScreen(e){let t=this.screens.filter((t=>t!==e));this.#t.classList.remove(...t),this.#t.classList.add(e)}setPrefToggles(){this.#s.forEach((e=>{let t=this.#t.querySelector(`input[name=${e.name}]`);t&&(t.checked="true"===e.value)}))}async maybeInjectScripts(){if(!this.#n.userOpt||"true"!==e.find(this.consentCookieName))return;let t=await fetch(`${this.#n.baseUrl}?action=get_tracking_scripts`),n=await t.json();for(const e in n)if(Object.hasOwnProperty.call(n,e)){const t=n[e];Object.values(t).forEach((t=>{if(this.isJSON(t)){t=JSON.parse(t);for(const n in t)Object.hasOwnProperty.call(t,n)&&t[n].forEach((t=>{let s=this.buildScript(e,t,"srcs"===n);document.querySelector(e).append(s)}))}else{let n=this.buildScript(e,t);document.querySelector(e).append(n)}}))}}updateGTMConsent(){if("function"==typeof gtag)return gtag("consent","update",this.getGTMConsentObject());window.dataLayer=window.dataLayer||[],window.dataLayer.push({0:"consent",1:"update",2:this.getGTMConsentObject()})}getGTMConsentObject(){return{ad_storage:"true"===e.find("cl_marketing")?.value?"granted":"denied",ad_user_data:"true"===e.find("cl_marketing")?.value?"granted":"denied",ad_personalization:"true"===e.find("cl_marketing")?.value?"granted":"denied",analytics_storage:"true"===e.find("cl_tracking")?.value?"granted":"denied",security_storage:"granted"}}isJSON(e){try{JSON.parse(e)}catch(e){return!1}return!0}buildScript(e,t,n=!1){let s="head"===e?"script":"noscript",i=document.createElement(s);return n?(i.src=t,i):(i.textContent=t,i)}static subscribe(e,t){return this.#i[e]?"function"!=typeof t?console.warn(`Expected callback for ${e} got ${typeof t}`):void this.#i[e].push(t):console.warn(`Cannot subscribe to ${e} because it does not exist!`)}static#c(e){const t=this.#i[e];if(!t)return console.warn(`Cannot trigger ${e} because it does not exist!`);for(let e of t)e()}}jQuery((function(e){t.subscribe("consent-given",(function(){console.log("should update screens"),e("iframe[data-cl-src]").each((function(){e(this).attr("src",e(this).attr("data-cl-src"))})),e("script[type=cookielegitblock]").each((function(){e(this).attr("src",e(this).attr("data-cl-src")),e(this).attr("type",e(this).attr("data-cl-type"))}))})),window.cookieLegitNotice=new t("body",{consentMode:""!==cl_config.consent_mode,userOpt:""!==cl_config.user_opt,baseUrl:cl_config.ajax_url,themeUrl:cl_config.themeUrl})}))})(),e.p})();
     1(()=>{"use strict";var e={};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var n=e.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var i=n.getElementsByTagName("script");if(i.length)for(var s=i.length-1;s>-1&&!t;)t=i[s--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})(),(()=>{class e{static list(){const e=[],t=document.cookie.split("; ");for(let n=0;n<t.length;n++){const i=t[n].split("="),s=i[0];let c=i.length>1?i[1]:null;e.push({name:s,value:c})}return e}static find(e=""){return this.list().find((t=>t.name===e))||null}static create(e,t,n=1,i="/"){const s=new Date,c=new Date(s.getTime()+24*n*60*60*1e3);return document.cookie=`${e}=${t}; expires=${c}; path=${i}`,this}static delete(e){return document.cookie=`${e}=; Max-Age=-99999999;`,this}}class t{#e=null;#t=null;#n=null;#i=[];CONSENT_SETTINGS_NAME="cl_cus";screens=["notice","preferences","toggle-preferences"];consentCookieName="cl_consent";cookieNames=["cl_consent","cl_essential","cl_tracking","cl_marketing"];defaultSettings={baseUrl:null,userOpt:!1,consentMode:!1,cookieDuration:182,themeUrl:null,googleTag:!1};consentCategories={cl_tracking:"marketingCookies",cl_marketing:"advertisingCookies",cl_essential:"essentialCookies"};static#s={"cookie-legit-init":[],"notice-loaded":[],"consent-given":[],"consent-updated":[]};constructor(e,t){return this.#n=Object.assign({},this.defaultSettings,t),this.#e=this.selectTarget(e),this.checkConsentCookies(),this.insertNotice(),this.maybeInjectScripts(),this}buildStyle(e){const t=document.createElement("link");t.href=this.#n.themeUrl,t.rel="stylesheet",t.id="cookielegit-css",t.onload=()=>{e.style.display=""},document.head.append(t)}checkConsentCookies(){if(e.list().filter((e=>e.name.startsWith("cl_"))).forEach((e=>this.#i.push(e))),0===this.#i.length)return;if(this.#n.consentMode&&!this.#n.googleTag)return this.updateGTMConsent(),void t.#c("consent-given");const n=this.getTagConsentSettings();t.#c("consent-given",n),e.create(this.CONSENT_SETTINGS_NAME,JSON.stringify(n))}selectTarget(e){return document.querySelector(e)}async insertNotice(){let e=await this.fetchNotice();this.#t=document.createElement("div"),this.#t.id="cookie-legit-notice-container",this.#t.innerHTML=e.html,this.#t.style.display="none";let t=0===this.#i.length?"notice":"toggle-preferences";this.#t.classList.add(t),this.#e.appendChild(this.#t),this.setupEvents(),this.#n.userOpt&&this.setPrefToggles(),this.buildStyle(this.#t)}async fetchNotice(){const e=await fetch(`${this.#n.baseUrl}?action=get_cookie_notice`);return await e.json()}setupEvents(){this.#n.userOpt?(this.#t.querySelector(".cookie-legit-pref-btn").addEventListener("click",(()=>this.toggleUserPreferences())),this.#t.querySelector(".cookie-legit-save-pref-btn").addEventListener("click",(()=>this.savePreferences())),this.#t.querySelector(".cookie-legit-accept-pref-btn").addEventListener("click",(()=>this.acceptAllCookies()))):this.#t.querySelector(".cookie-legit-deny-btn").addEventListener("click",(()=>this.denyAllCookies())),this.#t.querySelector(".cookie-legit-preferences-change").addEventListener("click",(()=>this.toggleUserPreferences())),this.#t.querySelector(".cookie-legit-accept-btn").addEventListener("click",(()=>this.acceptAllCookies()))}toggleUserPreferences(){this.changeScreen("preferences")}acceptAllCookies(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{e.create(t,!0,this.#n.cookieDuration)})),this.checkConsentCookies()}savePreferences(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{let n=t===this.consentCookieName||this.#t.querySelector(`input[name=${t}]`).checked;e.create(t,n,this.#n.cookieDuration)})),this.checkConsentCookies()}updatePreferences(){let e=this.#n.userOpt?"preferences":"notice";this.changeScreen(e),this.checkConsentCookies(),t.#c("consent-updated")}denyAllCookies(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{let n=t===this.consentCookieName;e.create(t,n,this.#n.cookieDuration)})),this.checkConsentCookies()}changeScreen(e){let t=this.screens.filter((t=>t!==e));this.#t.classList.remove(...t),this.#t.classList.add(e)}setPrefToggles(){this.#i.forEach((e=>{let t=this.#t.querySelector(`input[name=${e.name}]`);t&&(t.checked="true"===e.value)}))}async maybeInjectScripts(){if(!this.#n.userOpt||"true"!==e.find(this.consentCookieName))return;let t=await fetch(`${this.#n.baseUrl}?action=get_tracking_scripts`),n=await t.json();for(const e in n)if(Object.hasOwnProperty.call(n,e)){const t=n[e];Object.values(t).forEach((t=>{if(this.isJSON(t)){t=JSON.parse(t);for(const n in t)Object.hasOwnProperty.call(t,n)&&t[n].forEach((t=>{let i=this.buildScript(e,t,"srcs"===n);document.querySelector(e).append(i)}))}else{let n=this.buildScript(e,t);document.querySelector(e).append(n)}}))}}updateGTMConsent(){if("function"==typeof gtag)return gtag("consent","update",this.getGTMConsentObject());window.dataLayer=window.dataLayer||[],window.dataLayer.push({0:"consent",1:"update",2:this.getGTMConsentObject()})}getGTMConsentObject(){return{ad_storage:"true"===e.find("cl_marketing")?.value?"granted":"denied",ad_user_data:"true"===e.find("cl_marketing")?.value?"granted":"denied",ad_personalization:"true"===e.find("cl_marketing")?.value?"granted":"denied",analytics_storage:"true"===e.find("cl_tracking")?.value?"granted":"denied",security_storage:"granted"}}isJSON(e){try{JSON.parse(e)}catch(e){return!1}return!0}buildScript(e,t,n=!1){let i="head"===e?"script":"noscript",s=document.createElement(i);return n?(s.src=t,s):(s.textContent=t,s)}getTagConsentSettings(){const e={};return this.#i.forEach((t=>{t.name in this.consentCategories&&(e[this.consentCategories[t.name]]="true"===t.value)})),e}static subscribe(e,t){return this.#s[e]?"function"!=typeof t?console.warn(`Expected callback for ${e} got ${typeof t}`):void this.#s[e].push(t):console.warn(`Cannot subscribe to ${e} because it does not exist!`)}static#c(e,...t){const n=this.#s[e];if(!n)return console.warn(`Cannot trigger ${e} because it does not exist!`);for(let e of n)e(...t)}}window.cookieLegitGtmCaller=function(e){t.subscribe("consent-given",e)},jQuery((function(e){t.subscribe("consent-given",(function(){e("iframe[data-cl-src]").each((function(){e(this).attr("src",e(this).attr("data-cl-src"))})),e("script[type=cookielegitblock]").each((function(){e(this).attr("src",e(this).attr("data-cl-src")),e(this).attr("type",e(this).attr("data-cl-type"))}))}));let n=0;t.subscribe("consent-given",(function(e){n++,console.log(`Event 'consent-given' got called ${n} times with args: `,e)})),window.cookieLegitNotice=new t("body",{consentMode:""!==cl_config.consent_mode,userOpt:""!==cl_config.user_opt,baseUrl:cl_config.ajax_url,themeUrl:cl_config.themeUrl,googleTag:""!==cl_config.googleTag})}))})(),e.p})();
  • cookielegit/tags/1.1.0/readme.txt

    r3149580 r3251291  
    44Tags: CMP, Cookies, Cookie banner, Consent Mode v2, GDPR
    55Requires at least: 5.8
    6 Tested up to: 6.6.1
    7 Stable tag: 1.0.2
     6Tested up to: 6.7.2
     7Stable tag: 1.1.0
    88Requires PHP: 8.0.0
    99License: GPLv3
     
    9090== Changelog ==
    9191
     92# v1.1.0
     93- Added global function for retrieving settings for future performance updates
     94- Added new setting for google tag usage. (Google Tag Template out soon)
     95- Disable use of `gtag` when google tag template is used.
     96
    9297# v1.0.2
    9398- Style loaded async to prevent invalid caching
  • cookielegit/tags/1.1.0/src/admin/class-cookie-legit-admin-pages.php

    r3148248 r3251291  
    2222        $consent_mode = (isset($pixel_settings['consent_mode']) && $pixel_settings['consent_mode'] === 'on');
    2323
     24        $google_tag = (isset($pixel_settings['google_tag']) && $pixel_settings['google_tag'] === 'on');
     25
    2426        Cookie_Legit_View_Loader::load('admin.settings.settings', [
    2527            'notice_settings' => $notice_settings,
    2628            'pixel_settings' => $pixel_settings,
    2729            'consent_mode' => $consent_mode,
     30            'google_tag' => $google_tag,
    2831            'blocking_settings' => $blocking_settings,
    2932            'active_screen' => $active_screen,
  • cookielegit/tags/1.1.0/src/models/class-cookie-legit-settings.php

    r3148248 r3251291  
    55class Cookie_Legit_Settings
    66{
    7 
    87  /**
    98   * The setting group to register under
    109   * @var string
    1110   */
    12   public static $settingGroup = "cookie-legit-options-group";
     11  public static $settingGroup = 'cookie-legit-options-group';
    1312
    1413  /**
     
    1716   */
    1817  public static $settingPrefix = 'cookie_legit_';
     18
     19  /**
     20   * Default setting groups for cookie legit
     21   * @var array<string>
     22   */
     23  public static $settingGroups = [
     24    'notice',
     25    'pixel',
     26    'blocking'
     27  ];
    1928
    2029  /**
     
    2938          'type' => 'banner',
    3039          'position' => 'bottom',
    31           'text' => esc_html__("This website uses cookies to ensure the best user experience.", 'cookie-legit'),
     40          'text' => esc_html__('This website uses cookies to ensure the best user experience.', 'cookie-legit'),
    3241          'style' => array(
    33             'background_color' => "#FFFFFF",
    34             'color' => "#000000",
    35             'border_radius' => "0"
     42            'background_color' => '#FFFFFF',
     43            'color' => '#000000',
     44            'border_radius' => '0'
    3645          ),
    3746        ),
     
    4049          'link' => '/privacy',
    4150          'style' => array(
    42             'color' => "#28A745"
     51            'color' => '#28A745'
    4352          ),
    4453        ),
     
    4756            'text' => esc_html__('Change preferences', 'cookie-legit'),
    4857            'style' => array(
    49               'background_color' => "#FFFFFF",
    50               'color' => "#000000",
     58              'background_color' => '#FFFFFF',
     59              'color' => '#000000',
    5160              'border_radius' => 5
    5261            ),
     
    5564            'text' => esc_html__('Save preferences', 'cookie-legit'),
    5665            'style' => array(
    57               'background_color' => "#ffffff",
    58               'color' => "#000000",
     66              'background_color' => '#ffffff',
     67              'color' => '#000000',
    5968              'border_radius' => 5
    6069            ),
     
    6372            'text' => esc_html__('Accept', 'cookie-legit'),
    6473            'style' => array(
    65               'background_color' => "#28A745",
    66               'color' => "#FFFFFF",
     74              'background_color' => '#28A745',
     75              'color' => '#FFFFFF',
    6776              'border_radius' => 5
    6877            ),
     
    7180            'text' => esc_html__('Deny', 'cookie-legit'),
    7281            'style' => array(
    73               'background_color' => "#FFFFFF",
    74               'color' => "#000000",
     82              'background_color' => '#FFFFFF',
     83              'color' => '#000000',
    7584              'border_radius' => 5
    7685            ),
     
    7988        'texts' => array(
    8089          'essential' => array(
    81             'title' => esc_html__("Essential cookies", 'cookie-legit'),
    82             "description" => esc_html__("Cookies that make the website function as intended", 'cookie-legit')
     90            'title' => esc_html__('Essential cookies', 'cookie-legit'),
     91            'description' => esc_html__('Cookies that make the website function as intended', 'cookie-legit')
    8392          ),
    8493          'tracking' => array(
    85             'title' => esc_html__("Analytical cookies", 'cookie-legit'),
    86             'description' => esc_html__("Cookies that keep track of you.", 'cookie-legit'),
     94            'title' => esc_html__('Analytical cookies', 'cookie-legit'),
     95            'description' => esc_html__('Cookies that keep track of you.', 'cookie-legit'),
    8796          ),
    8897          'marketing' => array(
    89             'title' => esc_html__("Marketing cookies", 'cookie-legit'),
    90             'description' => esc_html__("Cookies with marketing purpose.", 'cookie-legit'),
     98            'title' => esc_html__('Marketing cookies', 'cookie-legit'),
     99            'description' => esc_html__('Cookies with marketing purpose.', 'cookie-legit'),
    91100          )
    92101        ),
     
    100109          'meta_pixel' => '',
    101110        ),
    102         'consent_mode' => false
     111        'consent_mode' => false,
     112        'google_tag' => false,
    103113      ),
    104114      'blocking' => array(
     
    162172      'type' => 'text',
    163173      'position' => 'text',
    164       'text' => "text",
     174      'text' => 'text',
    165175      'style' => array(
    166         'background_color' => "color",
    167         'color' => "color",
    168         'border_radius' => "text"
     176        'background_color' => 'color',
     177        'color' => 'color',
     178        'border_radius' => 'text'
    169179      ),
    170180    ),
     
    173183      'link' => 'url',
    174184      'style' => array(
    175         'color' => "color"
     185        'color' => 'color'
    176186      ),
    177187    ),
     
    180190        'text' => 'text',
    181191        'style' => array(
    182           'background_color' => "color",
    183           'color' => "color",
    184           'border_radius' => "text"
     192          'background_color' => 'color',
     193          'color' => 'color',
     194          'border_radius' => 'text'
    185195        ),
    186196      ),
     
    188198        'text' => 'Save preferences',
    189199        'style' => array(
    190           'background_color' => "color",
    191           'text_color' => "color",
    192           'border_radius' => "text"
     200          'background_color' => 'color',
     201          'color' => 'color',
     202          'border_radius' => 'text'
    193203        ),
    194204      ),
     
    196206        'text' => 'text',
    197207        'style' => array(
    198           'background_color' => "color",
    199           'color' => "text",
    200           'border_radius' => "text"
     208          'background_color' => 'color',
     209          'color' => 'text',
     210          'border_radius' => 'text'
    201211        ),
    202212      ),
     
    204214        'text' => 'text',
    205215        'style' => array(
    206           'background_color' => "color",
    207           'color' => "color",
    208           'border_radius' => "text"
     216          'background_color' => 'color',
     217          'color' => 'color',
     218          'border_radius' => 'text'
    209219        ),
    210220      ),
     
    212222    'texts' => array(
    213223      'essential' => array(
    214         'title' => "text",
    215         "description" => "textarea"
     224        'title' => 'text',
     225        'description' => 'textarea'
    216226      ),
    217227      'tracking' => array(
    218         'title' => "text",
    219         'description' => "textarea",
     228        'title' => 'text',
     229        'description' => 'textarea',
    220230      ),
    221231      'marketing' => array(
    222         'title' => "text",
    223         'description' => "textarea",
     232        'title' => 'text',
     233        'description' => 'textarea',
    224234      )
    225235    ),
    226236    'user_opt' => 'text',
    227237    'consent_mode' => 'text',
     238    'google_tag' => 'text',
    228239    'codes' => array(
    229240      'google_tag_manager' => 'text',
     
    244255    'scripts' => array(
    245256      'block' => 'text',
    246       'excludes' => "textarea"
     257      'excludes' => 'textarea'
    247258    ),
    248259    'give_some_love' => 'text'
     
    265276  {
    266277    return apply_filters('cookie_legit_setting_types', self::$defaultSettingTypes);
     278  }
     279
     280  /**
     281   * @return array<string> $settingGroups
     282   */
     283  public static function get_setting_groups()
     284  {
     285    return apply_filters('cookie_legit_setting_groups', self::$settingGroups);
     286  }
     287
     288  /**
     289   * Get single setting
     290   * @param string $group
     291   * @param string $setting
     292   * @param mixed $default
     293   * @return mixed A single setting or group of settings
     294   * @throws \Exception
     295   */
     296  public static function get_setting($group, $setting = null, $default = null)
     297  {
     298    $groups = self::get_setting_groups();
     299
     300    if(!in_array($group, $groups)) {
     301      trigger_error(__CLASS__ .'::' . __FUNCTION__ . " $group is not a valid setting group", E_USER_WARNING);
     302      return $default;
     303    }
     304
     305    $defaultSettings = self::get_default_settings()[$group];
     306
     307    $getSettingGroup = "get_{$group}_settings";
     308   
     309    $settings = self::$getSettingGroup(false);
     310
     311    return self::filter_settings($setting, $settings, $defaultSettings) ?? $default;
     312  }
     313
     314  /**
     315   * @param string $setting
     316   * @param mixed $settings
     317   * @param mixed $default
     318   * @return mixed The setting
     319   */
     320  private static function filter_settings($setting, $settings, $default)
     321  {
     322    $parts = explode('.', $setting);
     323
     324    $settingValue = $settings;
     325    $defaultValue = $default;
     326
     327    foreach($parts as $key) {
     328      $settingValue = $settingValue[$key] ?? null;
     329      $defaultValue = $defaultValue[$key] ?? null;
     330    }
     331
     332    if($settingValue === null && $defaultValue === null) {
     333      trigger_error(__CLASS__ . '::' . __FUNCTION__ . " $setting does not exist", E_USER_WARNING);
     334      return null;
     335    }
     336
     337    return $settingValue ?? $defaultValue;
    267338  }
    268339
     
    404475
    405476    if (cookie_legit_is_translatable()) {
    406       return "_" . cookie_legit_current_language();
     477      return '_' . cookie_legit_current_language();
    407478    }
    408479
  • cookielegit/tags/1.1.0/src/public/class-cookie-legit-notice.php

    r3148281 r3251291  
    2424            'user_opt' => (isset($notice_settings['user_opt']) && $notice_settings['user_opt'] === 'on'),
    2525            'ajax_url' => admin_url('admin-ajax.php'),
    26             'themeUrl' => COOKIE_LEGIT_URL . 'dist/public.css'
     26            'themeUrl' => COOKIE_LEGIT_URL . 'dist/public.css',
     27            'googleTag' => isset($pixel_settings['google_tag']) && $pixel_settings['google_tag'] === 'on',
    2728        ));
    2829    }
  • cookielegit/tags/1.1.0/view/admin/settings/partials/pixel_fields.php

    r3148248 r3251291  
    2020                                                                                                                } ?>>
    2121                <label for="pixel-settings-consent-mode"></label>
     22            </div>
     23        </div>
     24    </div>
     25    <div class="cl-form-row row-google-tag<?php if(!$consent_mode) echo esc_attr(' hide'); ?>">
     26        <div class="cl-label-wrapper">
     27            <label><?php esc_html_e('I use the Google Tag', 'cookie-legit'); ?></label>
     28            <p><?php esc_html_e('If enabled the plugin assumes you have integrated our Google Tag into Tag Manager. This provides the best integration when you use Tags that are not owned by Google.', 'cookie-legit'); ?></p>
     29        </div>
     30        <div class="cl-values-wrapper">
     31            <div class="cl-toggle-input">
     32                <input type="checkbox" name="pixels_settings[google_tag]" id="pixel-settings-google-tag" <?php if ($google_tag) {
     33                                                                                                                    echo esc_attr('checked');
     34                                                                                                                } ?>>
     35                <label for="pixel-settings-google-tag"></label>
    2236            </div>
    2337        </div>
  • cookielegit/trunk/.distignore

    r3148254 r3251291  
    1414.travis.yml
    1515tests
     16Dockerfile
     17docker-compose.yml
     18.env
     19.env.example
     20.php-cs-fixer.*
  • cookielegit/trunk/CHANGELOG.md

    r3149580 r3251291  
    11# Changelog
     2
     3## [1.1.0](https://github.com/WebdesignSeolab/cookie-legit/compare/v1.0.2...v1.1.0) (2025-03-05)
     4
     5
     6### Features
     7
     8* add function in setting class for single setting retrievel ([#17](https://github.com/WebdesignSeolab/cookie-legit/issues/17)) ([756d202](https://github.com/WebdesignSeolab/cookie-legit/commit/756d2028bad8401fe10b85542624f3a0febe0a04))
     9* Google Tag Manager tag integration ([#20](https://github.com/WebdesignSeolab/cookie-legit/issues/20)) ([7e500ac](https://github.com/WebdesignSeolab/cookie-legit/commit/7e500acc983a3a72e13e83b8a1479248275d7026))
    210
    311## [1.0.2](https://github.com/WebdesignSeolab/cookie-legit/compare/v1.0.1...v1.0.2) (2024-09-10)
  • cookielegit/trunk/assets/scripts/admin.js

    r3148248 r3251291  
    1212        if(active) {
    1313            $('.row-pixel:not(.row-google_tag_manager)').addClass('hide')
     14            $('.row-google-tag').removeClass('hide')
    1415        } else {
     16            $('.row-google-tag').addClass('hide')
    1517            $('.row-pixel:not(.row-google_tag_manager)').removeClass('hide')
    1618        }
  • cookielegit/trunk/assets/scripts/public.js

    r3148281 r3251291  
    11import CookieLegitNotice from "./public/cookielegit";
     2
     3window.cookieLegitGtmCaller = function(gtmConsentUpdate) {
     4  CookieLegitNotice.subscribe('consent-given', gtmConsentUpdate)
     5}
    26
    37jQuery(function($) {
    48
    59  const updateBlocked = function() {
    6     console.log('should update screens')
    710    $("iframe[data-cl-src]").each(function() {
    811      $(this).attr("src", $(this).attr("data-cl-src"));
     
    1518  }
    1619
    17   CookieLegitNotice.subscribe("consent-given", updateBlocked);
     20  CookieLegitNotice.subscribe('consent-given', updateBlocked);
     21
     22  let callCount = 0;
     23  CookieLegitNotice.subscribe('consent-given', function(args) {
     24    callCount++
     25
     26    console.log(`Event 'consent-given' got called ${callCount} times with args: `, args)
     27  })
    1828
    1929  window.cookieLegitNotice = new CookieLegitNotice("body", {
     
    2131    userOpt: cl_config.user_opt !== "",
    2232    baseUrl: cl_config.ajax_url,
    23     themeUrl: cl_config.themeUrl
     33    themeUrl: cl_config.themeUrl,
     34    googleTag: cl_config.googleTag !== '',
    2435  });
    2536});
  • cookielegit/trunk/assets/scripts/public/cookielegit.js

    r3148281 r3251291  
    77  #consentedTo = [];
    88
     9  CONSENT_SETTINGS_NAME = 'cl_cus';
     10
    911  screens = ["notice", "preferences", "toggle-preferences"];
    1012
     
    1820    consentMode: false,
    1921    cookieDuration: 182,
    20     themeUrl: null
     22    themeUrl: null,
     23    googleTag: false,
     24  };
     25
     26  consentCategories = {
     27    cl_tracking: "marketingCookies",
     28    cl_marketing: "advertisingCookies",
     29    cl_essential: "essentialCookies",
    2130  };
    2231
     
    3847
    3948  buildStyle(cookieNotice) {
    40     const tag = document.createElement('link');
     49    const tag = document.createElement("link");
    4150    tag.href = this.#settings.themeUrl;
    42     tag.rel = 'stylesheet';
    43     tag.id = 'cookielegit-css';
     51    tag.rel = "stylesheet";
     52    tag.id = "cookielegit-css";
    4453
    4554    tag.onload = () => {
    46       cookieNotice.style.display = '';
    47     }
     55      cookieNotice.style.display = "";
     56    };
    4857
    4958    document.head.append(tag);
    50 
    5159  }
    5260
     
    5664      .forEach((cookie) => this.#consentedTo.push(cookie));
    5765
    58     if (this.#settings.consentMode && this.#consentedTo.length > 0) {
     66
     67    if (this.#consentedTo.length === 0) {
     68      return;
     69    }
     70   
     71    if (this.#settings.consentMode && !this.#settings.googleTag) {
    5972      this.updateGTMConsent();
    60     }
    61 
    62     if (this.#consentedTo.length > 0) {
     73     
    6374      CookieLegitNotice.#trigger('consent-given');
    64     }
     75
     76      return;
     77    }
     78
     79    const googleConsentSettings = this.getTagConsentSettings();
     80
     81    CookieLegitNotice.#trigger('consent-given', googleConsentSettings);
     82
     83    LegitCookies.create(this.CONSENT_SETTINGS_NAME, JSON.stringify(googleConsentSettings));
    6584  }
    6685
     
    7190  async insertNotice() {
    7291    let notice = await this.fetchNotice();
     92
    7393    this.#notice = document.createElement("div");
     94
    7495    this.#notice.id = "cookie-legit-notice-container";
     96
    7597    this.#notice.innerHTML = notice.html;
    76     this.#notice.style.display = 'none';
    77 
    78     let screen = this.#consentedTo.length === 0 ? "notice" : "toggle-preferences";
     98
     99    this.#notice.style.display = "none";
     100
     101    let screen =
     102      this.#consentedTo.length === 0 ? "notice" : "toggle-preferences";
     103
    79104    this.#notice.classList.add(screen);
    80105
    81106    this.#target.appendChild(this.#notice);
    82     // this.changeScreen(screen);
     107
    83108    this.setupEvents();
    84109
     
    94119      `${this.#settings.baseUrl}?action=get_cookie_notice`
    95120    );
     121
    96122    return await request.json();
    97123  }
     
    102128        .querySelector(".cookie-legit-pref-btn")
    103129        .addEventListener("click", () => this.toggleUserPreferences());
     130
    104131      this.#notice
    105132        .querySelector(".cookie-legit-save-pref-btn")
    106133        .addEventListener("click", () => this.savePreferences());
     134
    107135      this.#notice
    108136        .querySelector(".cookie-legit-accept-pref-btn")
     
    116144    this.#notice
    117145      .querySelector(".cookie-legit-preferences-change")
    118       .addEventListener("click", () => this.updatePreferences());
     146      .addEventListener("click", () => this.toggleUserPreferences());
     147
    119148    this.#notice
    120149      .querySelector(".cookie-legit-accept-btn")
     
    136165  savePreferences() {
    137166    this.changeScreen("toggle-preferences");
     167   
    138168    this.cookieNames.forEach((cookieName) => {
    139169      let value =
     
    143173      LegitCookies.create(cookieName, value, this.#settings.cookieDuration);
    144174    });
     175
    145176    this.checkConsentCookies();
    146177  }
     
    148179  updatePreferences() {
    149180    let screen = this.#settings.userOpt ? "preferences" : "notice";
     181   
    150182    this.changeScreen(screen);
    151     this.checkConsentCookies();
    152     CookieLegitNotice.#trigger('consent-updated');
     183   
     184    this.checkConsentCookies();
     185
     186    CookieLegitNotice.#trigger("consent-updated");
    153187  }
    154188
    155189  denyAllCookies() {
    156190    this.changeScreen("toggle-preferences");
     191
    157192    this.cookieNames.forEach((cookieName) => {
    158193      let value = cookieName === this.consentCookieName ? true : false;
    159194      LegitCookies.create(cookieName, value, this.#settings.cookieDuration);
    160195    });
     196
    161197    this.checkConsentCookies();
    162198  }
     
    166202      (screen) => screen !== activeScreen
    167203    );
     204
    168205    this.#notice.classList.remove(...inactiveScreens);
     206
    169207    this.#notice.classList.add(activeScreen);
    170208  }
     
    180218
    181219  async maybeInjectScripts() {
    182     if (!this.#settings.userOpt || LegitCookies.find(this.consentCookieName) !== 'true') return;
     220    if (
     221      !this.#settings.userOpt ||
     222      LegitCookies.find(this.consentCookieName) !== "true"
     223    ) {
     224      return;
     225    }
     226
    183227    let scriptReq = await fetch(
    184228      `${this.#settings.baseUrl}?action=get_tracking_scripts`
     
    186230
    187231    let scriptsWithPlacement = await scriptReq.json();
     232   
    188233    for (const placement in scriptsWithPlacement) {
    189234      if (Object.hasOwnProperty.call(scriptsWithPlacement, placement)) {
     235       
    190236        const scripts = scriptsWithPlacement[placement];
    191         Object.values(scripts).forEach(script => {
     237       
     238        Object.values(scripts).forEach((script) => {
     239       
    192240          if (!this.isJSON(script)) {
    193241            let tag = this.buildScript(placement, script);
     242       
    194243            document.querySelector(placement).append(tag);
    195244          } else {
    196245            script = JSON.parse(script);
     246       
    197247            for (const stype in script) {
     248       
    198249              if (Object.hasOwnProperty.call(script, stype)) {
    199250                const contents = script[stype];
    200                 contents.forEach(content => {
    201                   let tag = this.buildScript(placement, content, stype === 'srcs');
     251
     252                contents.forEach((content) => {
     253                  let tag = this.buildScript(
     254                    placement,
     255                    content,
     256                    stype === "srcs"
     257                  );
     258
    202259                  document.querySelector(placement).append(tag);
    203                 })
     260                });
    204261              }
    205262            }
     
    219276      0: "consent",
    220277      1: "update",
    221       2: this.getGTMConsentObject()
     278      2: this.getGTMConsentObject(),
    222279    });
    223280  }
     
    242299          : "denied",
    243300      security_storage: "granted",
    244     }
     301    };
    245302  }
    246303
    247304  isJSON(objectString) {
    248305    try {
    249       let json = JSON.parse(objectString)
     306      let json = JSON.parse(objectString);
    250307    } catch (e) {
    251308      return false;
     
    256313
    257314  buildScript(placement, scriptContent, isSrc = false) {
    258     let tagName = placement === 'head' ? 'script' : 'noscript';
     315    let tagName = placement === "head" ? "script" : "noscript";
    259316    let tag = document.createElement(tagName);
    260317
     
    268325  }
    269326
     327  getTagConsentSettings() {
     328    const consentSettings = {};
     329
     330    this.#consentedTo.forEach( consented => {
     331      if (consented.name in this.consentCategories) {
     332        consentSettings[this.consentCategories[consented.name]] = consented.value === "true";
     333      }
     334    });
     335
     336    return consentSettings;
     337  }
     338
    270339  static subscribe(event, callback) {
    271     if (!this.#events[event])
     340    if (!this.#events[event]) {
    272341      return console.warn(
    273342        `Cannot subscribe to ${event} because it does not exist!`
    274343      );
    275     if (typeof callback !== "function")
     344    }
     345
     346    if (typeof callback !== "function") {
    276347      return console.warn(
    277348        `Expected callback for ${event} got ${typeof callback}`
    278349      );
     350    }
     351
    279352    this.#events[event].push(callback);
    280353  }
    281354
    282   static #trigger(event) {
     355  static #trigger(event, ...args) {
    283356    const callbacks = this.#events[event];
    284357
    285     if (!callbacks) return console.warn(`Cannot trigger ${event} because it does not exist!`);
     358    if (!callbacks)
     359      return console.warn(`Cannot trigger ${event} because it does not exist!`);
    286360
    287361    for (let callback of callbacks) {
    288       callback();
     362      callback(...args);
    289363    }
    290364  }
  • cookielegit/trunk/composer.json

    r3148248 r3251291  
    99        "szepeviktor/phpstan-wordpress": "dev-master",
    1010        "wp-coding-standards/wpcs": "^3.0",
    11         "phpstan/extension-installer": "1.4.x-dev"
     11        "phpstan/extension-installer": "1.4.x-dev",
     12        "friendsofphp/php-cs-fixer": "dev-master"
    1213    },
    1314    "license": "GPL-3.0",
     
    2122            "name": "Cookie Legit",
    2223            "email": "devs@cookielegit.site"
     24        },
     25        {
     26            "name": "Duco Drupsteen",
     27            "email": "duco@ducduc.nl"
    2328        }
    2429    ],
  • cookielegit/trunk/composer.lock

    r3148248 r3251291  
    55        "This file is @generated automatically"
    66    ],
    7     "content-hash": "e0db033eea721e161c8bae85bef572d4",
     7    "content-hash": "e85cbf755d5b1738dc56184df147b860",
    88    "packages": [],
    99    "packages-dev": [
     10        {
     11            "name": "clue/ndjson-react",
     12            "version": "1.x-dev",
     13            "source": {
     14                "type": "git",
     15                "url": "https://github.com/clue/reactphp-ndjson.git",
     16                "reference": "8fc557eaa902e4f1de171b5b4eaa6246fbe4118e"
     17            },
     18            "dist": {
     19                "type": "zip",
     20                "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/8fc557eaa902e4f1de171b5b4eaa6246fbe4118e",
     21                "reference": "8fc557eaa902e4f1de171b5b4eaa6246fbe4118e",
     22                "shasum": ""
     23            },
     24            "require": {
     25                "php": ">=5.3",
     26                "react/stream": "^1.2"
     27            },
     28            "require-dev": {
     29                "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
     30                "react/event-loop": "^1.2"
     31            },
     32            "default-branch": true,
     33            "type": "library",
     34            "autoload": {
     35                "psr-4": {
     36                    "Clue\\React\\NDJson\\": "src/"
     37                }
     38            },
     39            "notification-url": "https://packagist.org/downloads/",
     40            "license": [
     41                "MIT"
     42            ],
     43            "authors": [
     44                {
     45                    "name": "Christian Lück",
     46                    "email": "christian@clue.engineering"
     47                }
     48            ],
     49            "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.",
     50            "homepage": "https://github.com/clue/reactphp-ndjson",
     51            "keywords": [
     52                "NDJSON",
     53                "json",
     54                "jsonlines",
     55                "newline",
     56                "reactphp",
     57                "streaming"
     58            ],
     59            "support": {
     60                "issues": "https://github.com/clue/reactphp-ndjson/issues",
     61                "source": "https://github.com/clue/reactphp-ndjson/tree/1.x"
     62            },
     63            "funding": [
     64                {
     65                    "url": "https://clue.engineering/support",
     66                    "type": "custom"
     67                },
     68                {
     69                    "url": "https://github.com/clue",
     70                    "type": "github"
     71                }
     72            ],
     73            "time": "2023-11-24T09:04:50+00:00"
     74        },
     75        {
     76            "name": "composer/pcre",
     77            "version": "dev-main",
     78            "source": {
     79                "type": "git",
     80                "url": "https://github.com/composer/pcre.git",
     81                "reference": "deb3871d20d5012eb5faa5a9caa71c44f151db49"
     82            },
     83            "dist": {
     84                "type": "zip",
     85                "url": "https://api.github.com/repos/composer/pcre/zipball/deb3871d20d5012eb5faa5a9caa71c44f151db49",
     86                "reference": "deb3871d20d5012eb5faa5a9caa71c44f151db49",
     87                "shasum": ""
     88            },
     89            "require": {
     90                "php": "^7.4 || ^8.0"
     91            },
     92            "conflict": {
     93                "phpstan/phpstan": "<1.11.10"
     94            },
     95            "require-dev": {
     96                "phpstan/phpstan": "^1.12 || ^2",
     97                "phpstan/phpstan-deprecation-rules": "^1 || ^2",
     98                "phpstan/phpstan-strict-rules": "^1 || ^2",
     99                "phpunit/phpunit": "^8 || ^9"
     100            },
     101            "default-branch": true,
     102            "type": "library",
     103            "extra": {
     104                "phpstan": {
     105                    "includes": [
     106                        "extension.neon"
     107                    ]
     108                },
     109                "branch-alias": {
     110                    "dev-main": "3.x-dev"
     111                }
     112            },
     113            "autoload": {
     114                "psr-4": {
     115                    "Composer\\Pcre\\": "src"
     116                }
     117            },
     118            "notification-url": "https://packagist.org/downloads/",
     119            "license": [
     120                "MIT"
     121            ],
     122            "authors": [
     123                {
     124                    "name": "Jordi Boggiano",
     125                    "email": "j.boggiano@seld.be",
     126                    "homepage": "http://seld.be"
     127                }
     128            ],
     129            "description": "PCRE wrapping library that offers type-safe preg_* replacements.",
     130            "keywords": [
     131                "PCRE",
     132                "preg",
     133                "regex",
     134                "regular expression"
     135            ],
     136            "support": {
     137                "issues": "https://github.com/composer/pcre/issues",
     138                "source": "https://github.com/composer/pcre/tree/main"
     139            },
     140            "funding": [
     141                {
     142                    "url": "https://packagist.com",
     143                    "type": "custom"
     144                },
     145                {
     146                    "url": "https://github.com/composer",
     147                    "type": "github"
     148                },
     149                {
     150                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
     151                    "type": "tidelift"
     152                }
     153            ],
     154            "time": "2024-11-20T09:10:58+00:00"
     155        },
     156        {
     157            "name": "composer/semver",
     158            "version": "dev-main",
     159            "source": {
     160                "type": "git",
     161                "url": "https://github.com/composer/semver.git",
     162                "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12"
     163            },
     164            "dist": {
     165                "type": "zip",
     166                "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
     167                "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
     168                "shasum": ""
     169            },
     170            "require": {
     171                "php": "^5.3.2 || ^7.0 || ^8.0"
     172            },
     173            "require-dev": {
     174                "phpstan/phpstan": "^1.11",
     175                "symfony/phpunit-bridge": "^3 || ^7"
     176            },
     177            "default-branch": true,
     178            "type": "library",
     179            "extra": {
     180                "branch-alias": {
     181                    "dev-main": "3.x-dev"
     182                }
     183            },
     184            "autoload": {
     185                "psr-4": {
     186                    "Composer\\Semver\\": "src"
     187                }
     188            },
     189            "notification-url": "https://packagist.org/downloads/",
     190            "license": [
     191                "MIT"
     192            ],
     193            "authors": [
     194                {
     195                    "name": "Nils Adermann",
     196                    "email": "naderman@naderman.de",
     197                    "homepage": "http://www.naderman.de"
     198                },
     199                {
     200                    "name": "Jordi Boggiano",
     201                    "email": "j.boggiano@seld.be",
     202                    "homepage": "http://seld.be"
     203                },
     204                {
     205                    "name": "Rob Bast",
     206                    "email": "rob.bast@gmail.com",
     207                    "homepage": "http://robbast.nl"
     208                }
     209            ],
     210            "description": "Semver library that offers utilities, version constraint parsing and validation.",
     211            "keywords": [
     212                "semantic",
     213                "semver",
     214                "validation",
     215                "versioning"
     216            ],
     217            "support": {
     218                "irc": "ircs://irc.libera.chat:6697/composer",
     219                "issues": "https://github.com/composer/semver/issues",
     220                "source": "https://github.com/composer/semver/tree/3.4.3"
     221            },
     222            "funding": [
     223                {
     224                    "url": "https://packagist.com",
     225                    "type": "custom"
     226                },
     227                {
     228                    "url": "https://github.com/composer",
     229                    "type": "github"
     230                },
     231                {
     232                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
     233                    "type": "tidelift"
     234                }
     235            ],
     236            "time": "2024-09-19T14:15:21+00:00"
     237        },
     238        {
     239            "name": "composer/xdebug-handler",
     240            "version": "3.0.5",
     241            "source": {
     242                "type": "git",
     243                "url": "https://github.com/composer/xdebug-handler.git",
     244                "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef"
     245            },
     246            "dist": {
     247                "type": "zip",
     248                "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef",
     249                "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef",
     250                "shasum": ""
     251            },
     252            "require": {
     253                "composer/pcre": "^1 || ^2 || ^3",
     254                "php": "^7.2.5 || ^8.0",
     255                "psr/log": "^1 || ^2 || ^3"
     256            },
     257            "require-dev": {
     258                "phpstan/phpstan": "^1.0",
     259                "phpstan/phpstan-strict-rules": "^1.1",
     260                "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5"
     261            },
     262            "type": "library",
     263            "autoload": {
     264                "psr-4": {
     265                    "Composer\\XdebugHandler\\": "src"
     266                }
     267            },
     268            "notification-url": "https://packagist.org/downloads/",
     269            "license": [
     270                "MIT"
     271            ],
     272            "authors": [
     273                {
     274                    "name": "John Stevenson",
     275                    "email": "john-stevenson@blueyonder.co.uk"
     276                }
     277            ],
     278            "description": "Restarts a process without Xdebug.",
     279            "keywords": [
     280                "Xdebug",
     281                "performance"
     282            ],
     283            "support": {
     284                "irc": "ircs://irc.libera.chat:6697/composer",
     285                "issues": "https://github.com/composer/xdebug-handler/issues",
     286                "source": "https://github.com/composer/xdebug-handler/tree/3.0.5"
     287            },
     288            "funding": [
     289                {
     290                    "url": "https://packagist.com",
     291                    "type": "custom"
     292                },
     293                {
     294                    "url": "https://github.com/composer",
     295                    "type": "github"
     296                },
     297                {
     298                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
     299                    "type": "tidelift"
     300                }
     301            ],
     302            "time": "2024-05-06T16:37:16+00:00"
     303        },
    10304        {
    11305            "name": "dealerdirect/phpcodesniffer-composer-installer",
     
    156450            ],
    157451            "time": "2024-06-20T19:34:15+00:00"
     452        },
     453        {
     454            "name": "evenement/evenement",
     455            "version": "v3.0.2",
     456            "source": {
     457                "type": "git",
     458                "url": "https://github.com/igorw/evenement.git",
     459                "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc"
     460            },
     461            "dist": {
     462                "type": "zip",
     463                "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc",
     464                "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc",
     465                "shasum": ""
     466            },
     467            "require": {
     468                "php": ">=7.0"
     469            },
     470            "require-dev": {
     471                "phpunit/phpunit": "^9 || ^6"
     472            },
     473            "type": "library",
     474            "autoload": {
     475                "psr-4": {
     476                    "Evenement\\": "src/"
     477                }
     478            },
     479            "notification-url": "https://packagist.org/downloads/",
     480            "license": [
     481                "MIT"
     482            ],
     483            "authors": [
     484                {
     485                    "name": "Igor Wiedler",
     486                    "email": "igor@wiedler.ch"
     487                }
     488            ],
     489            "description": "Événement is a very simple event dispatching library for PHP",
     490            "keywords": [
     491                "event-dispatcher",
     492                "event-emitter"
     493            ],
     494            "support": {
     495                "issues": "https://github.com/igorw/evenement/issues",
     496                "source": "https://github.com/igorw/evenement/tree/v3.0.2"
     497            },
     498            "time": "2023-08-08T05:53:35+00:00"
     499        },
     500        {
     501            "name": "fidry/cpu-core-counter",
     502            "version": "1.2.0",
     503            "source": {
     504                "type": "git",
     505                "url": "https://github.com/theofidry/cpu-core-counter.git",
     506                "reference": "8520451a140d3f46ac33042715115e290cf5785f"
     507            },
     508            "dist": {
     509                "type": "zip",
     510                "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f",
     511                "reference": "8520451a140d3f46ac33042715115e290cf5785f",
     512                "shasum": ""
     513            },
     514            "require": {
     515                "php": "^7.2 || ^8.0"
     516            },
     517            "require-dev": {
     518                "fidry/makefile": "^0.2.0",
     519                "fidry/php-cs-fixer-config": "^1.1.2",
     520                "phpstan/extension-installer": "^1.2.0",
     521                "phpstan/phpstan": "^1.9.2",
     522                "phpstan/phpstan-deprecation-rules": "^1.0.0",
     523                "phpstan/phpstan-phpunit": "^1.2.2",
     524                "phpstan/phpstan-strict-rules": "^1.4.4",
     525                "phpunit/phpunit": "^8.5.31 || ^9.5.26",
     526                "webmozarts/strict-phpunit": "^7.5"
     527            },
     528            "type": "library",
     529            "autoload": {
     530                "psr-4": {
     531                    "Fidry\\CpuCoreCounter\\": "src/"
     532                }
     533            },
     534            "notification-url": "https://packagist.org/downloads/",
     535            "license": [
     536                "MIT"
     537            ],
     538            "authors": [
     539                {
     540                    "name": "Théo FIDRY",
     541                    "email": "theo.fidry@gmail.com"
     542                }
     543            ],
     544            "description": "Tiny utility to get the number of CPU cores.",
     545            "keywords": [
     546                "CPU",
     547                "core"
     548            ],
     549            "support": {
     550                "issues": "https://github.com/theofidry/cpu-core-counter/issues",
     551                "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0"
     552            },
     553            "funding": [
     554                {
     555                    "url": "https://github.com/theofidry",
     556                    "type": "github"
     557                }
     558            ],
     559            "time": "2024-08-06T10:04:20+00:00"
     560        },
     561        {
     562            "name": "friendsofphp/php-cs-fixer",
     563            "version": "dev-master",
     564            "source": {
     565                "type": "git",
     566                "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
     567                "reference": "de9c8c6fcd7092158636d93def0067abdade87ab"
     568            },
     569            "dist": {
     570                "type": "zip",
     571                "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/de9c8c6fcd7092158636d93def0067abdade87ab",
     572                "reference": "de9c8c6fcd7092158636d93def0067abdade87ab",
     573                "shasum": ""
     574            },
     575            "require": {
     576                "clue/ndjson-react": "^1.0",
     577                "composer/semver": "^3.4",
     578                "composer/xdebug-handler": "^3.0.3",
     579                "ext-filter": "*",
     580                "ext-json": "*",
     581                "ext-tokenizer": "*",
     582                "fidry/cpu-core-counter": "^1.2",
     583                "php": "^7.4 || ^8.0",
     584                "react/child-process": "^0.6.5",
     585                "react/event-loop": "^1.0",
     586                "react/promise": "^2.0 || ^3.0",
     587                "react/socket": "^1.0",
     588                "react/stream": "^1.0",
     589                "sebastian/diff": "^4.0 || ^5.1 || ^6.0 || ^7.0",
     590                "symfony/console": "^5.4 || ^6.4 || ^7.0",
     591                "symfony/event-dispatcher": "^5.4 || ^6.4 || ^7.0",
     592                "symfony/filesystem": "^5.4 || ^6.4 || ^7.0",
     593                "symfony/finder": "^5.4 || ^6.4 || ^7.0",
     594                "symfony/options-resolver": "^5.4 || ^6.4 || ^7.0",
     595                "symfony/polyfill-mbstring": "^1.31",
     596                "symfony/polyfill-php80": "^1.31",
     597                "symfony/polyfill-php81": "^1.31",
     598                "symfony/process": "^5.4 || ^6.4 || ^7.2",
     599                "symfony/stopwatch": "^5.4 || ^6.4 || ^7.0"
     600            },
     601            "require-dev": {
     602                "facile-it/paraunit": "^1.3.1 || ^2.5",
     603                "infection/infection": "^0.29.10",
     604                "justinrainbow/json-schema": "^5.3 || ^6.0",
     605                "keradus/cli-executor": "^2.1",
     606                "mikey179/vfsstream": "^1.6.12",
     607                "php-coveralls/php-coveralls": "^2.7",
     608                "php-cs-fixer/accessible-object": "^1.1",
     609                "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6",
     610                "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6",
     611                "phpunit/phpunit": "^9.6.22 || ^10.5.45 || ^11.5.7",
     612                "symfony/var-dumper": "^5.4.48 || ^6.4.18 || ^7.2.0",
     613                "symfony/yaml": "^5.4.45 || ^6.4.18 || ^7.2.0"
     614            },
     615            "suggest": {
     616                "ext-dom": "For handling output formats in XML",
     617                "ext-mbstring": "For handling non-UTF8 characters."
     618            },
     619            "default-branch": true,
     620            "bin": [
     621                "php-cs-fixer"
     622            ],
     623            "type": "application",
     624            "autoload": {
     625                "psr-4": {
     626                    "PhpCsFixer\\": "src/"
     627                },
     628                "exclude-from-classmap": [
     629                    "src/Fixer/Internal/*"
     630                ]
     631            },
     632            "notification-url": "https://packagist.org/downloads/",
     633            "license": [
     634                "MIT"
     635            ],
     636            "authors": [
     637                {
     638                    "name": "Fabien Potencier",
     639                    "email": "fabien@symfony.com"
     640                },
     641                {
     642                    "name": "Dariusz Rumiński",
     643                    "email": "dariusz.ruminski@gmail.com"
     644                }
     645            ],
     646            "description": "A tool to automatically fix PHP code style",
     647            "keywords": [
     648                "Static code analysis",
     649                "fixer",
     650                "standards",
     651                "static analysis"
     652            ],
     653            "support": {
     654                "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
     655                "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/master"
     656            },
     657            "funding": [
     658                {
     659                    "url": "https://github.com/keradus",
     660                    "type": "github"
     661                }
     662            ],
     663            "time": "2025-02-15T22:46:01+00:00"
    158664        },
    159665        {
     
    11371643        },
    11381644        {
     1645            "name": "psr/container",
     1646            "version": "dev-master",
     1647            "source": {
     1648                "type": "git",
     1649                "url": "https://github.com/php-fig/container.git",
     1650                "reference": "707984727bd5b2b670e59559d3ed2500240cf875"
     1651            },
     1652            "dist": {
     1653                "type": "zip",
     1654                "url": "https://api.github.com/repos/php-fig/container/zipball/707984727bd5b2b670e59559d3ed2500240cf875",
     1655                "reference": "707984727bd5b2b670e59559d3ed2500240cf875",
     1656                "shasum": ""
     1657            },
     1658            "require": {
     1659                "php": ">=7.4.0"
     1660            },
     1661            "default-branch": true,
     1662            "type": "library",
     1663            "extra": {
     1664                "branch-alias": {
     1665                    "dev-master": "2.0.x-dev"
     1666                }
     1667            },
     1668            "autoload": {
     1669                "psr-4": {
     1670                    "Psr\\Container\\": "src/"
     1671                }
     1672            },
     1673            "notification-url": "https://packagist.org/downloads/",
     1674            "license": [
     1675                "MIT"
     1676            ],
     1677            "authors": [
     1678                {
     1679                    "name": "PHP-FIG",
     1680                    "homepage": "https://www.php-fig.org/"
     1681                }
     1682            ],
     1683            "description": "Common Container Interface (PHP FIG PSR-11)",
     1684            "homepage": "https://github.com/php-fig/container",
     1685            "keywords": [
     1686                "PSR-11",
     1687                "container",
     1688                "container-interface",
     1689                "container-interop",
     1690                "psr"
     1691            ],
     1692            "support": {
     1693                "issues": "https://github.com/php-fig/container/issues",
     1694                "source": "https://github.com/php-fig/container"
     1695            },
     1696            "time": "2023-09-22T11:11:30+00:00"
     1697        },
     1698        {
     1699            "name": "psr/event-dispatcher",
     1700            "version": "dev-master",
     1701            "source": {
     1702                "type": "git",
     1703                "url": "https://github.com/php-fig/event-dispatcher.git",
     1704                "reference": "bbd9eacc080d33861e5b5c75b3b8c4d7e6d01874"
     1705            },
     1706            "dist": {
     1707                "type": "zip",
     1708                "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/bbd9eacc080d33861e5b5c75b3b8c4d7e6d01874",
     1709                "reference": "bbd9eacc080d33861e5b5c75b3b8c4d7e6d01874",
     1710                "shasum": ""
     1711            },
     1712            "require": {
     1713                "php": ">=7.2.0"
     1714            },
     1715            "suggest": {
     1716                "fig/event-dispatcher-util": "Provides some useful PSR-14 utilities"
     1717            },
     1718            "default-branch": true,
     1719            "type": "library",
     1720            "extra": {
     1721                "branch-alias": {
     1722                    "dev-master": "1.0.x-dev"
     1723                }
     1724            },
     1725            "autoload": {
     1726                "psr-4": {
     1727                    "Psr\\EventDispatcher\\": "src/"
     1728                }
     1729            },
     1730            "notification-url": "https://packagist.org/downloads/",
     1731            "license": [
     1732                "MIT"
     1733            ],
     1734            "authors": [
     1735                {
     1736                    "name": "PHP-FIG",
     1737                    "homepage": "https://www.php-fig.org/"
     1738                }
     1739            ],
     1740            "description": "Standard interfaces for event handling.",
     1741            "keywords": [
     1742                "events",
     1743                "psr",
     1744                "psr-14"
     1745            ],
     1746            "support": {
     1747                "source": "https://github.com/php-fig/event-dispatcher"
     1748            },
     1749            "time": "2024-03-17T21:29:03+00:00"
     1750        },
     1751        {
     1752            "name": "psr/log",
     1753            "version": "dev-master",
     1754            "source": {
     1755                "type": "git",
     1756                "url": "https://github.com/php-fig/log.git",
     1757                "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
     1758            },
     1759            "dist": {
     1760                "type": "zip",
     1761                "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
     1762                "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
     1763                "shasum": ""
     1764            },
     1765            "require": {
     1766                "php": ">=8.0.0"
     1767            },
     1768            "default-branch": true,
     1769            "type": "library",
     1770            "extra": {
     1771                "branch-alias": {
     1772                    "dev-master": "3.x-dev"
     1773                }
     1774            },
     1775            "autoload": {
     1776                "psr-4": {
     1777                    "Psr\\Log\\": "src"
     1778                }
     1779            },
     1780            "notification-url": "https://packagist.org/downloads/",
     1781            "license": [
     1782                "MIT"
     1783            ],
     1784            "authors": [
     1785                {
     1786                    "name": "PHP-FIG",
     1787                    "homepage": "https://www.php-fig.org/"
     1788                }
     1789            ],
     1790            "description": "Common interface for logging libraries",
     1791            "homepage": "https://github.com/php-fig/log",
     1792            "keywords": [
     1793                "log",
     1794                "psr",
     1795                "psr-3"
     1796            ],
     1797            "support": {
     1798                "source": "https://github.com/php-fig/log/tree/3.0.2"
     1799            },
     1800            "time": "2024-09-11T13:17:53+00:00"
     1801        },
     1802        {
     1803            "name": "react/cache",
     1804            "version": "1.x-dev",
     1805            "source": {
     1806                "type": "git",
     1807                "url": "https://github.com/reactphp/cache.git",
     1808                "reference": "36c51f36d5f3c23cfcc2b5dc5e443bb5ff085605"
     1809            },
     1810            "dist": {
     1811                "type": "zip",
     1812                "url": "https://api.github.com/repos/reactphp/cache/zipball/36c51f36d5f3c23cfcc2b5dc5e443bb5ff085605",
     1813                "reference": "36c51f36d5f3c23cfcc2b5dc5e443bb5ff085605",
     1814                "shasum": ""
     1815            },
     1816            "require": {
     1817                "php": ">=5.3.0",
     1818                "react/promise": "^3.0 || ^2.0 || ^1.1"
     1819            },
     1820            "require-dev": {
     1821                "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
     1822            },
     1823            "default-branch": true,
     1824            "type": "library",
     1825            "autoload": {
     1826                "psr-4": {
     1827                    "React\\Cache\\": "src/"
     1828                }
     1829            },
     1830            "notification-url": "https://packagist.org/downloads/",
     1831            "license": [
     1832                "MIT"
     1833            ],
     1834            "authors": [
     1835                {
     1836                    "name": "Christian Lück",
     1837                    "email": "christian@clue.engineering",
     1838                    "homepage": "https://clue.engineering/"
     1839                },
     1840                {
     1841                    "name": "Cees-Jan Kiewiet",
     1842                    "email": "reactphp@ceesjankiewiet.nl",
     1843                    "homepage": "https://wyrihaximus.net/"
     1844                },
     1845                {
     1846                    "name": "Jan Sorgalla",
     1847                    "email": "jsorgalla@gmail.com",
     1848                    "homepage": "https://sorgalla.com/"
     1849                },
     1850                {
     1851                    "name": "Chris Boden",
     1852                    "email": "cboden@gmail.com",
     1853                    "homepage": "https://cboden.dev/"
     1854                }
     1855            ],
     1856            "description": "Async, Promise-based cache interface for ReactPHP",
     1857            "keywords": [
     1858                "cache",
     1859                "caching",
     1860                "promise",
     1861                "reactphp"
     1862            ],
     1863            "support": {
     1864                "issues": "https://github.com/reactphp/cache/issues",
     1865                "source": "https://github.com/reactphp/cache/tree/1.x"
     1866            },
     1867            "funding": [
     1868                {
     1869                    "url": "https://opencollective.com/reactphp",
     1870                    "type": "open_collective"
     1871                }
     1872            ],
     1873            "time": "2024-01-04T09:16:03+00:00"
     1874        },
     1875        {
     1876            "name": "react/child-process",
     1877            "version": "0.6.x-dev",
     1878            "source": {
     1879                "type": "git",
     1880                "url": "https://github.com/reactphp/child-process.git",
     1881                "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159"
     1882            },
     1883            "dist": {
     1884                "type": "zip",
     1885                "url": "https://api.github.com/repos/reactphp/child-process/zipball/1721e2b93d89b745664353b9cfc8f155ba8a6159",
     1886                "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159",
     1887                "shasum": ""
     1888            },
     1889            "require": {
     1890                "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
     1891                "php": ">=5.3.0",
     1892                "react/event-loop": "^1.2",
     1893                "react/stream": "^1.4"
     1894            },
     1895            "require-dev": {
     1896                "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
     1897                "react/socket": "^1.16",
     1898                "sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0"
     1899            },
     1900            "type": "library",
     1901            "autoload": {
     1902                "psr-4": {
     1903                    "React\\ChildProcess\\": "src/"
     1904                }
     1905            },
     1906            "notification-url": "https://packagist.org/downloads/",
     1907            "license": [
     1908                "MIT"
     1909            ],
     1910            "authors": [
     1911                {
     1912                    "name": "Christian Lück",
     1913                    "email": "christian@clue.engineering",
     1914                    "homepage": "https://clue.engineering/"
     1915                },
     1916                {
     1917                    "name": "Cees-Jan Kiewiet",
     1918                    "email": "reactphp@ceesjankiewiet.nl",
     1919                    "homepage": "https://wyrihaximus.net/"
     1920                },
     1921                {
     1922                    "name": "Jan Sorgalla",
     1923                    "email": "jsorgalla@gmail.com",
     1924                    "homepage": "https://sorgalla.com/"
     1925                },
     1926                {
     1927                    "name": "Chris Boden",
     1928                    "email": "cboden@gmail.com",
     1929                    "homepage": "https://cboden.dev/"
     1930                }
     1931            ],
     1932            "description": "Event-driven library for executing child processes with ReactPHP.",
     1933            "keywords": [
     1934                "event-driven",
     1935                "process",
     1936                "reactphp"
     1937            ],
     1938            "support": {
     1939                "issues": "https://github.com/reactphp/child-process/issues",
     1940                "source": "https://github.com/reactphp/child-process/tree/v0.6.6"
     1941            },
     1942            "funding": [
     1943                {
     1944                    "url": "https://opencollective.com/reactphp",
     1945                    "type": "open_collective"
     1946                }
     1947            ],
     1948            "time": "2025-01-01T16:37:48+00:00"
     1949        },
     1950        {
     1951            "name": "react/dns",
     1952            "version": "1.x-dev",
     1953            "source": {
     1954                "type": "git",
     1955                "url": "https://github.com/reactphp/dns.git",
     1956                "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5"
     1957            },
     1958            "dist": {
     1959                "type": "zip",
     1960                "url": "https://api.github.com/repos/reactphp/dns/zipball/eb8ae001b5a455665c89c1df97f6fb682f8fb0f5",
     1961                "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5",
     1962                "shasum": ""
     1963            },
     1964            "require": {
     1965                "php": ">=5.3.0",
     1966                "react/cache": "^1.0 || ^0.6 || ^0.5",
     1967                "react/event-loop": "^1.2",
     1968                "react/promise": "^3.2 || ^2.7 || ^1.2.1"
     1969            },
     1970            "require-dev": {
     1971                "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
     1972                "react/async": "^4.3 || ^3 || ^2",
     1973                "react/promise-timer": "^1.11"
     1974            },
     1975            "type": "library",
     1976            "autoload": {
     1977                "psr-4": {
     1978                    "React\\Dns\\": "src/"
     1979                }
     1980            },
     1981            "notification-url": "https://packagist.org/downloads/",
     1982            "license": [
     1983                "MIT"
     1984            ],
     1985            "authors": [
     1986                {
     1987                    "name": "Christian Lück",
     1988                    "email": "christian@clue.engineering",
     1989                    "homepage": "https://clue.engineering/"
     1990                },
     1991                {
     1992                    "name": "Cees-Jan Kiewiet",
     1993                    "email": "reactphp@ceesjankiewiet.nl",
     1994                    "homepage": "https://wyrihaximus.net/"
     1995                },
     1996                {
     1997                    "name": "Jan Sorgalla",
     1998                    "email": "jsorgalla@gmail.com",
     1999                    "homepage": "https://sorgalla.com/"
     2000                },
     2001                {
     2002                    "name": "Chris Boden",
     2003                    "email": "cboden@gmail.com",
     2004                    "homepage": "https://cboden.dev/"
     2005                }
     2006            ],
     2007            "description": "Async DNS resolver for ReactPHP",
     2008            "keywords": [
     2009                "async",
     2010                "dns",
     2011                "dns-resolver",
     2012                "reactphp"
     2013            ],
     2014            "support": {
     2015                "issues": "https://github.com/reactphp/dns/issues",
     2016                "source": "https://github.com/reactphp/dns/tree/v1.13.0"
     2017            },
     2018            "funding": [
     2019                {
     2020                    "url": "https://opencollective.com/reactphp",
     2021                    "type": "open_collective"
     2022                }
     2023            ],
     2024            "time": "2024-06-13T14:18:03+00:00"
     2025        },
     2026        {
     2027            "name": "react/event-loop",
     2028            "version": "1.x-dev",
     2029            "source": {
     2030                "type": "git",
     2031                "url": "https://github.com/reactphp/event-loop.git",
     2032                "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354"
     2033            },
     2034            "dist": {
     2035                "type": "zip",
     2036                "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354",
     2037                "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354",
     2038                "shasum": ""
     2039            },
     2040            "require": {
     2041                "php": ">=5.3.0"
     2042            },
     2043            "require-dev": {
     2044                "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
     2045            },
     2046            "suggest": {
     2047                "ext-pcntl": "For signal handling support when using the StreamSelectLoop"
     2048            },
     2049            "default-branch": true,
     2050            "type": "library",
     2051            "autoload": {
     2052                "psr-4": {
     2053                    "React\\EventLoop\\": "src/"
     2054                }
     2055            },
     2056            "notification-url": "https://packagist.org/downloads/",
     2057            "license": [
     2058                "MIT"
     2059            ],
     2060            "authors": [
     2061                {
     2062                    "name": "Christian Lück",
     2063                    "email": "christian@clue.engineering",
     2064                    "homepage": "https://clue.engineering/"
     2065                },
     2066                {
     2067                    "name": "Cees-Jan Kiewiet",
     2068                    "email": "reactphp@ceesjankiewiet.nl",
     2069                    "homepage": "https://wyrihaximus.net/"
     2070                },
     2071                {
     2072                    "name": "Jan Sorgalla",
     2073                    "email": "jsorgalla@gmail.com",
     2074                    "homepage": "https://sorgalla.com/"
     2075                },
     2076                {
     2077                    "name": "Chris Boden",
     2078                    "email": "cboden@gmail.com",
     2079                    "homepage": "https://cboden.dev/"
     2080                }
     2081            ],
     2082            "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.",
     2083            "keywords": [
     2084                "asynchronous",
     2085                "event-loop"
     2086            ],
     2087            "support": {
     2088                "issues": "https://github.com/reactphp/event-loop/issues",
     2089                "source": "https://github.com/reactphp/event-loop/tree/v1.5.0"
     2090            },
     2091            "funding": [
     2092                {
     2093                    "url": "https://opencollective.com/reactphp",
     2094                    "type": "open_collective"
     2095                }
     2096            ],
     2097            "time": "2023-11-13T13:48:05+00:00"
     2098        },
     2099        {
     2100            "name": "react/promise",
     2101            "version": "3.x-dev",
     2102            "source": {
     2103                "type": "git",
     2104                "url": "https://github.com/reactphp/promise.git",
     2105                "reference": "5f80055cc21ba7bcd3989e4902061fc12e2bcc1d"
     2106            },
     2107            "dist": {
     2108                "type": "zip",
     2109                "url": "https://api.github.com/repos/reactphp/promise/zipball/5f80055cc21ba7bcd3989e4902061fc12e2bcc1d",
     2110                "reference": "5f80055cc21ba7bcd3989e4902061fc12e2bcc1d",
     2111                "shasum": ""
     2112            },
     2113            "require": {
     2114                "php": ">=7.1.0"
     2115            },
     2116            "require-dev": {
     2117                "phpstan/phpstan": "1.10.39 || 1.4.10",
     2118                "phpunit/phpunit": "^9.6 || ^7.5"
     2119            },
     2120            "default-branch": true,
     2121            "type": "library",
     2122            "autoload": {
     2123                "files": [
     2124                    "src/functions_include.php"
     2125                ],
     2126                "psr-4": {
     2127                    "React\\Promise\\": "src/"
     2128                }
     2129            },
     2130            "notification-url": "https://packagist.org/downloads/",
     2131            "license": [
     2132                "MIT"
     2133            ],
     2134            "authors": [
     2135                {
     2136                    "name": "Jan Sorgalla",
     2137                    "email": "jsorgalla@gmail.com",
     2138                    "homepage": "https://sorgalla.com/"
     2139                },
     2140                {
     2141                    "name": "Christian Lück",
     2142                    "email": "christian@clue.engineering",
     2143                    "homepage": "https://clue.engineering/"
     2144                },
     2145                {
     2146                    "name": "Cees-Jan Kiewiet",
     2147                    "email": "reactphp@ceesjankiewiet.nl",
     2148                    "homepage": "https://wyrihaximus.net/"
     2149                },
     2150                {
     2151                    "name": "Chris Boden",
     2152                    "email": "cboden@gmail.com",
     2153                    "homepage": "https://cboden.dev/"
     2154                }
     2155            ],
     2156            "description": "A lightweight implementation of CommonJS Promises/A for PHP",
     2157            "keywords": [
     2158                "promise",
     2159                "promises"
     2160            ],
     2161            "support": {
     2162                "issues": "https://github.com/reactphp/promise/issues",
     2163                "source": "https://github.com/reactphp/promise/tree/3.x"
     2164            },
     2165            "funding": [
     2166                {
     2167                    "url": "https://opencollective.com/reactphp",
     2168                    "type": "open_collective"
     2169                }
     2170            ],
     2171            "time": "2024-11-19T18:32:50+00:00"
     2172        },
     2173        {
     2174            "name": "react/socket",
     2175            "version": "1.x-dev",
     2176            "source": {
     2177                "type": "git",
     2178                "url": "https://github.com/reactphp/socket.git",
     2179                "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1"
     2180            },
     2181            "dist": {
     2182                "type": "zip",
     2183                "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1",
     2184                "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1",
     2185                "shasum": ""
     2186            },
     2187            "require": {
     2188                "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
     2189                "php": ">=5.3.0",
     2190                "react/dns": "^1.13",
     2191                "react/event-loop": "^1.2",
     2192                "react/promise": "^3.2 || ^2.6 || ^1.2.1",
     2193                "react/stream": "^1.4"
     2194            },
     2195            "require-dev": {
     2196                "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
     2197                "react/async": "^4.3 || ^3.3 || ^2",
     2198                "react/promise-stream": "^1.4",
     2199                "react/promise-timer": "^1.11"
     2200            },
     2201            "type": "library",
     2202            "autoload": {
     2203                "psr-4": {
     2204                    "React\\Socket\\": "src/"
     2205                }
     2206            },
     2207            "notification-url": "https://packagist.org/downloads/",
     2208            "license": [
     2209                "MIT"
     2210            ],
     2211            "authors": [
     2212                {
     2213                    "name": "Christian Lück",
     2214                    "email": "christian@clue.engineering",
     2215                    "homepage": "https://clue.engineering/"
     2216                },
     2217                {
     2218                    "name": "Cees-Jan Kiewiet",
     2219                    "email": "reactphp@ceesjankiewiet.nl",
     2220                    "homepage": "https://wyrihaximus.net/"
     2221                },
     2222                {
     2223                    "name": "Jan Sorgalla",
     2224                    "email": "jsorgalla@gmail.com",
     2225                    "homepage": "https://sorgalla.com/"
     2226                },
     2227                {
     2228                    "name": "Chris Boden",
     2229                    "email": "cboden@gmail.com",
     2230                    "homepage": "https://cboden.dev/"
     2231                }
     2232            ],
     2233            "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP",
     2234            "keywords": [
     2235                "Connection",
     2236                "Socket",
     2237                "async",
     2238                "reactphp",
     2239                "stream"
     2240            ],
     2241            "support": {
     2242                "issues": "https://github.com/reactphp/socket/issues",
     2243                "source": "https://github.com/reactphp/socket/tree/v1.16.0"
     2244            },
     2245            "funding": [
     2246                {
     2247                    "url": "https://opencollective.com/reactphp",
     2248                    "type": "open_collective"
     2249                }
     2250            ],
     2251            "time": "2024-07-26T10:38:09+00:00"
     2252        },
     2253        {
     2254            "name": "react/stream",
     2255            "version": "1.x-dev",
     2256            "source": {
     2257                "type": "git",
     2258                "url": "https://github.com/reactphp/stream.git",
     2259                "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d"
     2260            },
     2261            "dist": {
     2262                "type": "zip",
     2263                "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d",
     2264                "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d",
     2265                "shasum": ""
     2266            },
     2267            "require": {
     2268                "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
     2269                "php": ">=5.3.8",
     2270                "react/event-loop": "^1.2"
     2271            },
     2272            "require-dev": {
     2273                "clue/stream-filter": "~1.2",
     2274                "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
     2275            },
     2276            "type": "library",
     2277            "autoload": {
     2278                "psr-4": {
     2279                    "React\\Stream\\": "src/"
     2280                }
     2281            },
     2282            "notification-url": "https://packagist.org/downloads/",
     2283            "license": [
     2284                "MIT"
     2285            ],
     2286            "authors": [
     2287                {
     2288                    "name": "Christian Lück",
     2289                    "email": "christian@clue.engineering",
     2290                    "homepage": "https://clue.engineering/"
     2291                },
     2292                {
     2293                    "name": "Cees-Jan Kiewiet",
     2294                    "email": "reactphp@ceesjankiewiet.nl",
     2295                    "homepage": "https://wyrihaximus.net/"
     2296                },
     2297                {
     2298                    "name": "Jan Sorgalla",
     2299                    "email": "jsorgalla@gmail.com",
     2300                    "homepage": "https://sorgalla.com/"
     2301                },
     2302                {
     2303                    "name": "Chris Boden",
     2304                    "email": "cboden@gmail.com",
     2305                    "homepage": "https://cboden.dev/"
     2306                }
     2307            ],
     2308            "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP",
     2309            "keywords": [
     2310                "event-driven",
     2311                "io",
     2312                "non-blocking",
     2313                "pipe",
     2314                "reactphp",
     2315                "readable",
     2316                "stream",
     2317                "writable"
     2318            ],
     2319            "support": {
     2320                "issues": "https://github.com/reactphp/stream/issues",
     2321                "source": "https://github.com/reactphp/stream/tree/v1.4.0"
     2322            },
     2323            "funding": [
     2324                {
     2325                    "url": "https://opencollective.com/reactphp",
     2326                    "type": "open_collective"
     2327                }
     2328            ],
     2329            "time": "2024-06-11T12:45:25+00:00"
     2330        },
     2331        {
    11392332            "name": "sebastian/cli-parser",
    11402333            "version": "1.0.x-dev",
     
    21803373            ],
    21813374            "time": "2024-08-17T17:43:40+00:00"
     3375        },
     3376        {
     3377            "name": "symfony/console",
     3378            "version": "7.3.x-dev",
     3379            "source": {
     3380                "type": "git",
     3381                "url": "https://github.com/symfony/console.git",
     3382                "reference": "eec43776d7ed956cbcc4ce92f7331c72fbf02040"
     3383            },
     3384            "dist": {
     3385                "type": "zip",
     3386                "url": "https://api.github.com/repos/symfony/console/zipball/eec43776d7ed956cbcc4ce92f7331c72fbf02040",
     3387                "reference": "eec43776d7ed956cbcc4ce92f7331c72fbf02040",
     3388                "shasum": ""
     3389            },
     3390            "require": {
     3391                "php": ">=8.2",
     3392                "symfony/deprecation-contracts": "^2.5|^3",
     3393                "symfony/polyfill-mbstring": "~1.0",
     3394                "symfony/service-contracts": "^2.5|^3",
     3395                "symfony/string": "^6.4|^7.0"
     3396            },
     3397            "conflict": {
     3398                "symfony/dependency-injection": "<6.4",
     3399                "symfony/dotenv": "<6.4",
     3400                "symfony/event-dispatcher": "<6.4",
     3401                "symfony/lock": "<6.4",
     3402                "symfony/process": "<6.4"
     3403            },
     3404            "provide": {
     3405                "psr/log-implementation": "1.0|2.0|3.0"
     3406            },
     3407            "require-dev": {
     3408                "psr/log": "^1|^2|^3",
     3409                "symfony/config": "^6.4|^7.0",
     3410                "symfony/dependency-injection": "^6.4|^7.0",
     3411                "symfony/event-dispatcher": "^6.4|^7.0",
     3412                "symfony/http-foundation": "^6.4|^7.0",
     3413                "symfony/http-kernel": "^6.4|^7.0",
     3414                "symfony/lock": "^6.4|^7.0",
     3415                "symfony/messenger": "^6.4|^7.0",
     3416                "symfony/process": "^6.4|^7.0",
     3417                "symfony/stopwatch": "^6.4|^7.0",
     3418                "symfony/var-dumper": "^6.4|^7.0"
     3419            },
     3420            "type": "library",
     3421            "autoload": {
     3422                "psr-4": {
     3423                    "Symfony\\Component\\Console\\": ""
     3424                },
     3425                "exclude-from-classmap": [
     3426                    "/Tests/"
     3427                ]
     3428            },
     3429            "notification-url": "https://packagist.org/downloads/",
     3430            "license": [
     3431                "MIT"
     3432            ],
     3433            "authors": [
     3434                {
     3435                    "name": "Fabien Potencier",
     3436                    "email": "fabien@symfony.com"
     3437                },
     3438                {
     3439                    "name": "Symfony Community",
     3440                    "homepage": "https://symfony.com/contributors"
     3441                }
     3442            ],
     3443            "description": "Eases the creation of beautiful and testable command line interfaces",
     3444            "homepage": "https://symfony.com",
     3445            "keywords": [
     3446                "cli",
     3447                "command-line",
     3448                "console",
     3449                "terminal"
     3450            ],
     3451            "support": {
     3452                "source": "https://github.com/symfony/console/tree/7.3"
     3453            },
     3454            "funding": [
     3455                {
     3456                    "url": "https://symfony.com/sponsor",
     3457                    "type": "custom"
     3458                },
     3459                {
     3460                    "url": "https://github.com/fabpot",
     3461                    "type": "github"
     3462                },
     3463                {
     3464                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     3465                    "type": "tidelift"
     3466                }
     3467            ],
     3468            "time": "2025-02-06T08:27:43+00:00"
     3469        },
     3470        {
     3471            "name": "symfony/deprecation-contracts",
     3472            "version": "dev-main",
     3473            "source": {
     3474                "type": "git",
     3475                "url": "https://github.com/symfony/deprecation-contracts.git",
     3476                "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62"
     3477            },
     3478            "dist": {
     3479                "type": "zip",
     3480                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62",
     3481                "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62",
     3482                "shasum": ""
     3483            },
     3484            "require": {
     3485                "php": ">=8.1"
     3486            },
     3487            "default-branch": true,
     3488            "type": "library",
     3489            "extra": {
     3490                "thanks": {
     3491                    "url": "https://github.com/symfony/contracts",
     3492                    "name": "symfony/contracts"
     3493                },
     3494                "branch-alias": {
     3495                    "dev-main": "3.6-dev"
     3496                }
     3497            },
     3498            "autoload": {
     3499                "files": [
     3500                    "function.php"
     3501                ]
     3502            },
     3503            "notification-url": "https://packagist.org/downloads/",
     3504            "license": [
     3505                "MIT"
     3506            ],
     3507            "authors": [
     3508                {
     3509                    "name": "Nicolas Grekas",
     3510                    "email": "p@tchwork.com"
     3511                },
     3512                {
     3513                    "name": "Symfony Community",
     3514                    "homepage": "https://symfony.com/contributors"
     3515                }
     3516            ],
     3517            "description": "A generic function and convention to trigger deprecation notices",
     3518            "homepage": "https://symfony.com",
     3519            "support": {
     3520                "source": "https://github.com/symfony/deprecation-contracts/tree/main"
     3521            },
     3522            "funding": [
     3523                {
     3524                    "url": "https://symfony.com/sponsor",
     3525                    "type": "custom"
     3526                },
     3527                {
     3528                    "url": "https://github.com/fabpot",
     3529                    "type": "github"
     3530                },
     3531                {
     3532                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     3533                    "type": "tidelift"
     3534                }
     3535            ],
     3536            "time": "2024-09-25T14:21:43+00:00"
     3537        },
     3538        {
     3539            "name": "symfony/event-dispatcher",
     3540            "version": "7.3.x-dev",
     3541            "source": {
     3542                "type": "git",
     3543                "url": "https://github.com/symfony/event-dispatcher.git",
     3544                "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1"
     3545            },
     3546            "dist": {
     3547                "type": "zip",
     3548                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1",
     3549                "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1",
     3550                "shasum": ""
     3551            },
     3552            "require": {
     3553                "php": ">=8.2",
     3554                "symfony/event-dispatcher-contracts": "^2.5|^3"
     3555            },
     3556            "conflict": {
     3557                "symfony/dependency-injection": "<6.4",
     3558                "symfony/service-contracts": "<2.5"
     3559            },
     3560            "provide": {
     3561                "psr/event-dispatcher-implementation": "1.0",
     3562                "symfony/event-dispatcher-implementation": "2.0|3.0"
     3563            },
     3564            "require-dev": {
     3565                "psr/log": "^1|^2|^3",
     3566                "symfony/config": "^6.4|^7.0",
     3567                "symfony/dependency-injection": "^6.4|^7.0",
     3568                "symfony/error-handler": "^6.4|^7.0",
     3569                "symfony/expression-language": "^6.4|^7.0",
     3570                "symfony/http-foundation": "^6.4|^7.0",
     3571                "symfony/service-contracts": "^2.5|^3",
     3572                "symfony/stopwatch": "^6.4|^7.0"
     3573            },
     3574            "type": "library",
     3575            "autoload": {
     3576                "psr-4": {
     3577                    "Symfony\\Component\\EventDispatcher\\": ""
     3578                },
     3579                "exclude-from-classmap": [
     3580                    "/Tests/"
     3581                ]
     3582            },
     3583            "notification-url": "https://packagist.org/downloads/",
     3584            "license": [
     3585                "MIT"
     3586            ],
     3587            "authors": [
     3588                {
     3589                    "name": "Fabien Potencier",
     3590                    "email": "fabien@symfony.com"
     3591                },
     3592                {
     3593                    "name": "Symfony Community",
     3594                    "homepage": "https://symfony.com/contributors"
     3595                }
     3596            ],
     3597            "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
     3598            "homepage": "https://symfony.com",
     3599            "support": {
     3600                "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0"
     3601            },
     3602            "funding": [
     3603                {
     3604                    "url": "https://symfony.com/sponsor",
     3605                    "type": "custom"
     3606                },
     3607                {
     3608                    "url": "https://github.com/fabpot",
     3609                    "type": "github"
     3610                },
     3611                {
     3612                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     3613                    "type": "tidelift"
     3614                }
     3615            ],
     3616            "time": "2024-09-25T14:21:43+00:00"
     3617        },
     3618        {
     3619            "name": "symfony/event-dispatcher-contracts",
     3620            "version": "dev-main",
     3621            "source": {
     3622                "type": "git",
     3623                "url": "https://github.com/symfony/event-dispatcher-contracts.git",
     3624                "reference": "59eb412e93815df44f05f342958efa9f46b1e586"
     3625            },
     3626            "dist": {
     3627                "type": "zip",
     3628                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586",
     3629                "reference": "59eb412e93815df44f05f342958efa9f46b1e586",
     3630                "shasum": ""
     3631            },
     3632            "require": {
     3633                "php": ">=8.1",
     3634                "psr/event-dispatcher": "^1"
     3635            },
     3636            "default-branch": true,
     3637            "type": "library",
     3638            "extra": {
     3639                "thanks": {
     3640                    "url": "https://github.com/symfony/contracts",
     3641                    "name": "symfony/contracts"
     3642                },
     3643                "branch-alias": {
     3644                    "dev-main": "3.6-dev"
     3645                }
     3646            },
     3647            "autoload": {
     3648                "psr-4": {
     3649                    "Symfony\\Contracts\\EventDispatcher\\": ""
     3650                }
     3651            },
     3652            "notification-url": "https://packagist.org/downloads/",
     3653            "license": [
     3654                "MIT"
     3655            ],
     3656            "authors": [
     3657                {
     3658                    "name": "Nicolas Grekas",
     3659                    "email": "p@tchwork.com"
     3660                },
     3661                {
     3662                    "name": "Symfony Community",
     3663                    "homepage": "https://symfony.com/contributors"
     3664                }
     3665            ],
     3666            "description": "Generic abstractions related to dispatching event",
     3667            "homepage": "https://symfony.com",
     3668            "keywords": [
     3669                "abstractions",
     3670                "contracts",
     3671                "decoupling",
     3672                "interfaces",
     3673                "interoperability",
     3674                "standards"
     3675            ],
     3676            "support": {
     3677                "source": "https://github.com/symfony/event-dispatcher-contracts/tree/main"
     3678            },
     3679            "funding": [
     3680                {
     3681                    "url": "https://symfony.com/sponsor",
     3682                    "type": "custom"
     3683                },
     3684                {
     3685                    "url": "https://github.com/fabpot",
     3686                    "type": "github"
     3687                },
     3688                {
     3689                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     3690                    "type": "tidelift"
     3691                }
     3692            ],
     3693            "time": "2024-09-25T14:21:43+00:00"
     3694        },
     3695        {
     3696            "name": "symfony/filesystem",
     3697            "version": "7.3.x-dev",
     3698            "source": {
     3699                "type": "git",
     3700                "url": "https://github.com/symfony/filesystem.git",
     3701                "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb"
     3702            },
     3703            "dist": {
     3704                "type": "zip",
     3705                "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb",
     3706                "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb",
     3707                "shasum": ""
     3708            },
     3709            "require": {
     3710                "php": ">=8.2",
     3711                "symfony/polyfill-ctype": "~1.8",
     3712                "symfony/polyfill-mbstring": "~1.8"
     3713            },
     3714            "require-dev": {
     3715                "symfony/process": "^6.4|^7.0"
     3716            },
     3717            "type": "library",
     3718            "autoload": {
     3719                "psr-4": {
     3720                    "Symfony\\Component\\Filesystem\\": ""
     3721                },
     3722                "exclude-from-classmap": [
     3723                    "/Tests/"
     3724                ]
     3725            },
     3726            "notification-url": "https://packagist.org/downloads/",
     3727            "license": [
     3728                "MIT"
     3729            ],
     3730            "authors": [
     3731                {
     3732                    "name": "Fabien Potencier",
     3733                    "email": "fabien@symfony.com"
     3734                },
     3735                {
     3736                    "name": "Symfony Community",
     3737                    "homepage": "https://symfony.com/contributors"
     3738                }
     3739            ],
     3740            "description": "Provides basic utilities for the filesystem",
     3741            "homepage": "https://symfony.com",
     3742            "support": {
     3743                "source": "https://github.com/symfony/filesystem/tree/v7.2.0"
     3744            },
     3745            "funding": [
     3746                {
     3747                    "url": "https://symfony.com/sponsor",
     3748                    "type": "custom"
     3749                },
     3750                {
     3751                    "url": "https://github.com/fabpot",
     3752                    "type": "github"
     3753                },
     3754                {
     3755                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     3756                    "type": "tidelift"
     3757                }
     3758            ],
     3759            "time": "2024-10-25T15:15:23+00:00"
     3760        },
     3761        {
     3762            "name": "symfony/finder",
     3763            "version": "7.3.x-dev",
     3764            "source": {
     3765                "type": "git",
     3766                "url": "https://github.com/symfony/finder.git",
     3767                "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d"
     3768            },
     3769            "dist": {
     3770                "type": "zip",
     3771                "url": "https://api.github.com/repos/symfony/finder/zipball/ec2344cf77a48253bbca6939aa3d2477773ea63d",
     3772                "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d",
     3773                "shasum": ""
     3774            },
     3775            "require": {
     3776                "php": ">=8.2"
     3777            },
     3778            "require-dev": {
     3779                "symfony/filesystem": "^6.4|^7.0"
     3780            },
     3781            "type": "library",
     3782            "autoload": {
     3783                "psr-4": {
     3784                    "Symfony\\Component\\Finder\\": ""
     3785                },
     3786                "exclude-from-classmap": [
     3787                    "/Tests/"
     3788                ]
     3789            },
     3790            "notification-url": "https://packagist.org/downloads/",
     3791            "license": [
     3792                "MIT"
     3793            ],
     3794            "authors": [
     3795                {
     3796                    "name": "Fabien Potencier",
     3797                    "email": "fabien@symfony.com"
     3798                },
     3799                {
     3800                    "name": "Symfony Community",
     3801                    "homepage": "https://symfony.com/contributors"
     3802                }
     3803            ],
     3804            "description": "Finds files and directories via an intuitive fluent interface",
     3805            "homepage": "https://symfony.com",
     3806            "support": {
     3807                "source": "https://github.com/symfony/finder/tree/7.3"
     3808            },
     3809            "funding": [
     3810                {
     3811                    "url": "https://symfony.com/sponsor",
     3812                    "type": "custom"
     3813                },
     3814                {
     3815                    "url": "https://github.com/fabpot",
     3816                    "type": "github"
     3817                },
     3818                {
     3819                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     3820                    "type": "tidelift"
     3821                }
     3822            ],
     3823            "time": "2024-12-30T19:00:26+00:00"
     3824        },
     3825        {
     3826            "name": "symfony/options-resolver",
     3827            "version": "7.3.x-dev",
     3828            "source": {
     3829                "type": "git",
     3830                "url": "https://github.com/symfony/options-resolver.git",
     3831                "reference": "62c278c5ba8c2904dc5665042c3d17e83829fd00"
     3832            },
     3833            "dist": {
     3834                "type": "zip",
     3835                "url": "https://api.github.com/repos/symfony/options-resolver/zipball/62c278c5ba8c2904dc5665042c3d17e83829fd00",
     3836                "reference": "62c278c5ba8c2904dc5665042c3d17e83829fd00",
     3837                "shasum": ""
     3838            },
     3839            "require": {
     3840                "php": ">=8.2",
     3841                "symfony/deprecation-contracts": "^2.5|^3"
     3842            },
     3843            "type": "library",
     3844            "autoload": {
     3845                "psr-4": {
     3846                    "Symfony\\Component\\OptionsResolver\\": ""
     3847                },
     3848                "exclude-from-classmap": [
     3849                    "/Tests/"
     3850                ]
     3851            },
     3852            "notification-url": "https://packagist.org/downloads/",
     3853            "license": [
     3854                "MIT"
     3855            ],
     3856            "authors": [
     3857                {
     3858                    "name": "Fabien Potencier",
     3859                    "email": "fabien@symfony.com"
     3860                },
     3861                {
     3862                    "name": "Symfony Community",
     3863                    "homepage": "https://symfony.com/contributors"
     3864                }
     3865            ],
     3866            "description": "Provides an improved replacement for the array_replace PHP function",
     3867            "homepage": "https://symfony.com",
     3868            "keywords": [
     3869                "config",
     3870                "configuration",
     3871                "options"
     3872            ],
     3873            "support": {
     3874                "source": "https://github.com/symfony/options-resolver/tree/7.3"
     3875            },
     3876            "funding": [
     3877                {
     3878                    "url": "https://symfony.com/sponsor",
     3879                    "type": "custom"
     3880                },
     3881                {
     3882                    "url": "https://github.com/fabpot",
     3883                    "type": "github"
     3884                },
     3885                {
     3886                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     3887                    "type": "tidelift"
     3888                }
     3889            ],
     3890            "time": "2025-01-12T17:25:01+00:00"
     3891        },
     3892        {
     3893            "name": "symfony/polyfill-ctype",
     3894            "version": "1.x-dev",
     3895            "source": {
     3896                "type": "git",
     3897                "url": "https://github.com/symfony/polyfill-ctype.git",
     3898                "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
     3899            },
     3900            "dist": {
     3901                "type": "zip",
     3902                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
     3903                "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
     3904                "shasum": ""
     3905            },
     3906            "require": {
     3907                "php": ">=7.2"
     3908            },
     3909            "provide": {
     3910                "ext-ctype": "*"
     3911            },
     3912            "suggest": {
     3913                "ext-ctype": "For best performance"
     3914            },
     3915            "default-branch": true,
     3916            "type": "library",
     3917            "extra": {
     3918                "thanks": {
     3919                    "url": "https://github.com/symfony/polyfill",
     3920                    "name": "symfony/polyfill"
     3921                }
     3922            },
     3923            "autoload": {
     3924                "files": [
     3925                    "bootstrap.php"
     3926                ],
     3927                "psr-4": {
     3928                    "Symfony\\Polyfill\\Ctype\\": ""
     3929                }
     3930            },
     3931            "notification-url": "https://packagist.org/downloads/",
     3932            "license": [
     3933                "MIT"
     3934            ],
     3935            "authors": [
     3936                {
     3937                    "name": "Gert de Pagter",
     3938                    "email": "BackEndTea@gmail.com"
     3939                },
     3940                {
     3941                    "name": "Symfony Community",
     3942                    "homepage": "https://symfony.com/contributors"
     3943                }
     3944            ],
     3945            "description": "Symfony polyfill for ctype functions",
     3946            "homepage": "https://symfony.com",
     3947            "keywords": [
     3948                "compatibility",
     3949                "ctype",
     3950                "polyfill",
     3951                "portable"
     3952            ],
     3953            "support": {
     3954                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0"
     3955            },
     3956            "funding": [
     3957                {
     3958                    "url": "https://symfony.com/sponsor",
     3959                    "type": "custom"
     3960                },
     3961                {
     3962                    "url": "https://github.com/fabpot",
     3963                    "type": "github"
     3964                },
     3965                {
     3966                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     3967                    "type": "tidelift"
     3968                }
     3969            ],
     3970            "time": "2024-09-09T11:45:10+00:00"
     3971        },
     3972        {
     3973            "name": "symfony/polyfill-intl-grapheme",
     3974            "version": "1.x-dev",
     3975            "source": {
     3976                "type": "git",
     3977                "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
     3978                "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe"
     3979            },
     3980            "dist": {
     3981                "type": "zip",
     3982                "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
     3983                "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
     3984                "shasum": ""
     3985            },
     3986            "require": {
     3987                "php": ">=7.2"
     3988            },
     3989            "suggest": {
     3990                "ext-intl": "For best performance"
     3991            },
     3992            "default-branch": true,
     3993            "type": "library",
     3994            "extra": {
     3995                "thanks": {
     3996                    "url": "https://github.com/symfony/polyfill",
     3997                    "name": "symfony/polyfill"
     3998                }
     3999            },
     4000            "autoload": {
     4001                "files": [
     4002                    "bootstrap.php"
     4003                ],
     4004                "psr-4": {
     4005                    "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
     4006                }
     4007            },
     4008            "notification-url": "https://packagist.org/downloads/",
     4009            "license": [
     4010                "MIT"
     4011            ],
     4012            "authors": [
     4013                {
     4014                    "name": "Nicolas Grekas",
     4015                    "email": "p@tchwork.com"
     4016                },
     4017                {
     4018                    "name": "Symfony Community",
     4019                    "homepage": "https://symfony.com/contributors"
     4020                }
     4021            ],
     4022            "description": "Symfony polyfill for intl's grapheme_* functions",
     4023            "homepage": "https://symfony.com",
     4024            "keywords": [
     4025                "compatibility",
     4026                "grapheme",
     4027                "intl",
     4028                "polyfill",
     4029                "portable",
     4030                "shim"
     4031            ],
     4032            "support": {
     4033                "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0"
     4034            },
     4035            "funding": [
     4036                {
     4037                    "url": "https://symfony.com/sponsor",
     4038                    "type": "custom"
     4039                },
     4040                {
     4041                    "url": "https://github.com/fabpot",
     4042                    "type": "github"
     4043                },
     4044                {
     4045                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     4046                    "type": "tidelift"
     4047                }
     4048            ],
     4049            "time": "2024-09-09T11:45:10+00:00"
     4050        },
     4051        {
     4052            "name": "symfony/polyfill-intl-normalizer",
     4053            "version": "1.x-dev",
     4054            "source": {
     4055                "type": "git",
     4056                "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
     4057                "reference": "3833d7255cc303546435cb650316bff708a1c75c"
     4058            },
     4059            "dist": {
     4060                "type": "zip",
     4061                "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c",
     4062                "reference": "3833d7255cc303546435cb650316bff708a1c75c",
     4063                "shasum": ""
     4064            },
     4065            "require": {
     4066                "php": ">=7.2"
     4067            },
     4068            "suggest": {
     4069                "ext-intl": "For best performance"
     4070            },
     4071            "default-branch": true,
     4072            "type": "library",
     4073            "extra": {
     4074                "thanks": {
     4075                    "url": "https://github.com/symfony/polyfill",
     4076                    "name": "symfony/polyfill"
     4077                }
     4078            },
     4079            "autoload": {
     4080                "files": [
     4081                    "bootstrap.php"
     4082                ],
     4083                "psr-4": {
     4084                    "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
     4085                },
     4086                "classmap": [
     4087                    "Resources/stubs"
     4088                ]
     4089            },
     4090            "notification-url": "https://packagist.org/downloads/",
     4091            "license": [
     4092                "MIT"
     4093            ],
     4094            "authors": [
     4095                {
     4096                    "name": "Nicolas Grekas",
     4097                    "email": "p@tchwork.com"
     4098                },
     4099                {
     4100                    "name": "Symfony Community",
     4101                    "homepage": "https://symfony.com/contributors"
     4102                }
     4103            ],
     4104            "description": "Symfony polyfill for intl's Normalizer class and related functions",
     4105            "homepage": "https://symfony.com",
     4106            "keywords": [
     4107                "compatibility",
     4108                "intl",
     4109                "normalizer",
     4110                "polyfill",
     4111                "portable",
     4112                "shim"
     4113            ],
     4114            "support": {
     4115                "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0"
     4116            },
     4117            "funding": [
     4118                {
     4119                    "url": "https://symfony.com/sponsor",
     4120                    "type": "custom"
     4121                },
     4122                {
     4123                    "url": "https://github.com/fabpot",
     4124                    "type": "github"
     4125                },
     4126                {
     4127                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     4128                    "type": "tidelift"
     4129                }
     4130            ],
     4131            "time": "2024-09-09T11:45:10+00:00"
     4132        },
     4133        {
     4134            "name": "symfony/polyfill-mbstring",
     4135            "version": "1.x-dev",
     4136            "source": {
     4137                "type": "git",
     4138                "url": "https://github.com/symfony/polyfill-mbstring.git",
     4139                "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493"
     4140            },
     4141            "dist": {
     4142                "type": "zip",
     4143                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493",
     4144                "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493",
     4145                "shasum": ""
     4146            },
     4147            "require": {
     4148                "ext-iconv": "*",
     4149                "php": ">=7.2"
     4150            },
     4151            "provide": {
     4152                "ext-mbstring": "*"
     4153            },
     4154            "suggest": {
     4155                "ext-mbstring": "For best performance"
     4156            },
     4157            "default-branch": true,
     4158            "type": "library",
     4159            "extra": {
     4160                "thanks": {
     4161                    "url": "https://github.com/symfony/polyfill",
     4162                    "name": "symfony/polyfill"
     4163                }
     4164            },
     4165            "autoload": {
     4166                "files": [
     4167                    "bootstrap.php"
     4168                ],
     4169                "psr-4": {
     4170                    "Symfony\\Polyfill\\Mbstring\\": ""
     4171                }
     4172            },
     4173            "notification-url": "https://packagist.org/downloads/",
     4174            "license": [
     4175                "MIT"
     4176            ],
     4177            "authors": [
     4178                {
     4179                    "name": "Nicolas Grekas",
     4180                    "email": "p@tchwork.com"
     4181                },
     4182                {
     4183                    "name": "Symfony Community",
     4184                    "homepage": "https://symfony.com/contributors"
     4185                }
     4186            ],
     4187            "description": "Symfony polyfill for the Mbstring extension",
     4188            "homepage": "https://symfony.com",
     4189            "keywords": [
     4190                "compatibility",
     4191                "mbstring",
     4192                "polyfill",
     4193                "portable",
     4194                "shim"
     4195            ],
     4196            "support": {
     4197                "source": "https://github.com/symfony/polyfill-mbstring/tree/1.x"
     4198            },
     4199            "funding": [
     4200                {
     4201                    "url": "https://symfony.com/sponsor",
     4202                    "type": "custom"
     4203                },
     4204                {
     4205                    "url": "https://github.com/fabpot",
     4206                    "type": "github"
     4207                },
     4208                {
     4209                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     4210                    "type": "tidelift"
     4211                }
     4212            ],
     4213            "time": "2024-12-23T08:48:59+00:00"
    21824214        },
    21834215        {
     
    22574289            ],
    22584290            "time": "2024-05-31T15:07:36+00:00"
     4291        },
     4292        {
     4293            "name": "symfony/polyfill-php80",
     4294            "version": "1.x-dev",
     4295            "source": {
     4296                "type": "git",
     4297                "url": "https://github.com/symfony/polyfill-php80.git",
     4298                "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
     4299            },
     4300            "dist": {
     4301                "type": "zip",
     4302                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
     4303                "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
     4304                "shasum": ""
     4305            },
     4306            "require": {
     4307                "php": ">=7.2"
     4308            },
     4309            "default-branch": true,
     4310            "type": "library",
     4311            "extra": {
     4312                "thanks": {
     4313                    "url": "https://github.com/symfony/polyfill",
     4314                    "name": "symfony/polyfill"
     4315                }
     4316            },
     4317            "autoload": {
     4318                "files": [
     4319                    "bootstrap.php"
     4320                ],
     4321                "psr-4": {
     4322                    "Symfony\\Polyfill\\Php80\\": ""
     4323                },
     4324                "classmap": [
     4325                    "Resources/stubs"
     4326                ]
     4327            },
     4328            "notification-url": "https://packagist.org/downloads/",
     4329            "license": [
     4330                "MIT"
     4331            ],
     4332            "authors": [
     4333                {
     4334                    "name": "Ion Bazan",
     4335                    "email": "ion.bazan@gmail.com"
     4336                },
     4337                {
     4338                    "name": "Nicolas Grekas",
     4339                    "email": "p@tchwork.com"
     4340                },
     4341                {
     4342                    "name": "Symfony Community",
     4343                    "homepage": "https://symfony.com/contributors"
     4344                }
     4345            ],
     4346            "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
     4347            "homepage": "https://symfony.com",
     4348            "keywords": [
     4349                "compatibility",
     4350                "polyfill",
     4351                "portable",
     4352                "shim"
     4353            ],
     4354            "support": {
     4355                "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
     4356            },
     4357            "funding": [
     4358                {
     4359                    "url": "https://symfony.com/sponsor",
     4360                    "type": "custom"
     4361                },
     4362                {
     4363                    "url": "https://github.com/fabpot",
     4364                    "type": "github"
     4365                },
     4366                {
     4367                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     4368                    "type": "tidelift"
     4369                }
     4370            ],
     4371            "time": "2024-09-09T11:45:10+00:00"
     4372        },
     4373        {
     4374            "name": "symfony/polyfill-php81",
     4375            "version": "1.x-dev",
     4376            "source": {
     4377                "type": "git",
     4378                "url": "https://github.com/symfony/polyfill-php81.git",
     4379                "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c"
     4380            },
     4381            "dist": {
     4382                "type": "zip",
     4383                "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
     4384                "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
     4385                "shasum": ""
     4386            },
     4387            "require": {
     4388                "php": ">=7.2"
     4389            },
     4390            "default-branch": true,
     4391            "type": "library",
     4392            "extra": {
     4393                "thanks": {
     4394                    "url": "https://github.com/symfony/polyfill",
     4395                    "name": "symfony/polyfill"
     4396                }
     4397            },
     4398            "autoload": {
     4399                "files": [
     4400                    "bootstrap.php"
     4401                ],
     4402                "psr-4": {
     4403                    "Symfony\\Polyfill\\Php81\\": ""
     4404                },
     4405                "classmap": [
     4406                    "Resources/stubs"
     4407                ]
     4408            },
     4409            "notification-url": "https://packagist.org/downloads/",
     4410            "license": [
     4411                "MIT"
     4412            ],
     4413            "authors": [
     4414                {
     4415                    "name": "Nicolas Grekas",
     4416                    "email": "p@tchwork.com"
     4417                },
     4418                {
     4419                    "name": "Symfony Community",
     4420                    "homepage": "https://symfony.com/contributors"
     4421                }
     4422            ],
     4423            "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
     4424            "homepage": "https://symfony.com",
     4425            "keywords": [
     4426                "compatibility",
     4427                "polyfill",
     4428                "portable",
     4429                "shim"
     4430            ],
     4431            "support": {
     4432                "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0"
     4433            },
     4434            "funding": [
     4435                {
     4436                    "url": "https://symfony.com/sponsor",
     4437                    "type": "custom"
     4438                },
     4439                {
     4440                    "url": "https://github.com/fabpot",
     4441                    "type": "github"
     4442                },
     4443                {
     4444                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     4445                    "type": "tidelift"
     4446                }
     4447            ],
     4448            "time": "2024-09-09T11:45:10+00:00"
     4449        },
     4450        {
     4451            "name": "symfony/process",
     4452            "version": "7.3.x-dev",
     4453            "source": {
     4454                "type": "git",
     4455                "url": "https://github.com/symfony/process.git",
     4456                "reference": "2b42be26326a4fae4313751b40a2ecb60e619311"
     4457            },
     4458            "dist": {
     4459                "type": "zip",
     4460                "url": "https://api.github.com/repos/symfony/process/zipball/2b42be26326a4fae4313751b40a2ecb60e619311",
     4461                "reference": "2b42be26326a4fae4313751b40a2ecb60e619311",
     4462                "shasum": ""
     4463            },
     4464            "require": {
     4465                "php": ">=8.2"
     4466            },
     4467            "type": "library",
     4468            "autoload": {
     4469                "psr-4": {
     4470                    "Symfony\\Component\\Process\\": ""
     4471                },
     4472                "exclude-from-classmap": [
     4473                    "/Tests/"
     4474                ]
     4475            },
     4476            "notification-url": "https://packagist.org/downloads/",
     4477            "license": [
     4478                "MIT"
     4479            ],
     4480            "authors": [
     4481                {
     4482                    "name": "Fabien Potencier",
     4483                    "email": "fabien@symfony.com"
     4484                },
     4485                {
     4486                    "name": "Symfony Community",
     4487                    "homepage": "https://symfony.com/contributors"
     4488                }
     4489            ],
     4490            "description": "Executes commands in sub-processes",
     4491            "homepage": "https://symfony.com",
     4492            "support": {
     4493                "source": "https://github.com/symfony/process/tree/7.3"
     4494            },
     4495            "funding": [
     4496                {
     4497                    "url": "https://symfony.com/sponsor",
     4498                    "type": "custom"
     4499                },
     4500                {
     4501                    "url": "https://github.com/fabpot",
     4502                    "type": "github"
     4503                },
     4504                {
     4505                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     4506                    "type": "tidelift"
     4507                }
     4508            ],
     4509            "time": "2025-02-14T16:23:49+00:00"
     4510        },
     4511        {
     4512            "name": "symfony/service-contracts",
     4513            "version": "dev-main",
     4514            "source": {
     4515                "type": "git",
     4516                "url": "https://github.com/symfony/service-contracts.git",
     4517                "reference": "5ad38698559cf88b6296629e19b15ef3239c9d7a"
     4518            },
     4519            "dist": {
     4520                "type": "zip",
     4521                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/5ad38698559cf88b6296629e19b15ef3239c9d7a",
     4522                "reference": "5ad38698559cf88b6296629e19b15ef3239c9d7a",
     4523                "shasum": ""
     4524            },
     4525            "require": {
     4526                "php": ">=8.1",
     4527                "psr/container": "^1.1|^2.0",
     4528                "symfony/deprecation-contracts": "^2.5|^3"
     4529            },
     4530            "conflict": {
     4531                "ext-psr": "<1.1|>=2"
     4532            },
     4533            "default-branch": true,
     4534            "type": "library",
     4535            "extra": {
     4536                "thanks": {
     4537                    "url": "https://github.com/symfony/contracts",
     4538                    "name": "symfony/contracts"
     4539                },
     4540                "branch-alias": {
     4541                    "dev-main": "3.6-dev"
     4542                }
     4543            },
     4544            "autoload": {
     4545                "psr-4": {
     4546                    "Symfony\\Contracts\\Service\\": ""
     4547                },
     4548                "exclude-from-classmap": [
     4549                    "/Test/"
     4550                ]
     4551            },
     4552            "notification-url": "https://packagist.org/downloads/",
     4553            "license": [
     4554                "MIT"
     4555            ],
     4556            "authors": [
     4557                {
     4558                    "name": "Nicolas Grekas",
     4559                    "email": "p@tchwork.com"
     4560                },
     4561                {
     4562                    "name": "Symfony Community",
     4563                    "homepage": "https://symfony.com/contributors"
     4564                }
     4565            ],
     4566            "description": "Generic abstractions related to writing services",
     4567            "homepage": "https://symfony.com",
     4568            "keywords": [
     4569                "abstractions",
     4570                "contracts",
     4571                "decoupling",
     4572                "interfaces",
     4573                "interoperability",
     4574                "standards"
     4575            ],
     4576            "support": {
     4577                "source": "https://github.com/symfony/service-contracts/tree/main"
     4578            },
     4579            "funding": [
     4580                {
     4581                    "url": "https://symfony.com/sponsor",
     4582                    "type": "custom"
     4583                },
     4584                {
     4585                    "url": "https://github.com/fabpot",
     4586                    "type": "github"
     4587                },
     4588                {
     4589                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     4590                    "type": "tidelift"
     4591                }
     4592            ],
     4593            "time": "2024-09-25T14:21:43+00:00"
     4594        },
     4595        {
     4596            "name": "symfony/stopwatch",
     4597            "version": "7.3.x-dev",
     4598            "source": {
     4599                "type": "git",
     4600                "url": "https://github.com/symfony/stopwatch.git",
     4601                "reference": "e46690d5b9d7164a6d061cab1e8d46141b9f49df"
     4602            },
     4603            "dist": {
     4604                "type": "zip",
     4605                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/e46690d5b9d7164a6d061cab1e8d46141b9f49df",
     4606                "reference": "e46690d5b9d7164a6d061cab1e8d46141b9f49df",
     4607                "shasum": ""
     4608            },
     4609            "require": {
     4610                "php": ">=8.2",
     4611                "symfony/service-contracts": "^2.5|^3"
     4612            },
     4613            "type": "library",
     4614            "autoload": {
     4615                "psr-4": {
     4616                    "Symfony\\Component\\Stopwatch\\": ""
     4617                },
     4618                "exclude-from-classmap": [
     4619                    "/Tests/"
     4620                ]
     4621            },
     4622            "notification-url": "https://packagist.org/downloads/",
     4623            "license": [
     4624                "MIT"
     4625            ],
     4626            "authors": [
     4627                {
     4628                    "name": "Fabien Potencier",
     4629                    "email": "fabien@symfony.com"
     4630                },
     4631                {
     4632                    "name": "Symfony Community",
     4633                    "homepage": "https://symfony.com/contributors"
     4634                }
     4635            ],
     4636            "description": "Provides a way to profile code",
     4637            "homepage": "https://symfony.com",
     4638            "support": {
     4639                "source": "https://github.com/symfony/stopwatch/tree/7.2"
     4640            },
     4641            "funding": [
     4642                {
     4643                    "url": "https://symfony.com/sponsor",
     4644                    "type": "custom"
     4645                },
     4646                {
     4647                    "url": "https://github.com/fabpot",
     4648                    "type": "github"
     4649                },
     4650                {
     4651                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     4652                    "type": "tidelift"
     4653                }
     4654            ],
     4655            "time": "2024-12-18T14:28:33+00:00"
     4656        },
     4657        {
     4658            "name": "symfony/string",
     4659            "version": "7.3.x-dev",
     4660            "source": {
     4661                "type": "git",
     4662                "url": "https://github.com/symfony/string.git",
     4663                "reference": "373a11f2d03e71934a0023888edf3328a583e4ec"
     4664            },
     4665            "dist": {
     4666                "type": "zip",
     4667                "url": "https://api.github.com/repos/symfony/string/zipball/373a11f2d03e71934a0023888edf3328a583e4ec",
     4668                "reference": "373a11f2d03e71934a0023888edf3328a583e4ec",
     4669                "shasum": ""
     4670            },
     4671            "require": {
     4672                "php": ">=8.2",
     4673                "symfony/polyfill-ctype": "~1.8",
     4674                "symfony/polyfill-intl-grapheme": "~1.0",
     4675                "symfony/polyfill-intl-normalizer": "~1.0",
     4676                "symfony/polyfill-mbstring": "~1.0"
     4677            },
     4678            "conflict": {
     4679                "symfony/translation-contracts": "<2.5"
     4680            },
     4681            "require-dev": {
     4682                "symfony/emoji": "^7.1",
     4683                "symfony/error-handler": "^6.4|^7.0",
     4684                "symfony/http-client": "^6.4|^7.0",
     4685                "symfony/intl": "^6.4|^7.0",
     4686                "symfony/translation-contracts": "^2.5|^3.0",
     4687                "symfony/var-exporter": "^6.4|^7.0"
     4688            },
     4689            "type": "library",
     4690            "autoload": {
     4691                "files": [
     4692                    "Resources/functions.php"
     4693                ],
     4694                "psr-4": {
     4695                    "Symfony\\Component\\String\\": ""
     4696                },
     4697                "exclude-from-classmap": [
     4698                    "/Tests/"
     4699                ]
     4700            },
     4701            "notification-url": "https://packagist.org/downloads/",
     4702            "license": [
     4703                "MIT"
     4704            ],
     4705            "authors": [
     4706                {
     4707                    "name": "Nicolas Grekas",
     4708                    "email": "p@tchwork.com"
     4709                },
     4710                {
     4711                    "name": "Symfony Community",
     4712                    "homepage": "https://symfony.com/contributors"
     4713                }
     4714            ],
     4715            "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
     4716            "homepage": "https://symfony.com",
     4717            "keywords": [
     4718                "grapheme",
     4719                "i18n",
     4720                "string",
     4721                "unicode",
     4722                "utf-8",
     4723                "utf8"
     4724            ],
     4725            "support": {
     4726                "source": "https://github.com/symfony/string/tree/7.3"
     4727            },
     4728            "funding": [
     4729                {
     4730                    "url": "https://symfony.com/sponsor",
     4731                    "type": "custom"
     4732                },
     4733                {
     4734                    "url": "https://github.com/fabpot",
     4735                    "type": "github"
     4736                },
     4737                {
     4738                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     4739                    "type": "tidelift"
     4740                }
     4741            ],
     4742            "time": "2025-01-05T16:34:30+00:00"
    22594743        },
    22604744        {
     
    25595043    "platform": [],
    25605044    "platform-dev": [],
    2561     "plugin-api-version": "2.3.0"
     5045    "plugin-api-version": "2.6.0"
    25625046}
  • cookielegit/trunk/cookie-legit-functions.php

    r3148248 r3251291  
    11<?php
     2
     3use Cookie_Legit\Models\Cookie_Legit_Settings;
    24
    35/**
     
    3436    return null;
    3537}
     38
     39/**
     40 * Get a CookieLegit setting
     41 * @param string $group
     42 * @param string $setting
     43 * @param mixed $default
     44 * @return mixed
     45 */
     46function cookie_legit_get_setting($group, $setting, $default = null)
     47{
     48    return Cookie_Legit_Settings::get_setting($group, $setting, $default);
     49}
  • cookielegit/trunk/cookie-legit.php

    r3149580 r3251291  
    55 * Plugin Name: CookieLegit
    66 * Description: The last cookie manager you'll need
    7  * Version: 1.0.2
     7 * Version: 1.1.0
    88 * Author: CookieLegit
    99 * Author URI: https://cookielegit.site/
     
    1414 * License URI: https://www.gnu.org/licenses/gpl-3.0.html
    1515 * Requires at least: 5.8
    16  * Tested up to: 6.6.1
     16 * Tested up to: 6.7.2
    1717 * Requires PHP: 8.0
    1818 */
     
    2424
    2525if (!defined('COOKIE_LEGIT_VERSION')) {
    26   define('COOKIE_LEGIT_VERSION', '1.0.0');
     26  define('COOKIE_LEGIT_VERSION', '1.1.0');
    2727}
    2828
  • cookielegit/trunk/dist/admin.js

    r3148248 r3251291  
    1 (()=>{var t={};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),(()=>{var o;t.g.importScripts&&(o=t.g.location+"");var e=t.g.document;if(!o&&e&&(e.currentScript&&(o=e.currentScript.src),!o)){var n=e.getElementsByTagName("script");if(n.length)for(var i=n.length-1;i>-1&&!o;)o=n[i--].src}if(!o)throw new Error("Automatic publicPath is not supported in this browser");o=o.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),t.p=o})(),jQuery((function(t){t(".notice-type-option").on("change",(function(){const o=t(this).val();t(".banner-position-options").addClass("hide"),t(`.banner-position-options[data-notice-type="${o}"]`).removeClass("hide"),t(`.banner-position-options[data-notice-type="${o}"]`).find("input").first().prop("checked",!0)})),t("#pixel-settings-consent-mode").on("change",(function(){t(this).is(":checked")?t(".row-pixel:not(.row-google_tag_manager)").addClass("hide"):t(".row-pixel:not(.row-google_tag_manager)").removeClass("hide")})),t(window).on("scroll",(function(){const o=t(".cl-form-header"),e=t("#wpadminbar");o.offset().top===e.offset().top+e.height()?o.addClass("is-stuck"):o.removeClass("is-stuck")}))})),(()=>{"use strict";t.p})()})();
     1(()=>{var o={};o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(o){if("object"==typeof window)return window}}(),(()=>{var t;o.g.importScripts&&(t=o.g.location+"");var e=o.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var i=e.getElementsByTagName("script");if(i.length)for(var n=i.length-1;n>-1&&!t;)t=i[n--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=t})(),jQuery((function(o){o(".notice-type-option").on("change",(function(){const t=o(this).val();o(".banner-position-options").addClass("hide"),o(`.banner-position-options[data-notice-type="${t}"]`).removeClass("hide"),o(`.banner-position-options[data-notice-type="${t}"]`).find("input").first().prop("checked",!0)})),o("#pixel-settings-consent-mode").on("change",(function(){o(this).is(":checked")?(o(".row-pixel:not(.row-google_tag_manager)").addClass("hide"),o(".row-google-tag").removeClass("hide")):(o(".row-google-tag").addClass("hide"),o(".row-pixel:not(.row-google_tag_manager)").removeClass("hide"))})),o(window).on("scroll",(function(){const t=o(".cl-form-header"),e=o("#wpadminbar");t.offset().top===e.offset().top+e.height()?t.addClass("is-stuck"):t.removeClass("is-stuck")}))})),(()=>{"use strict";o.p})()})();
  • cookielegit/trunk/dist/public.js

    r3148281 r3251291  
    1 (()=>{"use strict";var e={};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var n=e.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var s=n.getElementsByTagName("script");if(s.length)for(var i=s.length-1;i>-1&&!t;)t=s[i--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})(),(()=>{class e{static list(){const e=[],t=document.cookie.split("; ");for(let n=0;n<t.length;n++){const s=t[n].split("="),i=s[0];let c=s.length>1?s[1]:null;e.push({name:i,value:c})}return e}static find(e=""){return this.list().find((t=>t.name===e))||null}static create(e,t,n=1,s="/"){const i=new Date,c=new Date(i.getTime()+24*n*60*60*1e3);return document.cookie=`${e}=${t}; expires=${c}; path=${s}`,this}static delete(e){return document.cookie=`${e}=; Max-Age=-99999999;`,this}}class t{#e=null;#t=null;#n=null;#s=[];screens=["notice","preferences","toggle-preferences"];consentCookieName="cl_consent";cookieNames=["cl_consent","cl_essential","cl_tracking","cl_marketing"];defaultSettings={baseUrl:null,userOpt:!1,consentMode:!1,cookieDuration:182,themeUrl:null};static#i={"cookie-legit-init":[],"notice-loaded":[],"consent-given":[],"consent-updated":[]};constructor(e,t){return this.#n=Object.assign({},this.defaultSettings,t),this.#e=this.selectTarget(e),this.checkConsentCookies(),this.insertNotice(),this.maybeInjectScripts(),this}buildStyle(e){const t=document.createElement("link");t.href=this.#n.themeUrl,t.rel="stylesheet",t.id="cookielegit-css",t.onload=()=>{e.style.display=""},document.head.append(t)}checkConsentCookies(){e.list().filter((e=>e.name.startsWith("cl_"))).forEach((e=>this.#s.push(e))),this.#n.consentMode&&this.#s.length>0&&this.updateGTMConsent(),this.#s.length>0&&t.#c("consent-given")}selectTarget(e){return document.querySelector(e)}async insertNotice(){let e=await this.fetchNotice();this.#t=document.createElement("div"),this.#t.id="cookie-legit-notice-container",this.#t.innerHTML=e.html,this.#t.style.display="none";let t=0===this.#s.length?"notice":"toggle-preferences";this.#t.classList.add(t),this.#e.appendChild(this.#t),this.setupEvents(),this.#n.userOpt&&this.setPrefToggles(),this.buildStyle(this.#t)}async fetchNotice(){const e=await fetch(`${this.#n.baseUrl}?action=get_cookie_notice`);return await e.json()}setupEvents(){this.#n.userOpt?(this.#t.querySelector(".cookie-legit-pref-btn").addEventListener("click",(()=>this.toggleUserPreferences())),this.#t.querySelector(".cookie-legit-save-pref-btn").addEventListener("click",(()=>this.savePreferences())),this.#t.querySelector(".cookie-legit-accept-pref-btn").addEventListener("click",(()=>this.acceptAllCookies()))):this.#t.querySelector(".cookie-legit-deny-btn").addEventListener("click",(()=>this.denyAllCookies())),this.#t.querySelector(".cookie-legit-preferences-change").addEventListener("click",(()=>this.updatePreferences())),this.#t.querySelector(".cookie-legit-accept-btn").addEventListener("click",(()=>this.acceptAllCookies()))}toggleUserPreferences(){this.changeScreen("preferences")}acceptAllCookies(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{e.create(t,!0,this.#n.cookieDuration)})),this.checkConsentCookies()}savePreferences(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{let n=t===this.consentCookieName||this.#t.querySelector(`input[name=${t}]`).checked;e.create(t,n,this.#n.cookieDuration)})),this.checkConsentCookies()}updatePreferences(){let e=this.#n.userOpt?"preferences":"notice";this.changeScreen(e),this.checkConsentCookies(),t.#c("consent-updated")}denyAllCookies(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{let n=t===this.consentCookieName;e.create(t,n,this.#n.cookieDuration)})),this.checkConsentCookies()}changeScreen(e){let t=this.screens.filter((t=>t!==e));this.#t.classList.remove(...t),this.#t.classList.add(e)}setPrefToggles(){this.#s.forEach((e=>{let t=this.#t.querySelector(`input[name=${e.name}]`);t&&(t.checked="true"===e.value)}))}async maybeInjectScripts(){if(!this.#n.userOpt||"true"!==e.find(this.consentCookieName))return;let t=await fetch(`${this.#n.baseUrl}?action=get_tracking_scripts`),n=await t.json();for(const e in n)if(Object.hasOwnProperty.call(n,e)){const t=n[e];Object.values(t).forEach((t=>{if(this.isJSON(t)){t=JSON.parse(t);for(const n in t)Object.hasOwnProperty.call(t,n)&&t[n].forEach((t=>{let s=this.buildScript(e,t,"srcs"===n);document.querySelector(e).append(s)}))}else{let n=this.buildScript(e,t);document.querySelector(e).append(n)}}))}}updateGTMConsent(){if("function"==typeof gtag)return gtag("consent","update",this.getGTMConsentObject());window.dataLayer=window.dataLayer||[],window.dataLayer.push({0:"consent",1:"update",2:this.getGTMConsentObject()})}getGTMConsentObject(){return{ad_storage:"true"===e.find("cl_marketing")?.value?"granted":"denied",ad_user_data:"true"===e.find("cl_marketing")?.value?"granted":"denied",ad_personalization:"true"===e.find("cl_marketing")?.value?"granted":"denied",analytics_storage:"true"===e.find("cl_tracking")?.value?"granted":"denied",security_storage:"granted"}}isJSON(e){try{JSON.parse(e)}catch(e){return!1}return!0}buildScript(e,t,n=!1){let s="head"===e?"script":"noscript",i=document.createElement(s);return n?(i.src=t,i):(i.textContent=t,i)}static subscribe(e,t){return this.#i[e]?"function"!=typeof t?console.warn(`Expected callback for ${e} got ${typeof t}`):void this.#i[e].push(t):console.warn(`Cannot subscribe to ${e} because it does not exist!`)}static#c(e){const t=this.#i[e];if(!t)return console.warn(`Cannot trigger ${e} because it does not exist!`);for(let e of t)e()}}jQuery((function(e){t.subscribe("consent-given",(function(){console.log("should update screens"),e("iframe[data-cl-src]").each((function(){e(this).attr("src",e(this).attr("data-cl-src"))})),e("script[type=cookielegitblock]").each((function(){e(this).attr("src",e(this).attr("data-cl-src")),e(this).attr("type",e(this).attr("data-cl-type"))}))})),window.cookieLegitNotice=new t("body",{consentMode:""!==cl_config.consent_mode,userOpt:""!==cl_config.user_opt,baseUrl:cl_config.ajax_url,themeUrl:cl_config.themeUrl})}))})(),e.p})();
     1(()=>{"use strict";var e={};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var n=e.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var i=n.getElementsByTagName("script");if(i.length)for(var s=i.length-1;s>-1&&!t;)t=i[s--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})(),(()=>{class e{static list(){const e=[],t=document.cookie.split("; ");for(let n=0;n<t.length;n++){const i=t[n].split("="),s=i[0];let c=i.length>1?i[1]:null;e.push({name:s,value:c})}return e}static find(e=""){return this.list().find((t=>t.name===e))||null}static create(e,t,n=1,i="/"){const s=new Date,c=new Date(s.getTime()+24*n*60*60*1e3);return document.cookie=`${e}=${t}; expires=${c}; path=${i}`,this}static delete(e){return document.cookie=`${e}=; Max-Age=-99999999;`,this}}class t{#e=null;#t=null;#n=null;#i=[];CONSENT_SETTINGS_NAME="cl_cus";screens=["notice","preferences","toggle-preferences"];consentCookieName="cl_consent";cookieNames=["cl_consent","cl_essential","cl_tracking","cl_marketing"];defaultSettings={baseUrl:null,userOpt:!1,consentMode:!1,cookieDuration:182,themeUrl:null,googleTag:!1};consentCategories={cl_tracking:"marketingCookies",cl_marketing:"advertisingCookies",cl_essential:"essentialCookies"};static#s={"cookie-legit-init":[],"notice-loaded":[],"consent-given":[],"consent-updated":[]};constructor(e,t){return this.#n=Object.assign({},this.defaultSettings,t),this.#e=this.selectTarget(e),this.checkConsentCookies(),this.insertNotice(),this.maybeInjectScripts(),this}buildStyle(e){const t=document.createElement("link");t.href=this.#n.themeUrl,t.rel="stylesheet",t.id="cookielegit-css",t.onload=()=>{e.style.display=""},document.head.append(t)}checkConsentCookies(){if(e.list().filter((e=>e.name.startsWith("cl_"))).forEach((e=>this.#i.push(e))),0===this.#i.length)return;if(this.#n.consentMode&&!this.#n.googleTag)return this.updateGTMConsent(),void t.#c("consent-given");const n=this.getTagConsentSettings();t.#c("consent-given",n),e.create(this.CONSENT_SETTINGS_NAME,JSON.stringify(n))}selectTarget(e){return document.querySelector(e)}async insertNotice(){let e=await this.fetchNotice();this.#t=document.createElement("div"),this.#t.id="cookie-legit-notice-container",this.#t.innerHTML=e.html,this.#t.style.display="none";let t=0===this.#i.length?"notice":"toggle-preferences";this.#t.classList.add(t),this.#e.appendChild(this.#t),this.setupEvents(),this.#n.userOpt&&this.setPrefToggles(),this.buildStyle(this.#t)}async fetchNotice(){const e=await fetch(`${this.#n.baseUrl}?action=get_cookie_notice`);return await e.json()}setupEvents(){this.#n.userOpt?(this.#t.querySelector(".cookie-legit-pref-btn").addEventListener("click",(()=>this.toggleUserPreferences())),this.#t.querySelector(".cookie-legit-save-pref-btn").addEventListener("click",(()=>this.savePreferences())),this.#t.querySelector(".cookie-legit-accept-pref-btn").addEventListener("click",(()=>this.acceptAllCookies()))):this.#t.querySelector(".cookie-legit-deny-btn").addEventListener("click",(()=>this.denyAllCookies())),this.#t.querySelector(".cookie-legit-preferences-change").addEventListener("click",(()=>this.toggleUserPreferences())),this.#t.querySelector(".cookie-legit-accept-btn").addEventListener("click",(()=>this.acceptAllCookies()))}toggleUserPreferences(){this.changeScreen("preferences")}acceptAllCookies(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{e.create(t,!0,this.#n.cookieDuration)})),this.checkConsentCookies()}savePreferences(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{let n=t===this.consentCookieName||this.#t.querySelector(`input[name=${t}]`).checked;e.create(t,n,this.#n.cookieDuration)})),this.checkConsentCookies()}updatePreferences(){let e=this.#n.userOpt?"preferences":"notice";this.changeScreen(e),this.checkConsentCookies(),t.#c("consent-updated")}denyAllCookies(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{let n=t===this.consentCookieName;e.create(t,n,this.#n.cookieDuration)})),this.checkConsentCookies()}changeScreen(e){let t=this.screens.filter((t=>t!==e));this.#t.classList.remove(...t),this.#t.classList.add(e)}setPrefToggles(){this.#i.forEach((e=>{let t=this.#t.querySelector(`input[name=${e.name}]`);t&&(t.checked="true"===e.value)}))}async maybeInjectScripts(){if(!this.#n.userOpt||"true"!==e.find(this.consentCookieName))return;let t=await fetch(`${this.#n.baseUrl}?action=get_tracking_scripts`),n=await t.json();for(const e in n)if(Object.hasOwnProperty.call(n,e)){const t=n[e];Object.values(t).forEach((t=>{if(this.isJSON(t)){t=JSON.parse(t);for(const n in t)Object.hasOwnProperty.call(t,n)&&t[n].forEach((t=>{let i=this.buildScript(e,t,"srcs"===n);document.querySelector(e).append(i)}))}else{let n=this.buildScript(e,t);document.querySelector(e).append(n)}}))}}updateGTMConsent(){if("function"==typeof gtag)return gtag("consent","update",this.getGTMConsentObject());window.dataLayer=window.dataLayer||[],window.dataLayer.push({0:"consent",1:"update",2:this.getGTMConsentObject()})}getGTMConsentObject(){return{ad_storage:"true"===e.find("cl_marketing")?.value?"granted":"denied",ad_user_data:"true"===e.find("cl_marketing")?.value?"granted":"denied",ad_personalization:"true"===e.find("cl_marketing")?.value?"granted":"denied",analytics_storage:"true"===e.find("cl_tracking")?.value?"granted":"denied",security_storage:"granted"}}isJSON(e){try{JSON.parse(e)}catch(e){return!1}return!0}buildScript(e,t,n=!1){let i="head"===e?"script":"noscript",s=document.createElement(i);return n?(s.src=t,s):(s.textContent=t,s)}getTagConsentSettings(){const e={};return this.#i.forEach((t=>{t.name in this.consentCategories&&(e[this.consentCategories[t.name]]="true"===t.value)})),e}static subscribe(e,t){return this.#s[e]?"function"!=typeof t?console.warn(`Expected callback for ${e} got ${typeof t}`):void this.#s[e].push(t):console.warn(`Cannot subscribe to ${e} because it does not exist!`)}static#c(e,...t){const n=this.#s[e];if(!n)return console.warn(`Cannot trigger ${e} because it does not exist!`);for(let e of n)e(...t)}}window.cookieLegitGtmCaller=function(e){t.subscribe("consent-given",e)},jQuery((function(e){t.subscribe("consent-given",(function(){e("iframe[data-cl-src]").each((function(){e(this).attr("src",e(this).attr("data-cl-src"))})),e("script[type=cookielegitblock]").each((function(){e(this).attr("src",e(this).attr("data-cl-src")),e(this).attr("type",e(this).attr("data-cl-type"))}))}));let n=0;t.subscribe("consent-given",(function(e){n++,console.log(`Event 'consent-given' got called ${n} times with args: `,e)})),window.cookieLegitNotice=new t("body",{consentMode:""!==cl_config.consent_mode,userOpt:""!==cl_config.user_opt,baseUrl:cl_config.ajax_url,themeUrl:cl_config.themeUrl,googleTag:""!==cl_config.googleTag})}))})(),e.p})();
  • cookielegit/trunk/readme.txt

    r3149580 r3251291  
    44Tags: CMP, Cookies, Cookie banner, Consent Mode v2, GDPR
    55Requires at least: 5.8
    6 Tested up to: 6.6.1
    7 Stable tag: 1.0.2
     6Tested up to: 6.7.2
     7Stable tag: 1.1.0
    88Requires PHP: 8.0.0
    99License: GPLv3
     
    9090== Changelog ==
    9191
     92# v1.1.0
     93- Added global function for retrieving settings for future performance updates
     94- Added new setting for google tag usage. (Google Tag Template out soon)
     95- Disable use of `gtag` when google tag template is used.
     96
    9297# v1.0.2
    9398- Style loaded async to prevent invalid caching
  • cookielegit/trunk/src/admin/class-cookie-legit-admin-pages.php

    r3148248 r3251291  
    2222        $consent_mode = (isset($pixel_settings['consent_mode']) && $pixel_settings['consent_mode'] === 'on');
    2323
     24        $google_tag = (isset($pixel_settings['google_tag']) && $pixel_settings['google_tag'] === 'on');
     25
    2426        Cookie_Legit_View_Loader::load('admin.settings.settings', [
    2527            'notice_settings' => $notice_settings,
    2628            'pixel_settings' => $pixel_settings,
    2729            'consent_mode' => $consent_mode,
     30            'google_tag' => $google_tag,
    2831            'blocking_settings' => $blocking_settings,
    2932            'active_screen' => $active_screen,
  • cookielegit/trunk/src/models/class-cookie-legit-settings.php

    r3148248 r3251291  
    55class Cookie_Legit_Settings
    66{
    7 
    87  /**
    98   * The setting group to register under
    109   * @var string
    1110   */
    12   public static $settingGroup = "cookie-legit-options-group";
     11  public static $settingGroup = 'cookie-legit-options-group';
    1312
    1413  /**
     
    1716   */
    1817  public static $settingPrefix = 'cookie_legit_';
     18
     19  /**
     20   * Default setting groups for cookie legit
     21   * @var array<string>
     22   */
     23  public static $settingGroups = [
     24    'notice',
     25    'pixel',
     26    'blocking'
     27  ];
    1928
    2029  /**
     
    2938          'type' => 'banner',
    3039          'position' => 'bottom',
    31           'text' => esc_html__("This website uses cookies to ensure the best user experience.", 'cookie-legit'),
     40          'text' => esc_html__('This website uses cookies to ensure the best user experience.', 'cookie-legit'),
    3241          'style' => array(
    33             'background_color' => "#FFFFFF",
    34             'color' => "#000000",
    35             'border_radius' => "0"
     42            'background_color' => '#FFFFFF',
     43            'color' => '#000000',
     44            'border_radius' => '0'
    3645          ),
    3746        ),
     
    4049          'link' => '/privacy',
    4150          'style' => array(
    42             'color' => "#28A745"
     51            'color' => '#28A745'
    4352          ),
    4453        ),
     
    4756            'text' => esc_html__('Change preferences', 'cookie-legit'),
    4857            'style' => array(
    49               'background_color' => "#FFFFFF",
    50               'color' => "#000000",
     58              'background_color' => '#FFFFFF',
     59              'color' => '#000000',
    5160              'border_radius' => 5
    5261            ),
     
    5564            'text' => esc_html__('Save preferences', 'cookie-legit'),
    5665            'style' => array(
    57               'background_color' => "#ffffff",
    58               'color' => "#000000",
     66              'background_color' => '#ffffff',
     67              'color' => '#000000',
    5968              'border_radius' => 5
    6069            ),
     
    6372            'text' => esc_html__('Accept', 'cookie-legit'),
    6473            'style' => array(
    65               'background_color' => "#28A745",
    66               'color' => "#FFFFFF",
     74              'background_color' => '#28A745',
     75              'color' => '#FFFFFF',
    6776              'border_radius' => 5
    6877            ),
     
    7180            'text' => esc_html__('Deny', 'cookie-legit'),
    7281            'style' => array(
    73               'background_color' => "#FFFFFF",
    74               'color' => "#000000",
     82              'background_color' => '#FFFFFF',
     83              'color' => '#000000',
    7584              'border_radius' => 5
    7685            ),
     
    7988        'texts' => array(
    8089          'essential' => array(
    81             'title' => esc_html__("Essential cookies", 'cookie-legit'),
    82             "description" => esc_html__("Cookies that make the website function as intended", 'cookie-legit')
     90            'title' => esc_html__('Essential cookies', 'cookie-legit'),
     91            'description' => esc_html__('Cookies that make the website function as intended', 'cookie-legit')
    8392          ),
    8493          'tracking' => array(
    85             'title' => esc_html__("Analytical cookies", 'cookie-legit'),
    86             'description' => esc_html__("Cookies that keep track of you.", 'cookie-legit'),
     94            'title' => esc_html__('Analytical cookies', 'cookie-legit'),
     95            'description' => esc_html__('Cookies that keep track of you.', 'cookie-legit'),
    8796          ),
    8897          'marketing' => array(
    89             'title' => esc_html__("Marketing cookies", 'cookie-legit'),
    90             'description' => esc_html__("Cookies with marketing purpose.", 'cookie-legit'),
     98            'title' => esc_html__('Marketing cookies', 'cookie-legit'),
     99            'description' => esc_html__('Cookies with marketing purpose.', 'cookie-legit'),
    91100          )
    92101        ),
     
    100109          'meta_pixel' => '',
    101110        ),
    102         'consent_mode' => false
     111        'consent_mode' => false,
     112        'google_tag' => false,
    103113      ),
    104114      'blocking' => array(
     
    162172      'type' => 'text',
    163173      'position' => 'text',
    164       'text' => "text",
     174      'text' => 'text',
    165175      'style' => array(
    166         'background_color' => "color",
    167         'color' => "color",
    168         'border_radius' => "text"
     176        'background_color' => 'color',
     177        'color' => 'color',
     178        'border_radius' => 'text'
    169179      ),
    170180    ),
     
    173183      'link' => 'url',
    174184      'style' => array(
    175         'color' => "color"
     185        'color' => 'color'
    176186      ),
    177187    ),
     
    180190        'text' => 'text',
    181191        'style' => array(
    182           'background_color' => "color",
    183           'color' => "color",
    184           'border_radius' => "text"
     192          'background_color' => 'color',
     193          'color' => 'color',
     194          'border_radius' => 'text'
    185195        ),
    186196      ),
     
    188198        'text' => 'Save preferences',
    189199        'style' => array(
    190           'background_color' => "color",
    191           'text_color' => "color",
    192           'border_radius' => "text"
     200          'background_color' => 'color',
     201          'color' => 'color',
     202          'border_radius' => 'text'
    193203        ),
    194204      ),
     
    196206        'text' => 'text',
    197207        'style' => array(
    198           'background_color' => "color",
    199           'color' => "text",
    200           'border_radius' => "text"
     208          'background_color' => 'color',
     209          'color' => 'text',
     210          'border_radius' => 'text'
    201211        ),
    202212      ),
     
    204214        'text' => 'text',
    205215        'style' => array(
    206           'background_color' => "color",
    207           'color' => "color",
    208           'border_radius' => "text"
     216          'background_color' => 'color',
     217          'color' => 'color',
     218          'border_radius' => 'text'
    209219        ),
    210220      ),
     
    212222    'texts' => array(
    213223      'essential' => array(
    214         'title' => "text",
    215         "description" => "textarea"
     224        'title' => 'text',
     225        'description' => 'textarea'
    216226      ),
    217227      'tracking' => array(
    218         'title' => "text",
    219         'description' => "textarea",
     228        'title' => 'text',
     229        'description' => 'textarea',
    220230      ),
    221231      'marketing' => array(
    222         'title' => "text",
    223         'description' => "textarea",
     232        'title' => 'text',
     233        'description' => 'textarea',
    224234      )
    225235    ),
    226236    'user_opt' => 'text',
    227237    'consent_mode' => 'text',
     238    'google_tag' => 'text',
    228239    'codes' => array(
    229240      'google_tag_manager' => 'text',
     
    244255    'scripts' => array(
    245256      'block' => 'text',
    246       'excludes' => "textarea"
     257      'excludes' => 'textarea'
    247258    ),
    248259    'give_some_love' => 'text'
     
    265276  {
    266277    return apply_filters('cookie_legit_setting_types', self::$defaultSettingTypes);
     278  }
     279
     280  /**
     281   * @return array<string> $settingGroups
     282   */
     283  public static function get_setting_groups()
     284  {
     285    return apply_filters('cookie_legit_setting_groups', self::$settingGroups);
     286  }
     287
     288  /**
     289   * Get single setting
     290   * @param string $group
     291   * @param string $setting
     292   * @param mixed $default
     293   * @return mixed A single setting or group of settings
     294   * @throws \Exception
     295   */
     296  public static function get_setting($group, $setting = null, $default = null)
     297  {
     298    $groups = self::get_setting_groups();
     299
     300    if(!in_array($group, $groups)) {
     301      trigger_error(__CLASS__ .'::' . __FUNCTION__ . " $group is not a valid setting group", E_USER_WARNING);
     302      return $default;
     303    }
     304
     305    $defaultSettings = self::get_default_settings()[$group];
     306
     307    $getSettingGroup = "get_{$group}_settings";
     308   
     309    $settings = self::$getSettingGroup(false);
     310
     311    return self::filter_settings($setting, $settings, $defaultSettings) ?? $default;
     312  }
     313
     314  /**
     315   * @param string $setting
     316   * @param mixed $settings
     317   * @param mixed $default
     318   * @return mixed The setting
     319   */
     320  private static function filter_settings($setting, $settings, $default)
     321  {
     322    $parts = explode('.', $setting);
     323
     324    $settingValue = $settings;
     325    $defaultValue = $default;
     326
     327    foreach($parts as $key) {
     328      $settingValue = $settingValue[$key] ?? null;
     329      $defaultValue = $defaultValue[$key] ?? null;
     330    }
     331
     332    if($settingValue === null && $defaultValue === null) {
     333      trigger_error(__CLASS__ . '::' . __FUNCTION__ . " $setting does not exist", E_USER_WARNING);
     334      return null;
     335    }
     336
     337    return $settingValue ?? $defaultValue;
    267338  }
    268339
     
    404475
    405476    if (cookie_legit_is_translatable()) {
    406       return "_" . cookie_legit_current_language();
     477      return '_' . cookie_legit_current_language();
    407478    }
    408479
  • cookielegit/trunk/src/public/class-cookie-legit-notice.php

    r3148281 r3251291  
    2424            'user_opt' => (isset($notice_settings['user_opt']) && $notice_settings['user_opt'] === 'on'),
    2525            'ajax_url' => admin_url('admin-ajax.php'),
    26             'themeUrl' => COOKIE_LEGIT_URL . 'dist/public.css'
     26            'themeUrl' => COOKIE_LEGIT_URL . 'dist/public.css',
     27            'googleTag' => isset($pixel_settings['google_tag']) && $pixel_settings['google_tag'] === 'on',
    2728        ));
    2829    }
  • cookielegit/trunk/view/admin/settings/partials/pixel_fields.php

    r3148248 r3251291  
    2020                                                                                                                } ?>>
    2121                <label for="pixel-settings-consent-mode"></label>
     22            </div>
     23        </div>
     24    </div>
     25    <div class="cl-form-row row-google-tag<?php if(!$consent_mode) echo esc_attr(' hide'); ?>">
     26        <div class="cl-label-wrapper">
     27            <label><?php esc_html_e('I use the Google Tag', 'cookie-legit'); ?></label>
     28            <p><?php esc_html_e('If enabled the plugin assumes you have integrated our Google Tag into Tag Manager. This provides the best integration when you use Tags that are not owned by Google.', 'cookie-legit'); ?></p>
     29        </div>
     30        <div class="cl-values-wrapper">
     31            <div class="cl-toggle-input">
     32                <input type="checkbox" name="pixels_settings[google_tag]" id="pixel-settings-google-tag" <?php if ($google_tag) {
     33                                                                                                                    echo esc_attr('checked');
     34                                                                                                                } ?>>
     35                <label for="pixel-settings-google-tag"></label>
    2236            </div>
    2337        </div>
Note: See TracChangeset for help on using the changeset viewer.