diff --git a/package.json b/package.json index 600eccd..98e366b 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "@types/react": "^17.0.45", "@types/react-dom": "^17.0.2", "egjs-jsdoc-template": "^1.4.4", - "jsdoc-to-mdx": "^1.1.0", + "jsdoc-to-mdx": "^1.2.1", "lerna": "^4.0.0", "react": "^17.0.2", "react-dom": "^17.0.2", diff --git a/packages/conveyer/src/types.ts b/packages/conveyer/src/types.ts index 56435cf..039f506 100644 --- a/packages/conveyer/src/types.ts +++ b/packages/conveyer/src/types.ts @@ -5,32 +5,77 @@ */ import { CONVEYER_METHODS } from "./consts"; import Conveyer from "./Conveyer"; + + /** * @typedef - * @property - scroll direction. (true: Horizontal Scroll, false: Vertical Scroll) (default: true) 스크롤 방향. (true: 가로 스크롤, false: 세로 스크롤) (default: true) - * @property - selector to find items inside. (default: "") 내부의 아이템들을 찾기 위한 selector. (default: "") - * @property - Whether to use drag (default: true) 드래그를 사용할지 여부. (default: true) - * @property - Whether to use the mouse wheel in a direction aside from the scroll direction (default: false) 스크롤 방향과 다른 방향의 마우스 휠 입력을 사용할지 여부. (default: false) - * @property - The minimum margin space for {@link Conveyer#event-reachStart reachStart}, {@link Conveyer#event-leaveStart leaveStart}, {@link Conveyer#event-reachEnd reachEnd}, and {@link Conveyer#event-leaveEnd leaveEnd} events to be triggered at the beginning and end of the scroll area. (default: 0) - * 스크롤 영역의 시작과 끝에서 {@link Conveyer#event-reachStart reachStart}, {@link Conveyer#event-leaveStart leaveStart}, {@link Conveyer#event-reachEnd reachEnd}, {@link Conveyer#event-leaveEnd leaveEnd} 이벤트들이 발생하기 위한 최소 여백. (default: 0) - * @property - The maximum amount of time the scroll event does not fire for the finishScroll event to be triggered. (default: 100) finishScroll 이벤트가 발생되기 위한 scroll 이벤트가 발생하지 않는 최대 시간. (default: 100) - * @property - Whether to prevent being selected. (default: true) 셀렉트가 되는 것을 막을지 여부. (default: true) - * @property - Whether to prevent click event when dragging. (default: false) 드래그하면 클릭이벤트를 막을지 여부. (default: true) - * @property - Whether to use the {@link https://developer.mozilla.org/ko/docs/Web/API/Event/preventDefault preventDefault} when the user starts dragging 사용자가 드래그를 시작할 때 {@link https://developer.mozilla.org/ko/docs/Web/API/Event/preventDefault preventDefault} 실행 여부 - * @property - Whether to automatically initialize when an instance is created. If set to false, initialization is possible while calling the init method. (default: true) 인스턴스를 생성할 때 자동으로 초기화할지 여부. false로 설정하면 init 메서드를 호출하면서 초기화가 가능하다. (default: true) - * @property - If this option is enabled on a Conveyer placed inside an egjs component that has the same scroll direction including the Conveyer itself. The parent component moves in the same direction after the Conveyer reaches the first/last scroll position. Conveyer 자신을 포함해서 동일한 스크롤 방향을 가진 egjs 컴포넌트 내부에 배치된 Conveyer에서 이 옵션을 활성화하면 Conveyer가 첫/마지막 스크롤 위치에 도달한 뒤부터 같은 방향으로 상위 컴포넌트가 움직인다. */ export interface ConveyerOptions { + /** + * scroll direction. (true: Horizontal Scroll, false: Vertical Scroll) + * 스크롤 방향. (true: 가로 스크롤, false: 세로 스크롤) + * @default true + */ horizontal?: boolean; + /** + * selector to find items inside. + * 내부의 아이템들을 찾기 위한 selector. + * @default "" + */ itemSelector?: string; + /** + * Whether to use drag. + * 드래그를 사용할지 여부. + * @default true + */ useDrag?: boolean; + /** + * Whether to use the mouse wheel in a direction aside from the scroll direction. + * 스크롤 방향과 다른 방향의 마우스 휠 입력을 사용할지 여부. + * @default false + */ useSideWheel?: boolean; + /** + * The minimum margin space for {@link Conveyer#event-reachStart reachStart}, {@link Conveyer#event-leaveStart leaveStart}, {@link Conveyer#event-reachEnd reachEnd}, and {@link Conveyer#event-leaveEnd leaveEnd} events to be triggered at the beginning and end of the scroll area. + * 스크롤 영역의 시작과 끝에서 {@link Conveyer#event-reachStart reachStart}, {@link Conveyer#event-leaveStart leaveStart}, {@link Conveyer#event-reachEnd reachEnd}, {@link Conveyer#event-leaveEnd leaveEnd} 이벤트들이 발생하기 위한 최소 여백. + * @default 0 + */ boundaryMargin?: number; + /** + * The maximum amount of time the scroll event does not fire for the finishScroll event to be triggered. + * finishScroll 이벤트가 발생되기 위한 scroll 이벤트가 발생하지 않는 최대 시간. + * @default 100 + */ scrollDebounce?: number; + /** + * Whether to prevent being selected. + * 셀렉트가 되는 것을 막을지 여부. + * @default true + */ preventDefault?: boolean; + /** + * Whether to prevent click event when dragging. + * 드래그하면 클릭이벤트를 막을지 여부. + * @default false + */ preventClickOnDrag?: boolean; + /** + * Whether to use the {@link https://developer.mozilla.org/ko/docs/Web/API/Event/preventDefault preventDefault} when the user starts dragging. + * 사용자가 드래그를 시작할 때 {@link https://developer.mozilla.org/ko/docs/Web/API/Event/preventDefault preventDefault} 실행 여부 + * @default false + */ preventDefaultOnDrag?: boolean; + /** + * Whether to automatically initialize when an instance is created. If set to false, initialization is possible while calling the init method. + * 인스턴스를 생성할 때 자동으로 초기화할지 여부. false로 설정하면 init 메서드를 호출하면서 초기화가 가능하다. + * @default true + */ autoInit?: boolean; + /** + * If this option is enabled on a Conveyer placed inside an egjs component that has the same scroll direction including the Conveyer itself. The parent component moves in the same direction after the Conveyer reaches the first/last scroll position. + * Conveyer 자신을 포함해서 동일한 스크롤 방향을 가진 egjs 컴포넌트 내부에 배치된 Conveyer에서 이 옵션을 활성화하면 Conveyer가 첫/마지막 스크롤 위치에 도달한 뒤부터 같은 방향으로 상위 컴포넌트가 움직인다. + * @default false + */ nested?: boolean; } @@ -65,8 +110,8 @@ export interface ConveyerReactiveState { */ export interface FindItemOptions { /** - * size ratio to find items. - * 아이템을 찾기 위한 사이즈 비율. + * size ratio to find items. Use it if `padding` inside the item plays the same role as `margin` or `gap`. + * 아이템을 찾기 위한 사이즈 비율. 아이템 내부에 `padding`이 `margin`, `gap`과 같은 역할을 한다면 사용해라. * @default 1 */ hitTest?: number; @@ -88,15 +133,30 @@ export interface FindItemOptions { /** * @typedef * @extends FindItemOptions - * @property - Where to arrange the items in the container. (default: "start") 아이템을 container안에서 정렬할 위치. (default: "start") - * @property - Whether to find the next item except sorting it in place. (default: false) 아이템을 제자리에 정렬하는 것을 제외하고 다음 아이템을 찾을지 여부. (default: false) - * @property - The value to scroll further from the sort position. (default: 0) 정렬하는 위치에서 얼만큼 더 스크롤할 값. (default: 0) - * @property - How long to scroll animation time. (default: 0) 얼마동한 스크롤할 할지 애니메이션 시간. (default: 0) */ export interface ScrollIntoViewOptions extends FindItemOptions { + /** + * The position to align the target to. + * target을 정렬할 위치. + */ align?: "start" | "end" | "center"; + /** + * Whether to find the next item except sorting it in place. + * 아이템을 제자리에 정렬하는 것을 제외하고 다음 아이템을 찾을지 여부. + * @default false + */ excludeStand?: boolean; + /** + * The value to scroll further from the sort position. + * 정렬하는 위치에서 얼만큼 더 스크롤할 값. + * @default 0 + */ offset?: number; + /** + * How long to scroll animation time. + * 얼마동한 스크롤할 할지 애니메이션 시간. + * @default 0 + */ duration?: number; } diff --git a/packages/docs/docs/examples/Intersection.mdx b/packages/docs/docs/examples/Intersection.mdx index 30b7932..b4b6ad7 100644 --- a/packages/docs/docs/examples/Intersection.mdx +++ b/packages/docs/docs/examples/Intersection.mdx @@ -15,10 +15,16 @@ Also, if the `intersection` option is enabled, items overlapping on the side can import Intersection from "@site/src/examples/Intersection"; -import { ScrollIntoViewTargetWithIntersection } from "@site/src/examples/ScrollIntoViewTarget"; +import { + ScrollIntoViewTargetWithIntersectionStartEnd, + ScrollIntoViewTargetWithIntersectionPrevNext, +} from "@site/src/examples/ScrollIntoViewTarget"; import ConveyerCodeTabs from "@site/docs/codes/ConveyerCodeTabs"; - + + + + ### Example diff --git a/packages/docs/src/examples/ScrollIntoViewTarget.tsx b/packages/docs/src/examples/ScrollIntoViewTarget.tsx index 1b99d78..6fa0b3a 100644 --- a/packages/docs/src/examples/ScrollIntoViewTarget.tsx +++ b/packages/docs/src/examples/ScrollIntoViewTarget.tsx @@ -11,25 +11,56 @@ function updateItem(items, container, mark, target, className) { } } + +function ConveyerItems(props: { itemsRef: React.RefObject; onScroll: () => void }) { + return <> +
+
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
+
+
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
+ ; +} + export default function ScrollIntoViewTarget() { const ref = React.useRef(null); - const containerRef = React.useRef(); + const containerRef = React.useRef(null); + const { findElement, scrollIntoView } = useConveyer(ref, { horizontal: true, }); const onScroll = React.useCallback(() => { requestAnimationFrame(() => { - const container = containerRef.current; - const markPrev = document.querySelector(".mark.prev"); - const markStart = document.querySelector(".mark.start"); - const markEnd = document.querySelector(".mark.end"); - const markNext = document.querySelector(".mark.next"); - const items = document.querySelectorAll(".item"); - const backgroundItems = document.querySelectorAll(".background-items .item"); + const container = containerRef.current!; + const markPrev = container.querySelector(".mark.prev"); + const markStart = container.querySelector(".mark.start"); + const markEnd = container.querySelector(".mark.end"); + const markNext = container.querySelector(".mark.next"); + const items = container.querySelectorAll(".item"); + const backgroundItems = container.querySelectorAll(".background-items .item"); backgroundItems.forEach(element => { - element!.style.transform = `translateX(${-ref.current.scrollLeft}px)`; + element!.style.transform = `translateX(${-ref.current!.scrollLeft}px)`; }); items.forEach(item => { item.classList.remove("prev", "start", "end", "next"); @@ -61,30 +92,7 @@ export default function ScrollIntoViewTarget() { }, []); return

target

-
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
-
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
+
@@ -93,7 +101,7 @@ export default function ScrollIntoViewTarget() {
; } -export function ScrollIntoViewTargetWithIntersection() { +export function ScrollIntoViewTargetWithIntersectionStartEnd() { const ref = React.useRef(null); const containerRef = React.useRef(null); const { findElement, scrollIntoView } = useConveyer(ref, { @@ -102,13 +110,13 @@ export function ScrollIntoViewTargetWithIntersection() { const onScroll = React.useCallback(() => { requestAnimationFrame(() => { - const container = containerRef.current; - // const markPrev = document.querySelector(".mark.prev"); - const markStart = document.querySelector(".mark.start"); - const markEnd = document.querySelector(".mark.end"); - // const markNext = document.querySelector(".mark.next"); - const items = document.querySelectorAll(".item"); - const backgroundItems = document.querySelectorAll(".background-items .item"); + const container = containerRef.current!; + // const markPrev = container.querySelector(".mark.prev"); + const markStart = container.querySelector(".mark.start"); + const markEnd = container.querySelector(".mark.end"); + // const markNext = container.querySelector(".mark.next"); + const items = container.querySelectorAll(".item"); + const backgroundItems = container.querySelectorAll(".background-items .item"); backgroundItems.forEach(element => { element!.style.transform = `translateX(${-ref.current!.scrollLeft}px)`; @@ -146,31 +154,8 @@ export function ScrollIntoViewTargetWithIntersection() { }); }, []); return
-

target with intersection

-
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
-
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
+

target with intersection (start, end)

+ {/*
*/} {/*
*/}
@@ -178,3 +163,59 @@ export function ScrollIntoViewTargetWithIntersection() {

align

; } + +export function ScrollIntoViewTargetWithIntersectionPrevNext() { + const ref = React.useRef(null); + const containerRef = React.useRef(null); + const { findElement, scrollIntoView } = useConveyer(ref, { + horizontal: true, + }); + + const onScroll = React.useCallback(() => { + requestAnimationFrame(() => { + const container = containerRef.current!; + const markPrev = container.querySelector(".mark.prev"); + const markNext = container.querySelector(".mark.next"); + const items = container.querySelectorAll(".item"); + const backgroundItems = container.querySelectorAll(".background-items .item"); + + backgroundItems.forEach(element => { + element!.style.transform = `translateX(${-ref.current!.scrollLeft}px)`; + }); + items.forEach(item => { + item.classList.remove("prev", "next"); + }); + + const prev = findElement("prev", { + intersection: true, + }); + const next = findElement("next", { + intersection: true, + }); + + prev?.classList.add("prev"); + next?.classList.add("next"); + + + updateItem(backgroundItems, container, markPrev, prev, "prev"); + updateItem(backgroundItems, container, markNext, next, "next"); + }); + }, []); + + React.useEffect(() => { + onScroll(); + scrollIntoView("next", { + align: "center", + duration: 500, + }); + }, []); + return
+

target with intersection (prev, next)

+ +
+
+ {/*
+
*/} +

align

+
; +} diff --git a/yarn.lock b/yarn.lock index d3a9d0a..14dccce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1834,7 +1834,7 @@ resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz#1bfafe4b7ed0f3e4105837e056e0a89b108ebe36" integrity sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg== -"@daybrush/jsdoc@^0.3.10", "@daybrush/jsdoc@^0.3.12": +"@daybrush/jsdoc@^0.3.12": version "0.3.12" resolved "https://registry.yarnpkg.com/@daybrush/jsdoc/-/jsdoc-0.3.12.tgz#22fc3a008eb52a01eae728d8b75fe7661cc71d48" integrity sha512-aejzziZRBQH7pQXyt9DBeJt80Z2prmkFPFSCXspvN0XWTBeDkonZst5Ku3IzB4CXhd17fGa6hAhX4l/e3x20Bg== @@ -1857,6 +1857,29 @@ taffydb "2.6.2" underscore "~1.8.3" +"@daybrush/jsdoc@^0.4.5": + version "0.4.7" + resolved "https://registry.npmjs.org/@daybrush/jsdoc/-/jsdoc-0.4.7.tgz#aefb53d1f15eeafbdb15b002bdb5b1ebcb2b255c" + integrity sha512-iR8P5Hdvcg4TvwRvS3XKlxF+4FlF5DSP7HnZoj4+01QEaFRID4HbBAEKu4t5CvGm6h9wypE4R+aVxfoin4IW1Q== + dependencies: + "@babel/parser" "^7.2.3" + "@babel/types" "^7.2.2" + "@daybrush/utils" "^1.6.0" + ast-parser "^0.2.0" + bluebird "~3.5.0" + catharsis "~0.8.9" + escape-string-regexp "~1.0.5" + js2xmlparser "~3.0.0" + klaw "~2.0.0" + markdown-it "~8.3.1" + markdown-it-named-headers "~0.0.4" + marked "~0.3.6" + mkdirp "~0.5.1" + requizzle "~0.2.1" + strip-json-comments "~2.0.1" + taffydb "2.6.2" + underscore "~1.8.3" + "@daybrush/utils@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@daybrush/utils/-/utils-0.11.0.tgz#3fd113fcedaab29d8c80773ca5f4d32551bdc9d8" @@ -1867,6 +1890,11 @@ resolved "https://registry.yarnpkg.com/@daybrush/utils/-/utils-1.7.1.tgz#82de000e69a0b85212933801df9b7c4c5ae15be5" integrity sha512-ruVDIfXeVAF4s0RxJoNx5hTjxlIRMnKoJ7N5e2m9eDyluIXB12EvhMPQdoq4a/ohJ+cPgj2MiWS5Lvmpsrx8Gg== +"@daybrush/utils@^1.6.0": + version "1.13.0" + resolved "https://registry.npmjs.org/@daybrush/utils/-/utils-1.13.0.tgz#ea70a60864130da476406fdd1d465e3068aea0ff" + integrity sha512-ALK12C6SQNNHw1enXK+UO8bdyQ+jaWNQ1Af7Z3FNxeAwjYhQT7do+TRE4RASAJ3ObaS2+TJ7TXR3oz2Gzbw0PQ== + "@discoveryjs/json-ext@0.5.5": version "0.5.5" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz#9283c9ce5b289a3c4f61c12757469e59377f81f3" @@ -6284,6 +6312,15 @@ ast-parser@^0.1.1: "@babel/types" "^7.3.0" "@daybrush/utils" "^0.11.0" +ast-parser@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/ast-parser/-/ast-parser-0.2.0.tgz#c8e23d8929d2b9ed3663709b3f036c96f01898ae" + integrity sha512-9fv42KOoY1/TmKlqSM3XaHvOUDRS8MA4gjQvPuyr7PWzu9fnm9NEColOvUXJg91SxViOGbwO6EkDYXKFJKL5zA== + dependencies: + "@babel/traverse" "^7.2.3" + "@babel/types" "^7.3.0" + "@daybrush/utils" "^0.11.0" + ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" @@ -7502,15 +7539,6 @@ check-types@^8.0.3: resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== -child-process-promise@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/child-process-promise/-/child-process-promise-2.2.1.tgz#4730a11ef610fad450b8f223c79d31d7bdad8074" - integrity sha512-Fi4aNdqBsr0mv+jgWxcZ/7rAIC2mgihrptyVI4foh/rrjY/3BNjfP9+oaiFx/fzim+1ZyCNBae0DlyfQhSugog== - dependencies: - cross-spawn "^4.0.2" - node-version "^1.0.0" - promise-polyfill "^6.0.1" - "chokidar@>=3.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.3.0, chokidar@^3.4.1, chokidar@^3.4.2, chokidar@^3.5.0, chokidar@^3.5.1, chokidar@^3.5.2, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" @@ -8515,14 +8543,6 @@ cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -cross-spawn@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" - integrity sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA== - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -14244,6 +14264,18 @@ jsdoc-parse@^6.1.0: sort-array "^4.1.4" test-value "^3.0.0" +jsdoc-parse@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/jsdoc-parse/-/jsdoc-parse-6.2.0.tgz#2b71d3925acfc4badc72526f2470766e0561f6b5" + integrity sha512-Afu1fQBEb7QHt6QWX/6eUWvYHJofB90Fjx7FuJYF7mnG9z5BkAIpms1wsnvYLytfmqpEENHs/fax9p8gvMj7dw== + dependencies: + array-back "^6.2.2" + lodash.omit "^4.5.0" + lodash.pick "^4.4.0" + reduce-extract "^1.0.0" + sort-array "^4.1.5" + test-value "^3.0.0" + jsdoc-to-markdown@^7.0.1: version "7.1.1" resolved "https://registry.yarnpkg.com/jsdoc-to-markdown/-/jsdoc-to-markdown-7.1.1.tgz#dde4ef32fd0b28b2695c919a08fd65ae98317bcd" @@ -14257,14 +14289,15 @@ jsdoc-to-markdown@^7.0.1: jsdoc-parse "^6.1.0" walk-back "^5.1.0" -jsdoc-to-mdx@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/jsdoc-to-mdx/-/jsdoc-to-mdx-1.1.2.tgz#b3a07df2d4a11b67a204a6bb483042ff7a292534" - integrity sha512-F+pAJnP7T6oEqytY3z6tEcRpOeYk0zul8t+zDy5wsLJSzL/lonU68sXhIC8HN9+5wRS8M7DSMOVtxWTKUg2dHg== +jsdoc-to-mdx@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/jsdoc-to-mdx/-/jsdoc-to-mdx-1.2.1.tgz#2e5e61ef71f4764af2d65de12e50c655e665850f" + integrity sha512-bW3RKpK31uLLjoAePbXtEn4K0VRs1Z3s86KBVnlHq/JN0R47GstLvV6AeGwFJrnRx1b+zTpNebxBWTt90RmzCQ== dependencies: - "@daybrush/jsdoc" "^0.3.10" - child-process-promise "^2.2.1" + "@daybrush/jsdoc" "^0.4.5" + commander "^9.4.1" fs-extra "^10.0.0" + jsdoc-parse "^6.2.0" jsdoc-to-markdown "^7.0.1" tmp-promise "^3.0.3" @@ -16386,11 +16419,6 @@ node-sass@^6.0.0: stdout-stream "^1.4.0" "true-case-path" "^1.0.2" -node-version@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/node-version/-/node-version-1.2.0.tgz#34fde3ffa8e1149bd323983479dda620e1b5060d" - integrity sha512-ma6oU4Sk0qOoKEAymVoTvk8EdXEobdS7m/mAGhDJ8Rouugho48crHBORAmy5BoOcv8wraPM6xumapQp5hl4iIQ== - nopt@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" @@ -18962,11 +18990,6 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== -promise-polyfill@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.1.0.tgz#dfa96943ea9c121fca4de9b5868cb39d3472e057" - integrity sha512-g0LWaH0gFsxovsU7R5LrrhHhWAWiHRnh1GPrhXnPgYsDkIqjRYUYSZEsej/wtleDrz5xVSIDbeKfidztp2XHFQ== - promise-retry@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" @@ -21363,7 +21386,7 @@ sorcery@^0.10.0: sander "^0.5.0" sourcemap-codec "^1.3.0" -sort-array@^4.1.4: +sort-array@^4.1.4, sort-array@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/sort-array/-/sort-array-4.1.5.tgz#64b92aaba222aec606786f4df28ae4e3e3e68313" integrity sha512-Ya4peoS1fgFN42RN1REk2FgdNOeLIEMKFGJvs7VTP3OklF8+kl2SkpVliZ4tk/PurWsrWRsdNdU+tgyOBkB9sA==