get-selection-more
Advanced tools
Comparing version 0.0.1 to 1.0.0
@@ -1,2 +0,2 @@ | ||
function e(e=window){const t=(e.getSelection()||"").toString().trim();if(t)return t;const n=e.document.activeElement;if(n&&("INPUT"===n.tagName||"TEXTAREA"===n.tagName)){const e=n;return e.value.slice(e.selectionStart||0,e.selectionEnd||0)}return""}function t(e=window){const t=e.getSelection();if(!t)return"";const s=t.toString();return s.trim()?(function(e,t){if(!e||e.nodeType!==Node.TEXT_NODE)return"";let s=e.textContent||"";s&&(s=s.slice(0,t));for(let t=e.previousSibling;t;t=t.previousSibling)s=n(t)+s;for(let t=e.parentElement;t&&t!==document.body&&c(t);t=t.parentElement)for(let e=t.previousSibling;e;e=e.previousSibling)s=n(e)+s;const o=/[.?!。?!…]/,i=/[^\s.?!。?!…]/;for(let e=s.length-1;e>=0;e--){const t=s[e];if(o.test(t)){if("."===t&&i.test(s[e+1]))continue;return s.slice(e+1)}}return s}(t.anchorNode,t.anchorOffset)+s+function(e,t){if(!e||e.nodeType!==Node.TEXT_NODE)return"";let s=e.textContent||"";s&&(s=s.slice(t));for(let t=e.nextSibling;t;t=t.nextSibling)s+=n(t);for(let t=e.parentElement;t&&t!==document.body&&c(t);t=t.parentElement)for(let e=t.nextSibling;e;e=e.nextSibling)s+=n(e);return(s.match(/^((\.(?![\s.?!。?!…]))|[^.?!。?!…])*([.?!。?!…]){0,3}/)||[""])[0]}(t.focusNode,t.focusOffset)).replace(/\s+/g," ").trim():""}function n(e){return e.nodeType===Node.TEXT_NODE?e.textContent||"":e.nodeType===Node.ELEMENT_NODE?e.innerText:""}function c(e){switch(e.tagName){case"A":case"ABBR":case"B":case"BDI":case"BDO":case"BR":case"CITE":case"CODE":case"DATA":case"DFN":case"EM":case"I":case"KBD":case"MARK":case"Q":case"RP":case"RT":case"RTC":case"RUBY":case"S":case"SAMP":case"SMALL":case"SPAN":case"STRONG":case"SUB":case"SUP":case"TIME":case"U":case"VAR":case"WBR":return!0;default:return!1}}export{t as getSentence,e as getText}; | ||
function e(e=window){const t=(e.getSelection()||"").toString().trim();if(t)return t;const n=e.document.activeElement;if(n&&("INPUT"===n.tagName||"TEXTAREA"===n.tagName)){const e=n;return e.value.slice(e.selectionStart||0,e.selectionEnd||0)}return""}function t(e=window){const t=e.getSelection();if(!t||t.rangeCount<=0)return"";const n=t.toString();if(!n.trim())return"";const r=t.getRangeAt(0);return r?(c(r)+n+s(r)).replace(/\s+/g," ").trim():""}function n(e=window){const t=e.getSelection();if(!t||t.rangeCount<=0)return"";const n=t.toString();if(!n.trim())return"";const r=t.getRangeAt(0);return r?(function(e){if(e){const t=/[.?!。?!…]/,n=/[^\s.?!。?!…]/;for(let c=e.length-1;c>=0;c--){const s=e[c];if(t.test(s)){if("."===s&&n.test(e[c+1]))continue;return e.slice(c+1)}}}return e}(c(r))+n+function(e){const t=/^((\.(?![\s.?!。?!…]))|[^.?!。?!…])*([.?!。?!…]){0,3}/.exec(e);return t?t[0]:""}(s(r))).replace(/\s+/g," ").trim():""}function c(e){if(!e.startContainer)return"";let t=e.startContainer,n="";switch(t.nodeType){case Node.TEXT_NODE:{const c=t.textContent;c&&(n=c.slice(0,e.startOffset));break}case Node.COMMENT_NODE:case Node.CDATA_SECTION_NODE:break;default:t=t.childNodes[e.startOffset]}for(let e=t;a(e);e=e.parentElement)for(let t=e.previousSibling;a(t);t=t.previousSibling)n=r(t)+n;return n}function s(e){if(!e.endContainer)return"";let t=e.endContainer,n="";switch(t.nodeType){case Node.TEXT_NODE:{const c=t.textContent;c&&(n=c.slice(e.endOffset));break}case Node.COMMENT_NODE:case Node.CDATA_SECTION_NODE:break;default:t=t.childNodes[e.endOffset-1]}for(let e=t;a(e);e=e.parentElement)for(let t=e.nextSibling;a(t);t=t.nextSibling)n+=r(t);return n}function r(e){return e.nodeType===Node.TEXT_NODE?e.textContent||"":e.nodeType===Node.ELEMENT_NODE?e.innerText:""}function a(e){if(!e)return!1;switch(e.nodeType){case Node.TEXT_NODE:case Node.COMMENT_NODE:case Node.CDATA_SECTION_NODE:return!0;case Node.ELEMENT_NODE:switch(e.tagName){case"A":case"ABBR":case"B":case"BDI":case"BDO":case"BR":case"CITE":case"CODE":case"DATA":case"DFN":case"EM":case"I":case"KBD":case"MARK":case"Q":case"RP":case"RT":case"RTC":case"RUBY":case"S":case"SAMP":case"SMALL":case"SPAN":case"STRONG":case"SUB":case"SUP":case"TIME":case"U":case"VAR":case"WBR":return!0;default:return!1}default:return!1}}export{t as getParagraph,n as getSentence,e as getText}; | ||
//# sourceMappingURL=get-selection-more.es.js.map |
@@ -1,2 +0,2 @@ | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).getSelectionMore={})}(this,function(e){"use strict";function t(e){return e.nodeType===Node.TEXT_NODE?e.textContent||"":e.nodeType===Node.ELEMENT_NODE?e.innerText:""}function n(e){switch(e.tagName){case"A":case"ABBR":case"B":case"BDI":case"BDO":case"BR":case"CITE":case"CODE":case"DATA":case"DFN":case"EM":case"I":case"KBD":case"MARK":case"Q":case"RP":case"RT":case"RTC":case"RUBY":case"S":case"SAMP":case"SMALL":case"SPAN":case"STRONG":case"SUB":case"SUP":case"TIME":case"U":case"VAR":case"WBR":return!0;default:return!1}}e.getSentence=function(e){void 0===e&&(e=window);var r=e.getSelection();if(!r)return"";var a=r.toString();return a.trim()?(function(e,r){if(!e||e.nodeType!==Node.TEXT_NODE)return"";var a=e.textContent||"";a&&(a=a.slice(0,r));for(var i=e.previousSibling;i;i=i.previousSibling)a=t(i)+a;for(var o=e.parentElement;o&&o!==document.body&&n(o);o=o.parentElement)for(var i=o.previousSibling;i;i=i.previousSibling)a=t(i)+a;for(var c=/[.?!。?!…]/,s=/[^\s.?!。?!…]/,f=a.length-1;f>=0;f--){var u=a[f];if(c.test(u)){if("."===u&&s.test(a[f+1]))continue;return a.slice(f+1)}}return a}(r.anchorNode,r.anchorOffset)+a+function(e,r){if(!e||e.nodeType!==Node.TEXT_NODE)return"";var a=e.textContent||"";a&&(a=a.slice(r));for(var i=e.nextSibling;i;i=i.nextSibling)a+=t(i);for(var o=e.parentElement;o&&o!==document.body&&n(o);o=o.parentElement)for(var i=o.nextSibling;i;i=i.nextSibling)a+=t(i);return(a.match(/^((\.(?![\s.?!。?!…]))|[^.?!。?!…])*([.?!。?!…]){0,3}/)||[""])[0]}(r.focusNode,r.focusOffset)).replace(/\s+/g," ").trim():""},e.getText=function(e){void 0===e&&(e=window);var t=(e.getSelection()||"").toString().trim();if(t)return t;var n=e.document.activeElement;if(n&&("INPUT"===n.tagName||"TEXTAREA"===n.tagName)){var r=n;return r.value.slice(r.selectionStart||0,r.selectionEnd||0)}return""},Object.defineProperty(e,"__esModule",{value:!0})}); | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).getSelectionMore={})}(this,function(e){"use strict";function t(e){if(!e.startContainer)return"";var t=e.startContainer,n="";switch(t.nodeType){case Node.TEXT_NODE:var c=t.textContent;c&&(n=c.slice(0,e.startOffset));break;case Node.COMMENT_NODE:case Node.CDATA_SECTION_NODE:break;default:t=t.childNodes[e.startOffset]}for(var i=t;a(i);i=i.parentElement)for(var s=i.previousSibling;a(s);s=s.previousSibling)n=r(s)+n;return n}function n(e){if(!e.endContainer)return"";var t=e.endContainer,n="";switch(t.nodeType){case Node.TEXT_NODE:var c=t.textContent;c&&(n=c.slice(e.endOffset));break;case Node.COMMENT_NODE:case Node.CDATA_SECTION_NODE:break;default:t=t.childNodes[e.endOffset-1]}for(var i=t;a(i);i=i.parentElement)for(var s=i.nextSibling;a(s);s=s.nextSibling)n+=r(s);return n}function r(e){return e.nodeType===Node.TEXT_NODE?e.textContent||"":e.nodeType===Node.ELEMENT_NODE?e.innerText:""}function a(e){if(!e)return!1;switch(e.nodeType){case Node.TEXT_NODE:case Node.COMMENT_NODE:case Node.CDATA_SECTION_NODE:return!0;case Node.ELEMENT_NODE:switch(e.tagName){case"A":case"ABBR":case"B":case"BDI":case"BDO":case"BR":case"CITE":case"CODE":case"DATA":case"DFN":case"EM":case"I":case"KBD":case"MARK":case"Q":case"RP":case"RT":case"RTC":case"RUBY":case"S":case"SAMP":case"SMALL":case"SPAN":case"STRONG":case"SUB":case"SUP":case"TIME":case"U":case"VAR":case"WBR":return!0;default:return!1}default:return!1}}e.getParagraph=function(e){void 0===e&&(e=window);var r=e.getSelection();if(!r||r.rangeCount<=0)return"";var a=r.toString();if(!a.trim())return"";var c=r.getRangeAt(0);return c?(t(c)+a+n(c)).replace(/\s+/g," ").trim():""},e.getSentence=function(e){void 0===e&&(e=window);var r=e.getSelection();if(!r||r.rangeCount<=0)return"";var a=r.toString();if(!a.trim())return"";var c,i,s=r.getRangeAt(0);return s?(function(e){if(e)for(var t=/[.?!。?!…]/,n=/[^\s.?!。?!…]/,r=e.length-1;r>=0;r--){var a=e[r];if(t.test(a)){if("."===a&&n.test(e[r+1]))continue;return e.slice(r+1)}}return e}(t(s))+a+(c=n(s),i=/^((\.(?![\s.?!。?!…]))|[^.?!。?!…])*([.?!。?!…]){0,3}/.exec(c),i?i[0]:"")).replace(/\s+/g," ").trim():""},e.getText=function(e){void 0===e&&(e=window);var t=(e.getSelection()||"").toString().trim();if(t)return t;var n=e.document.activeElement;if(n&&("INPUT"===n.tagName||"TEXTAREA"===n.tagName)){var r=n;return r.value.slice(r.selectionStart||0,r.selectionEnd||0)}return""},Object.defineProperty(e,"__esModule",{value:!0})}); | ||
//# sourceMappingURL=get-selection-more.umd.js.map |
@@ -5,2 +5,5 @@ /** | ||
export function getText(win = window) { | ||
// When called on an <iframe> that is not displayed (eg. where display: none is set) | ||
// Firefox will return null, whereas other browsers will return a Selection object | ||
// with Selection.type set to None. | ||
const selection = (win.getSelection() || '').toString().trim(); | ||
@@ -10,3 +13,4 @@ if (selection) { | ||
} | ||
// Firefox fix | ||
// Currently getSelection() doesn't work on the content of <input> elements in Firefox | ||
// Document.activeElement returns the focused element. | ||
const activeElement = win.document.activeElement; | ||
@@ -22,2 +26,22 @@ if (activeElement) { | ||
/** | ||
* Returns the paragraph containing the selection text. | ||
*/ | ||
export function getParagraph(win = window) { | ||
const selection = win.getSelection(); | ||
if (!selection || selection.rangeCount <= 0) { | ||
return ''; | ||
} | ||
const selectedText = selection.toString(); | ||
if (!selectedText.trim()) { | ||
return ''; | ||
} | ||
const range = selection.getRangeAt(0); | ||
if (!range) { | ||
return ''; | ||
} | ||
return (extractParagraphHead(range) + selectedText + extractParagraphTail(range)) | ||
.replace(/\s+/g, ' ') | ||
.trim(); | ||
} | ||
/** | ||
* Returns the sentence containing the selection text. | ||
@@ -27,3 +51,3 @@ */ | ||
const selection = win.getSelection(); | ||
if (!selection) { | ||
if (!selection || selection.rangeCount <= 0) { | ||
return ''; | ||
@@ -35,62 +59,91 @@ } | ||
} | ||
return (extractSentenceHead(selection.anchorNode, selection.anchorOffset) + | ||
const range = selection.getRangeAt(0); | ||
if (!range) { | ||
return ''; | ||
} | ||
return (extractSentenceHead(extractParagraphHead(range)) + | ||
selectedText + | ||
extractSentenceTail(selection.focusNode, selection.focusOffset)) | ||
extractSentenceTail(extractParagraphTail(range))) | ||
.replace(/\s+/g, ' ') | ||
.trim(); | ||
} | ||
function extractSentenceHead(anchorNode, anchorOffset) { | ||
if (!anchorNode || anchorNode.nodeType !== Node.TEXT_NODE) { | ||
function extractParagraphHead(range) { | ||
if (!range.startContainer) { | ||
return ''; | ||
} | ||
let leadingText = anchorNode.textContent || ''; | ||
if (leadingText) { | ||
leadingText = leadingText.slice(0, anchorOffset); | ||
let startNode = range.startContainer; | ||
let leadingText = ''; | ||
switch (startNode.nodeType) { | ||
case Node.TEXT_NODE: { | ||
const textContent = startNode.textContent; | ||
if (textContent) { | ||
leadingText = textContent.slice(0, range.startOffset); | ||
} | ||
break; | ||
} | ||
case Node.COMMENT_NODE: | ||
case Node.CDATA_SECTION_NODE: | ||
break; | ||
default: | ||
startNode = startNode.childNodes[range.startOffset]; | ||
} | ||
// prev siblings | ||
for (let node = anchorNode.previousSibling; node; node = node.previousSibling) { | ||
leadingText = getTextFromNode(node) + leadingText; | ||
} | ||
// parent prev siblings | ||
for (let element = anchorNode.parentElement; element && element !== document.body && isInlineTag(element); element = element.parentElement) { | ||
for (let node = element.previousSibling; node; node = node.previousSibling) { | ||
leadingText = getTextFromNode(node) + leadingText; | ||
for (let node = startNode; isInlineNode(node); node = node.parentElement) { | ||
for (let sibl = node.previousSibling; isInlineNode(sibl); sibl = sibl.previousSibling) { | ||
leadingText = getTextFromNode(sibl) + leadingText; | ||
} | ||
} | ||
const puncTester = /[.?!。?!…]/; | ||
/** meaningful char after dot "." */ | ||
const charTester = /[^\s.?!。?!…]/; | ||
for (let i = leadingText.length - 1; i >= 0; i--) { | ||
const c = leadingText[i]; | ||
if (puncTester.test(c)) { | ||
if (c === '.' && charTester.test(leadingText[i + 1])) { | ||
// a.b is allowed | ||
continue; | ||
} | ||
return leadingText.slice(i + 1); | ||
} | ||
} | ||
return leadingText; | ||
} | ||
function extractSentenceTail(focusNode, focusOffset) { | ||
if (!focusNode || focusNode.nodeType !== Node.TEXT_NODE) { | ||
function extractParagraphTail(range) { | ||
if (!range.endContainer) { | ||
return ''; | ||
} | ||
let tailingText = focusNode.textContent || ''; | ||
if (tailingText) { | ||
tailingText = tailingText.slice(focusOffset); | ||
let endNode = range.endContainer; | ||
let tailingText = ''; | ||
switch (endNode.nodeType) { | ||
case Node.TEXT_NODE: { | ||
const textContent = endNode.textContent; | ||
if (textContent) { | ||
tailingText = textContent.slice(range.endOffset); | ||
} | ||
break; | ||
} | ||
case Node.COMMENT_NODE: | ||
case Node.CDATA_SECTION_NODE: | ||
break; | ||
default: | ||
endNode = endNode.childNodes[range.endOffset - 1]; | ||
} | ||
// next siblings | ||
for (let node = focusNode.nextSibling; node; node = node.nextSibling) { | ||
tailingText += getTextFromNode(node); | ||
} | ||
// parent next siblings | ||
for (let element = focusNode.parentElement; element && element !== document.body && isInlineTag(element); element = element.parentElement) { | ||
for (let node = element.nextSibling; node; node = node.nextSibling) { | ||
tailingText += getTextFromNode(node); | ||
for (let node = endNode; isInlineNode(node); node = node.parentElement) { | ||
for (let sibl = node.nextSibling; isInlineNode(sibl); sibl = sibl.nextSibling) { | ||
tailingText += getTextFromNode(sibl); | ||
} | ||
} | ||
return tailingText; | ||
} | ||
function extractSentenceHead(leadingText) { | ||
// split regexp to prevent backtracking | ||
if (leadingText) { | ||
const puncTester = /[.?!。?!…]/; | ||
/** meaningful char after dot "." */ | ||
const charTester = /[^\s.?!。?!…]/; | ||
for (let i = leadingText.length - 1; i >= 0; i--) { | ||
const c = leadingText[i]; | ||
if (puncTester.test(c)) { | ||
if (c === '.' && charTester.test(leadingText[i + 1])) { | ||
// a.b is allowed | ||
continue; | ||
} | ||
return leadingText.slice(i + 1); | ||
} | ||
} | ||
} | ||
return leadingText; | ||
} | ||
function extractSentenceTail(tailingText) { | ||
// match tail for "..." | ||
const sentenceTailTester = /^((\.(?![\s.?!。?!…]))|[^.?!。?!…])*([.?!。?!…]){0,3}/; | ||
return (tailingText.match(sentenceTailTester) || [''])[0]; | ||
const tailMatch = /^((\.(?![\s.?!。?!…]))|[^.?!。?!…])*([.?!。?!…]){0,3}/.exec(tailingText); | ||
return tailMatch ? tailMatch[0] : ''; | ||
} | ||
@@ -106,35 +159,48 @@ function getTextFromNode(node) { | ||
} | ||
function isInlineTag(el) { | ||
switch (el.tagName) { | ||
case 'A': | ||
case 'ABBR': | ||
case 'B': | ||
case 'BDI': | ||
case 'BDO': | ||
case 'BR': | ||
case 'CITE': | ||
case 'CODE': | ||
case 'DATA': | ||
case 'DFN': | ||
case 'EM': | ||
case 'I': | ||
case 'KBD': | ||
case 'MARK': | ||
case 'Q': | ||
case 'RP': | ||
case 'RT': | ||
case 'RTC': | ||
case 'RUBY': | ||
case 'S': | ||
case 'SAMP': | ||
case 'SMALL': | ||
case 'SPAN': | ||
case 'STRONG': | ||
case 'SUB': | ||
case 'SUP': | ||
case 'TIME': | ||
case 'U': | ||
case 'VAR': | ||
case 'WBR': | ||
function isInlineNode(node) { | ||
if (!node) { | ||
return false; | ||
} | ||
switch (node.nodeType) { | ||
case Node.TEXT_NODE: | ||
case Node.COMMENT_NODE: | ||
case Node.CDATA_SECTION_NODE: | ||
return true; | ||
case Node.ELEMENT_NODE: { | ||
switch (node.tagName) { | ||
case 'A': | ||
case 'ABBR': | ||
case 'B': | ||
case 'BDI': | ||
case 'BDO': | ||
case 'BR': | ||
case 'CITE': | ||
case 'CODE': | ||
case 'DATA': | ||
case 'DFN': | ||
case 'EM': | ||
case 'I': | ||
case 'KBD': | ||
case 'MARK': | ||
case 'Q': | ||
case 'RP': | ||
case 'RT': | ||
case 'RTC': | ||
case 'RUBY': | ||
case 'S': | ||
case 'SAMP': | ||
case 'SMALL': | ||
case 'SPAN': | ||
case 'STRONG': | ||
case 'SUB': | ||
case 'SUP': | ||
case 'TIME': | ||
case 'U': | ||
case 'VAR': | ||
case 'WBR': | ||
return true; | ||
default: | ||
return false; | ||
} | ||
} | ||
default: | ||
@@ -141,0 +207,0 @@ return false; |
@@ -6,4 +6,8 @@ /** | ||
/** | ||
* Returns the paragraph containing the selection text. | ||
*/ | ||
export declare function getParagraph(win?: Window): string; | ||
/** | ||
* Returns the sentence containing the selection text. | ||
*/ | ||
export declare function getSentence(win?: Window): string; |
{ | ||
"name": "get-selection-more", | ||
"version": "0.0.1", | ||
"version": "1.0.0", | ||
"description": "Get text and context sentence from window.getSelection()", | ||
@@ -14,4 +14,5 @@ "keywords": [ | ||
"prebuild": "rimraf dist", | ||
"build": "tsc && rollup -c rollup.config.ts", | ||
"start": "rollup -c rollup.config.ts -w" | ||
"build": "tsc && rollup -c rollup.config.js", | ||
"start": "rollup -c rollup.config.js -w", | ||
"test": "karma start" | ||
}, | ||
@@ -31,3 +32,19 @@ "main": "dist/get-selection-more.umd.js", | ||
"devDependencies": { | ||
"@types/chai": "^4.1.7", | ||
"@types/mocha": "^5.2.7", | ||
"@types/webpack-env": "^1.13.9", | ||
"chai": "^4.2.0", | ||
"istanbul-instrumenter-loader": "^3.0.1", | ||
"karma": "^4.1.0", | ||
"karma-chai": "^0.1.0", | ||
"karma-chrome-launcher": "^2.2.0", | ||
"karma-coverage-istanbul-reporter": "^2.0.5", | ||
"karma-coveralls": "^2.1.0", | ||
"karma-firefox-launcher": "^1.1.0", | ||
"karma-mocha": "^1.3.0", | ||
"karma-nyan-reporter": "^0.2.5", | ||
"karma-rollup-preprocessor": "^7.0.0", | ||
"karma-webpack": "^4.0.2", | ||
"lodash.camelcase": "^4.3.0", | ||
"mocha": "^6.1.4", | ||
"rimraf": "^2.6.3", | ||
@@ -38,7 +55,10 @@ "rollup": "^1.15.2", | ||
"rollup-plugin-typescript2": "^0.21.1", | ||
"ts-loader": "^6.0.2", | ||
"tslint": "^5.17.0", | ||
"tslint-config-prettier": "^1.18.0", | ||
"tslint-config-standard": "^8.0.1", | ||
"typescript": "^3.5.1" | ||
"tsx-dom": "^0.8.3", | ||
"typescript": "^3.5.1", | ||
"webpack": "^4.34.0" | ||
} | ||
} |
@@ -1,4 +0,4 @@ | ||
# Get Selection More [](https://www.npmjs.com/package/get-selection-more) | ||
# Get Selection More [](https://www.npmjs.com/package/get-selection-more) [](https://travis-ci.org/crimx/get-selection-more) [](https://coveralls.io/github/crimx/get-selection-more?branch=master) | ||
Exports two functions to get selection text and context sentence. | ||
## APIs | ||
@@ -10,4 +10,7 @@ ```typescript | ||
export declare function getText(win?: Window): string; | ||
/** | ||
* Returns the paragraph containing the selection text. | ||
*/ | ||
export declare function getParagraph(win?: Window): string; | ||
/** | ||
* Returns the sentence containing the selection text. | ||
@@ -17,1 +20,13 @@ */ | ||
``` | ||
## Usage | ||
```javascript | ||
import { getText, getParagraph, getSentence } from 'get-selection-more' | ||
document.addEventListener('selectionchange', () => { | ||
console.log(getText(), getParagraph(), getSentence()) | ||
}) | ||
``` | ||
Or load the UMD module directly which exposes `getSelectionMore` global. |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
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
39755
237
1
31
29
1