diff --git a/lib/modules/datasource/cdnjs/__fixtures__/bulma.json b/lib/modules/datasource/cdnjs/__fixtures__/bulma.json deleted file mode 100644 index c314ec5a3dc2347d9ac1c1879dbc82ca5112e52d..0000000000000000000000000000000000000000 --- a/lib/modules/datasource/cdnjs/__fixtures__/bulma.json +++ /dev/null @@ -1,690 +0,0 @@ -{ - "homepage": "http://bulma.io", - "repository": { - "type": "git", - "url": "git+https://github.com/jgthms/bulma.git" - }, - "assets": [ - { - "version": "0.8.1", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css" - ], - "sri": { - "css/bulma.css": "sha256-uByAjQgKh5//Z/gDvbL7MWsDcbwX7d/KizVil6On1dQ=", - "css/bulma.min.css": "sha256-1nEaE91OpXJD7M6W5uSiqxhdmrY+lOOTHC1iUxU9Pds=" - } - }, - { - "version": "0.8.0", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css" - ], - "sri": { - "css/bulma.css": "sha256-XF2msWsEjJwE8ORQ0exG5nFk8jDTntTMbUZKtvPRkgU=", - "css/bulma.min.css": "sha256-D9M5yrVDqFlla7nlELDaYZIpXfFWDytQtiV+TaH6F1I=" - } - }, - { - "version": "0.7.5", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "only/0.7.5/style.css" - ], - "sri": { - "css/bulma.css": "sha256-ujE/ZUB6CMZmyJSgQjXGCF4sRRneOimQplBVLu8OU5w=", - "css/bulma.min.css": "sha256-vK3UTo/8wHbaUn+dTQD0X6dzidqc5l7gczvH+Bnowwk=" - } - }, - { - "version": "0.7.4", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css" - ], - "sri": { - "css/bulma.css": "sha256-aan9tQnm7lVach/6JxYyrQRlheajRD+UBDwwWo3tAHQ=", - "css/bulma.min.css": "sha256-8B1OaG0zT7uYA572S2xOxWACq9NXYPQ+U5kHPV1bJN4=" - } - }, - { - "version": "0.7.2", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css" - ], - "sri": { - "css/bulma.css": "sha256-dMQYvN6BU9M4mHK94P22cZ4dPGTSGOVP41yVXvXatws=", - "css/bulma.min.css": "sha256-2pUeJf+y0ltRPSbKOeJh09ipQFYxUdct5nTY6GAXswA=" - } - }, - { - "version": "0.7.1", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css" - ], - "sri": { - "css/bulma.css": "sha256-zKA1Bf41O96+gJSlkn/Bh2HATW/OhwkApPlYTp3B5O8=", - "css/bulma.min.css": "sha256-zIG416V1ynj3Wgju/scU80KAEWOsO5rRLfVyRDuOv7Q=" - } - }, - { - "version": "0.7.0", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css" - ], - "sri": { - "css/bulma.css": "sha256-8WedeikvPp0OAPWnwgdUHHaoIsl0TPbfX0Q+2P83mGw=", - "css/bulma.min.css": "sha256-Oe/IiGiJY0aqEFSXQHUCtq2gi0cNs2yUqVGFls9EgK8=" - } - }, - { - "version": "0.6.2", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-Ll4Z8mX5+0pGybXIES6J8YjUZUBFcQsJfS00wbXdbG8=", - "css/bulma.min.css": "sha256-2k1KVsNPRXxZOsXQ8aqcZ9GOOwmJTMoOB5o5Qp1d6/s=" - } - }, - { - "version": "0.6.1", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-lUssH++umYLC/97WXqr424ew3ing8e+dATTAmMpCF40=", - "css/bulma.min.css": "sha256-v5YlJGWVLS5hQ+o48fBzCKHEP2vMNsku57x3CosYykc=" - } - }, - { - "version": "0.6.0", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-0QptA3Zlf5Rkda4TBEMHhvZyWUd29CEvGbXG+P0BPYo=", - "css/bulma.min.css": "sha256-HEtF7HLJZSC3Le1HcsWbz1hDYFPZCqDhZa9QsCgVUdw=" - } - }, - { - "version": "0.5.3", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-vbUO+RDktGo8FKNb8XNn0q8liFDhdzxL3BbgMFVp07w=", - "css/bulma.min.css": "sha256-spCEAaZMKebC3rE/ZTt8jITn65b0Zan45WXblWjyDyQ=" - } - }, - { - "version": "0.5.2", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-zwJtr1GyyB98zj9jDSq9OGfgKEFzDYUmXudKYhhhOZo=", - "css/bulma.min.css": "sha256-d+mgRrjtsPCjrT7ltuB1sZ2VybUn1Xgdf8piVG/Va/k=" - } - }, - { - "version": "0.5.1", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-KGzlh3GrZQG1IDswBxp0OXmxeb7h0WezxI8tXeGr3yc=", - "css/bulma.min.css": "sha256-CDVQJfU+jJGU/oyDzvnzuGXbv0rz+SyBsPQwyn7x/jQ=" - } - }, - { - "version": "0.5.0", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-q//QGxAiKlL4UaKx9ox+b2JCphPqIbkl4OATVNeIvI8=", - "css/bulma.min.css": "sha256-qzwp3+P/LN8/hrx0ourjvGEOgPKNS+YNz7dNhasiRmQ=" - } - }, - { - "version": "0.4.4", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-nNnltvVPBWEs6TWdPICdwz/5mbVRtcbK8wzWFdhWle4=", - "css/bulma.min.css": "sha256-cqlVHMFcSR4diUVzW7ot+yIE0EHW0jfNvRG9GVEt8pE=" - } - }, - { - "version": "0.4.3", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-iO7hYdKmrm9CzcGgNrUri6m9rA8CVi0qkG++7J6KlsM=", - "css/bulma.min.css": "sha256-VC9bpAao257nf22leBRLU7AqKGwS9/Ylz8hfpHmOob4=" - } - }, - { - "version": "0.4.2", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-tzp6mtxeugpv7nF5uY4rqr1ZxZynL8F7G5MCwYxJkmY=", - "css/bulma.min.css": "sha256-5MiG346KC5bVXrbDQQU0cjus8r2Yxh07eorYOPNUcmw=" - } - }, - { - "version": "0.4.1", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-PELQzdZwUQw2WSX3q4QLMSzDqQyWrmrXODp2bZy6JOU=", - "css/bulma.min.css": "sha256-n+Ch7oRdzZ9+8/inp+1mK/0Bt4T/2PSmo4L6YGoDiVM=" - } - }, - { - "version": "0.4.0", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-i1MIGXdkXeJJLRlh6NXC1pmb/Rj3jEr0Y4tU0KjK9s4=", - "css/bulma.min.css": "sha256-8nf+BDtOgthqqdcfZXfDwth8LL6k314ILswPBDzXMp4=" - } - }, - { - "version": "0.3.2", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-2W7D1+BaVS4IyQ/jHh9Z97iKyfTY0IdVP+GLoD8Zfi8=", - "css/bulma.min.css": "sha256-gFMi0ldgZQk7xqpcLc/KjAYdPTLqv5Nv5gOkIPxuZkY=" - } - }, - { - "version": "0.3.1", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-E3NFAdoEdCZvMUGANNJ8cM/gRzIO+9Tx9QGCCzYHquw=", - "css/bulma.min.css": "sha256-6ZFIKt0ohcBorQWIruhlYBoADBIFrJuXtEJsjFxb2Wk=" - } - }, - { - "version": "0.3.0", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-IvbQzFiRARtQQANvvpAMfmLISux+WKZi/SOUJ/PU8BU=", - "css/bulma.min.css": "sha256-J2MxVJvpHeOeT0uUGqoj5CkoFkT4zBEweNmqP/UWu1U=" - } - }, - { - "version": "0.2.3", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-JPJOXvCZ7dfewrTiPV+GJzvdwvrVs3f2jTyMOjLq0aQ=", - "css/bulma.min.css": "sha256-F7gqKszCwmz8vhiti+AICU8dLfIEpxzPVihhhGfbbKg=" - } - }, - { - "version": "0.2.1", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-7cnnfR3Xk2kOdjB77b/yXopZ/CXuQlrUjWJcNQae+Qg=", - "css/bulma.min.css": "sha256-DRcOKg8NK1KkSkcymcGmxOtS/lAn0lHWJXRa15gMHHk=" - } - }, - { - "version": "0.2.0", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-OPtsycqLTj6B65PTzKGB/Db4QfWS7gQhBDHXApoOTXs=", - "css/bulma.min.css": "sha256-3jZh3lKj2GrREJG7pFXmh36IM2o9LLVrRIBQyE04D8Y=" - } - }, - { - "version": "0.1.2", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-LGC7VogpY1DEM2eIKie4gNcoyCjGNgjRBKh94PEmH/E=", - "css/bulma.min.css": "sha256-8TT9mHOU3psGaXjyZO82K8wm1ZwLUwWhN5zeZOxJ1Qs=" - } - }, - { - "version": "0.1.1", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-LGC7VogpY1DEM2eIKie4gNcoyCjGNgjRBKh94PEmH/E=", - "css/bulma.min.css": "sha256-8TT9mHOU3psGaXjyZO82K8wm1ZwLUwWhN5zeZOxJ1Qs=" - } - }, - { - "version": "0.1.0", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-mNUQ65hYdxtmWfzH1XghcPVZqqgS5UW82C8/tfax82Y=", - "css/bulma.min.css": "sha256-wY1WE5wUnk5ETTxanjGH8AfXaIyH5+tbA9aqvi6gSAw=" - } - }, - { - "version": "0.0.28", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-HWy4oyHCAsQUrboCiZM3QKQc832qCYyP6CJyN1gRLUc=", - "css/bulma.min.css": "sha256-b/7wl9KgZZEFwnFedQHe2Z+qcYMEPkmD7Kx13OT1wlQ=" - } - }, - { - "version": "0.0.27", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-gVVbkaQ5cXLnonjD5dGt9Ss4AbwnYuTfT0tmAnxCNDQ=", - "css/bulma.min.css": "sha256-JLahqXfDsi2eVA53OTdKfMOGzScPDFk+rbasxKSGsIc=" - } - }, - { - "version": "0.0.26", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-gVVbkaQ5cXLnonjD5dGt9Ss4AbwnYuTfT0tmAnxCNDQ=", - "css/bulma.min.css": "sha256-JLahqXfDsi2eVA53OTdKfMOGzScPDFk+rbasxKSGsIc=" - } - }, - { - "version": "0.0.25", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-5UeclJB2PL89MerRb1P6/cRigIHUDAwsBLAvTCxOsQo=", - "css/bulma.min.css": "sha256-UeLjY4mw4rw6henK/wENCf+ddAKmKXKpF94dqmNIdTI=" - } - }, - { - "version": "0.0.24", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-EGdHMzN0C86q1vhj0+w8kVwSsECqGN2tuSPLMuWqB3E=", - "css/bulma.min.css": "sha256-szI8Qt+cO6CUU/4frmHdH7uD1Yj6PjK4D+MUr1oIO7M=" - } - }, - { - "version": "0.0.23", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-8IKGWdeUJRHWtaxDjAO8le9gNTcyCvYtX+S964nl8AY=", - "css/bulma.min.css": "sha256-OnKsMZ9cPpVp4NksTsReXyjIKtb9FM+mezAZtuK0fHM=" - } - }, - { - "version": "0.0.22", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-CI0D79wfhW/fvYQf7+4Q/K5EGZUVwoSGZApeUlWeaew=", - "css/bulma.min.css": "sha256-BypekIZ6af8I3uWccMZ824MO8mD4F5cARkVYkxbP0oM=" - } - }, - { - "version": "0.0.21", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-CWfwx68mfMIapO4JcMtaWiup4Rh0KZb9bGsWm7Ijz+c=", - "css/bulma.min.css": "sha256-UEP+sG/JcDA1dtbWrdV/OQWiprVqEHAwj4KoZo5yCJ8=" - } - }, - { - "version": "0.0.20", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-/lwxjz5MrL8ymXcSdZ4q1rM24QbHqkFC6TAD39dlzmo=", - "css/bulma.min.css": "sha256-MrONUixIVU9UUzQTvQh0OZOc1RuD2igiZ82hJ+zy8ME=" - } - }, - { - "version": "0.0.19", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-WPzD5Utt3RSCLgUfwSfahDFPRZzYacbAikJyFjuj56w=", - "css/bulma.min.css": "sha256-2ckO9k7x6jD9dxp2rwqMMXA3O/MqBUyYdL85e5Oy+3o=" - } - }, - { - "version": "0.0.18", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-WPzD5Utt3RSCLgUfwSfahDFPRZzYacbAikJyFjuj56w=", - "css/bulma.min.css": "sha256-2ckO9k7x6jD9dxp2rwqMMXA3O/MqBUyYdL85e5Oy+3o=" - } - }, - { - "version": "0.0.17", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-WPzD5Utt3RSCLgUfwSfahDFPRZzYacbAikJyFjuj56w=", - "css/bulma.min.css": "sha256-2ckO9k7x6jD9dxp2rwqMMXA3O/MqBUyYdL85e5Oy+3o=" - } - }, - { - "version": "0.0.16", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-DaKywHsbjxdWISmW0vj1rqxXo+2m9jP58M82vE26/lo=", - "css/bulma.min.css": "sha256-t/8w8MBY+1xcArrA+FR7cizygVRFvCVb7YdwjQ1Szoo=" - } - }, - { - "version": "0.0.15", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-o+ckoIHHuI6C5rAJaVU5cPVqx3sBiPP0oM7UV42OchQ=", - "css/bulma.min.css": "sha256-yDRdc0rFCjFlV6phoR5U+IIo2BX6r1s64na0xV/3VII=" - } - }, - { - "version": "0.0.14", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-4n2LOsDn3dDiRt4+fumSkXG3Nx9e0VWXSlEHQ32AYM8=", - "css/bulma.min.css": "sha256-5j0oQLxKYqE6SIOENLM5Z+XwV0BDckBsmiZehD8kplg=" - } - }, - { - "version": "0.0.13", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-EEfwnmzAb2KFBMTyTn8Ayx5hOG/i1RRet1YUcTX/6K8=", - "css/bulma.min.css": "sha256-U4vo5QfK7+6vpb9prQCfKl5prRF5CAVdXE67Kw2q+zk=" - } - }, - { - "version": "0.0.12", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-WC0vtYAfKzLNqLbnaMiHky4bbui/DrhAfu+auISMki8=", - "css/bulma.min.css": "sha256-PxTvtkcYmnB3QTF1yEOZ+hZ3QtdruwGgH8gi+5ZhvL0=" - } - }, - { - "version": "0.0.11", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-kIMc9qJDvs9gUItCZOWS4j9IJTEH5cPA0XYDNNh615M=", - "css/bulma.min.css": "sha256-H3ycCK4h9KQ3eaT/hd10aawWxLrs55pvJSc4+AW/7Ss=" - } - }, - { - "version": "0.0.10", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-H+qxyugPe8R8ZDJ7624T+qBBGQtJxLfk6IwHDFU4qQQ=", - "css/bulma.min.css": "sha256-vSPLpIGAPxtjcNIvRnMG+qBMNHoiKWIfjWE9krwJs2w=" - } - }, - { - "version": "0.0.9", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-2p8Ap5rGQkvy/eSbHqq7YInLn7KlK+ttS7j83/4Mu5U=", - "css/bulma.min.css": "sha256-Ujuen6wSGYNncOiwgkf6etS4ynNQk09lEKe5N5EpVjY=" - } - }, - { - "version": "0.0.8", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-o9/qiZDq1YQYmN/l/FQ9ZfPWx0X1XCB7qN19NgU9mjI=", - "css/bulma.min.css": "sha256-ThvEzznTSx5zY/pglLOhYXMx/4Cna0fNekj5njnQi84=" - } - }, - { - "version": "0.0.7", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-3lL6WRsXNPHBD5kr4k7P2YDcUZFzmPnFG+9VKNiHmpk=", - "css/bulma.min.css": "sha256-h5PclMMTALOOZU4kVrwZ0hcvvYbE59vjueh4hCOerxM=" - } - }, - { - "version": "0.0.6", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-3lL6WRsXNPHBD5kr4k7P2YDcUZFzmPnFG+9VKNiHmpk=", - "css/bulma.min.css": "sha256-h5PclMMTALOOZU4kVrwZ0hcvvYbE59vjueh4hCOerxM=" - } - }, - { - "version": "0.0.5", - "files": [ - "css/bulma.css", - "css/bulma.css.map", - "css/bulma.min.css", - "css/bulma.min.css.map" - ], - "sri": { - "css/bulma.css": "sha256-SPVsd3RXnpGaxE3nQZdk7O/bmqIotrumXX6tMbr/5ig=", - "css/bulma.min.css": "sha256-agoMXPaQbV3bQHc/V/IzswebgOhTaiv9kfMy3haisgg=" - } - }, - { - "version": "0.0.4", - "files": [ - "css/bulma.css", - "css/bulma.min.css" - ], - "sri": { - "css/bulma.css": "sha256-HXOcPLKtDcuDy077hNwHqc/fwYY+c/wBzT379yHbphc=", - "css/bulma.min.css": "sha256-R+ODP4cL6k8BoKDqlXzcdbihW8iymks89ySJO0H6pPI=" - } - } - ] -} diff --git a/lib/modules/datasource/cdnjs/__fixtures__/d3-force.json b/lib/modules/datasource/cdnjs/__fixtures__/d3-force.json index ca8c49e315386feed0daf9d84eced1fcc86effdd..983d15a376239eaab3cd1b0d971c4e82142f2a0b 100644 --- a/lib/modules/datasource/cdnjs/__fixtures__/d3-force.json +++ b/lib/modules/datasource/cdnjs/__fixtures__/d3-force.json @@ -1,295 +1,46 @@ { "homepage": "https://d3js.org/d3-force/", "repository": { - "type": "git", - "url": "https://github.com/d3/d3-force.git" + "type": "git", + "url": "https://github.com/d3/d3-force.git" }, - "assets": [ - { - "version": "1.1.0", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-gp0SbnQfnXL6TyrP5b7JAifyBupTdBDiYpRArpdhIKg=", - "d3-force.min.js": "sha256-fXvqx6BMrmrNPsEbCbVn0ABWVE0Oyv/gkQscFLx1J+w=" - } - }, - { - "version": "1.0.6", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-5D0Nfdo36KQmwzPqSzwmgaB81NzrlAAenDn9CXxO9eA=", - "d3-force.min.js": "sha256-YsvdiZz1+06xnsmO/dcy/6oPe76ZJYH2mLsQOCPT8m8=" - } - }, - { - "version": "1.0.5", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-NqhhKDL7mFceODpyCsdd1vUHIgOK96DJNDUKtYJyHo8=", - "d3-force.min.js": "sha256-sqTZZsQcY2MWdMB/MPigRvcLxqIKhiM67KeAW7Z3imc=" - } - }, - { - "version": "1.0.4", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-T7VhvwL3G9POw0nHoRgl4OP0PmfiAHZObfHza0Lbp3s=", - "d3-force.min.js": "sha256-CRAbrJ8WtPmeIe/7tdGnM1l5NT4HtrwWNp8/V8XoZVI=" - } - }, - { - "version": "1.0.3", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-Pco5eBqSA/Wozq5wQVuZ5YuRC8Zn4EfBbht4kK09hms=", - "d3-force.min.js": "sha256-RaVSELLEPiSZSg9PGpLDFaG18eCP+7OFG2qscWQW4YI=" - } - }, - { - "version": "1.0.2", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-a2jXPrguES4/PmuoJJaVi+Qev/ZUGmIOJmG0/LIIcME=", - "d3-force.min.js": "sha256-Au6DV8G3g+2QsAMU4ZlVaRxS6QApao5plSungOoxVzs=" - } - }, - { - "version": "1.0.1", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-BkiOgLEeo2ERn7/yYgsU+t97dOXWuUP8nOc6T7sf4aQ=", - "d3-force.min.js": "sha256-hkttlmSMhFUFZeU+elS5DhAJqjuUNX1VVoWy6OhEe1A=" - } - }, - { - "version": "1.0.0", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-hRMRHUxlb4+aq13/P/Fk7RmVGX8r0n7psFs7cysjtQo=", - "d3-force.min.js": "sha256-JeMSB0vYijvTRUp6J/Zk8w4xLMsuovZdmrTSmmmSgns=" - } - }, - { - "version": "0.7.1", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-C4xhHucs90cw3YQ2Kry4IjovxF6hzXIXlt7XLSgn4uw=", - "d3-force.min.js": "sha256-gHNSgLjwLAZRo6w9Ga9AiwRSvRBC6a4/w15bsLqOjyI=" - } - }, - { - "version": "0.7.0", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-U93AQ12JgwO+Crpoop0f4VVtgo5EWyy5Ac/VDbr9nrw=", - "d3-force.min.js": "sha256-6N3BTqE/cUrcMS0ABzxSqq8ljwxFLVzjzY61oeYawN0=" - } - }, - { - "version": "0.6.3", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-3/LnH5zecwn1jl4B8/VwDUKLxHvD4tQv9pecq4I+lY0=", - "d3-force.min.js": "sha256-anFjoj3JrkmBNGyGOfjkNMTK7YOCqIGbEHpF3My+pys=" - } - }, - { - "version": "0.6.2", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-SG9SrF1YlltbriU+Z6Q7bvTgRJPw4XZBW4KjulEHiFQ=", - "d3-force.min.js": "sha256-6p2cfzJjQ0jdqtrb7rnwXj+yQeJ+hvnGJEXDi25ZmzE=" - } - }, - { - "version": "0.6.1", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-SYfALXpqoQWY7PB5stjN2B10R0t6B8OizEug3nV5hgk=", - "d3-force.min.js": "sha256-tuQU+X7+WeN6wqdiJJ6Padc45t9LZiKZ58oYMGr1uMo=" - } - }, - { - "version": "0.6.0", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-b07xptMLcxLFDYrlbaq7z9oD+Qe5X0jNjEqpRArWPJU=", - "d3-force.min.js": "sha256-cnOp3O9r4MlTvHFqvpdeaG/IwjS091dmqwHBAnFuc0g=" - } - }, - { - "version": "0.5.0", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-FEYdY1bzDtPA2tvvyXVSgl/y9EIjF/L5+de3tD4OTF4=", - "d3-force.min.js": "sha256-94L4/qOXNt6h6vhYolt0ukEnf1HjctqSd4HBth0OgJg=" - } - }, - { - "version": "0.4.1", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-nqSSxi5zHLx8IDv465yKPl7iQa9bKmB1tO1CYwHfORI=", - "d3-force.min.js": "sha256-6q2kj+Wndz0v3g+0IxzqiZ8Ilmi6QqFsWmZqVMS5nYU=" - } - }, - { - "version": "0.4.0", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-h5Ap2n1itK1bTRb5syvo31u3huhwOvIvv8YAq45SMHE=", - "d3-force.min.js": "sha256-Z+yWONCIFUqIdpFiXo0zggYxX/TMpyXYf5GW2SC4tog=" - } - }, - { - "version": "0.3.0", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-v/EpI8zylc/rx6tNiqL631j1d1C2BbPJGpgyJHIidt0=", - "d3-force.min.js": "sha256-lI3/m84DU88hxv49lzy/maO5glfV+80XK4WEmNa9YR8=" - } - }, - { - "version": "0.2.2", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-4jWVeft3EbQiO6mOzBN5gQISLLtiVk1gjk3sTBzxqWE=", - "d3-force.min.js": "sha256-BoVy0gQ+DQiYRwXOUnGWFbaxojy2X0dJn01uCuR4bRA=" - } - }, - { - "version": "0.2.1", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-R5hN8fDqziJDFPXVYztdJ0VcuA4NVaiMmYpIO7QkHMc=", - "d3-force.min.js": "sha256-LKaqpRLJ9Dm/duWf7SVRpEgR5/o6q7eXDDpEy/qX8lg=" - } - }, - { - "version": "0.2.0", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-VRq0I3f7XeNjPc3fa/jPoCVWii+1VAMS5GSc98yOjeQ=", - "d3-force.min.js": "sha256-uJV0fvOphwVSnweSYF0+6X0yR1jsfpP0k8gRK4RNjpY=" - } - }, - { - "version": "0.1.0", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-otPu46hPGgaRCnEkZuH3VQ9dKT6H7uzcAmrjvtCXIzQ=", - "d3-force.min.js": "sha256-csgvQYdPPjcKsIakaSeqE02/Wl54T3mStgKQsYkI1zs=" - } - }, - { - "version": "0.0.4", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-7hyoFVueIL/RLbMcV01X6kfVEB0/WpEWKyf7W716Pqs=", - "d3-force.min.js": "sha256-jw3G+KYLKmYEPZIQRVIIXUDULmlS0yJ4SvyBqZNwQMg=" - } - }, - { - "version": "0.0.3", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-NuLk1K9PD9BeilzdXFVmimrPbt5kURq5mhCqb8WQ8qk=", - "d3-force.min.js": "sha256-WYmckBv0+sEr0YsPm2Z3OC2WfCZIcD045KlXN/tbBmA=" - } - }, - { - "version": "0.0.2", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-yrh9ylv/W7CahimBrLMhf4X7uVuO3pTHHRKASy4nmt8=", - "d3-force.min.js": "sha256-CczIvgT14ZuOfCe40K647R5MlbnqEKfWBZJv2T4vrcI=" - } - }, - { - "version": "0.0.1", - "files": [ - "d3-force.js", - "d3-force.min.js" - ], - "sri": { - "d3-force.js": "sha256-DNKhvPNPQByxMloPGL2GfmxYsbWDcrznYp+/r4eXs+o=", - "d3-force.min.js": "sha256-UlCqIE7wnu4y7TDeQsl91i7Wxmhr4E7vy7VYi2XFqk8=" - } - } + "versions": [ + "0.0.1", + "0.0.2", + "0.0.3", + "0.0.4", + "0.1.0", + "0.2.0", + "0.2.1", + "0.2.2", + "0.3.0", + "0.4.0", + "0.4.1", + "0.5.0", + "0.6.0", + "0.6.1", + "0.6.2", + "0.6.3", + "0.7.0", + "0.7.1", + "1.0.0", + "1.0.1", + "1.0.2", + "1.0.3", + "1.0.4", + "1.0.5", + "1.0.6", + "1.1.0", + "1.1.1", + "1.1.2", + "1.2.0", + "1.2.1", + "2.0.0", + "2.0.1", + "2.1.0", + "2.1.0-rc.1", + "2.1.0-rc.2", + "2.1.1", + "3.0.0" ] } diff --git a/lib/modules/datasource/cdnjs/__fixtures__/sri.json b/lib/modules/datasource/cdnjs/__fixtures__/sri.json new file mode 100644 index 0000000000000000000000000000000000000000..971794440829aaaeaf45f8640e1c3f643b932178 --- /dev/null +++ b/lib/modules/datasource/cdnjs/__fixtures__/sri.json @@ -0,0 +1,27 @@ +{ + "sri": { + "css/bootstrap-grid.css": "sha512-Fxj/xUyzF1sPpG8bmkIT/Rh4tAHwPn3roK9DwsoBoglSt2tfNpYWF+vWiwVw0SVhXVEjxmdDwkCzD/wtFOIAUg==", + "css/bootstrap-grid.min.css": "sha512-JQksK36WdRekVrvdxNyV3B0Q1huqbTkIQNbz1dlcFVgNynEMRl0F8OSqOGdVppLUDIvsOejhr/W5L3G/b3J+8w==", + "css/bootstrap-grid.rtl.css": "sha512-kDjyCDssHgTQcTtM8Dwe+mzK0NbM28pXKC17zAWZ8fxiok4pWtB4V0ve92sdG/urSLky9gi8AHyCsiYBrjMWCQ==", + "css/bootstrap-grid.rtl.min.css": "sha512-TVEh7Wv2VL7denA2jjLclu/YHda8TiwmLZBhUqmJa+PVhIgbOs4mkx4nGQw+ok1f+3tf/NpbVDIuPKIHcSyEhw==", + "css/bootstrap-reboot.css": "sha512-OHLj7fFQzMuQeBvepMhoFo2xEVTEWyxRFNc42DOd+Jjwcko8LW7GjN9y91POlKkl8Ivzc9a0ZfIhD4HDIjCGxA==", + "css/bootstrap-reboot.min.css": "sha512-IS8Z2ZgFvTz/yLxE6H07ip/Ad+yAGswoD1VliOeC2T4WaPFNPC1TwmQ5zomGS+syaR2oO3aXJGKaHv21Dspx0g==", + "css/bootstrap-reboot.rtl.css": "sha512-YJ7dzM3VK2DJiSkfp9zrN8OrJgYQUJTv7m+WCr7geqqeDD5daxvd7MUzaVUBgkWM/Yl/PtV511SmYi/AS34yLg==", + "css/bootstrap-reboot.rtl.min.css": "sha512-MWXegIfPaJ2ht1ccssKjDqUk4DDiTyoKQqb4zGNEAXqUfP8ukuEtxraKdo7nko3m+4mY+ZXlPOUX6y4SV0VXPA==", + "css/bootstrap-utilities.css": "sha512-nUciEVa4bEB5Ct7WEC1mVgN0+i5iMZQK8mrhc9qjyw3FhpIsYYPl1Qhh1zQUHaPq1rzqspA+CTkyKp3NzWBs+g==", + "css/bootstrap-utilities.min.css": "sha512-DEGBrwaCF4lkKzMKNwt8Qe/V54bmJctk7I1HyfINGAIugDvsdBeuWzAWZmXAmm49P6EBfl/OeUM01U3r7cW4jg==", + "css/bootstrap-utilities.rtl.css": "sha512-yHpTyYQws1/5DtDZm0KBhJaMVPHoSp+bwCOCXj7EL+asqQHnIH5VaBxBqA2PiOc8k6knFwvqkPvLHKAhE2IigA==", + "css/bootstrap-utilities.rtl.min.css": "sha512-1W/oJs3Mky37ftCexP/qGfEA5rEjkxtZb6dbxfqr2lGUSJzbrqYkIPZPrQdrsnZbH0Rj9Y6nsxyp4mgmvGbZew==", + "css/bootstrap.css": "sha512-bR79Bg78Wmn33N5nvkEyg66hNg+xF/Q8NA8YABbj+4sBngYhv9P8eum19hdjYcY7vXk/vRkhM3v/ZndtgEXRWw==", + "css/bootstrap.min.css": "sha512-SbiR/eusphKoMVVXysTKG/7VseWii+Y3FdHrt0EpKgpToZeemhqHeZeLWLhJutz/2ut2Vw1uQEj2MbRF+TVBUA==", + "css/bootstrap.rtl.css": "sha512-Om2bVDiRJwpT9sJcj95YLYdECykFzo5dicv/8fzrFhm/uHQRYkapARZb6Ioer8+4KJGL2T1lKIfWxk+LlhfbqQ==", + "css/bootstrap.rtl.min.css": "sha512-tC3gnye8BsHmrW3eRP3Nrj/bs+CSVUfzkjOlfLNrfvcbKXFxk5+b8dQCZi9rgVFjDudwipXfqEhsKMMgRZGCDw==", + "js/bootstrap.bundle.js": "sha512-gMrnU9iM+azBQtrSC8kTJy6+g+hjaIHnElQmb41QeHNTGYjbbtm0BptpIMgXYpS6iyWq9bPkxrcqgK8aqRsjAg==", + "js/bootstrap.bundle.min.js": "sha512-i9cEfJwUwViEPFKdC1enz4ZRGBj8YQo6QByFTF92YXHi7waCqyexvRD75S5NVTsSiTv7rKWqG9Y5eFxmRsOn0A==", + "js/bootstrap.esm.js": "sha512-Usuu2Q6MtOYYaCc10FhONUvYeYZagj4i85fsXe09ZQyRtIdwBSHXWt5PQpAyGjrFcbQy2//LTsqZkdgzzcBBbg==", + "js/bootstrap.esm.min.js": "sha512-ruQ4xI8Jfep9W+qJQ8FLbxsjPVR0WvEt31XNw0mZxri2Nya9eQr7VTFsi+S7OvW0bIUI7vxF8zoaPNSq/PsvxA==", + "js/bootstrap.js": "sha512-L6XANV6sOsx9N9c787eDN1pjB2Pzautd3xDgn4cMKuoleHSuCJi5pCDGPCtwE3Bd4A1Olnr0k0aQXbczYzg+wg==", + "js/bootstrap.min.js": "sha512-1/RvZTcCDEUjY/CypiMz+iqqtaoQfAITmNSJY17Myp4Ms5mdxPS5UV7iOfdZoxcGhzFbOm6sntTKJppjvuhg4g==" + }, + "version": "5.2.3" +} diff --git a/lib/modules/datasource/cdnjs/__snapshots__/index.spec.ts.snap b/lib/modules/datasource/cdnjs/__snapshots__/index.spec.ts.snap index c779cc09bbdd7932542c6228bfa68e4e32cbc686..322da077cccde8ee15958b25dcfef572891bf281 100644 --- a/lib/modules/datasource/cdnjs/__snapshots__/index.spec.ts.snap +++ b/lib/modules/datasource/cdnjs/__snapshots__/index.spec.ts.snap @@ -1,127 +1,121 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`modules/datasource/cdnjs/index getReleases filters releases by asset presence 1`] = ` -{ - "homepage": "http://bulma.io", - "registryUrl": "https://api.cdnjs.com/", - "releases": [ - { - "version": "0.7.5", - }, - ], - "sourceUrl": "https://github.com/jgthms/bulma", -} -`; - exports[`modules/datasource/cdnjs/index getReleases processes real data 1`] = ` { "homepage": "https://d3js.org/d3-force/", "registryUrl": "https://api.cdnjs.com/", "releases": [ { - "newDigest": "sha256-DNKhvPNPQByxMloPGL2GfmxYsbWDcrznYp+/r4eXs+o=", "version": "0.0.1", }, { - "newDigest": "sha256-yrh9ylv/W7CahimBrLMhf4X7uVuO3pTHHRKASy4nmt8=", "version": "0.0.2", }, { - "newDigest": "sha256-NuLk1K9PD9BeilzdXFVmimrPbt5kURq5mhCqb8WQ8qk=", "version": "0.0.3", }, { - "newDigest": "sha256-7hyoFVueIL/RLbMcV01X6kfVEB0/WpEWKyf7W716Pqs=", "version": "0.0.4", }, { - "newDigest": "sha256-otPu46hPGgaRCnEkZuH3VQ9dKT6H7uzcAmrjvtCXIzQ=", "version": "0.1.0", }, { - "newDigest": "sha256-VRq0I3f7XeNjPc3fa/jPoCVWii+1VAMS5GSc98yOjeQ=", "version": "0.2.0", }, { - "newDigest": "sha256-R5hN8fDqziJDFPXVYztdJ0VcuA4NVaiMmYpIO7QkHMc=", "version": "0.2.1", }, { - "newDigest": "sha256-4jWVeft3EbQiO6mOzBN5gQISLLtiVk1gjk3sTBzxqWE=", "version": "0.2.2", }, { - "newDigest": "sha256-v/EpI8zylc/rx6tNiqL631j1d1C2BbPJGpgyJHIidt0=", "version": "0.3.0", }, { - "newDigest": "sha256-h5Ap2n1itK1bTRb5syvo31u3huhwOvIvv8YAq45SMHE=", "version": "0.4.0", }, { - "newDigest": "sha256-nqSSxi5zHLx8IDv465yKPl7iQa9bKmB1tO1CYwHfORI=", "version": "0.4.1", }, { - "newDigest": "sha256-FEYdY1bzDtPA2tvvyXVSgl/y9EIjF/L5+de3tD4OTF4=", "version": "0.5.0", }, { - "newDigest": "sha256-b07xptMLcxLFDYrlbaq7z9oD+Qe5X0jNjEqpRArWPJU=", "version": "0.6.0", }, { - "newDigest": "sha256-SYfALXpqoQWY7PB5stjN2B10R0t6B8OizEug3nV5hgk=", "version": "0.6.1", }, { - "newDigest": "sha256-SG9SrF1YlltbriU+Z6Q7bvTgRJPw4XZBW4KjulEHiFQ=", "version": "0.6.2", }, { - "newDigest": "sha256-3/LnH5zecwn1jl4B8/VwDUKLxHvD4tQv9pecq4I+lY0=", "version": "0.6.3", }, { - "newDigest": "sha256-U93AQ12JgwO+Crpoop0f4VVtgo5EWyy5Ac/VDbr9nrw=", "version": "0.7.0", }, { - "newDigest": "sha256-C4xhHucs90cw3YQ2Kry4IjovxF6hzXIXlt7XLSgn4uw=", "version": "0.7.1", }, { - "newDigest": "sha256-hRMRHUxlb4+aq13/P/Fk7RmVGX8r0n7psFs7cysjtQo=", "version": "1.0.0", }, { - "newDigest": "sha256-BkiOgLEeo2ERn7/yYgsU+t97dOXWuUP8nOc6T7sf4aQ=", "version": "1.0.1", }, { - "newDigest": "sha256-a2jXPrguES4/PmuoJJaVi+Qev/ZUGmIOJmG0/LIIcME=", "version": "1.0.2", }, { - "newDigest": "sha256-Pco5eBqSA/Wozq5wQVuZ5YuRC8Zn4EfBbht4kK09hms=", "version": "1.0.3", }, { - "newDigest": "sha256-T7VhvwL3G9POw0nHoRgl4OP0PmfiAHZObfHza0Lbp3s=", "version": "1.0.4", }, { - "newDigest": "sha256-NqhhKDL7mFceODpyCsdd1vUHIgOK96DJNDUKtYJyHo8=", "version": "1.0.5", }, { - "newDigest": "sha256-5D0Nfdo36KQmwzPqSzwmgaB81NzrlAAenDn9CXxO9eA=", "version": "1.0.6", }, { - "newDigest": "sha256-gp0SbnQfnXL6TyrP5b7JAifyBupTdBDiYpRArpdhIKg=", "version": "1.1.0", }, + { + "version": "1.1.1", + }, + { + "version": "1.1.2", + }, + { + "version": "1.2.0", + }, + { + "version": "1.2.1", + }, + { + "version": "2.0.0", + }, + { + "version": "2.0.1", + }, + { + "version": "2.1.0", + }, + { + "version": "2.1.0-rc.1", + }, + { + "version": "2.1.0-rc.2", + }, + { + "version": "2.1.1", + }, + { + "version": "3.0.0", + }, ], "sourceUrl": "https://github.com/d3/d3-force", } diff --git a/lib/modules/datasource/cdnjs/index.spec.ts b/lib/modules/datasource/cdnjs/index.spec.ts index 506eb7b03107c9fd44a51764ec28ffefe03aa600..3c09dcf986e18bf710d704ea9895cb85d6a5d144 100644 --- a/lib/modules/datasource/cdnjs/index.spec.ts +++ b/lib/modules/datasource/cdnjs/index.spec.ts @@ -1,13 +1,17 @@ -import { getPkgReleases } from '..'; +import { getDigest, getPkgReleases } from '..'; import { Fixtures } from '../../../../test/fixtures'; import * as httpMock from '../../../../test/http-mock'; import { EXTERNAL_HOST_ERROR } from '../../../constants/error-messages'; +import { HttpError } from '../../../util/http'; import { CdnJsDatasource } from '.'; const baseUrl = 'https://api.cdnjs.com/'; const pathFor = (s: string): string => - `/libraries/${s.split('/').shift()}?fields=homepage,repository,assets`; + `/libraries/${s.split('/').shift()}?fields=homepage,repository,versions`; + +const pathForDigest = (s: string, version: string): string => + `/libraries/${s.split('/').shift()}/${version}?fields=sri`; describe('modules/datasource/cdnjs/index', () => { describe('getReleases', () => { @@ -105,17 +109,86 @@ describe('modules/datasource/cdnjs/index', () => { }); expect(res).toMatchSnapshot(); }); + }); - it('filters releases by asset presence', async () => { + describe('getDigest', () => { + it('returs null for no result', async () => { httpMock .scope(baseUrl) - .get(pathFor('bulma/only/0.7.5/style.css')) - .reply(200, Fixtures.get('bulma.json')); - const res = await getPkgReleases({ - datasource: CdnJsDatasource.id, - packageName: 'bulma/only/0.7.5/style.css', - }); - expect(res).toMatchSnapshot(); + .get(pathForDigest('foo/bar', '1.2.0')) + .reply(200, '{}'); + + const res = await getDigest( + { + datasource: CdnJsDatasource.id, + packageName: 'foo/bar', + }, + '1.2.0', + ); + expect(res).toBeNull(); + }); + + it('returs null for empty sri object', async () => { + httpMock + .scope(baseUrl) + .get(pathForDigest('foo/bar', '1.2.0')) + .reply(200, JSON.stringify({ sri: {} })); + + const res = await getDigest( + { + datasource: CdnJsDatasource.id, + packageName: 'foo/bar', + }, + '1.2.0', + ); + expect(res).toBeNull(); + }); + + it('returs null if file not found', async () => { + httpMock + .scope(baseUrl) + .get(pathForDigest('foo/bar', '1.2.0')) + .reply(200, JSON.stringify({ sri: { string: 'hash' } })); + + const res = await getDigest( + { + datasource: CdnJsDatasource.id, + packageName: 'foo/bar', + }, + '1.2.0', + ); + expect(res).toBeNull(); + }); + + it('returns null for 404', async () => { + httpMock.scope(baseUrl).get(pathForDigest('foo/bar', '1.2.0')).reply(404); + await expect( + getDigest( + { + datasource: CdnJsDatasource.id, + packageName: 'foo/bar', + }, + '1.2.0', + ), + ).rejects.toThrow(HttpError); + }); + + it('returns digest', async () => { + httpMock + .scope(baseUrl) + .get(pathForDigest('bootstrap/js/bootstrap.min.js', '5.2.3')) + .reply(200, Fixtures.get('sri.json')); + + const res = await getDigest( + { + datasource: CdnJsDatasource.id, + packageName: 'bootstrap/js/bootstrap.min.js', + }, + '5.2.3', + ); + expect(res).toBe( + 'sha512-1/RvZTcCDEUjY/CypiMz+iqqtaoQfAITmNSJY17Myp4Ms5mdxPS5UV7iOfdZoxcGhzFbOm6sntTKJppjvuhg4g==', + ); }); }); }); diff --git a/lib/modules/datasource/cdnjs/index.ts b/lib/modules/datasource/cdnjs/index.ts index e7618185887b7629c8f7bd77660989020092be00..6a142235e97fe3ace7c4da5979c887f48713d8e8 100644 --- a/lib/modules/datasource/cdnjs/index.ts +++ b/lib/modules/datasource/cdnjs/index.ts @@ -1,30 +1,21 @@ -import { ZodError, z } from 'zod'; +import { ZodError } from 'zod'; import { logger } from '../../../logger'; import { ExternalHostError } from '../../../types/errors/external-host-error'; +import { cache } from '../../../util/cache/package/decorator'; import type { HttpError } from '../../../util/http'; import { Result } from '../../../util/result'; import { Datasource } from '../datasource'; -import { ReleasesConfig } from '../schema'; -import type { GetReleasesConfig, Release, ReleaseResult } from '../types'; - -const Homepage = z.string().optional().catch(undefined); - -const Repository = z - .object({ - type: z.literal('git'), - url: z.string(), - }) - .transform(({ url }) => url) - .optional() - .catch(undefined); - -const Assets = z.array( - z.object({ - version: z.string(), - files: z.string().array(), - sri: z.record(z.string()).optional(), - }), -); +import { DigestsConfig, ReleasesConfig } from '../schema'; +import type { + DigestConfig, + GetReleasesConfig, + Release, + ReleaseResult, +} from '../types'; +import { + CdnjsAPISriResponseSchema, + CdnjsAPIVersionResponseSchema, +} from './schema'; export class CdnJsDatasource extends Datasource { static readonly id = 'cdnjs'; @@ -37,39 +28,21 @@ export class CdnJsDatasource extends Datasource { override readonly defaultRegistryUrls = ['https://api.cdnjs.com/']; - override readonly caching = true; - + @cache({ + namespace: `datasource-${CdnJsDatasource.id}`, + key: ({ packageName }: GetReleasesConfig) => packageName.split('/')[0], + }) async getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null> { const result = Result.parse(config, ReleasesConfig) .transform(({ packageName, registryUrl }) => { const [library] = packageName.split('/'); - const assetName = packageName.replace(`${library}/`, ''); - - const url = `${registryUrl}libraries/${library}?fields=homepage,repository,assets`; - - const schema = z.object({ - homepage: Homepage, - repository: Repository, - assets: Assets.transform((assets) => - assets - .filter(({ files }) => files.includes(assetName)) - .map(({ version, sri }) => { - const res: Release = { version }; - - const newDigest = sri?.[assetName]; - if (newDigest) { - res.newDigest = newDigest; - } - - return res; - }), - ), - }); - - return this.http.getJsonSafe(url, schema); + + const url = `${registryUrl}libraries/${library}?fields=homepage,repository,versions`; + + return this.http.getJsonSafe(url, CdnjsAPIVersionResponseSchema); }) - .transform(({ assets, homepage, repository }): ReleaseResult => { - const releases: Release[] = assets; + .transform(({ versions, homepage, repository }): ReleaseResult => { + const releases: Release[] = versions; const res: ReleaseResult = { releases }; @@ -98,6 +71,43 @@ export class CdnJsDatasource extends Datasource { return val; } + @cache({ + namespace: `datasource-${CdnJsDatasource.id}-digest`, + key: ({ registryUrl, packageName }: DigestConfig, newValue: string) => + `${registryUrl}:${packageName}:${newValue}}`, + }) + override async getDigest( + config: DigestConfig, + newValue: string, + ): Promise<string | null> { + const { packageName } = config; + const [library] = packageName.split('/'); + const assetName = packageName.replace(`${library}/`, ''); + + const result = Result.parse(config, DigestsConfig) + .transform(({ registryUrl }) => { + const url = `${registryUrl}libraries/${library}/${newValue}?fields=sri`; + + return this.http.getJsonSafe(url, CdnjsAPISriResponseSchema); + }) + .transform(({ sri }): string => { + return sri?.[assetName]; + }); + + const { val = null, err } = await result.unwrap(); + + if (err instanceof ZodError) { + logger.debug({ err }, 'cdnjs: validation error'); + return null; + } + + if (err) { + this.handleGenericErrors(err); + } + + return val; + } + override handleHttpErrors(err: HttpError): void { if (err.response?.statusCode !== 404) { throw new ExternalHostError(err); diff --git a/lib/modules/datasource/cdnjs/schema.ts b/lib/modules/datasource/cdnjs/schema.ts new file mode 100644 index 0000000000000000000000000000000000000000..38341de296d397cd7a509760778a105430f64eba --- /dev/null +++ b/lib/modules/datasource/cdnjs/schema.ts @@ -0,0 +1,30 @@ +import { z } from 'zod'; +import type { Release } from '../types'; + +export const Homepage = z.string().optional().catch(undefined); + +export const Repository = z + .object({ + type: z.literal('git'), + url: z.string(), + }) + .transform(({ url }) => url) + .optional() + .catch(undefined); + +export const Versions = z + .string() + .transform((version): Release => ({ version })) + .array(); + +export const Sri = z.record(z.string()); + +export const CdnjsAPIVersionResponseSchema = z.object({ + homepage: Homepage, + repository: Repository, + versions: Versions, +}); + +export const CdnjsAPISriResponseSchema = z.object({ + sri: Sri, +}); diff --git a/lib/modules/datasource/schema.ts b/lib/modules/datasource/schema.ts index 3f31fbaa964ee7bc6defe37a6d051fce2c0aae28..b0922942a0fb4ab4f0df5c7675f3781d583c09f4 100644 --- a/lib/modules/datasource/schema.ts +++ b/lib/modules/datasource/schema.ts @@ -4,3 +4,8 @@ export const ReleasesConfig = z.object({ packageName: z.string(), registryUrl: z.string(), }); + +export const DigestsConfig = z.object({ + packageName: z.string(), + registryUrl: z.string(), +}); diff --git a/lib/util/cache/package/types.ts b/lib/util/cache/package/types.ts index 57a5ffc1dc3a1a26abf1a209a4d92dbeed4a9f4b..b1e59a59f6ad3c121b4f8ecd70dc295c945ba65e 100644 --- a/lib/util/cache/package/types.ts +++ b/lib/util/cache/package/types.ts @@ -33,6 +33,8 @@ export type PackageCacheNamespace = | 'datasource-azure-pipelines-tasks' | 'datasource-bazel' | 'datasource-bitbucket-tags' + | 'datasource-cdnjs-digest' + | 'datasource-cdnjs' | 'datasource-conan-revisions' | 'datasource-conan' | 'datasource-conda'