loading-attribute-polyfill
Advanced tools
Comparing version 1.5.4 to 2.0.0-beta.0
@@ -9,2 +9,8 @@ # Changelog | ||
## [2.0.0-beta.0] - 2021-03-04 | ||
### Fixed | ||
- BREAKING CHANGE: wrapping the `<picture>` HTML tag instead of its content with `<noscript>` to prevent W3C HTML validator errors (see [migration guide](MIGRATION.md) [#90](https://github.com/mfranzke/loading-attribute-polyfill/issues/90)) | ||
## [1.5.4] - 2020-05-23 | ||
@@ -29,7 +35,7 @@ | ||
- Updated webdriverio and prettier dependencies | ||
- Updated `webdriverio` and `prettier` dependencies | ||
### Fixed | ||
- build: \*.min.js files should't get prettified | ||
- build: `*.min.js` files should't get prettified | ||
@@ -40,3 +46,3 @@ ## [1.5.2] - 2020-03-19 | ||
- improvement(prettier): run prettier when committing files | ||
- improvement(prettier): run `prettier` when committing files | ||
- a minzipped size badge | ||
@@ -47,3 +53,3 @@ | ||
- Formatting and code & content optimizations | ||
- xo: added further rules for IE9 compatibility | ||
- `xo`: added further rules for IE9 compatibility | ||
@@ -60,9 +66,9 @@ ## [1.5.1] - 2020-03-15 | ||
- Updated webdriverio, commitlint and xo dependencies | ||
- Updated `webdriverio`, `commitlint` and `xo` dependencies | ||
- docs: further clarifications | ||
- IE9 & IE10: removed .dataset reliance | ||
- IE9 & IE10: removed `.dataset` reliance | ||
### Fixed | ||
- IE9 & IE10: not deleting dataset items for IE9 compatibility #GH-66 | ||
- IE9 & IE10: not deleting `dataset` items for IE9 compatibility [#66](https://github.com/mfranzke/loading-attribute-polyfill/issues/66) | ||
- IE9 & IE10: added section within the docs on including the polyfill JS file at the end of the body | ||
@@ -74,4 +80,4 @@ | ||
- Updated webdriverio, husky and xo dependencies | ||
- Optimized the npmignore file | ||
- Updated `webdriverio`, `husky` and `xo` dependencies | ||
- Optimized the `.npmignore` file | ||
@@ -82,12 +88,12 @@ ## [1.4.0] - 2020-01-25 | ||
- Commitlint & husky for CI | ||
- `Commitlint` & `husky` for CI | ||
### Changed | ||
- Update placeholder to SVG to prevent reflow on lazyloaded images #48 | ||
- Updated webdriverio and xo dependencies | ||
- Update placeholder to SVG to prevent reflow on lazyloaded images [#48](https://github.com/mfranzke/loading-attribute-polyfill/issues/48) | ||
- Updated `webdriverio` and `xo` dependencies | ||
### Fixed | ||
- README needed better wording to avoid confusion on installation/integration process #46 | ||
- `README` needed better wording to avoid confusion on installation/integration process [#46](https://github.com/mfranzke/loading-attribute-polyfill/issues/46) | ||
@@ -98,3 +104,3 @@ ## [1.3.1] - 2019-11-10 | ||
- Added another file to the .npmignore, nevermind ... | ||
- Added another file to the `.npmignore`, nevermind ... | ||
@@ -106,3 +112,3 @@ ## [1.3.0] - 2019-11-10 | ||
- Gitter badge | ||
- Graceful degradation and functionality for IE9 #41 | ||
- Graceful degradation and functionality for IE9 [#41](https://github.com/mfranzke/loading-attribute-polyfill/issues/41) | ||
- Updated with some more supporters | ||
@@ -112,8 +118,8 @@ | ||
- Updated prettier and webdriverio dependencies | ||
- Further enhanced the documentation, like e.g. for #33 | ||
- Updated `prettier` and `webdriverio` dependencies | ||
- Further enhanced the documentation, like e.g. for [#33](https://github.com/mfranzke/loading-attribute-polyfill/issues/33) | ||
### Fixed | ||
- Reduced the weight of the NPM package by adding a npmignore file | ||
- Reduced the weight of the NPM package by adding a `.npmignore` file | ||
- Typos in the docs | ||
@@ -128,4 +134,4 @@ | ||
- Lots of further information and documentation | ||
- Codacy, dependency and Greenkeeper (#18) integrations and badges, yeah ! | ||
- Comment within the demo page clarifying the images content #8 | ||
- Codacy, dependency and Greenkeeper ([#18](https://github.com/mfranzke/loading-attribute-polyfill/issues/18)) integrations and badges, yeah ! | ||
- Comment within the demo page clarifying the images content [#8](https://github.com/mfranzke/loading-attribute-polyfill/issues/8) | ||
- Links to further implementations / plugins & extensions | ||
@@ -135,7 +141,7 @@ | ||
- Made changes regarding to xo/prettier tools and codacys (#12) remarks | ||
- Made changes regarding to `xo`/`prettier` tools and `codacys` ([#12](https://github.com/mfranzke/loading-attribute-polyfill/issues/12)) remarks | ||
- Some even smaller base64 image as an image replacement | ||
- Loading the sample images locally | ||
- Update xo to version 0.25 | ||
- Updated webdriver.io's packages to version 5.13.2 | ||
- Update `xo` to version 0.25 | ||
- Updated `webdriver.io`'s packages to version 5.13.2 | ||
- Code simplifications | ||
@@ -145,3 +151,3 @@ | ||
- Outdated JSBin link | ||
- Outdated `JSBin` link | ||
- Markdown regarding some readers/interpreters malfunctions | ||
@@ -166,7 +172,7 @@ | ||
- Comment regarding asynchronous loading | ||
- Webdriver.io testing | ||
- `Webdriver.io` testing | ||
### Changed | ||
- BREAKING CHANGE: You#ll need to also wrap the `<source>` HTML tags within the `<picture>` tags with `<noscript>` | ||
- BREAKING CHANGE: You'll need to also wrap the `<source>` HTML tags within the `<picture>` tags with `<noscript>` | ||
@@ -177,3 +183,3 @@ ### Fix | ||
- Corrected sample image measurements | ||
- The images didn't load lazily in Safari, but directly, as reported with #GH-3 | ||
- The images didn't load lazily in Safari, but directly, as reported with [#3](https://github.com/mfranzke/loading-attribute-polyfill/issues/3) | ||
- Displaying the images on smaller viewports on the sample page | ||
@@ -186,5 +192,5 @@ | ||
- Changelog | ||
- Codacy integration and badge | ||
- `Codacy` integration and badge | ||
- Code examples | ||
- Optional additional dependencies section within the README | ||
- Optional additional dependencies section within the `README` | ||
- Optional polyfill for the demo page | ||
@@ -209,3 +215,3 @@ - "Conventional Commits" support as well as their badge - yeah ! | ||
- CHANGELOG.md file | ||
- `CHANGELOG.md` file | ||
@@ -217,3 +223,3 @@ ## [0.1.0] - 2019-05-01 | ||
- Initial files | ||
- npm and bower support | ||
- `npm` and `bower` support | ||
- code formatting and linting |
/* | ||
* Loading attribute polyfill - https://github.com/mfranzke/loading-attribute-polyfill | ||
* @license Copyright(c) 2019 by Maximilian Franzke | ||
* Credits for the initial kickstarter / script to @Sora2455, and supported by @cbirdsong, @eklingen, @DaPo, @nextgenthemes, @diogoterremoto, @dracos, @Flimm, @TomS- and @vinyfc93 - many thanks for that ! | ||
* Credits for the initial kickstarter / script to @Sora2455, and supported by @cbirdsong, @eklingen, @DaPo, @nextgenthemes, @diogoterremoto, @dracos, @Flimm, @TomS-, @vinyfc93, @JordanDysart and @denyshutsal - many thanks for that ! | ||
*/ | ||
@@ -21,3 +21,3 @@ /* | ||
lazyImage: 'img[loading="lazy"]', | ||
lazyIframe: 'iframe[loading="lazy"]' | ||
lazyIframe: 'iframe[loading="lazy"]', | ||
}; | ||
@@ -30,12 +30,7 @@ | ||
'loading' in HTMLIFrameElement.prototype, | ||
scrolling: 'onscroll' in window | ||
scrolling: 'onscroll' in window, | ||
}; | ||
// Nodelist foreach polyfill / source: https://stackoverflow.com/a/46929259 | ||
if ( | ||
typeof NodeList !== 'undefined' && | ||
NodeList.prototype && | ||
!NodeList.prototype.forEach | ||
) { | ||
// Yes, there's really no need for `Object.defineProperty` here | ||
// Nodelist foreach polyfill / source: https://developer.mozilla.org/en-US/docs/Web/API/NodeList/forEach#polyfill | ||
if (window.NodeList && !NodeList.prototype.forEach) { | ||
NodeList.prototype.forEach = Array.prototype.forEach; | ||
@@ -52,12 +47,9 @@ } | ||
// On using a browser w/o requestAnimationFrame support (IE9, Opera Mini), just run the passed function | ||
var rAFWrapper; | ||
var rAFWrapper = | ||
'requestAnimationFrame' in window | ||
? window.requestAnimationFrame | ||
: function (func) { | ||
func(); | ||
}; | ||
if ('requestAnimationFrame' in window) { | ||
rAFWrapper = window.requestAnimationFrame; | ||
} else { | ||
rAFWrapper = function (func) { | ||
func(); | ||
}; | ||
} | ||
/** | ||
@@ -184,10 +176,9 @@ * Put the source and srcset back where it belongs - now that the elements content is attached to the document, it will load now | ||
} else { | ||
if (noScriptTag.parentNode.tagName.toLowerCase() === 'picture') { | ||
// Temporarily prevent expensive resource loading by inserting a <source> tag pointing to a simple one (data URI) | ||
lazyAreaHtml = | ||
'<source srcset="' + | ||
// Temporarily prevent expensive resource loading by inserting a <source> tag pointing to a simple one (data URI) | ||
lazyAreaHtml = lazyAreaHtml.replace( | ||
'<source', | ||
'<source srcset="' + | ||
temporaryImage + | ||
'" data-lazy-remove="true"></source>' + | ||
lazyAreaHtml; | ||
} | ||
'" data-lazy-remove="true"></source>\n<source' | ||
); | ||
@@ -219,2 +210,4 @@ // Temporarily replace a expensive resource load with a simple one by storing the actual source and srcset for later and point src to a temporary replacement (data URI) | ||
while (lazyArea.firstChild) { | ||
var actualChild = lazyArea.firstChild; | ||
if ( | ||
@@ -224,11 +217,16 @@ !capabilities.loading && | ||
typeof intersectionObserver !== 'undefined' && | ||
lazyArea.firstChild.tagName && | ||
(lazyArea.firstChild.tagName.toLowerCase() === 'img' || | ||
lazyArea.firstChild.tagName.toLowerCase() === 'iframe') | ||
actualChild.tagName && | ||
(actualChild.tagName.toLowerCase() === 'img' || | ||
actualChild.tagName.toLowerCase() === 'picture' || | ||
actualChild.tagName.toLowerCase() === 'iframe') | ||
) { | ||
var observedElement = | ||
actualChild.tagName.toLowerCase() === 'picture' | ||
? lazyArea.querySelector('img') | ||
: actualChild; | ||
// Observe the item so that loading could start when it gets close to the viewport | ||
intersectionObserver.observe(lazyArea.firstChild); | ||
intersectionObserver.observe(observedElement); | ||
} | ||
noScriptTag.parentNode.insertBefore(lazyArea.firstChild, noScriptTag); | ||
noScriptTag.parentNode.insertBefore(actualChild, noScriptTag); | ||
} | ||
@@ -247,3 +245,5 @@ | ||
lazyLoadAreas.forEach(prepareElement); | ||
lazyLoadAreas.forEach(function (element) { | ||
prepareElement(element); | ||
}); | ||
@@ -250,0 +250,0 @@ // Bind for someone printing the page |
/* | ||
* Loading attribute polyfill - https://github.com/mfranzke/loading-attribute-polyfill | ||
* @license Copyright(c) 2019 by Maximilian Franzke | ||
* Credits for the initial kickstarter / script to @Sora2455, and supported by @cbirdsong, @eklingen, @DaPo, @nextgenthemes, @diogoterremoto, @dracos, @Flimm, @TomS- and @vinyfc93 - many thanks for that ! | ||
* Credits for the initial kickstarter / script to @Sora2455, and supported by @cbirdsong, @eklingen, @DaPo, @nextgenthemes, @diogoterremoto, @dracos, @Flimm, @TomS-, @vinyfc93, @JordanDysart and @denyshutsal - many thanks for that ! | ||
*/ | ||
!function(e,t){"use strict";var r,a,o={rootMargin:"256px 0px",threshold:.01,lazyImage:'img[loading="lazy"]',lazyIframe:'iframe[loading="lazy"]'},n={loading:"loading"in HTMLImageElement.prototype&&"loading"in HTMLIFrameElement.prototype,scrolling:"onscroll"in window};function i(e){var t,r,a=[];"picture"===e.parentNode.tagName.toLowerCase()&&(t=e.parentNode,(r=t.querySelector("source[data-lazy-remove]"))&&t.removeChild(r),a=Array.prototype.slice.call(e.parentNode.querySelectorAll("source"))),a.push(e),a.forEach((function(e){e.hasAttribute("data-lazy-srcset")&&(e.setAttribute("srcset",e.getAttribute("data-lazy-srcset")),e.removeAttribute("data-lazy-srcset"))})),e.setAttribute("src",e.getAttribute("data-lazy-src")),e.removeAttribute("data-lazy-src")}function c(e){var t=document.createElement("div");for(t.innerHTML=function(e){var t=e.textContent||e.innerHTML,a="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 "+((t.match(/width=['"](\d+)['"]/)||!1)[1]||1)+" "+((t.match(/height=['"](\d+)['"]/)||!1)[1]||1)+"%27%3E%3C/svg%3E";return!n.loading&&n.scrolling&&(void 0===r?t=t.replace(/(?:\r\n|\r|\n|\t| )src=/g,' lazyload="1" src='):("picture"===e.parentNode.tagName.toLowerCase()&&(t='<source srcset="'+a+'" data-lazy-remove="true"></source>'+t),t=t.replace(/(?:\r\n|\r|\n|\t| )srcset=/g," data-lazy-srcset=").replace(/(?:\r\n|\r|\n|\t| )src=/g,' src="'+a+'" data-lazy-src='))),t}(e);t.firstChild;)n.loading||!n.scrolling||void 0===r||!t.firstChild.tagName||"img"!==t.firstChild.tagName.toLowerCase()&&"iframe"!==t.firstChild.tagName.toLowerCase()||r.observe(t.firstChild),e.parentNode.insertBefore(t.firstChild,e);e.parentNode.removeChild(e)}function d(){document.querySelectorAll("noscript."+e).forEach(c),void 0!==window.matchMedia&&window.matchMedia("print").addListener((function(e){e.matches&&document.querySelectorAll(o.lazyImage+"[data-lazy-src],"+o.lazyIframe+"[data-lazy-src]").forEach((function(e){i(e)}))}))}"undefined"!=typeof NodeList&&NodeList.prototype&&!NodeList.prototype.forEach&&(NodeList.prototype.forEach=Array.prototype.forEach),"IntersectionObserver"in window&&(r=new IntersectionObserver((function(e,t){e.forEach((function(e){if(0!==e.intersectionRatio){var r=e.target;t.unobserve(r),i(r)}}))}),o)),a="requestAnimationFrame"in window?window.requestAnimationFrame:function(e){e()},/comp|inter/.test(document.readyState)?a(d):"addEventListener"in document?document.addEventListener("DOMContentLoaded",(function(){a(d)})):document.attachEvent("onreadystatechange",(function(){"complete"===document.readyState&&d()}))}("loading-lazy"); | ||
!function(e,t){"use strict";var r,a={rootMargin:"256px 0px",threshold:.01,lazyImage:'img[loading="lazy"]',lazyIframe:'iframe[loading="lazy"]'},o="loading"in HTMLImageElement.prototype&&"loading"in HTMLIFrameElement.prototype,n="onscroll"in window;window.NodeList&&!NodeList.prototype.forEach&&(NodeList.prototype.forEach=Array.prototype.forEach),"IntersectionObserver"in window&&(r=new IntersectionObserver((function(e,t){e.forEach((function(e){if(0!==e.intersectionRatio){var r=e.target;t.unobserve(r),c(r)}}))}),a));var i="requestAnimationFrame"in window?window.requestAnimationFrame:function(e){e()};function c(e){var t,r,a=[];"picture"===e.parentNode.tagName.toLowerCase()&&(t=e.parentNode,(r=t.querySelector("source[data-lazy-remove]"))&&t.removeChild(r),a=Array.prototype.slice.call(e.parentNode.querySelectorAll("source"))),a.push(e),a.forEach((function(e){e.hasAttribute("data-lazy-srcset")&&(e.setAttribute("srcset",e.getAttribute("data-lazy-srcset")),e.removeAttribute("data-lazy-srcset"))})),e.setAttribute("src",e.getAttribute("data-lazy-src")),e.removeAttribute("data-lazy-src")}function s(e){var t=document.createElement("div");for(t.innerHTML=function(e){var t=e.textContent||e.innerHTML,a="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 "+((t.match(/width=['"](\d+)['"]/)||!1)[1]||1)+" "+((t.match(/height=['"](\d+)['"]/)||!1)[1]||1)+"%27%3E%3C/svg%3E";return!o&&n&&(t=void 0===r?t.replace(/(?:\r\n|\r|\n|\t| )src=/g,' lazyload="1" src='):(t=t.replace("<source",'<source srcset="'+a+'" data-lazy-remove="true"></source>\n<source')).replace(/(?:\r\n|\r|\n|\t| )srcset=/g," data-lazy-srcset=").replace(/(?:\r\n|\r|\n|\t| )src=/g,' src="'+a+'" data-lazy-src=')),t}(e);t.firstChild;){var a=t.firstChild;if(!o&&n&&void 0!==r&&a.tagName&&("img"===a.tagName.toLowerCase()||"picture"===a.tagName.toLowerCase()||"iframe"===a.tagName.toLowerCase())){var i="picture"===a.tagName.toLowerCase()?t.querySelector("img"):a;r.observe(i)}e.parentNode.insertBefore(a,e)}e.parentNode.removeChild(e)}function d(){document.querySelectorAll("noscript.loading-lazy").forEach((function(e){s(e)})),void 0!==window.matchMedia&&window.matchMedia("print").addListener((function(e){e.matches&&document.querySelectorAll(a.lazyImage+"[data-lazy-src],"+a.lazyIframe+"[data-lazy-src]").forEach((function(e){c(e)}))}))}/comp|inter/.test(document.readyState)?i(d):"addEventListener"in document?document.addEventListener("DOMContentLoaded",(function(){i(d)})):document.attachEvent("onreadystatechange",(function(){"complete"===document.readyState&&d()}))}(); |
{ | ||
"name": "loading-attribute-polyfill", | ||
"version": "1.5.4", | ||
"version": "2.0.0-beta.0", | ||
"description": "Fast and lightweight dependency-free vanilla JavaScript polyfill for native lazy loading / the awesome loading='lazy'-attribute.", | ||
@@ -29,4 +29,4 @@ "main": "loading-attribute-polyfill.min.js", | ||
"devDependencies": { | ||
"@commitlint/cli": "^8.3.5", | ||
"@commitlint/config-conventional": "^8.3.4", | ||
"@commitlint/cli": "^12.0.1", | ||
"@commitlint/config-conventional": "^12.0.1", | ||
"@wdio/cli": "^6.1.12", | ||
@@ -37,21 +37,18 @@ "@wdio/dot-reporter": "^6.1.9", | ||
"@wdio/sync": "^6.1.8", | ||
"husky": "^4.2.5", | ||
"prettier": "2.0.5", | ||
"pretty-quick": "^2.0.1", | ||
"html-validate": "^4.6.0", | ||
"husky": "^5.1.2", | ||
"npm-run-all": "^4.1.5", | ||
"prettier": "2.2.1", | ||
"pretty-quick": "^3.1.0", | ||
"webdriverio": "^6.1.12", | ||
"xo": "^0.30.0" | ||
"xo": "^0.38.2" | ||
}, | ||
"scripts": { | ||
"test": "xo loading-attribute-polyfill.js" | ||
}, | ||
"xo": { | ||
"envs": [ | ||
"browser" | ||
], | ||
"prettier": true, | ||
"esnext": false, | ||
"rules": { | ||
"unicorn/prefer-node-remove": "off" | ||
} | ||
"test": "run-p validate:* lint:*", | ||
"lint:xo": "xo loading-attribute-polyfill.js", | ||
"validate:html": "html-validate demo/index.html", | ||
"release:minor": "npm version minor -m 'build(release): new minor version' && git push && git push --tags && npm publish", | ||
"release:patch": "npm version patch -m 'build(release): new patch version' && git push && git push --tags && npm publish", | ||
"prepare": "husky install" | ||
} | ||
} |
@@ -15,2 +15,4 @@ # loading="lazy" attribute polyfill | ||
[![Join the chat at https://gitter.im/loading-attribute-polyfill/community](https://badges.gitter.im/loading-attribute-polyfill/community.svg)](https://gitter.im/loading-attribute-polyfill/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) | ||
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) | ||
[![Open Source Love](https://badges.frapsoft.com/os/v3/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) | ||
@@ -48,6 +50,10 @@ Fast and lightweight vanilla JavaScript polyfill for native lazy loading, meaning the behaviour to load elements right before they enter the viewport. Provides graceful degradation, and is - not just thatfor - SEO friendly. Handles images with `srcset` and within `picture`, as well as `iframe` elements. `loading="lazy"` will be a huge improvement for todays web performance challenges, so use and polyfill it today! | ||
Afterwards you have need to wrap all of your `<img>` (and in case of `<picture>` usage the complementary `<source>` HTML tags as well) and `<iframe>` HTML tags that you'd like to lazy load (and thatfor added a `loading="lazy"` attribute as well) by an `<noscript>` HTML tag. | ||
Afterwards, you need to wrap all of your `<img>` and `<iframe>` HTML tags (in the case of `<picture>` use the complementary `<source>` HTML tags) that you'd like to lazy load with a `<noscript>` HTML tag (with the attribute `class="loading-lazy"`.) | ||
Please keep in mind that it's beneficial to even also include `width` and `height` attributes on `<img>` HTML tags, as the browser could determine the aspect ratio via those two attributes values being set (even if you overwrite them via CSS), compare to the great work by Jen Simmons on this topic, e.g. within these articles <https://css-tricks.com/do-this-to-improve-image-loading-on-your-website/> (with video) or <https://css-tricks.com/what-if-we-got-aspect-ratio-sized-images-by-doing-almost-nothing/> | ||
And please "Avoid lazy-loading images that are in the first visible viewport", compare to [the article "Browser-level image lazy-loading for the web"](https://web.dev/browser-level-image-lazy-loading/#avoid-lazy-loading-images-that-are-in-the-first-visible-viewport) published on web.dev: | ||
> You should avoid setting `loading=lazy` for any images that are in the first visible viewport. It is recommended to only add `loading=lazy` to images which are positioned below the fold, if possible. | ||
### Simple image | ||
@@ -64,4 +70,4 @@ | ||
```html | ||
<picture> | ||
<noscript class="loading-lazy"> | ||
<noscript class="loading-lazy"> | ||
<picture> | ||
<source | ||
@@ -79,4 +85,4 @@ media="(min-width: 40em)" | ||
/> | ||
</noscript> | ||
</picture> | ||
</picture> | ||
</noscript> | ||
``` | ||
@@ -161,3 +167,3 @@ | ||
Credits for the initial kickstarter / script to @Sora2455 for better expressing my ideas & concepts and support by @cbirdsong, @eklingen, @DaPo, @nextgenthemes, @diogoterremoto, @dracos, @Flimm, @TomS- and @vinyfc93. Thank you very much for that, highly appreciated ! | ||
Credits for the initial kickstarter / script to @Sora2455 for better expressing my ideas & concepts and support by @cbirdsong, @eklingen, @DaPo, @nextgenthemes, @diogoterremoto, @dracos, @Flimm, @TomS-, @vinyfc93, @JordanDysart and @denyshutsal. Thank you very much for that, highly appreciated ! | ||
@@ -164,0 +170,0 @@ ## Tested with |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
33748
15
288
201
14
1